ui/gtk/container.c

changeset 604
0afad58e3078
parent 594
fc854e0ab924
child 606
72f8b89d3e04
equal deleted inserted replaced
602:9f3ff50da302 604:0afad58e3078
687 687
688 UiGtkTabView* ui_widget_get_tabview_data(UIWIDGET tabview) { 688 UiGtkTabView* ui_widget_get_tabview_data(UIWIDGET tabview) {
689 return g_object_get_data(G_OBJECT(tabview), "ui_tabview"); 689 return g_object_get_data(G_OBJECT(tabview), "ui_tabview");
690 } 690 }
691 691
692 static void tabview_switch_page(
693 GtkNotebook *self,
694 GtkWidget *page,
695 guint page_num,
696 gpointer userdata)
697 {
698 UiGtkTabView *tabview = userdata;
699 if(!tabview->onchange) {
700 return;
701 }
702
703 UiEvent event;
704 event.obj = tabview->obj;
705 event.window = event.obj->window;
706 event.document = event.obj->ctx->document;
707 event.set = ui_get_setop();
708 event.eventdata = NULL;
709 event.intval = page_num;
710
711 tabview->onchange(&event, tabview->onchange);
712 }
713
714 #if GTK_CHECK_VERSION(3, 10, 0)
715
716 static void tabview_stack_changed(
717 GObject *object,
718 GParamSpec *pspec,
719 UiGtkTabView *tabview)
720 {
721 if(!tabview->onchange) {
722 return;
723 }
724
725 UiEvent event;
726 event.obj = tabview->obj;
727 event.window = event.obj->window;
728 event.document = event.obj->ctx->document;
729 event.set = ui_get_setop();
730 event.eventdata = NULL;
731 event.intval = 0;
732
733 tabview->onchange(&event, tabview->onchange);
734 }
735
736 #endif
737
692 typedef int64_t(*ui_tabview_get_func)(UiInteger*); 738 typedef int64_t(*ui_tabview_get_func)(UiInteger*);
693 typedef void (*ui_tabview_set_func)(UiInteger*, int64_t); 739 typedef void (*ui_tabview_set_func)(UiInteger*, int64_t);
694 740
695 UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) { 741 UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) {
696 UiGtkTabView *data = malloc(sizeof(UiGtkTabView)); 742 UiGtkTabView *data = malloc(sizeof(UiGtkTabView));
713 #if GTK_CHECK_VERSION(3, 10, 0) 759 #if GTK_CHECK_VERSION(3, 10, 0)
714 widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); 760 widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
715 GtkWidget *sidebar = gtk_stack_sidebar_new(); 761 GtkWidget *sidebar = gtk_stack_sidebar_new();
716 BOX_ADD(widget, sidebar); 762 BOX_ADD(widget, sidebar);
717 GtkWidget *stack = gtk_stack_new(); 763 GtkWidget *stack = gtk_stack_new();
764 g_signal_connect(stack, "notify::visible-child", G_CALLBACK(tabview_stack_changed), data);
718 gtk_stack_set_transition_type (GTK_STACK(stack), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN); 765 gtk_stack_set_transition_type (GTK_STACK(stack), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN);
719 gtk_stack_sidebar_set_stack(GTK_STACK_SIDEBAR(sidebar), GTK_STACK(stack)); 766 gtk_stack_sidebar_set_stack(GTK_STACK_SIDEBAR(sidebar), GTK_STACK(stack));
720 BOX_ADD_EXPAND(widget, stack); 767 BOX_ADD_EXPAND(widget, stack);
721 data->select_tab = ui_stack_tab_select; 768 data->select_tab = ui_stack_tab_select;
722 data->remove_tab = ui_stack_tab_remove; 769 data->remove_tab = ui_stack_tab_remove;
732 case UI_TABVIEW_DEFAULT: /* fall through */ 779 case UI_TABVIEW_DEFAULT: /* fall through */
733 case UI_TABVIEW_NAVIGATION_TOP: /* fall through */ 780 case UI_TABVIEW_NAVIGATION_TOP: /* fall through */
734 case UI_TABVIEW_INVISIBLE: /* fall through */ 781 case UI_TABVIEW_INVISIBLE: /* fall through */
735 case UI_TABVIEW_NAVIGATION_TOP2: { 782 case UI_TABVIEW_NAVIGATION_TOP2: {
736 widget = gtk_notebook_new(); 783 widget = gtk_notebook_new();
784 g_signal_connect(
785 widget,
786 "clicked",
787 G_CALLBACK(tabview_switch_page),
788 data);
737 data_widget = widget; 789 data_widget = widget;
738 data->select_tab = ui_notebook_tab_select; 790 data->select_tab = ui_notebook_tab_select;
739 data->remove_tab = ui_notebook_tab_remove; 791 data->remove_tab = ui_notebook_tab_remove;
740 data->add_tab = ui_notebook_tab_add; 792 data->add_tab = ui_notebook_tab_add;
741 getfunc = ui_notebook_get; 793 getfunc = ui_notebook_get;

mercurial