ui/cocoa/list.m

changeset 830
13896bdaa151
parent 829
0980245646b4
child 831
32a4415dc69a
equal deleted inserted replaced
829:0980245646b4 830:13896bdaa151
436 436
437 UiLayout layout = UI_ARGS2LAYOUT(args); 437 UiLayout layout = UI_ARGS2LAYOUT(args);
438 ui_container_add(obj, scrollview, &layout); 438 ui_container_add(obj, scrollview, &layout);
439 439
440 // datasource and delegate 440 // datasource and delegate
441 UiSourceList *data = [[UiSourceList alloc] init:obj]; 441 UiSourceList *data = [[UiSourceList alloc] init:obj outline:outline];
442 data.sublists = copy_sublists(obj->ctx->allocator, args); 442 data.sublists = copy_sublists(obj->ctx->allocator, args);
443 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST); 443 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST);
444 if(var) { 444 if(var) {
445 UiList *list = var->value; 445 UiList *list = var->value;
446 list->obj = (__bridge void*)data; 446 list->obj = (__bridge void*)data;
469 } 469 }
470 470
471 471
472 @implementation UiSourceList 472 @implementation UiSourceList
473 473
474 - (id)init:(UiObject*)obj { 474 - (id)init:(UiObject*)obj outline:(NSOutlineView*)view {
475 _obj = obj; 475 _obj = obj;
476 _outlineView = view;
476 _sections = [[NSMutableArray alloc] initWithCapacity:16]; 477 _sections = [[NSMutableArray alloc] initWithCapacity:16];
477 return self; 478 return self;
478 } 479 }
479 480
480 - (void)dealloc { 481 - (void)dealloc {
485 // TODO: check row 486 // TODO: check row
486 487
487 [_sections removeAllObjects]; 488 [_sections removeAllObjects];
488 489
489 CxIterator i = cxListIterator(_sublists); 490 CxIterator i = cxListIterator(_sublists);
491 int index = 0;
490 cx_foreach(UiSubList *, sl, i) { 492 cx_foreach(UiSubList *, sl, i) {
491 UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl]; 493 UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl];
494 section.index = index;
492 [section update:-1]; 495 [section update:-1];
493 [_sections addObject:section]; 496 [_sections addObject:section];
494 } 497 index++;
498 }
499
500 [_outlineView reloadData];
495 } 501 }
496 502
497 // NSOutlineViewDataSource implementation 503 // NSOutlineViewDataSource implementation
498 504
499 - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { 505 - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
527 } 533 }
528 534
529 - (void)outlineView:(NSOutlineView *)outlineView 535 - (void)outlineView:(NSOutlineView *)outlineView
530 setObjectValue:(id)object 536 setObjectValue:(id)object
531 forTableColumn:(NSTableColumn *)tableColumn 537 forTableColumn:(NSTableColumn *)tableColumn
532 byItem:(id)item { 538 byItem:(id)item
539 {
533 540
534 } 541 }
535 542
536 // NSOutlineViewDelegate implementation 543 // NSOutlineViewDelegate implementation
537 544
538 - (NSView *)outlineView:(NSOutlineView *)outlineView 545 - (NSView *)outlineView:(NSOutlineView *)outlineView
539 viewForTableColumn:(NSTableColumn *)tableColumn 546 viewForTableColumn:(NSTableColumn *)tableColumn
540 item:(id)item { 547 item:(id)item
548 {
541 UiSourceListItem *i = item; 549 UiSourceListItem *i = item;
542 550
543 NSTableCellView *cell = [[NSTableCellView alloc] init]; 551 NSTableCellView *cell = [[NSTableCellView alloc] init];
544 cell.identifier = @"cell"; 552 cell.identifier = @"cell";
545 // Icon 553 // Icon
546 NSImageView *iconView = [[NSImageView alloc] initWithFrame:NSZeroRect]; 554 NSImageView *iconView = [[NSImageView alloc] initWithFrame:NSZeroRect];
547 iconView.translatesAutoresizingMaskIntoConstraints = NO; 555 iconView.translatesAutoresizingMaskIntoConstraints = NO;
548 //[cell addSubview:iconView]; 556 [cell addSubview:iconView];
549 //cell.imageView = iconView; 557 cell.imageView = iconView;
550 558
551 // Label 559 // Label
552 NSTextField *textField = [NSTextField labelWithString:@""]; 560 NSTextField *textField = [NSTextField labelWithString:@""];
553 textField.translatesAutoresizingMaskIntoConstraints = NO; 561 textField.translatesAutoresizingMaskIntoConstraints = NO;
554 [cell addSubview:textField]; 562 [cell addSubview:textField];
555 cell.textField = textField; 563 cell.textField = textField;
556 564
557 // Layout constraints 565 // Layout constraints
558 [NSLayoutConstraint activateConstraints:@[ 566 [NSLayoutConstraint activateConstraints:@[
559 //[iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0], 567 [iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
560 //[iconView.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor], 568 [iconView.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
561 //[iconView.widthAnchor constraintEqualToConstant:0],
562 //[iconView.heightAnchor constraintEqualToConstant:0],
563 569
564 [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0], 570 [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
565 [textField.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor], 571 [textField.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
566 [textField.trailingAnchor constraintEqualToAnchor:cell.trailingAnchor constant:0], 572 [textField.trailingAnchor constraintEqualToAnchor:cell.trailingAnchor constant:0],
567 ]]; 573 ]];
573 579
574 - (NSTableRowView *) outlineView:(NSOutlineView *) outlineView 580 - (NSTableRowView *) outlineView:(NSOutlineView *) outlineView
575 rowViewForItem:(id) item { 581 rowViewForItem:(id) item {
576 UiSourceListRow *row = [[UiSourceListRow alloc]init]; 582 UiSourceListRow *row = [[UiSourceListRow alloc]init];
577 return row; 583 return row;
584 }
585
586 - (BOOL) outlineView:(NSOutlineView *) outlineView
587 shouldSelectItem:(id)item
588 {
589 UiSourceListItem *i = item;
590 return [i isSection] ? NO : YES;
591 }
592
593 - (void) outlineViewSelectionDidChange:(NSNotification *) notification {
594 UiEvent event;
595 event.obj = _obj;
596 event.window = event.obj->window;
597 event.document = event.obj->ctx->document;
598 event.eventdata = NULL; // TODO
599 event.eventdatatype = 0; // TODO
600 event.intval = 0;
601 event.set = ui_get_setop();
602
603 UiSubListEventData sublistEvent;
604
605 NSInteger selectedRow = _outlineView.selectedRow;
606 if(selectedRow >= 0) {
607 UiSourceListItem *item = [_outlineView itemAtRow:selectedRow];
608 UiSourceListItem *parent = item.parent;
609 UiVar *var = parent != nil ? parent.var : item.var;
610 if(item && var) {
611 sublistEvent.list = var->value;
612 sublistEvent.sublist_index = parent.index;
613 // TODO
614
615 event.eventdata = &sublistEvent;
616 }
617 }
618
619 if(_onactivate) {
620 _onactivate(&event, _onactivatedata);
621 }
578 } 622 }
579 623
580 @end 624 @end
581 625
582 @implementation UiSourceListItem 626 @implementation UiSourceListItem
595 UI_VAR_LIST); 639 UI_VAR_LIST);
596 _var = var; 640 _var = var;
597 return self; 641 return self;
598 } 642 }
599 643
600 - (id)init:(UiSubListItem*)item { 644 - (id)init:(UiSubListItem*)item parent:(UiSourceListItem*)parent {
645 _parent = parent;
601 if(item->label) { 646 if(item->label) {
602 _label = [[NSString alloc]initWithUTF8String:item->label]; 647 _label = [[NSString alloc]initWithUTF8String:item->label];
603 } 648 }
604 return self; 649 return self;
605 } 650 }
622 _sourcelist.getvalue(list, _sublist->userdata, elm, index, &item, _sourcelist.getvaluedata); 667 _sourcelist.getvalue(list, _sublist->userdata, elm, index, &item, _sourcelist.getvaluedata);
623 } else { 668 } else {
624 item.label = strdup(elm); 669 item.label = strdup(elm);
625 } 670 }
626 671
627 [_items addObject:[[UiSourceListItem alloc] init:&item]]; 672 [_items addObject:[[UiSourceListItem alloc] init:&item parent:self]];
628 673
629 elm = list->next(list); 674 elm = list->next(list);
630 index++; 675 index++;
631 } 676 }
632 } 677 }

mercurial