Blame editor/browser-stack.vala

Packit Service f2b131
/*
Packit Service f2b131
  This file is part of Dconf Editor
Packit Service f2b131
Packit Service f2b131
  Dconf Editor is free software: you can redistribute it and/or modify
Packit Service f2b131
  it under the terms of the GNU General Public License as published by
Packit Service f2b131
  the Free Software Foundation, either version 3 of the License, or
Packit Service f2b131
  (at your option) any later version.
Packit Service f2b131
Packit Service f2b131
  Dconf Editor is distributed in the hope that it will be useful,
Packit Service f2b131
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service f2b131
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service f2b131
  GNU General Public License for more details.
Packit Service f2b131
Packit Service f2b131
  You should have received a copy of the GNU General Public License
Packit Service f2b131
  along with Dconf Editor.  If not, see <https://www.gnu.org/licenses/>.
Packit Service f2b131
*/
Packit Service f2b131
Packit Service f2b131
using Gtk;
Packit Service f2b131
Packit Service f2b131
[GtkTemplate (ui = "/ca/desrt/dconf-editor/ui/browser-stack.ui")]
Packit Service f2b131
class BrowserStack : Grid
Packit Service f2b131
{
Packit Service f2b131
    [GtkChild] private Stack stack;
Packit Service f2b131
    [GtkChild] private RegistryView folder_view;
Packit Service f2b131
    [GtkChild] private RegistryInfo object_view;
Packit Service f2b131
    [GtkChild] private RegistrySearch search_view;
Packit Service f2b131
Packit Service f2b131
    public ViewType current_view { get; private set; default = ViewType.FOLDER; }
Packit Service f2b131
Packit Service f2b131
    public bool small_keys_list_rows
Packit Service f2b131
    {
Packit Service f2b131
        set
Packit Service f2b131
        {
Packit Service f2b131
            folder_view.small_keys_list_rows = value;
Packit Service f2b131
            search_view.small_keys_list_rows = value;
Packit Service f2b131
        }
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public ModificationsHandler modifications_handler
Packit Service f2b131
    {
Packit Service f2b131
        set {
Packit Service f2b131
            folder_view.modifications_handler = value;
Packit Service f2b131
            object_view.modifications_handler = value;
Packit Service f2b131
            search_view.modifications_handler = value;
Packit Service f2b131
        }
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    /*\
Packit Service f2b131
    * * Views
Packit Service f2b131
    \*/
Packit Service f2b131
Packit Service f2b131
    public string get_selected_row_name ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            return ((RegistryList) stack.get_visible_child ()).get_selected_row_name ();
Packit Service f2b131
        return object_view.full_name;
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void prepare_folder_view (GLib.ListStore key_model, bool is_ancestor)
Packit Service f2b131
    {
Packit Service f2b131
        folder_view.set_key_model (key_model);
Packit Service f2b131
Packit Service f2b131
        stack.set_transition_type (is_ancestor && current_view != ViewType.SEARCH ? StackTransitionType.CROSSFADE : StackTransitionType.NONE);
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void select_row (string selected, string last_context)
Packit Service f2b131
        requires (current_view != ViewType.OBJECT)
Packit Service f2b131
    {
Packit Service f2b131
        if (selected == "")
Packit Service f2b131
            ((RegistryList) stack.get_visible_child ()).select_first_row ();
Packit Service f2b131
        else
Packit Service f2b131
            ((RegistryList) stack.get_visible_child ()).select_row_named (selected, last_context, current_view == ViewType.FOLDER);
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void prepare_object_view (Key key, bool is_parent)
Packit Service f2b131
    {
Packit Service f2b131
        object_view.populate_properties_list_box (key);
Packit Service f2b131
Packit Service f2b131
        stack.set_transition_type (is_parent && current_view != ViewType.SEARCH ? StackTransitionType.CROSSFADE : StackTransitionType.NONE);
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void set_path (ViewType type, string path)
Packit Service f2b131
    {
Packit Service f2b131
        // might become “bool clear = type != current_view”, one day…
Packit Service f2b131
        bool clean_object_view = type == ViewType.FOLDER;    // note: not on search
Packit Service f2b131
        bool clean_search_view = current_view == ViewType.SEARCH && type != ViewType.SEARCH;
Packit Service f2b131
Packit Service f2b131
        current_view = type;
Packit Service f2b131
        if (type == ViewType.FOLDER)
Packit Service f2b131
            stack.set_visible_child (folder_view);
Packit Service f2b131
        else if (type == ViewType.OBJECT)
Packit Service f2b131
            stack.set_visible_child (object_view);
Packit Service f2b131
        else // (type == ViewType.SEARCH)
Packit Service f2b131
        {
Packit Service f2b131
            search_view.start_search (path);
Packit Service f2b131
            stack.set_transition_type (StackTransitionType.NONE);
Packit Service f2b131
            stack.set_visible_child (search_view);
Packit Service f2b131
        }
Packit Service f2b131
Packit Service f2b131
        if (clean_object_view)
Packit Service f2b131
            object_view.clean ();
Packit Service f2b131
        if (clean_search_view)
Packit Service f2b131
            search_view.clean ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public string? get_copy_text ()
Packit Service f2b131
    {
Packit Service f2b131
        return ((BrowsableView) stack.get_visible_child ()).get_copy_text ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public string? get_copy_path_text ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view == ViewType.SEARCH)
Packit Service f2b131
            return search_view.get_copy_path_text ();
Packit Service f2b131
Packit Service f2b131
        warning ("BrowserView get_copy_path_text() called but current view is not search results view.");
Packit Service f2b131
        return null;
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public bool show_row_popover ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            return ((RegistryList) stack.get_visible_child ()).show_row_popover ();
Packit Service f2b131
        return false;
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void toggle_boolean_key ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            ((RegistryList) stack.get_visible_child ()).toggle_boolean_key ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void set_selected_to_default ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            ((RegistryList) stack.get_visible_child ()).set_selected_to_default ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void discard_row_popover ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            ((RegistryList) stack.get_visible_child ()).discard_row_popover ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public void invalidate_popovers ()
Packit Service f2b131
    {
Packit Service f2b131
        folder_view.invalidate_popovers ();
Packit Service f2b131
        search_view.invalidate_popovers ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    /*\
Packit Service f2b131
    * * Reload
Packit Service f2b131
    \*/
Packit Service f2b131
Packit Service f2b131
    public void set_search_parameters (string current_path, string [] bookmarks, SortingOptions sorting_options)
Packit Service f2b131
    {
Packit Service f2b131
        search_view.set_search_parameters (current_path, bookmarks, sorting_options);
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public bool check_reload_folder (GLib.ListStore fresh_key_model)
Packit Service f2b131
    {
Packit Service f2b131
        return folder_view.check_reload (fresh_key_model);
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public bool check_reload_object (Variant properties)
Packit Service f2b131
    {
Packit Service f2b131
        return object_view.check_reload (properties);
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    /*\
Packit Service f2b131
    * * Keyboard calls
Packit Service f2b131
    \*/
Packit Service f2b131
Packit Service f2b131
    public bool return_pressed ()
Packit Service f2b131
        requires (current_view == ViewType.SEARCH)
Packit Service f2b131
    {
Packit Service f2b131
        return search_view.return_pressed ();
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public bool up_pressed ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            return ((RegistryList) stack.get_visible_child ()).up_or_down_pressed (false);
Packit Service f2b131
        return false;
Packit Service f2b131
    }
Packit Service f2b131
Packit Service f2b131
    public bool down_pressed ()
Packit Service f2b131
    {
Packit Service f2b131
        if (current_view != ViewType.OBJECT)
Packit Service f2b131
            return ((RegistryList) stack.get_visible_child ()).up_or_down_pressed (true);
Packit Service f2b131
        return false;
Packit Service f2b131
    }
Packit Service f2b131
}
Packit Service f2b131
Packit Service f2b131
public interface BrowsableView
Packit Service f2b131
{
Packit Service f2b131
    public abstract string? get_copy_text ();
Packit Service f2b131
}