I am pulling my hair out. In a preferences panel I am building a
tableView manually with three columns, one tableColumn with a button
cell:
tableColumn = [[NSTableColumn alloc]
initWithIdentifier:@"active"];
NSButtonCell *buttonCell = [[GSButtonCell alloc]
initTextCell:@""];
[buttonCell setButtonType:NSSwitchButton];
[buttonCell setImagePosition:NSImageOnly];
[buttonCell setSelectable:NO];
[tableColumn setDataCell:buttonCell];
[buttonCell release];
[(NSCell *)[tableColumn dataCell]
setAlignment:NSCenterTextAlignment];
[tableView addTableColumn:tableColumn];
[tableView setDataSource:self];
[tableView setDelegate:self];
[[tableView tableColumnWithIdentifier:@"active"] setEditable:YES];
[[[tableView tableColumnWithIdentifier:@"active"] dataCell]
setEditable:YES];
[[[tableView tableColumnWithIdentifier:@"active"] dataCell]
setSelectable:YES];
When I click on the switch I expect
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object
forTableColumn:(NSTableColumn *)tableColumn row:(int)row;
to be called but that is not the case. If I doubleclick into one of
the
NSTextFieldCells and end editing then the method is called!? What am I
missing. This neither works on GNustep nor on MacOSX so I must be
missing something obvious but I don't see what. Any idea?
Thanks a lot,
Andreas
I am not sure about that but I think clicking on Checkboxes and
buttons in NSTableView is not considered as "editing".
And, there might be some relation between [buttonCell
setSelectable:NO]; and a cell being editable.
BTW: Why do you use GSButtonCell?
GSButtonCell is my subclass on NSButtonCell. It does nothing right now.
In the meanwhile I figured out why this was not working. I used the
wrong NSTableView sublclass that swallowed the mouseDown: event. Having
an NSButtonCell in a tableview actually works if
• the buttonCell has selectable=NO, editable=NO
• the tableColumn has editable=YES
You get unreasonable behaviour, if you set the buttonCell to
selectable=YES, editable=YES. This allows you to tab into the cell
which is great but
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object
forTableColumn:(NSTableColumn *)tableColumn row:(int)row;
is called with wrong values then. :-( But I can live with having to use
the mouse for setting the checkbox to state=1 for a while.
Thanks,
Andreas
_______________________________________________
Discuss-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnustep