And implemented (mostly) the progressbar table parts. I think that'll do for uiTable features now.

This commit is contained in:
Pietro Gagliardi 2016-06-26 18:19:34 -04:00
parent d7caa150b8
commit 6804f263d4
3 changed files with 59 additions and 2 deletions

View File

@ -8,6 +8,10 @@
// - editable NSTextFields have no intrinsic width
// - changing a part property does not refresh views
// - is the Y position of checkbox cells correct?
// - progressbars appear ABOVE the table header
// LONGTERM
// - reuse row views instead of creating a new one each time
@interface tableModel : NSObject<NSTableViewDataSource, NSTableViewDelegate> {
uiTableModel *libui_m;
@ -21,6 +25,7 @@ enum {
partImage,
partButton,
partCheckbox,
partProgressBar,
};
@interface tablePart : NSObject
@ -227,6 +232,8 @@ if(1); else
NSTextField *tf;
NSImageView *iv;
NSButton *b;
NSProgressIndicator *p;
int value;
switch (self.type) {
case partText:
@ -307,6 +314,30 @@ if(1); else
[b setTag:self.valueColumn];
view = b;
break;
case partProgressBar:
data = (*(m->mh->CellValue))(m->mh, m, row, self.valueColumn);
value = uiTableModelTakeInt(data);
// TODO no intrinsic width
p = [[NSProgressIndicator alloc] initWithFrame:NSZeroRect];
[p setControlSize:NSRegularControlSize];
[p setBezeled:YES];
[p setStyle:NSProgressIndicatorBarStyle];
if (value == -1) {
[p setIndeterminate:YES];
[p startAnimation:p];
} else if (value == 100) {
[p setIndeterminate:NO];
[p setMaxValue:101];
[p setDoubleValue:101];
[p setDoubleValue:100];
[p setMaxValue:100];
} else {
[p setIndeterminate:NO];
[p setDoubleValue:(value + 1)];
[p setDoubleValue:value];
}
view = p;
break;
}
// if stretchy, don't hug, otherwise hug forcibly
@ -445,6 +476,17 @@ void uiTableColumnAppendCheckboxPart(uiTableColumn *c, int modelColumn, int expa
[c->parts addObject:part];
}
void uiTableColumnAppendProgressBarPart(uiTableColumn *c, int modelColumn, int expand)
{
tablePart *part;
part = [tablePart new];
part.type = partProgressBar;
part.valueColumn = modelColumn;
part.expand = expand;
[c->parts addObject:part];
}
void uiTableColumnPartSetEditable(uiTableColumn *c, int part, int editable)
{
tablePart *p;

View File

@ -5,7 +5,7 @@ static uiTableModelHandler mh;
static int modelNumColumns(uiTableModelHandler *mh, uiTableModel *m)
{
return 8;
return 9;
}
static uiTableModelColumnType modelColumnType(uiTableModelHandler *mh, uiTableModel *m, int column)
@ -14,7 +14,7 @@ static uiTableModelColumnType modelColumnType(uiTableModelHandler *mh, uiTableMo
return uiTableModelColumnColor;
if (column == 5)
return uiTableModelColumnImage;
if (column == 7)
if (column == 7 || column == 8)
return uiTableModelColumnInt;
return uiTableModelColumnString;
}
@ -54,6 +54,15 @@ static void *modelCellValue(uiTableModelHandler *mh, uiTableModel *m, int row, i
}
if (col == 7)
return uiTableModelGiveInt(checkStates[row]);
if (col == 8) {
if (row == 0)
return uiTableModelGiveInt(0);
if (row == 13)
return uiTableModelGiveInt(100);
if (row == 14)
return uiTableModelGiveInt(-1);
return uiTableModelGiveInt(50);
}
switch (col) {
case 0:
sprintf(buf, "Row %d", row);
@ -127,5 +136,8 @@ uiBox *makePage16(void)
uiTableColumnAppendCheckboxPart(tc, 7, 0);
uiTableColumnAppendButtonPart(tc, 6, 1);
tc = uiTableAppendColumn(t, "Progress Bar");
uiTableColumnAppendProgressBarPart(tc, 8, 0);
return page16;
}

View File

@ -31,6 +31,8 @@ _UI_EXTERN void *uiTableModelStrdup(const char *str);
// TODO rename the strdup one to this too
_UI_EXTERN void *uiTableModelGiveColor(double r, double g, double b, double a);
_UI_EXTERN void *uiTableModelGiveInt(int i);
// TODO TakeString
// TODO add const
_UI_EXTERN int uiTableModelTakeInt(void *v);
_UI_EXTERN uiTableModel *uiNewTableModel(uiTableModelHandler *mh);
@ -48,6 +50,7 @@ _UI_EXTERN void uiTableColumnAppendImagePart(uiTableColumn *c, int modelColumn,
_UI_EXTERN void uiTableColumnAppendButtonPart(uiTableColumn *c, int modelColumn, int expand);
// TODO should these have labels?
_UI_EXTERN void uiTableColumnAppendCheckboxPart(uiTableColumn *c, int modelColumn, int expand);
_UI_EXTERN void uiTableColumnAppendProgressBarPart(uiTableColumn *c, int modelColumn, int expand);
// TODO Editable?
_UI_EXTERN void uiTableColumnPartSetEditable(uiTableColumn *c, int part, int editable);
_UI_EXTERN void uiTableColumnPartSetTextColor(uiTableColumn *c, int part, int modelColumn);