Added startup window as basic ui

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
TheJackiMonster 2022-09-15 20:38:43 +02:00
parent a6b6d776ce
commit 102013d12d
No known key found for this signature in database
GPG key ID: D850A5F772E880F9
6 changed files with 616 additions and 1 deletions

View file

@ -6,3 +6,4 @@ from manuskript.ui.util import pixbufFromColor
from manuskript.ui.aboutDialog import AboutDialog from manuskript.ui.aboutDialog import AboutDialog
from manuskript.ui.mainWindow import MainWindow from manuskript.ui.mainWindow import MainWindow
from manuskript.ui.settingsWindow import SettingsWindow from manuskript.ui.settingsWindow import SettingsWindow
from manuskript.ui.startupWindow import StartupWindow

View file

@ -37,6 +37,9 @@ class AbstractDialog:
def _destroyWindow(self, window: Gtk.Widget): def _destroyWindow(self, window: Gtk.Widget):
self.window = None self.window = None
if not self.mainWindow.isVisible():
self.mainWindow.close()
def show(self): def show(self):
if self.window is None: if self.window is None:
self.__initWindow() self.__initWindow()
@ -48,3 +51,9 @@ class AbstractDialog:
return return
self.window.hide() self.window.hide()
def isVisible(self):
if self.window is None:
return False
return self.window.get_property("visible")

View file

@ -16,6 +16,7 @@ from manuskript.ui.views import *
from manuskript.ui.tools import * from manuskript.ui.tools import *
from manuskript.ui.aboutDialog import AboutDialog from manuskript.ui.aboutDialog import AboutDialog
from manuskript.ui.settingsWindow import SettingsWindow from manuskript.ui.settingsWindow import SettingsWindow
from manuskript.ui.startupWindow import StartupWindow
class MainWindow: class MainWindow:
@ -78,10 +79,14 @@ class MainWindow:
self.outlineView = MainWindow.packViewIntoSlot(builder, "outline_slot", OutlineView) self.outlineView = MainWindow.packViewIntoSlot(builder, "outline_slot", OutlineView)
self.editorView = MainWindow.packViewIntoSlot(builder, "editor_slot", EditorView) self.editorView = MainWindow.packViewIntoSlot(builder, "editor_slot", EditorView)
self.startupWindow = StartupWindow(self)
self.aboutDialog = AboutDialog(self) self.aboutDialog = AboutDialog(self)
self.frequencyWindow = FrequencyWindow(self) self.frequencyWindow = FrequencyWindow(self)
self.settingsWindow = SettingsWindow(self) self.settingsWindow = SettingsWindow(self)
MainWindow.bindMenuItem(builder, "open_menu_item", self.openProject)
MainWindow.bindMenuItem(builder, "save_menu_item", self.saveProject)
MainWindow.bindMenuItem(builder, "close_menu_item", self.closeProject)
MainWindow.bindMenuItem(builder, "settings_menu_item", self.openSettings) MainWindow.bindMenuItem(builder, "settings_menu_item", self.openSettings)
MainWindow.bindMenuItem(builder, "frequency_menu_item", self.openFrequency) MainWindow.bindMenuItem(builder, "frequency_menu_item", self.openFrequency)
MainWindow.bindMenuItem(builder, "about_menu_item", self.openAbout) MainWindow.bindMenuItem(builder, "about_menu_item", self.openAbout)
@ -89,6 +94,16 @@ class MainWindow:
def getProject(self): def getProject(self):
return self.project return self.project
def openProject(self, menuItem: Gtk.MenuItem):
pass
def saveProject(self, menuItem: Gtk.MenuItem):
self.getProject().save()
def closeProject(self, menuItem: Gtk.MenuItem):
self.hide()
self.startupWindow.show()
def getSettings(self): def getSettings(self):
return self.getProject().settings return self.getProject().settings
@ -107,9 +122,15 @@ class MainWindow:
def hide(self): def hide(self):
self.window.hide() self.window.hide()
def isVisible(self):
return self.window.get_property("visible")
def run(self): def run(self):
self.show() self.show()
Gtk.main() Gtk.main()
def close(self):
self.window.destroy()
def _notifyProperty(self, window, property): def _notifyProperty(self, window, property):
print(property.name) print(property.name)

View file

@ -0,0 +1,26 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GObject, Gtk, Handy
from manuskript.ui.abstractDialog import AbstractDialog
class StartupWindow(AbstractDialog):
def __init__(self, mainWindow):
AbstractDialog.__init__(self, mainWindow, "ui/startup.glade", "startup_window")
self.headerBar = None
self.templateLeaflet = None
def initWindow(self, builder, window):
self.headerBar = builder.get_object("header_bar")
self.templateLeaflet = builder.get_object("template_leaflet")
self.templateLeaflet.bind_property("folded", self.headerBar, "show-close-button",
GObject.BindingFlags.SYNC_CREATE |
GObject.BindingFlags.INVERT_BOOLEAN)

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 <!-- Generated with glade 3.40.0
Copyright (C) 2015-2021 Olivier Keshavjee et al. Copyright (C) 2015-2021 Olivier Keshavjee et al.
@ -82,6 +82,14 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">_Recent</property> <property name="label" translatable="yes">_Recent</property>
<property name="use-underline">True</property> <property name="use-underline">True</property>
<child type="submenu">
<object class="GtkRecentChooserMenu" id="recent_chooser_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="limit">10</property>
<property name="sort-type">mru</property>
</object>
</child>
</object> </object>
</child> </child>
<child> <child>

550
ui/startup.glade Normal file
View file

@ -0,0 +1,550 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<requires lib="libhandy" version="0.0"/>
<object class="GtkRecentChooserMenu" id="recent_chooser_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="limit">10</property>
<property name="sort-type">mru</property>
</object>
<object class="GtkListStore" id="template_store">
<columns>
<!-- column-name ID -->
<column type="gint"/>
<!-- column-name name -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="demo_store">
<property name="child-model">template_store</property>
</object>
<object class="GtkTreeModelFilter" id="fiction_store">
<property name="child-model">template_store</property>
</object>
<object class="GtkTreeModelFilter" id="nonfiction_store">
<property name="child-model">template_store</property>
</object>
<object class="HdyApplicationWindow" id="startup_window">
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="HdyTitleBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="HdyHeaderBar" id="header_bar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Manuskript</property>
<property name="show-close-button">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkMenuBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem">
<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">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="open_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="recent_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="quit_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem">
<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">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkCheckMenuItem" id="show_help_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="about_menu_item">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="HdyLeaflet" id="template_leaflet">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="margin-top">4</property>
<property name="margin-bottom">2</property>
<property name="can-swipe-back">True</property>
<property name="can-swipe-forward">True</property>
<child>
<object class="GtkScrolledWindow">
<property name="width-request">250</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="border-width">2</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Fiction</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">fiction_store</property>
<property name="headers-visible">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="fiction_selection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Non-fiction</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">nonfiction_store</property>
<property name="headers-visible">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="nonfiction_selection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Demo projects</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">demo_store</property>
<property name="headers-visible">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="demo_selection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="width-request">300</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="border-width">2</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">4</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Total: ? words (~? pages)</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Add level</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Add word count</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="margin-top">2</property>
<property name="margin-bottom">4</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">Next time, automatically open last project</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="border-width">4</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="spacing">9</property>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">6</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-open-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Open...</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="focus-on-click">False</property>
<property name="receives-default">True</property>
<property name="popup">recent_chooser_menu</property>
<property name="use-popover">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">6</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-open-recent-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Recent</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">6</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-new-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Create</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</interface>