diff --git a/.gitignore b/.gitignore
index 75595ae8..d0e9cc37 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@ manuskript.log
snowflake*
test-projects
main.pyproject.user
+*.glade#
diff --git a/manuskript/data/characters_template.py b/manuskript/data/characters_templates.py
similarity index 56%
rename from manuskript/data/characters_template.py
rename to manuskript/data/characters_templates.py
index b613892c..d2deadf3 100644
--- a/manuskript/data/characters_template.py
+++ b/manuskript/data/characters_templates.py
@@ -7,21 +7,22 @@ import os
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
+# So this is a template for character details
+# It is edited by the Character Template Editor
+# Most of the code is taken from characters.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':'',
+class CharacterDetailTemplates:
+# Basic Template
+ templates = {'Basic Human':
+ {'Age':'','Birthdate':'',
'Eye Color':'','Hair Color':'',
- 'Handed':''} # We'll make a default template
-
+ 'Handed':''},
+ }
- # TODO saving
+ # TODO: saving
def save(self):
pass
diff --git a/manuskript/data/project.py b/manuskript/data/project.py
index f1f6c351..4c9884ec 100644
--- a/manuskript/data/project.py
+++ b/manuskript/data/project.py
@@ -19,7 +19,7 @@ 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.data.characters_templates import CharacterDetailTemplates
from manuskript.io.mskFile import MskFile
from manuskript.util import profileTime
@@ -41,7 +41,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()
+ self.character_templates = CharacterDetailTemplates() # TODO: RENAME PROPERALLY
def __del__(self):
del self.file
diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py
index a063d7f7..ed9a2d38 100644
--- a/manuskript/ui/mainWindow.py
+++ b/manuskript/ui/mainWindow.py
@@ -75,14 +75,12 @@ class MainWindow:
self.startupWindow = StartupWindow(self)
self.aboutDialog = AboutDialog(self)
self.frequencyWindow = FrequencyWindow(self)
- self.characterTemplateWindow = CharacterTemplateWindow(self)
self.settingsWindow = SettingsWindow(self)
self.windows = [
self.startupWindow,
self.aboutDialog,
self.frequencyWindow,
- self.characterTemplateWindow,
self.settingsWindow
]
diff --git a/manuskript/ui/tools/__init__.py b/manuskript/ui/tools/__init__.py
index 674f8ba8..3efbdd35 100644
--- a/manuskript/ui/tools/__init__.py
+++ b/manuskript/ui/tools/__init__.py
@@ -1,5 +1,4 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-from manuskript.ui.tools.frequencyWindow import FrequencyWindow
-from manuskript.ui.tools.characterTemplateWindow import CharacterTemplateWindow
+from manuskript.ui.tools.frequencyWindow import FrequencyWindow
\ No newline at end of file
diff --git a/manuskript/ui/tools/characterTemplateWindow.py b/manuskript/ui/tools/characterTemplateWindow.py
deleted file mode 100644
index 75c10148..00000000
--- a/manuskript/ui/tools/characterTemplateWindow.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/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, invalidString, validString
-
-
-# I lifted a lot of this code from frequencyWindow
-# With a bit more stuff from charactersView
-
-class CharacterTemplateWindow(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.detailsStore = None
- self.detailsSelection = None
- self.addDetailsButton = None
- self.removeDetailsButton = None
- self.appendDetailsTemplateButton = None
- self.detailsNameRenderer = None
- self.detailsValueRenderer = None
-
- def initWindow(self, builder, window):
- self.headerBar = builder.get_object("header_bar")
- self.back = builder.get_object("back")
-
- 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.appendDetailsTemplateButton = 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.loadCharacterTemplate()
-
- def _backClicked(self, button: Gtk.Button):
- self.hide()
-
- # So this adds any previously added parts to the template
- def loadCharacterTemplate(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
diff --git a/manuskript/ui/views/charactersView.py b/manuskript/ui/views/charactersView.py
index a6ceac1e..0e92b8bf 100644
--- a/manuskript/ui/views/charactersView.py
+++ b/manuskript/ui/views/charactersView.py
@@ -14,7 +14,7 @@ from manuskript.util import validString, invalidString, validInt, invalidInt, un
class CharactersView:
def __init__(self, project):
- self.characterTemplate = project.character_template # The template for detailed info
+ self.characterTemplates = project.character_templates # The template for detailed info
self.characters = project.characters
self.character = None
@@ -78,13 +78,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.appendDetailsTemplateButton = builder.get_object("appened_details_template")
+ self.charecterDetailsMenuButton = builder.get_object("characters_details_menu_button")
+ self.newTemplateButton = builder.get_object("new_template_button")
+ self.newTemplateEntry = builder.get_object("new_template_entry")
+ self.newTemplateEntryBuffer = builder.get_object("new_template_entry_buffer")
+ self.charecterDetailsMenuAppendBox = builder.get_object("template_select_box")
+ self.charecterDetailsMenuTemplateBox = builder.get_object("template_select_box2")
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.appendDetailsTemplateButton.connect("clicked", self._appendTemplateClicked)
+ self.charecterDetailsMenuButton.connect("clicked", self._onCharecterDetailsMenuClicked)
+ self.newTemplateButton.connect("clicked", self._onNewTemplateButtonClicked)
self.detailsNameRenderer.connect("edited", self._detailsNameEdited)
self.detailsValueRenderer.connect("edited", self._detailsValueEdited)
@@ -325,17 +331,56 @@ class CharactersView:
model.remove(tree_iter)
self.character.details.pop(name)
+
+ def _updateCharecterDetailsMenu(self):
+ def clear_container(container):
+ data = container.get_children()
+ for d in data:
+ container.remove(d)
+ clear_container( self.charecterDetailsMenuAppendBox)
+ clear_container(self.charecterDetailsMenuTemplateBox)
+ for x in self.characterTemplates.templates:
+ button = Gtk.Button(label=x,) # TODO: turn into ModelButton
+ button.connect("clicked", self._appendTemplateClicked, x)
+ self.charecterDetailsMenuAppendBox.add(button)
+ # Now we do the buttons for charecterDetailsMenuTemplateBox
+ button2 = Gtk.Button(label=x,) # TODO: turn into ModelButton
+ button2.connect("clicked", self._updateTemplateClicked, x)
+ self.charecterDetailsMenuTemplateBox.add(button2)
- def _appendTemplateClicked(self, button: Gtk.Button):
+ self.charecterDetailsMenuAppendBox.show_all()
+ self.charecterDetailsMenuTemplateBox.show_all()
+
+ def _onCharecterDetailsMenuClicked(self, button: Gtk.MenuButton):
+ self._updateCharecterDetailsMenu()
+
+ def _updateTemplateClicked(self, button: Gtk.ModelButton, template):
+ if self.character is None:
+ return
+ self.characterTemplates.templates[template] = self.character.details # TODO: Add A warning? Or should there be undo/ redo when revisions are written.
+
+ def _appendTemplateClicked(self, button: Gtk.ModelButton, template):
if self.character is None:
return
# This following bit could be turned into a def
- for (key, value) in self.characterTemplate.details.items():
+ for (key, value) in self.characterTemplates.templates[template].items():
self.character.details[key]= value
- #We have to reload the charecter
+ # We have to reload the character
self.loadCharacterData(self.character)
+ def _onNewTemplateButtonClicked(self, button: Gtk.Button):
+ text = self.newTemplateEntryBuffer.get_text()
+ if text == "":
+ return
+ if text in self.characterTemplates.templates:
+ new_text = unique_name_checker.get_unique_name_for_dictionary(self.characterTemplates.templates, text)
+ self.newTemplateEntryBuffer.set_text(new_text, -1) # TODO: Add a warning
+ return
+ else:
+ self.characterTemplates.templates[text] = self.character.details
+ self._updateCharecterDetailsMenu()
+
def _detailsNameEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
if self.character is None:
return
@@ -477,3 +522,4 @@ class CharactersView:
def show(self):
self.widget.show_all()
+
diff --git a/test_io.py b/test_io.py
old mode 100644
new mode 100755
diff --git a/ui/character_details_template_editor.glade b/ui/character_details_template_editor.glade
deleted file mode 100644
index 72d0e4b2..00000000
--- a/ui/character_details_template_editor.glade
+++ /dev/null
@@ -1,193 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/characters.glade b/ui/characters.glade
index 78a0ba85..231faffd 100644
--- a/ui/characters.glade
+++ b/ui/characters.glade
@@ -85,6 +85,195 @@ along with Manuskript. If not, see .
+
+
@@ -934,12 +1123,20 @@ summary
-
- Append Detail Template
+
False
diff --git a/ui/main.glade b/ui/main.glade
index c2289edf..32d9a619 100644
--- a/ui/main.glade
+++ b/ui/main.glade
@@ -619,14 +619,6 @@ along with Manuskript. If not, see .
True
-
-
-