Author: rpmcruz Date: Thu Jul 17 00:23:03 2008 New Revision: 49199 URL: http://svn.opensuse.org/viewcvs/yast?rev=49199&view=rev Log: * src/YGTable.cc: implemented YTable's multiSelection flag. Modified: trunk/gtk/ChangeLog trunk/gtk/src/YGSelectionModel.h trunk/gtk/src/YGTable.cc trunk/gtk/src/YGWidget.cc trunk/gtk/src/ygtkratiobox.c trunk/gtk/src/ygtkratiobox.h Modified: trunk/gtk/ChangeLog URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=49199&r1=49... ============================================================================== --- trunk/gtk/ChangeLog (original) +++ trunk/gtk/ChangeLog Thu Jul 17 00:23:03 2008 @@ -1,7 +1,6 @@ 2008-07-16 Ricardo Cruz <rpmcruz@alunos.dcc.fc.up.pt> - * src/YGTable.cc: make it compilable for new API change. (checks libyui - version for >= 2.17.5) + * src/YGTable.cc: implemented YTable's multiSelection flag. * src/YGDumbTab.cc: implemented shortcutChanged(), so to set tab labels shortcuts. Modified: trunk/gtk/src/YGSelectionModel.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGSelectionModel.h?rev=49... ============================================================================== --- trunk/gtk/src/YGSelectionModel.h (original) +++ trunk/gtk/src/YGSelectionModel.h Thu Jul 17 00:23:03 2008 @@ -33,6 +33,9 @@ virtual void setFocusItem (GtkTreeIter *iter) = 0; virtual void unsetFocus() = 0; + YItemConstIterator itemsBegin() { return ywidget->itemsBegin(); } + YItemConstIterator itemsEnd() { return ywidget->itemsEnd(); } + // to be implemented by trees virtual void expand (GtkTreeIter *iter) {} Modified: trunk/gtk/src/YGTable.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGTable.cc?rev=49199&... ============================================================================== --- trunk/gtk/src/YGTable.cc (original) +++ trunk/gtk/src/YGTable.cc Thu Jul 17 00:23:03 2008 @@ -24,6 +24,7 @@ , YGSelectionModel ((YSelectionWidget *) ywidget, ordinaryModel, isTree) { IMPL + blockSelected = false; if (ordinaryModel) { appendIconTextColumn ("", YAlignUnchanged, YGSelectionModel::ICON_COLUMN, YGSelectionModel::LABEL_COLUMN); @@ -34,14 +35,15 @@ /* Yast tools expect the user to be unable to un-select the row. They generally don't check to see if the returned value is -1. So, just disallow un-selection. */ - GtkTreeSelection *selection = gtk_tree_view_get_selection (getView()); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); + gtk_tree_selection_set_mode (getSelection(), GTK_SELECTION_BROWSE); // let the derivates do the event hooks. They have subtile differences. } inline GtkTreeView *getView() { return GTK_TREE_VIEW (getWidget()); } + inline GtkTreeSelection *getSelection() + { return gtk_tree_view_get_selection (getView()); } void appendIconTextColumn (string header, YAlignmentType align, int icon_col, int text_col) { @@ -102,12 +104,9 @@ { blockEvents(); GtkTreePath *path = gtk_tree_model_get_path (getModel(), iter); - gtk_tree_view_expand_to_path (getView(), path); - GtkTreeSelection *selection = gtk_tree_view_get_selection (getView()); - gtk_tree_selection_select_path (selection, path); - gtk_tree_view_set_cursor (getView(), path, NULL, FALSE); + gtk_tree_selection_select_path (getSelection(), path); gtk_tree_view_scroll_to_cell (getView(), path, NULL, TRUE, 0.5, 0.5); gtk_tree_path_free (path); unblockEvents(); @@ -116,29 +115,30 @@ virtual void unsetFocus() { blockEvents(); - GtkTreeSelection *selection = gtk_tree_view_get_selection (getView()); - gtk_tree_selection_unselect_all (selection); + gtk_tree_selection_unselect_all (getSelection()); unblockEvents(); } virtual YItem *focusItem() { - GtkTreeSelection *selection = gtk_tree_view_get_selection (getView()); GtkTreeIter iter; - if (gtk_tree_selection_get_selected (selection, NULL, &iter)) + if (gtk_tree_selection_get_selected (getSelection(), NULL, &iter)) return getItem (&iter); return NULL; } + // peculiarities + virtual bool toggleMode() const + { return false; } // YMultiSelectionBox + +private: + bool blockSelected; + protected: void blockEvents() - { - g_signal_handlers_block_by_func (getWidget(), (gpointer) selected_cb, this); - } + { blockSelected = true; } void unblockEvents() - { - g_signal_handlers_unblock_by_func (getWidget(), (gpointer) selected_cb, this); - } + { blockSelected = false; } // toggled by user (through clicking on the renderer or some other action) void toggle (GtkTreePath *path, gint column) @@ -159,8 +159,20 @@ static void selected_cb (GtkTreeView *tree_view, YGTableView* pThis) { IMPL + if (pThis->blockSelected) + return; if (pThis->immediateEvent()) pThis->emitEvent (YEvent::SelectionChanged, true, true); + if (!pThis->toggleMode()) { + GtkTreeSelection *selection = pThis->getSelection(); + for (YItemConstIterator it = pThis->itemsBegin(); it != pThis->itemsEnd(); it++) { + GtkTreeIter iter; + if (pThis->getIter (*it, &iter)) { + bool sel = gtk_tree_selection_iter_is_selected (selection, &iter); + (*it)->setSelected (sel); + } + } + } } static void activated_cb (GtkTreeView *tree_view, GtkTreePath *path, @@ -198,7 +210,10 @@ IMPL gtk_tree_view_set_headers_visible (getView(), TRUE); gtk_tree_view_set_rules_hint (getView(), columns() > 1); - +#if YAST2_VERSION >= 2017005 + if (multiSelection) + gtk_tree_selection_set_mode (getSelection(), GTK_SELECTION_MULTIPLE); +#endif vector <GType> types; for (int i = 0; i < columns(); i++) { types.push_back (GDK_TYPE_PIXBUF); @@ -219,7 +234,7 @@ g_signal_connect (G_OBJECT (getWidget()), "row-activated", G_CALLBACK (activated_cb), (YGTableView*) this); - g_signal_connect (G_OBJECT (getWidget()), "cursor-changed", + g_signal_connect_after (G_OBJECT (getSelection()), "changed", G_CALLBACK (selected_cb), (YGTableView*) this); if (!keepSorting()) setSortable (true); @@ -390,6 +405,10 @@ virtual void setCurrentItem (YItem *item) { implFocusItem (item); } + // YGTableView + virtual bool toggleMode() const + { return true; } + // Events static void multi_activated_cb (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, YGMultiSelectionBox* pThis) @@ -434,7 +453,7 @@ virtual void rebuildTree() { doDeleteAllItems(); - for (YItemConstIterator it = itemsBegin(); it != itemsEnd(); it++) + for (YItemConstIterator it = YTree::itemsBegin(); it != YTree::itemsEnd(); it++) doAddItem (*it); } Modified: trunk/gtk/src/YGWidget.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGWidget.cc?rev=49199&... ============================================================================== --- trunk/gtk/src/YGWidget.cc (original) +++ trunk/gtk/src/YGWidget.cc Thu Jul 17 00:23:03 2008 @@ -259,13 +259,12 @@ bool show, GType type, const char *property_name, ...) : YGLabeledWidget (ywidget, parent, string(), YD_VERT, show, - YGTK_TYPE_TUNED_SCROLLED_WINDOW, "shadow-type", GTK_SHADOW_IN, NULL) + GTK_TYPE_SCROLLED_WINDOW, "shadow-type", GTK_SHADOW_IN, NULL) { va_list args; va_start (args, property_name); construct(type, property_name, args); va_end (args); - setLabelVisible (false); } @@ -274,7 +273,7 @@ bool show, GType type, const char *property_name, ...) : YGLabeledWidget (ywidget, parent, label_text, label_ori, show, - YGTK_TYPE_TUNED_SCROLLED_WINDOW, "shadow-type", GTK_SHADOW_IN, NULL) + GTK_TYPE_SCROLLED_WINDOW, "shadow-type", GTK_SHADOW_IN, NULL) { va_list args; va_start (args, property_name); @@ -297,8 +296,5 @@ { gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (YGLabeledWidget::getWidget()), hpolicy, vpolicy); - ygtk_tuned_scrolled_window_set_auto_policy ( - YGTK_TUNED_SCROLLED_WINDOW (YGLabeledWidget::getWidget()), - hpolicy == GTK_POLICY_AUTOMATIC ? MAX_SCROLL_WIDTH : 0, 0); } Modified: trunk/gtk/src/ygtkratiobox.c URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkratiobox.c?rev=49199&... ============================================================================== --- trunk/gtk/src/ygtkratiobox.c (original) +++ trunk/gtk/src/ygtkratiobox.c Thu Jul 17 00:23:03 2008 @@ -366,67 +366,3 @@ widget_class->size_allocate = ygtk_adj_size_size_allocate; } -//** YGtkTunedScrolledWindow - -G_DEFINE_TYPE (YGtkTunedScrolledWindow, ygtk_tuned_scrolled_window, GTK_TYPE_SCROLLED_WINDOW) - -static void ygtk_tuned_scrolled_window_init (YGtkTunedScrolledWindow *scroll) -{ -} - -static void ygtk_tuned_scrolled_window_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - YGtkTunedScrolledWindow *scroll = YGTK_TUNED_SCROLLED_WINDOW (widget); - - GtkRequisition child_req; - GtkWidget *child = GTK_BIN (widget)->child; - gtk_widget_size_request (child, &child_req); - - GtkScrolledWindow *gscroll = GTK_SCROLLED_WINDOW (widget); - GtkPolicyType hpolicy, vpolicy; - gtk_scrolled_window_get_policy (gscroll, &hpolicy, &vpolicy); - - if (scroll->max_width) { - if (child_req.width < scroll->max_width) - gscroll->hscrollbar_policy = GTK_POLICY_NEVER; - else - gscroll->hscrollbar_policy = GTK_POLICY_AUTOMATIC; - } - if (scroll->max_height) { - if (child_req.height < scroll->max_height) - gscroll->vscrollbar_policy = GTK_POLICY_NEVER; - else - gscroll->vscrollbar_policy = GTK_POLICY_AUTOMATIC; - } - - GTK_WIDGET_CLASS (ygtk_tuned_scrolled_window_parent_class)->size_request (widget, requisition); - if (scroll->max_width) - requisition->width = MIN (requisition->width, scroll->max_width); - if (scroll->max_height) - requisition->height = MIN (requisition->height, scroll->max_height); -} - -GtkWidget* ygtk_tuned_scrolled_window_new (GtkWidget *child) -{ - YGtkTunedScrolledWindow *scroll = g_object_new (YGTK_TYPE_TUNED_SCROLLED_WINDOW, NULL); - if (child) - gtk_container_add (GTK_CONTAINER (scroll), child); - return GTK_WIDGET (scroll); -} - -void ygtk_tuned_scrolled_window_set_auto_policy (YGtkTunedScrolledWindow *scroll, - guint max_width, guint max_height) -{ - scroll->max_width = max_width; - scroll->max_height = max_height; -} - -static void ygtk_tuned_scrolled_window_class_init (YGtkTunedScrolledWindowClass *klass) -{ - ygtk_tuned_scrolled_window_parent_class = g_type_class_peek_parent (klass); - - GtkWidgetClass* widget_class = GTK_WIDGET_CLASS (klass); - widget_class->size_request = ygtk_tuned_scrolled_window_size_request; -} - Modified: trunk/gtk/src/ygtkratiobox.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkratiobox.h?rev=49199&... ============================================================================== --- trunk/gtk/src/ygtkratiobox.h (original) +++ trunk/gtk/src/ygtkratiobox.h Thu Jul 17 00:23:03 2008 @@ -152,44 +152,3 @@ G_END_DECLS #endif /*YGTK_ADJ_SIZE_H*/ -/* YGtkScrolledWindow gives some a more fine-grained automatic scroll policy. - It allows the user to specify from which size scrolling should be applied. */ -#ifndef YGTK_TUNED_SCROLLED_WIDOW_H -#define YGTK_TUNED_SCROLLED_WIDOW_H - -#include <gtk/gtkscrolledwindow.h> -G_BEGIN_DECLS - -#define YGTK_TYPE_TUNED_SCROLLED_WINDOW (ygtk_tuned_scrolled_window_get_type ()) -#define YGTK_TUNED_SCROLLED_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - YGTK_TYPE_TUNED_SCROLLED_WINDOW, YGtkTunedScrolledWindow)) -#define YGTK_TUNED_SCROLLED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - YGTK_TYPE_TUNED_SCROLLED_WINDOW, YGtkTunedScrolledWindowClass)) -#define YGTK_IS_TUNED_SCROLLED_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - YGTK_TYPE_TUNED_SCROLLED_WINDOW)) -#define YGTK_IS_TUNED_SCROLLED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - YGTK_TYPE_TUNED_SCROLLED_WINDOW)) -#define YGTK_TUNED_SCROLLED_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - YGTK_TYPE_TUNED_SCROLLED_WINDOW, YGtkTunedScrolledWindowClass)) - -typedef struct _YGtkTunedScrolledWindow -{ - GtkScrolledWindow parent; - // members - guint max_width, max_height; -} YGtkTunedScrolledWindow; - -typedef struct _YGtkTunedScrolledWindowClass -{ - GtkScrolledWindowClass parent_class; -} YGtkTunedScrolledWindowClass; - -GType ygtk_tuned_scrolled_window_get_type (void) G_GNUC_CONST; -GtkWidget* ygtk_tuned_scrolled_window_new (GtkWidget *child /*or NULL*/); - -void ygtk_tuned_scrolled_window_set_auto_policy (YGtkTunedScrolledWindow *scroll, - guint max_width, guint max_height); - -G_END_DECLS -#endif /*YGTK_TUNED_SCROLLED_WIDOW_H*/ - -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org