More GTK+ uiTable work.
This commit is contained in:
parent
53bd751461
commit
8b04f2062a
121
unix/table.c
121
unix/table.c
|
@ -313,8 +313,9 @@ struct tablePart {
|
||||||
int textColumn;
|
int textColumn;
|
||||||
int imageColumn;
|
int imageColumn;
|
||||||
int valueColumn;
|
int valueColumn;
|
||||||
|
int colorColumn;
|
||||||
|
GtkCellRenderer *r;
|
||||||
uiTable *tv; // for pixbufs and background color
|
uiTable *tv; // for pixbufs and background color
|
||||||
int editable;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uiTableColumn {
|
struct uiTableColumn {
|
||||||
|
@ -353,22 +354,37 @@ static void setImageSize(GtkCellRenderer *r)
|
||||||
2 * ypad + size);
|
2 * ypad + size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void applyColor(GtkTreeModel *mm, GtkTreeIter *iter, int modelColumn, GtkCellRenderer *r, const char *prop, const char *propSet)
|
||||||
|
{
|
||||||
|
GValue value = G_VALUE_INIT;
|
||||||
|
GdkRGBA *rgba;
|
||||||
|
|
||||||
|
gtk_tree_model_get_value(mm, iter, modelColumn, &value);
|
||||||
|
rgba = (GdkRGBA *) g_value_get_boxed(&value);
|
||||||
|
if (rgba != NULL)
|
||||||
|
g_object_set(r, prop, rgba, NULL);
|
||||||
|
else
|
||||||
|
g_object_set(r, propSet, FALSE, NULL);
|
||||||
|
g_value_unset(&value);
|
||||||
|
}
|
||||||
|
|
||||||
static void dataFunc(GtkTreeViewColumn *c, GtkCellRenderer *r, GtkTreeModel *mm, GtkTreeIter *iter, gpointer data)
|
static void dataFunc(GtkTreeViewColumn *c, GtkCellRenderer *r, GtkTreeModel *mm, GtkTreeIter *iter, gpointer data)
|
||||||
{
|
{
|
||||||
struct tablePart *part = (struct tablePart *) data;
|
struct tablePart *part = (struct tablePart *) data;
|
||||||
GValue value = G_VALUE_INIT;
|
GValue value = G_VALUE_INIT;
|
||||||
const gchar *str;
|
const gchar *str;
|
||||||
uiImage *img;
|
uiImage *img;
|
||||||
|
int pval;
|
||||||
|
|
||||||
switch (part->type) {
|
switch (part->type) {
|
||||||
case partText:
|
case partText:
|
||||||
gtk_tree_model_get_value(mm, iter, part->textColumn, &value);
|
gtk_tree_model_get_value(mm, iter, part->textColumn, &value);
|
||||||
str = g_value_get_string(&value);
|
str = g_value_get_string(&value);
|
||||||
g_object_set(r, "text", str, NULL);
|
g_object_set(r, "text", str, NULL);
|
||||||
if (part->editable)
|
if (part->colorColumn != -1)
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL);
|
applyColor(mm, iter,
|
||||||
else
|
part->colorColumn,
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
|
r, "foreground-rgba", "foreground-set");
|
||||||
break;
|
break;
|
||||||
case partImage:
|
case partImage:
|
||||||
//TODO setImageSize(r);
|
//TODO setImageSize(r);
|
||||||
|
@ -377,43 +393,41 @@ static void dataFunc(GtkTreeViewColumn *c, GtkCellRenderer *r, GtkTreeModel *mm,
|
||||||
g_object_set(r, "surface",
|
g_object_set(r, "surface",
|
||||||
imageAppropriateSurface(img, part->tv->treeWidget),
|
imageAppropriateSurface(img, part->tv->treeWidget),
|
||||||
NULL);
|
NULL);
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
|
|
||||||
break;
|
break;
|
||||||
case partButton:
|
case partButton:
|
||||||
gtk_tree_model_get_value(mm, iter, part->textColumn, &value);
|
gtk_tree_model_get_value(mm, iter, part->textColumn, &value);
|
||||||
// TODO
|
// TODO
|
||||||
if (part->editable)
|
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
|
|
||||||
else
|
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
|
|
||||||
break;
|
break;
|
||||||
case partCheckbox:
|
case partCheckbox:
|
||||||
gtk_tree_model_get_value(mm, iter, part->valueColumn, &value);
|
gtk_tree_model_get_value(mm, iter, part->valueColumn, &value);
|
||||||
g_object_set(r, "active", g_value_get_int(&value) != 0, NULL);
|
g_object_set(r, "active", g_value_get_int(&value) != 0, NULL);
|
||||||
if (part->editable)
|
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
|
|
||||||
else
|
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
|
|
||||||
break;
|
break;
|
||||||
case partProgressBar:
|
case partProgressBar:
|
||||||
gtk_tree_model_get_value(mm, iter, part->valueColumn, &value);
|
gtk_tree_model_get_value(mm, iter, part->valueColumn, &value);
|
||||||
// TODO
|
pval = g_value_get_int(&value);
|
||||||
g_object_set(r, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
|
if (pval == -1) {
|
||||||
|
// TODO
|
||||||
|
} else
|
||||||
|
g_object_set(r,
|
||||||
|
"pulse", -1,
|
||||||
|
"value", pval,
|
||||||
|
NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_value_unset(&value);
|
g_value_unset(&value);
|
||||||
|
|
||||||
if (part->tv->backgroundColumn != -1) {
|
if (part->tv->backgroundColumn != -1)
|
||||||
GdkRGBA *rgba;
|
applyColor(mm, iter,
|
||||||
|
part->tv->backgroundColumn,
|
||||||
|
r, "cell-background-rgba", "cell-background-set");
|
||||||
|
}
|
||||||
|
|
||||||
gtk_tree_model_get_value(mm, iter, part->tv->backgroundColumn, &value);
|
static void appendPart(uiTableColumn *c, struct tablePart *part, GtkCellRenderer *r, int expand)
|
||||||
rgba = (GdkRGBA *) g_value_get_boxed(&value);
|
{
|
||||||
if (rgba != NULL)
|
part->r = r;
|
||||||
g_object_set(r, "cell-background-rgba", rgba, NULL);
|
gtk_tree_view_column_pack_start(c->c, part->r, expand != 0);
|
||||||
else
|
gtk_tree_view_column_set_cell_data_func(c->c, part->r, dataFunc, part, NULL);
|
||||||
g_object_set(r, "cell-background-set", FALSE, NULL);
|
g_ptr_array_add(c->parts, part);
|
||||||
g_value_unset(&value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiTableColumnAppendTextPart(uiTableColumn *c, int modelColumn, int expand)
|
void uiTableColumnAppendTextPart(uiTableColumn *c, int modelColumn, int expand)
|
||||||
|
@ -425,32 +439,26 @@ void uiTableColumnAppendTextPart(uiTableColumn *c, int modelColumn, int expand)
|
||||||
part->type = partText;
|
part->type = partText;
|
||||||
part->textColumn = modelColumn;
|
part->textColumn = modelColumn;
|
||||||
part->tv = c->tv;
|
part->tv = c->tv;
|
||||||
part->editable = 0;
|
part->colorColumn = -1;
|
||||||
|
|
||||||
r = gtk_cell_renderer_text_new();
|
r = gtk_cell_renderer_text_new();
|
||||||
gtk_tree_view_column_pack_start(c->c, r, expand != 0);
|
g_object_set(r, "editable", FALSE, NULL);
|
||||||
gtk_tree_view_column_set_cell_data_func(c->c, r, dataFunc, part, NULL);
|
|
||||||
// TODO editing signal
|
// TODO editing signal
|
||||||
|
|
||||||
g_ptr_array_add(c->parts, part);
|
appendPart(c, part, r, expand);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiTableColumnAppendImagePart(uiTableColumn *c, int modelColumn, int expand)
|
void uiTableColumnAppendImagePart(uiTableColumn *c, int modelColumn, int expand)
|
||||||
{
|
{
|
||||||
struct tablePart *part;
|
struct tablePart *part;
|
||||||
GtkCellRenderer *r;
|
|
||||||
|
|
||||||
part = uiNew(struct tablePart);
|
part = uiNew(struct tablePart);
|
||||||
part->type = partImage;
|
part->type = partImage;
|
||||||
part->imageColumn = modelColumn;
|
part->imageColumn = modelColumn;
|
||||||
part->tv = c->tv;
|
part->tv = c->tv;
|
||||||
part->editable = 0;
|
appendPart(c, part,
|
||||||
|
gtk_cell_renderer_pixbuf_new(),
|
||||||
r = gtk_cell_renderer_pixbuf_new();
|
expand);
|
||||||
gtk_tree_view_column_pack_start(c->c, r, expand != 0);
|
|
||||||
gtk_tree_view_column_set_cell_data_func(c->c, r, dataFunc, part, NULL);
|
|
||||||
|
|
||||||
g_ptr_array_add(c->parts, part);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiTableColumnAppendButtonPart(uiTableColumn *c, int modelColumn, int expand)
|
void uiTableColumnAppendButtonPart(uiTableColumn *c, int modelColumn, int expand)
|
||||||
|
@ -467,42 +475,51 @@ void uiTableColumnAppendCheckboxPart(uiTableColumn *c, int modelColumn, int expa
|
||||||
part->type = partCheckbox;
|
part->type = partCheckbox;
|
||||||
part->valueColumn = modelColumn;
|
part->valueColumn = modelColumn;
|
||||||
part->tv = c->tv;
|
part->tv = c->tv;
|
||||||
part->editable = 1; // editable by default
|
|
||||||
|
|
||||||
r = gtk_cell_renderer_toggle_new();
|
r = gtk_cell_renderer_toggle_new();
|
||||||
gtk_tree_view_column_pack_start(c->c, r, expand != 0);
|
g_object_set(r, "sensitive", TRUE, NULL); // editable by default
|
||||||
gtk_tree_view_column_set_cell_data_func(c->c, r, dataFunc, part, NULL);
|
|
||||||
// TODO editing signal
|
// TODO editing signal
|
||||||
|
|
||||||
g_ptr_array_add(c->parts, part);
|
appendPart(c, part, r, expand);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiTableColumnAppendProgressBarPart(uiTableColumn *c, int modelColumn, int expand)
|
void uiTableColumnAppendProgressBarPart(uiTableColumn *c, int modelColumn, int expand)
|
||||||
{
|
{
|
||||||
struct tablePart *part;
|
struct tablePart *part;
|
||||||
GtkCellRenderer *r;
|
|
||||||
|
|
||||||
part = uiNew(struct tablePart);
|
part = uiNew(struct tablePart);
|
||||||
part->type = partProgressBar;
|
part->type = partProgressBar;
|
||||||
part->valueColumn = modelColumn;
|
part->valueColumn = modelColumn;
|
||||||
part->tv = c->tv;
|
part->tv = c->tv;
|
||||||
part->editable = 0;
|
appendPart(c, part,
|
||||||
|
gtk_cell_renderer_progress_new(),
|
||||||
r = gtk_cell_renderer_progress_new();
|
expand);
|
||||||
gtk_tree_view_column_pack_start(c->c, r, expand != 0);
|
|
||||||
gtk_tree_view_column_set_cell_data_func(c->c, r, dataFunc, part, NULL);
|
|
||||||
|
|
||||||
g_ptr_array_add(c->parts, part);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiTableColumnPartSetEditable(uiTableColumn *c, int part, int editable)
|
void uiTableColumnPartSetEditable(uiTableColumn *c, int part, int editable)
|
||||||
{
|
{
|
||||||
// TODO
|
struct tablePart *p;
|
||||||
|
|
||||||
|
p = (struct tablePart *) g_ptr_array_index(c->parts, part);
|
||||||
|
switch (p->type) {
|
||||||
|
case partImage:
|
||||||
|
case partProgressBar:
|
||||||
|
return;
|
||||||
|
case partButton:
|
||||||
|
case partCheckbox:
|
||||||
|
g_object_set(p->r, "sensitive", editable != 0, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_object_set(p->r, "editable", editable != 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiTableColumnPartSetTextColor(uiTableColumn *c, int part, int modelColumn)
|
void uiTableColumnPartSetTextColor(uiTableColumn *c, int part, int modelColumn)
|
||||||
{
|
{
|
||||||
// TODO
|
struct tablePart *p;
|
||||||
|
|
||||||
|
p = (struct tablePart *) g_ptr_array_index(c->parts, part);
|
||||||
|
p->colorColumn = modelColumn;
|
||||||
|
// TODO refresh table
|
||||||
}
|
}
|
||||||
|
|
||||||
uiUnixControlAllDefaultsExceptDestroy(uiTable)
|
uiUnixControlAllDefaultsExceptDestroy(uiTable)
|
||||||
|
|
Loading…
Reference in New Issue