make preview layout switcher menu dynamic

ui
Manuel Genovés 2020-02-12 12:35:40 +01:00
parent 8e45b8d3da
commit 28fc4e0a72
6 changed files with 217 additions and 177 deletions

View File

@ -172,4 +172,8 @@
.quick-preview-popup label {
color: @theme_fg_color;
}
.plain-listview {
background-color: @fg-color;
}

View File

@ -14,6 +14,7 @@
<file compressed="true" preprocess="xml-stripblanks">ui/Shortcuts.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/Window.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/Headerbar.ui</file>
<file compressed="true" preprocess="xml-stripblanks">ui/PreviewLayoutSwitcherItem.ui</file>
<file compressed="true" preprocess="xml-stripblanks">About.ui</file>
</gresource>
</gresources>

View File

@ -2,6 +2,45 @@
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkPopover">
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkImage" id="exit_fs_icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
@ -13,8 +52,8 @@
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">6</property>
<property name="margin_right">18</property>
<property name="margin_left">12</property>
<property name="margin_right">12</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<property name="orientation">vertical</property>
@ -119,174 +158,18 @@
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">6</property>
<property name="margin_right">6</property>
<property name="margin_top">6</property>
<property name="margin_top">12</property>
<property name="margin_bottom">6</property>
<property name="hexpand">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkListBox">
<object class="GtkListBox" id="preview_switch_options">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">32</property>
<property name="icon_name">preview-layout-full-width-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="margin_right">6</property>
<property name="label" translatable="yes">Full-Width</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">32</property>
<property name="icon_name">preview-layout-half-width-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="margin_right">6</property>
<property name="label" translatable="yes">Half-Width</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">32</property>
<property name="icon_name">preview-layout-half-height-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Half-Height</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">32</property>
<property name="icon_name">preview-layout-windowed-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Windowed</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<style>
<class name="plain-listview"/>
</style>
</object>
</child>
<child type="label_item">
@ -300,13 +183,9 @@
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">Sync views</property>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="margin_left">4</property>
<property name="draw_indicator">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
@ -314,6 +193,46 @@
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">6</property>
<property name="margin_right">6</property>
<property name="margin_top">10</property>
<property name="margin_bottom">12</property>
<property name="spacing">10</property>
<child>
<object class="GtkSwitch">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">6</property>
<property name="label" translatable="yes">Sync views</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
@ -467,12 +386,13 @@
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkButton" id="preview_switch_toggle">
<object class="GtkToggleButton" id="preview_switch_toggle">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="action_name">app.preview</property>
<property name="image">preview_icon</property>
<property name="always_show_image">True</property>
</object>
<packing>
<property name="expand">False</property>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkListBoxRow" id="switcherItem">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="action_name">app.preview_mode</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">4</property>
<property name="margin_bottom">4</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage" id="icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">preview-layout-full-width-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="margin_right">6</property>
<property name="label" translatable="yes">Full-Width</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -18,31 +18,97 @@
import gi
from gettext import gettext as _
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib
from uberwriter.helpers import get_descendant
from uberwriter.settings import Settings
class BaseHeaderbar:
"""Base class for all headerbars
"""
# preview modes
FULL_WIDTH = 0
HALF_WIDTH = 1
HALF_HEIGHT = 2
WINDOWED = 3
def __init__(self, app):
self.settings = Settings.new()
self.builder = Gtk.Builder()
self.builder.add_from_resource(
"/de/wolfvollprecht/UberWriter/ui/Headerbar.ui")
self.hb = self.builder.get_object("Headerbar")
self.hb_revealer = self.builder.get_object("titlebar_revealer")
self.hb = self.builder.get_object(
"Headerbar")
self.hb_revealer = self.builder.get_object(
"titlebar_revealer")
self.preview_toggle_revealer = self.builder.get_object("preview_switch_revealer")
self.preview_toggle_revealer = self.builder.get_object(
"preview_switch_revealer")
self.preview_switcher_icon = self.builder.get_object(
"preview_switch_toggle_icon")
self.__populate_layout_switcher_menu()
self.update_preview_layout_icon()
self.menu_button = self.builder.get_object("menu_button")
self.recents_button = self.builder.get_object("recents_button")
def set_preview_layout_icon(self, icon):
def update_preview_layout_icon(self):
mode = self.settings.get_enum("preview-mode")
self.preview_switcher_icon.set_from_icon_name(
self.__get_icon_for_preview_mode(mode), 4)
self.preview_switcher_icon = self.builder.get_object("preview_switch_toggle_icon")
def __populate_layout_switcher_menu(self):
preview_menu = self.builder.get_object("preview_switch_options")
modes = self.settings.props.settings_schema.get_key("preview-mode").get_range()[1]
for i, mode in enumerate(modes):
item_builder = Gtk.Builder()
item_builder.add_from_resource(
"/de/wolfvollprecht/UberWriter/ui/PreviewLayoutSwitcherItem.ui")
menu_item = item_builder.get_object("switcherItem")
menu_item.label = item_builder.get_object("label")
menu_item.label.set_text(self.__get_text_for_preview_mode(i))
menu_item.icon = item_builder.get_object("icon")
menu_item.icon.set_from_icon_name(self.__get_icon_for_preview_mode(i), 16)
menu_item.set_action_name("app.preview_mode")
menu_item.set_action_target_value(GLib.Variant.new_string(mode))
menu_item.show_all()
preview_menu.insert(menu_item, -1)
def __get_text_for_preview_mode(self, mode):
if mode == self.FULL_WIDTH:
return _("Full-Width")
elif mode == self.HALF_WIDTH:
return _("Half-Width")
elif mode == self.HALF_HEIGHT:
return _("Half-Height")
elif mode == self.WINDOWED:
return _("Windowed")
else:
raise ValueError("Unknown preview mode {}".format(mode))
def __get_icon_for_preview_mode(self, mode):
if mode == self.FULL_WIDTH:
return "preview-layout-full-width-symbolic"
elif mode == self.HALF_WIDTH:
return "preview-layout-half-width-symbolic"
elif mode == self.HALF_HEIGHT:
return "preview-layout-half-height-symbolic"
elif mode == self.WINDOWED:
return "preview-layout-windowed-symbolic"
else:
raise ValueError("Unknown preview mode {}".format(mode))
class MainHeaderbar(BaseHeaderbar): # pylint: disable=too-few-public-methods

View File

@ -450,6 +450,7 @@ class MainWindow(StyledWindow):
def update_preview_mode(self):
self.preview_handler.update_preview_mode()
self.headerbar.update_preview_layout_icon()
def menu_toggle_sidebar(self, _widget=None):
"""WIP