From 30a5533c34793d1d49a95505eed060c4869fe43d Mon Sep 17 00:00:00 2001 From: Angelo Haller Date: Fri, 18 Sep 2020 09:52:16 -0500 Subject: [PATCH] Add new API functions to get/set table column widths. uiTableColumnWidth uiTableColumnSetWidth Implementations provided for darwin, unix, and windows. --- darwin/table.m | 13 +++++++++++++ test/page16.c | 27 +++++++++++++++++++++++++++ ui.h | 6 ++++++ unix/table.c | 13 +++++++++++++ windows/table.cpp | 11 +++++++++++ 5 files changed, 70 insertions(+) diff --git a/darwin/table.m b/darwin/table.m index 1bdc7f8d..afcc4c50 100644 --- a/darwin/table.m +++ b/darwin/table.m @@ -216,3 +216,16 @@ uiTable *uiNewTable(uiTableParams *p) return t; } + +int uiTableColumnWidth(uiTable *t, int column) +{ + NSTableColumn *tc = [t->tv tableColumnWithIdentifier:[@(column) stringValue]]; + return [tc width]; +} + +void uiTableColumnSetWidth(uiTable *t, int column, int width) +{ + NSTableColumn *tc = [t->tv tableColumnWithIdentifier:[@(column) stringValue]]; + [tc setWidth: width]; +} + diff --git a/test/page16.c b/test/page16.c index f28ba3c7..3e765615 100644 --- a/test/page16.c +++ b/test/page16.c @@ -98,11 +98,26 @@ static void modelSetCellValue(uiTableModelHandler *mh, uiTableModel *m, int row, checkStates[row] = uiTableValueInt(val); } +uiSpinbox *columnID; +uiSpinbox *columnWidth; +static void changedColumnID(uiSpinbox *s, void *data) +{ + uiTable *t = data; + uiSpinboxSetValue(columnWidth, uiTableColumnWidth(t, uiSpinboxValue(columnID))); +} + +static void changedColumnWidth(uiSpinbox *s, void *data) +{ + uiTable *t = data; + uiTableColumnSetWidth(t, uiSpinboxValue(columnID), uiSpinboxValue(columnWidth)); +} + static uiTableModel *m; uiBox *makePage16(void) { uiBox *page16; + uiBox *controls; uiTable *t; uiTableParams p; uiTableTextColumnOptionalParams tp; @@ -119,6 +134,8 @@ uiBox *makePage16(void) memset(checkStates, 0, 15 * sizeof (int)); page16 = newVerticalBox(); + controls = newHorizontalBox(); + uiBoxAppend(page16, uiControl(controls), 0); mh.NumColumns = modelNumColumns; mh.ColumnType = modelColumnType; @@ -152,6 +169,16 @@ uiBox *makePage16(void) uiTableAppendProgressBarColumn(t, "Progress Bar", 8); + uiBoxAppend(controls, uiControl(uiNewLabel("Column")), 0); + columnID = uiNewSpinbox(0, INT_MAX); + uiBoxAppend(controls, uiControl(columnID), 0); + uiBoxAppend(controls, uiControl(uiNewLabel("Width")), 0); + columnWidth = uiNewSpinbox(0, INT_MAX); + uiBoxAppend(controls, uiControl(columnWidth), 0); + + uiSpinboxOnChanged(columnID, changedColumnID, t); + uiSpinboxOnChanged(columnWidth, changedColumnWidth, t); + return page16; } diff --git a/ui.h b/ui.h index 40aea949..495ef196 100644 --- a/ui.h +++ b/ui.h @@ -1458,6 +1458,12 @@ _UI_EXTERN void uiTableAppendButtonColumn(uiTable *t, // uiNewTable() creates a new uiTable with the specified parameters. _UI_EXTERN uiTable *uiNewTable(uiTableParams *params); +// uiTableColumnWidth() return current table column width +_UI_EXTERN int uiTableColumnWidth(uiTable *t, int column); + +// uiTableColumnSetWidth() set table column width +_UI_EXTERN void uiTableColumnSetWidth(uiTable *t, int column, int width); + #ifdef __cplusplus } #endif diff --git a/unix/table.c b/unix/table.c index e29ada07..1bb0703c 100644 --- a/unix/table.c +++ b/unix/table.c @@ -522,3 +522,16 @@ uiTable *uiNewTable(uiTableParams *p) return t; } + +int uiTableColumnWidth(uiTable *t, int column) +{ + GtkTreeViewColumn *c = gtk_tree_view_get_column(t->tv, column); + return gtk_tree_view_column_get_width(c); +} + +void uiTableColumnSetWidth(uiTable *t, int column, int width) +{ + GtkTreeViewColumn *c = gtk_tree_view_get_column(t->tv, column); + gtk_tree_view_column_set_fixed_width(c, width); +} + diff --git a/windows/table.cpp b/windows/table.cpp index 85a51c1a..3e2695e6 100644 --- a/windows/table.cpp +++ b/windows/table.cpp @@ -520,3 +520,14 @@ uiTable *uiNewTable(uiTableParams *p) return t; } + +int uiTableColumnWidth(uiTable *t, int column) +{ + return ListView_GetColumnWidth(t->hwnd, column); +} + +void uiTableColumnSetWidth(uiTable *t, int column, int width) +{ + ListView_SetColumnWidth(t->hwnd, column, width); +} +