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@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@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.