Merge branch 'gtk_next' into Tipoftheday

This commit is contained in:
Tobias Frisch 2023-08-04 00:04:30 +02:00 committed by GitHub
commit 9c09075225
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 1830 additions and 114 deletions

1
.gitignore vendored
View file

@ -25,3 +25,4 @@ manuskript.log
snowflake*
test-projects
main.pyproject.user
*.glade#

View file

@ -0,0 +1,31 @@
#!/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 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 CharacterDetailTemplates:
# Basic Template
templates = {'Basic Human':
{'Age':'','Birthdate':'',
'Eye Color':'','Hair Color':'',
'Handed':''},
}
# TODO: saving
def save(self):
pass
def load(self):
pass

View file

@ -156,8 +156,9 @@ class OutlineText(OutlineItem):
metadata, body = self.file.loadMMD(optimized)
OutlineItem.loadMetadata(self, metadata)
if not optimized:
if body is not None:
self.text = body
optimized = False
self.complete(optimized=optimized)

View file

@ -1,10 +1,14 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
# Imports
# Python bundled modules
import os
from zipfile import BadZipFile
# Manuskript modules
from manuskript.data.abstractData import AbstractData
from manuskript.data.version import Version, CURRENT_MSK_VERSION
from manuskript.data.info import Info
@ -17,6 +21,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_templates import CharacterDetailTemplates
from manuskript.io.mskFile import MskFile
from manuskript.util import profileTime
@ -38,6 +45,8 @@ class Project(AbstractData):
self.world = World(self.file.directoryPath)
self.outline = Outline(self.file.directoryPath, self.plots, self.labels, self.statuses)
self.revisions = Revisions(self.file.directoryPath)
self.character_templates = CharacterDetailTemplates() # TODO: RENAME PROPERALLY
def __del__(self):
del self.file

View file

@ -24,7 +24,8 @@ class MmdFile(AbstractFile):
metaValue = None
with open(self.path, 'rt', encoding='utf-8') as file:
for line in file:
line = file.readline()
while line:
m = metaPattern.match(line)
if not (m is None):
@ -33,14 +34,15 @@ class MmdFile(AbstractFile):
metaKey = m.group(1)
metaValue = m.group(2)
continue
else:
m = metaValuePattern.match(line)
m = metaValuePattern.match(line)
if not (m is None):
metaValue += "\n" + m.group(2)
elif line == "\n":
break
if not (m is None):
metaValue += "\n" + m.group(2)
elif line == "\n":
break
line = file.readline()
if not (metaKey is None):
metadata[metaKey] = metaValue
@ -50,6 +52,14 @@ class MmdFile(AbstractFile):
if (len(body) > 0) and (body[0] == "\n"):
body = body[1:]
elif file.seekable():
currentPosition = file.tell()
file.seek(0, 2)
endPosition = file.tell()
if endPosition - currentPosition == 1:
body = ""
return metadata, body

View file

@ -4,6 +4,8 @@
from manuskript.ui.util import *
from manuskript.ui.aboutDialog import AboutDialog
from manuskript.ui.compileWindow import CompileWindow
from manuskript.ui.importWindow import ImportWindow
from manuskript.ui.mainWindow import MainWindow
from manuskript.ui.settingsWindow import SettingsWindow
from manuskript.ui.startupWindow import StartupWindow

View file

@ -0,0 +1,53 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GObject, Gtk, Handy
Handy.init()
from manuskript.ui.abstractDialog import AbstractDialog
from manuskript.data import Project
class CompileWindow(AbstractDialog):
def __init__(self, mainWindow):
AbstractDialog.__init__(self, mainWindow, "ui/compile.glade", "compile_window")
self.headerBar = None
self.back = None
self.forward = None
self.previewLeaflet = None
self.manageExportersButton = None
def initWindow(self, builder, window):
self.headerBar = builder.get_object("header_bar")
self.back = builder.get_object("back")
self.forward = builder.get_object("forward")
self.previewLeaflet = builder.get_object("preview_leaflet")
self.manageExportersButton = builder.get_object("manage_exporters")
self.previewLeaflet.bind_property("folded", self.back, "visible",
GObject.BindingFlags.SYNC_CREATE)
self.previewLeaflet.bind_property("folded", self.forward, "visible",
GObject.BindingFlags.SYNC_CREATE)
self.previewLeaflet.bind_property("folded", self.headerBar, "show-close-button",
GObject.BindingFlags.SYNC_CREATE |
GObject.BindingFlags.INVERT_BOOLEAN)
self.back.connect("clicked", self._backClicked)
self.forward.connect("clicked", self._forwardClicked)
def _backClicked(self, button: Gtk.Button):
if self.previewLeaflet.get_visible_child_name() == "preview_box":
self.previewLeaflet.set_visible_child_name("settings_box")
else:
self.hide()
def _forwardClicked(self, button: Gtk.Button):
if self.previewLeaflet.get_visible_child_name() == "settings_box":
self.previewLeaflet.set_visible_child_name("preview_box")

View file

@ -0,0 +1,51 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GObject, Gtk, Handy
Handy.init()
from manuskript.ui.abstractDialog import AbstractDialog
from manuskript.data import Project
class ImportWindow(AbstractDialog):
def __init__(self, mainWindow):
AbstractDialog.__init__(self, mainWindow, "ui/import.glade", "import_window")
self.headerBar = None
self.back = None
self.forward = None
self.previewLeaflet = None
def initWindow(self, builder, window):
self.headerBar = builder.get_object("header_bar")
self.back = builder.get_object("back")
self.forward = builder.get_object("forward")
self.previewLeaflet = builder.get_object("preview_leaflet")
self.previewLeaflet.bind_property("folded", self.back, "visible",
GObject.BindingFlags.SYNC_CREATE)
self.previewLeaflet.bind_property("folded", self.forward, "visible",
GObject.BindingFlags.SYNC_CREATE)
self.previewLeaflet.bind_property("folded", self.headerBar, "show-close-button",
GObject.BindingFlags.SYNC_CREATE |
GObject.BindingFlags.INVERT_BOOLEAN)
self.back.connect("clicked", self._backClicked)
self.forward.connect("clicked", self._forwardClicked)
def _backClicked(self, button: Gtk.Button):
if self.previewLeaflet.get_visible_child_name() == "preview_box":
self.previewLeaflet.set_visible_child_name("settings_box")
else:
self.hide()
def _forwardClicked(self, button: Gtk.Button):
if self.previewLeaflet.get_visible_child_name() == "settings_box":
self.previewLeaflet.set_visible_child_name("preview_box")

View file

@ -16,6 +16,8 @@ from manuskript.ui.views import *
from manuskript.ui.chooser import openFileDialog, saveFileDialog, FileFilter
from manuskript.ui.tools import *
from manuskript.ui.aboutDialog import AboutDialog
from manuskript.ui.compileWindow import CompileWindow
from manuskript.ui.importWindow import ImportWindow
from manuskript.ui.settingsWindow import SettingsWindow
from manuskript.ui.startupWindow import StartupWindow
from manuskript.ui.util import bindMenuItem, packViewIntoSlot, unpackFromSlot
@ -61,6 +63,8 @@ class MainWindow:
self.aboutDialog = AboutDialog(self)
self.frequencyWindow = FrequencyWindow(self)
self.settingsWindow = SettingsWindow(self)
self.importWindow = ImportWindow(self)
self.compileWindow = CompileWindow(self)
self.windows = [
self.startupWindow,
@ -76,10 +80,13 @@ class MainWindow:
bindMenuItem(builder, "save_menu_item", self._saveAction)
bindMenuItem(builder, "saveas_menu_item", self._saveAsAction)
bindMenuItem(builder, "close_menu_item", self._closeAction)
bindMenuItem(builder, "import_menu_item", self._importAction)
bindMenuItem(builder, "compile_menu_item", self._compileAction)
bindMenuItem(builder, "quit_menu_item", self._quitAction)
bindMenuItem(builder, "settings_menu_item", self._settingsAction)
bindMenuItem(builder, "frequency_menu_item", self._frequencyAction)
bindMenuItem(builder, "character_details_template_editor", self._characterDetailsTemplateEditorAction)
bindMenuItem(builder, "about_menu_item", self._aboutAction)
self.hide()
@ -101,7 +108,7 @@ class MainWindow:
self.generalView = packViewIntoSlot(self.generalSlot, GeneralView, self.project.info)
self.summaryView = packViewIntoSlot(self.summarySlot, SummaryView, self.project.summary)
self.charactersView = packViewIntoSlot(self.charactersSlot, CharactersView, self.project.characters)
self.charactersView = packViewIntoSlot(self.charactersSlot, CharactersView, self.project)
self.plotView = packViewIntoSlot(self.plotSlot, PlotView, self.project.plots)
self.worldView = packViewIntoSlot(self.worldSlot, WorldView, self.project.world)
self.outlineView = packViewIntoSlot(self.outlineSlot, OutlineView, self.project.outline)
@ -157,6 +164,12 @@ class MainWindow:
def _closeAction(self, menuItem: Gtk.MenuItem):
self.closeProject()
def _importAction(self, menuItem: Gtk.MenuItem):
self.importWindow.show()
def _compileAction(self, menuItem: Gtk.MenuItem):
self.compileWindow.show()
def _quitAction(self, menuItem: Gtk.MenuItem):
self.exit(True)
@ -169,6 +182,9 @@ class MainWindow:
def _frequencyAction(self, menuItem: Gtk.MenuItem):
self.frequencyWindow.show()
def _characterDetailsTemplateEditorAction(self, menuItem: Gtk.MenuItem):
self.characterTemplateWindow.show()
def _aboutAction(self, menuItem: Gtk.MenuItem):
self.aboutDialog.show()

View file

@ -1,4 +1,4 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from manuskript.ui.tools.frequencyWindow import FrequencyWindow
from manuskript.ui.tools.frequencyWindow import FrequencyWindow

View file

@ -4,9 +4,22 @@
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GObject, Gtk, Handy
from gi.repository import GObject, Gtk
import re
from enum import Enum, unique
from manuskript.data import OutlineFolder, OutlineText, OutlineState, Project
from manuskript.ui.abstractDialog import AbstractDialog
from manuskript.util import validString, validInt
@unique
class AnalyzeStatus(Enum):
NONE = 0
WORDS = 1
PHRASES = 2
class FrequencyWindow(AbstractDialog):
@ -14,18 +27,56 @@ class FrequencyWindow(AbstractDialog):
def __init__(self, mainWindow):
AbstractDialog.__init__(self, mainWindow, "ui/frequency.glade", "frequency_window")
self.analyzeStatus = AnalyzeStatus.NONE
self.analyzeTexts = list()
self.outlineCompletion = list()
self.analyzeCompleted = 0
self.headerBar = None
self.back = None
self.wordLeaflet = None
self.wordsProgress = None
self.analyzeWords = None
self.phrasesProgress = None
self.analyzePhrases = None
self.wordEntry = None
self.removeWord = None
self.addWord = None
self.excludeWordSelection = None
self.excludeWordsStore = None
self.wordsFrequencyStore = None
self.phrasesFrequencyStore = None
self.phraseMinimum = None
self.phraseMaximum = None
self.wordSize = None
def initWindow(self, builder, window):
self.headerBar = builder.get_object("header_bar")
self.back = builder.get_object("back")
self.wordLeaflet = builder.get_object("word_leaflet")
self.wordsProgress = builder.get_object("words_progress")
self.analyzeWords = builder.get_object("analyze_words")
self.phrasesProgress = builder.get_object("phrases_progress")
self.analyzePhrases = builder.get_object("analyze_phrases")
self.wordEntry = builder.get_object("word_entry")
self.removeWord = builder.get_object("remove_word")
self.addWord = builder.get_object("add_word")
self.excludeWordSelection = builder.get_object("exclude_word_selection")
self.excludeWordsStore = builder.get_object("exclude_words_store")
self.wordsFrequencyStore = builder.get_object("words_frequency_store")
self.phrasesFrequencyStore = builder.get_object("phrases_frequency_store")
self.filteredFrequencyStore = builder.get_object("filtered_frequency_store")
self.filteredFrequencyStore.set_visible_func(self._filterFrequencies)
self.filteredFrequencyStore.refilter()
self.phraseMinimum = builder.get_object("phrase_minimum")
self.phraseMaximum = builder.get_object("phrase_maximum")
self.wordSize = builder.get_object("word_size")
self.wordLeaflet.bind_property("folded", self.back, "visible",
GObject.BindingFlags.SYNC_CREATE)
@ -35,12 +86,182 @@ class FrequencyWindow(AbstractDialog):
self.back.connect("clicked", self._backClicked)
self.analyzeWords.connect("clicked", self._analyzeWordsClicked)
self.analyzePhrases.connect("clicked", self._analyzePhrasesClicked)
self.wordSize.connect("value-changed", self._wordSizeChanged)
self.excludeWordSelection.connect("changed", self._excludeWordSelectionChanged)
self.removeWord.connect("clicked", self._removeWordClicked)
self.addWord.connect("clicked", self._addWordClicked)
def getProject(self) -> Project:
return self.mainWindow.getProject()
def _filterFrequencies(self, model, iterator, userdata):
word = model[iterator][0]
if word is None:
return False
word_size = validInt(self.wordSize.get_value())
if len(word) < word_size:
return False
iter = self.excludeWordsStore.get_iter_first()
while iter is not None:
excluded = self.excludeWordsStore.get_value(iter, 0)
if word == excluded:
return False
iter = self.excludeWordsStore.iter_next(iter)
return True
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()
def __completeOutlineItem(self):
outline_item = self.outlineCompletion.pop(0)
if isinstance(outline_item, OutlineFolder):
for item in outline_item:
self.outlineCompletion.append(item)
elif isinstance(outline_item, OutlineText):
if outline_item.state != OutlineState.COMPLETE:
outline_item.load(False)
self.analyzeTexts.append(outline_item.text)
self.analyzeCompleted = self.analyzeCompleted + 1
incomplete = len(self.outlineCompletion)
complete = self.analyzeCompleted
fraction = 1.0 * complete / (complete + incomplete)
if self.analyzeStatus == AnalyzeStatus.WORDS:
self.wordsProgress.set_fraction(fraction)
elif self.analyzeStatus == AnalyzeStatus.PHRASES:
self.phrasesProgress.set_fraction(fraction)
if incomplete > 0:
return True
patterns = list()
if self.analyzeStatus == AnalyzeStatus.WORDS:
word_size = validInt(self.wordSize.get_value())
patterns.append(re.compile(r"\w{" + str(word_size) + r",}"))
elif self.analyzeStatus == AnalyzeStatus.PHRASES:
phrase_minimum = validInt(self.phraseMinimum.get_value())
phrase_maximum = validInt(self.phraseMaximum.get_value())
for n in range(phrase_minimum, phrase_maximum + 1):
patterns.append(re.compile(r"\w+" + r"\s+\w+" * (n - 1)))
frequencies = dict()
text = "\n".join(self.analyzeTexts)
for pattern in patterns:
for match in pattern.findall(text):
if match is None:
continue
if match in frequencies:
frequencies[match] = frequencies[match] + 1
else:
frequencies[match] = 1
if self.analyzeStatus == AnalyzeStatus.WORDS:
self.wordsFrequencyStore.clear()
for word, frequency in frequencies.items():
tree_iter = self.wordsFrequencyStore.append()
if tree_iter is None:
continue
self.wordsFrequencyStore.set_value(tree_iter, 0, validString(word))
self.wordsFrequencyStore.set_value(tree_iter, 1, validInt(frequency))
self.wordLeaflet.set_visible_child_name("wordlist_view")
elif self.analyzeStatus == AnalyzeStatus.PHRASES:
self.phrasesFrequencyStore.clear()
for phrase, frequency in frequencies.items():
tree_iter = self.phrasesFrequencyStore.append()
if tree_iter is None:
continue
self.phrasesFrequencyStore.set_value(tree_iter, 0, validString(phrase))
self.phrasesFrequencyStore.set_value(tree_iter, 1, validInt(frequency))
self.analyzeStatus = AnalyzeStatus.NONE
self.analyzeTexts = list()
self.analyzeWords.set_sensitive(True)
self.analyzePhrases.set_sensitive(True)
return False
def analyze(self, status: AnalyzeStatus):
if self.analyzeStatus != AnalyzeStatus.NONE:
return
project = self.getProject()
if project is None:
return
self.analyzeWords.set_sensitive(False)
self.analyzePhrases.set_sensitive(False)
self.analyzeStatus = status
if len(self.outlineCompletion) == 0:
self.analyzeTexts = list()
self.analyzeCompleted = 0
if self.analyzeStatus == AnalyzeStatus.WORDS:
self.wordsProgress.set_fraction(0.0)
elif self.analyzeStatus == AnalyzeStatus.PHRASES:
self.phrasesProgress.set_fraction(0.0)
GObject.idle_add(self.__completeOutlineItem)
for outline_item in project.outline:
self.outlineCompletion.append(outline_item)
def _analyzeWordsClicked(self, button: Gtk.Button):
self.wordLeaflet.set_visible_child_name("wordlist_view")
self.analyze(AnalyzeStatus.WORDS)
def _analyzePhrasesClicked(self, button: Gtk.Button):
self.analyze(AnalyzeStatus.PHRASES)
def _wordSizeChanged(self, adjustment: Gtk.Adjustment):
self.filteredFrequencyStore.refilter()
def _excludeWordSelectionChanged(self, selection: Gtk.TreeSelection):
model, tree_iter = selection.get_selected()
self.removeWord.set_sensitive(tree_iter is not None)
def _removeWordClicked(self, button: Gtk.Button):
model, tree_iter = self.excludeWordSelection.get_selected()
if tree_iter is None:
return
self.excludeWordsStore.remove(tree_iter)
self.filteredFrequencyStore.refilter()
def _addWordClicked(self, button: Gtk.Button):
tree_iter = self.excludeWordsStore.append()
if tree_iter is None:
return
word = self.wordEntry.get_buffer().get_text()
self.excludeWordsStore.set_value(tree_iter, 0, word)
self.filteredFrequencyStore.refilter()

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.characterTemplates = project.character_templates # The template for detailed info
self.characters = project.characters
self.character = None
builder = Gtk.Builder()
@ -77,11 +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.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.charecterDetailsMenuButton.connect("clicked", self._onCharecterDetailsMenuClicked)
self.newTemplateButton.connect("clicked", self._onNewTemplateButtonClicked)
self.detailsNameRenderer.connect("edited", self._detailsNameEdited)
self.detailsValueRenderer.connect("edited", self._detailsValueEdited)
@ -108,6 +117,7 @@ class CharactersView:
self.notesBuffer.connect("changed", self._notesChanged)
self.unloadCharacterData()
def refreshCharacterStore(self):
self.charactersStore.clear()
@ -300,7 +310,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)
@ -321,6 +331,68 @@ 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 template_name in self.characterTemplates.templates:
button = Gtk.Button(label=template_name) # TODO: turn into ModelButton
button.connect("clicked", self._appendTemplateClicked, template_name)
self.charecterDetailsMenuAppendBox.add(button)
# Now we do the buttons for charecterDetailsMenuTemplateBox
box = Gtk.Box()
label = Gtk.Label(label=template_name)
overwrite_button = Gtk.Button()
overwrite_button.add(Gtk.Image(icon_name='emblem-synchronizing-symbolic'))
overwrite_button.connect("clicked", self._updateTemplateClicked, template_name)
overwrite_button.set_tooltip_markup ('Overwrite template with text of current file') # TODO: This might be an issue when it comes to translating
delete_button = Gtk.Button()
delete_button.add(Gtk.Image(icon_name='list-remove-symbolic'))
delete_button.set_tooltip_markup ('Delete') # TODO: This might be an issue when it comes to translating
delete_button.connect("clicked", self._deleteTemplateClicked, template_name)
box.pack_end(delete_button, False, False, 0)
box.pack_end(overwrite_button, False, False, 0)
box.pack_start(label, True, False, 0)
self.charecterDetailsMenuTemplateBox.add(box)
self.charecterDetailsMenuAppendBox.show_all()
self.charecterDetailsMenuTemplateBox.show_all()
def _onCharecterDetailsMenuClicked(self, button: Gtk.MenuButton):
self._updateCharecterDetailsMenu()
def _updateTemplateClicked(self, button: Gtk.ModelButton, template_name):
if self.character is None:
return
self.characterTemplates.templates[template_name] = self.character.details # TODO: Add A warning? Or should there be undo/ redo when revisions are written.
def _deleteTemplateClicked(self, button: Gtk.ModelButton, template_name):
del self.characterTemplates.templates[template_name]
self._updateCharecterDetailsMenu()
def _appendTemplateClicked(self, button: Gtk.ModelButton, template_name):
if self.character is None:
return
self.character.details.update(self.characterTemplates.templates[template_name])
# 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:
@ -330,11 +402,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:
@ -462,3 +535,4 @@ class CharactersView:
def show(self):
self.widget.show_all()

View file

@ -270,8 +270,6 @@ class EditorView:
self.editorItems = self.project.outline.items
elif type(outlineItem) is OutlineFolder:
self.editorItems = outlineItem.items
elif type(outlineItem) is OutlineText:
self.__appendOutlineItemText(outlineItem)
if outlineItem is None:
for item in self.editorItems:

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

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.15.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

@ -85,6 +85,211 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</object>
<object class="GtkTextBuffer" id="motivation"/>
<object class="GtkEntryBuffer" id="name"/>
<object class="GtkEntryBuffer" id="new_template_entry_buffer"/>
<object class="GtkPopoverMenu" id="charecter_options_popover">
<property name="width-request">350</property>
<property name="height-request">250</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox" id="main_menu_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="text" translatable="yes">Append Template</property>
<property name="menu-name">append_template</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="text" translatable="yes">Mange Templates</property>
<property name="menu-name">edit_template</property>
</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="submenu">main</property>
</packing>
</child>
<child>
<object class="GtkBox" id="append_template_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="text" translatable="yes">Append Template</property>
<property name="menu-name">main</property>
<property name="inverted">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="border-width">4</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" id="template_select_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<property name="activate-on-single-click">False</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="submenu">append_template</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="edit_template_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="text" translatable="yes">Set info to template</property>
<property name="menu-name">main</property>
<property name="inverted">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="border-width">4</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" id="template_select_box2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="selection-mode">none</property>
<property name="activate-on-single-click">False</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</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-bottom">4</property>
<property name="spacing">4</property>
<child>
<object class="GtkEntry" id="new_template_entry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="buffer">new_template_entry_buffer</property>
<property name="placeholder-text" translatable="yes">Enter a unique name</property>
<property name="input-hints">GTK_INPUT_HINT_NO_EMOJI | GTK_INPUT_HINT_NONE</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="new_template_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Adds a new template with the content of the current charecter's details.</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">list-add-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="submenu">edit_template</property>
<property name="position">2</property>
</packing>
</child>
</object>
<object class="GtkTextBuffer" id="notes"/>
<object class="GtkTextBuffer" id="one_paragraph_summary"/>
<object class="GtkTextBuffer" id="one_sentence_summary"/>
@ -795,10 +1000,7 @@ summary</property>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">8</property>
<property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="border-width">8</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
@ -923,6 +1125,41 @@ summary</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Next</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">3</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="characters_details_menu_button">
<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="direction">up</property>
<property name="popover">charecter_options_popover</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">open-menu-symbolic</property>
</object>
</child>
</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>

875
ui/compile.glade Normal file
View file

@ -0,0 +1,875 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0
Copyright (C) 2015-2021 Olivier Keshavjee et al.
This file is part of Manuskript.
Manuskript is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Manuskript is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.24"/>
<requires lib="libhandy" version="0.0"/>
<!-- interface-local-resource-path ../ -->
<!-- interface-license-type gplv3 -->
<!-- interface-name Manuskript -->
<!-- interface-description Manuskript is an open-source tool for writers. -->
<!-- interface-copyright 2015-2021 Olivier Keshavjee et al. -->
<object class="GtkListStore" id="file_format_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name mimeType -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Markdown</col>
<col id="1" translatable="yes">text/markdown</col>
<col id="2" translatable="yes">text-x-generic</col>
</row>
<row>
<col id="0" translatable="yes">Folder</col>
<col id="1" translatable="yes">directory</col>
<col id="2" translatable="yes">folder</col>
</row>
<row>
<col id="0" translatable="yes">OPML</col>
<col id="1" translatable="yes">text/opml</col>
<col id="2" translatable="yes">text-x-generic-template</col>
</row>
<row>
<col id="0" translatable="yes">Mind Map</col>
<col id="1" translatable="yes">text/mind-map</col>
<col id="2" translatable="yes">text-x-generic-template</col>
</row>
</data>
</object>
<object class="HdyWindow" id="compile_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">Export</property>
<child>
<object class="GtkButton" id="back">
<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">go-previous-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="forward">
<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">go-next-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="pack-type">end</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="HdyLeaflet" id="preview_leaflet">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="width-request">300</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkHeaderBar">
<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="margin-start">4</property>
<property name="margin-end">4</property>
<property name="spacing">8</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Format:</property>
<attributes>
<attribute name="weight" value="semibold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="model">file_format_store</property>
<property name="active">0</property>
<child>
<object class="GtkCellRendererPixbuf"/>
<attributes>
<attribute name="icon-name">2</attribute>
</attributes>
</child>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="manage_exporters">
<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">4</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">preferences-other-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">Manage Exporters</property>
<property name="ellipsize">end</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>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">8</property>
<property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">6</property>
<property name="margin-end">6</property>
<property name="label" translatable="yes">Settings</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="semibold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkExpander">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="border-width">8</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">Decide here what will be included in the final export.</property>
<property name="wrap">True</property>
<property name="wrap-mode">word-char</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="border-width">4</property>
<property name="column-homogeneous">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Type</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Title</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Text</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes"> </property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes"> </property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes"> </property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</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="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">folder-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">Folder</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</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="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">text-x-generic-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">Folder</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">I need more granularity</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="border-width">4</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkExpander">
<property name="visible">True</property>
<property name="can-focus">True</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">Filters what items will be included in the final export.
(Not fully implemented yet.)</property>
<property name="wrap">True</property>
<property name="wrap-mode">word-char</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">Ignore compile status (include all items)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">Subitems of:</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">Labels</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton">
<property name="label" translatable="yes">Status</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Filters</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Content</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkExpander">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<placeholder/>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Separations</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkExpander">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<placeholder/>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Transformations</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkExpander">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<placeholder/>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Preview</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
</object>
<packing>
<property name="name">settings_box</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="width-request">250</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">8</property>
<property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">6</property>
<property name="margin-end">6</property>
<property name="label" translatable="yes">Preview</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="semibold"/>
</attributes>
</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="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="has-subtitle">False</property>
<property name="spacing">8</property>
<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="spacing">8</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">4</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-synchronizing-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">Preview</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="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">4</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-revert-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">Export</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>
</object>
<packing>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">preview_box</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkTreeStore" id="file_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeStore" id="under_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
</object>
</interface>

View file

@ -65,16 +65,6 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="editable">False</property>
</object>
</child>
<child type="tag">
<object class="GtkTextTag">
<property name="font">Normal</property>
</object>
</child>
<child type="tag">
<object class="GtkTextTag">
<property name="font">Normal</property>
</object>
</child>
<child type="tag">
<object class="GtkTextTag" id="h2_tag">
<property name="name">h2</property>
@ -173,7 +163,21 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<object class="GtkTextTag" id="p_tag">
<property name="name">p</property>
<property name="font">Normal</property>
<property name="pixels-above-lines">4</property>
<property name="pixels-below-lines">4</property>
<property name="left-margin">8</property>
<property name="indent">20</property>
<property name="right-margin">8</property>
</object>
</child>
<child type="tag">
<object class="GtkTextTag" id="line_tag">
<property name="name">line</property>
<property name="font">Normal</property>
<property name="editable">False</property>
<property name="left-margin">4</property>
<property name="strikethrough">True</property>
<property name="right-margin">4</property>
</object>
</child>
</object>
@ -397,6 +401,11 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="wrap-mode">word-char</property>
<property name="left-margin">8</property>
<property name="right-margin">8</property>
<property name="top-margin">4</property>
<property name="bottom-margin">4</property>
<property name="indent">4</property>
<property name="buffer">editor_text</property>
<property name="input-hints">GTK_INPUT_HINT_SPELLCHECK | GTK_INPUT_HINT_WORD_COMPLETION | GTK_INPUT_HINT_NONE</property>
</object>

View file

@ -27,6 +27,12 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<!-- interface-name Manuskript -->
<!-- interface-description Manuskript is an open-source tool for writers. -->
<!-- interface-copyright 2015-2021 Olivier Keshavjee et al. -->
<object class="GtkListStore" id="exclude_words_store">
<columns>
<!-- column-name word -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkAdjustment" id="phrase_maximum">
<property name="lower">2</property>
<property name="upper">99</property>
@ -41,6 +47,14 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkListStore" id="phrases_frequency_store">
<columns>
<!-- column-name phrase -->
<column type="gchararray"/>
<!-- column-name frequency -->
<column type="guint"/>
</columns>
</object>
<object class="GtkAdjustment" id="word_size">
<property name="lower">1</property>
<property name="upper">99</property>
@ -48,6 +62,17 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkListStore" id="words_frequency_store">
<columns>
<!-- column-name word -->
<column type="gchararray"/>
<!-- column-name frequency -->
<column type="guint"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="filtered_frequency_store">
<property name="child-model">words_frequency_store</property>
</object>
<object class="HdyWindow" id="frequency_window">
<property name="can-focus">False</property>
<child>
@ -102,10 +127,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="width-request">300</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">8</property>
<property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="border-width">8</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
@ -184,9 +206,26 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="can-focus">True</property>
<property name="model">exclude_words_store</property>
<property name="headers-visible">False</property>
<property name="headers-clickable">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="exclude_word_selection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Word</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
@ -204,8 +243,9 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="can-focus">False</property>
<property name="spacing">8</property>
<child>
<object class="GtkButton">
<object class="GtkButton" id="remove_word">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
@ -223,7 +263,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
<child>
<object class="GtkEntry">
<object class="GtkEntry" id="word_entry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
@ -234,7 +274,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
<child>
<object class="GtkButton">
<object class="GtkButton" id="add_word">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
@ -277,10 +317,9 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
<child>
<object class="GtkLevelBar">
<object class="GtkProgressBar" id="words_progress">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">12</property>
</object>
<packing>
<property name="expand">False</property>
@ -311,20 +350,51 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="width-request">250</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-start">8</property>
<property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="hexpand">True</property>
<property name="border-width">8</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">
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="can-focus">True</property>
<property name="model">filtered_frequency_store</property>
<property name="search-column">0</property>
<property name="show-expanders">False</property>
<property name="tooltip-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Word</property>
<property name="expand">True</property>
<property name="sort-column-id">0</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Frequency</property>
<property name="expand">True</property>
<property name="sort-indicator">True</property>
<property name="sort-column-id">1</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
@ -490,9 +560,43 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkListBox">
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="can-focus">True</property>
<property name="model">phrases_frequency_store</property>
<property name="search-column">0</property>
<property name="show-expanders">False</property>
<property name="tooltip-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Phrase</property>
<property name="expand">True</property>
<property name="sort-column-id">0</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Frequency</property>
<property name="expand">True</property>
<property name="sort-indicator">True</property>
<property name="sort-column-id">1</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
@ -506,7 +610,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
<child>
<object class="GtkProgressBar">
<object class="GtkProgressBar" id="phrases_progress">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>

View file

@ -430,7 +430,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
<child>
<object class="GtkBox">
<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>
@ -439,7 +439,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Quote of The Day</property>
<property name="label" translatable="yes">Quote of The Day</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>

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.
@ -27,7 +27,55 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<!-- interface-name Manuskript -->
<!-- interface-description Manuskript is an open-source tool for writers. -->
<!-- interface-copyright 2015-2021 Olivier Keshavjee et al. -->
<object class="HdyWindow">
<object class="GtkListStore" id="file_format_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name mimeType -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Markdown</col>
<col id="1" translatable="yes">text/markdown</col>
<col id="2" translatable="yes">text-x-generic</col>
</row>
<row>
<col id="0" translatable="yes">Folder</col>
<col id="1" translatable="yes">directory</col>
<col id="2" translatable="yes">folder</col>
</row>
<row>
<col id="0" translatable="yes">OPML</col>
<col id="1" translatable="yes">text/opml</col>
<col id="2" translatable="yes">text-x-generic-template</col>
</row>
<row>
<col id="0" translatable="yes">Mind Map</col>
<col id="1" translatable="yes">text/mind-map</col>
<col id="2" translatable="yes">text-x-generic-template</col>
</row>
</data>
</object>
<object class="GtkTreeStore" id="file_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeStore" id="under_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
</object>
<object class="HdyWindow" id="import_window">
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
@ -39,12 +87,12 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="HdyHeaderBar">
<object class="HdyHeaderBar" id="header_bar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Import</property>
<child>
<object class="GtkButton">
<object class="GtkButton" id="back">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
@ -58,7 +106,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</object>
</child>
<child>
<object class="GtkButton">
<object class="GtkButton" id="forward">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
@ -85,7 +133,7 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
<child>
<object class="HdyLeaflet">
<object class="HdyLeaflet" id="preview_leaflet">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
@ -366,6 +414,9 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
</object>
<packing>
<property name="name">settings_box</property>
</packing>
</child>
<child>
<object class="GtkBox">
@ -609,6 +660,9 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</packing>
</child>
</object>
<packing>
<property name="name">preview_box</property>
</packing>
</child>
</object>
<packing>
@ -620,52 +674,4 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
</object>
</child>
</object>
<object class="GtkListStore" id="file_format_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name mimeType -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Markdown</col>
<col id="1" translatable="yes">text/markdown</col>
<col id="2" translatable="yes">text-x-generic</col>
</row>
<row>
<col id="0" translatable="yes">Folder</col>
<col id="1" translatable="yes">directory</col>
<col id="2" translatable="yes">folder</col>
</row>
<row>
<col id="0" translatable="yes">OPML</col>
<col id="1" translatable="yes">text/opml</col>
<col id="2" translatable="yes">text-x-generic-template</col>
</row>
<row>
<col id="0" translatable="yes">Mind Map</col>
<col id="1" translatable="yes">text/mind-map</col>
<col id="2" translatable="yes">text-x-generic-template</col>
</row>
</data>
</object>
<object class="GtkTreeStore" id="file_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeStore" id="under_store">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name icon -->
<column type="gchararray"/>
</columns>
</object>
</interface>