left menu to GMenuModel

webkit2png
somas95 2018-06-28 02:03:48 +02:00
parent 9d435b5714
commit 3ae75a4b73
4 changed files with 177 additions and 389 deletions

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="SettingsMenu">
<section>
<item>
<attribute name="label" translatable="yes">_New</attribute>
<attribute name="action">app.new</attribute>
</item>
<item>
<attribute name="label" translatable="yes">_Open</attribute>
<attribute name="action">app.open</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Open Recent File</attribute>
<attribute name="action">app.open_recent</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Open Examples</attribute>
<attribute name="action">app.open_examples</attribute>
</item>
<item>
<attribute name="label" translatable="yes">_Save</attribute>
<attribute name="action">app.save</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Save _As</attribute>
<attribute name="action">app.save_as</attribute>
</item>
<item>
<attribute name="label" translatable="yes">_Export</attribute>
<attribute name="action">app.export</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Copy as HTML</attribute>
<attribute name="action">app.HTML_copy</attribute>
</item>
<item>
<attribute name="label" translatable="yes">_Quit</attribute>
<attribute name="action">app.quit</attribute>
</item>
</section>
</menu>
</interface>

View File

@ -60,320 +60,6 @@
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="mnu_file">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="mnu_new">
<property name="label" translatable="yes">_New</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="new_document" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_open">
<property name="label" translatable="yes">_Open</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="open_document" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="recent">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Open Recent File</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_examples">
<property name="label" translatable="yes">Open examples</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<child type="submenu">
<object class="GtkMenu" id="menu1_1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="mnu_tutorial">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Quick markdown tutorial</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_uberwriter_markdown" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem3">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_save">
<property name="label" translatable="yes">_Save</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="save_document" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_save_as">
<property name="label" translatable="yes">Save _As</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="save_document_as" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_export_html">
<property name="label" translatable="yes">Export as HTML</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="export_as_html" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_export_pdf">
<property name="label" translatable="yes">Export as PDF</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="export_as_pdf" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_export_odt">
<property name="label" translatable="yes">Export as ODT</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="export_as_odt" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="advanced_export">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Advanced Export...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_advanced_export" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="seperatoritem10">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="copy-html-to-clipboard">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Copy Raw HTML to Clipboard</property>
<property name="use_underline">True</property>
<signal name="activate" handler="copy_html_to_clipboard" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem5">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_close">
<property name="label" translatable="yes">_Quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="mnu_view">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_View</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkCheckMenuItem" id="mnu_focusmode">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Focus Mode</property>
<signal name="toggled" handler="set_focusmode" swapped="no"/>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="mnu_fullscreen">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Fullscreen</property>
<signal name="toggled" handler="toggle_fullscreen" swapped="no"/>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="mnu_sidebar">
<property name="can_focus">False</property>
<property name="label" translatable="yes">Sidebar</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="mnu_preview">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Switch to preview mode</property>
<property name="label" translatable="yes">Preview</property>
<signal name="toggled" handler="toggle_preview" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="searchreplacemenuitem">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Open Search and Replace</property>
<property name="label" translatable="yes">Search and Replace ...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_search_and_replace" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem6">
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="mnu_toggle_typewriter">
<property name="can_focus">False</property>
<property name="label">Use Typewritermode (experimental)</property>
<property name="active">True</property>
<property name="draw_as_radio">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem4">
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="disable_spellcheck">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Auto _Spellcheck</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<signal name="toggled" handler="toggle_spellcheck" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="mnu_help">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Help</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="helpMenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="mnu_contents">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Contents</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem8">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="mnu_uberwriter_markdown">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Short Markdown Tutorial</property>
<signal name="activate" handler="open_uberwriter_markdown" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="mnu_pandoc_markdown">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Open Pandoc Online Markdown Help ...</property>
<signal name="activate" handler="open_pandoc_markdown" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem9">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_about">
<property name="label">gtk-about</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkPaned" id="main_pained">
<property name="visible">True</property>
@ -597,7 +283,7 @@
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
@ -857,7 +543,7 @@
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>

View File

@ -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):

View File

@ -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()