tootle-linux-client/src/MainWindow.vala

92 lines
3.0 KiB
Vala
Raw Normal View History

2018-04-14 14:09:06 +02:00
using Gtk;
public class Tootle.MainWindow: Gtk.Window {
2018-04-20 13:51:18 +02:00
Tootle.HeaderBar header;
public Stack primary_stack;
public Stack secondary_stack;
2018-04-14 14:09:06 +02:00
2018-04-15 14:28:23 +02:00
public HomeView home = new HomeView ();
public LocalView feed_local = new LocalView ();
2018-04-17 14:01:55 +02:00
public FederatedView feed_federated = new FederatedView ();
public NotificationsView notifications = new NotificationsView ();
2018-04-14 14:09:06 +02:00
construct {
var provider = new Gtk.CssProvider ();
provider.load_from_resource ("/com/github/bleakgrey/tootle/Application.css");
StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
2018-04-19 20:38:30 +02:00
secondary_stack = new Stack();
secondary_stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT_RIGHT;
secondary_stack.show ();
secondary_stack.set_size_request (400, 500);
primary_stack = new Stack();
primary_stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT_RIGHT;
primary_stack.show ();
primary_stack.add_named (secondary_stack, "modes");
2018-04-14 14:09:06 +02:00
2018-04-20 13:51:18 +02:00
header = new Tootle.HeaderBar ();
2018-04-14 14:09:06 +02:00
2018-04-19 20:38:30 +02:00
add (primary_stack);
2018-04-14 14:09:06 +02:00
show_all ();
2018-04-20 13:51:18 +02:00
}
public MainWindow (Gtk.Application application) {
Object (application: application,
icon_name: "com.github.bleakgrey.tootle",
title: "Tootle",
resizable: true
);
set_titlebar (header);
window_position = WindowPosition.CENTER;
2018-04-14 14:09:06 +02:00
2018-04-20 13:51:18 +02:00
AccountManager.instance.switched.connect(on_account_switched);
2018-04-14 14:09:06 +02:00
}
2018-04-20 13:51:18 +02:00
private void on_account_switched(Account? account){
2018-04-19 20:38:30 +02:00
secondary_stack.forall (widget => secondary_stack.remove (widget));
2018-04-14 14:09:06 +02:00
2018-04-14 19:53:09 +02:00
if(account == null)
2018-04-14 14:09:06 +02:00
show_setup_views ();
else
show_main_views ();
}
private void show_setup_views (){
var add_account = new AddAccountView ();
2018-04-19 20:38:30 +02:00
secondary_stack.add_named (add_account, add_account.get_name ());
2018-04-20 13:51:18 +02:00
header.update (false, true);
2018-04-14 14:09:06 +02:00
}
private void show_main_views (){
2018-04-20 13:51:18 +02:00
header.button_mode.clear_children ();
2018-04-14 14:09:06 +02:00
add_view (home);
2018-04-17 19:28:07 +02:00
add_view (notifications);
2018-04-14 14:09:06 +02:00
add_view (feed_local);
add_view (feed_federated);
2018-04-20 13:51:18 +02:00
header.button_mode.set_active (0);
header.update (true);
2018-04-14 14:09:06 +02:00
}
private void add_view (AbstractView view) {
if (view.show_in_header){
2018-04-17 14:01:55 +02:00
var img = new Gtk.Image.from_icon_name(view.get_icon (), Gtk.IconSize.LARGE_TOOLBAR);
img.tooltip_text = view.get_name ();
2018-04-20 13:51:18 +02:00
header.button_mode.append (img);
2018-04-17 14:01:55 +02:00
view.image = img;
2018-04-19 20:38:30 +02:00
secondary_stack.add_named(view, view.get_name ());
2018-04-24 12:00:55 +02:00
if (view is NotificationsView)
img.pixel_size = 20; // For some reason Notifications icon is too small without this
2018-04-14 14:09:06 +02:00
}
}
2018-04-19 21:03:28 +02:00
public void open_secondary_view (Widget widget) {
widget.show ();
primary_stack.add_named (widget, "details");
primary_stack.set_visible_child_name ("details");
2018-04-20 13:51:18 +02:00
header.update (false);
2018-04-19 21:03:28 +02:00
}
2018-04-14 14:09:06 +02:00
}