ui/motif/container.c

changeset 91
c13e344fa55f
parent 76
3782827378ab
child 92
d56175dd931e
equal deleted inserted replaced
90:2019fdbaadfd 91:c13e344fa55f
472 } 472 }
473 473
474 474
475 /* document tabview */ 475 /* document tabview */
476 476
477 static void ui_tabbar_resize(Widget widget, XtPointer udata, XtPointer cdata) {
478 MotifTabbedPane *v = (MotifTabbedPane*)udata;
479
480 int width = 0;
481 int height = 0;
482 XtVaGetValues(widget, XmNwidth, &width, XmNheight, &height, NULL);
483 int button_width = width / 4;
484 int x = 0;
485 UCX_FOREACH(elm, v->tabs) {
486 UiTab *tab = elm->data;
487 XtVaSetValues(
488 tab->tab_button,
489 XmNx, x,
490 XmNy, 0,
491 XmNwidth,
492 button_width,
493 NULL);
494 x += button_width;
495 }
496 }
497
498 static void ui_tabbar_expose(Widget widget, XtPointer udata, XtPointer cdata) {
499 MotifTabbedPane *v = (MotifTabbedPane*)udata;
500 XmDrawingAreaCallbackStruct *cbs = (XmDrawingAreaCallbackStruct *)cdata;
501 XEvent *event = cbs->event;
502 }
503
477 UiTabbedPane* ui_tabbed_document_view(UiObject *obj) { 504 UiTabbedPane* ui_tabbed_document_view(UiObject *obj) {
478 int n = 0; 505 int n = 0;
479 Arg args[16]; 506 Arg args[16];
480 507
481 UiContainer *ct = uic_get_current_container(obj); 508 UiContainer *ct = uic_get_current_container(obj);
488 XtSetArg(args[1], XmNpacking, XmPACK_TIGHT); 515 XtSetArg(args[1], XmNpacking, XmPACK_TIGHT);
489 XtSetArg(args[2], XmNspacing, 1); 516 XtSetArg(args[2], XmNspacing, 1);
490 XtSetArg(args[3], XmNleftAttachment, XmATTACH_FORM); 517 XtSetArg(args[3], XmNleftAttachment, XmATTACH_FORM);
491 XtSetArg(args[4], XmNrightAttachment, XmATTACH_FORM); 518 XtSetArg(args[4], XmNrightAttachment, XmATTACH_FORM);
492 XtSetArg(args[5], XmNtopAttachment, XmATTACH_FORM); 519 XtSetArg(args[5], XmNtopAttachment, XmATTACH_FORM);
493 Widget tabbar = XmCreateForm(tabview, "toolbar", args, 6); 520 XtSetArg(args[6], XmNmarginWidth, 0);
521 XtSetArg(args[7], XmNmarginHeight, 0);
522 Widget tabbar = XmCreateDrawingArea(tabview, "tabbar", args, 8);
494 XtManageChild(tabbar); 523 XtManageChild(tabbar);
495 524
496 XtSetArg(args[0], XmNleftAttachment, XmATTACH_FORM); 525 XtSetArg(args[0], XmNleftAttachment, XmATTACH_FORM);
497 XtSetArg(args[1], XmNrightAttachment, XmATTACH_FORM); 526 XtSetArg(args[1], XmNrightAttachment, XmATTACH_FORM);
498 XtSetArg(args[2], XmNtopAttachment, XmATTACH_WIDGET); 527 XtSetArg(args[2], XmNtopAttachment, XmATTACH_WIDGET);
507 tabbedpane->view.widget = tabct; 536 tabbedpane->view.widget = tabct;
508 tabbedpane->view.document = NULL; 537 tabbedpane->view.document = NULL;
509 tabbedpane->tabbar = tabbar; 538 tabbedpane->tabbar = tabbar;
510 tabbedpane->tabs = NULL; 539 tabbedpane->tabs = NULL;
511 tabbedpane->current = NULL; 540 tabbedpane->current = NULL;
541
542 XGCValues gcv;
543
544 XtAddCallback(tabbar, XmNresizeCallback , ui_tabbar_resize, tabbedpane);
545 XtAddCallback(tabbar, XmNexposeCallback, ui_tabbar_expose, tabbedpane);
512 546
513 return &tabbedpane->view; 547 return &tabbedpane->view;
514 } 548 }
515 549
516 UiObject* ui_document_tab(UiTabbedPane *view) { 550 UiObject* ui_document_tab(UiTabbedPane *view) {
549 // add tab button 583 // add tab button
550 v->tabs = ucx_list_append_a(view->ctx->mempool->allocator, v->tabs, tab); 584 v->tabs = ucx_list_append_a(view->ctx->mempool->allocator, v->tabs, tab);
551 585
552 XmString label = XmStringCreateLocalized("tab"); 586 XmString label = XmStringCreateLocalized("tab");
553 XtSetArg(args[0], XmNlabelString, label); 587 XtSetArg(args[0], XmNlabelString, label);
554 XtSetArg(args[1], XmNshadowThickness, 1); 588 XtSetArg(args[1], XmNshadowThickness, 0);
555 XtSetArg(args[2], XmNtraversalOn, FALSE); 589 XtSetArg(args[2], XmNhighlightThickness, 0);
556 XtSetArg(args[3], XmNtopAttachment, XmATTACH_FORM); 590
557 XtSetArg(args[4], XmNbottomAttachment, XmATTACH_FORM); 591 Widget button = XmCreatePushButton(v->tabbar, "tab_button", args, 3);
558 XtSetArg(args[5], XmNhighlightThickness, 0);
559 XtSetArg(args[6], XmNindicatorOn, XmINDICATOR_NONE);
560 XtSetArg(args[7], XmNfillOnSelect, TRUE);
561 XtSetArg(args[8], XmNtopShadowColor, 1);
562
563 Widget button = XmCreateToggleButton(v->tabbar, "tab_button", args, 8);
564 tab->tabbedpane = v; 592 tab->tabbedpane = v;
565 tab->content = content; 593 tab->content = content;
566 tab->tab_button = button; 594 tab->tab_button = button;
567
568 // layout
569 int is_first = 1;
570 size_t count = ucx_list_size(v->tabs);
571 int part = 100 / count;
572 int pos = 0;
573 int i = 0;
574 UCX_FOREACH(elm, v->tabs) {
575 UiTab *tt = elm->data;
576 if(is_first) {
577 XtVaSetValues(
578 tt->tab_button,
579 XmNleftAttachment,
580 XmATTACH_FORM,
581 XmNrightAttachment,
582 XmATTACH_POSITION,
583 XmNrightPosition,
584 pos + part,
585 XmNset,
586 FALSE,
587 NULL);
588 is_first = FALSE;
589 } else if(i < count - 1) {
590 XtVaSetValues(
591 tt->tab_button,
592 XmNleftAttachment,
593 XmATTACH_POSITION,
594 XmNleftPosition,
595 pos,
596 XmNrightAttachment,
597 XmATTACH_POSITION,
598 XmNrightPosition,
599 pos + part,
600 XmNset,
601 FALSE,
602 NULL);
603 } else {
604 XtVaSetValues(
605 tt->tab_button,
606 XmNleftAttachment,
607 XmATTACH_POSITION,
608 XmNleftPosition,
609 pos,
610 XmNrightAttachment,
611 XmATTACH_FORM,
612 XmNset,
613 FALSE,
614 NULL);
615 }
616 pos += part;
617 i++;
618 }
619
620 XtManageChild(button); 595 XtManageChild(button);
621 XtVaSetValues(button, XmNset, TRUE, NULL);
622 XtAddCallback( 596 XtAddCallback(
623 button, 597 button,
624 XmNvalueChangedCallback, 598 XmNactivateCallback,
625 (XtCallbackProc)ui_tab_button_callback, 599 (XtCallbackProc)ui_tab_button_callback,
626 tab); 600 tab);
627 601
628 v->current = tab;
629 ui_change_tab(v, tab); 602 ui_change_tab(v, tab);
603 ui_tabbar_resize(v->tabbar, v, NULL);
630 604
631 return content; 605 return content;
632 } 606 }
633 607
634 void ui_tab_button_callback(Widget widget, UiTab *tab, XtPointer d) { 608 void ui_tab_button_callback(Widget widget, UiTab *tab, XtPointer d) {
637 XtUnmanageChild(t->current->content->widget); 611 XtUnmanageChild(t->current->content->widget);
638 XtVaSetValues(t->current->tab_button, XmNset, 0, NULL); 612 XtVaSetValues(t->current->tab_button, XmNset, 0, NULL);
639 } 613 }
640 XtManageChild(tab->content->widget); 614 XtManageChild(tab->content->widget);
641 615
642 t->current = tab;
643 ui_change_tab(t, tab); 616 ui_change_tab(t, tab);
617
644 } 618 }
645 619
646 void ui_change_tab(MotifTabbedPane *pane, UiTab *tab) { 620 void ui_change_tab(MotifTabbedPane *pane, UiTab *tab) {
647 UiContext *ctx = tab->content->ctx; 621 UiContext *ctx = tab->content->ctx;
648 ctx->parent->set_document(ctx->parent, ctx->document); 622 ctx->parent->set_document(ctx->parent, ctx->document);
623
624 pane->current = tab;
625 pane->index = ucx_list_find(pane->tabs, tab, NULL, NULL);
626 printf("index: %d\n", pane->index);
649 } 627 }
650 628
651 void ui_tab_set_document(UiContext *ctx, void *document) { 629 void ui_tab_set_document(UiContext *ctx, void *document) {
652 if(ctx->parent->document) { 630 if(ctx->parent->document) {
653 //ctx->parent->detach_document(ctx->parent, ctx->parent->document); 631 //ctx->parent->detach_document(ctx->parent, ctx->parent->document);

mercurial