static void fav_selection_changed_cb (G_GNUC_UNUSED GtkWidget *widget, gint fav_id, TFavoritesType fav_type, const gchar *selection, SchemaBrowserPerspective *bpers) { if (fav_type == T_FAVORITES_TABLES) { GdaQuarkList *ql; const gchar *type; const gchar *schema = NULL, *table = NULL, *short_name = NULL; ql = gda_quark_list_new_from_string (selection); if (ql) { type = gda_quark_list_find (ql, "OBJ_TYPE"); schema = gda_quark_list_find (ql, "OBJ_SCHEMA"); table = gda_quark_list_find (ql, "OBJ_NAME"); short_name = gda_quark_list_find (ql, "OBJ_SHORT_NAME"); } if (!type || !schema || !table) { if (ql) gda_quark_list_free (ql); return; } if (!strcmp (type, "table")) { schema_browser_perspective_display_table_info (bpers, schema, table, short_name); } else { gint ntabs, i; ntabs = gtk_notebook_get_n_pages (GTK_NOTEBOOK (bpers->priv->notebook)); for (i = 0; i < ntabs; i++) { GtkWidget *child; child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (bpers->priv->notebook), i); if (IS_TABLE_INFO (child)) { if (!strcmp (schema, table_info_get_table_schema (TABLE_INFO (child))) && !strcmp (table, table_info_get_table_name (TABLE_INFO (child)))) { gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); return; } } } g_warning ("Non handled favorite type: %s", type); TO_IMPLEMENT; } if (ql) gda_quark_list_free (ql); } else if (fav_type == T_FAVORITES_DIAGRAMS) { #ifdef HAVE_GOOCANVAS schema_browser_perspective_display_diagram (bpers, fav_id); #else g_warning ("Can't display diagram because canvas not compiled."); #endif } #ifdef GDA_DEBUG_NO g_print ("Reacted to selection fav_id=>%d type=>%u, contents=>%s\n", fav_id, fav_type, selection); #endif }
static void meta_changed_cb (G_GNUC_UNUSED TConnection *tcnc, GdaMetaStruct *mstruct, TableRelations *trels) { GdaMetaDbObject *dbo; GValue *tname, *tschema; BrowserCanvasTable *ctable; g_object_set (G_OBJECT (trels->priv->canvas), "meta-struct", mstruct, NULL); g_value_set_string ((tschema = gda_value_new (G_TYPE_STRING)), table_info_get_table_schema (trels->priv->tinfo)); g_value_set_string ((tname = gda_value_new (G_TYPE_STRING)), table_info_get_table_name (trels->priv->tinfo)); ctable = browser_canvas_db_relations_add_table (BROWSER_CANVAS_DB_RELATIONS (trels->priv->canvas), NULL, tschema, tname); browser_canvas_db_relations_select_table (BROWSER_CANVAS_DB_RELATIONS (trels->priv->canvas), ctable); dbo = gda_meta_struct_get_db_object (mstruct, NULL, tschema, tname); if (dbo && (dbo->obj_type == GDA_META_DB_TABLE)) { GdaMetaTable *table; table = GDA_META_TABLE (dbo); GSList *list; for (list = table->reverse_fk_list; list; list = list->next) { GdaMetaTableForeignKey *fkey = (GdaMetaTableForeignKey*) list->data; if (! trels->priv->all_schemas && ! strcmp (fkey->meta_table->obj_short_name, fkey->meta_table->obj_full_name)) continue; g_value_set_string (tname, fkey->meta_table->obj_name); g_value_set_string (tschema, fkey->meta_table->obj_schema); browser_canvas_db_relations_add_table (BROWSER_CANVAS_DB_RELATIONS (trels->priv->canvas), NULL, tschema, tname); } for (list = table->fk_list; list; list = list->next) { GdaMetaTableForeignKey *fkey = (GdaMetaTableForeignKey*) list->data; if (! trels->priv->all_schemas && (fkey->depend_on->obj_type != GDA_META_DB_UNKNOWN) && ! strcmp (fkey->depend_on->obj_short_name, fkey->depend_on->obj_full_name)) continue; g_value_set_string (tname, fkey->depend_on->obj_name); g_value_set_string (tschema, fkey->depend_on->obj_schema); browser_canvas_db_relations_add_table (BROWSER_CANVAS_DB_RELATIONS (trels->priv->canvas), NULL, tschema, tname); } } gda_value_free (tschema); gda_value_free (tname); browser_canvas_perform_auto_layout (BROWSER_CANVAS (trels->priv->canvas), TRUE, BROWSER_CANVAS_LAYOUT_DEFAULT); }
static void meta_changed_cb (G_GNUC_UNUSED BrowserConnection *bcnc, GdaMetaStruct *mstruct, TablePreferences *tpref) { gtk_list_store_clear (tpref->priv->columns_store); tpref->priv->current_table = NULL; tpref->priv->current_column = NULL; if (!mstruct) return; GdaMetaDbObject *dbo; GValue *schema_v = NULL, *name_v; const gchar *str; str = table_info_get_table_schema (tpref->priv->tinfo); if (str) g_value_set_string ((schema_v = gda_value_new (G_TYPE_STRING)), str); str = table_info_get_table_name (tpref->priv->tinfo); g_value_set_string ((name_v = gda_value_new (G_TYPE_STRING)), str); dbo = gda_meta_struct_get_db_object (mstruct, NULL, schema_v, name_v); if (schema_v) gda_value_free (schema_v); gda_value_free (name_v); if (dbo) { GdaMetaTable *mtable = GDA_META_TABLE (dbo); GSList *list; tpref->priv->current_table = mtable; for (list = mtable->columns; list; list = list->next) { GdaMetaTableColumn *column = GDA_META_TABLE_COLUMN (list->data); GtkTreeIter iter; gchar *eprops; GError *error = NULL; eprops = browser_connection_get_table_column_attribute (tpref->priv->bcnc, tpref->priv->current_table, column, BROWSER_CONNECTION_COLUMN_PLUGIN, &error); if (error) { TO_IMPLEMENT; /* FIXME: add a notice somewhere in the UI */ g_warning ("Error: %s\n", error->message); g_clear_error (&error); } gtk_list_store_append (tpref->priv->columns_store, &iter); gtk_list_store_set (tpref->priv->columns_store, &iter, COLUMN_POINTER, column, COLUMN_GTYPE, column->gtype, COLUMN_PLUGIN, eprops, -1); g_free (eprops); } } }
/** * schema_browser_perspective_display_table_info * * Display (and create if necessary) a new page for the table's properties */ void schema_browser_perspective_display_table_info (SchemaBrowserPerspective *bpers, const gchar *table_schema, const gchar *table_name, G_GNUC_UNUSED const gchar *table_short_name) { g_return_if_fail (IS_SCHEMA_BROWSER_PERSPECTIVE (bpers)); gint ntabs, i; ntabs = gtk_notebook_get_n_pages (GTK_NOTEBOOK (bpers->priv->notebook)); for (i = 0; i < ntabs; i++) { GtkWidget *child; child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (bpers->priv->notebook), i); if (IS_TABLE_INFO (child)) { if (!strcmp (table_schema, table_info_get_table_schema (TABLE_INFO (child))) && !strcmp (table_name, table_info_get_table_name (TABLE_INFO (child)))) { gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); return; } } } GtkWidget *ti; ti = table_info_new (browser_window_get_connection (bpers->priv->bwin), table_schema, table_name); if (ti) { GtkWidget *close_btn; GtkWidget *tab_label; gint i; tab_label = browser_page_get_tab_label (BROWSER_PAGE (ti), &close_btn); i = gtk_notebook_append_page (GTK_NOTEBOOK (bpers->priv->notebook), ti, tab_label); g_signal_connect (close_btn, "clicked", G_CALLBACK (close_button_clicked_cb), ti); gtk_widget_show (ti); tab_label = browser_page_get_tab_label (BROWSER_PAGE (ti), NULL); gtk_notebook_set_menu_label (GTK_NOTEBOOK (bpers->priv->notebook), ti, tab_label); gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (bpers->priv->notebook), ti, TRUE); gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (bpers->priv->notebook), ti, TRUE); } }