SF.net SVN: geany: [1381] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Sat Mar 10 12:27:55 UTC 2007


Revision: 1381
          http://svn.sourceforge.net/geany/?rev=1381&view=rev
Author:   ntrel
Date:     2007-03-10 04:27:55 -0800 (Sat, 10 Mar 2007)

Log Message:
-----------
Separate New Project dialog from Project Properties dialog.
Make Properties Filename field read-only, below Name field.
Capitalize dialog titles.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/project.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-03-09 18:14:34 UTC (rev 1380)
+++ trunk/ChangeLog	2007-03-10 12:27:55 UTC (rev 1381)
@@ -1,3 +1,11 @@
+2007-03-10  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * src/project.c:
+   Separate New Project dialog from Project Properties dialog.
+   Make Properties Filename field read-only, below Name field.
+   Capitalize dialog titles.
+
+
 2007-03-09  Enrico Tröger  <enrico.troeger at uvena.de>
 
  * src/callbacks.c, src/encodings.c, src/encodings.h, highlighting.c,

Modified: trunk/src/project.c
===================================================================
--- trunk/src/project.c	2007-03-09 18:14:34 UTC (rev 1380)
+++ trunk/src/project.c	2007-03-10 12:27:55 UTC (rev 1381)
@@ -81,9 +81,104 @@
 
 void project_new()
 {
+	GtkWidget *vbox;
+	GtkWidget *table;
+	GtkWidget *image;
+	GtkWidget *button;
+	GtkWidget *bbox;
+	GtkWidget *label;
+	PropertyDialogElements *e;
+
 	if (! close_open_project()) return;
 
-	project_properties();
+	g_return_if_fail(app->project == NULL);
+
+	e = g_new0(PropertyDialogElements, 1);
+	e->dialog = gtk_dialog_new_with_buttons(_("New Project"), GTK_WINDOW(app->window),
+										 GTK_DIALOG_DESTROY_WITH_PARENT,
+										 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+
+	bbox = gtk_hbox_new(FALSE, 0);
+	button = gtk_button_new();
+	image = gtk_image_new_from_stock("gtk-new", GTK_ICON_SIZE_BUTTON);
+	label = gtk_label_new_with_mnemonic(_("C_reate"));
+	gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 3);
+	gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 3);
+	gtk_container_add(GTK_CONTAINER(button), bbox);
+	gtk_dialog_add_action_widget(GTK_DIALOG(e->dialog), button, GTK_RESPONSE_OK);
+
+	vbox = ui_dialog_vbox_new(GTK_DIALOG(e->dialog));
+
+	entries_modified = FALSE;
+
+	table = gtk_table_new(3, 2, FALSE);
+	gtk_table_set_row_spacings(GTK_TABLE(table), 5);
+	gtk_table_set_col_spacings(GTK_TABLE(table), 10);
+
+	label = gtk_label_new(_("Name:"));
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+					(GtkAttachOptions) (GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+	gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+
+	e->name = gtk_entry_new();
+	gtk_entry_set_max_length(GTK_ENTRY(e->name), MAX_NAME_LEN);
+	gtk_table_attach(GTK_TABLE(table), e->name, 1, 2, 0, 1,
+					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+
+	label = gtk_label_new(_("Filename:"));
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+					(GtkAttachOptions) (GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+	gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+
+	e->file_name = gtk_entry_new();
+	gtk_entry_set_width_chars(GTK_ENTRY(e->file_name), 30);
+	button = gtk_button_new();
+	g_signal_connect((gpointer) button, "clicked",
+				G_CALLBACK(on_file_save_button_clicked), e->file_name);
+	image = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON);
+	gtk_container_add(GTK_CONTAINER(button), image);
+	bbox = gtk_hbox_new(FALSE, 6);
+	gtk_box_pack_start_defaults(GTK_BOX(bbox), e->file_name);
+	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
+	gtk_table_attach(GTK_TABLE(table), bbox, 1, 2, 1, 2,
+					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+
+	label = gtk_label_new(_("Base path:"));
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
+					(GtkAttachOptions) (GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+	gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+
+	e->base_path = gtk_entry_new();
+	button = gtk_button_new();
+	g_signal_connect((gpointer) button, "clicked",
+				G_CALLBACK(on_folder_open_button_clicked), e->base_path);
+	image = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON);
+	gtk_container_add(GTK_CONTAINER(button), image);
+	bbox = gtk_hbox_new(FALSE, 6);
+	gtk_box_pack_start_defaults(GTK_BOX(bbox), e->base_path);
+	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
+	gtk_table_attach(GTK_TABLE(table), bbox, 1, 2, 2, 3,
+					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+
+	gtk_container_add(GTK_CONTAINER(vbox), table);
+
+	// signals
+	g_signal_connect((gpointer) e->name, "changed", G_CALLBACK(on_name_entry_changed), e);
+	// run the callback manually to initialise the base_path and file_name fields
+	on_name_entry_changed(GTK_EDITABLE(e->name), e);
+
+	g_signal_connect((gpointer) e->file_name, "changed", G_CALLBACK(on_entries_changed), e);
+	g_signal_connect((gpointer) e->base_path, "changed", G_CALLBACK(on_entries_changed), e);
+	g_signal_connect((gpointer) e->dialog, "response",
+				G_CALLBACK(on_properties_dialog_response), e);
+
+	gtk_widget_show_all(e->dialog);
 }
 
 
@@ -99,7 +194,7 @@
 	if (! close_open_project()) return;
 
 #ifdef G_OS_WIN32
-	file = win32_show_project_open_dialog(_("Open project"), dir, FALSE);
+	file = win32_show_project_open_dialog(_("Open Project"), dir, FALSE);
 	if (file != NULL)
 	{
 		load_config(file);
@@ -107,7 +202,7 @@
 	}
 #else
 
-	dialog = gtk_file_chooser_dialog_new(_("Open project"), GTK_WINDOW(app->window),
+	dialog = gtk_file_chooser_dialog_new(_("Open Project"), GTK_WINDOW(app->window),
 			GTK_FILE_CHOOSER_ACTION_OPEN,
 			GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 			GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
@@ -173,27 +268,15 @@
 	GtkWidget *swin;
 	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
 	PropertyDialogElements *e = g_new(PropertyDialogElements, 1);
+	GeanyProject *p = app->project;
 
-	e->dialog = gtk_dialog_new_with_buttons(_("Project properties"), GTK_WINDOW(app->window),
+	g_return_if_fail(app->project != NULL);
+
+	e->dialog = gtk_dialog_new_with_buttons(_("Project Properties"), GTK_WINDOW(app->window),
 										 GTK_DIALOG_DESTROY_WITH_PARENT,
 										 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+	gtk_dialog_add_buttons(GTK_DIALOG(e->dialog), GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
 
-	if (app->project == NULL)
-	{
-		bbox = gtk_hbox_new(FALSE, 0);
-		button = gtk_button_new();
-		image = gtk_image_new_from_stock("gtk-new", GTK_ICON_SIZE_BUTTON);
-		label = gtk_label_new_with_mnemonic(_("C_reate"));
-		gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 3);
-		gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 3);
-		gtk_container_add(GTK_CONTAINER(button), bbox);
-		gtk_dialog_add_action_widget(GTK_DIALOG(e->dialog), button, GTK_RESPONSE_OK);
-	}
-	else
-	{
-		gtk_dialog_add_buttons(GTK_DIALOG(e->dialog), GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
-	}
-
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(e->dialog));
 
 	entries_modified = FALSE;
@@ -214,9 +297,21 @@
 					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
 					(GtkAttachOptions) (0), 0, 0);
 
-	label = gtk_label_new(_("Description:"));
+	label = gtk_label_new(_("Filename:"));
 	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
 					(GtkAttachOptions) (GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+	gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+
+	e->file_name = gtk_entry_new();
+	gtk_editable_set_editable(GTK_EDITABLE(e->file_name), FALSE);	// read-only
+	gtk_table_attach(GTK_TABLE(table), e->file_name, 1, 2, 1, 2,
+					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+					(GtkAttachOptions) (0), 0, 0);
+
+	label = gtk_label_new(_("Description:"));
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
+					(GtkAttachOptions) (GTK_FILL),
 					(GtkAttachOptions) (GTK_FILL), 0, 0);
 	gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
 
@@ -227,29 +322,10 @@
 	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
 				GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), GTK_WIDGET(e->description));
-	gtk_table_attach(GTK_TABLE(table), swin, 1, 2, 1, 2,
+	gtk_table_attach(GTK_TABLE(table), swin, 1, 2, 2, 3,
 					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
 					(GtkAttachOptions) (0), 0, 0);
 
-	label = gtk_label_new(_("Filename:"));
-	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
-					(GtkAttachOptions) (GTK_FILL),
-					(GtkAttachOptions) (0), 0, 0);
-	gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
-
-	e->file_name = gtk_entry_new();
-	button = gtk_button_new();
-	g_signal_connect((gpointer) button, "clicked",
-				G_CALLBACK(on_file_save_button_clicked), e->file_name);
-	image = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON);
-	gtk_container_add(GTK_CONTAINER(button), image);
-	bbox = gtk_hbox_new(FALSE, 6);
-	gtk_box_pack_start_defaults(GTK_BOX(bbox), e->file_name);
-	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
-	gtk_table_attach(GTK_TABLE(table), bbox, 1, 2, 2, 3,
-					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-					(GtkAttachOptions) (0), 0, 0);
-
 	label = gtk_label_new(_("Base path:"));
 	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
 					(GtkAttachOptions) (GTK_FILL),
@@ -309,61 +385,44 @@
 					(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
 					(GtkAttachOptions) (0), 0, 0);
 
-
-
 	gtk_container_add(GTK_CONTAINER(vbox), table);
 
-	// signals
-	if (app->project == NULL)
-	{	// this should only be done when we are about to create a new project
-		g_signal_connect((gpointer) e->name, "changed", G_CALLBACK(on_name_entry_changed), e);
-		// run the callback manually to initialise the base_path and file_name fields
-		on_name_entry_changed(GTK_EDITABLE(e->name), e);
-
-		g_signal_connect((gpointer) e->file_name, "changed", G_CALLBACK(on_entries_changed), e);
-		g_signal_connect((gpointer) e->base_path, "changed", G_CALLBACK(on_entries_changed), e);
-	}
 	g_signal_connect((gpointer) e->dialog, "response",
 				G_CALLBACK(on_properties_dialog_response), e);
 
-	// if we have an already open project, fill the elements with the appropriate data
-	if (app->project != NULL)
-	{
-		GeanyProject *p = app->project;
+	// fill the elements with the appropriate data
+	gtk_entry_set_text(GTK_ENTRY(e->name), p->name);
 
-		gtk_entry_set_text(GTK_ENTRY(e->name), p->name);
+	if (p->description != NULL)
+	{	// set text
+		GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->description));
+		gtk_text_buffer_set_text(buffer, p->description, -1);
+	}
 
-		if (p->description != NULL)
-		{	// set text
-			GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->description));
-			gtk_text_buffer_set_text(buffer, p->description, -1);
-		}
+	if (p->file_patterns != NULL)
+	{	// set the file patterns
+		gint i;
+		gint len = g_strv_length(p->file_patterns);
+		GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->patterns));
+		GString *str = g_string_sized_new(len * 4);
 
-		if (p->file_patterns != NULL)
-		{	// set the file patterns
-			gint i;
-			gint len = g_strv_length(p->file_patterns);
-			GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->patterns));
-			GString *str = g_string_sized_new(len * 4);
-
-			for (i = 0; i < len; i++)
+		for (i = 0; i < len; i++)
+		{
+			if (p->file_patterns[i] != NULL)
 			{
-				if (p->file_patterns[i] != NULL)
-				{
-					g_string_append(str, p->file_patterns[i]);
-					g_string_append_c(str, '\n');
-				}
+				g_string_append(str, p->file_patterns[i]);
+				g_string_append_c(str, '\n');
 			}
-			gtk_text_buffer_set_text(buffer, str->str, -1);
-			g_string_free(str, TRUE);
 		}
-
-		gtk_entry_set_text(GTK_ENTRY(e->file_name), p->file_name);
-		gtk_entry_set_text(GTK_ENTRY(e->base_path), p->base_path);
-		if (p->run_cmd != NULL)
-			gtk_entry_set_text(GTK_ENTRY(e->run_cmd), p->run_cmd);
+		gtk_text_buffer_set_text(buffer, str->str, -1);
+		g_string_free(str, TRUE);
 	}
 
+	gtk_entry_set_text(GTK_ENTRY(e->file_name), p->file_name);
+	gtk_entry_set_text(GTK_ENTRY(e->base_path), p->base_path);
+	if (p->run_cmd != NULL)
+		gtk_entry_set_text(GTK_ENTRY(e->run_cmd), p->run_cmd);
+
 	gtk_widget_show_all(e->dialog);
 }
 
@@ -392,6 +451,7 @@
 }
 
 
+/* Also used for New Project dialog response. */
 static void on_properties_dialog_response(GtkDialog *dialog, gint response,
 										  PropertyDialogElements *e)
 {
@@ -469,28 +529,33 @@
 
 		if (p->name != NULL) g_free(p->name);
 		p->name = g_strdup(name);
-		{	// get and set the project description
-			GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->description));
-			GtkTextIter start, end;
-			gtk_text_buffer_get_start_iter(buffer, &start);
-			gtk_text_buffer_get_end_iter(buffer, &end);
-			p->description = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
-		}
+
 		if (p->file_name != NULL) g_free(p->file_name);
 		p->file_name = g_strdup(file_name);
 
 		if (p->base_path != NULL) g_free(p->base_path);
 		p->base_path = g_strdup(base_path);
 
-		if (p->run_cmd != NULL) g_free(p->run_cmd);
-		p->run_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->run_cmd)));
-
-		{	// get and set the project file patterns
-			GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->patterns));
+		if (! new_project)	// save properties specific fields
+		{
 			GtkTextIter start, end;
 			gchar *tmp;
+			GtkTextBuffer *buffer;
+
+			if (p->run_cmd != NULL) g_free(p->run_cmd);
+			p->run_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->run_cmd)));
+
+			// get and set the project description
+			buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->description));
 			gtk_text_buffer_get_start_iter(buffer, &start);
 			gtk_text_buffer_get_end_iter(buffer, &end);
+			g_free(p->description);
+			p->description = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+
+			// get and set the project file patterns
+			buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->patterns));
+			gtk_text_buffer_get_start_iter(buffer, &start);
+			gtk_text_buffer_get_end_iter(buffer, &end);
 			tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
 			g_strfreev(p->file_patterns);
 			p->file_patterns = g_strsplit(tmp, "\n", -1);
@@ -541,7 +606,7 @@
 static void on_file_save_button_clicked(GtkButton *button, GtkWidget *entry)
 {
 #ifdef G_OS_WIN32
-	gchar *path = win32_show_project_open_dialog(_("Choose project filename"),
+	gchar *path = win32_show_project_open_dialog(_("Choose Project Filename"),
 						gtk_entry_get_text(GTK_ENTRY(entry)), TRUE);
 	if (path != NULL)
 	{
@@ -552,7 +617,7 @@
 	GtkWidget *dialog;
 
 	// initialise the dialog
-	dialog = gtk_file_chooser_dialog_new(_("Choose project filename"), NULL,
+	dialog = gtk_file_chooser_dialog_new(_("Choose Project Filename"), NULL,
 					GTK_FILE_CHOOSER_ACTION_SAVE,
 					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 					GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
@@ -569,7 +634,7 @@
 static void on_folder_open_button_clicked(GtkButton *button, GtkWidget *entry)
 {
 #ifdef G_OS_WIN32
-	gchar *path = win32_show_project_folder_dialog(_("Choose project base path"),
+	gchar *path = win32_show_project_folder_dialog(_("Choose Project Base Path"),
 						gtk_entry_get_text(GTK_ENTRY(entry)));
 	if (path != NULL)
 	{
@@ -580,7 +645,7 @@
 	GtkWidget *dialog;
 
 	// initialise the dialog
-	dialog = gtk_file_chooser_dialog_new(_("Choose project base path"), NULL,
+	dialog = gtk_file_chooser_dialog_new(_("Choose Project Base Path"), NULL,
 					GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
 					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
@@ -597,7 +662,7 @@
 static void on_file_open_button_clicked(GtkButton *button, GtkWidget *entry)
 {
 #ifdef G_OS_WIN32
-	gchar *path = win32_show_project_open_dialog(_("Choose project run command"),
+	gchar *path = win32_show_project_open_dialog(_("Choose Project Run Command"),
 						gtk_entry_get_text(GTK_ENTRY(entry)), FALSE);
 	if (path != NULL)
 	{
@@ -608,7 +673,7 @@
 	GtkWidget *dialog;
 
 	// initialise the dialog
-	dialog = gtk_file_chooser_dialog_new(_("Choose project run command"), NULL,
+	dialog = gtk_file_chooser_dialog_new(_("Choose Project Run Command"), NULL,
 					GTK_FILE_CHOOSER_ACTION_OPEN,
 					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
@@ -746,12 +811,16 @@
 	g_key_file_load_from_file(config, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
 
 	g_key_file_set_string(config, "project", "name", p->name);
-	g_key_file_set_string(config, "project", "description", p->description);
 	g_key_file_set_string(config, "project", "base_path", p->base_path);
-	g_key_file_set_string(config, "project", "run_cmd", p->run_cmd);
-	g_key_file_set_string_list(config, "project", "file_patterns",
-		(const gchar**) p->file_patterns, g_strv_length(p->file_patterns));
 
+	if (p->description)
+		g_key_file_set_string(config, "project", "description", p->description);
+	if (p->run_cmd)
+		g_key_file_set_string(config, "project", "run_cmd", p->run_cmd);
+	if (p->file_patterns)
+		g_key_file_set_string_list(config, "project", "file_patterns",
+			(const gchar**) p->file_patterns, g_strv_length(p->file_patterns));
+
 	// write the file
 	data = g_key_file_to_data(config, NULL, NULL);
 	ret = (utils_write_file(filename, data) == 0);
@@ -772,3 +841,4 @@
 		return NULL;
 }
 
+


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list