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:
TheShadowOfHassen 2023-01-10 07:39:27 -05:00
parent 172a5b6b1c
commit 8f899b1acc
14 changed files with 579 additions and 13 deletions

View 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

View file

@ -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

View 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()

View 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)

View file

@ -2,3 +2,4 @@
# -*- coding: utf-8 -*-
from manuskript.ui.tools.frequencyWindow import FrequencyWindow
from manuskript.ui.tools.Character_Template_Editor import CharacterTemplateEditorWindow

View file

@ -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:

View 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
View 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()

View file

@ -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">

View 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>

View file

@ -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>

View file

@ -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>

View file

@ -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
View 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>