aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/main_window.vala
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui/main_window.vala')
-rw-r--r--main/src/ui/main_window.vala95
1 files changed, 38 insertions, 57 deletions
diff --git a/main/src/ui/main_window.vala b/main/src/ui/main_window.vala
index e3110336..63ee1350 100644
--- a/main/src/ui/main_window.vala
+++ b/main/src/ui/main_window.vala
@@ -6,30 +6,32 @@ using Dino.Entities;
namespace Dino.Ui {
+[GtkTemplate (ui = "/im/dino/Dino/main_window.ui")]
public class MainWindow : Adw.ApplicationWindow {
public signal void conversation_selected(Conversation conversation);
- public new string? title { get; set; }
- public string? subtitle { get; set; }
+ [GtkChild] public Stack stack;
+ [GtkChild] public Adw.NavigationSplitView navigation_split_view;
+
+ [GtkChild] public MenuButton add_button;
+ [GtkChild] public MenuButton menu_button;
+
+ [GtkChild] public Adw.HeaderBar conversation_headerbar;
+ [GtkChild] public Adw.WindowTitle conversation_window_title;
+
+ [GtkChild] public ConversationView conversation_view;
+ [GtkChild] public ConversationSelector conversation_selector;
+ [GtkChild] public Adw.Flap search_flap;
+ [GtkChild] private Stack left_stack;
+ [GtkChild] private Stack right_stack;
+ [GtkChild] public Adw.Bin search_frame;
+
+ public GlobalSearch global_search;
public WelcomePlaceholder welcome_placeholder = new WelcomePlaceholder();
public NoAccountsPlaceholder accounts_placeholder = new NoAccountsPlaceholder();
- public ConversationView conversation_view;
- public ConversationSelector conversation_selector;
- public ConversationTitlebar conversation_titlebar;
- public Widget conversation_list_titlebar;
- public Box box = new Box(Orientation.VERTICAL, 0) { orientation=Orientation.VERTICAL };
- private Adw.Leaflet leaflet;
- public Box left_box;
- public Box right_box;
- public Adw.Flap search_flap;
- public GlobalSearch global_search;
- private Stack stack = new Stack();
- private Stack left_stack;
- private Stack right_stack;
- private StreamInteractor stream_interactor;
private Database db;
private Config config;
@@ -43,7 +45,6 @@ public class MainWindow : Adw.ApplicationWindow {
public MainWindow(Application application, StreamInteractor stream_interactor, Database db, Config config) {
Object(application : application);
- this.stream_interactor = stream_interactor;
this.db = db;
this.config = config;
@@ -53,45 +54,16 @@ public class MainWindow : Adw.ApplicationWindow {
((Widget)this).realize.connect(restore_window_size);
- setup_unified();
- setup_headerbar();
- setup_stack();
- }
-
- private void setup_unified() {
- Builder builder = new Builder.from_resource("/im/dino/Dino/unified_main_content.ui");
- leaflet = (Adw.Leaflet) builder.get_object("leaflet");
- box.append(leaflet);
- left_box = (Box) builder.get_object("left_box");
- right_box = (Box) builder.get_object("right_box");
- left_stack = (Stack) builder.get_object("left_stack");
- right_stack = (Stack) builder.get_object("right_stack");
- conversation_view = (ConversationView) builder.get_object("conversation_view");
- search_flap = (Adw.Flap) builder.get_object("search_flap");
- conversation_selector = ((ConversationSelector) builder.get_object("conversation_list")).init(stream_interactor);
- conversation_selector.conversation_selected.connect_after(() => leaflet.navigate(Adw.NavigationDirection.FORWARD));
+ conversation_selector.init(stream_interactor);
+ conversation_selector.conversation_selected.connect_after(() => { navigation_split_view.show_content = true; });
- Adw.Bin search_frame = (Adw.Bin) builder.get_object("search_frame");
global_search = new GlobalSearch(stream_interactor);
search_frame.set_child(global_search.get_widget());
- }
- private void setup_headerbar() {
- conversation_list_titlebar = get_conversation_list_titlebar();
- conversation_titlebar = new ConversationTitlebar();
- leaflet.bind_property("folded", conversation_list_titlebar, "show-end-title-buttons", BindingFlags.SYNC_CREATE);
- leaflet.bind_property("folded", conversation_titlebar.get_widget(), "show-start-title-buttons", BindingFlags.SYNC_CREATE);
- left_box.prepend(conversation_list_titlebar);
- right_box.prepend(conversation_titlebar.get_widget());
- leaflet.notify["folded"].connect_after(() => conversation_titlebar.back_button_visible = leaflet.folded);
- conversation_titlebar.back_pressed.connect(() => leaflet.navigate(Adw.NavigationDirection.BACK));
- }
+ create_add_menu(add_button, menu_button);
- private void setup_stack() {
- stack.add_named(box, "main");
stack.add_named(welcome_placeholder, "welcome_placeholder");
stack.add_named(accounts_placeholder, "accounts_placeholder");
- set_content(stack);
}
public enum StackState {
@@ -105,14 +77,11 @@ public class MainWindow : Adw.ApplicationWindow {
if (stack_state == StackState.CONVERSATION) {
left_stack.set_visible_child_name("content");
right_stack.set_visible_child_name("content");
-
stack.set_visible_child_name("main");
- } else if (stack_state == StackState.CLEAN_START || stack_state == StackState.NO_ACTIVE_ACCOUNTS) {
- if (stack_state == StackState.CLEAN_START) {
- stack.set_visible_child_name("welcome_placeholder");
- } else if (stack_state == StackState.NO_ACTIVE_ACCOUNTS) {
- stack.set_visible_child_name("accounts_placeholder");
- }
+ } else if (stack_state == StackState.CLEAN_START) {
+ stack.set_visible_child_name("welcome_placeholder");
+ } else if (stack_state == StackState.NO_ACTIVE_ACCOUNTS) {
+ stack.set_visible_child_name("accounts_placeholder");
} else if (stack_state == StackState.NO_ACTIVE_CONVERSATIONS) {
stack.set_visible_child_name("main");
left_stack.set_visible_child_name("placeholder");
@@ -163,6 +132,18 @@ public class MainWindow : Adw.ApplicationWindow {
}
}
}
+
+ private static void create_add_menu(MenuButton add_button, MenuButton menu_button) {
+ add_button.tooltip_text = Util.string_if_tooltips_active(_("Start Conversation"));
+
+ Builder add_builder = new Builder.from_resource("/im/dino/Dino/menu_add.ui");
+ MenuModel add_menu_model = add_builder.get_object("menu_add") as MenuModel;
+ add_button.set_menu_model(add_menu_model);
+
+ Builder menu_builder = new Builder.from_resource("/im/dino/Dino/menu_app.ui");
+ MenuModel menu_menu_model = menu_builder.get_object("menu_app") as MenuModel;
+ menu_button.set_menu_model(menu_menu_model);
+ }
}
public class WelcomePlaceholder : MainWindowPlaceholder {
@@ -182,7 +163,7 @@ public class NoAccountsPlaceholder : MainWindowPlaceholder {
}
}
-[GtkTemplate (ui = "/im/dino/Dino/unified_window_placeholder.ui")]
+[GtkTemplate (ui = "/im/dino/Dino/main_window_placeholder.ui")]
public class MainWindowPlaceholder : Box {
[GtkChild] public unowned Adw.StatusPage status_page;
[GtkChild] public unowned Button primary_button;