Tooth/src/Dialogs/MainWindow.vala

113 lines
2.5 KiB
Vala

using Gtk;
using Gdk;
[GtkTemplate (ui = "/dev/geopjr/tooth/ui/dialogs/main.ui")]
public class Tooth.Dialogs.MainWindow: Adw.ApplicationWindow, Saveable {
public const string ZOOM_CLASS = "ttl-scalable";
[GtkChild] public unowned Adw.Flap flap;
[GtkChild] unowned Adw.Leaflet leaflet;
[GtkChild] unowned Views.Sidebar sidebar;
Views.Base? last_view = null;
construct {
construct_saveable (settings);
var gtk_settings = Gtk.Settings.get_default ();
// settings.bind_property ("dark-theme", gtk_settings, "gtk-application-prefer-dark-theme", BindingFlags.SYNC_CREATE);
settings.notify["post-text-size"].connect (() => on_zoom_level_changed ());
on_zoom_level_changed ();
// button_press_event.connect (on_button_press);
}
public MainWindow (Gtk.Application app) {
Object (
application: app,
icon_name: Build.DOMAIN,
title: Build.NAME,
resizable: true
);
open_view (new Views.Main ());
}
public Views.Base open_view (Views.Base view) {
leaflet.append (view);
leaflet.visible_child = view;
return view;
}
public bool back () {
leaflet.navigate (Adw.NavigationDirection.BACK);
return true;
}
// public override bool delete_event (Gdk.EventAny event) {
// window = null;
// return app.on_window_closed ();
// }
//FIXME: switch timelines with 1-4. Should be moved to Views.TabbedBase
public void switch_timeline (int32 num) {}
//FIXME: Handle back mouse button
// bool on_button_press (EventButton ev) {
// if (ev.button == 8)
// return back ();
// return false;
// }
void on_zoom_level_changed () {
try {
var scale = settings.post_text_size;
var css = "";
if (scale > 100) {
css ="""
.%s label {
font-size: %i%;
}
""".printf (ZOOM_CLASS, scale);
}
// app.zoom_css_provider.load_from_data (css.data);
}
catch (Error e) {
warning (@"Can't set zoom level: $(e.message)");
}
}
[GtkCallback]
void on_view_changed () {
var view = leaflet.visible_child as Views.Base;
on_child_transition ();
if (last_view != null) {
last_view.current = false;
last_view.on_hidden ();
}
if (view != null) {
view.current = true;
view.on_shown ();
}
last_view = view;
}
[GtkCallback]
void on_child_transition () {
if (leaflet.child_transition_running)
return;
Widget unused_child = null;
while ((unused_child = leaflet.get_adjacent_child (Adw.NavigationDirection.FORWARD)) != null) {
leaflet.remove (unused_child);
unused_child.dispose ();
}
}
}