| 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; |