diff --git a/data/ui/SettingsMenu.ui b/data/ui/SettingsMenu.ui new file mode 100644 index 0000000..a12888a --- /dev/null +++ b/data/ui/SettingsMenu.ui @@ -0,0 +1,43 @@ + + + +
+ + _New + app.new + + + _Open + app.open + + + Open Recent File + app.open_recent + + + Open Examples + app.open_examples + + + _Save + app.save + + + Save _As + app.save_as + + + _Export + app.export + + + Copy as HTML + app.HTML_copy + + + _Quit + app.quit + +
+
+
\ No newline at end of file diff --git a/data/ui/UberwriterWindow.ui b/data/ui/UberwriterWindow.ui index 2447b17..d4d54b7 100644 --- a/data/ui/UberwriterWindow.ui +++ b/data/ui/UberwriterWindow.ui @@ -60,320 +60,6 @@ True False - - - True - False - - - True - False - _File - True - - - True - False - - - _New - True - False - True - False - - - - - - _Open - True - False - True - False - - - - - - True - False - Open Recent File - True - - - - - Open examples - True - False - False - - - True - False - - - True - False - _Quick markdown tutorial - True - - - - - - - - - - True - False - - - - - _Save - True - False - True - False - - - - - - Save _As - True - False - True - False - - - - - - True - False - - - - - Export as HTML - True - False - False - - - - - - Export as PDF - True - False - False - - - - - - Export as ODT - True - False - False - - - - - - True - False - Advanced Export... - True - - - - - - True - False - - - - - True - False - Copy Raw HTML to Clipboard - True - - - - - - True - False - - - - - _Quit - True - False - True - False - - - - - - - - - True - False - _View - True - - - True - False - - - True - False - Focus Mode - - - - - - True - False - Fullscreen - - - - - - False - Sidebar - - - - - True - False - Switch to preview mode - Preview - - - - - - True - False - Open Search and Replace - Search and Replace ... - True - - - - - - False - - - - - False - Use Typewritermode (experimental) - True - True - - - - - False - - - - - True - False - Auto _Spellcheck - True - True - - - - - - - - - - True - False - _Help - True - - - True - False - - - True - False - Contents - - - - - True - False - - - - - True - False - Short Markdown Tutorial - - - - - - True - False - Open Pandoc Online Markdown Help ... - - - - - - True - False - - - - - gtk-about - True - False - True - False - - - - - - - - - 0 - 0 - - True @@ -597,7 +283,7 @@ 0 - 2 + 1 @@ -857,7 +543,7 @@ 0 - 1 + 0 diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index c40d0e3..67edbf4 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -320,7 +320,7 @@ class UberwriterWindow(Window): self.MarkupBuffer.set_multiplier(Pango.units_to_double(mets.get_approximate_char_width()) + 1) - def save_document(self, widget, data=None): + def save_document(self, widget=None, data=None): if self.filename: logger.info("saving") filename = self.filename @@ -376,7 +376,7 @@ class UberwriterWindow(Window): filechooser.destroy() return Gtk.ResponseType.CANCEL - def save_document_as(self, widget, data=None): + def save_document_as(self, widget=None, data=None): filechooser = Gtk.FileChooserDialog( "Save your File", self, @@ -499,7 +499,7 @@ class UberwriterWindow(Window): self.texlive_installed = True self.export("pdf") - def copy_html_to_clipboard(self, widget, date=None): + def copy_html_to_clipboard(self, widget=None, date=None): """Copies only html without headers etc. to Clipboard""" args = ['pandoc', '--from=markdown', '-smart', '-thtml'] @@ -512,7 +512,7 @@ class UberwriterWindow(Window): cb.set_text(output.decode("utf-8"), -1) cb.store() - def open_document(self, widget): + def open_document(self, widget=None): if self.check_change() == Gtk.ResponseType.CANCEL: return @@ -572,7 +572,7 @@ class UberwriterWindow(Window): dialog.destroy() return Gtk.ResponseType.CANCEL - def new_document(self, widget): + def new_document(self, widget=None): if self.check_change() == Gtk.ResponseType.CANCEL: return else: @@ -789,13 +789,13 @@ class UberwriterWindow(Window): def open_pandoc_markdown(self, widget, data=None): webbrowser.open("http://johnmacfarlane.net/pandoc/README.html#pandocs-markdown") - def open_uberwriter_markdown(self, widget, data=None): + def open_uberwriter_markdown(self, widget=None, data=None): self.load_file(helpers.get_media_file('uberwriter_markdown.md')) def open_search_and_replace(self): self.searchreplace.toggle_search() - def open_advanced_export(self, widget, data=None): + def open_advanced_export(self, widget=None, data=None): if self.UberwriterAdvancedExportDialog is not None: advexp = self.UberwriterAdvancedExportDialog() # pylint: disable= @@ -878,7 +878,6 @@ class UberwriterWindow(Window): pass else: self.fullscr_hb_revealer.set_reveal_child(False) - def focus_out(self, widget, data=None): if self.status_bar_visible == False: @@ -943,73 +942,77 @@ class UberwriterWindow(Window): self.set_name('UberwriterWindow') + # Headerbars + self.hb_container = Gtk.Frame(name='titlebar_container') + self.hb_container.set_shadow_type(Gtk.ShadowType.NONE) + self.hb_revealer = Gtk.Revealer(name='titlebar_revealer') + self.hb = Gtk.HeaderBar() + self.hb_revealer.add(self.hb) + self.hb_revealer.props.transition_duration = 1000 + self.hb_revealer.props.transition_type = Gtk.RevealerTransitionType.CROSSFADE + self.hb.props.show_close_button = True + self.hb.get_style_context().add_class("titlebar") + self.hb_container.add(self.hb_revealer) + self.hb_container.show() + self.set_titlebar(self.hb_container) + self.hb_revealer.show() + self.hb_revealer.set_reveal_child(True) + self.hb.show() - self.use_headerbar = True - if self.use_headerbar == True: - self.hb_container = Gtk.Frame(name='titlebar_container') - self.hb_container.set_shadow_type(Gtk.ShadowType.NONE) - self.hb_revealer = Gtk.Revealer(name='titlebar_revealer') - self.hb = Gtk.HeaderBar() - self.hb_revealer.add(self.hb) - self.hb_revealer.props.transition_duration = 1000 - self.hb_revealer.props.transition_type = Gtk.RevealerTransitionType.CROSSFADE - self.hb.props.show_close_button = True - self.hb.get_style_context().add_class("titlebar") - self.hb_container.add(self.hb_revealer) - self.hb_container.show() - self.set_titlebar(self.hb_container) - self.hb_revealer.show() - self.hb_revealer.set_reveal_child(True) - self.hb.show() + #TODO: this button/model names are HORRIBLE. Find better ones - bbtn = Gtk.MenuButton() - btn_settings = Gtk.MenuButton() - btn_settings.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON) - btn_settings.props.use_popover = True - self.builder_window_menu = get_builder('WindowMenu') - self.model = self.builder_window_menu.get_object("WindowMenu") - btn_settings.set_menu_model(self.model) + btn_settings = Gtk.MenuButton() + btn_settings.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON) + btn_settings.props.use_popover = True + self.builder_window_menu = get_builder('WindowMenu') + self.model = self.builder_window_menu.get_object("WindowMenu") + btn_settings.set_menu_model(self.model) - #self.builder.get_object("menu1").detach() - bbtn.set_popup(self.builder.get_object("menu1")) - self.hb.pack_start(bbtn) - self.hb.pack_end(btn_settings) - self.hb.show_all() + bbtn = Gtk.MenuButton() + bbtn.props.use_popover = True + self.builder_settings_menu = get_builder('SettingsMenu') + self.model2 = self.builder_settings_menu.get_object("SettingsMenu") + bbtn.set_menu_model(self.model2) - #same for fullscreen headerbar + self.hb.pack_start(bbtn) + self.hb.pack_end(btn_settings) + self.hb.show_all() - self.fullscr_events = self.builder.get_object("FullscreenEventbox") - self.fullscr_hb_revealer = self.builder.get_object("FullscreenHbPlaceholder") - self.fullscr_hb = self.builder.get_object("FullscreenHeaderbar") - self.fullscr_hb.get_style_context().add_class("titlebar") - self.fullscr_hb_revealer.show() - self.fullscr_hb_revealer.set_reveal_child(False) - self.fullscr_hb.show() - self.fullscr_events.hide() + #same for fullscreen headerbar - self.bbtn_fs = Gtk.MenuButton() - self.btn_settings_fs = Gtk.MenuButton() - self.btn_settings_fs.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON) - self.btn_settings_fs.props.use_popover = True - self.btn_settings_fs.set_menu_model(self.model) + self.fullscr_events = self.builder.get_object("FullscreenEventbox") + self.fullscr_hb_revealer = self.builder.get_object("FullscreenHbPlaceholder") + self.fullscr_hb = self.builder.get_object("FullscreenHeaderbar") + self.fullscr_hb.get_style_context().add_class("titlebar") + self.fullscr_hb_revealer.show() + self.fullscr_hb_revealer.set_reveal_child(False) + self.fullscr_hb.show() + self.fullscr_events.hide() - #self.builder.get_object("menu1").detach() - self.bbtn_fs.set_popup(self.builder.get_object("menu1")) + self.btn_settings_fs = Gtk.MenuButton() + self.btn_settings_fs.props.image = Gtk.Image.new_from_icon_name('emblem-system-symbolic', Gtk.IconSize.BUTTON) + self.btn_settings_fs.props.use_popover = True + self.btn_settings_fs.set_menu_model(self.model) - btn_exit_fs = Gtk.Button() - btn_exit_fs.props.image = Gtk.Image.new_from_icon_name('view-restore-symbolic', Gtk.IconSize.BUTTON) - btn_exit_fs.set_action_name("app.fullscreen") + self.bbtn_fs = Gtk.MenuButton() + self.bbtn_fs.props.use_popover = True + self.bbtn_fs.set_menu_model(self.model2) - self.fullscr_hb.pack_start(self.bbtn_fs) - self.fullscr_hb.pack_end(btn_exit_fs) - self.fullscr_hb.pack_end(self.btn_settings_fs) - self.fullscr_hb.show_all() - # 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.fullscr_events.connect('enter_notify_event', self.show_fs_hb) - self.fullscr_events.connect('leave_notify_event', self.hide_fs_hb) - self.btn_settings_fs.connect('focus_out_event', self.hide_fs_hb) + + btn_exit_fs = Gtk.Button() + btn_exit_fs.props.image = Gtk.Image.new_from_icon_name('view-restore-symbolic', Gtk.IconSize.BUTTON) + btn_exit_fs.set_action_name("app.fullscreen") + + self.fullscr_hb.pack_start(self.bbtn_fs) + self.fullscr_hb.pack_end(btn_exit_fs) + self.fullscr_hb.pack_end(self.btn_settings_fs) + self.fullscr_hb.show_all() + # 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.fullscr_events.connect('enter_notify_event', self.show_fs_hb) + self.fullscr_events.connect('leave_notify_event', self.hide_fs_hb) + self.btn_settings_fs.connect('focus_out_event', self.hide_fs_hb) self.title_end = " – UberWriter" self.set_headerbar_title("New File" + self.title_end) @@ -1018,10 +1021,7 @@ class UberwriterWindow(Window): self.word_count = builder.get_object('word_count') self.char_count = builder.get_object('char_count') - self.menubar = builder.get_object('menubar1') - self.menubar.hide() - # Wire up buttons self.fullscreen_button = builder.get_object('fullscreen_toggle') self.focusmode_button = builder.get_object('focus_toggle') @@ -1118,7 +1118,8 @@ class UberwriterWindow(Window): # Init file name with None self.set_filename() - self.generate_recent_files_menu(self.builder.get_object('recent')) + #TODO: set recents menu + # self.generate_recent_files_menu(self.builder.get_object('recent')) self.style_provider = Gtk.CssProvider() self.style_provider.load_from_path(helpers.get_media_path('style.css')) @@ -1243,8 +1244,8 @@ class UberwriterWindow(Window): Gtk.main_quit() def set_headerbar_title(self, title): - if self.use_headerbar: - self.hb.props.title = title + self.hb.props.title = title + self.fullscr_hb.props.title = title self.set_title(title) def set_filename(self, filename=None): diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index 904229b..7e8e132 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -179,6 +179,40 @@ class Application(Gtk.Application): action.connect("change-state", self.on_spellcheck) self.add_action(action) + '''Left Menu Actions''' + + action = Gio.SimpleAction.new("new", None) + action.connect("activate", self.on_new) + self.add_action(action) + + action = Gio.SimpleAction.new("open", None) + action.connect("activate", self.on_open) + self.add_action(action) + + action = Gio.SimpleAction.new("open_recent", None) + action.connect("activate", self.on_open_recent) + self.add_action(action) + + action = Gio.SimpleAction.new("open_examples", None) + action.connect("activate", self.on_example) + self.add_action(action) + + action = Gio.SimpleAction.new("save", None) + action.connect("activate", self.on_save) + self.add_action(action) + + action = Gio.SimpleAction.new("save_as", None) + action.connect("activate", self.on_save_as) + self.add_action(action) + + action = Gio.SimpleAction.new("export", None) + action.connect("activate", self.on_export) + self.add_action(action) + + action = Gio.SimpleAction.new("HTML_copy", None) + action.connect("activate", self.on_html_copy) + self.add_action(action) + builder = get_builder('App_menu') self.set_app_menu(builder.get_object("app-menu")) @@ -284,7 +318,31 @@ class Application(Gtk.Application): def on_spellcheck(self, action, value): action.set_state(value) self.window.toggle_spellcheck(value) - + + def on_new(self, action, value): + self.window.new_document() + + def on_open(self, action, value): + self.window.open_document() + + def on_open_recent(self, action, value): + pass + + def on_example(self, action, value): + self.window.open_uberwriter_markdown() + + def on_save(self, action, value): + self.window.save_document() + + def on_save_as(self, action, value): + self.window.save_document_as() + + def on_export(self, action, value): + self.window.open_advanced_export() + + def on_html_copy(self, action, value): + self.window.copy_html_to_clipboard() + def on_quit(self, action, param): self.quit()