aeeh!! forgot the patch.
wagi
--
Daniel Wagner
email: [EMAIL PROTECTED]
GnuPG: 1024D/DCDE890A (public key available on any keyserver)
=== cd /usr/src/gnome/glade/glade/
=== cvs diff -u property.c
Index: property.c
===================================================================
RCS file: /cvs/gnome/glade/glade/property.c,v
retrieving revision 1.31
diff -u -r1.31 property.c
--- property.c 2001/02/15 03:42:34 1.31
+++ property.c 2001/03/25 10:44:13
@@ -183,6 +183,19 @@
/* Font selection fialog */
static GtkFontSelectionDialog *fontsel = NULL;
+#ifdef USE_GNOME_DB
+/* Gnome DB support */
+
+typedef struct
+{
+ GtkWidget* dsn_list;
+ GtkWidget* dsn_config;
+} DsnConfigInfo;
+
+static GtkDialog *dsn_dialog = NULL;
+static GtkWidget *dsn_value = NULL;
+#endif /* USE_GNOME_DB */
+
/* Widgets in Accelerators dialog. */
#define ACCEL_MODIFIERS_COL 0
#define ACCEL_KEY_COL 1
@@ -323,6 +336,21 @@
gint column,
GdkEventButton * event,
gpointer user_data);
+#ifdef USE_GNOME_DB
+static void show_dsn_dialog (GtkWidget * widget,
+ gpointer value);
+static void on_dsn_dialog_add (GtkWidget * widget,
+ DsnConfigInfo * dsn_info);
+static void on_dsn_dialog_remove (GtkWidget * widget,
+ DsnConfigInfo *dsn_info);
+static void on_dsn_dialog_refresh (GtkWidget * widget,
+ DsnConfigInfo * dsn_info);
+static void on_dsn_dialog_test (GtkWidget * widget,
+ DsnConfigInfo * dsn_info);
+static void on_dsn_dialog_ok (GtkWidget * widget,
+ DsnConfigInfo * dsn_info);
+#endif /* USE_GNOME_DB */
+
#ifdef GLADE_STYLE_SUPPORT
static void on_style_copy (GtkWidget * widget,
@@ -1869,6 +1897,314 @@
property_add (property_name, label, value, NULL, tooltip);
}
+
+#ifdef USE_GNOME_DB
+static void
+fill_dsn_list (GtkCList *clist)
+{
+ GList* dsnlist;
+ GList* node;
+
+ g_return_if_fail (GTK_IS_CLIST (clist));
+
+ gnome_db_clear_clist (clist);
+ dsnlist = node = gda_dsn_list ();
+ while (node)
+ {
+ gchar* row[2];
+ Gda_Dsn* dsn;
+
+ dsn = (Gda_Dsn *) node->data;
+ row[0] = "";
+ row[1] = GDA_DSN_GDA_NAME (dsn);
+ gtk_clist_append (clist, row);
+
+ node = g_list_next (node);
+ }
+ gda_dsn_free_list (dsnlist);
+}
+
+
+void
+property_add_connection (const gchar * property_name,
+ const gchar * label,
+ const gchar * tooltip)
+{
+ GtkWidget *dialog_button;
+ GList *list = NULL;
+
+ dsn_value = gtk_combo_new ();
+
+ list = gda_list_datasources ();
+ list = g_list_prepend (list, g_strdup (_("no connection")));
+ gtk_combo_set_popdown_strings (GTK_COMBO (dsn_value), list);
+ g_list_foreach (list,(GFunc)g_free, 0);
+ g_list_free (list);
+
+ gtk_widget_set_usize (GTK_COMBO (dsn_value)->entry, 60, -1);
+ gtk_widget_set_usize (dsn_value, 80, -1);
+
+ gtk_signal_connect (GTK_OBJECT (GTK_COMBO (dsn_value)->entry), "changed",
+ GTK_SIGNAL_FUNC (on_property_changed), dsn_value);
+
+ dialog_button = gtk_button_new_with_label ("...");
+ gtk_signal_connect (GTK_OBJECT (dialog_button), "clicked",
+ GTK_SIGNAL_FUNC (show_dsn_dialog), dsn_value);
+
+ property_add (property_name, label, dsn_value, dialog_button, tooltip);
+}
+
+
+gchar*
+property_get_connection (const gchar * property_name,
+ GtkWidget * to_apply,
+ gboolean * apply)
+{
+ GtkWidget *widget = (GtkWidget *) g_hash_table_lookup (gb_property_values,
+ property_name);
+ if (apply)
+ *apply = (!to_apply || to_apply == widget) ? TRUE : FALSE;
+ g_return_val_if_fail (widget != NULL, "");
+ return (gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (widget)->entry)));
+}
+
+
+void
+property_set_connection (const gchar * property_name,
+ gchar * value)
+{
+ GtkWidget *widget = (GtkWidget *) g_hash_table_lookup (gb_property_values,
+ property_name);
+ g_return_if_fail (widget != NULL);
+ gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (widget)->entry), value ? value : "");
+}
+
+
+static void
+select_dsn_dialog_cb (GtkCList * clist,
+ gint row,
+ gint column,
+ GdkEventButton * event,
+ DsnConfigInfo * dsn_info)
+{
+ gchar* txt = NULL;
+
+ g_return_if_fail (GTK_IS_CLIST (clist));
+ g_return_if_fail (dsn_info != NULL);
+
+ if (gtk_clist_get_text (clist, row, 1, &txt))
+ {
+ gnome_db_dsn_config_set_name (GNOME_DB_DSN_CONFIG (dsn_info->dsn_config), txt);
+ }
+}
+
+
+static void
+show_dsn_dialog (GtkWidget * widget,
+ gpointer value)
+{
+ GtkWidget *add_button, *remove_button, *refresh_button, *test_button, *ok_button;
+ GtkWidget *frame;
+ GtkWidget *table;
+ GtkWidget *scroll;
+ DsnConfigInfo *dsn_info;
+
+ if (!dsn_dialog)
+ {
+ /* create dialog window */
+ dsn_dialog = gnome_dialog_new ((_("Data Sources"),
+ GNOME_STOCK_BUTTON_CLOSE,
+ NULL));
+ gtk_widget_set_usize (dsn_dialog, 500, 300);
+ gnome_dialog_set_close (GNOME_DIALOG (dsn_dialog), TRUE);
+ gnome_dialog_close_hides (GNOME_DIALOG (dsn_dialog), TRUE);
+
+
+ /* create data structure */
+ dsn_info = g_new0 (DsnConfigInfo, 1);
+
+ frame = gnome_db_new_frame_widget (NULL);
+ gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dsn_dialog)->vbox), frame, 1, 1, 0);
+ table = gnome_db_new_table_widget (4, 2, FALSE);
+ gtk_container_add (GTK_CONTAINER (frame), table);
+
+ scroll = gnome_db_new_scrolled_window_widget ();
+ dsn_info->dsn_list = gnome_db_new_clist_widget (NULL, 2);
+ gtk_signal_connect (GTK_OBJECT (dsn_info->dsn_list),
+ "select-row",
+ GTK_SIGNAL_FUNC (select_dsn_dialog_cb),
+ (gpointer) dsn_info);
+ fill_dsn_list (GTK_CLIST (dsn_info->dsn_list));
+ gtk_container_add (GTK_CONTAINER (scroll), dsn_info->dsn_list);
+ gtk_table_attach (GTK_TABLE (table), scroll, 0, 1, 0, 2,
+ GTK_FILL | GTK_SHRINK | GTK_EXPAND,
+ GTK_FILL | GTK_SHRINK | GTK_EXPAND,
+ 3, 3);
+
+ dsn_info->dsn_config = gnome_db_dsn_config_new (NULL);
+ gtk_widget_show (dsn_info->dsn_config);
+ gtk_table_attach (GTK_TABLE (table), dsn_info->dsn_config, 1, 4, 1, 2,
+ GTK_FILL | GTK_SHRINK | GTK_EXPAND,
+ GTK_FILL | GTK_SHRINK | GTK_EXPAND,
+ 3, 3);
+
+ /* add all button to the dialog and connect them */
+ add_button = gtk_button_new_with_label (_("Add"));
+ remove_button = gtk_button_new_with_label (_("Remove"));
+ refresh_button = gtk_button_new_with_label (_("Refresh"));
+ test_button = gtk_button_new_with_label (_("Test"));
+ ok_button = gtk_button_new_with_label (_("Ok"));
+ gtk_signal_connect (GTK_OBJECT (add_button), "clicked",
+ GTK_SIGNAL_FUNC (on_dsn_dialog_add), dsn_info);
+ gtk_signal_connect (GTK_OBJECT (remove_button), "clicked",
+ GTK_SIGNAL_FUNC (on_dsn_dialog_remove), dsn_info);
+ gtk_signal_connect (GTK_OBJECT (refresh_button), "clicked",
+ GTK_SIGNAL_FUNC (on_dsn_dialog_refresh), dsn_info);
+ gtk_signal_connect (GTK_OBJECT (test_button), "clicked",
+ GTK_SIGNAL_FUNC (on_dsn_dialog_test), dsn_info);
+ gtk_signal_connect (GTK_OBJECT (ok_button), "clicked",
+ GTK_SIGNAL_FUNC (on_dsn_dialog_ok), dsn_info);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dsn_dialog)->action_area),
+ add_button);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dsn_dialog)->action_area),
+ remove_button);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dsn_dialog)->action_area),
+ refresh_button);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dsn_dialog)->action_area),
+ test_button);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dsn_dialog)->action_area),
+ ok_button);
+
+ gtk_window_set_wmclass (GTK_WINDOW (dsn_dialog), "dsn_creator", "Glade");
+ }
+
+ gtk_widget_show_all (GTK_WIDGET (dsn_dialog));
+ gdk_window_show (GTK_WIDGET (dsn_dialog)->window);
+ gdk_window_raise (GTK_WIDGET (dsn_dialog)->window);
+}
+
+
+static void
+on_dsn_dialog_add (GtkWidget * widget, DsnConfigInfo *dsn_info)
+{
+ g_return_if_fail (dsn_info != NULL);
+ g_return_if_fail (GNOME_DB_IS_DSN_CONFIG (dsn_info->dsn_config));
+
+ gnome_db_dsn_config_save (GNOME_DB_DSN_CONFIG (dsn_info->dsn_config));
+ fill_dsn_list (GTK_CLIST (dsn_info->dsn_list));
+}
+
+
+static void
+on_dsn_dialog_remove (GtkWidget * widget, DsnConfigInfo *dsn_info)
+{
+ g_return_if_fail (GNOME_DB_IS_DSN_CONFIG (dsn_info->dsn_config));
+
+ gnome_db_dsn_config_remove (GNOME_DB_DSN_CONFIG (dsn_info->dsn_config));
+ fill_dsn_list (GTK_CLIST (dsn_info->dsn_list));
+}
+
+
+static void
+on_dsn_dialog_refresh (GtkWidget * widget, DsnConfigInfo *dsn_info)
+{
+ g_return_if_fail(dsn_info != NULL);
+
+ gnome_db_dsn_config_clear (GNOME_DB_DSN_CONFIG (dsn_info->dsn_config));
+ fill_dsn_list (GTK_CLIST (dsn_info->dsn_list));
+}
+
+
+static void
+on_dsn_dialog_test (GtkWidget * widget, DsnConfigInfo *dsn_info)
+{
+ gchar* gda_name;
+ gchar* username;
+
+ g_return_if_fail (dsn_info != NULL);
+ g_return_if_fail (GNOME_DB_IS_DSN_CONFIG(dsn_info->dsn_config));
+
+ gda_name = gnome_db_dsn_config_get_name (GNOME_DB_DSN_CONFIG
+(dsn_info->dsn_config));
+ if (gda_name) {
+ Gda_Dsn* dsn = gda_dsn_find_by_name(gda_name);
+ if (dsn) {
+ GtkWidget* dialog;
+ GtkWidget* frame;
+ GtkWidget* table;
+ GtkWidget* label;
+ GtkWidget* gda_entry;
+ GtkWidget* user_entry;
+ GtkWidget* password_entry;
+
+ /* create login dialog */
+ dialog = gnome_dialog_new(gda_name,
+ GNOME_STOCK_BUTTON_OK,
+ GNOME_STOCK_BUTTON_CANCEL,
+ NULL);
+ frame = gnome_db_new_frame_widget (NULL);
+ gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), frame, 1, 1, 0);
+ table = gnome_db_new_table_widget (2, 3, FALSE);
+ gtk_container_add (GTK_CONTAINER (frame), table);
+
+ label = gnome_db_new_label_widget (_("GDA Name"));
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 3,
+3);
+ gda_entry = gnome_db_new_entry_widget (0, FALSE);
+ gtk_entry_set_text(GTK_ENTRY (gda_entry), gda_name);
+ gtk_table_attach (GTK_TABLE (table), gda_entry, 1, 2, 0, 1, GTK_FILL, GTK_FILL,
+3, 3);
+
+ label = gnome_db_new_label_widget (_("Username"));
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 3,
+3);
+ user_entry = gnome_db_new_entry_widget (0, TRUE);
+ gtk_entry_set_text (GTK_ENTRY (user_entry), GDA_DSN_USERNAME (dsn));
+ gtk_table_attach (GTK_TABLE (table), user_entry, 1, 2, 1, 2, GTK_FILL,
+GTK_FILL, 3, 3);
+
+ label = gnome_db_new_label_widget (_("Password"));
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 3,
+3);
+ password_entry = gnome_db_new_entry_widget (0, TRUE);
+ gtk_entry_set_visibility (GTK_ENTRY (password_entry), FALSE);
+ gtk_table_attach (GTK_TABLE (table), password_entry, 1, 2, 2, 3, GTK_FILL,
+GTK_FILL, 3, 3);
+
+ /* run the dialog */
+ if (!gnome_dialog_run (GNOME_DIALOG (dialog))) {
+ Gda_Connection* cnc = gda_connection_new (gda_corba_get_orb ());
+
+ gda_connection_set_provider (cnc, GDA_DSN_PROVIDER (dsn));
+ if (gda_connection_open(cnc,
+ GDA_DSN_DSN (dsn),
+ gtk_entry_get_text (GTK_ENTRY (user_entry)),
+ gtk_entry_get_text (GTK_ENTRY (password_entry))) < 0) {
+ if (cnc->errors_head) {
+ gnome_db_show_error (gda_error_description ((Gda_Error *)
+cnc->errors_head->data));
+ }
+ else gnome_db_show_error (_("Test failed"));
+ }
+ else gnome_db_show_message (_("Connection successful"));
+
+ gda_connection_close (cnc);
+ gda_connection_free (cnc);
+ }
+
+ gnome_dialog_close (GNOME_DIALOG (dialog));
+ gda_dsn_free (dsn);
+ }
+ else gnome_db_show_error (_("Datasource %s not found in configuration"),
+gda_name);
+ }
+}
+
+static void
+on_dsn_dialog_ok (GtkWidget * widget, DsnConfigInfo *dsn_info)
+{
+ GList *list = NULL;
+
+ close_dialog (widget, GTK_WIDGET (dsn_dialog));
+
+ list = gda_list_datasources ();
+ list = g_list_prepend (list, g_strdup (_("no connection")));
+ gtk_combo_set_popdown_strings (GTK_COMBO (dsn_value), list);
+ g_list_foreach (list,(GFunc)g_free, 0);
+ g_list_free (list);
+}
+#endif /* USE_GNOME_DB */
void
property_add_color (const gchar * property_name,
=== Exit status: 1
=== cd /usr/src/gnome/glade/glade/
=== cvs diff -u property.h
Index: property.h
===================================================================
RCS file: /cvs/gnome/glade/glade/property.h,v
retrieving revision 1.14
diff -u -r1.14 property.h
--- property.h 2000/09/17 22:49:18 1.14
+++ property.h 2001/03/25 10:53:09
@@ -20,6 +20,10 @@
#include <gtk/gtkfeatures.h>
+#ifdef USE_GNOME_DB
+#include <gnome-db.h>
+#endif /* USE_GNOME_DB */
+
#include "gbwidget.h"
#include "glade_project.h"
@@ -234,6 +238,16 @@
gboolean *apply);
void property_set_combo (const gchar *property_name,
const gchar *value);
+#ifdef USE_GNOME_DB
+void property_add_connection (const gchar *property_name,
+ const gchar *label,
+ const gchar *tooltip);
+gchar* property_get_connection (const gchar *property_name,
+ GtkWidget *to_apply,
+ gboolean *apply);
+void property_set_connection (const gchar *property_name,
+ gchar *value);
+#endif /* USE_GNOME_DB */
void property_set_combo_strings (const gchar *property_name,
GList *choices);
=== Exit status: 1