]> Dogcows Code - chaz/tint2/blobdiff - src/tint2conf/theme_view.c
start tint2conf work
[chaz/tint2] / src / tint2conf / theme_view.c
index 1309fea46c3f99dc0c252aa1496c7a94ce4b0b1c..05fad6be4588d2950e00abcb18f033ec51910052 100644 (file)
@@ -1,7 +1,28 @@
-
+/**************************************************************************
+*
+* Tint2conf
+*
+* Copyright (C) 2009 Thierry lorthiois (lorthiois@bbsoft.fr) from Omega distribution
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License version 2
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+**************************************************************************/
+
+
+#include "main.h"
 #include "theme_view.h"
 
 // The data columns that we export via the tree model interface
+GtkWidget *g_theme_view;
 GtkListStore *g_store;
 int g_width_list, g_height_list;
 GtkCellRenderer *g_renderer;
@@ -10,11 +31,11 @@ GtkCellRenderer *g_renderer;
 
 GtkWidget *create_view()
 {
-       GtkTreeViewColumn   *col;
-       GtkCellRenderer     *renderer;
-       GtkWidget           *view;
+       GtkTreeViewColumn *col;
+       GtkCellRenderer *renderer;
+       GtkWidget  *view;
 
-       g_store = gtk_list_store_new(NB_COL, G_TYPE_STRING, GDK_TYPE_PIXBUF);
+       g_store = gtk_list_store_new(NB_COL, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF);
 
        view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(g_store));
        gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
@@ -29,6 +50,12 @@ GtkWidget *create_view()
        gtk_tree_view_column_set_visible(col, FALSE);
        gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
 
+       renderer = gtk_cell_renderer_text_new();
+       col = gtk_tree_view_column_new();
+       gtk_tree_view_column_pack_start(col, renderer, TRUE);
+       gtk_tree_view_column_add_attribute(col, renderer, "text", COL_THEME_NAME);
+       gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
+
        g_width_list = 200;
        g_height_list = 30;
        g_renderer = gtk_cell_renderer_pixbuf_new();
@@ -41,8 +68,9 @@ GtkWidget *create_view()
        gtk_tree_view_column_add_attribute(col, g_renderer, "pixbuf", COL_SNAPSHOT);
        gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
 
-       //g_timeout_add(50, (GSourceFunc) increase_timeout, NULL);
-
+       GtkTreeSortable *sortable;
+       sortable = GTK_TREE_SORTABLE(g_store);
+       gtk_tree_sortable_set_sort_column_id(sortable, COL_THEME_FILE, GTK_SORT_ASCENDING);
        return view;
 }
 
@@ -50,68 +78,81 @@ GtkWidget *create_view()
 void custom_list_append(const gchar *name)
 {
        GtkTreeIter  iter;
-       gchar *snap, *cmd;
-       gint pixWidth, pixHeight;
-       gboolean changeSize = FALSE;
-       GdkPixbuf *icon;
-
-       // build panel's snapshot
-       snap = g_build_filename (g_get_user_config_dir(), "tint2", "snap.jpg", NULL);
-       g_remove(snap);
-
-       cmd = g_strdup_printf("tint2 -c \'%s\' -s \'%s\'", name, snap);
-       system(cmd);
-       g_free(cmd);
-
-       // load
-       icon = gdk_pixbuf_new_from_file(snap, NULL);
-       g_free(snap);
-       if (!icon)
-               return;
-
-       pixWidth = gdk_pixbuf_get_width(icon);
-       pixHeight = gdk_pixbuf_get_height(icon);
-       if (g_width_list < pixWidth) {
-               g_width_list = pixWidth;
-               changeSize = TRUE;
-       }
-       if (g_height_list < (pixHeight+6)) {
-               g_height_list = pixHeight+6;
-               changeSize = TRUE;
-       }
-       if (changeSize)
-               gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list);
 
        gtk_list_store_append(g_store, &iter);
-       gtk_list_store_set(g_store, &iter, COL_THEME_FILE, name, COL_SNAPSHOT, icon, -1);
+       gtk_list_store_set(g_store, &iter, COL_THEME_FILE, name, -1);
+
+       gchar *b, *n;
+       b = strrchr(name, '/');
+       n = g_strdup(b+1);
+       b = strrchr(n, '.');
+       *b = '\0';
+       gtk_list_store_set(g_store, &iter, COL_THEME_NAME, n, -1);
 }
 
-/*
-gboolean increase_timeout (GtkCellRenderer *renderer)
-{
-  GtkTreeIter  iter;
-  gfloat       perc = 0.0;
-  //gchar        buf[20];
-
-  gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_store), &iter);
-
-  gtk_tree_model_get (GTK_TREE_MODEL(g_store), &iter, COL_SNAPSHOT, &perc, -1);
 
-  if ( perc > (1.0-STEP)  ||  (perc < STEP && perc > 0.0) )
-  {
-    increasing = (!increasing);
-  }
-
-  if (increasing)
-    perc = perc + STEP;
-  else
-    perc = perc - STEP;
+gboolean update_snapshot()
+{
+       GtkTreeModel *model;
+       GtkTreeIter iter;
+       GdkPixbuf *icon;
+       gboolean have_iter, found = FALSE;
+
+       model = gtk_tree_view_get_model(GTK_TREE_VIEW(g_theme_view));
+       have_iter = gtk_tree_model_get_iter_first(model, &iter);
+       while (have_iter) {
+               gtk_tree_model_get(model, &iter, COL_SNAPSHOT, &icon, -1);
+               if (icon != NULL) {
+                       g_object_unref(icon);
+                       have_iter = gtk_tree_model_iter_next(model, &iter);
+               }
+               else {
+                       found = TRUE;
+                       break;
+               }
+       }
 
-  //g_snprintf(buf, sizeof(buf), "%u %%", (guint)(perc*100));
+       if (found) {
+               // build panel's snapshot
+               GdkPixbuf *pixbuf;
+               gchar *name, *snap, *cmd;
+               gint pixWidth, pixHeight;
+               gboolean changeSize = FALSE;
+
+               snap = g_build_filename (g_get_user_config_dir(), "tint2", "snap.jpg", NULL);
+               g_remove(snap);
+
+               gtk_tree_model_get(model, &iter, COL_THEME_FILE, &name, -1);
+               cmd = g_strdup_printf("tint2 -c \'%s\' -s \'%s\'", name, snap);
+               system(cmd);
+
+               // load
+               pixbuf = gdk_pixbuf_new_from_file(snap, NULL);
+               if (pixbuf == NULL) {
+                       printf("snapshot NULL : %s\n", cmd);
+                       found = FALSE;
+               }
+               g_free(snap);
+               g_free(cmd);
+               g_free(name);
+
+               pixWidth = gdk_pixbuf_get_width(pixbuf);
+               pixHeight = gdk_pixbuf_get_height(pixbuf);
+               if (g_width_list != pixWidth) {
+                       g_width_list = pixWidth;
+                       changeSize = TRUE;
+               }
+               if (g_height_list != (pixHeight+30)) {
+                       g_height_list = pixHeight+30;
+                       changeSize = TRUE;
+               }
+               if (changeSize)
+                       gtk_cell_renderer_set_fixed_size(g_renderer, g_width_list, g_height_list);
+
+               gtk_list_store_set(g_store, &iter, COL_SNAPSHOT, pixbuf, -1);
+       }
+       return found;
+}
 
-  gtk_list_store_set (g_store, &iter, COL_SNAPSHOT, perc, -1);
 
-  return TRUE;
-}
-*/
 
This page took 0.025191 seconds and 4 git commands to generate.