Revision: 1203 http://svn.sourceforge.net/geany/?rev=1203&view=rev Author: eht16 Date: 2007-01-18 14:13:50 -0800 (Thu, 18 Jan 2007)
Log Message: ----------- Implemented project open dialog, but open doesn't do anything yet. Added GEANY_PROJECT_EXT macro.
Modified Paths: -------------- trunk/ChangeLog trunk/src/geany.h trunk/src/project.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-01-18 18:48:43 UTC (rev 1202) +++ trunk/ChangeLog 2007-01-18 22:13:50 UTC (rev 1203) @@ -2,6 +2,9 @@
* src/project.c: Do not auto complete project filename and base path when they were changed manually. + * src/geany.h, src/project.c: + Implemented project open dialog, but open doesn't do anything yet. + Added GEANY_PROJECT_EXT macro.
2007-01-18 Nick Treleaven nick.treleaven@btinternet.com
Modified: trunk/src/geany.h =================================================================== --- trunk/src/geany.h 2007-01-18 18:48:43 UTC (rev 1202) +++ trunk/src/geany.h 2007-01-18 22:13:50 UTC (rev 1203) @@ -40,6 +40,7 @@ #define GEANY_TEMPLATES_SUBDIR "templates" #define GEANY_CODENAME "Bandor" #define GEANY_HOMEPAGE "http://geany.uvena.de/" +#define GEANY_PROJECT_EXT "geany" #define GEANY_USE_WIN32_DIALOG 0 #define GEANY_CHECK_FILE_DELAY 30 #define GEANY_WORDCHARS "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
Modified: trunk/src/project.c =================================================================== --- trunk/src/project.c 2007-01-18 18:48:43 UTC (rev 1202) +++ trunk/src/project.c 2007-01-18 22:13:50 UTC (rev 1203) @@ -54,11 +54,17 @@ PropertyDialogElements *e); static void on_file_open_button_clicked(GtkButton *button, GtkWidget *entry); static void on_folder_open_button_clicked(GtkButton *button, GtkWidget *entry); +static void on_open_dialog_response(GtkDialog *dialog, gint response, gpointer user_data); static gboolean close_open_project(); +static gboolean load_config(const gchar *filename); static void on_name_entry_changed(GtkEditable *editable, PropertyDialogElements *e); static void on_entries_changed(GtkEditable *editable, PropertyDialogElements *e);
+#define SHOW_ERR(...) dialogs_show_msgbox(GTK_MESSAGE_ERROR, __VA_ARGS__) +#define MAX_NAME_LEN 50 + + void project_new() { if (! close_open_project()) return; @@ -69,9 +75,44 @@
void project_open() { +#ifndef G_OS_WIN32 + GtkWidget *dialog; + GtkFileFilter *filter; +#endif if (! close_open_project()) return;
+#ifdef G_OS_WIN32 + win32_show_file_dialog(TRUE); +#else
+ 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); + + // set default Open, so pressing enter can open multiple files + gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); + gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); + gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE); + gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG); + gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(app->window)); + gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); + + // add FileFilters + filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, _("All files")); + gtk_file_filter_add_pattern(filter, "*"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); + filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, _("Project files")); + gtk_file_filter_add_pattern(filter, "*." GEANY_PROJECT_EXT); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); + gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); + + g_signal_connect ((gpointer) dialog, "response", G_CALLBACK(on_open_dialog_response), NULL); + + gtk_widget_show_all(dialog); +#endif }
@@ -281,9 +322,6 @@ }
-#define SHOW_ERR(...) dialogs_show_msgbox(GTK_MESSAGE_ERROR, __VA_ARGS__) -#define MAX_LEN 50 - static void on_properties_dialog_response(GtkDialog *dialog, gint response, PropertyDialogElements *e) { @@ -301,9 +339,9 @@ gtk_widget_grab_focus(e->name); return; } - else if (name_len > MAX_LEN) + else if (name_len > MAX_NAME_LEN) { - SHOW_ERR(_("The specified project name is too long (max. %d characters)."), MAX_LEN); + SHOW_ERR(_("The specified project name is too long (max. %d characters)."), MAX_NAME_LEN); gtk_widget_grab_focus(e->name); return; } @@ -383,6 +421,32 @@ }
+static void run_dialog(GtkWidget *dialog, GtkWidget *entry) +{ + // set filename + gchar *locale_filename = utils_get_locale_from_utf8(gtk_entry_get_text(GTK_ENTRY(entry))); + + if (g_path_is_absolute(locale_filename)) + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), locale_filename); + else + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), locale_filename); + g_free(locale_filename); + + // run it + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + gchar *utf8_filename = utils_get_utf8_from_locale(filename); + + gtk_entry_set_text(GTK_ENTRY(entry), utf8_filename); + + g_free(utf8_filename); + g_free(filename); + } + gtk_widget_destroy(dialog); +} + + static void on_file_open_button_clicked(GtkButton *button, GtkWidget *entry) { #ifdef G_OS_WIN32 @@ -401,29 +465,7 @@ gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
- { // set filename - gchar *locale_filename = utils_get_locale_from_utf8(gtk_entry_get_text(GTK_ENTRY(entry))); - - if (g_path_is_absolute(locale_filename)) - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), locale_filename); - else - gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), locale_filename); - g_free(locale_filename); - } - - // run it - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) - { - gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - gchar *utf8_filename = utils_get_utf8_from_locale(filename); - - gtk_entry_set_text(GTK_ENTRY(entry), utf8_filename); - - g_free(utf8_filename); - g_free(filename); - } - - gtk_widget_destroy(dialog); + run_dialog(dialog, entry); #endif }
@@ -446,29 +488,7 @@ gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
- { // set filename - gchar *locale_filename = utils_get_locale_from_utf8(gtk_entry_get_text(GTK_ENTRY(entry))); - - if (g_path_is_absolute(locale_filename)) - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), locale_filename); - else - gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), locale_filename); - g_free(locale_filename); - } - - // run it - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) - { - gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - gchar *utf8_filename = utils_get_utf8_from_locale(filename); - - gtk_entry_set_text(GTK_ENTRY(entry), utf8_filename); - - g_free(utf8_filename); - g_free(filename); - } - - gtk_widget_destroy(dialog); + run_dialog(dialog, entry); #endif }
@@ -495,7 +515,7 @@ name, G_DIR_SEPARATOR_S, NULL); file_name = g_strconcat( GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, - name, G_DIR_SEPARATOR_S, name, ".geany", NULL); + name, G_DIR_SEPARATOR_S, name, "." GEANY_PROJECT_EXT, NULL); g_free(name); } else @@ -503,7 +523,7 @@ base_path = g_strconcat( GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, NULL); file_name = g_strconcat( - GEANY_HOME_DIR, G_DIR_SEPARATOR_S,PROJECT_DIR, G_DIR_SEPARATOR_S, NULL); + GEANY_HOME_DIR, G_DIR_SEPARATOR_S, PROJECT_DIR, G_DIR_SEPARATOR_S, NULL); }
gtk_entry_set_text(GTK_ENTRY(e->base_path), base_path); @@ -520,3 +540,31 @@ { entries_modified = TRUE; } + + +static void on_open_dialog_response(GtkDialog *dialog, gint response, gpointer user_data) +{ + if (response == GTK_RESPONSE_ACCEPT) + { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + + // try to load the config + if (load_config(filename)) + gtk_widget_destroy(GTK_WIDGET(dialog)); + else + { + SHOW_ERR(_("Project file could not be loaded.")); + gtk_widget_grab_focus(GTK_WIDGET(dialog)); + } + g_free(filename); + } + else + gtk_widget_destroy(GTK_WIDGET(dialog)); +} + + +static gboolean load_config(const gchar *filename) +{ + /// TODO write me + return TRUE; +}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.