SF.net SVN: geany: [1203] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Thu Jan 18 22:13:51 UTC 2007
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 at 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.
More information about the Commits
mailing list