mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-29 17:19:50 +12:00
0d2066d207
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
149 lines
4.5 KiB
Python
149 lines
4.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import gi
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
gi.require_version("Handy", "1")
|
|
|
|
from gi.repository import GObject, Gtk, Handy
|
|
|
|
Handy.init()
|
|
|
|
from manuskript.data import Project
|
|
from manuskript.ui.views import *
|
|
|
|
from manuskript.ui.tools import *
|
|
from manuskript.ui.aboutDialog import AboutDialog
|
|
from manuskript.ui.settingsWindow import SettingsWindow
|
|
from manuskript.ui.startupWindow import StartupWindow
|
|
from manuskript.ui.util import bindMenuItem
|
|
|
|
|
|
class MainWindow:
|
|
|
|
@classmethod
|
|
def packViewIntoSlot(cls, builder, id, view_cls, data=None):
|
|
slot = builder.get_object(id)
|
|
|
|
if slot is None:
|
|
return None
|
|
|
|
try:
|
|
if data is None:
|
|
view = view_cls()
|
|
else:
|
|
view = view_cls(data)
|
|
except Exception:
|
|
return None
|
|
|
|
if view.widget is None:
|
|
return None
|
|
|
|
slot.pack_start(view.widget, True, True, 0)
|
|
return view
|
|
|
|
def __init__(self, path):
|
|
self.project = Project(path)
|
|
self.project.load()
|
|
|
|
builder = Gtk.Builder()
|
|
builder.add_from_file("ui/main.glade")
|
|
|
|
self.window = builder.get_object("main_window")
|
|
self.window.connect("destroy", Gtk.main_quit)
|
|
|
|
self.headerBar = builder.get_object("header_bar")
|
|
self.leaflet = builder.get_object("leaflet")
|
|
self.viewSwitcherBar = builder.get_object("view_switcher_bar")
|
|
|
|
self.headerBar.set_subtitle(self.project.info.title)
|
|
|
|
self.leaflet.bind_property("folded", self.viewSwitcherBar, "reveal", GObject.BindingFlags.SYNC_CREATE)
|
|
self.leaflet.bind_property("folded", self.headerBar, "show-close-button", GObject.BindingFlags.SYNC_CREATE |
|
|
GObject.BindingFlags.INVERT_BOOLEAN)
|
|
|
|
self.generalView = MainWindow.packViewIntoSlot(builder, "general_slot", GeneralView, self.project.info)
|
|
self.summaryView = MainWindow.packViewIntoSlot(builder, "summary_slot", SummaryView, self.project.summary)
|
|
self.charactersView = MainWindow.packViewIntoSlot(builder, "characters_slot", CharactersView, self.project.characters)
|
|
self.plotView = MainWindow.packViewIntoSlot(builder, "plot_slot", PlotView)
|
|
self.worldView = MainWindow.packViewIntoSlot(builder, "world_slot", WorldView)
|
|
self.outlineView = MainWindow.packViewIntoSlot(builder, "outline_slot", OutlineView)
|
|
self.editorView = MainWindow.packViewIntoSlot(builder, "editor_slot", EditorView)
|
|
|
|
self.startupWindow = StartupWindow(self)
|
|
self.aboutDialog = AboutDialog(self)
|
|
self.frequencyWindow = FrequencyWindow(self)
|
|
self.settingsWindow = SettingsWindow(self)
|
|
|
|
self.windows = [
|
|
self.startupWindow,
|
|
self.aboutDialog,
|
|
self.frequencyWindow,
|
|
self.settingsWindow
|
|
]
|
|
|
|
bindMenuItem(builder, "open_menu_item", self.openAction)
|
|
bindMenuItem(builder, "save_menu_item", self.saveAction)
|
|
bindMenuItem(builder, "close_menu_item", self.closeAction)
|
|
bindMenuItem(builder, "quit_menu_item", self.quitAction)
|
|
|
|
bindMenuItem(builder, "settings_menu_item", self.settingsAction)
|
|
bindMenuItem(builder, "frequency_menu_item", self.frequencyAction)
|
|
bindMenuItem(builder, "about_menu_item", self.aboutAction)
|
|
|
|
def getProject(self):
|
|
return self.project
|
|
|
|
def openAction(self, menuItem: Gtk.MenuItem):
|
|
pass
|
|
|
|
def saveAction(self, menuItem: Gtk.MenuItem):
|
|
self.getProject().save()
|
|
|
|
def closeAction(self, menuItem: Gtk.MenuItem):
|
|
self.hide()
|
|
self.startupWindow.show()
|
|
|
|
def quitAction(self, menuItem: Gtk.MenuItem):
|
|
for window in self.windows:
|
|
window.hide()
|
|
|
|
self.exit()
|
|
|
|
def getSettings(self):
|
|
return self.getProject().settings
|
|
|
|
def settingsAction(self, menuItem: Gtk.MenuItem):
|
|
self.settingsWindow.show()
|
|
|
|
def frequencyAction(self, menuItem: Gtk.MenuItem):
|
|
self.frequencyWindow.show()
|
|
|
|
def aboutAction(self, menuItem: Gtk.MenuItem):
|
|
self.aboutDialog.show()
|
|
|
|
def show(self):
|
|
self.window.show_all()
|
|
|
|
def hide(self):
|
|
self.window.hide()
|
|
|
|
def isVisible(self):
|
|
return self.window.get_property("visible")
|
|
|
|
def run(self):
|
|
self.show()
|
|
Gtk.main()
|
|
|
|
def exit(self):
|
|
for window in self.windows:
|
|
if window.isVisible():
|
|
self.hide()
|
|
return
|
|
|
|
self.window.destroy()
|
|
|
|
def _notifyProperty(self, window, property):
|
|
print(property.name)
|