Window refactoring

Signed-off-by: somas95 <manuel.genoves@gmail.com>
gh-pages
somas95 2018-03-21 00:20:49 +01:00
parent 325f5bb211
commit 7ed0ba1097
7 changed files with 969 additions and 859 deletions

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="app-menu">
<section>
<attribute name="label" translatable="yes">Change label</attribute>
<item>
<!--
<attribute name="action">win.change_label</attribute>
<attribute name="target">String 1</attribute>
-->
<attribute name="label" translatable="yes">String 1</attribute>
</item>
<item>
<attribute name="label" translatable="yes">String 2</attribute>
</item>
<item>
<attribute name="label" translatable="yes">String 3</attribute>
</item>
</section>
<section>
<item>
<attribute name="action">win.maximize</attribute>
<attribute name="label" translatable="yes">Maximize</attribute>
</item>
</section>
<section>
<item>
<attribute name="action">app.about</attribute>
<attribute name="label" translatable="yes">_About</attribute>
</item>
<item>
<attribute name="action">app.quit</attribute>
<attribute name="label" translatable="yes">_Quit</attribute>
<attribute name="accel">&lt;Primary&gt;q</attribute>
</item>
</section>
</menu>
</interface>

View File

@ -2,7 +2,6 @@
<!-- Generated with glade 3.20.4 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<requires lib="uberwriter_window" version="3.26"/>
<!-- interface-local-resource-path ../media -->
<object class="GtkAction" id="action1"/>
<object class="GtkAdjustment" id="adjustment1">
@ -26,40 +25,6 @@
<property name="can_focus">False</property>
<property name="icon_name">format-text-capitalize</property>
</object>
<object class="GtkImage" id="ortografia1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-spell-check</property>
</object>
<object class="GtkRecentFilter" id="recentfilter1">
<mime-types>
<mime-type>text/plain</mime-type>
<mime-type>text/x-markdown</mime-type>
</mime-types>
</object>
<object class="GtkImage" id="reemplaza">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Open Replace</property>
<property name="stock">gtk-find-and-replace</property>
</object>
<object class="GtkImage" id="reemplaza1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-find-and-replace</property>
</object>
<object class="GtkImage" id="regex1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Activate Regex</property>
<property name="icon_name">find-location-symbolic</property>
</object>
<object class="UberwriterWindow" id="uberwriter_window">
<property name="can_focus">True</property>
<property name="default_width">800</property>
<property name="default_height">500</property>
<property name="icon">../media/uberwriter.svg</property>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
@ -71,18 +36,14 @@
<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">_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"/>
<accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@ -90,10 +51,8 @@
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_open">
<property name="label">_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"/>
<accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@ -103,13 +62,10 @@
<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">Open examples</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
@ -121,8 +77,6 @@
<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>
@ -138,10 +92,8 @@
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_save">
<property name="label">_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"/>
<accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@ -149,10 +101,8 @@
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_save_as">
<property name="label">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"/>
<accelerator key="s" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
@ -166,7 +116,6 @@
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_export_html">
<property name="label">Export as HTML</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
@ -175,7 +124,6 @@
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_export_pdf">
<property name="label">Export as PDF</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
@ -184,7 +132,6 @@
</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>
@ -195,8 +142,6 @@
<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>
@ -210,8 +155,6 @@
<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>
@ -223,10 +166,8 @@
</child>
<child>
<object class="GtkImageMenuItem" id="mnu_close">
<property name="label">_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>
<accelerator key="w" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
@ -239,8 +180,6 @@
<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>
@ -249,7 +188,6 @@
<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"/>
<accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
@ -258,7 +196,6 @@
<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"/>
<accelerator key="F11" signal="activate"/>
</object>
@ -266,7 +203,6 @@
<child>
<object class="GtkCheckMenuItem" id="mnu_sidebar">
<property name="can_focus">False</property>
<property name="label" translatable="yes">Sidebar</property>
<accelerator key="F12" signal="activate"/>
</object>
</child>
@ -275,7 +211,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Light text on a dark background</property>
<property name="label" translatable="yes">Dark Mode</property>
<signal name="activate" handler="dark_mode_toggled" swapped="no"/>
</object>
</child>
@ -284,7 +219,6 @@
<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"/>
<accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
@ -294,8 +228,6 @@
<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"/>
<accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
@ -308,7 +240,6 @@
<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>
<accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@ -322,8 +253,6 @@
<child>
<object class="GtkCheckMenuItem" id="disable_spellcheck">
<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="activate" handler="toggle_spellcheck" swapped="no"/>
<accelerator key="F7" signal="activate"/>
@ -337,8 +266,6 @@
<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>
@ -347,7 +274,6 @@
<object class="GtkMenuItem" id="mnu_contents">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Contents</property>
<accelerator key="F1" signal="activate"/>
</object>
</child>
@ -361,7 +287,6 @@
<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>
@ -369,7 +294,6 @@
<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>
@ -377,8 +301,6 @@
<object class="GtkMenuItem" id="get_help_online">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Get Help Online...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_launchpad_help" swapped="no"/>
</object>
</child>
@ -386,8 +308,6 @@
<object class="GtkMenuItem" id="translate_launchpad">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Translate This Application...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="open_launchpad_translation" swapped="no"/>
</object>
</child>
@ -399,10 +319,8 @@
</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>
@ -428,6 +346,15 @@
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="resize">False</property>
@ -578,6 +505,8 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_start">10</property>
<property name="margin_end">10</property>
<property name="orientation">vertical</property>
@ -604,6 +533,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="margin_right">11</property>
<property name="margin_end">11</property>
<property name="label">0</property>
<property name="width_chars">6</property>
@ -895,9 +825,32 @@
</packing>
</child>
</object>
</child>
<child type="titlebar">
<placeholder/>
</child>
<object class="GtkImage" id="ortografia1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-spell-check</property>
</object>
<object class="GtkRecentFilter" id="recentfilter1">
<mime-types>
<mime-type>text/plain</mime-type>
<mime-type>text/x-markdown</mime-type>
</mime-types>
</object>
<object class="GtkImage" id="reemplaza">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Open Replace</property>
<property name="stock">gtk-find-and-replace</property>
</object>
<object class="GtkImage" id="reemplaza1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-find-and-replace</property>
</object>
<object class="GtkImage" id="regex1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Activate Regex</property>
<property name="icon_name">find-location-symbolic</property>
</object>
</interface>

View File

@ -2,7 +2,7 @@
depends="gtk+" version="3.26">
<glade-widget-classes>
<glade-widget-class title="Uberwriter Window" name="UberwriterWindow"
generic-name="UberwriterWindow" parent="GtkWindow"
generic-name="UberwriterWindow" parent="GtkApplicationWindow"
icon-name="widget-gtk-window"/>
</glade-widget-classes>
</glade-catalog>

View File

@ -58,7 +58,8 @@ try:
except:
APT_ENABLED = False
from uberwriter_lib import Window
#from uberwriter_lib import Window
from uberwriter_lib import AppWindow
from uberwriter_lib import helpers
from .AboutUberwriterDialog import AboutUberwriterDialog
from .UberwriterAdvancedExportDialog import UberwriterAdvancedExportDialog
@ -70,9 +71,11 @@ from .UberwriterAdvancedExportDialog import UberwriterAdvancedExportDialog
CONFIG_PATH = os.path.expanduser("~/.config/uberwriter/")
# See texteditor_lib.Window.py for more details about how this class works
class UberwriterWindow(Window):
class UberwriterWindow(AppWindow.Application):
__gtype_name__ = "UberwriterWindow"
#__gtype_name__ = "UberwriterWindow"
print("hahah")
__gsignals__ = {
'save-file': (GObject.SIGNAL_ACTION, None, ()),

View File

@ -58,5 +58,5 @@ def main():
window = UberwriterWindow.UberwriterWindow()
if options.experimental_features:
window.use_experimental_features(True)
window.show()
Gtk.main()
window.run()
#Gtk.main()

View File

@ -0,0 +1,106 @@
import sys
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GLib, Gio, Gtk
from . helpers import get_builder, show_uri, get_help_uri
class UberwriterWindow(Gtk.ApplicationWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# This will be in the windows group and have the "win" prefix
max_action = Gio.SimpleAction.new_stateful("maximize", None,
GLib.Variant.new_boolean(False))
max_action.connect("change-state", self.on_maximize_toggle)
self.add_action(max_action)
# Keep it in sync with the actual state
self.connect("notify::is-maximized",
lambda obj, pspec: max_action.set_state(
GLib.Variant.new_boolean(obj.props.is_maximized)))
self.default_width = 800
self.defaul_height = 500
self.set_icon_from_file("data/media/uberwriter.svg")
builder = get_builder('UberwriterWindow')
new_object = builder.get_object("grid1")
self.builder = builder
self.ui = builder.get_ui(self, True)
self.PreferencesDialog = None # class
self.preferences_dialog = None # instance
self.AboutDialog = None # class
self.contents = new_object
self.add(self.contents)
self.finish_initializing(self.builder)
def on_maximize_toggle(self, action, value):
action.set_state(value)
if value.get_boolean():
self.maximize()
else:
self.unmaximize()
class Application(Gtk.Application):
def __init__(self, *args, **kwargs):
super().__init__(*args, application_id="de.wolfvollprecht.UberWriter",
flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
**kwargs)
self.window = None
self.add_main_option("test", ord("t"), GLib.OptionFlags.NONE,
GLib.OptionArg.NONE, "Command line test", None)
def do_startup(self):
Gtk.Application.do_startup(self)
# ~ action = Gio.SimpleAction.new("about", None)
# ~ action.connect("activate", self.on_about)
# ~ self.add_action(action)
action = Gio.SimpleAction.new("quit", None)
action.connect("activate", self.on_quit)
self.add_action(action)
builder = get_builder('App_menu')
self.set_app_menu(builder.get_object("app-menu"))
def do_activate(self):
# We only allow a single window and raise any existing ones
if not self.window:
# Windows are associated with the application
# when the last one is closed the application shuts down
self.window = UberwriterWindow(application=self, title="UberWriter")
self.window.present()
def do_command_line(self, command_line):
options = command_line.get_options_dict()
if options.contains("test"):
# This is printed on the main instance
print("Test argument recieved")
self.activate()
return 0
# TODO
# ~ def on_about(self, action, param):
# ~ about_dialog = Gtk.AboutDialog(transient_for=self.window, modal=True)
# ~ about_dialog.present()
def on_quit(self, action, param):
self.quit()
if __name__ == "__main__":
app = Application()
app.run(sys.argv)

View File

@ -24,7 +24,7 @@ from . helpers import get_builder, show_uri, get_help_uri
# This class is meant to be subclassed by UberwriterWindow. It provides
# common functions and some boilerplate.
class Window(Gtk.ApplicationWindow):
class Window(Gtk.Application):
__gtype_name__ = "Window"
# To construct a new instance of this method, the following notable
@ -43,10 +43,18 @@ class Window(Gtk.ApplicationWindow):
Returns a fully instantiated BaseUberwriterWindow object.
"""
App = Gtk.Application()
window = Gtk.ApplicationWindow()
builder = get_builder('UberwriterWindow')
new_object = builder.get_object("uberwriter_window")
new_object.finish_initializing(builder)
return new_object
new_object = builder.get_object("grid1")
window.add(new_object)
App.window = window
App.window.present()
#window.finish_initializing(builder)
return App
def finish_initializing(self, builder):
"""Called while initializing this instance in __new__
@ -78,6 +86,8 @@ class Window(Gtk.ApplicationWindow):
except ImportError:
pass
def on_mnu_contents_activate(self, widget, data=None):
show_uri(self, "ghelp:%s" % get_help_uri())