Author: rpmcruz
Date: Fri Dec 7 14:19:50 2007
New Revision: 42800
URL: http://svn.opensuse.org/viewcvs/yast?rev=42800&view=rev
Log:
* src/YGUtils.h/cc: cleanup of methods.
* src/YGTable.cc (YGTable): fixed sorting. new libyui has this KeepSorted
function, but GTK doesn't let us revert back to unsorted once we sort them...
Modified:
trunk/gtk/unstable-libyui/ChangeLog
trunk/gtk/unstable-libyui/src/YGTable.cc
trunk/gtk/unstable-libyui/src/YGUtils.cc
trunk/gtk/unstable-libyui/src/YGUtils.h
Modified: trunk/gtk/unstable-libyui/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/unstable-libyui/ChangeLog?rev=42800&r1=42799&r2=42800&view=diff
==============================================================================
--- trunk/gtk/unstable-libyui/ChangeLog (original)
+++ trunk/gtk/unstable-libyui/ChangeLog Fri Dec 7 14:19:50 2007
@@ -7,6 +7,10 @@
GtkCellRendererText and GtkCellRendererPixbuf. We need this as yast can
set either an icon or text on a cell, or both.
+ * src/YGUtils.h/cc: cleanup of methods.
+ * src/YGTable.cc (YGTable): fixed sorting. new libyui has this KeepSorted
+ function, but GTK doesn't let us revert back to unsorted once we sort them...
+
2007-12-06 Ricardo Cruz
* Fixed previous crash, some other problems and some improvements.
Modified: trunk/gtk/unstable-libyui/src/YGTable.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/unstable-libyui/src/YGTable.cc?rev=42800&r1=42799&r2=42800&view=diff
==============================================================================
--- trunk/gtk/unstable-libyui/src/YGTable.cc (original)
+++ trunk/gtk/unstable-libyui/src/YGTable.cc Fri Dec 7 14:19:50 2007
@@ -207,6 +207,7 @@
, YGTableView (this, parent, string(), false, false)
{
IMPL
+fprintf (stderr, "YGTable()!\n");
gtk_tree_view_set_headers_visible (getView(), TRUE);
gtk_tree_view_set_rules_hint (getView(), columns() > 1);
@@ -226,13 +227,15 @@
if (immediateMode())
g_signal_connect (G_OBJECT (getWidget()), "cursor-changed",
G_CALLBACK (selected_cb), (YGTableView*) this);
+
+ setSortable (0);
}
virtual void setKeepSorting (bool keepSorting)
{
// FIXME: GTK doesn't let us get back to unsorted mode...
- if (!keepSorting)
- YGUtils::tree_view_set_sortable (getView(), 0);
+/* if (!keepSorting)
+ YGUtils::tree_view_set_sortable (getView(), 0);*/
YTable::setKeepSorting (keepSorting);
}
@@ -264,6 +267,74 @@
setCellLabel (iter, index+1, cell->label());
}
+ // Goes through all GtkTreeView columns, making them sortable.
+ void setSortable (int default_col)
+ {
+ IMPL
+ struct inner {
+ static gint sort_cb (GtkTreeModel *model, GtkTreeIter *a,
+ GtkTreeIter *b, gpointer data)
+ {
+ gchar *s1 = 0, *s2 = 0;
+ gint col = GPOINTER_TO_INT (data);
+ gtk_tree_model_get (model, a, col, &s1, -1);
+ gtk_tree_model_get (model, b, col, &s2, -1);
+
+ gint cmp = 0;
+ if (s1 && s2)
+ cmp = YGUtils::strcmp (s1, s2);
+
+ if (s1) g_free (s1);
+ if (s2) g_free (s2);
+ return cmp;
+ }
+
+ static void header_clicked_cb (GtkTreeViewColumn *column, GtkTreeSortable *sortable)
+ {
+ IMPL
+ GtkTreeViewColumn *last_sorted =
+ (GtkTreeViewColumn *) g_object_get_data (G_OBJECT (sortable), "last-sorted");
+ int id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "id"));
+
+ GtkSortType sort = GTK_SORT_ASCENDING;
+ if (last_sorted != column) {
+ if (last_sorted)
+ gtk_tree_view_column_set_sort_indicator (last_sorted, FALSE);
+ gtk_tree_view_column_set_sort_indicator (column, TRUE);
+ g_object_set_data (G_OBJECT (sortable), "last-sorted", column);
+ }
+ else {
+ sort = gtk_tree_view_column_get_sort_order (column);
+ sort = sort == GTK_SORT_ASCENDING ? GTK_SORT_DESCENDING : GTK_SORT_ASCENDING;
+ }
+
+ gtk_tree_view_column_set_sort_order (column, sort);
+ gtk_tree_sortable_set_sort_column_id (sortable, id, sort);
+ }
+ };
+
+ GtkTreeView *view = getView();
+ GtkTreeSortable *sortable = GTK_TREE_SORTABLE (gtk_tree_view_get_model (view));
+ // keep a pointer to currently sorted, so next can disable it
+ g_object_set_data (G_OBJECT (sortable), "last-sorted", NULL);
+
+ int n = 0;
+ GList *columns = gtk_tree_view_get_columns (view);
+ for (GList *i = columns; i; i = i->next, n++) {
+ GtkTreeViewColumn *column = (GtkTreeViewColumn *) i->data;
+ gtk_tree_sortable_set_sort_func (sortable, n, inner::sort_cb,
+ GINT_TO_POINTER ((n*2)+1), NULL);
+
+ g_object_set_data (G_OBJECT (column), "id", GINT_TO_POINTER (n));
+ gtk_tree_view_column_set_clickable (column, TRUE);
+ g_signal_connect (G_OBJECT (column), "clicked",
+ G_CALLBACK (inner::header_clicked_cb), sortable);
+/* if (col_nb == default_sort_col)
+ header_clicked_cb (column, sortable);*/
+ }
+ g_list_free (columns);
+ }
+
YGWIDGET_IMPL_COMMON
YGSELECTION_WIDGET_IMPL_CLEAR (YTable)
YGSELECTION_WIDGET_IMPL_SELECT (YTable)
@@ -274,7 +345,6 @@
return new YGTable (parent, header);
}
-
#include "YSelectionBox.h"
class YGSelectionBox : public YSelectionBox, public YGTableView
Modified: trunk/gtk/unstable-libyui/src/YGUtils.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/unstable-libyui/src/YGUtils.cc?rev=42800&r1=42799&r2=42800&view=diff
==============================================================================
--- trunk/gtk/unstable-libyui/src/YGUtils.cc (original)
+++ trunk/gtk/unstable-libyui/src/YGUtils.cc Fri Dec 7 14:19:50 2007
@@ -460,151 +460,6 @@
return parts;
}
-void YGUtils::print_model (GtkTreeModel *model, int string_col)
-{
- fprintf (stderr, "printing model...\n");
- int depth = 0;
- GtkTreeIter iter;
-
- if (!gtk_tree_model_get_iter_first (model, &iter)) {
- fprintf (stderr, "Couldn't even get a first iterator\n");
- return;
- }
-
- while (true)
- {
- // print node
- gchar *package_name = 0;
- gtk_tree_model_get (model, &iter, string_col, &package_name, -1);
- for (int i = 0; i < depth*4; i++)
- fprintf (stderr, " ");
- fprintf (stderr, "%s\n", package_name);
- g_free (package_name);
-
- if (gtk_tree_model_iter_has_child (model, &iter)) {
- GtkTreeIter parent = iter;
- gtk_tree_model_iter_children (model, &iter, &parent);
- depth++;
- }
- else {
- if (gtk_tree_model_iter_next (model, &iter))
- ; // continue
- else {
- // let's see if there is a parent
- GtkTreeIter child = iter;
- if (gtk_tree_model_iter_parent (model, &iter, &child) &&
- gtk_tree_model_iter_next (model, &iter))
- depth--;
- else
- break;
- }
- }
- }
-}
-
-void YGUtils::tree_view_radio_toggle_cb (GtkCellRendererToggle *renderer,
- gchar *path_str, GtkTreeModel *model)
-{
- // Toggle the box
- GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
- gint *column = (gint*) g_object_get_data (G_OBJECT (renderer), "column");
- GtkTreeIter iter;
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_path_free (path);
-
- // Disable radio buttons from the same parent
- GtkTreeIter parent_iter, child_iter;
- if (gtk_tree_model_iter_parent (model, &parent_iter, &iter) &&
- gtk_tree_model_iter_children (model, &child_iter, &parent_iter)) {
- do gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter, column, FALSE, -1);
- while (gtk_tree_model_iter_next (model, &child_iter));
- gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column, TRUE, -1);
- }
-}
-
-gint YGUtils::sort_compare_cb (GtkTreeModel *model, GtkTreeIter *a,
- GtkTreeIter *b, gpointer data)
-{
- IMPL
- gint col = GPOINTER_TO_INT (data);
- gchar *str1 = 0, *str2 = 0;
- gtk_tree_model_get (model, a, col, &str1, -1);
- gtk_tree_model_get (model, b, col, &str2, -1);
- gint cmp = 0;
- if (str1 && str2)
- cmp = YGUtils::strcmp (str1, str2);
-
- if (str1)
- g_free (str1);
- if (str2)
- g_free (str2);
- return cmp;
-}
-
-static void header_clicked_cb (GtkTreeViewColumn *column, GtkTreeSortable *sortable)
-{
- IMPL
- GtkTreeViewColumn *last_sorted =
- (GtkTreeViewColumn *) g_object_get_data (G_OBJECT (sortable), "last-sorted");
- int id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "id"));
-
- GtkSortType sort = GTK_SORT_ASCENDING;
- if (last_sorted != column) {
- if (last_sorted)
- gtk_tree_view_column_set_sort_indicator (last_sorted, FALSE);
- gtk_tree_view_column_set_sort_indicator (column, TRUE);
- g_object_set_data (G_OBJECT (sortable), "last-sorted", column);
- }
- else {
- sort = gtk_tree_view_column_get_sort_order (column);
- sort = sort == GTK_SORT_ASCENDING ? GTK_SORT_DESCENDING : GTK_SORT_ASCENDING;
- }
-
- gtk_tree_view_column_set_sort_order (column, sort);
- gtk_tree_sortable_set_sort_column_id (sortable, id, sort);
-}
-
-void YGUtils::tree_view_set_sortable (GtkTreeView *view, int default_sort_col)
-{
- IMPL
- g_assert (gtk_tree_view_get_headers_visible (view));
-
- /* Set all string columns clickable. */
- GtkTreeSortable *sortable = GTK_TREE_SORTABLE (gtk_tree_view_get_model (view));
- // we need a pointer, this function is used by different stuff, so to we'll
- // use g_object_*_data() to do of garbage collector
- g_object_set_data (G_OBJECT (sortable), "last-sorted", NULL);
-
- GList *columns = gtk_tree_view_get_columns (view);
- for (GList *i = g_list_first (columns); i; i = i->next) {
- GtkTreeViewColumn *column = (GtkTreeViewColumn *) i->data;
- int col_nb = g_list_position (columns, i);
-
- // check if it really is a string column
- bool string_col = false;
- GList *renderers = gtk_tree_view_column_get_cell_renderers (column);
- for (GList *j = g_list_first (renderers); j; j = j->next)
- if (GTK_IS_CELL_RENDERER_TEXT (j->data)) {
- string_col = true;
- break;
- }
- g_list_free (renderers);
- if (!string_col)
- continue;
-
- // set sortable and clickable
- gtk_tree_sortable_set_sort_func (sortable, col_nb, sort_compare_cb,
- GINT_TO_POINTER (col_nb), NULL);
- g_object_set_data (G_OBJECT (column), "id", GINT_TO_POINTER (col_nb));
- gtk_tree_view_column_set_clickable (column, TRUE);
- g_signal_connect (G_OBJECT (column), "clicked",
- G_CALLBACK (header_clicked_cb), sortable);
- if (col_nb == default_sort_col)
- header_clicked_cb (column, sortable);
- }
- g_list_free (columns);
-}
-
GValue YGUtils::floatToGValue (float num)
{
GValue value = { 0 };
@@ -613,44 +468,6 @@
return value;
}
-#define SCROLLING_TIME 700
-#define SCROLLING_STEP 100
-struct ScrollData {
- int orix, oriy, diffx, diffy, time;
- GtkTreeView *view;
-};
-
-static gboolean scroll_timeout (gpointer _data) {
- ScrollData *data = (ScrollData *) _data;
- data->time += SCROLLING_STEP;
-
- int x = data->orix + data->diffx;
- int y = ((data->diffy * data->time) / SCROLLING_TIME) + data->oriy;
-
- gtk_tree_view_scroll_to_point (data->view, x, y);
- return data->time < SCROLLING_TIME;
-}
-
-void YGUtils::tree_view_smooth_scroll_to_point (GtkTreeView *view, gint x, gint y) {
- GdkRectangle rect;
- gtk_tree_view_get_visible_rect (view, &rect);
- if (rect.x == x && rect.y == y)
- return;
-
- ScrollData *data = (ScrollData *) g_malloc (sizeof (ScrollData));
- data->orix = rect.x;
- data->oriy = rect.y;
- data->diffx = x - rect.x;
- data->diffy = y - rect.y;
- data->time = 0;
- data->view = view;
-
- static int id = 0;
- if (id)
- g_source_remove (id);
- id = g_timeout_add_full (G_PRIORITY_DEFAULT, SCROLLING_STEP, scroll_timeout, data, g_free);
-}
-
GdkPixbuf *YGUtils::loadPixbuf (const string &filename)
{
GdkPixbuf *pixbuf = NULL;
Modified: trunk/gtk/unstable-libyui/src/YGUtils.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/unstable-libyui/src/YGUtils.h?rev=42800&r1=42799&r2=42800&view=diff
==============================================================================
--- trunk/gtk/unstable-libyui/src/YGUtils.h (original)
+++ trunk/gtk/unstable-libyui/src/YGUtils.h Fri Dec 7 14:19:50 2007
@@ -56,30 +56,13 @@
eg: splitString ("Office/Writer", '/') => { "Office", "Writer" } */
std::list std::string splitString (const std::string &str, char separator);
- /* Prints a GtkTreeModel for debugging purposes. */
- void print_model (GtkTreeModel *model, int string_col);
-
- /* To be used as a callback to sort tree views. */
- gint sort_compare_cb (GtkTreeModel *model, GtkTreeIter *a,
- GtkTreeIter *b, gpointer data);
-
- /* To be used as a callback for a GtkTreeView with toggle cells. */
- void tree_view_radio_toggle_cb (GtkCellRendererToggle *renderer,
- gchar *path_str, GtkTreeModel *model);
-
- /* Goes through all GtkTreeView columns and checks for TextCellRenderers,
- setting those columns as sortable. */
- void tree_view_set_sortable (GtkTreeView *view, int default_sort_col);
-
- /* Like gtk_tree_view_scroll_to_point(), but does smooth scroll. */
- void tree_view_smooth_scroll_to_point (GtkTreeView *view, gint x, gint y);
-
/* Converts stuff to GValues */
GValue floatToGValue (float num);
- void setStockIcon (GtkWidget *button, std::string ycp_str);
-
GdkPixbuf *loadPixbuf (const std::string &fileneme);
+
+ /* Tries to make sense out of the string, applying some stock icon to the button. */
+ void setStockIcon (GtkWidget *button, std::string ycp_str);
};
extern "C" {
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org