Added checkbox table cells. Now just to add progressbar cells and we'll be good.
This commit is contained in:
parent
44a723b314
commit
d7caa150b8
|
@ -2,6 +2,16 @@
|
|||
#include "../ui.h"
|
||||
#include "uipriv.h"
|
||||
|
||||
void *uiTableModelGiveInt(int i)
|
||||
{
|
||||
return (void *) ((intptr_t) i);
|
||||
}
|
||||
|
||||
int uiTableModelTakeInt(void *v)
|
||||
{
|
||||
return (int) ((intptr_t) v);
|
||||
}
|
||||
|
||||
uiTableColumn *uiTableAppendTextColumn(uiTable *t, const char *name, int modelColumn)
|
||||
{
|
||||
uiTableColumn *tc;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
// - background color shows up for a line or two below selection
|
||||
// - editable NSTextFields have no intrinsic width
|
||||
// - changing a part property does not refresh views
|
||||
// - is the Y position of checkbox cells correct?
|
||||
|
||||
@interface tableModel : NSObject<NSTableViewDataSource, NSTableViewDelegate> {
|
||||
uiTableModel *libui_m;
|
||||
|
@ -19,6 +20,7 @@ enum {
|
|||
partText,
|
||||
partImage,
|
||||
partButton,
|
||||
partCheckbox,
|
||||
};
|
||||
|
||||
@interface tablePart : NSObject
|
||||
|
@ -26,6 +28,7 @@ enum {
|
|||
@property int textColumn;
|
||||
@property int textColorColumn;
|
||||
@property int imageColumn;
|
||||
@property int valueColumn;
|
||||
@property int expand;
|
||||
@property int editable;
|
||||
- (NSView *)mkView:(uiTableModel *)m row:(int)row;
|
||||
|
@ -153,7 +156,6 @@ done:
|
|||
uiTable *t = tv.libui_t;
|
||||
NSColor *color;
|
||||
|
||||
[rv setBackgroundColor:nil]; // make default by default
|
||||
if (t->backgroundColumn == -1)
|
||||
return;
|
||||
color = (NSColor *) ((*(m->mh->CellValue))(m->mh, m, row, t->backgroundColumn));
|
||||
|
@ -182,9 +184,16 @@ done:
|
|||
|
||||
if ([view isKindOfClass:[NSTextField class]])
|
||||
data = [[((NSTextField *) view) stringValue] UTF8String];
|
||||
else if ([view isKindOfClass:[NSButton class]])
|
||||
else if ([view isKindOfClass:[NSButton class]]) {
|
||||
NSButton *b;
|
||||
|
||||
b = (NSButton *) view;
|
||||
// if ([b buttonType] == NSSwitchButton)
|
||||
data = uiTableModelGiveInt([b state] == NSOnState);
|
||||
// TODO there is no buttonType getter
|
||||
if(1); else
|
||||
data = NULL;
|
||||
else
|
||||
} else
|
||||
implbug("table model editing action triggered on non-editable view");
|
||||
|
||||
// note the use of [view tag] — we need the model column, which we store in the view tag for relevant views below
|
||||
|
@ -277,6 +286,27 @@ done:
|
|||
[b setTag:self.textColumn];
|
||||
view = b;
|
||||
break;
|
||||
case partCheckbox:
|
||||
data = (*(m->mh->CellValue))(m->mh, m, row, self.valueColumn);
|
||||
b = [[NSButton alloc] initWithFrame:NSZeroRect];
|
||||
[b setTitle:@""];
|
||||
[b setButtonType:NSSwitchButton];
|
||||
// doesn't seem to have an associated bezel style
|
||||
[b setBordered:NO];
|
||||
[b setTransparent:NO];
|
||||
uiDarwinSetControlFont(b, NSRegularControlSize);
|
||||
if (uiTableModelTakeInt(data) != 0)
|
||||
[b setState:NSOnState];
|
||||
else
|
||||
[b setState:NSOffState];
|
||||
if (self.editable) {
|
||||
[b setTarget:m->m];
|
||||
[b setAction:@selector(onAction:)];
|
||||
} else
|
||||
[b setEnabled:NO];
|
||||
[b setTag:self.valueColumn];
|
||||
view = b;
|
||||
break;
|
||||
}
|
||||
|
||||
// if stretchy, don't hug, otherwise hug forcibly
|
||||
|
@ -403,6 +433,18 @@ void uiTableColumnAppendButtonPart(uiTableColumn *c, int modelColumn, int expand
|
|||
[c->parts addObject:part];
|
||||
}
|
||||
|
||||
void uiTableColumnAppendCheckboxPart(uiTableColumn *c, int modelColumn, int expand)
|
||||
{
|
||||
tablePart *part;
|
||||
|
||||
part = [tablePart new];
|
||||
part.type = partCheckbox;
|
||||
part.valueColumn = modelColumn;
|
||||
part.expand = expand;
|
||||
part.editable = 1; // editable by default
|
||||
[c->parts addObject:part];
|
||||
}
|
||||
|
||||
void uiTableColumnPartSetEditable(uiTableColumn *c, int part, int editable)
|
||||
{
|
||||
tablePart *p;
|
||||
|
|
|
@ -5,7 +5,7 @@ static uiTableModelHandler mh;
|
|||
|
||||
static int modelNumColumns(uiTableModelHandler *mh, uiTableModel *m)
|
||||
{
|
||||
return 7;
|
||||
return 8;
|
||||
}
|
||||
|
||||
static uiTableModelColumnType modelColumnType(uiTableModelHandler *mh, uiTableModel *m, int column)
|
||||
|
@ -14,6 +14,8 @@ static uiTableModelColumnType modelColumnType(uiTableModelHandler *mh, uiTableMo
|
|||
return uiTableModelColumnColor;
|
||||
if (column == 5)
|
||||
return uiTableModelColumnImage;
|
||||
if (column == 7)
|
||||
return uiTableModelColumnInt;
|
||||
return uiTableModelColumnString;
|
||||
}
|
||||
|
||||
|
@ -25,6 +27,7 @@ static int modelNumRows(uiTableModelHandler *mh, uiTableModel *m)
|
|||
static uiImage *img[2];
|
||||
static char row9text[1024];
|
||||
static int yellowRow = -1;
|
||||
static int checkStates[15];
|
||||
|
||||
static void *modelCellValue(uiTableModelHandler *mh, uiTableModel *m, int row, int col)
|
||||
{
|
||||
|
@ -49,6 +52,8 @@ static void *modelCellValue(uiTableModelHandler *mh, uiTableModel *m, int row, i
|
|||
return img[0];
|
||||
return img[1];
|
||||
}
|
||||
if (col == 7)
|
||||
return uiTableModelGiveInt(checkStates[row]);
|
||||
switch (col) {
|
||||
case 0:
|
||||
sprintf(buf, "Row %d", row);
|
||||
|
@ -73,6 +78,8 @@ static void modelSetCellValue(uiTableModelHandler *mh, uiTableModel *m, int row,
|
|||
strcpy(row9text, (const char *) val);
|
||||
if (col == 6)
|
||||
yellowRow = row;
|
||||
if (col == 7)
|
||||
checkStates[row] = uiTableModelTakeInt(val);
|
||||
}
|
||||
|
||||
uiBox *makePage16(void)
|
||||
|
@ -91,6 +98,8 @@ uiBox *makePage16(void)
|
|||
|
||||
strcpy(row9text, "Part");
|
||||
|
||||
memset(checkStates, 0, 15 * sizeof (int));
|
||||
|
||||
page16 = newVerticalBox();
|
||||
|
||||
mh.NumColumns = modelNumColumns;
|
||||
|
@ -115,6 +124,7 @@ uiBox *makePage16(void)
|
|||
uiTableSetRowBackgroundColorModelColumn(t, 3);
|
||||
|
||||
tc = uiTableAppendColumn(t, "Buttons");
|
||||
uiTableColumnAppendCheckboxPart(tc, 7, 0);
|
||||
uiTableColumnAppendButtonPart(tc, 6, 1);
|
||||
|
||||
return page16;
|
||||
|
|
|
@ -11,9 +11,11 @@ _UI_EXTERN void uiImageAppend(uiImage *i, void *pixels, int pixelWidth, int pixe
|
|||
typedef struct uiTableModel uiTableModel;
|
||||
typedef struct uiTableModelHandler uiTableModelHandler;
|
||||
|
||||
// TODO actually validate these
|
||||
_UI_ENUM(uiTableModelColumnType) {
|
||||
uiTableModelColumnString,
|
||||
uiTableModelColumnImage,
|
||||
uiTableModelColumnInt,
|
||||
uiTableModelColumnColor,
|
||||
};
|
||||
|
||||
|
@ -28,6 +30,8 @@ struct uiTableModelHandler {
|
|||
_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);
|
||||
_UI_EXTERN int uiTableModelTakeInt(void *v);
|
||||
|
||||
_UI_EXTERN uiTableModel *uiNewTableModel(uiTableModelHandler *mh);
|
||||
_UI_EXTERN void uiFreeTableModel(uiTableModel *m);
|
||||
|
@ -42,6 +46,8 @@ _UI_EXTERN void uiTableColumnAppendTextPart(uiTableColumn *c, int modelColumn, i
|
|||
// TODO images shouldn't expand...
|
||||
_UI_EXTERN void uiTableColumnAppendImagePart(uiTableColumn *c, int modelColumn, int expand);
|
||||
_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);
|
||||
// TODO Editable?
|
||||
_UI_EXTERN void uiTableColumnPartSetEditable(uiTableColumn *c, int part, int editable);
|
||||
_UI_EXTERN void uiTableColumnPartSetTextColor(uiTableColumn *c, int part, int modelColumn);
|
||||
|
|
Loading…
Reference in New Issue