mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-23 08:40:23 +12:00
Added all the files
deleted extra saved things Deleted backups Delete character_details_template_editor.glade~ Fixed Some things that should have been there.
This commit is contained in:
parent
172a5b6b1c
commit
8f899b1acc
30
manuskript/data/characters_template.py
Normal file
30
manuskript/data/characters_template.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
import os
|
||||
|
||||
#from io.jsonFile import* # I need to figure out how to import this. io is also a package in python
|
||||
from collections import OrderedDict
|
||||
|
||||
|
||||
# So this is a template for charecter details
|
||||
# It is edited by the Charecter Template Editor
|
||||
# Most of the code is taken from charecters.py
|
||||
# I think this should have a custom save that's like a .json file in the main part of the manuskript save
|
||||
|
||||
#Main Class
|
||||
class CharacterDetailTemplate:
|
||||
|
||||
details = {'Age':'','Birthdate':'',
|
||||
'Eye Color':'','Hair Color':'',
|
||||
'Handed':''} # We'll make a default template
|
||||
|
||||
|
||||
|
||||
# TODO saving
|
||||
def save(self):
|
||||
pass
|
||||
|
||||
def load(self):
|
||||
pass
|
||||
|
|
@ -1,9 +1,12 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
# Imports
|
||||
# Python bundled modules
|
||||
import os
|
||||
|
||||
from zipfile import BadZipFile
|
||||
# Manuskript modules
|
||||
from manuskript.data.version import Version, CURRENT_MSK_VERSION
|
||||
from manuskript.data.info import Info
|
||||
from manuskript.data.summary import Summary
|
||||
|
@ -15,6 +18,9 @@ from manuskript.data.plots import Plots
|
|||
from manuskript.data.world import World
|
||||
from manuskript.data.outline import Outline
|
||||
from manuskript.data.revisions import Revisions
|
||||
# This is for the charecter template
|
||||
from manuskript.data.characters_template import CharacterDetailTemplate
|
||||
|
||||
from manuskript.io.mskFile import MskFile
|
||||
|
||||
|
||||
|
@ -34,6 +40,7 @@ class Project:
|
|||
self.world = World(self.file.dir_path)
|
||||
self.outline = Outline(self.file.dir_path, self.plots, self.labels, self.statuses)
|
||||
self.revisions = Revisions(self.file.dir_path)
|
||||
self.character_template = CharacterDetailTemplate()
|
||||
|
||||
def __del__(self):
|
||||
del self.file
|
||||
|
|
|
@ -65,7 +65,7 @@ class MainWindow:
|
|||
|
||||
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.charactersView = MainWindow.packViewIntoSlot(builder, "characters_slot", CharactersView, self.project) # Just project because we need it for characters and the template
|
||||
self.plotView = MainWindow.packViewIntoSlot(builder, "plot_slot", PlotView, self.project.plots)
|
||||
self.worldView = MainWindow.packViewIntoSlot(builder, "world_slot", WorldView, self.project.world)
|
||||
self.outlineView = MainWindow.packViewIntoSlot(builder, "outline_slot", OutlineView, self.project.outline)
|
||||
|
@ -74,12 +74,14 @@ class MainWindow:
|
|||
self.startupWindow = StartupWindow(self)
|
||||
self.aboutDialog = AboutDialog(self)
|
||||
self.frequencyWindow = FrequencyWindow(self)
|
||||
self.character_template_window = CharacterTemplateEditorWindow(self)
|
||||
self.settingsWindow = SettingsWindow(self)
|
||||
|
||||
self.windows = [
|
||||
self.startupWindow,
|
||||
self.aboutDialog,
|
||||
self.frequencyWindow,
|
||||
self.character_template_window,
|
||||
self.settingsWindow
|
||||
]
|
||||
|
||||
|
@ -90,6 +92,7 @@ class MainWindow:
|
|||
|
||||
bindMenuItem(builder, "settings_menu_item", self.settingsAction)
|
||||
bindMenuItem(builder, "frequency_menu_item", self.frequencyAction)
|
||||
bindMenuItem(builder, "character_details_template_editor", self.character_details_template_editor_action)
|
||||
bindMenuItem(builder, "about_menu_item", self.aboutAction)
|
||||
|
||||
def getProject(self):
|
||||
|
@ -119,6 +122,9 @@ class MainWindow:
|
|||
|
||||
def frequencyAction(self, menuItem: Gtk.MenuItem):
|
||||
self.frequencyWindow.show()
|
||||
|
||||
def character_details_template_editor_action(self, menuItem: Gtk.MenuItem):
|
||||
self.character_template_window.show()
|
||||
|
||||
def aboutAction(self, menuItem: Gtk.MenuItem):
|
||||
self.aboutDialog.show()
|
||||
|
|
150
manuskript/ui/tools/Character_Template_Editor.py
Normal file
150
manuskript/ui/tools/Character_Template_Editor.py
Normal file
|
@ -0,0 +1,150 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
# Imports
|
||||
# Gi
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import GObject, Gtk, Handy
|
||||
|
||||
# Manuskript
|
||||
from manuskript.ui.abstractDialog import AbstractDialog
|
||||
from manuskript.util import unique_name_checker
|
||||
|
||||
# I lifted a lot of this code from frequencyWindow
|
||||
# With a bit more stuff from charactersView
|
||||
|
||||
class CharacterTemplateEditorWindow(AbstractDialog):
|
||||
|
||||
def __init__(self, mainWindow):
|
||||
AbstractDialog.__init__(self, mainWindow, "ui/character_details_template_editor.glade", "character_details_template_editor")
|
||||
|
||||
self.headerBar = None
|
||||
self.back = None
|
||||
self.wordLeaflet = None
|
||||
self.analyzeWords = None
|
||||
self.analyzePhrases = None
|
||||
|
||||
def initWindow(self, builder, window):
|
||||
self.headerBar = builder.get_object("header_bar")
|
||||
self.back = builder.get_object("back")
|
||||
|
||||
self.character_leaflet = builder.get_object("character_details_leaflet")
|
||||
|
||||
self.character_leaflet.bind_property("folded", self.back, "visible", GObject.BindingFlags.SYNC_CREATE)
|
||||
self.character_leaflet.bind_property("folded", self.headerBar, "show-close-button", GObject.BindingFlags.SYNC_CREATE |
|
||||
GObject.BindingFlags.INVERT_BOOLEAN)
|
||||
|
||||
|
||||
self.back.connect("clicked", self._backClicked)
|
||||
|
||||
#Liking Stuff stole from charactersView
|
||||
self.detailsStore = builder.get_object("details_store")
|
||||
self.detailsSelection = builder.get_object("details_selection")
|
||||
self.addDetailsButton = builder.get_object("add_details")
|
||||
self.removeDetailsButton = builder.get_object("remove_details")
|
||||
self.append_details_template_button = builder.get_object("appened_details_template")
|
||||
self.detailsNameRenderer = builder.get_object("details_name")
|
||||
self.detailsValueRenderer = builder.get_object("details_value")
|
||||
|
||||
self.addDetailsButton.connect("clicked", self.addDetailsClicked)
|
||||
self.removeDetailsButton.connect("clicked", self.removeDetailsClicked)
|
||||
|
||||
self.detailsNameRenderer.connect("edited", self.detailsNameEdited)
|
||||
self.detailsValueRenderer.connect("edited", self.detailsValueEdited)
|
||||
|
||||
self.populate_tree()
|
||||
|
||||
|
||||
|
||||
def _backClicked(self, button: Gtk.Button):
|
||||
if self.wordLeaflet.get_visible_child_name() == "wordlist_view":
|
||||
self.wordLeaflet.set_visible_child_name("wordfilter_view")
|
||||
else:
|
||||
self.hide()
|
||||
|
||||
# So this adds any previously added parts to the template
|
||||
def populate_tree(self):
|
||||
for name, value in self.mainWindow.project.character_template.details.items():
|
||||
tree_iter = self.detailsStore.append()
|
||||
|
||||
if tree_iter is None:
|
||||
return
|
||||
|
||||
|
||||
self.detailsStore.set_value(tree_iter, 0, name)
|
||||
self.detailsStore.set_value(tree_iter, 1, value)
|
||||
|
||||
# Functions stole From charactersView
|
||||
def addDetailsClicked(self, button: Gtk.Button):
|
||||
|
||||
tree_iter = self.detailsStore.append()
|
||||
|
||||
if tree_iter is None:
|
||||
return
|
||||
|
||||
name = unique_name_checker.get_unique_name_for_dictionary(self.mainWindow.project.character_template.details, "Description")
|
||||
value = "Value"
|
||||
|
||||
self.detailsStore.set_value(tree_iter, 0, name)
|
||||
self.detailsStore.set_value(tree_iter, 1, value)
|
||||
|
||||
self.mainWindow.project.character_template.details[name] = value
|
||||
|
||||
def removeDetailsClicked(self, button: Gtk.Button):
|
||||
|
||||
model, tree_iter = self.detailsSelection.get_selected()
|
||||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
|
||||
name = model.get_value(tree_iter, 0)
|
||||
model.remove(tree_iter)
|
||||
|
||||
self.mainWindow.project.character_template.details.pop(name)
|
||||
|
||||
def detailsNameEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
|
||||
|
||||
model, tree_iter = self.detailsSelection.get_selected()
|
||||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
text_to_set = unique_name_checker.get_unique_name_for_dictionary(self.mainWindow.project.character_template.details, text)
|
||||
name = model.get_value(tree_iter, 0)
|
||||
model.set_value(tree_iter, 0, text_to_set)
|
||||
# There was an error with this line but it didn't seem to do anything bad.
|
||||
self.mainWindow.project.character_template.details[text_to_set] = self.mainWindow.project.character_template.details.pop(name)
|
||||
|
||||
def detailsValueEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
|
||||
|
||||
model, tree_iter = self.detailsSelection.get_selected()
|
||||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
|
||||
name = model.get_value(tree_iter, 0)
|
||||
model.set_value(tree_iter, 1, text)
|
||||
|
||||
self.mainWindow.project.character_template.details[name] = text
|
||||
|
||||
def nameChanged(self, buffer: Gtk.EntryBuffer):
|
||||
|
||||
text = buffer.get_text()
|
||||
name = invalidString(text)
|
||||
|
||||
self.character.name = name
|
||||
|
||||
character_id = self.character.UID.value
|
||||
|
||||
for row in self.charactersStore:
|
||||
if row[0] == character_id:
|
||||
row[1] = validString(name)
|
||||
break
|
||||
|
||||
def nameDeletedText(self, buffer: Gtk.EntryBuffer, position: int, n_chars: int):
|
||||
self.nameChanged(buffer)
|
||||
|
||||
def nameInsertedText(self, buffer: Gtk.EntryBuffer, position: int, chars: str, n_chars: int):
|
||||
self.nameChanged(buffer)
|
|
@ -2,3 +2,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from manuskript.ui.tools.frequencyWindow import FrequencyWindow
|
||||
from manuskript.ui.tools.Character_Template_Editor import CharacterTemplateEditorWindow
|
|
@ -8,13 +8,14 @@ from gi.repository import Gtk
|
|||
|
||||
from manuskript.data import Characters, Character, Importance, Color
|
||||
from manuskript.ui.util import rgbaFromColor, pixbufFromColor
|
||||
from manuskript.util import validString, invalidString, validInt, invalidInt
|
||||
from manuskript.util import validString, invalidString, validInt, invalidInt, unique_name_checker
|
||||
|
||||
|
||||
class CharactersView:
|
||||
|
||||
def __init__(self, characters: Characters):
|
||||
self.characters = characters
|
||||
def __init__(self,project):
|
||||
self.character_template = project.character_template # The template for detailed info
|
||||
self.characters = project.characters
|
||||
self.character = None
|
||||
|
||||
builder = Gtk.Builder()
|
||||
|
@ -74,13 +75,19 @@ class CharactersView:
|
|||
self.detailsSelection = builder.get_object("details_selection")
|
||||
self.addDetailsButton = builder.get_object("add_details")
|
||||
self.removeDetailsButton = builder.get_object("remove_details")
|
||||
self.append_details_template_button = builder.get_object("appened_details_template")
|
||||
self.detailsNameRenderer = builder.get_object("details_name")
|
||||
self.detailsValueRenderer = builder.get_object("details_value")
|
||||
|
||||
self.addDetailsButton.connect("clicked", self.addDetailsClicked)
|
||||
self.removeDetailsButton.connect("clicked", self.removeDetailsClicked)
|
||||
# This is to append the template
|
||||
self.append_details_template_button.connect("clicked", self.append_template_clicked)
|
||||
|
||||
self.detailsNameRenderer.connect("edited", self.detailsNameEdited)
|
||||
self.detailsValueRenderer.connect("edited", self.detailsValueEdited)
|
||||
|
||||
|
||||
|
||||
self.nameBuffer = builder.get_object("name")
|
||||
self.motivationBuffer = builder.get_object("motivation")
|
||||
|
@ -105,6 +112,7 @@ class CharactersView:
|
|||
self.notesBuffer.connect("changed", self.notesChanged)
|
||||
|
||||
self.unloadCharacterData()
|
||||
|
||||
|
||||
def refreshCharacterStore(self):
|
||||
self.charactersStore.clear()
|
||||
|
@ -297,7 +305,7 @@ class CharactersView:
|
|||
if tree_iter is None:
|
||||
return
|
||||
|
||||
name = "Description"
|
||||
name = unique_name_checker.get_unique_name_for_dictionary(self.character.details, "Description")
|
||||
value = "Value"
|
||||
|
||||
self.detailsStore.set_value(tree_iter, 0, name)
|
||||
|
@ -318,6 +326,18 @@ class CharactersView:
|
|||
model.remove(tree_iter)
|
||||
|
||||
self.character.details.pop(name)
|
||||
|
||||
# This is the the template code
|
||||
# It appends the template onto the code
|
||||
def append_template_clicked(self, button):
|
||||
if self.character is None:
|
||||
return
|
||||
# This following bit could be turned into a def
|
||||
for x in self.character_template.details:
|
||||
self.character.details[x]= self.character_template.details[x]
|
||||
|
||||
#We have to reload the charecter
|
||||
self.loadCharacterData(self.character)
|
||||
|
||||
def detailsNameEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
|
||||
if self.character is None:
|
||||
|
@ -327,11 +347,12 @@ class CharactersView:
|
|||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
|
||||
|
||||
text_to_set = unique_name_checker.get_unique_name_for_dictionary(self.character.details, text)
|
||||
name = model.get_value(tree_iter, 0)
|
||||
model.set_value(tree_iter, 0, text)
|
||||
model.set_value(tree_iter, 0, text_to_set)
|
||||
|
||||
self.character.details[text] = self.character.details.pop(name)
|
||||
self.character.details[text_to_set] = self.character.details.pop(name)
|
||||
|
||||
def detailsValueEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
|
||||
if self.character is None:
|
||||
|
|
16
manuskript/util/unique_name_checker.py
Normal file
16
manuskript/util/unique_name_checker.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# So this thing changes a name until it works with a dictionary
|
||||
# Ie. if you have a dictioary {'Item':1,'Item2':1,'Item3':1} and if you add an item it'll be Item4
|
||||
# It works only on strings
|
||||
|
||||
def get_unique_name_for_dictionary(dictionary, name):
|
||||
count = 1
|
||||
test_name = name
|
||||
while test_name in dictionary:
|
||||
count += 1
|
||||
test_name = str(name) +(str(count))
|
||||
|
||||
return test_name
|
||||
|
24
test_io.py
Normal file
24
test_io.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# I put this here because otherwise I couldn't run it.
|
||||
# I also added some tests and had to modify this to get it to run -- ShadowOfHassen
|
||||
import os
|
||||
import sys
|
||||
|
||||
# gi
|
||||
import gi
|
||||
gi.require_version('GdkPixbuf', '2.0')
|
||||
from gi.repository import GdkPixbuf
|
||||
|
||||
realpath = os.path.realpath(__file__)
|
||||
LOGO_FILE = 'icons/Manuskript/manuskript.svg'
|
||||
#sys.path.insert(1, os.path.join(os.path.dirname(realpath), '..'))
|
||||
|
||||
from manuskript.ui import MainWindow
|
||||
|
||||
|
||||
window = MainWindow("sample-projects/book-of-acts" + ".msk")
|
||||
# Let's make this a bit fancier
|
||||
window.window.set_icon(GdkPixbuf.Pixbuf.new_from_file(LOGO_FILE))
|
||||
|
||||
window.run()
|
|
@ -1,5 +1,5 @@
|
|||
<?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.
|
||||
|
||||
|
@ -31,9 +31,11 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
<property name="window-position">center-on-parent</property>
|
||||
<property name="type-hint">dialog</property>
|
||||
<property name="program-name">Manuskript</property>
|
||||
<property name="version">0.12.0</property>
|
||||
<property name="version">Gtk Working Version (Last Version 0.14.0)</property>
|
||||
<property name="copyright" translatable="yes">Copyright © 2015-2021 Olivier Keshavjee et al.</property>
|
||||
<property name="comments" translatable="yes">This is a Gtk Version Still In Development</property>
|
||||
<property name="website">https://www.theologeek.ch/manuskript/</property>
|
||||
<property name="website-label" translatable="yes">https://www.theologeek.ch/manuskript/</property>
|
||||
<property name="authors">Olivier Keshavjee
|
||||
Curtis Gedak
|
||||
Youness Alaoui
|
||||
|
@ -118,7 +120,7 @@ nicxxx
|
|||
obw
|
||||
peter88213
|
||||
ssantos </property>
|
||||
<property name="logo">../icons/Manuskript/logo-400x104.png</property>
|
||||
<property name="logo">../icons/Manuskript/logo-400x104.png</property>
|
||||
<property name="license-type">gpl-3-0</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox">
|
||||
|
|
202
ui/character_details_template_editor.glade
Normal file
202
ui/character_details_template_editor.glade
Normal file
|
@ -0,0 +1,202 @@
|
|||
<?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="GtkListStore" id="details_store">
|
||||
<columns>
|
||||
<!-- column-name Name -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name Value -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="HdyWindow" id="character_details_template_editor">
|
||||
<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">Edit Charecter Details Template</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="back">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<property name="margin-left">4</property>
|
||||
<property name="margin-right">4</property>
|
||||
<property name="margin-start">4</property>
|
||||
<property name="margin-end">4</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="icon-name">go-previous-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</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="HdyLeaflet" id="character_details_leaflet">
|
||||
<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="GtkFrame">
|
||||
<property name="height-request">200</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="label-yalign">0</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="GtkTreeView">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="model">details_store</property>
|
||||
<property name="reorderable">True</property>
|
||||
<property name="search-column">0</property>
|
||||
<property name="enable-grid-lines">both</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="details_selection"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Name</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="details_name">
|
||||
<property name="editable">True</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Value</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="details_value">
|
||||
<property name="editable">True</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label_item">
|
||||
<placeholder/>
|
||||
</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="GtkButton" id="add_details">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="icon-name">list-add</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="GtkButton" id="remove_details">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="icon-name">list-remove</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</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>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
|
@ -933,10 +933,23 @@ summary</property>
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack-type">end</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="appened_details_template">
|
||||
<property name="label" translatable="yes">Append Detail Template</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="clicked" handler="on_appened_details_template_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?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.
|
||||
|
||||
|
@ -429,6 +429,21 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="tip_of_the_day_grid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -619,6 +619,14 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
<property name="use-underline">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="character_details_template_editor">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">_Edit Character Details Template</property>
|
||||
<property name="use-underline">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
71
ui/quote_of_the_day.glade
Normal file
71
ui/quote_of_the_day.glade
Normal file
|
@ -0,0 +1,71 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.40.0 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.24"/>
|
||||
<object class="GtkOverlay" id="quote_widget">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="artwork">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="index">-1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child type="overlay">
|
||||
<!-- n-columns=3 n-rows=3 -->
|
||||
<object class="GtkGrid" id="overlay_grid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="can-default">True</property>
|
||||
<property name="margin-bottom">20</property>
|
||||
<property name="column-homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="quote_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="source_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
Loading…
Reference in a new issue