summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorleo2009-03-13 18:17:53 +0000
committerleo2009-03-13 18:17:53 +0000
commit77cdda5e7f0f61aaeba39e0357839d2ca7bdf3e2 (patch)
tree646c9feee34856cf24e7982300bbd8187038f9f3 /linux
parentc9fc6c37dbbb809a8a4db042b2fea8feeb4306c8 (diff)
Fixed Pieces Library Manager list.
git-svn-id: http://svn.leocad.org/tags/leocad-0.75@748 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'linux')
-rw-r--r--linux/dialogs.cpp101
1 files changed, 76 insertions, 25 deletions
diff --git a/linux/dialogs.cpp b/linux/dialogs.cpp
index f58d60a..30ed729 100644
--- a/linux/dialogs.cpp
+++ b/linux/dialogs.cpp
@@ -2753,29 +2753,72 @@ int groupdlg_execute(void* param)
static void librarydlg_update_list (GtkWidget *dlg)
{
- PiecesLibrary *lib = g_App->GetPiecesLibrary();
- GtkCTree *ctree = GTK_CTREE (gtk_object_get_data (GTK_OBJECT (dlg), "tree"));
- GtkCList *clist = GTK_CLIST (gtk_object_get_data (GTK_OBJECT (dlg), "list"));
- int row, sel = GTK_CLIST (ctree)->focus_row;
-
- gtk_clist_freeze (clist);
- gtk_clist_clear (clist);
-
- PtrArray<PieceInfo> SinglePieces, GroupedPieces;
- lib->GetCategoryEntries(sel, false, SinglePieces, GroupedPieces);
-
- for (int i = 0; i < SinglePieces.GetSize(); i++)
- {
- PieceInfo* info = SinglePieces[i];
-
- char *text = info->m_strDescription;
- row = gtk_clist_append (clist, &text);
- gtk_clist_set_row_data (clist, row, info);
- }
-
- gtk_clist_thaw (clist);
- clist->focus_row = 0;
- gtk_clist_select_row (clist, 0, 0);
+ PiecesLibrary* Lib = g_App->GetPiecesLibrary();
+ GtkCTree* ctree = GTK_CTREE(gtk_object_get_data(GTK_OBJECT(dlg), "tree"));
+ GtkCList* clist = GTK_CLIST(gtk_object_get_data(GTK_OBJECT(dlg), "list"));
+ int row;
+
+ gchar* CategoryName = GTK_CELL_TEXT(GTK_CTREE_ROW(gtk_ctree_node_nth(ctree, GTK_CLIST(ctree)->focus_row))->row.cell[0])->text;
+ int CategoryIndex = Lib->FindCategoryIndex((const char*)CategoryName);
+
+ gtk_clist_freeze (clist);
+ gtk_clist_clear (clist);
+
+ if (CategoryIndex != -1)
+ {
+ PtrArray<PieceInfo> SinglePieces, GroupedPieces;
+
+ Lib->GetCategoryEntries(CategoryIndex, false, SinglePieces, GroupedPieces);
+
+ for (int i = 0; i < SinglePieces.GetSize(); i++)
+ {
+ PieceInfo* Info = SinglePieces[i];
+
+ char *text = Info->m_strDescription;
+ row = gtk_clist_append(clist, &text);
+ gtk_clist_set_row_data(clist, row, Info);
+ }
+ }
+ else
+ {
+ if (!strcmp(CategoryName, "Unassigned"))
+ {
+ // Test each piece against all categories.
+ for (int i = 0; i < Lib->GetPieceCount(); i++)
+ {
+ PieceInfo* Info = Lib->GetPieceInfo(i);
+ int j;
+
+ for (j = 0; j < Lib->GetNumCategories(); j++)
+ {
+ if (Lib->PieceInCategory(Info, Lib->GetCategoryKeywords(j)))
+ break;
+ }
+
+ if (j == Lib->GetNumCategories())
+ {
+ char *text = Info->m_strDescription;
+ row = gtk_clist_append(clist, &text);
+ gtk_clist_set_row_data(clist, row, Info);
+ }
+ }
+ }
+ else if (!strcmp(CategoryName, "Pieces"))
+ {
+ for (int i = 0; i < Lib->GetPieceCount(); i++)
+ {
+ PieceInfo* Info = Lib->GetPieceInfo(i);
+
+ char *text = Info->m_strDescription;
+ row = gtk_clist_append(clist, &text);
+ gtk_clist_set_row_data(clist, row, Info);
+ }
+ }
+ }
+
+ gtk_clist_thaw(clist);
+ clist->focus_row = 0;
+ gtk_clist_select_row(clist, 0, 0);
}
static void librarydlg_update_tree (GtkWidget *dlg)
@@ -2783,7 +2826,7 @@ static void librarydlg_update_tree (GtkWidget *dlg)
PiecesLibrary *lib = g_App->GetPiecesLibrary();
GtkCTree *ctree = GTK_CTREE (gtk_object_get_data (GTK_OBJECT (dlg), "tree"));
GtkCTreeNode *parent;
- char *text = "Groups";
+ char *text = "Pieces";
gtk_clist_freeze (GTK_CLIST (ctree));
gtk_clist_clear (GTK_CLIST (ctree));
@@ -2796,6 +2839,9 @@ static void librarydlg_update_tree (GtkWidget *dlg)
gtk_ctree_insert_node (ctree, parent, NULL, &text, 0, NULL, NULL, NULL, NULL, TRUE, TRUE);
}
+ text = "Unassigned";
+ gtk_ctree_insert_node (ctree, parent, NULL, &text, 0, NULL, NULL, NULL, NULL, TRUE, TRUE);
+
gtk_clist_thaw (GTK_CLIST (ctree));
}
@@ -2910,10 +2956,15 @@ int librarydlg_execute (void *param)
gtk_widget_show (hsplit);
gtk_container_set_border_width (GTK_CONTAINER (hsplit), 5);
+ scr = gtk_scrolled_window_new ((GtkAdjustment*)NULL, (GtkAdjustment*)NULL);
+ gtk_widget_show (scr);
+ gtk_paned_add1 (GTK_PANED (hsplit), scr);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
ctree = gtk_ctree_new (1, 0);
gtk_object_set_data (GTK_OBJECT (dlg), "ctree", ctree);
gtk_widget_show (ctree);
- gtk_paned_add1 (GTK_PANED (hsplit), ctree);
+ gtk_container_add (GTK_CONTAINER (scr), ctree);
gtk_clist_column_titles_hide (GTK_CLIST (ctree));
gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_BROWSE);
gtk_signal_connect (GTK_OBJECT (ctree), "tree_select_row",