Generate preview images of charts for the list view
This commit is contained in:
parent
54a93e05d6
commit
dfb3e0f8ff
@ -41,6 +41,7 @@ struct _AgChartRenderer
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define AG_CHART_RENDERER_TILE_SIZE 256
|
#define AG_CHART_RENDERER_TILE_SIZE 256
|
||||||
|
#define AG_CHART_RENDERER_ICON_SIZE 15
|
||||||
#define AG_CHART_RENDERER_CHECK_ICON_SIZE 40
|
#define AG_CHART_RENDERER_CHECK_ICON_SIZE 40
|
||||||
#define AG_CHART_RENDERER_TILE_MARGIN AG_CHART_RENDERER_CHECK_ICON_SIZE / 4
|
#define AG_CHART_RENDERER_TILE_MARGIN AG_CHART_RENDERER_CHECK_ICON_SIZE / 4
|
||||||
#define AG_CHART_RENDERER_TILE_MARGIN_BOTTOM AG_CHART_RENDERER_CHECK_ICON_SIZE / 8
|
#define AG_CHART_RENDERER_TILE_MARGIN_BOTTOM AG_CHART_RENDERER_CHECK_ICON_SIZE / 8
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
|
|
||||||
#include "ag-enumtypes.h"
|
#include "ag-enumtypes.h"
|
||||||
#include "ag-icon-view.h"
|
#include "ag-icon-view.h"
|
||||||
#include "ag-db.h"
|
#include "ag-db.h"
|
||||||
#include "ag-chart-renderer.h"
|
#include "ag-chart-renderer.h"
|
||||||
|
#include "ag-display-theme.h"
|
||||||
|
#include "ag-chart.h"
|
||||||
|
|
||||||
typedef struct _AgIconViewPrivate {
|
typedef struct _AgIconViewPrivate {
|
||||||
AgIconViewMode mode;
|
AgIconViewMode mode;
|
||||||
@ -19,6 +23,7 @@ enum {
|
|||||||
enum {
|
enum {
|
||||||
AG_ICON_VIEW_COLUMN_SELECTED,
|
AG_ICON_VIEW_COLUMN_SELECTED,
|
||||||
AG_ICON_VIEW_COLUMN_ITEM,
|
AG_ICON_VIEW_COLUMN_ITEM,
|
||||||
|
AG_ICON_VIEW_COLUMN_PIXBUF,
|
||||||
AG_ICON_VIEW_COLUMN_COLUMNS
|
AG_ICON_VIEW_COLUMN_COLUMNS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -38,7 +43,10 @@ ag_icon_view_set_mode(AgIconView *icon_view, AgIconViewMode mode)
|
|||||||
ag_icon_view_unselect_all(icon_view);
|
ag_icon_view_unselect_all(icon_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
ag_chart_renderer_set_toggle_visible(priv->thumb_renderer, (mode == AG_ICON_VIEW_MODE_SELECTION));
|
ag_chart_renderer_set_toggle_visible(
|
||||||
|
priv->thumb_renderer,
|
||||||
|
(mode == AG_ICON_VIEW_MODE_SELECTION)
|
||||||
|
);
|
||||||
|
|
||||||
gtk_widget_queue_draw(GTK_WIDGET(icon_view));
|
gtk_widget_queue_draw(GTK_WIDGET(icon_view));
|
||||||
|
|
||||||
@ -122,12 +130,18 @@ ag_icon_view_button_press_event_cb(GtkWidget *widget,
|
|||||||
GtkIconView *gtk_icon_view = GTK_ICON_VIEW(widget);
|
GtkIconView *gtk_icon_view = GTK_ICON_VIEW(widget);
|
||||||
AgIconView *ag_icon_view = AG_ICON_VIEW(widget);
|
AgIconView *ag_icon_view = AG_ICON_VIEW(widget);
|
||||||
|
|
||||||
path = gtk_icon_view_get_path_at_pos(gtk_icon_view, ((GdkEventButton *)event)->x, ((GdkEventButton *)event)->y);
|
path = gtk_icon_view_get_path_at_pos(
|
||||||
|
gtk_icon_view,
|
||||||
|
((GdkEventButton *)event)->x,
|
||||||
|
((GdkEventButton *)event)->y
|
||||||
|
);
|
||||||
|
|
||||||
if (path != NULL) {
|
if (path != NULL) {
|
||||||
gboolean selected;
|
gboolean selected;
|
||||||
AgDbChartSave *chart_save;
|
AgDbChartSave *chart_save;
|
||||||
GtkListStore *store = GTK_LIST_STORE(gtk_icon_view_get_model(gtk_icon_view));
|
GtkListStore *store = GTK_LIST_STORE(gtk_icon_view_get_model(
|
||||||
|
gtk_icon_view)
|
||||||
|
);
|
||||||
|
|
||||||
if (event->button == GDK_BUTTON_SECONDARY) {
|
if (event->button == GDK_BUTTON_SECONDARY) {
|
||||||
ag_icon_view_set_mode(ag_icon_view, AG_ICON_VIEW_MODE_SELECTION);
|
ag_icon_view_set_mode(ag_icon_view, AG_ICON_VIEW_MODE_SELECTION);
|
||||||
@ -137,9 +151,18 @@ ag_icon_view_button_press_event_cb(GtkWidget *widget,
|
|||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
if (gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) {
|
if (gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) {
|
||||||
gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, AG_ICON_VIEW_COLUMN_SELECTED, &selected, AG_ICON_VIEW_COLUMN_ITEM, &chart_save, -1);
|
gtk_tree_model_get(
|
||||||
|
GTK_TREE_MODEL(store), &iter,
|
||||||
|
AG_ICON_VIEW_COLUMN_SELECTED, &selected,
|
||||||
|
AG_ICON_VIEW_COLUMN_ITEM, &chart_save,
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
gtk_list_store_set(store, &iter, AG_ICON_VIEW_COLUMN_SELECTED, !selected, -1);
|
gtk_list_store_set(
|
||||||
|
store, &iter,
|
||||||
|
AG_ICON_VIEW_COLUMN_SELECTED, !selected,
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
ag_icon_view_selection_changed(ag_icon_view);
|
ag_icon_view_selection_changed(ag_icon_view);
|
||||||
}
|
}
|
||||||
@ -180,22 +203,6 @@ ag_icon_view_class_init(AgIconViewClass *klass)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
ag_icon_view_chart_renderer_func(GtkCellLayout *layout,
|
|
||||||
GtkCellRenderer *renderer,
|
|
||||||
GtkTreeModel *model,
|
|
||||||
GtkTreeIter *iter,
|
|
||||||
AgIconView *icon_view)
|
|
||||||
{
|
|
||||||
AgDbChartSave *chart_save;
|
|
||||||
|
|
||||||
gtk_tree_model_get(model, iter, AG_ICON_VIEW_COLUMN_ITEM, &chart_save, -1);
|
|
||||||
|
|
||||||
if (chart_save) {
|
|
||||||
g_object_set(renderer, "pixbuf", NULL, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ag_icon_view_text_renderer_func(GtkCellLayout *layout,
|
ag_icon_view_text_renderer_func(GtkCellLayout *layout,
|
||||||
GtkCellRenderer *renderer,
|
GtkCellRenderer *renderer,
|
||||||
@ -226,7 +233,8 @@ ag_icon_view_init(AgIconView *icon_view)
|
|||||||
priv->model = gtk_list_store_new(
|
priv->model = gtk_list_store_new(
|
||||||
AG_ICON_VIEW_COLUMN_COLUMNS,
|
AG_ICON_VIEW_COLUMN_COLUMNS,
|
||||||
G_TYPE_BOOLEAN,
|
G_TYPE_BOOLEAN,
|
||||||
AG_TYPE_DB_CHART_SAVE
|
AG_TYPE_DB_CHART_SAVE,
|
||||||
|
GDK_TYPE_PIXBUF
|
||||||
);
|
);
|
||||||
gtk_icon_view_set_model(
|
gtk_icon_view_set_model(
|
||||||
GTK_ICON_VIEW(icon_view),
|
GTK_ICON_VIEW(icon_view),
|
||||||
@ -267,6 +275,12 @@ ag_icon_view_init(AgIconView *icon_view)
|
|||||||
GTK_CELL_RENDERER(priv->thumb_renderer),
|
GTK_CELL_RENDERER(priv->thumb_renderer),
|
||||||
"checked", AG_ICON_VIEW_COLUMN_SELECTED
|
"checked", AG_ICON_VIEW_COLUMN_SELECTED
|
||||||
);
|
);
|
||||||
|
gtk_cell_layout_add_attribute(
|
||||||
|
GTK_CELL_LAYOUT(icon_view),
|
||||||
|
GTK_CELL_RENDERER(priv->thumb_renderer),
|
||||||
|
"pixbuf", AG_ICON_VIEW_COLUMN_PIXBUF
|
||||||
|
);
|
||||||
|
/*
|
||||||
gtk_cell_layout_set_cell_data_func(
|
gtk_cell_layout_set_cell_data_func(
|
||||||
GTK_CELL_LAYOUT(icon_view),
|
GTK_CELL_LAYOUT(icon_view),
|
||||||
GTK_CELL_RENDERER(priv->thumb_renderer),
|
GTK_CELL_RENDERER(priv->thumb_renderer),
|
||||||
@ -274,6 +288,7 @@ ag_icon_view_init(AgIconView *icon_view)
|
|||||||
icon_view,
|
icon_view,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
priv->text_renderer = gtk_cell_renderer_text_new();
|
priv->text_renderer = gtk_cell_renderer_text_new();
|
||||||
gtk_cell_renderer_set_alignment(
|
gtk_cell_renderer_set_alignment(
|
||||||
@ -298,15 +313,49 @@ void
|
|||||||
ag_icon_view_add_chart(AgIconView *icon_view, AgDbChartSave *chart_save)
|
ag_icon_view_add_chart(AgIconView *icon_view, AgDbChartSave *chart_save)
|
||||||
{
|
{
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
AgChart *chart;
|
||||||
AgIconViewPrivate *priv = ag_icon_view_get_instance_private(icon_view);
|
AgIconViewPrivate *priv = ag_icon_view_get_instance_private(icon_view);
|
||||||
|
AgDisplayTheme *theme = ag_display_theme_get_preview_theme();
|
||||||
|
AgDbChartSave *save_data = chart_save;
|
||||||
|
AgDb *db = ag_db_get();
|
||||||
|
GdkPixbuf *pixbuf = NULL;
|
||||||
|
|
||||||
g_debug("Adding chart for %s", chart_save->name);
|
g_debug("Adding chart for %s", chart_save->name);
|
||||||
|
|
||||||
|
if (!chart_save->populated) {
|
||||||
|
save_data = ag_db_chart_get_data_by_id(
|
||||||
|
db,
|
||||||
|
chart_save->db_id,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
save_data = ag_db_chart_save_ref(chart_save);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref(db);
|
||||||
|
|
||||||
|
chart = ag_chart_new_from_db_save(
|
||||||
|
save_data,
|
||||||
|
TRUE,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
pixbuf = ag_chart_get_pixbuf(
|
||||||
|
chart,
|
||||||
|
AG_CHART_RENDERER_TILE_SIZE,
|
||||||
|
AG_CHART_RENDERER_ICON_SIZE,
|
||||||
|
theme,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
g_object_unref(chart);
|
||||||
|
|
||||||
gtk_list_store_append(priv->model, &iter);
|
gtk_list_store_append(priv->model, &iter);
|
||||||
gtk_list_store_set(
|
gtk_list_store_set(
|
||||||
priv->model, &iter,
|
priv->model, &iter,
|
||||||
AG_ICON_VIEW_COLUMN_SELECTED, FALSE,
|
AG_ICON_VIEW_COLUMN_SELECTED, FALSE,
|
||||||
AG_ICON_VIEW_COLUMN_ITEM, chart_save,
|
AG_ICON_VIEW_COLUMN_ITEM, save_data,
|
||||||
|
AG_ICON_VIEW_COLUMN_PIXBUF, pixbuf,
|
||||||
-1
|
-1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user