mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Split up generic code to generate a gtk tree view column
We used to do this just for the dive list, but the new cylinder view will want to do a lot of the same boilerplate gtk stuff, so make it a bit more generic and move it to gtk-gui.c. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
fe0eff8f1e
commit
8d82c57e46
3 changed files with 50 additions and 41 deletions
|
@ -33,4 +33,13 @@ extern GtkWidget *equipment_widget(void);
|
||||||
|
|
||||||
extern GtkWidget *dive_list_create(void);
|
extern GtkWidget *dive_list_create(void);
|
||||||
|
|
||||||
|
typedef void (*data_func_t)(GtkTreeViewColumn *col,
|
||||||
|
GtkCellRenderer *renderer,
|
||||||
|
GtkTreeModel *model,
|
||||||
|
GtkTreeIter *iter,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
|
extern GtkTreeViewColumn *tree_view_column(GtkWidget *tree_view, int index, const char *title,
|
||||||
|
data_func_t data_func, PangoAlignment align, gboolean visible);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
46
divelist.c
46
divelist.c
|
@ -424,9 +424,9 @@ void update_dive_list_units(void)
|
||||||
|
|
||||||
void update_dive_list_col_visibility(void)
|
void update_dive_list_col_visibility(void)
|
||||||
{
|
{
|
||||||
gtk_tree_view_column_set_visible(dive_list.sac, visible_cols.sac);
|
gtk_tree_view_column_set_visible(dive_list.sac, visible_cols.sac);
|
||||||
gtk_tree_view_column_set_visible(dive_list.otu, visible_cols.otu);
|
gtk_tree_view_column_set_visible(dive_list.otu, visible_cols.otu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_dive_list(void)
|
static void fill_dive_list(void)
|
||||||
|
@ -469,46 +469,10 @@ void dive_list_update_dives(void)
|
||||||
repaint_dive();
|
repaint_dive();
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (*data_func_t)(GtkTreeViewColumn *col,
|
|
||||||
GtkCellRenderer *renderer,
|
|
||||||
GtkTreeModel *model,
|
|
||||||
GtkTreeIter *iter,
|
|
||||||
gpointer data);
|
|
||||||
|
|
||||||
static GtkTreeViewColumn *divelist_column(struct DiveList *dl, int index, const char *title,
|
static GtkTreeViewColumn *divelist_column(struct DiveList *dl, int index, const char *title,
|
||||||
data_func_t data_func, PangoAlignment align, gboolean visible)
|
data_func_t data_func, PangoAlignment align, gboolean visible)
|
||||||
{
|
{
|
||||||
GtkCellRenderer *renderer;
|
return tree_view_column(dl->tree_view, index, title, data_func, align, visible);
|
||||||
GtkTreeViewColumn *col;
|
|
||||||
double xalign = 0.0; /* left as default */
|
|
||||||
|
|
||||||
renderer = gtk_cell_renderer_text_new();
|
|
||||||
col = gtk_tree_view_column_new();
|
|
||||||
|
|
||||||
gtk_tree_view_column_set_title(col, title);
|
|
||||||
gtk_tree_view_column_set_sort_column_id(col, index);
|
|
||||||
gtk_tree_view_column_set_resizable(col, TRUE);
|
|
||||||
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
|
||||||
if (data_func)
|
|
||||||
gtk_tree_view_column_set_cell_data_func(col, renderer, data_func, NULL, NULL);
|
|
||||||
else
|
|
||||||
gtk_tree_view_column_add_attribute(col, renderer, "text", index);
|
|
||||||
gtk_object_set(GTK_OBJECT(renderer), "alignment", align, NULL);
|
|
||||||
switch (align) {
|
|
||||||
case PANGO_ALIGN_LEFT:
|
|
||||||
xalign = 0.0;
|
|
||||||
break;
|
|
||||||
case PANGO_ALIGN_CENTER:
|
|
||||||
xalign = 0.5;
|
|
||||||
break;
|
|
||||||
case PANGO_ALIGN_RIGHT:
|
|
||||||
xalign = 1.0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
gtk_cell_renderer_set_alignment(GTK_CELL_RENDERER(renderer), xalign, 0.5);
|
|
||||||
gtk_tree_view_column_set_visible(col, visible);
|
|
||||||
gtk_tree_view_append_column(GTK_TREE_VIEW(dl->tree_view), col);
|
|
||||||
return col;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
36
gtk-gui.c
36
gtk-gui.c
|
@ -203,6 +203,42 @@ static void quit(GtkWidget *w, gpointer data)
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GtkTreeViewColumn *tree_view_column(GtkWidget *tree_view, int index, const char *title,
|
||||||
|
data_func_t data_func, PangoAlignment align, gboolean visible)
|
||||||
|
{
|
||||||
|
GtkCellRenderer *renderer;
|
||||||
|
GtkTreeViewColumn *col;
|
||||||
|
double xalign = 0.0; /* left as default */
|
||||||
|
|
||||||
|
renderer = gtk_cell_renderer_text_new();
|
||||||
|
col = gtk_tree_view_column_new();
|
||||||
|
|
||||||
|
gtk_tree_view_column_set_title(col, title);
|
||||||
|
gtk_tree_view_column_set_sort_column_id(col, index);
|
||||||
|
gtk_tree_view_column_set_resizable(col, TRUE);
|
||||||
|
gtk_tree_view_column_pack_start(col, renderer, TRUE);
|
||||||
|
if (data_func)
|
||||||
|
gtk_tree_view_column_set_cell_data_func(col, renderer, data_func, (void *)(long)index, NULL);
|
||||||
|
else
|
||||||
|
gtk_tree_view_column_add_attribute(col, renderer, "text", index);
|
||||||
|
gtk_object_set(GTK_OBJECT(renderer), "alignment", align, NULL);
|
||||||
|
switch (align) {
|
||||||
|
case PANGO_ALIGN_LEFT:
|
||||||
|
xalign = 0.0;
|
||||||
|
break;
|
||||||
|
case PANGO_ALIGN_CENTER:
|
||||||
|
xalign = 0.5;
|
||||||
|
break;
|
||||||
|
case PANGO_ALIGN_RIGHT:
|
||||||
|
xalign = 1.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gtk_cell_renderer_set_alignment(GTK_CELL_RENDERER(renderer), xalign, 0.5);
|
||||||
|
gtk_tree_view_column_set_visible(col, visible);
|
||||||
|
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
|
||||||
static void create_radio(GtkWidget *vbox, const char *name, ...)
|
static void create_radio(GtkWidget *vbox, const char *name, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
Loading…
Add table
Reference in a new issue