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
2.4
Phil Longstaff 17 years ago
parent c3b86442c0
commit 39c89512e0

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

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Thu Mar 5 16:47:47 2009 -->
<!--Generated with glade3 3.4.5 on Tue Mar 10 13:32:06 2009 -->
<glade-interface>
<widget class="GtkDialog" id="File Access">
<property name="border_width">5</property>
@ -18,65 +18,16 @@
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<child>
<widget class="GtkVBox" id="vbox2">
<widget class="GtkVBox" id="vb_uri_type_container">
<property name="visible">True</property>
<child>
<widget class="GtkRadioButton" id="rb_xml">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">XML</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">rb_sqlite3</property>
<signal name="clicked" handler="gnc_ui_file_access_rb_xml_clicked_cb"/>
</widget>
</child>
<child>
<widget class="GtkRadioButton" id="rb_sqlite3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">SQLite3</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<signal name="clicked" handler="gnc_ui_file_access_rb_sqlite3_clicked_cb"/>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="rb_mysql">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">MySQL</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">rb_xml</property>
<signal name="clicked" handler="gnc_ui_file_access_rb_mysql_clicked_cb"/>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="rb_pgsql">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">PostgreSQL</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">rb_xml</property>
<signal name="clicked" handler="gnc_ui_file_access_rb_pgsql_clicked_cb"/>
</widget>
<packing>
<property name="position">3</property>
</packing>
<placeholder/>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame_database">

Loading…
Cancel
Save