[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gEDA-dev: [PATCH] Add "In Use" view to component selector.



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
geda-dev@moria.seul.org
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev