Mercurial > dwindows
comparison mac/dw.m @ 680:db315779a283
Initial tree support, lots more to do but basics are there.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 02 Mar 2011 05:53:27 +0000 |
parents | d2d7d1802af4 |
children | 5fe12469c1fb |
comparison
equal
deleted
inserted
replaced
679:d2d7d1802af4 | 680:db315779a283 |
---|---|
766 return nil; | 766 return nil; |
767 } | 767 } |
768 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } | 768 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } |
769 @end | 769 @end |
770 | 770 |
771 /* Subclass for a Tree type */ | |
772 @interface DWTree : NSOutlineView <NSOutlineViewDataSource> | |
773 { | |
774 void *userdata; | |
775 NSTableColumn *imagecol; | |
776 NSTableColumn *textcol; | |
777 NSMutableArray *data; | |
778 /* Each data item consists of a linked lists of tree item data. | |
779 * NSImage *, NSString *, Item Data *, NSMutableArray * of Children | |
780 */ | |
781 id scrollview; | |
782 } | |
783 -(id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item; | |
784 -(BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item; | |
785 -(int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item; | |
786 -(id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item; | |
787 -(void)addTree:(NSPointerArray *)item and:(NSPointerArray *)parent; | |
788 -(void *)userdata; | |
789 -(void)setUserdata:(void *)input; | |
790 -(NSScrollView *)scrollview; | |
791 -(void)setScrollview:(NSScrollView *)input; | |
792 @end | |
793 | |
794 @implementation DWTree | |
795 -(id)init | |
796 { | |
797 self = [super init]; | |
798 | |
799 if (self) | |
800 { | |
801 imagecol = [[NSTableColumn alloc] init]; | |
802 NSImageCell *imagecell = [[[NSImageCell alloc] init] autorelease]; | |
803 [imagecol setDataCell:imagecell]; | |
804 [imagecol setResizingMask:NSTableColumnNoResizing]; | |
805 [imagecol setWidth:20]; | |
806 [self addTableColumn:imagecol]; | |
807 textcol = [[NSTableColumn alloc] init]; | |
808 [self addTableColumn:textcol]; | |
809 } | |
810 return self; | |
811 } | |
812 -(id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item | |
813 { | |
814 if (item) | |
815 { | |
816 NSMutableArray *array = [item pointerAtIndex:3]; | |
817 return array ? [array objectAtIndex:index] : nil; | |
818 } | |
819 else | |
820 { | |
821 return [data objectAtIndex:index]; | |
822 } | |
823 } | |
824 -(BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item | |
825 { | |
826 return [self outlineView:outlineView numberOfChildrenOfItem:item] != 0; | |
827 } | |
828 -(int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item | |
829 { | |
830 if(item) | |
831 { | |
832 if([item isKindOfClass:[NSPointerArray class]]) | |
833 { | |
834 NSMutableArray *array = [item pointerAtIndex:3]; | |
835 return array ? (int)[array count] : 0; | |
836 } | |
837 else | |
838 { | |
839 return 0; | |
840 } | |
841 } | |
842 else | |
843 { | |
844 return data ? (int)[data count] : 0; | |
845 } | |
846 } | |
847 -(id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item | |
848 { | |
849 if(item) | |
850 { | |
851 if([item isKindOfClass:[NSPointerArray class]]) | |
852 { | |
853 NSPointerArray *this = (NSPointerArray *)item; | |
854 if(tableColumn == imagecol) | |
855 { | |
856 return [this pointerAtIndex:0]; | |
857 } | |
858 return [this pointerAtIndex:1]; | |
859 } | |
860 else | |
861 { | |
862 return nil; | |
863 } | |
864 } | |
865 return @"List Root"; | |
866 } | |
867 -(void)addTree:(NSPointerArray *)item and:(NSPointerArray *)parent; | |
868 { | |
869 NSMutableArray *children = data; | |
870 if(parent) | |
871 { | |
872 children = [parent pointerAtIndex:3]; | |
873 if(!children) | |
874 { | |
875 children = [[NSMutableArray alloc] init]; | |
876 [parent replacePointerAtIndex:3 withPointer:children]; | |
877 } | |
878 } | |
879 else | |
880 { | |
881 if(!data) | |
882 { | |
883 data = [[NSMutableArray alloc] init]; | |
884 } | |
885 } | |
886 [children addObject:item]; | |
887 } | |
888 -(void *)userdata { return userdata; } | |
889 -(void)setUserdata:(void *)input { userdata = input; } | |
890 -(NSScrollView *)scrollview { return scrollview; } | |
891 -(void)setScrollview:(NSScrollView *)input { scrollview = input; } | |
892 @end | |
893 | |
771 /* Subclass for a Calendar type */ | 894 /* Subclass for a Calendar type */ |
772 @interface DWCalendar : NSDatePicker | 895 @interface DWCalendar : NSDatePicker |
773 { | 896 { |
774 void *userdata; | 897 void *userdata; |
775 } | 898 } |
3225 * id: An ID to be used for getting the resource from the | 3348 * id: An ID to be used for getting the resource from the |
3226 * resource file. | 3349 * resource file. |
3227 */ | 3350 */ |
3228 HWND API dw_tree_new(ULONG id) | 3351 HWND API dw_tree_new(ULONG id) |
3229 { | 3352 { |
3230 NSLog(@"dw_tree_new() unimplemented\n"); | 3353 NSScrollView *scrollview = [[NSScrollView alloc] init]; |
3231 return HWND_DESKTOP; | 3354 DWTree *tree = [[DWTree alloc] init]; |
3355 | |
3356 [tree setScrollview:scrollview]; | |
3357 [scrollview setBorderType:NSBezelBorder]; | |
3358 [scrollview setHasVerticalScroller:YES]; | |
3359 [scrollview setAutohidesScrollers:YES]; | |
3360 | |
3361 [tree setAllowsMultipleSelection:NO]; | |
3362 [tree setDataSource:tree]; | |
3363 [scrollview setDocumentView:tree]; | |
3364 [tree setHeaderView:nil]; | |
3365 return tree; | |
3232 } | 3366 } |
3233 | 3367 |
3234 /* | 3368 /* |
3235 * Inserts an item into a tree window (widget) after another item. | 3369 * Inserts an item into a tree window (widget) after another item. |
3236 * Parameters: | 3370 * Parameters: |
3241 * parent: Parent handle or 0 if root. | 3375 * parent: Parent handle or 0 if root. |
3242 * itemdata: Item specific data. | 3376 * itemdata: Item specific data. |
3243 */ | 3377 */ |
3244 HTREEITEM API dw_tree_insert_after(HWND handle, HTREEITEM item, char *title, HICN icon, HTREEITEM parent, void *itemdata) | 3378 HTREEITEM API dw_tree_insert_after(HWND handle, HTREEITEM item, char *title, HICN icon, HTREEITEM parent, void *itemdata) |
3245 { | 3379 { |
3246 NSLog(@"dw_tree_insert_item_after() unimplemented\n"); | 3380 DWTree *tree = handle; |
3247 return HWND_DESKTOP; | 3381 NSString *nstr = [NSString stringWithUTF8String:title]; |
3382 NSPointerArray *treenode = [NSPointerArray pointerArrayWithWeakObjects]; | |
3383 [treenode addPointer:icon]; | |
3384 [treenode addPointer:nstr]; | |
3385 [treenode addPointer:itemdata]; | |
3386 [treenode addPointer:NULL]; | |
3387 [tree addTree:treenode and:parent]; | |
3388 [tree reloadData]; | |
3389 return treenode; | |
3248 } | 3390 } |
3249 | 3391 |
3250 /* | 3392 /* |
3251 * Inserts an item into a tree window (widget). | 3393 * Inserts an item into a tree window (widget). |
3252 * Parameters: | 3394 * Parameters: |
3256 * parent: Parent handle or 0 if root. | 3398 * parent: Parent handle or 0 if root. |
3257 * itemdata: Item specific data. | 3399 * itemdata: Item specific data. |
3258 */ | 3400 */ |
3259 HTREEITEM API dw_tree_insert(HWND handle, char *title, HICN icon, HTREEITEM parent, void *itemdata) | 3401 HTREEITEM API dw_tree_insert(HWND handle, char *title, HICN icon, HTREEITEM parent, void *itemdata) |
3260 { | 3402 { |
3261 NSLog(@"dw_tree_insert_item() unimplemented\n"); | 3403 return dw_tree_insert_after(handle, NULL, title, icon, parent, itemdata); |
3262 return HWND_DESKTOP; | |
3263 } | 3404 } |
3264 | 3405 |
3265 /* | 3406 /* |
3266 * Gets the text an item in a tree window (widget). | 3407 * Gets the text an item in a tree window (widget). |
3267 * Parameters: | 3408 * Parameters: |
3268 * handle: Handle to the tree containing the item. | 3409 * handle: Handle to the tree containing the item. |
3269 * item: Handle of the item to be modified. | 3410 * item: Handle of the item to be modified. |
3270 */ | 3411 */ |
3271 char * API dw_tree_get_title(HWND handle, HTREEITEM item) | 3412 char * API dw_tree_get_title(HWND handle, HTREEITEM item) |
3272 { | 3413 { |
3273 NSLog(@"dw_tree_get_title() unimplemented\n"); | 3414 NSPointerArray *array = (NSPointerArray *)item; |
3274 return NULL; | 3415 NSString *nstr = (NSString *)[array pointerAtIndex:1]; |
3416 return strdup([nstr UTF8String]); | |
3275 } | 3417 } |
3276 | 3418 |
3277 /* | 3419 /* |
3278 * Gets the text an item in a tree window (widget). | 3420 * Gets the text an item in a tree window (widget). |
3279 * Parameters: | 3421 * Parameters: |