forked from AuroraMiddleware/gtk
Revert "gtk-demo: Make the colors demo populate incrementally"
This eases adding a bunch of follow-up features. After those features
have landed, this functionality will be readded.
This reverts commit a10340859d
.
This commit is contained in:
parent
70894b48af
commit
bfdede7acc
@ -241,54 +241,30 @@ gtk_color_new (const char *name,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct
|
static GListModel *
|
||||||
|
create_colors_model (void)
|
||||||
{
|
{
|
||||||
GtkWidget *widget;
|
GListStore *result;
|
||||||
GBytes *data;
|
|
||||||
GListStore *store;
|
|
||||||
char **lines;
|
|
||||||
guint n;
|
|
||||||
guint i;
|
|
||||||
} ColorData;
|
|
||||||
|
|
||||||
static void
|
|
||||||
free_color_data (gpointer data)
|
|
||||||
{
|
|
||||||
ColorData *cd = data;
|
|
||||||
|
|
||||||
if (cd->widget)
|
|
||||||
gtk_widget_set_sensitive (cd->widget, TRUE);
|
|
||||||
g_bytes_unref (cd->data);
|
|
||||||
g_object_unref (cd->store);
|
|
||||||
g_strfreev (cd->lines);
|
|
||||||
g_free (cd);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
add_color (GtkWidget *widget,
|
|
||||||
GdkFrameClock *clock,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
ColorData *cd = data;
|
|
||||||
const char *name;
|
|
||||||
char **fields;
|
|
||||||
int red, green, blue;
|
|
||||||
int h, s, v;
|
|
||||||
GtkColor *color;
|
GtkColor *color;
|
||||||
guint64 start, now;
|
GBytes *data;
|
||||||
|
char **lines;
|
||||||
|
guint i;
|
||||||
|
|
||||||
start = g_get_monotonic_time ();
|
result = g_list_store_new (GTK_TYPE_COLOR);
|
||||||
|
data = g_resources_lookup_data ("/listview_colors/color.names.txt", 0, NULL);
|
||||||
|
lines = g_strsplit (g_bytes_get_data (data, NULL), "\n", 0);
|
||||||
|
|
||||||
while (cd->i < cd->n)
|
for (i = 0; lines[i]; i++)
|
||||||
{
|
{
|
||||||
const char *line = cd->lines[cd->i];
|
const char *name;
|
||||||
|
char **fields;
|
||||||
|
int red, green, blue;
|
||||||
|
int h, s, v;
|
||||||
|
|
||||||
cd->i++;
|
if (lines[i][0] == '#' || lines[i][0] == '\0')
|
||||||
|
|
||||||
if (line[0] == '#' || line[0] == '\0')
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fields = g_strsplit (line, " ", 0);
|
fields = g_strsplit (lines[i], " ", 0);
|
||||||
name = fields[1];
|
name = fields[1];
|
||||||
red = atoi (fields[3]);
|
red = atoi (fields[3]);
|
||||||
green = atoi (fields[4]);
|
green = atoi (fields[4]);
|
||||||
@ -298,67 +274,16 @@ add_color (GtkWidget *widget,
|
|||||||
v = atoi (fields[11]);
|
v = atoi (fields[11]);
|
||||||
|
|
||||||
color = gtk_color_new (name, red / 255., green / 255., blue / 255., h, s, v);
|
color = gtk_color_new (name, red / 255., green / 255., blue / 255., h, s, v);
|
||||||
g_list_store_append (cd->store, color);
|
g_list_store_append (result, color);
|
||||||
g_object_unref (color);
|
g_object_unref (color);
|
||||||
|
|
||||||
g_strfreev (fields);
|
g_strfreev (fields);
|
||||||
|
|
||||||
now = g_get_monotonic_time ();
|
|
||||||
if (now > start + 4000)
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
}
|
||||||
|
g_strfreev (lines);
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
g_bytes_unref (data);
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
return G_LIST_MODEL (result);
|
||||||
populate_colors_model (GtkWidget *widget,
|
|
||||||
GListStore *store)
|
|
||||||
{
|
|
||||||
ColorData *cd;
|
|
||||||
|
|
||||||
cd = g_new (ColorData, 1);
|
|
||||||
|
|
||||||
gtk_widget_set_sensitive (widget, FALSE);
|
|
||||||
|
|
||||||
cd->widget = widget;
|
|
||||||
cd->store = g_object_ref (store);
|
|
||||||
cd->data = g_resources_lookup_data ("/listview_colors/color.names.txt", 0, NULL);
|
|
||||||
cd->lines = g_strsplit (g_bytes_get_data (cd->data, NULL), "\n", 0);
|
|
||||||
cd->n = g_strv_length (cd->lines);
|
|
||||||
cd->i = 0;
|
|
||||||
|
|
||||||
gtk_widget_add_tick_callback (widget, add_color, cd, free_color_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
fill (GtkWidget *view,
|
|
||||||
GListStore *store)
|
|
||||||
{
|
|
||||||
ColorData *cd;
|
|
||||||
gboolean res;
|
|
||||||
|
|
||||||
cd = g_new (ColorData, 1);
|
|
||||||
|
|
||||||
cd->widget = NULL;
|
|
||||||
cd->store = g_object_ref (store);
|
|
||||||
cd->data = g_resources_lookup_data ("/listview_colors/color.names.txt", 0, NULL);
|
|
||||||
cd->lines = g_strsplit (g_bytes_get_data (cd->data, NULL), "\n", 0);
|
|
||||||
cd->n = g_strv_length (cd->lines);
|
|
||||||
cd->i = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
res = add_color (view, NULL, cd);
|
|
||||||
} while (res == G_SOURCE_CONTINUE);
|
|
||||||
free_color_data (cd);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
refill (GtkWidget *button,
|
|
||||||
GListStore *store)
|
|
||||||
{
|
|
||||||
g_list_store_remove_all (store);
|
|
||||||
populate_colors_model (button, store);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@ -476,7 +401,6 @@ create_color_grid (void)
|
|||||||
GtkWidget *gridview;
|
GtkWidget *gridview;
|
||||||
GtkListItemFactory *factory;
|
GtkListItemFactory *factory;
|
||||||
GListModel *model, *selection;
|
GListModel *model, *selection;
|
||||||
GListStore *store;
|
|
||||||
|
|
||||||
gridview = gtk_grid_view_new ();
|
gridview = gtk_grid_view_new ();
|
||||||
gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
|
gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
|
||||||
@ -490,34 +414,15 @@ create_color_grid (void)
|
|||||||
gtk_grid_view_set_max_columns (GTK_GRID_VIEW (gridview), 24);
|
gtk_grid_view_set_max_columns (GTK_GRID_VIEW (gridview), 24);
|
||||||
gtk_grid_view_set_enable_rubberband (GTK_GRID_VIEW (gridview), TRUE);
|
gtk_grid_view_set_enable_rubberband (GTK_GRID_VIEW (gridview), TRUE);
|
||||||
|
|
||||||
store = g_list_store_new (GTK_TYPE_COLOR);
|
model = G_LIST_MODEL (gtk_sort_list_model_new (create_colors_model (), NULL));
|
||||||
fill (gridview, store);
|
|
||||||
|
|
||||||
model = G_LIST_MODEL (gtk_sort_list_model_new (G_LIST_MODEL (store), NULL));
|
|
||||||
selection = G_LIST_MODEL (gtk_property_selection_new (model, "selected"));
|
selection = G_LIST_MODEL (gtk_property_selection_new (model, "selected"));
|
||||||
gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), selection);
|
gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), selection);
|
||||||
g_object_unref (selection);
|
g_object_unref (selection);
|
||||||
g_object_unref (model);
|
g_object_unref (model);
|
||||||
g_object_unref (store);
|
|
||||||
|
|
||||||
return gridview;
|
return gridview;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
items_changed_cb (GListModel *model,
|
|
||||||
guint position,
|
|
||||||
guint removed,
|
|
||||||
guint added,
|
|
||||||
GtkWidget *label)
|
|
||||||
{
|
|
||||||
guint n = g_list_model_get_n_items (model);
|
|
||||||
char *text;
|
|
||||||
|
|
||||||
text = g_strdup_printf ("%u items", n);
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), text);
|
|
||||||
g_free (text);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@ -529,12 +434,11 @@ do_listview_colors (GtkWidget *do_widget)
|
|||||||
GtkListItemFactory *factory;
|
GtkListItemFactory *factory;
|
||||||
GListStore *factories;
|
GListStore *factories;
|
||||||
GListModel *model;
|
GListModel *model;
|
||||||
|
|
||||||
GtkSorter *sorter;
|
GtkSorter *sorter;
|
||||||
GtkSorter *multi_sorter;
|
GtkSorter *multi_sorter;
|
||||||
GListStore *sorters;
|
GListStore *sorters;
|
||||||
GtkExpression *expression;
|
GtkExpression *expression;
|
||||||
GtkWidget *button;
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Colors");
|
gtk_window_set_title (GTK_WINDOW (window), "Colors");
|
||||||
@ -555,18 +459,6 @@ do_listview_colors (GtkWidget *do_widget)
|
|||||||
model = gtk_grid_view_get_model (GTK_GRID_VIEW (gridview));
|
model = gtk_grid_view_get_model (GTK_GRID_VIEW (gridview));
|
||||||
g_object_get (model, "model", &model, NULL);
|
g_object_get (model, "model", &model, NULL);
|
||||||
|
|
||||||
button = gtk_button_new_with_mnemonic ("_Refill");
|
|
||||||
g_signal_connect (button, "clicked",
|
|
||||||
G_CALLBACK (refill),
|
|
||||||
gtk_sort_list_model_get_model (GTK_SORT_LIST_MODEL (model)));
|
|
||||||
|
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);
|
|
||||||
|
|
||||||
label = gtk_label_new ("0 items");
|
|
||||||
g_signal_connect (gtk_grid_view_get_model (GTK_GRID_VIEW (gridview)),
|
|
||||||
"items-changed", G_CALLBACK (items_changed_cb), label);
|
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), label);
|
|
||||||
|
|
||||||
sorters = g_list_store_new (GTK_TYPE_SORTER);
|
sorters = g_list_store_new (GTK_TYPE_SORTER);
|
||||||
|
|
||||||
sorter = gtk_string_sorter_new (gtk_property_expression_new (GTK_TYPE_COLOR, NULL, "name"));
|
sorter = gtk_string_sorter_new (gtk_property_expression_new (GTK_TYPE_COLOR, NULL, "name"));
|
||||||
|
Loading…
Reference in New Issue
Block a user