From 39c89512e02f1f35f3f27eef036c65ee5c00e9d2 Mon Sep 17 00:00:00 2001 From: Phil Longstaff Date: Tue, 10 Mar 2009 17:41:52 +0000 Subject: [PATCH] Replace radio buttons with a combo box. A bit ugly because I haven't figured out how to keep the combo box from expanding to fill the space. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@17989 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/gnome-utils/dialog-file-access.c | 163 ++++++------------ .../glade/dialog-file-access.glade | 63 +------ 2 files changed, 62 insertions(+), 164 deletions(-) diff --git a/src/gnome-utils/dialog-file-access.c b/src/gnome-utils/dialog-file-access.c index 47ef236e5b..b910ef2342 100644 --- a/src/gnome-utils/dialog-file-access.c +++ b/src/gnome-utils/dialog-file-access.c @@ -42,10 +42,7 @@ static QofLogModule log_module = GNC_MOD_GUI; #define FILE_ACCESS_SAVE_AS 1 void gnc_ui_file_access_response_cb( GtkDialog *, gint, GtkDialog * ); -void gnc_ui_file_access_rb_xml_clicked_cb( GtkToggleButton* tb ); -void gnc_ui_file_access_rb_sqlite3_clicked_cb( GtkToggleButton* tb ); -void gnc_ui_file_access_rb_mysql_clicked_cb( GtkToggleButton* tb ); -void gnc_ui_file_access_rb_pgsql_clicked_cb( GtkToggleButton* tb ); +static void cb_uri_type_changed_cb( GtkComboBox* cb ); typedef struct FileAccessWindow { @@ -56,14 +53,11 @@ typedef struct FileAccessWindow GtkWidget* frame_file; GtkWidget* frame_database; GtkFileChooser* fileChooser; - GtkWidget* rb_xml; - GtkWidget* rb_sqlite3; - GtkWidget* rb_mysql; - GtkWidget* rb_pgsql; - GtkWidget* tf_host; - GtkWidget* tf_database; - GtkWidget* tf_username; - GtkWidget* tf_password; + GtkComboBox* cb_uri_type; + GtkEntry* tf_host; + GtkEntry* tf_database; + GtkEntry* tf_username; + GtkEntry* tf_password; } FileAccessWindow; static gchar* @@ -77,24 +71,25 @@ geturl( FileAccessWindow* faw ) const gchar* type; const gchar* file; - host = gtk_entry_get_text( GTK_ENTRY(faw->tf_host) ); - database = gtk_entry_get_text( GTK_ENTRY(faw->tf_database) ); - username = gtk_entry_get_text( GTK_ENTRY(faw->tf_username) ); - password = gtk_entry_get_text( GTK_ENTRY(faw->tf_password) ); + host = gtk_entry_get_text( faw->tf_host ); + database = gtk_entry_get_text( faw->tf_database ); + username = gtk_entry_get_text( faw->tf_username ); + password = gtk_entry_get_text( faw->tf_password ); file = gtk_file_chooser_get_filename( faw->fileChooser ); - if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(faw->rb_xml) ) ) { + type = gtk_combo_box_get_active_text( faw->cb_uri_type ); + if( strcmp( type, "xml" ) == 0 ) { type = "xml"; url = g_strdup_printf( "%s://%s", type, file ); - } else if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(faw->rb_sqlite3) ) ) { + } else if( strcmp( type, "sqlite3" ) == 0 ) { type = "sqlite3"; url = g_strdup_printf( "%s://%s", type, file ); - } else if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(faw->rb_mysql) ) ) { + } else if( strcmp( type, "mysql" ) == 0 ) { type = "mysql"; url = g_strdup_printf( "%s://%s:%s:%s:%s", type, host, database, username, password ); } else { - g_assert( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(faw->rb_pgsql) ) ); + g_assert( strcmp( type, "postgres" ) == 0 ); type = "postgres"; url = g_strdup_printf( "%s://%s:%s:%s:%s", type, host, database, username, password ); @@ -143,86 +138,40 @@ gnc_ui_file_access_response_cb(GtkDialog *dialog, gint response, GtkDialog *unus /* Activate the file chooser and deactivate the db selection fields */ static void -on_rb_filetype_clicked( FileAccessWindow* faw ) +set_widget_sensitivity( FileAccessWindow* faw, gboolean is_file_based_uri ) { - gtk_widget_set_sensitive( faw->frame_file, TRUE ); - gtk_widget_set_sensitive( faw->frame_database, FALSE ); + gtk_widget_set_sensitive( faw->frame_file, is_file_based_uri ); + gtk_widget_set_sensitive( faw->frame_database, !is_file_based_uri ); } -void -gnc_ui_file_access_rb_xml_clicked_cb( GtkToggleButton* tb ) -{ - GtkWidget* dialog; - FileAccessWindow* faw; - - g_return_if_fail( tb != NULL ); - - if( gtk_toggle_button_get_active( tb ) ) { - dialog = gtk_widget_get_toplevel( GTK_WIDGET(tb) ); - g_return_if_fail( dialog != NULL ); - faw = g_object_get_data( G_OBJECT(dialog), "FileAccessWindow" ); - g_return_if_fail( faw != NULL ); - - on_rb_filetype_clicked( faw ); - } -} - -void -gnc_ui_file_access_rb_sqlite3_clicked_cb( GtkToggleButton* tb ) +static void +set_widget_sensitivity_for_uri_type( FileAccessWindow* faw, const gchar* uri_type ) { - GtkWidget* dialog; - FileAccessWindow* faw; - - if( gtk_toggle_button_get_active( tb ) ) { - dialog = gtk_widget_get_toplevel( GTK_WIDGET(tb) ); - g_return_if_fail( dialog != NULL ); - faw = g_object_get_data( G_OBJECT(dialog), "FileAccessWindow" ); - g_return_if_fail( faw != NULL ); - - on_rb_filetype_clicked( faw ); + if( strcmp( uri_type, "xml" ) == 0 || strcmp( uri_type, "sqlite3" ) == 0 ) { + set_widget_sensitivity( faw, /* is_file_based_uri */ TRUE ); + } else if( strcmp( uri_type, "mysql" ) == 0 || strcmp( uri_type, "postgres" ) == 0 ) { + set_widget_sensitivity( faw, /* is_file_based_uri */ FALSE ); + } else { + g_assert( FALSE ); } } -/* Deactivate the file chooser and activate the db selection fields */ static void -on_rb_databasetype_clicked( FileAccessWindow* faw ) -{ - gtk_widget_set_sensitive( faw->frame_file, FALSE ); - gtk_widget_set_sensitive( faw->frame_database, TRUE ); -} - -void -gnc_ui_file_access_rb_mysql_clicked_cb( GtkToggleButton* tb ) +cb_uri_type_changed_cb( GtkComboBox* cb ) { GtkWidget* dialog; FileAccessWindow* faw; + const gchar* type; - if( gtk_toggle_button_get_active( tb ) ) { - g_return_if_fail( tb != NULL ); - dialog = gtk_widget_get_toplevel( GTK_WIDGET(tb) ); - g_return_if_fail( dialog != NULL ); - faw = g_object_get_data( G_OBJECT(dialog), "FileAccessWindow" ); - g_return_if_fail( faw != NULL ); - - on_rb_databasetype_clicked( faw ); - } -} + g_return_if_fail( cb != NULL ); -void -gnc_ui_file_access_rb_pgsql_clicked_cb( GtkToggleButton* tb ) -{ - GtkWidget* dialog; - FileAccessWindow* faw; - - if( gtk_toggle_button_get_active( tb ) ) { - g_return_if_fail( tb != NULL ); - dialog = gtk_widget_get_toplevel( GTK_WIDGET(tb) ); - g_return_if_fail( dialog != NULL ); - faw = g_object_get_data( G_OBJECT(dialog), "FileAccessWindow" ); - g_return_if_fail( faw != NULL ); + dialog = gtk_widget_get_toplevel( GTK_WIDGET(cb) ); + g_return_if_fail( dialog != NULL ); + faw = g_object_get_data( G_OBJECT(dialog), "FileAccessWindow" ); + g_return_if_fail( faw != NULL ); - on_rb_databasetype_clicked( faw ); - } + type = gtk_combo_box_get_active_text( cb ); + set_widget_sensitivity_for_uri_type( faw, type ); } static void @@ -238,6 +187,7 @@ gnc_ui_file_access( int type ) GtkFileChooserAction fileChooserAction; GList* list; GList* node; + GtkWidget* uri_type_container; g_return_if_fail( type == FILE_ACCESS_OPEN || type == FILE_ACCESS_SAVE_AS ); @@ -252,16 +202,12 @@ gnc_ui_file_access( int type ) faw->frame_file = glade_xml_get_widget( xml, "frame_file" ); faw->frame_database = glade_xml_get_widget( xml, "frame_database" ); - faw->rb_xml = glade_xml_get_widget( xml, "rb_xml" ); - faw->rb_sqlite3 = glade_xml_get_widget( xml, "rb_sqlite3" ); - faw->rb_mysql = glade_xml_get_widget( xml, "rb_mysql" ); - faw->rb_pgsql = glade_xml_get_widget( xml, "rb_pgsql" ); - faw->tf_host = glade_xml_get_widget( xml, "tf_host" ); - gtk_entry_set_text( GTK_ENTRY(faw->tf_host), DEFAULT_HOST ); - faw->tf_database = glade_xml_get_widget( xml, "tf_database" ); - gtk_entry_set_text( GTK_ENTRY(faw->tf_database), DEFAULT_DATABASE ); - faw->tf_username = glade_xml_get_widget( xml, "tf_username" ); - faw->tf_password = glade_xml_get_widget( xml, "tf_password" ); + faw->tf_host = GTK_ENTRY(glade_xml_get_widget( xml, "tf_host" )); + gtk_entry_set_text( faw->tf_host, DEFAULT_HOST ); + faw->tf_database = GTK_ENTRY(glade_xml_get_widget( xml, "tf_database" )); + gtk_entry_set_text( faw->tf_database, DEFAULT_DATABASE ); + faw->tf_username = GTK_ENTRY(glade_xml_get_widget( xml, "tf_username" )); + faw->tf_password = GTK_ENTRY(glade_xml_get_widget( xml, "tf_password" )); op = GTK_BUTTON(glade_xml_get_widget( xml, "pb_op" )); if( op != NULL ) { switch( type ) { @@ -282,27 +228,29 @@ gnc_ui_file_access( int type ) faw->fileChooser = GTK_FILE_CHOOSER(fileChooser); gtk_container_add( GTK_CONTAINER(align), GTK_WIDGET(fileChooser) ); + uri_type_container = glade_xml_get_widget( xml, "vb_uri_type_container" ); + faw->cb_uri_type = GTK_COMBO_BOX(gtk_combo_box_new_text()); + gtk_container_add( GTK_CONTAINER(uri_type_container), GTK_WIDGET(faw->cb_uri_type) ); + g_object_connect( G_OBJECT(faw->cb_uri_type), "signal::changed", cb_uri_type_changed_cb, NULL ); + /* Autoconnect signals */ glade_xml_signal_autoconnect_full( xml, gnc_glade_autoconnect_full_func, faw->dialog ); - /* See what qof backends are available, and disable sqlite3, mysql and postgres if not - available */ - gtk_widget_set_sensitive( faw->rb_sqlite3, FALSE ); - gtk_widget_set_sensitive( faw->rb_mysql, FALSE ); - gtk_widget_set_sensitive( faw->rb_pgsql, FALSE ); + /* See what qof backends are available and add appropriate ones to the combo box */ list = qof_backend_get_registered_access_method_list(); for( node = list; node != NULL; node = node->next ) { const gchar* access_method = node->data; - if( strcmp( access_method, "sqlite3" ) == 0 ) { - gtk_widget_set_sensitive( faw->rb_sqlite3, TRUE ); - } else if( strcmp( access_method, "mysql" ) == 0 ) { - gtk_widget_set_sensitive( faw->rb_mysql, TRUE ); - } else if( strcmp( access_method, "postgres" ) == 0 ) { - gtk_widget_set_sensitive( faw->rb_pgsql, TRUE ); + if( strcmp( access_method, "xml" ) == 0 || + strcmp( access_method, "sqlite3" ) == 0 || + strcmp( access_method, "mysql" ) == 0 || + strcmp( access_method, "postgres" ) == 0 ) { + gtk_combo_box_append_text( faw->cb_uri_type, access_method ); } } g_list_free(list); + gtk_combo_box_set_active( faw->cb_uri_type, 0 ); + set_widget_sensitivity_for_uri_type( faw, gtk_combo_box_get_active_text( faw->cb_uri_type ) ); /* Clean up the xml data structure when the dialog is destroyed */ g_object_set_data_full( G_OBJECT(faw->dialog), "dialog-file-access.glade", @@ -312,7 +260,6 @@ gnc_ui_file_access( int type ) /* Run the dialog */ gtk_widget_show_all( faw->dialog ); - on_rb_filetype_clicked( faw ); } void diff --git a/src/gnome-utils/glade/dialog-file-access.glade b/src/gnome-utils/glade/dialog-file-access.glade index 173da10273..860634272c 100644 --- a/src/gnome-utils/glade/dialog-file-access.glade +++ b/src/gnome-utils/glade/dialog-file-access.glade @@ -1,6 +1,6 @@ - + 5 @@ -18,65 +18,16 @@ True - + True - - True - True - XML - 0 - True - True - rb_sqlite3 - - - - - - True - True - SQLite3 - 0 - True - True - - - - 1 - - - - - True - True - MySQL - 0 - True - True - rb_xml - - - - 2 - - - - - True - True - PostgreSQL - 0 - True - True - rb_xml - - - - 3 - + + + False + False +