Hi,
I finally wrote something which seems to do what I wanted. Of course, it
is far away from stable and lacks features. Anyway, I post it here :)
wagi
--
Daniel Wagner
email: [EMAIL PROTECTED]
GnuPG: 1024D/DCDE890A (public key available on any keyserver)
=== cd /usr/src/gnome/glade/glade/gnome-db/
=== cvs diff -u gnomedbbrowser.c
Index: gnomedbbrowser.c
===================================================================
RCS file: /cvs/gnome/glade/glade/gnome-db/gnomedbbrowser.c,v
retrieving revision 1.3
diff -u -r1.3 gnomedbbrowser.c
--- gnomedbbrowser.c 2001/02/23 01:06:57 1.3
+++ gnomedbbrowser.c 2001/03/26 23:03:00
@@ -24,18 +24,90 @@
/* Include the 21x21 icon pixmap for this widget, to be used in the palette */
#include "../graphics/gnome-db-browser.xpm"
+#define CONNECTION_INSTANCE_DATA "ConnectionInstanceData"
+
/*
* This is the GbWidget struct for this widget (see ../gbwidget.h).
* It is initialized in the init() function at the end of this file
*/
-static GbWidget gbwidget;
+typedef struct {
+ Gda_Connection* cnc;
+ GtkWidget* login_dialog;
+ gchar* gda_dsn;
+} connection_instance_data_t;
+static GbWidget gbwidget;
+static gchar *DbName = "GnomeDbBrowser::db_name";
+
/******
* NOTE: To use these functions you need to uncomment them AND add a pointer
* to the function in the GbWidget struct at the end of this file.
******/
+static connection_instance_data_t *
+get_current_connection_from_widget (GtkWidget *browser) {
+ if (browser)
+ {
+ return gtk_object_get_data (GTK_OBJECT (browser), CONNECTION_INSTANCE_DATA);
+ }
+ return NULL;
+}
+
+
+static void
+cancel_connecting_cb (GnomeDbLoginDlg *dlg, connection_instance_data_t *instance_data) {
+ g_return_if_fail(instance_data != NULL);
+
+ gnome_dialog_close (GNOME_DIALOG (instance_data->login_dialog));
+ gda_connection_free (instance_data->cnc);
+ g_free ((gpointer) instance_data);
+}
+
+
+static void
+error_in_connection_cb (Gda_Connection *cnc, connection_instance_data_t *instance_data) {
+ GtkWidget* error_dialog;
+
+ error_dialog = gnome_db_errordlg_new (cnc, _("Error Viewer"));
+ gnome_db_errordlg_show_errors (GNOME_DB_ERRORDLG (error_dialog));
+}
+
+
+static void
+connection_initiated_cb (GtkWidget *w, connection_instance_data_t *instance_data) {
+ GnomeDbLogin* login;
+ gchar* str;
+
+ g_return_if_fail (gda_connection_is_open (instance_data->cnc));
+ g_return_if_fail (instance_data != NULL);
+
+ /* get login dialog information */
+ login = GNOME_DB_LOGIN (GNOME_DB_LOGINDLG (instance_data->login_dialog)->login);
+ if (login)
+ str = gnome_db_login_get_gda_name(login);
+ else str = NULL;
+ gnome_dialog_close (GNOME_DIALOG (instance_data->login_dialog));
+ instance_data->login_dialog = NULL;
+ instance_data->gda_dsn = g_strdup (str);
+
+ gnome_db_browser_set_connection (GNOME_DB_BROWSER (property_get_widget ()), instance_data->cnc);
+
+ gtk_object_set_data (GTK_OBJECT (property_get_widget ()), CONNECTION_INSTANCE_DATA, instance_data);
+}
+
+
+static void
+connection_closed_cb (GtkWidget *w, connection_instance_data_t *instance_data) {
+ g_return_if_fail(instance_data != NULL);
+
+ gda_connection_free(instance_data->cnc);
+ gnome_db_browser_set_connection (GNOME_DB_BROWSER (property_get_widget ()), NULL);
+
+ g_free((gpointer) instance_data->gda_dsn);
+ g_free((gpointer) instance_data);
+}
+
/*
* Creates a new GtkWidget of class GnomeDbBrowser, performing any specialized
@@ -54,16 +126,15 @@
/*
* Creates the components needed to edit the extra properties of this widget.
*/
-/*
static void
gb_gnome_db_browser_create_properties (GtkWidget * widget, GbWidgetCreateArgData * data)
{
-
+ property_add_connection (DbName, "Data Source", "Choose Gda Connection");
}
-*/
+
/*
* Gets the properties of the widget. This is used for both displaying the
* properties in the property editor, and also for saving the properties.
@@ -76,20 +147,57 @@
}
*/
-
-
/*
* Sets the properties of the widget. This is used for both applying the
* properties changed in the property editor, and also for loading.
*/
-/*
static void
gb_gnome_db_browser_set_properties (GtkWidget * widget, GbWidgetSetArgData * data)
{
-
+ if (data->action == GB_APPLYING)
+ {
+ GtkWidget *login;
+ gchar *gda_dsn;
+ connection_instance_data_t* instance_data;
+
+ instance_data = get_current_connection_from_widget (widget);
+ if (instance_data)
+ {
+ gda_connection_close(instance_data->cnc);
+ }
+
+ /* create a new instance_data */
+ instance_data = g_new0 (connection_instance_data_t, 1);
+
+ instance_data->cnc = gda_connection_new (gda_corba_get_orb ());
+ gtk_signal_connect (GTK_OBJECT (instance_data->cnc),
+ "error",
+ GTK_SIGNAL_FUNC (error_in_connection_cb),
+ (gpointer) instance_data);
+ gtk_signal_connect (GTK_OBJECT (instance_data->cnc),
+ "open",
+ GTK_SIGNAL_FUNC (connection_initiated_cb),
+ (gpointer) instance_data);
+ gtk_signal_connect (GTK_OBJECT(instance_data->cnc),
+ "close",
+ GTK_SIGNAL_FUNC (connection_closed_cb),
+ (gpointer) instance_data);
+
+ /* create login dialog box */
+ gda_dsn = property_get_connection (DbName, widget, FALSE);
+ login = gnome_db_login_new (instance_data->cnc, NULL, gda_dsn);
+ instance_data->login_dialog = gnome_db_logindlg_new (GNOME_DB_LOGIN (login),
+ _("Open Connection"));
+ gtk_signal_connect (GTK_OBJECT (instance_data->login_dialog),
+ "cancel",
+ GTK_SIGNAL_FUNC (cancel_connecting_cb),
+ (gpointer) instance_data);
+
+ /* run dialog */
+ while (gtk_events_pending()) gtk_main_iteration();
+ gnome_db_logindlg_popup(GNOME_DB_LOGINDLG(instance_data->login_dialog));
+ }
}
-*/
-
/*
@@ -143,14 +251,16 @@
gbwidget.tooltip = _("Database Browser");
/* Fill in any functions that this GbWidget has */
- gbwidget.gb_widget_new = gb_gnome_db_browser_new;
- gbwidget.gb_widget_write_source = gb_gnome_db_browser_write_source;
-/*
- gbwidget.gb_widget_create_properties = gb_gnome_db_browser_create_properties;
- gbwidget.gb_widget_get_properties = gb_gnome_db_browser_get_properties;
- gbwidget.gb_widget_set_properties = gb_gnome_db_browser_set_properties;
+ gbwidget.gb_widget_new = gb_gnome_db_browser_new;
+ gbwidget.gb_widget_write_source = gb_gnome_db_browser_write_source;
+ gbwidget.gb_widget_create_properties = gb_gnome_db_browser_create_properties;
+ /*
+ gbwidget.gb_widget_get_properties = gb_gnome_db_browser_get_properties;
+ */
+ gbwidget.gb_widget_set_properties = gb_gnome_db_browser_set_properties;
+ /*
gbwidget.gb_widget_create_popup_menu = gb_gnome_db_browser_create_popup_menu;
-*/
+ */
return &gbwidget;
}
=== Exit status: 1