15 #include "ygtkpkgrpmgroupsview.h"
16 #include "ygtkpkglistview.h"
17 #include <YRpmGroupsTree.h>
20 TEXT_COLUMN, DATA_COLUMN, TOTAL_COLUMNS
23 static void addNode (GtkTreeStore *store, GtkTreeIter *parent,
const YStringTreeItem *item)
28 gtk_tree_store_append (store, &iter, parent);
29 gtk_tree_store_set (store, &iter,
30 TEXT_COLUMN, item->value().translation().c_str(), DATA_COLUMN, item, -1);
32 addNode (store, &iter, item->firstChild());
33 addNode (store, parent, item->next());
40 GtkTreeModel *getModel()
41 {
return GTK_TREE_MODEL (store); }
45 store = gtk_tree_store_new (TOTAL_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
46 tree =
new YRpmGroupsTree();
48 zypp::sat::LookupAttr rpmgroups (zypp::sat::SolvAttr::group);
49 for (zypp::sat::LookupAttr::iterator it = rpmgroups.begin();
50 it != rpmgroups.end(); it++)
51 tree->addRpmGroup (it.asString());
54 gtk_tree_store_append (store, &iter, NULL);
55 gtk_tree_store_set (store, &iter,
56 TEXT_COLUMN, _(
"All packages"), DATA_COLUMN, NULL, -1);
58 addNode (store, NULL, tree->root()->firstChild());
64 g_object_unref (G_OBJECT (store));
70 gtk_tree_model_get (getModel(), iter, DATA_COLUMN, &data, -1);
72 YStringTreeItem *group = (YStringTreeItem *) data;
73 std::string rpm_group (tree->rpmGroup (group));
83 GtkWidget *scroll, *view;
87 ~
Impl() {
delete model; }
92 if (gtk_tree_selection_get_selected (selection, NULL, NULL))
96 YGtkPkgRpmGroupsView::YGtkPkgRpmGroupsView()
99 impl->view = gtk_tree_view_new_with_model (impl->model->getModel());
101 GtkTreeView *view = GTK_TREE_VIEW (impl->view);
102 gtk_tree_view_set_headers_visible (view, FALSE);
103 gtk_tree_view_set_search_column (view, TEXT_COLUMN);
104 gtk_tree_view_set_enable_tree_lines (view, TRUE);
105 gtk_tree_view_expand_all (view);
107 GtkCellRenderer *renderer;
108 GtkTreeViewColumn *column;
109 renderer = gtk_cell_renderer_text_new();
110 column = gtk_tree_view_column_new_with_attributes (
111 NULL, renderer,
"text", TEXT_COLUMN, NULL);
112 g_object_set (G_OBJECT (renderer),
"ellipsize", PANGO_ELLIPSIZE_END, NULL);
113 gtk_tree_view_append_column (view, column);
115 GtkTreeSelection *selection = gtk_tree_view_get_selection (view);
116 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
117 g_signal_connect (G_OBJECT (selection),
"changed",
118 G_CALLBACK (selection_changed_cb),
this);
121 impl->scroll = gtk_scrolled_window_new (NULL, NULL);
122 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (impl->scroll),
123 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
124 gtk_scrolled_window_set_shadow_type (
125 GTK_SCROLLED_WINDOW (impl->scroll), GTK_SHADOW_IN);
126 gtk_container_add (GTK_CONTAINER (impl->scroll), impl->view);
127 gtk_widget_show_all (impl->scroll);
130 YGtkPkgRpmGroupsView::~YGtkPkgRpmGroupsView()
133 GtkWidget *YGtkPkgRpmGroupsView::getWidget()
134 {
return impl->scroll; }
136 void YGtkPkgRpmGroupsView::clearSelection()
138 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->view));
139 g_signal_handlers_block_by_func (selection, (gpointer) selection_changed_cb,
this);
142 gtk_tree_model_get_iter_first (impl->model->getModel(), &iter);
143 gtk_tree_selection_select_iter (selection, &iter);
145 g_signal_handlers_unblock_by_func (selection, (gpointer) selection_changed_cb,
this);
152 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->view));
153 if (gtk_tree_selection_get_selected (selection, &model, &iter))
154 return impl->model->writeQuery (query, &iter);
157 if (gtk_tree_model_get_iter_first (model, &iter)) {
158 g_signal_handlers_block_by_func (selection, (gpointer) selection_changed_cb,
this);
159 gtk_tree_selection_select_iter (selection, &iter);
160 g_signal_handlers_unblock_by_func (selection, (gpointer) selection_changed_cb,
this);