Author: rpmcruz
Date: Thu Apr 22 16:43:23 2010
New Revision: 61825
URL: http://svn.opensuse.org/viewcvs/yast?rev=61825&view=rev
Log:
* src/pkg/yzyppwrapper.cc:bug fix: ups: just broke
is-installed flag for patterns.
* src/ygtktreeview.h/c, src/pkg/ygtkpkglistview.cc &
src/pkg/ygtkpkghistorydialog.cc: bug fix: on arabic, tooltips
were showing in the wrong columns.
* src/pkg/ygtkpkgdetailview.cc: don't show remove button for
patches, in versions widget.
* src/pkg/ygtkpkgpatternview.cc: disable remove item
for patterns.
* src/pkg/YGPackageSelector.cc: don't show patterns view
when none is available.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/pkg/YGPackageSelector.cc
trunk/gtk/src/pkg/ygtkpkgdetailview.cc
trunk/gtk/src/pkg/ygtkpkghistorydialog.cc
trunk/gtk/src/pkg/ygtkpkglistview.cc
trunk/gtk/src/pkg/ygtkpkgpatternview.cc
trunk/gtk/src/pkg/ygtkpkgpatternview.h
trunk/gtk/src/pkg/yzyppwrapper.cc
trunk/gtk/src/ygtktreeview.c
trunk/gtk/src/ygtktreeview.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Thu Apr 22 16:43:23 2010
@@ -1,3 +1,21 @@
+2010-04-22 Ricardo Cruz
+
+ * src/pkg/yzyppwrapper.cc:bug fix: ups: just broke
+ is-installed flag for patterns.
+
+ * src/ygtktreeview.h/c, src/pkg/ygtkpkglistview.cc &
+ src/pkg/ygtkpkghistorydialog.cc: bug fix: on arabic, tooltips
+ were showing in the wrong columns.
+
+ * src/pkg/ygtkpkgdetailview.cc: don't show remove button for
+ patches, in versions widget.
+
+ * src/pkg/ygtkpkgpatternview.cc: disable remove item
+ for patterns.
+
+ * src/pkg/YGPackageSelector.cc: don't show patterns view
+ when none is available.
+
2010-04-21 Ricardo Cruz
* src/pkg/ygtkpkglistviewcc: Atri request: make dependencies
Modified: trunk/gtk/src/pkg/YGPackageSelector.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/YGPackageSelector.cc?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/YGPackageSelector.cc (original)
+++ trunk/gtk/src/pkg/YGPackageSelector.cc Thu Apr 22 16:43:23 2010
@@ -46,6 +46,7 @@
YGtkPkgDetailView *m_details;
guint m_refresh_id;
Ypp::List m_refresh_list;
+bool has_patterns_mode;
struct SuffixFilter : public Ypp::Match {
SuffixFilter (Impl *pThis) : pThis (pThis) {}
@@ -155,7 +156,9 @@
m_combo->add (_("Repositories"));
m_combo->add (_("Support"));
m_combo->add ("");
- m_combo->add (_("Patterns"));
+ has_patterns_mode = !isPatternsPoolEmpty();
+ if (has_patterns_mode)
+ m_combo->add (_("Patterns"));
m_combo->add (_("Languages"));
int active = 5;
@@ -560,7 +563,9 @@
case 1: return new YGtkPkgRpmGroupsView();
case 2: model = new YGtkPkgRepositoryModel(); break;
case 3: model = new YGtkPkgSupportModel(); break;
- case 5: return new YGtkPkgPatternView (Ypp::Selectable::PATTERN);
+ case 5:
+ if (has_patterns_mode)
+ return new YGtkPkgPatternView (Ypp::Selectable::PATTERN);
case 6: return new YGtkPkgLanguageView();
}
}
Modified: trunk/gtk/src/pkg/ygtkpkgdetailview.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkgdetailview.cc?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/ygtkpkgdetailview.cc (original)
+++ trunk/gtk/src/pkg/ygtkpkgdetailview.cc Thu Apr 22 16:43:23 2010
@@ -493,7 +493,7 @@
void updateButton()
{
const char *label = 0, *stock = 0;
- bool modified = false, can_modify = true;
+ bool modified = false, can_modify = true, can_never_modify = false;
if (list.size() == 1) {
Ypp::Selectable sel = list.get (0);
Ypp::Version &version = getSelected();
@@ -501,7 +501,7 @@
if (version.isInstalled()) {
label = _("Remove");
stock = GTK_STOCK_DELETE;
- can_modify = sel.canRemove();
+ can_never_modify = !sel.canRemove();
modified = sel.toRemove();
}
else {
@@ -526,6 +526,7 @@
}
modified = sel.toInstall();
}
+ can_modify = !sel.isLocked();
modified = modified && version.toModify();
}
else {
@@ -538,7 +539,7 @@
else if (props.isInstalled()) {
label = _("Remove");
stock = GTK_STOCK_DELETE;
- can_modify = props.canRemove();
+ can_never_modify = !props.canRemove();
}
else if (props.isNotInstalled()) {
label = _("Install");
@@ -549,6 +550,7 @@
stock = GTK_STOCK_UNDO;
modified = false; // don't show another undo button
}
+ can_modify = props.isUnlocked();
}
if (label) {
@@ -561,6 +563,11 @@
else
gtk_widget_hide (button);
gtk_widget_set_sensitive (button, !modified && can_modify);
+ if (can_modify)
+ gtk_widget_set_tooltip_text (button, NULL);
+ else
+ gtk_widget_set_tooltip_text (button, _("Package is locked"));
+ !can_never_modify ? gtk_widget_show (button) : gtk_widget_hide (button);
modified ? gtk_widget_show (undo_button) : gtk_widget_hide (undo_button);
}
Modified: trunk/gtk/src/pkg/ygtkpkghistorydialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkghistorydialog.cc?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/ygtkpkghistorydialog.cc (original)
+++ trunk/gtk/src/pkg/ygtkpkghistorydialog.cc Thu Apr 22 16:43:23 2010
@@ -432,7 +432,7 @@
text.reserve (254);
const char *icon = 0;
- if (column == gtk_tree_view_get_column (view, 2)) { // repository
+ if (column == ygtk_tree_view_get_column (YGTK_TREE_VIEW (view), 2)) { // repository
char *name, *url;
gtk_tree_model_get (model, &iter,
LogListHandler::REPOSITORY_COLUMN, &name,
@@ -510,7 +510,7 @@
gtk_tree_view_column_set_attributes (column, renderer,
"markup", LogListHandler::NAME_COLUMN, "xpad", LogListHandler::XPAD_COLUMN,
"foreground", LogListHandler::COLOR_COLUMN, NULL);
- g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_MIDDLE, NULL);
if (reverse)
gtk_tree_view_column_pack_start (column, pix_renderer, FALSE);
Modified: trunk/gtk/src/pkg/ygtkpkglistview.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkglistview.cc?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/ygtkpkglistview.cc (original)
+++ trunk/gtk/src/pkg/ygtkpkglistview.cc Thu Apr 22 16:43:23 2010
@@ -64,7 +64,7 @@
// we pass GtkTreeView to the model, so we can test for selected rows
// and modify text markup appropriely (trashing the data-view model, heh)
- YGtkZyppModel (Ypp::List list) : m_list (list)
+ YGtkZyppModel (Ypp::List list) : m_list (list.clone())
{ addSelListener (this); }
~YGtkZyppModel()
@@ -295,9 +295,6 @@
}
};
-static GtkTreeModel *ygtk_zypp_model_new (Ypp::List list)
-{ return ygtk_tree_model_new (new YGtkZyppModel (list)); }
-
static Ypp::Selectable *ygtk_zypp_model_get_sel (GtkTreeModel *model, gchar *path_str)
{
GtkTreeIter iter;
@@ -348,7 +345,7 @@
ascendent = _ascendent;
}
- GtkTreeModel *model = ygtk_zypp_model_new (list.clone());
+ GtkTreeModel *model = ygtk_tree_model_new (new YGtkZyppModel (list));
gtk_tree_view_set_model (GTK_TREE_VIEW (view), model);
g_object_unref (G_OBJECT (model));
setHighlight (keywords);
@@ -574,7 +571,7 @@
view, x, y, NULL, &column, NULL, NULL);
GtkIconSize icon_size = GTK_ICON_SIZE_MENU;
- if (column == gtk_tree_view_get_column (view, 0)) {
+ if (column == ygtk_tree_view_get_column (YGTK_TREE_VIEW (view), 0)) {
text = getStatusSummary (*sel);
icon = getStatusStockIcon (*sel);
}
Modified: trunk/gtk/src/pkg/ygtkpkgpatternview.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkgpatternview.cc?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/ygtkpkgpatternview.cc (original)
+++ trunk/gtk/src/pkg/ygtkpkgpatternview.cc Thu Apr 22 16:43:23 2010
@@ -17,7 +17,7 @@
enum Column {
HAS_CHECK_COLUMN, CHECK_COLUMN, HAS_ICON_COLUMN, ICON_COLUMN,
- TEXT_COLUMN, TOOLTIP_COLUMN, ORDER_COLUMN, POINTER_COLUMN, TOTAL_COLUMNS
+ TEXT_COLUMN, ORDER_COLUMN, POINTER_COLUMN, TOTAL_COLUMNS
};
struct YGtkPkgPatternView::Impl : public Ypp::SelListener {
@@ -108,11 +108,10 @@
else
ptr = g_strdup (sel.zyppLocale().code().c_str());
- std::string tooltip (YGUtils::escapeMarkup (sel.description (false)));
gtk_tree_store_set (store, iter, HAS_CHECK_COLUMN, TRUE,
CHECK_COLUMN, sel.isInstalled() || sel.toInstall(), HAS_ICON_COLUMN, TRUE,
ICON_COLUMN, pixbuf, TEXT_COLUMN, (sel.name() + '\n').c_str(),
- TOOLTIP_COLUMN, tooltip.c_str(), ORDER_COLUMN, order.c_str(),
+ ORDER_COLUMN, order.c_str(),
POINTER_COLUMN, ptr, -1);
if (pixbuf)
@@ -206,7 +205,7 @@
insert_node (store, NULL, &iter, pattern->order());
gtk_tree_store_set (store, &iter, HAS_CHECK_COLUMN, FALSE,
CHECK_COLUMN, FALSE, HAS_ICON_COLUMN, FALSE, ICON_COLUMN, NULL,
- TEXT_COLUMN, text.c_str(), TOOLTIP_COLUMN, NULL,
+ TEXT_COLUMN, text.c_str(),
ORDER_COLUMN, pattern->order().c_str(), POINTER_COLUMN, NULL, -1);
}
insert_pattern (store, &iter, sel, pattern);
@@ -245,6 +244,23 @@
static void remove_cb (GtkWidget *widget, ZyppSelectablePtr zsel)
{ Ypp::Selectable (zsel).remove(); }
+static GtkWidget *menu_item_append (GtkWidget *menu, const char *label, const char *stock, bool sensitive)
+{
+ GtkWidget *item;
+ if (label) {
+ item = gtk_image_menu_item_new_with_mnemonic (label);
+ if (stock) {
+ GtkWidget *icon = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), icon);
+ }
+ }
+ else
+ item = gtk_image_menu_item_new_from_stock (stock, NULL);
+ gtk_widget_set_sensitive (item, sensitive);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ return item;
+}
+
static void right_click_cb (YGtkTreeView *yview, gboolean outreach, YGtkPkgPatternView *pThis)
{
if (!outreach) {
@@ -257,32 +273,28 @@
gtk_tree_model_get (model, &iter, POINTER_COLUMN, &zsel, -1);
Ypp::Selectable sel (zsel);
- GtkWidget *menu = gtk_menu_new(), *item, *icon;
- item = gtk_image_menu_item_new_with_mnemonic (_("Install"));
- icon = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), icon);
- gtk_widget_set_sensitive (item, !sel.isInstalled());
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- g_signal_connect (G_OBJECT (item), "activate",
- G_CALLBACK (install_cb), zsel);
-
- if (sel.canRemove()) {
- item = gtk_image_menu_item_new_with_mnemonic (_("Remove"));
- icon = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), icon);
- gtk_widget_set_sensitive (item, sel.isInstalled());
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ GtkWidget *menu = gtk_menu_new(), *item;
+ if (sel.toModify()) {
+ item = menu_item_append (menu, NULL, GTK_STOCK_UNDO, true);
g_signal_connect (G_OBJECT (item), "activate",
- G_CALLBACK (remove_cb), zsel);
+ G_CALLBACK (undo_cb), zsel);
+ }
+ else {
+ if (sel.isInstalled()) {
+ if (sel.canRemove()) {
+ item = menu_item_append (menu, _("_Remove"), GTK_STOCK_REMOVE, true);
+ g_signal_connect (G_OBJECT (item), "activate",
+ G_CALLBACK (remove_cb), zsel);
+ }
+ else
+ menu_item_append (menu, _("Remove: cannot remove patterns"), NULL, false);
+ }
+ else {
+ item = menu_item_append (menu, _("_Install"), GTK_STOCK_ADD, true);
+ g_signal_connect (G_OBJECT (item), "activate",
+ G_CALLBACK (install_cb), zsel);
+ }
}
-
- item = gtk_image_menu_item_new_with_mnemonic (_("Undo"));
- icon = gtk_image_new_from_stock (GTK_STOCK_UNDO, GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), icon);
- gtk_widget_set_sensitive (item, sel.toModify());
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- g_signal_connect (G_OBJECT (item), "activate",
- G_CALLBACK (undo_cb), zsel);
ygtk_tree_view_popup_menu (yview, menu);
}
@@ -325,6 +337,49 @@
static void selection_changed_cb (GtkTreeSelection *selection, YGtkPkgPatternView *pThis)
{ pThis->notify(); }
+static gboolean query_tooltip_cb (GtkWidget *widget, gint x, gint y,
+ gboolean keyboard_mode, GtkTooltip *tooltip, YGtkPkgPatternView *pThis)
+{
+ GtkTreeView *view = GTK_TREE_VIEW (widget);
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ if (gtk_tree_view_get_tooltip_context (view,
+ &x, &y, keyboard_mode, &model, &path, &iter)) {
+ gtk_tree_view_set_tooltip_row (view, tooltip, path);
+ gtk_tree_path_free (path);
+
+ GtkTreeViewColumn *column;
+ int bx, by;
+ gtk_tree_view_convert_widget_to_bin_window_coords (
+ view, x, y, &bx, &by);
+ gtk_tree_view_get_path_at_pos (
+ view, x, y, NULL, &column, NULL, NULL);
+
+ ZyppSelectablePtr zsel;
+ gtk_tree_model_get (model, &iter, POINTER_COLUMN, &zsel, -1);
+ if (zsel) {
+ Ypp::Selectable sel (zsel);
+
+ if (column == ygtk_tree_view_get_column (YGTK_TREE_VIEW (view), 0)) { // check-marks
+ if (sel.isInstalled())
+ gtk_tooltip_set_text (tooltip,
+ _("Installed: cannot remove a pattern.\n\n"
+ "You must manually remove the individual packages you no "
+ "longer want to keep."));
+ else
+ gtk_tooltip_set_text (tooltip, _("Not installed"));
+ }
+ else {
+ std::string text (YGUtils::escapeMarkup (sel.description (false)));
+ gtk_tooltip_set_text (tooltip, text.c_str());
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
YGtkPkgPatternView::YGtkPkgPatternView (Ypp::Selectable::Type type)
: impl (new Impl())
{
@@ -332,7 +387,7 @@
GtkTreeStore *store = gtk_tree_store_new (TOTAL_COLUMNS, G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+ G_TYPE_STRING, G_TYPE_POINTER);
if (type == Ypp::Selectable::LANGUAGE) {
Ypp::LangQuery query;
@@ -377,14 +432,16 @@
}
impl->view = ygtk_tree_view_new (NULL);
- gtk_tree_view_set_model (GTK_TREE_VIEW (impl->view), GTK_TREE_MODEL (store));
- g_object_unref (G_OBJECT (store));
GtkTreeView *view = GTK_TREE_VIEW (impl->view);
+ gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
+ g_object_unref (G_OBJECT (store));
gtk_tree_view_set_headers_visible (view, FALSE);
gtk_tree_view_set_search_column (view, TEXT_COLUMN);
- gtk_tree_view_set_tooltip_column (view, TOOLTIP_COLUMN);
gtk_tree_view_expand_all (view);
gtk_tree_view_set_show_expanders (view, FALSE);
+ gtk_widget_set_has_tooltip (impl->view, TRUE);
+ g_signal_connect (G_OBJECT (view), "query-tooltip",
+ G_CALLBACK (query_tooltip_cb), this);
g_signal_connect (G_OBJECT (view), "right-click",
G_CALLBACK (right_click_cb), this);
g_signal_connect (G_OBJECT (view), "row-activated",
@@ -472,3 +529,6 @@
return false;
}
+bool isPatternsPoolEmpty()
+{ return zyppPool().empty zypp::Pattern(); }
+
Modified: trunk/gtk/src/pkg/ygtkpkgpatternview.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkgpatternview.h?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/ygtkpkgpatternview.h (original)
+++ trunk/gtk/src/pkg/ygtkpkgpatternview.h Thu Apr 22 16:43:23 2010
@@ -27,5 +27,7 @@
Impl *impl;
};
+bool isPatternsPoolEmpty();
+
#endif
Modified: trunk/gtk/src/pkg/yzyppwrapper.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/yzyppwrapper.cc?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/pkg/yzyppwrapper.cc (original)
+++ trunk/gtk/src/pkg/yzyppwrapper.cc Thu Apr 22 16:43:23 2010
@@ -69,6 +69,7 @@
zypp::ResStatus status = m_zobj->poolItem().status();
switch (type()) {
case Ypp::Selectable::PATCH:
+ case Ypp::Selectable::PATTERN:
return status.isSatisfied() && !status.isToBeInstalled();
default:
return status.isInstalled();
Modified: trunk/gtk/src/ygtktreeview.c
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtktreeview.c?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/ygtktreeview.c (original)
+++ trunk/gtk/src/ygtktreeview.c Thu Apr 22 16:43:23 2010
@@ -217,6 +217,21 @@
gtk_tree_view_insert_column (GTK_TREE_VIEW (view), column, pos);
}
+GtkTreeViewColumn *ygtk_tree_view_get_column (YGtkTreeView *view, gint nb)
+{
+ GtkTreeViewColumn *column;
+ if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL) {
+ GList *columns = gtk_tree_view_get_columns (GTK_TREE_VIEW (view));
+ nb = g_list_length (columns) - nb - 1;
+ column = g_list_nth_data (columns, nb);
+ g_list_free (columns);
+ }
+ else
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (view), nb);
+ return column;
+}
+
+
void ygtk_tree_view_set_empty_text (YGtkTreeView *view, const gchar *empty_text)
{
if (view->empty_text)
Modified: trunk/gtk/src/ygtktreeview.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtktreeview.h?rev=61825&r1=61824&r2=61825&view=diff
==============================================================================
--- trunk/gtk/src/ygtktreeview.h (original)
+++ trunk/gtk/src/ygtktreeview.h Thu Apr 22 16:43:23 2010
@@ -54,6 +54,9 @@
// (if you do, use it for all your column adding needs.)
void ygtk_tree_view_append_column (YGtkTreeView *view, GtkTreeViewColumn *column);
+// use this if you have used our ygtk_tree_view_append_column()
+GtkTreeViewColumn *ygtk_tree_view_get_column (YGtkTreeView *view, gint nb);
+
G_END_DECLS
#endif /*YGTK_TREE_VIEW_H*/
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org