# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1298786449 0 # Node ID 62aae18e7b7d01ad52cfe3abbe48c096dd2bbf09 # Parent 7b99731c6484bbbc8304698d687b2cd158bf0b96 Implemented most of the listbox functions for the actual listbox control... previously it was just for comboboxes. Also added pointer/cursor support. diff -r 7b99731c6484 -r 62aae18e7b7d mac/dw.m --- a/mac/dw.m Sun Feb 27 00:10:48 2011 +0000 +++ b/mac/dw.m Sun Feb 27 06:00:49 2011 +0000 @@ -171,6 +171,12 @@ return clickfunc(object, handler->data); } + case 9: + { + int (*containerselectfunc)(HWND, char *, void *) = handler->signalfunction; + + return containerselectfunc(handler->window, (char *)event, handler->data); + } case 10: { int (* API containercontextfunc)(HWND, char *, int, int, void *, void *) = (int (* API)(HWND, char *, int, int, void *, void *))handler->signalfunction; @@ -570,7 +576,7 @@ } -(NSInteger)numberOfRowsInTableView:(NSTableView *)aTable; -(id)tableView:(NSTableView *)aTable objectValueForTableColumn:(NSTableColumn *)aCol row:(NSInteger)aRow; --(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; +/*-(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;*/ -(void *)userdata; -(void)setUserdata:(void *)input; -(id)scrollview; @@ -582,6 +588,7 @@ -(void)removeRow:(int)row; -(void)setRow:(int)row title:(void *)input; -(void *)getRowTitle:(int)row; +-(id)getRow:(int)row and:(int)col; -(int)cellType:(int)col; -(int)lastAddPoint; -(void)clear; @@ -627,7 +634,7 @@ } return nil; } --(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex +/*-(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if(tvcols) { @@ -648,13 +655,13 @@ [data replaceObjectAtIndex:index withObject:anObject]; } } -} +}*/ -(void *)userdata { return userdata; } -(void)setUserdata:(void *)input { userdata = input; } -(NSScrollView *)scrollview { return scrollview; } -(void)setScrollview:(NSScrollView *)input { scrollview = input; } -(void)addColumn:(NSTableColumn *)input andType:(int)type { if(tvcols) { [tvcols addObject:input]; [types addObject:[NSNumber numberWithInt:type]]; } } --(int)addRow:(NSArray *)input { if(data) { [data addObjectsFromArray:input]; [titles addPointer:NULL]; return (int)[titles count]; } return 0; } +-(int)addRow:(NSArray *)input { if(data) { lastAddPoint = (int)[titles count]; [data addObjectsFromArray:input]; [titles addPointer:NULL]; return (int)[titles count]; } return 0; } -(int)addRows:(int)number { if(tvcols) @@ -707,6 +714,7 @@ } -(void)setRow:(int)row title:(void *)input { if(titles && input) { [titles replacePointerAtIndex:row withPointer:input]; } } -(void *)getRowTitle:(int)row { if(titles) { return [titles pointerAtIndex:row]; } return NULL; } +-(id)getRow:(int)row and:(int)col { if(data) { int index = (int)(row * [tvcols count]) + col; return [data objectAtIndex:index]; } return nil; } -(int)cellType:(int)col { return [[types objectAtIndex:col] intValue]; } -(int)lastAddPoint { return lastAddPoint; } -(void)clear { if(data) { [data removeAllObjects]; while([titles count]) { [titles removePointerAtIndex:0]; } } lastAddPoint = 0; } @@ -720,7 +728,7 @@ } -(void)selectionChanged:(id)sender { - _event_handler(self, (NSEvent *)[self getRowTitle:(int)[self selectedRow]], 12); + _event_handler(self, (NSEvent *)[self getRowTitle:(int)[self selectedRow]], 9); } -(NSMenu *)menuForEvent:(NSEvent *)event { @@ -1890,6 +1898,21 @@ free(thisitem); } +HWND _button_new(char *text, ULONG id) +{ + DWButton *button = [[DWButton alloc] init]; + if(text && *text) + { + [button setTitle:[ NSString stringWithUTF8String:text ]]; + } + [button setTarget:button]; + [button setAction:@selector(buttonClicked:)]; + [button setTag:id]; + [button setButtonType:NSMomentaryPushInButton]; + [button setBezelStyle:NSThickerSquareBezelStyle]; + return button; +} + /* * Create a new button window (widget) to be packed. * Parameters: @@ -1898,17 +1921,12 @@ */ HWND API dw_button_new(char *text, ULONG id) { - DWButton *button = [[DWButton alloc] init]; - if(text && *text) - { - [button setTitle:[ NSString stringWithUTF8String:text ]]; - } - [button setButtonType:NSMomentaryPushInButton]; - [button setBezelStyle:NSThickerSquareBezelStyle]; - [button setTarget:button]; - [button setAction:@selector(buttonClicked:)]; - /*[button setGradientType:NSGradientConvexWeak];*/ - [button setTag:id]; + DWButton *button = _button_new(text, id); + [button setButtonType:NSMomentaryPushInButton]; + [button setBezelStyle:NSRoundedBezelStyle]; + [button setImagePosition:NSNoImage]; + [button setAlignment:NSCenterTextAlignment]; + [[button cell] setControlTint:NSBlueControlTint]; return button; } @@ -1975,7 +1993,7 @@ HWND API dw_bitmapbutton_new_from_file(char *text, unsigned long id, char *filename) { NSImage *image = [[NSImage alloc] initWithContentsOfFile:[ NSString stringWithUTF8String:filename ]]; - DWButton *button = dw_button_new("", id); + DWButton *button = _button_new("", id); [button setImage:image]; return button; } @@ -1993,7 +2011,7 @@ { NSData *thisdata = [[NSData alloc] dataWithBytes:data length:len]; NSImage *image = [[NSImage alloc] initWithData:thisdata]; - DWButton *button = dw_button_new("", id); + DWButton *button = _button_new("", id); [button setImage:image]; return button; } @@ -2052,7 +2070,7 @@ */ HWND API dw_radiobutton_new(char *text, ULONG id) { - DWButton *button = dw_button_new(text, id); + DWButton *button = _button_new(text, id); [button setButtonType:NSRadioButton]; return button; } @@ -2190,7 +2208,7 @@ */ HWND API dw_checkbox_new(char *text, ULONG id) { - DWButton *button = dw_button_new(text, id); + DWButton *button = _button_new(text, id); [button setButtonType:NSSwitchButton]; [button setBezelStyle:NSRegularSquareBezelStyle]; return button; @@ -2289,6 +2307,16 @@ [combo addItemWithObjectValue:[ NSString stringWithUTF8String:text ]]; } + else if([object isMemberOfClass:[DWContainer class]]) + { + DWContainer *cont = handle; + NSString *nstr = [ NSString stringWithUTF8String:text ]; + NSArray *newrow = [NSArray arrayWithObject:nstr]; + + [cont addRow:newrow]; + + [newrow release]; + } } /* @@ -2308,6 +2336,10 @@ [combo insertItemWithObjectValue:[ NSString stringWithUTF8String:text ] atIndex:pos]; } + else if([object isMemberOfClass:[DWContainer class]]) + { + NSLog(@"dw_listbox_insert() unimplemented\n"); + } } /* @@ -2331,6 +2363,21 @@ [combo addItemWithObjectValue:[ NSString stringWithUTF8String:text[z] ]]; } } + else if([object isMemberOfClass:[DWContainer class]]) + { + DWContainer *cont = handle; + int z; + + for(z=0;z