diff --git a/src/ag-window.c b/src/ag-window.c index 9fc62ab..62024c1 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -17,6 +17,8 @@ struct _AgWindowPrivate { GtkWidget *header_bar; + GtkWidget *menubutton_revealer; + GtkWidget *new_back_stack; GtkWidget *stack; GtkWidget *name; GtkWidget *north_lat; @@ -860,6 +862,14 @@ ag_window_tab_changed_cb(GtkStack *stack, GParamSpec *pspec, AgWindow *window) gtk_widget_set_size_request(active_tab, 600, 600); } + if (strcmp("list", active_tab_name) == 0) { + gtk_revealer_set_reveal_child(GTK_REVEALER(priv->menubutton_revealer), FALSE); + gtk_stack_set_visible_child_name(GTK_STACK(priv->new_back_stack), "new"); + } else { + gtk_revealer_set_reveal_child(GTK_REVEALER(priv->menubutton_revealer), TRUE); + gtk_stack_set_visible_child_name(GTK_STACK(priv->new_back_stack), "back"); + } + // If we are coming from the Edit tab, let’s assume the chart data has // changed. This is a bad idea, though, it should be checked instead! // (TODO) @@ -886,6 +896,30 @@ ag_window_change_tab_action(GSimpleAction *action, g_action_change_state(G_ACTION(action), parameter); } +static void +ag_window_new_chart_action(GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + AgWindow *window = AG_WINDOW(user_data); + AgWindowPrivate *priv = ag_window_get_instance_private(window); + + gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), "edit"); +} + +static void +ag_window_back_action(GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + AgWindow *window = AG_WINDOW(user_data); + AgWindowPrivate *priv = ag_window_get_instance_private(window); + + /* TODO: Check for saving! */ + ag_window_load_chart_list(window); + gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), "list"); +} + static GActionEntry win_entries[] = { { "close", ag_window_close_action, NULL, NULL, NULL }, { "save", ag_window_save_action, NULL, NULL, NULL }, @@ -894,6 +928,8 @@ static GActionEntry win_entries[] = { { "view-menu", ag_window_view_menu_action, NULL, "false", NULL }, { "gear-menu", ag_window_gear_menu_action, NULL, "false", NULL }, { "change-tab", ag_window_change_tab_action, "s", "'edit'", NULL }, + { "new-chart", ag_window_new_chart_action, NULL, NULL, NULL }, + { "back", ag_window_back_action, NULL, NULL, NULL }, }; static void @@ -1130,6 +1166,16 @@ ag_window_class_init(AgWindowClass *klass) AgWindow, header_bar ); + gtk_widget_class_bind_template_child_private( + widget_class, + AgWindow, + new_back_stack + ); + gtk_widget_class_bind_template_child_private( + widget_class, + AgWindow, + menubutton_revealer + ); gtk_widget_class_bind_template_child_private( widget_class, AgWindow, diff --git a/src/resources/ui/ag-window.ui b/src/resources/ui/ag-window.ui index 4688022..6fb496f 100644 --- a/src/resources/ui/ag-window.ui +++ b/src/resources/ui/ag-window.ui @@ -148,6 +148,44 @@ False True Astrognome + + + True + False + False + + + True + False + New + win.new-chart + + + new + + + + + True + False + win.back + + + + True + 1 + go-previous-symbolic + + + + + back + + + + True @@ -159,44 +197,60 @@ - + True - center False - win.gear-menu - gear_menu - False - + False - + True - 1 - emblem-system-symbolic - - - - - end - - - - - True - center - False - win.view-menu - view_menu - False - - - - True - 1 - document-properties-symbolic + False + + + True + center + False + win.view-menu + view_menu + False + + + + True + 1 + document-properties-symbolic + + + + + 0 + + + + + True + center + False + win.gear-menu + gear_menu + False + + + + True + 1 + emblem-system-symbolic + + + + + 1 + +