Skip to content
Snippets Groups Projects
Select Git revision
  • master default
1 result

MainWindow.vala

Blame
  • MainWindow.vala 6.46 KiB
    /**
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License version 2 as
     * published by the Free Software Foundation.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License along
     * with this program; if not, write to the Free Software Foundation, Inc.,
     * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     *
     * AUTHORS
     * gyan000 <gyan000 (at] ijaz.fr>
     */
    using EOSConnect.Plugin;
    using EOSConnect.Plugin.Windows;
    using EOSConnect.Widgets;
    using Gee;
    using Granite.Widgets;
    using MConnect;
    
    namespace EOSConnect {
    
        public class MainWindow : Gtk.ApplicationWindow {
    
            public GLib.Settings main_settings { get; construct; }
            public SMSHistory sms_history_view { get; construct; }
            public Gtk.Stack main_stack { get; construct; }
    
            private Views.DevicesView devices_view;
            // private Gtk.InfoBar infobar_error;
            // private Gtk.Label info_bar_error_label;
            // private Gtk.Overlay overlay;
            // private Granite.Widgets.OverlayBar overlaybar;
    
            public MainWindow (Granite.Application application, GLib.Settings main_settings, SMSHistory sms_history_view) {
                Object (
                    application: application,
                    main_settings: main_settings,
                    sms_history_view: sms_history_view
                );
    
                set_default_size (900, 600);
                set_size_request (750, 500);
            }
            construct {
    
                var theme_button = new Gtk.Button.from_icon_name ("object-inverse");
                theme_button.tooltip_text = _("Use dark style");
                theme_button.valign = Gtk.Align.CENTER;
    
                var new_sms_button = new Gtk.Button.from_icon_name ("mail-message-new");
                new_sms_button.tooltip_text = _("Send a new SMS");
                new_sms_button.valign = Gtk.Align.CENTER;
    
                var headerbar = new Gtk.HeaderBar ();
                headerbar.get_style_context ().add_class ("default-decoration");
                headerbar.show_close_button = true;
                headerbar.pack_start (new_sms_button);
                headerbar.pack_end (theme_button);
                headerbar.title = "EOS Connect";
    
                set_titlebar (headerbar);
                window_position = Gtk.WindowPosition.CENTER;
    
                // infobar_error = new Gtk.InfoBar();
                // infobar_error.set_show_close_button(true);
                // infobar_error.message_type = Gtk.MessageType.ERROR;
                // infobar_error.no_show_all = true;
                //
                // info_bar_error_label = new Gtk.Label ("");
                //
                // var info_bar_error_content = infobar_error.get_content_area ();
                // info_bar_error_content.add (info_bar_error_label);
    
                devices_view = new Views.DevicesView (this);
                var main_settings_view = new Views.MainSettingsView (this, main_settings);
    
                main_stack = new Gtk.Stack ();
                main_stack.expand = true;
                main_stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT_RIGHT;
                main_stack.add_titled (devices_view, "devices_view", _("Devices"));
                main_stack.add_titled (sms_history_view, "sms_history_view", _("SMS"));
                main_stack.add_titled (main_settings_view, "main_settings_view", _("Settings"));
    
                var main_stackswitcher = new Gtk.StackSwitcher ();
                main_stackswitcher.set_stack (main_stack);
                main_stackswitcher.halign = Gtk.Align.CENTER;
                main_stackswitcher.homogeneous = true;
    
                var refresh_in_progress = false;
    
                var sub_grid = new Gtk.Grid ();
                sub_grid.orientation = Gtk.Orientation.VERTICAL;
                sub_grid.margin = 0;
                sub_grid.margin_top = 12;
                sub_grid.add (main_stackswitcher);
                sub_grid.add (main_stack);
    
    
                var main_grid = new Gtk.Grid ();
                main_grid.orientation = Gtk.Orientation.VERTICAL;
                // main_grid.add(infobar_error);
                main_grid.add(sub_grid);
    
                // Debug toolbar
                if (Granite.Services.Logger.DisplayLevel == Granite.Services.Logger.DEBUG) {
                    var debug_toolbar = new DebugToolbar (devices_view);
                    main_grid.add(debug_toolbar);
                }
    
                // overlay = new Gtk.Overlay ();
                // overlay.add_overlay (main_grid);
    
                Gtk.Settings.get_default ().gtk_application_prefer_dark_theme = main_settings.get_boolean ("use-dark-theme");
    
                // add (overlay);
                add (main_grid);
    
                theme_button.clicked.connect (() => {
                    var window_settings = Gtk.Settings.get_default ();
                    window_settings.gtk_application_prefer_dark_theme = !window_settings.gtk_application_prefer_dark_theme;
                    main_settings.set_boolean ("use-dark-theme", window_settings.gtk_application_prefer_dark_theme);
    
                    if (window_settings.gtk_application_prefer_dark_theme) {
                        theme_button.tooltip_text = _("Use light style");
                    } else {
                        theme_button.tooltip_text = _("Use dark style");
                    }
                });
    
                // infobar_error.response.connect ((response_id) => {
                //     infobar_error.no_show_all = true;
                //     infobar_error.hide ();
                // });
    
    
                new_sms_button.clicked.connect ( () => { sms_history_view.handle_new_sms_button (new_sms_button); });
            }
    
            public void update_ui (HashMap<string, Device> devices_map) {
                devices_view.update_device_list (devices_map);
            }
    
            // public void show_error_infobar (string error_message) {
            //     if (overlaybar != null) { overlaybar.destroy (); } ;
            //     infobar_error.no_show_all = false;
            //     info_bar_error_label.label = "%s".printf (error_message);
            //     infobar_error.show_all ();
            // }
            //
            // public void hide_overlaybar () {
            //     if (overlaybar != null) { overlaybar.destroy (); } ;
            // }
            //
            // public void display_overlaybar (string status) {
            //     overlaybar = new Granite.Widgets.OverlayBar (overlay);
            //     overlaybar.label = _(status);
            //     overlaybar.active = true;
            // }
        }
    }