Deduplicated editable logic across platforms.
This commit is contained in:
parent
fb67c429d8
commit
acb40964f3
|
@ -12,6 +12,7 @@ extern int uiprivTableModelNumRows(uiTableModel *m);
|
||||||
extern uiTableValue *uiprivTableModelCellValue(uiTableModel *m, int row, int column);
|
extern uiTableValue *uiprivTableModelCellValue(uiTableModel *m, int row, int column);
|
||||||
extern void uiprivTableModelSetCellValue(uiTableModel *m, int row, int column, const uiTableValue *value);
|
extern void uiprivTableModelSetCellValue(uiTableModel *m, int row, int column, const uiTableValue *value);
|
||||||
extern const uiTableTextColumnOptionalParams uiprivDefaultTextColumnOptionalParams;
|
extern const uiTableTextColumnOptionalParams uiprivDefaultTextColumnOptionalParams;
|
||||||
|
extern int uiprivTableModelCellEditable(uiTableModel *m, int row, int column);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,3 +46,20 @@ void uiprivTableModelSetCellValue(uiTableModel *m, int row, int column, const ui
|
||||||
const uiTableTextColumnOptionalParams uiprivDefaultTextColumnOptionalParams = {
|
const uiTableTextColumnOptionalParams uiprivDefaultTextColumnOptionalParams = {
|
||||||
.ColorModelColumn = -1,
|
.ColorModelColumn = -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int uiprivTableModelCellEditable(uiTableModel *m, int row, int column)
|
||||||
|
{
|
||||||
|
uiTableValue *value;
|
||||||
|
int editable;
|
||||||
|
|
||||||
|
switch (column) {
|
||||||
|
case uiTableModelColumnNeverEditable:
|
||||||
|
return 0;
|
||||||
|
case uiTableModelColumnAlwaysEditable:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
value = uiprivTableModelCellValue(m, row, column);
|
||||||
|
editable = uiTableValueInt(value);
|
||||||
|
uiFreeTableValue(value);
|
||||||
|
return editable;
|
||||||
|
}
|
||||||
|
|
|
@ -34,23 +34,6 @@
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
static BOOL isCellEditable(uiTableModel *m, NSInteger row, int modelColumn)
|
|
||||||
{
|
|
||||||
uiTableValue *value;
|
|
||||||
int editable;
|
|
||||||
|
|
||||||
switch (modelColumn) {
|
|
||||||
case uiTableModelColumnNeverEditable:
|
|
||||||
return NO;
|
|
||||||
case uiTableModelColumnAlwaysEditable:
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
value = uiprivTableModelCellValue(m, row, modelColumn);
|
|
||||||
editable = uiTableValueInt(value);
|
|
||||||
uiFreeTableValue(value);
|
|
||||||
return editable != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct textColumnCreateParams {
|
struct textColumnCreateParams {
|
||||||
uiTable *t;
|
uiTable *t;
|
||||||
uiTableModel *m;
|
uiTableModel *m;
|
||||||
|
@ -272,7 +255,7 @@ struct textColumnCreateParams {
|
||||||
uiFreeTableValue(value);
|
uiFreeTableValue(value);
|
||||||
[self->tf setStringValue:str];
|
[self->tf setStringValue:str];
|
||||||
|
|
||||||
[self->tf setEditable:isCellEditable(self->m, row, self->textEditableModelColumn)];
|
[self->tf setEditable:uiprivTableModelCellEditable(self->m, row, self->textEditableModelColumn)];
|
||||||
|
|
||||||
color = nil;
|
color = nil;
|
||||||
if (self->textParams.ColorModelColumn != -1) {
|
if (self->textParams.ColorModelColumn != -1) {
|
||||||
|
@ -307,7 +290,7 @@ struct textColumnCreateParams {
|
||||||
[self->cb setState:NSOffState];
|
[self->cb setState:NSOffState];
|
||||||
uiFreeTableValue(value);
|
uiFreeTableValue(value);
|
||||||
|
|
||||||
[self->cb setEnabled:isCellEditable(self->m, row, self->checkboxEditableModelColumn)];
|
[self->cb setEnabled:uiprivTableModelCellEditable(self->m, row, self->checkboxEditableModelColumn)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,7 +541,7 @@ struct textColumnCreateParams {
|
||||||
uiFreeTableValue(value);
|
uiFreeTableValue(value);
|
||||||
[self->b setTitle:str];
|
[self->b setTitle:str];
|
||||||
|
|
||||||
[self->b setEnabled:isCellEditable(self->m, row, self->editableColumn)];
|
[self->b setEnabled:uiprivTableModelCellEditable(self->m, row, self->editableColumn)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)uiprivOnClicked:(id)sender
|
- (IBAction)uiprivOnClicked:(id)sender
|
||||||
|
|
19
unix/table.c
19
unix/table.c
|
@ -49,21 +49,14 @@ static void applyColor(GtkTreeModel *m, GtkTreeIter *iter, int modelColumn, GtkC
|
||||||
|
|
||||||
static void setEditable(uiTableModel *m, GtkTreeIter *iter, int modelColumn, GtkCellRenderer *r, const char *prop)
|
static void setEditable(uiTableModel *m, GtkTreeIter *iter, int modelColumn, GtkCellRenderer *r, const char *prop)
|
||||||
{
|
{
|
||||||
GValue value = G_VALUE_INIT;
|
GtkTreePath *path;
|
||||||
|
int row;
|
||||||
gboolean editable;
|
gboolean editable;
|
||||||
|
|
||||||
switch (modelColumn) {
|
// TODO avoid the need for this
|
||||||
case uiTableModelColumnNeverEditable:
|
path = gtk_tree_model_get_path(GTK_TREE_MODEL(m), iter);
|
||||||
editable = FALSE;
|
row = gtk_tree_path_get_indices(path)[0];
|
||||||
break;
|
editable = uiprivTableModelCellEditable(m, row, modelColumn) != 0;
|
||||||
case uiTableModelColumnAlwaysEditable:
|
|
||||||
editable = TRUE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
gtk_tree_model_get_value(GTK_TREE_MODEL(m), iter, modelColumn, &value);
|
|
||||||
editable = g_value_get_int(&value) != 0;
|
|
||||||
g_value_unset(&value);
|
|
||||||
}
|
|
||||||
g_object_set(r, prop, editable, NULL);
|
g_object_set(r, prop, editable, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -197,18 +197,7 @@ static HRESULT drawCheckboxPart(HRESULT hr, struct drawState *s)
|
||||||
value = uiprivTableModelCellValue(s->model, s->iItem, s->p->checkboxModelColumn);
|
value = uiprivTableModelCellValue(s->model, s->iItem, s->p->checkboxModelColumn);
|
||||||
checked = uiTableValueInt(value);
|
checked = uiTableValueInt(value);
|
||||||
uiFreeTableValue(value);
|
uiFreeTableValue(value);
|
||||||
switch (s->p->checkboxEditableModelColumn) {
|
enabled = uiprivTableModelCellEditable(s->model, s->iItem, s->p->checkboxEditableModelColumn);
|
||||||
case uiTableModelColumnNeverEditable:
|
|
||||||
enabled = 0;
|
|
||||||
break;
|
|
||||||
case uiTableModelColumnAlwaysEditable:
|
|
||||||
enabled = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
value = uiprivTableModelCellValue(s->model, s->iItem, s->p->checkboxEditableModelColumn);
|
|
||||||
enabled = uiTableValueInt(value);
|
|
||||||
uiFreeTableValue(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
theme = OpenThemeData(s->t->hwnd, L"button");
|
theme = OpenThemeData(s->t->hwnd, L"button");
|
||||||
if (theme != NULL) {
|
if (theme != NULL) {
|
||||||
|
@ -414,18 +403,7 @@ static HRESULT drawButtonPart(HRESULT hr, struct drawState *s)
|
||||||
value = uiprivTableModelCellValue(s->model, s->iItem, s->p->buttonModelColumn);
|
value = uiprivTableModelCellValue(s->model, s->iItem, s->p->buttonModelColumn);
|
||||||
wstr = toUTF16(uiTableValueString(value));
|
wstr = toUTF16(uiTableValueString(value));
|
||||||
uiFreeTableValue(value);
|
uiFreeTableValue(value);
|
||||||
switch (s->p->buttonClickableModelColumn) {
|
enabled = uiprivTableModelCellEditable(s->model, s->iItem, s->p->buttonClickableModelColumn);
|
||||||
case uiTableModelColumnNeverEditable:
|
|
||||||
enabled = 0;
|
|
||||||
break;
|
|
||||||
case uiTableModelColumnAlwaysEditable:
|
|
||||||
enabled = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
value = uiprivTableModelCellValue(s->model, s->iItem, s->p->checkboxEditableModelColumn);
|
|
||||||
enabled = uiTableValueInt(value);
|
|
||||||
uiFreeTableValue(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
theme = OpenThemeData(s->t->hwnd, L"button");
|
theme = OpenThemeData(s->t->hwnd, L"button");
|
||||||
|
|
||||||
|
|
|
@ -232,18 +232,8 @@ HRESULT uiprivTableHandleNM_CLICK(uiTable *t, NMITEMACTIVATE *nm, LRESULT *lResu
|
||||||
// don't even ask for info if it's too soon to edit text
|
// don't even ask for info if it's too soon to edit text
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
switch (editableColumn) {
|
if (!uiprivTableModelCellEditable(t->model, ht.iItem, editableColumn))
|
||||||
case uiTableModelColumnNeverEditable:
|
|
||||||
goto done;
|
goto done;
|
||||||
case uiTableModelColumnAlwaysEditable:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
value = uiprivTableModelCellValue(t->model, ht.iItem, editableColumn);
|
|
||||||
editable = uiTableValueInt(value);
|
|
||||||
uiFreeTableValue(value);
|
|
||||||
if (!editable)
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text) {
|
if (text) {
|
||||||
hr = openEditControl(t, ht.iItem, ht.iSubItem, p);
|
hr = openEditControl(t, ht.iItem, ht.iSubItem, p);
|
||||||
|
|
Loading…
Reference in New Issue