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

Reply via email to