From 0e2f731ff48a3a558f854eeb06314684dfa8fb6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Mon, 11 Nov 2019 01:27:39 +0100 Subject: [PATCH 1/2] Use a .ui file to define the headerbar This makes all the headerbar code more readable and easier to tweak --- data/uberwriter.gresource.xml | 1 + data/ui/Headerbar.ui | 132 ++++++++++++++++++++++++++++++++++ data/ui/Recents.ui | 5 +- data/ui/Window.ui | 10 +-- uberwriter/headerbars.py | 122 ++++++++++--------------------- 5 files changed, 177 insertions(+), 93 deletions(-) create mode 100644 data/ui/Headerbar.ui diff --git a/data/uberwriter.gresource.xml b/data/uberwriter.gresource.xml index ea9446b..c85d3be 100644 --- a/data/uberwriter.gresource.xml +++ b/data/uberwriter.gresource.xml @@ -9,6 +9,7 @@ ui/Recents.ui ui/Shortcuts.ui ui/Window.ui + ui/Headerbar.ui About.ui diff --git a/data/ui/Headerbar.ui b/data/ui/Headerbar.ui new file mode 100644 index 0000000..61e4843 --- /dev/null +++ b/data/ui/Headerbar.ui @@ -0,0 +1,132 @@ + + + + + + True + False + view-restore-symbolic + + + True + False + system-search-symbolic + + + True + False + True + + + New + True + True + True + app.new + + + + + True + False + + + Open + True + True + True + app.open + + + False + True + 0 + + + + + True + True + True + Open Recent + app.on_open_recent + + + + + + False + True + 1 + + + + + + 1 + + + + + True + True + True + app.fullscreen + exit_fs_icon + + + end + 1 + + + + + True + True + True + + + True + False + Menu + open-menu-symbolic + + + + + end + 2 + + + + + True + True + True + Find + app.search + search_icon + True + + + end + 3 + + + + + Save + True + True + True + app.save + + + end + 4 + + + + diff --git a/data/ui/Recents.ui b/data/ui/Recents.ui index 06bc23a..a7b237c 100644 --- a/data/ui/Recents.ui +++ b/data/ui/Recents.ui @@ -17,7 +17,10 @@ True False start - 6 + 6 + 6 + 6 + 6 recent_md_filter 20 False diff --git a/data/ui/Window.ui b/data/ui/Window.ui index 5d17ee0..16fd925 100644 --- a/data/ui/Window.ui +++ b/data/ui/Window.ui @@ -414,7 +414,6 @@ 1 - True False start @@ -423,14 +422,7 @@ False start - - True - False - start - - - - + diff --git a/uberwriter/headerbars.py b/uberwriter/headerbars.py index a70af47..19991ae 100644 --- a/uberwriter/headerbars.py +++ b/uberwriter/headerbars.py @@ -31,9 +31,17 @@ class MainHeaderbar: #pylint: disable=too-few-public-methods """ def __init__(self, app): - self.hb = Gtk.HeaderBar().new() #pylint: disable=C0103 - self.hb.props.show_close_button = True - self.hb.get_style_context().add_class("titlebar") + + builder = Gtk.Builder() + builder.add_from_resource( + "/de/wolfvollprecht/UberWriter/ui/Headerbar.ui") + + self.hb = builder.get_object("Headerbar") + + self.menu_button = builder.get_object("menu_button") + self.recents_button = builder.get_object("recents_button") + + add_menus(self, app) self.hb_revealer = Gtk.Revealer(name='titlebar-revealer') self.hb_revealer.add(self.hb) @@ -47,9 +55,6 @@ class MainHeaderbar: #pylint: disable=too-few-public-methods self.hb_container.add(self.hb_revealer) self.hb_container.show() - self.btns = main_buttons(app) - pack_main_buttons(self.hb, self.btns) - self.hb.show_all() @@ -81,35 +86,35 @@ class FullscreenHeaderbar: """Sets up and manages the fullscreen headerbar and his events """ - def __init__(self, builder, app): - self.events = builder.get_object("FullscreenEventbox") - self.revealer = builder.get_object( - "FullscreenHbPlaceholder") - self.revealer.show() - self.revealer.set_reveal_child(False) + def __init__(self, fs_builder, app): - self.hb = builder.get_object("FullscreenHeaderbar") #pylint: disable=C0103 - self.hb.get_style_context().add_class("titlebar") - self.hb.show() - self.events.hide() - - self.btns = main_buttons(app) - - fs_btn_exit = Gtk.Button().new_from_icon_name("view-restore-symbolic", - Gtk.IconSize.BUTTON) - fs_btn_exit.set_tooltip_text(_("Exit Fullscreen")) - fs_btn_exit.set_action_name("app.fullscreen") - - pack_main_buttons(self.hb, self.btns, fs_btn_exit) + builder = Gtk.Builder() + builder.add_from_resource( + "/de/wolfvollprecht/UberWriter/ui/Headerbar.ui") + self.hb = builder.get_object("Headerbar") + self.hb.set_show_close_button(False) self.hb.show_all() + self.menu_button = builder.get_object("menu_button") + self.recents_button = builder.get_object("recents_button") + + self.exit_fs_button = builder.get_object("exit_fs_button") + self.exit_fs_button.set_visible(True) + + add_menus(self, app) + + self.events = fs_builder.get_object("FullscreenEventbox") + self.revealer = fs_builder.get_object( + "FullscreenHbPlaceholder") + self.revealer.add(self.hb) + # this is a little tricky # we show hb when the cursor enters an area of 1 px at the top of the window # as the hb is shown the height of the eventbox grows to accomodate it self.events.connect('enter_notify_event', self.show_fs_hb) self.events.connect('leave_notify_event', self.hide_fs_hb) - self.btns.menu.get_popover().connect('closed', self.hide_fs_hb) + self.menu_button.get_popover().connect('closed', self.hide_fs_hb) def show_fs_hb(self, _widget, _data=None): """show headerbar of the fullscreen mode @@ -119,34 +124,24 @@ class FullscreenHeaderbar: def hide_fs_hb(self, _widget, _data=None): """hide headerbar of the fullscreen mode """ - if self.btns.menu.get_active(): + if self.menu_button.get_active(): pass else: self.revealer.set_reveal_child(False) -def main_buttons(app): - """constructor for the headerbar buttons +def add_menus(headerbar, app): - Returns: - [NamedTupple] -- tupple of Gtk.Buttons - """ - - Button = namedtuple("Button", "new open_recent save search menu") - btn = Button(Gtk.Button().new_with_label(_("New")), - Gtk.Box().new(0, 0), - Gtk.Button().new_with_label(_("Save")), - Gtk.Button().new_from_icon_name("system-search-symbolic", - Gtk.IconSize.BUTTON), - Gtk.MenuButton().new()) + # Add menu model to the menu button builder_window_menu = Gtk.Builder() builder_window_menu.add_from_resource( "/de/wolfvollprecht/UberWriter/ui/Menu.ui") model = builder_window_menu.get_object("Menu") - open_button = Gtk.Button().new_with_label(_("Open")) - open_button.set_action_name("app.open") + headerbar.menu_button.set_menu_model(model) + + # Add recents menu to the open recents button recents_builder = Gtk.Builder() recents_builder.add_from_resource( @@ -159,44 +154,5 @@ def main_buttons(app): recents_wd = recents_builder.get_object("recent_md_widget") recents_wd.connect('item-activated', app.on_open_recent) - recents_button = Gtk.MenuButton().new() - recents_button.set_image(Gtk.Image.new_from_icon_name("pan-down-symbolic", - Gtk.IconSize.BUTTON)) - recents_button.set_tooltip_text(_("Open Recent")) - recents_button.set_popover(recents) - - btn.open_recent.get_style_context().add_class("linked") - btn.open_recent.pack_start(open_button, False, False, 0) - btn.open_recent.pack_end(recents_button, False, False, 0) - - btn.search.set_tooltip_text(_("Find")) - btn.menu.set_tooltip_text(_("Menu")) - btn.menu.set_image(Gtk.Image.new_from_icon_name("open-menu-symbolic", - Gtk.IconSize.BUTTON)) - btn.menu.set_use_popover(True) - btn.menu.set_menu_model(model) - btn.new.set_action_name("app.new") - btn.save.set_action_name("app.save") - btn.search.set_action_name("app.search") - - return btn - - -def pack_main_buttons(headerbar, btn, btn_exit=None): - """Pack the given buttons in the given headerbar - - Arguments: - headerbar {Gtk.HeaderBar} -- The headerbar where to put the buttons - btn {Tupple of Gtk.Buttons} -- The buttons to pack - - Keyword Arguments: - btn_exit {Gtk.Button} -- Optional exit fullscreen button (default: {None}) - """ - - headerbar.pack_start(btn.new) - headerbar.pack_start(btn.open_recent) - if btn_exit: - headerbar.pack_end(btn_exit) - headerbar.pack_end(btn.menu) - headerbar.pack_end(btn.search) - headerbar.pack_end(btn.save) + headerbar.recents_button.set_popover(recents) + headerbar.recents_button.set_sensitive(True) From f091e5ac1a466a6fa5d1a09ebf68638bf01c3219 Mon Sep 17 00:00:00 2001 From: Manuel Genoves Date: Thu, 14 Nov 2019 12:45:54 +0100 Subject: [PATCH 2/2] update gitignore --- .gitignore | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 9300151..8be02eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,8 @@ -build/lib.linux-x86_64-2.7 *.pyc __pycache__/ build/ -_build/ -debian/uberwriter/DEBIAN -debian/uberwriter/opt -debian/uberwriter/usr -flatpak/* -!flatpak/uberwriter.json -!flatpak/de.wolfvollprecht.UberWriter.* -!flatpak/flatpak_texlive.json -!flatpak/texlive_install.sh -!flatpak/python3-enchant.json -!flatpak/python3-packages.json -*.py~ -data/ui/shortcut_handlers -*.ui~ +*.*~ .vscode/ .idea/ -*.glade~ -dist/uberwriter-2.0b0-py3.7.egg builddir/* -dist/ -uberwriter.egg-info -build-aux/flatpak/.flatpak-builder/* \ No newline at end of file +build-aux/* \ No newline at end of file