The "In Use" view shows symbols which are instantiated in open
schematics, for ease of adding more symbols similar to the ones
already present. This is particularly useful for frequently-used
symbols such as resistors and capacitors.
---
gschem/include/x_compselect.h | 3 +-
gschem/src/x_compselect.c | 518 +++++++++++++++++++++++++++--------------
2 files changed, 340 insertions(+), 181 deletions(-)
diff --git a/gschem/include/x_compselect.h b/gschem/include/x_compselect.h
index 18d718f..d6d4dc1 100644
--- a/gschem/include/x_compselect.h
+++ b/gschem/include/x_compselect.h
@@ -61,7 +61,8 @@ struct _CompselectClass {
struct _Compselect {
GschemDialog parent_instance;
- GtkTreeView *treeview;
+ GtkTreeView *libtreeview, *inusetreeview;
+ GtkNotebook *viewtabs;
Preview *preview;
GtkEntry *entry_filter;
GtkButton *button_clear;
diff --git a/gschem/src/x_compselect.c b/gschem/src/x_compselect.c
index 351326d..cee47e8 100644
--- a/gschem/src/x_compselect.c
+++ b/gschem/src/x_compselect.c
@@ -87,7 +87,7 @@ x_compselect_callback_response (GtkDialog *dialog,
switch (arg1) {
case GTK_RESPONSE_APPLY: {
- CLibSymbol *symbol;
+ CLibSymbol *symbol = NULL;
CompselectBehavior behavior;
g_object_get (compselect,
@@ -244,28 +244,54 @@ static void compselect_get_property (GObject *object,
GParamSpec *pspec);
-/*! \brief Sets data for a particular cell of the treeview.
+
+/*! \brief Sets data for a particular cell of the in use treeview.
+ * \par Function Description
+ * This function determines what data is to be displayed in the
+ * "in use" symbol selection view.
+ *
+ * The model is a list of symbols. s_clib_symbol_get_name() is called
+ * to get the text to display.
+ */
+static void
+inuse_treeview_set_cell_data (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ GValue value = { 0, };
+ GValue strvalue = { 0, };
+ CLibSymbol *symbol;
+
+ gtk_tree_model_get_value (tree_model, iter, 0, &value);
+
+ g_value_init (&strvalue, G_TYPE_STRING);
+
+ symbol = (CLibSymbol *) g_value_get_pointer (&value);
+ g_value_set_string (&strvalue, s_clib_symbol_get_name (symbol));
+
+ g_object_set_property ((GObject*)cell, "text", &strvalue);
+
+ g_value_unset (&value);
+ g_value_unset (&strvalue);
+}
+
+/*! \brief Sets data for a particular cell of the library treeview.
* \par Function Description
* This function determines what data is to be displayed in the
- * component column of the selection tree.
+ * selection selection view.
*
* The top level of the model contains sources, and the next symbols.
* s_clib_source_get_name() or s_clib_symbol_get_name() as
* appropriate is called to get the text to display.
- *
- * \param [in] tree_column The GtkTreeColumn.
- * \param [in] cell The GtkCellRenderer that is being rendered
- * by tree_column.
- * \param [in] tree_model The tree model for components.
- * \param [in] iter An iterator on the current row to render.
- * \param [in] data Unused user data.
*/
static void
-compselect_treeview_set_cell_data (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
+lib_treeview_set_cell_data (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
{
GtkTreeIter parent;
GValue value = { 0, };
@@ -303,7 +329,7 @@ compselect_treeview_set_cell_data (GtkTreeViewColumn
*tree_column,
* \returns TRUE if item should be visible, FALSE otherwise.
*/
static gboolean
-compselect_model_filter_visible_func (GtkTreeModel *model,
+lib_model_filter_visible_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
@@ -329,7 +355,7 @@ compselect_model_filter_visible_func (GtkTreeModel *model,
gtk_tree_model_iter_children (model, &iter2, iter);
ret = FALSE;
do {
- if (compselect_model_filter_visible_func (model, &iter2, data)) {
+ if (lib_model_filter_visible_func (model, &iter2, data)) {
ret = TRUE;
break;
}
@@ -371,6 +397,7 @@ static void
compselect_callback_tree_selection_changed (GtkTreeSelection *selection,
gpointer user_data)
{
+ GtkTreeView *view;
GtkTreeModel *model;
GtkTreeIter iter, parent;
Compselect *compselect = (Compselect*)user_data;
@@ -380,17 +407,25 @@ compselect_callback_tree_selection_changed
(GtkTreeSelection *selection,
if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
return;
}
-
- if (!gtk_tree_model_iter_parent (model, &parent, &iter)) {
- /* selected element is not a leaf -> not a component name */
- return;
+
+ view = gtk_tree_selection_get_tree_view (selection);
+
+ if (view == compselect->inusetreeview) {
+ /* No special handling at the moment */
+ } else if (view == compselect->libtreeview) {
+ if (!gtk_tree_model_iter_parent (model, &parent, &iter)) {
+ /* selected element is not a leaf -> not a component name */
+ return;
+ }
+ } else {
+ /* Something's gone wrong */
+ g_assert_not_reached();
}
- /* build full path to component looking at parents */
gtk_tree_model_get (model, &iter, 0, &sym, -1);
filename = s_clib_symbol_get_filename(sym);
-
- /* update the treeview with new filename */
+
+ /* update the preview with new filename */
g_object_set (compselect->preview,
"filename", filename,
NULL);
@@ -425,7 +460,7 @@ compselect_filter_timeout (gpointer data)
/* resets the source id in compselect */
compselect->filter_timeout = 0;
- model = gtk_tree_view_get_model (compselect->treeview);
+ model = gtk_tree_view_get_model (compselect->libtreeview);
if (model != NULL) {
gtk_tree_model_filter_refilter ((GtkTreeModelFilter*)model);
@@ -521,7 +556,34 @@ compselect_callback_behavior_changed (GtkOptionMenu
*optionmenu,
}
static GtkTreeModel*
-compselect_create_child_model (void)
+create_inuse_tree_model (void)
+{
+ GtkListStore *store;
+ GList *symhead, *symlist;
+ GtkTreeIter iter;
+
+ store = (GtkListStore *) gtk_list_store_new (1, G_TYPE_POINTER);
+
+ symhead = s_toplevel_get_symbol_names (global_window_current);
+
+ for (symlist = symhead;
+ symlist != NULL;
+ symlist = g_list_next (symlist)) {
+
+ gtk_list_store_append (store, &iter);
+
+ gtk_list_store_set (store, &iter,
+ 0, symlist->data,
+ -1);
+ }
+
+ g_list_free (symlist);
+
+ return (GtkTreeModel*)store;
+}
+
+static GtkTreeModel*
+create_lib_tree_model (void)
{
GtkTreeStore *store;
GList *srchead, *srclist;
@@ -560,130 +622,78 @@ compselect_create_child_model (void)
return (GtkTreeModel*)store;
}
-/*! \brief Create the combo box for behaviors.
- * \par Function Description
- * This function creates and returns a <B>GtkComboBox</B> for
- * selecting the behavior when a component is added to the sheet.
- */
static GtkWidget*
-compselect_create_behaviors_combo_box (void)
+create_inuse_treeview (Compselect *compselect)
{
- GtkWidget *combobox;
+ GtkWidget *scrolled_win, *treeview;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
- combobox = gtk_combo_box_new_text ();
+ model = create_inuse_tree_model ();
- /* Note: order of items in menu is important */
- /* COMPSEL_BEHAVIOR_REFERENCE */
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox),
- _("Default behavior - reference component"));
- /* COMPSEL_BEHAVIOR_EMBED */
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox),
- _("Embed component in schematic"));
- /* COMPSEL_BEHAVIOR_INCLUDE */
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox),
- _("Include component as individual objects"));
+ /* Create a scrolled window to accomodate the treeview */
+ scrolled_win = GTK_WIDGET (
+ g_object_new (GTK_TYPE_SCROLLED_WINDOW,
+ /* GtkScrolledWindow */
+ "hscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ "vscrollbar-policy", GTK_POLICY_ALWAYS,
+ "shadow-type", GTK_SHADOW_ETCHED_IN,
+ NULL));
- gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
-
- return combobox;
-}
+ /* Create the treeview */
+ treeview = GTK_WIDGET (g_object_new (GTK_TYPE_TREE_VIEW,
+ /* GtkTreeView */
+ "model", model,
+ "rules-hint", TRUE,
+ "headers-visible", FALSE,
+ NULL));
-GType
-compselect_get_type ()
-{
- static GType compselect_type = 0;
-
- if (!compselect_type) {
- static const GTypeInfo compselect_info = {
- sizeof(CompselectClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) compselect_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(Compselect),
- 0, /* n_preallocs */
- (GInstanceInitFunc) compselect_init,
- };
-
- compselect_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
- "Compselect",
- &compselect_info, 0);
- }
-
- return compselect_type;
-}
+ /* Connect callback to selection */
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ g_signal_connect (selection,
+ "changed",
+ G_CALLBACK (compselect_callback_tree_selection_changed),
+ compselect);
-static void
-compselect_class_init (CompselectClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ /* Insert a column for symbol name */
+ renderer = GTK_CELL_RENDERER (
+ g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
+ /* GtkCellRendererText */
+ "editable", FALSE,
+ NULL));
+ column = GTK_TREE_VIEW_COLUMN (
+ g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+ /* GtkTreeViewColumn */
+ "title", _("Components"),
+ NULL));
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func (column, renderer,
+ inuse_treeview_set_cell_data,
+ NULL, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
- compselect_parent_class = g_type_class_peek_parent (klass);
-
- gobject_class->finalize = compselect_finalize;
- gobject_class->set_property = compselect_set_property;
- gobject_class->get_property = compselect_get_property;
+ /* Add the treeview to the scrolled window */
+ gtk_container_add (GTK_CONTAINER (scrolled_win), treeview);
+ /* set the inuse treeview of compselect */
+ compselect->inusetreeview = GTK_TREE_VIEW (treeview);
- g_object_class_install_property (
- gobject_class, PROP_SYMBOL,
- g_param_spec_pointer ("symbol",
- "",
- "",
- G_PARAM_READABLE));
- g_object_class_install_property (
- gobject_class, PROP_BEHAVIOR,
- g_param_spec_enum ("behavior",
- "",
- "",
- COMPSELECT_TYPE_BEHAVIOR,
- COMPSELECT_BEHAVIOR_REFERENCE,
- G_PARAM_READWRITE));
- g_object_class_install_property (
- gobject_class, PROP_HIDDEN,
- g_param_spec_boolean ("hidden",
- "",
- "",
- FALSE,
- G_PARAM_READWRITE));
-
+ return scrolled_win;
}
-static void
-compselect_init (Compselect *compselect)
+static GtkWidget *
+create_lib_treeview (Compselect *compselect)
{
- GtkWidget *hbox, *vbox, *filter_hbox;
- GtkWidget *scrolled_win, *treeview, *label, *entry, *preview, *combobox;
- GtkWidget *button;
+ GtkWidget *libtreeview, *vbox, *scrolled_win, *label,
+ *hbox, *entry, *button;
GtkTreeModel *child_model, *model;
+ GtkTreeSelection *selection;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
-
- GtkWidget *alignment, *frame;
-
- /* dialog initialization */
- g_object_set (G_OBJECT (compselect),
- /* GtkWindow */
- "type", GTK_WINDOW_TOPLEVEL,
- "title", _("Select Component..."),
- "default-height", 300,
- "default-width", 400,
- "modal", FALSE,
- "window-position", GTK_WIN_POS_NONE,
- /* GtkDialog */
- "has-separator", TRUE,
- NULL);
- g_object_set (GTK_DIALOG (compselect)->vbox,
- "homogeneous", FALSE,
- NULL);
- /* horizontal box selection and preview */
- hbox = GTK_WIDGET (g_object_new (GTK_TYPE_HBOX,
- /* GtkBox */
- "homogeneous", FALSE,
- "spacing", 5,
- NULL));
+ /* -- library selection view -- */
/* vertical box for component selection and search entry */
vbox = GTK_WIDGET (g_object_new (GTK_TYPE_VBOX,
@@ -693,17 +703,12 @@ compselect_init (Compselect *compselect)
"homogeneous", FALSE,
"spacing", 5,
NULL));
-
- /* -- directory/component selection -- */
- child_model = compselect_create_child_model ();
+
+ child_model = create_lib_tree_model ();
model = (GtkTreeModel*)g_object_new (GTK_TYPE_TREE_MODEL_FILTER,
"child-model", child_model,
"virtual-root", NULL,
NULL);
-/* gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter*)model, */
-/*
compselect_model_filter_visible_func, */
-/* compselect, */
-/* NULL); */
scrolled_win = GTK_WIDGET (
g_object_new (GTK_TYPE_SCROLLED_WINDOW,
@@ -713,20 +718,21 @@ compselect_init (Compselect *compselect)
"shadow-type", GTK_SHADOW_ETCHED_IN,
NULL));
/* create the treeview */
- treeview = GTK_WIDGET (g_object_new (GTK_TYPE_TREE_VIEW,
- /* GtkTreeView */
- "model", model,
- "rules-hint", TRUE,
- NULL));
+ libtreeview = GTK_WIDGET (g_object_new (GTK_TYPE_TREE_VIEW,
+ /* GtkTreeView */
+ "model", model,
+ "rules-hint", TRUE,
+ "headers-visible", FALSE,
+ NULL));
/* connect callback to selection */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (libtreeview));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
g_signal_connect (selection,
"changed",
G_CALLBACK (compselect_callback_tree_selection_changed),
compselect);
- /* insert a column to treeview for directory name */
+ /* insert a column to treeview for library/symbol name */
renderer = GTK_CELL_RENDERER (
g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
/* GtkCellRendererText */
@@ -739,14 +745,14 @@ compselect_init (Compselect *compselect)
NULL));
gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_cell_data_func (column, renderer,
- compselect_treeview_set_cell_data,
+ lib_treeview_set_cell_data,
NULL, NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (libtreeview), column);
/* add the treeview to the scrolled window */
- gtk_container_add (GTK_CONTAINER (scrolled_win), treeview);
+ gtk_container_add (GTK_CONTAINER (scrolled_win), libtreeview);
/* set directory/component treeview of compselect */
- compselect->treeview = GTK_TREE_VIEW (treeview);
+ compselect->libtreeview = GTK_TREE_VIEW (libtreeview);
/* add the scrolled window for directories to the vertical box */
gtk_box_pack_start (GTK_BOX (vbox), scrolled_win,
@@ -754,7 +760,7 @@ compselect_init (Compselect *compselect)
/* -- filter area -- */
- filter_hbox = GTK_WIDGET (g_object_new (GTK_TYPE_HBOX,
+ hbox = GTK_WIDGET (g_object_new (GTK_TYPE_HBOX,
/* GtkBox */
"homogeneous", FALSE,
"spacing", 3,
@@ -768,7 +774,7 @@ compselect_init (Compselect *compselect)
"label", _("Filter:"),
NULL));
/* add the search label to the filter area */
- gtk_box_pack_start (GTK_BOX (filter_hbox), label,
+ gtk_box_pack_start (GTK_BOX (hbox), label,
FALSE, FALSE, 0);
/* create the text entry for filter in components */
@@ -780,8 +786,15 @@ compselect_init (Compselect *compselect)
"changed",
G_CALLBACK (compselect_callback_filter_entry_changed),
compselect);
+
+ /* now that that we have an entry, set the filter func of model */
+ gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter*)model,
+ lib_model_filter_visible_func,
+ compselect,
+ NULL);
+
/* add the filter entry to the filter area */
- gtk_box_pack_start (GTK_BOX (filter_hbox), entry,
+ gtk_box_pack_start (GTK_BOX (hbox), entry,
TRUE, TRUE, 0);
/* set filter entry of compselect */
compselect->entry_filter = GTK_ENTRY (entry);
@@ -803,26 +816,158 @@ compselect_init (Compselect *compselect)
G_CALLBACK (compselect_callback_filter_button_clicked),
compselect);
/* add the clear button to the filter area */
- gtk_box_pack_start (GTK_BOX (filter_hbox), button,
+ gtk_box_pack_start (GTK_BOX (hbox), button,
FALSE, FALSE, 0);
/* set clear button of compselect */
compselect->button_clear = GTK_BUTTON (button);
/* add the filter area to the vertical box */
- gtk_box_pack_start (GTK_BOX (vbox), filter_hbox,
+ gtk_box_pack_start (GTK_BOX (vbox), hbox,
FALSE, FALSE, 0);
+ compselect->libtreeview = GTK_TREE_VIEW (libtreeview);
+
+ return vbox;
+}
+
+/*! \brief Create the combo box for behaviors.
+ * \par Function Description
+ * This function creates and returns a <B>GtkComboBox</B> for
+ * selecting the behavior when a component is added to the sheet.
+ */
+static GtkWidget*
+create_behaviors_combo_box (void)
+{
+ GtkWidget *combobox;
+
+ combobox = gtk_combo_box_new_text ();
+
+ /* Note: order of items in menu is important */
+ /* COMPSEL_BEHAVIOR_REFERENCE */
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox),
+ _("Default behavior - reference component"));
+ /* COMPSEL_BEHAVIOR_EMBED */
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox),
+ _("Embed component in schematic"));
+ /* COMPSEL_BEHAVIOR_INCLUDE */
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combobox),
+ _("Include component as individual objects"));
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
+
+ return combobox;
+}
+
+GType
+compselect_get_type ()
+{
+ static GType compselect_type = 0;
+ if (!compselect_type) {
+ static const GTypeInfo compselect_info = {
+ sizeof(CompselectClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) compselect_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof(Compselect),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) compselect_init,
+ };
+
+ compselect_type = g_type_register_static (GSCHEM_TYPE_DIALOG,
+ "Compselect",
+ &compselect_info, 0);
+ }
+
+ return compselect_type;
+}
+
+static void
+compselect_class_init (CompselectClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ compselect_parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->finalize = compselect_finalize;
+ gobject_class->set_property = compselect_set_property;
+ gobject_class->get_property = compselect_get_property;
+
+ g_object_class_install_property (
+ gobject_class, PROP_SYMBOL,
+ g_param_spec_pointer ("symbol",
+ "",
+ "",
+ G_PARAM_READABLE));
+ g_object_class_install_property (
+ gobject_class, PROP_BEHAVIOR,
+ g_param_spec_enum ("behavior",
+ "",
+ "",
+ COMPSELECT_TYPE_BEHAVIOR,
+ COMPSELECT_BEHAVIOR_REFERENCE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (
+ gobject_class, PROP_HIDDEN,
+ g_param_spec_boolean ("hidden",
+ "",
+ "",
+ FALSE,
+ G_PARAM_READWRITE));
+
+}
+
+static void
+compselect_init (Compselect *compselect)
+{
+ GtkWidget *hbox, *notebook;
+ GtkWidget *libview, *inuseview;
+ GtkWidget *preview, *combobox;
+
+ GtkWidget *alignment, *frame;
+
+ /* dialog initialization */
+ g_object_set (G_OBJECT (compselect),
+ /* GtkWindow */
+ "type", GTK_WINDOW_TOPLEVEL,
+ "title", _("Select Component..."),
+ "default-height", 300,
+ "default-width", 400,
+ "modal", FALSE,
+ "window-position", GTK_WIN_POS_NONE,
+ /* GtkDialog */
+ "has-separator", TRUE,
+ NULL);
+ g_object_set (GTK_DIALOG (compselect)->vbox,
+ "homogeneous", FALSE,
+ NULL);
+
+ /* horizontal box selection and preview */
+ hbox = GTK_WIDGET (g_object_new (GTK_TYPE_HBOX,
+ /* GtkBox */
+ "homogeneous", FALSE,
+ "spacing", 5,
+ NULL));
+
+ /* notebook for library and inuse views */
+ notebook = GTK_WIDGET (g_object_new (GTK_TYPE_NOTEBOOK,
+ NULL));
+ compselect->viewtabs = GTK_NOTEBOOK (notebook);
+
+ inuseview = create_inuse_treeview (compselect);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), inuseview,
+ gtk_label_new (_("In Use")));
+
+ libview = create_lib_treeview (compselect);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), libview,
+ gtk_label_new (_("Libraries")));
+
/* include the vertical box in horizontal box */
- gtk_box_pack_start (GTK_BOX (hbox), vbox,
+ gtk_box_pack_start (GTK_BOX (hbox), notebook,
TRUE, TRUE, 0);
- /* now that that we have an entry, set the filter func of model */
- gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter*)model,
- compselect_model_filter_visible_func,
- compselect,
- NULL);
-
/* -- preview area -- */
frame = GTK_WIDGET (g_object_new (GTK_TYPE_FRAME,
@@ -859,7 +1004,7 @@ compselect_init (Compselect *compselect)
/* -- behavior combo box -- */
- combobox = compselect_create_behaviors_combo_box ();
+ combobox = create_behaviors_combo_box ();
g_signal_connect (combobox,
"changed",
G_CALLBACK (compselect_callback_behavior_changed),
@@ -944,21 +1089,34 @@ compselect_get_property (GObject *object,
{
GtkTreeModel *model;
GtkTreeIter iter, parent;
- CLibSymbol *symbol;
- if (gtk_tree_selection_get_selected (
- gtk_tree_view_get_selection (compselect->treeview),
- &model,
- &iter)
- && gtk_tree_model_iter_parent (model, &parent, &iter)) {
-
- gtk_tree_model_get (model, &iter, 0, &symbol, -1);
- g_value_set_pointer (value, symbol);
-
- } else {
- g_value_set_pointer (value, NULL);
- }
- }
- break;
+ CLibSymbol *symbol = NULL;
+
+ /* FIXME assumes pages are in a specific order */
+ switch (gtk_notebook_get_current_page(compselect->viewtabs)) {
+ case 0: /* In Use page */
+ if (gtk_tree_selection_get_selected (
+ gtk_tree_view_get_selection (compselect->inusetreeview),
+ &model,
+ &iter)) {
+ gtk_tree_model_get (model, &iter, 0, &symbol, -1);
+ }
+ break;
+ case 1:
+ if (gtk_tree_selection_get_selected (
+ gtk_tree_view_get_selection (compselect->libtreeview),
+ &model,
+ &iter)
+ && gtk_tree_model_iter_parent (model, &parent, &iter)) {
+ gtk_tree_model_get (model, &iter, 0, &symbol, -1);
+ }
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ g_value_set_pointer (value, symbol);
+ break;
+ }
case PROP_BEHAVIOR:
g_value_set_enum (value,
gtk_combo_box_get_active (
--
1.5.2.1
_______________________________________________
geda-dev mailing list
[email protected]
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev