Opening and template widget

This commit is contained in:
Olivier Keshavjee 2015-06-23 18:22:39 +02:00
parent c2707cf089
commit 961ec8cfe9
10 changed files with 1120 additions and 688 deletions

View file

@ -1,5 +1,6 @@
FORMS += ../src/ui/mainWindow.ui
FORMS += ../src/ui/settings.ui
FORMS += ../src/ui/welcome_ui.ui
FORMS += ../src/ui/sldImportance_ui.ui
FORMS += ../src/ui/editors/editorWidget_ui.ui
@ -15,6 +16,7 @@ SOURCES += ../src/settingsWindow.py
SOURCES += ../src/ui/helpLabel.py
SOURCES += ../src/ui/sldImportance.py
SOURCES += ../src/ui/welcome.py
SOURCES += ../src/ui/editors/editorWidget.py
SOURCES += ../src/ui/editors/fullScreenEditor.py

View file

@ -36,10 +36,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.setupMoreUi()
# Welcome
self.treeWelcome.expandAll()
self.loadRecents()
self.btnWelcomeOpen.clicked.connect(self.openFile)
self.actOpen.triggered.connect(self.openFile)
self.welcome.updateValues()
#self.welcome.btnCreate.clicked.connect
self.stack.setCurrentIndex(0)
# Word count
self.mprWordCount = QSignalMapper(self)
@ -72,110 +71,25 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.cmbSummary.setCurrentIndex(0)
self.cmbSummary.currentIndexChanged.emit(0)
# Données
self.mdlFlatData = QStandardItemModel(2, 8)
# Persos
self.mdlPersos = QStandardItemModel(0, 0)
#self.mdlPersosProxy = None # persosProxyModel() # None
self.mdlPersosProxy = persosProxyModel(self)
self.mdlPersosInfos = QStandardItemModel(1, 0)
self.mdlPersosInfos.insertColumn(0, [QStandardItem("ID")])
self.mdlPersosInfos.setHorizontalHeaderLabels(["Description"])
# Labels
self.mdlLabels = QStandardItemModel()
for color, text in [
(Qt.transparent, ""),
(Qt.yellow, self.tr("Idea")),
(Qt.green, self.tr("Note")),
(Qt.blue, self.tr("Chapter")),
(Qt.red, self.tr("Scene")),
(Qt.cyan, self.tr("Research"))
]:
self.mdlLabels.appendRow(QStandardItem(iconFromColor(color), text))
# Status
self.mdlStatus = QStandardItemModel()
for text in [
"",
self.tr("TODO"),
self.tr("First draft"),
self.tr("Second draft"),
self.tr("Final")
]:
self.mdlStatus.appendRow(QStandardItem(text))
# Plot
self.mdlPlots = plotModel()
# Outline
self.mdlOutline = outlineModel()
# Main Menu
for i in [self.actSave, self.actSaveAs, self.actCloseProject,
self.menuEdit, self.menuMode, self.menuView, self.menuTools,
self.menuHelp]:
i.setEnabled(False)
self.actOpen.triggered.connect(self.welcome.openFile)
self.actSave.triggered.connect(self.saveDatas)
self.actSaveAs.triggered.connect(self.welcome.saveAsFile)
self.actLabels.triggered.connect(self.settingsLabel)
self.actStatus.triggered.connect(self.settingsStatus)
self.actSettings.triggered.connect(self.settingsWindow)
self.actCloseProject.triggered.connect(self.closeProject)
self.actQuit.triggered.connect(self.close)
self.generateViewMenu()
#Debug
self.mdlFlatData.setVerticalHeaderLabels(["Infos générales", "Summary"])
self.tblDebugFlatData.setModel(self.mdlFlatData)
self.tblDebugPersos.setModel(self.mdlPersos)
self.tblDebugPersosInfos.setModel(self.mdlPersosInfos)
self.tblDebugPlots.setModel(self.mdlPlots)
self.tblDebugPlotsPersos.setModel(self.mdlPlots)
self.tblDebugSubPlots.setModel(self.mdlPlots)
self.tblDebugPlots.selectionModel().currentChanged.connect(
lambda: self.tblDebugPlotsPersos.setRootIndex(self.mdlPlots.index(
self.tblDebugPlots.selectionModel().currentIndex().row(),
Plot.persos.value)))
self.tblDebugPlots.selectionModel().currentChanged.connect(
lambda: self.tblDebugSubPlots.setRootIndex(self.mdlPlots.index(
self.tblDebugPlots.selectionModel().currentIndex().row(),
Plot.subplots.value)))
self.treeDebugOutline.setModel(self.mdlOutline)
self.lstDebugLabels.setModel(self.mdlLabels)
self.lstDebugStatus.setModel(self.mdlStatus)
#self.loadProject(os.path.join(appPath(), "test_project.zip"))
###############################################################################
# WELCOME
###############################################################################
def loadRecents(self):
sttgns = QSettings()
if sttgns.contains("recentFiles"):
lst = sttgns.value("recentFiles")
self.menuRecents.clear()
for f in lst:
name = os.path.split(f)[1]
a = QAction(name, self)
a.setData(f)
a.triggered.connect(self.loadRecentFile)
self.menuRecents.addAction(a)
self.btnWelcomeRecent.setMenu(self.menuRecents)
def openFile(self):
filename = QFileDialog.getOpenFileName(self,
self.tr("Open project"),
".",
self.tr("Manuskript project (*.msk)"))[0]
if filename:
self.loadProject(filename)
###############################################################################
# SUMMARY
###############################################################################
@ -387,18 +301,31 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self._updatingSubPlot = False
###############################################################################
# GENERAL AKA UNSORTED
# LOAD AND SAVE
###############################################################################
def loadRecentFile(self):
act = self.sender()
self.loadProject(act.data())
def loadProject(self, project):
def loadProject(self, project, loadFromFile=True):
"""Loads the project ``project``.
If ``loadFromFile`` is False, then it does not load datas from file.
It assumes that the datas have been populated in a different way."""
if loadFromFile and not os.path.exists(project):
print(self.tr("The file {} does not exist. Try again.").format(project))
self.statusBar().showMessage(
self.tr("The file {} does not exist. Try again.").format(project),
5000)
return
self.currentProject = project
# Load empty settings
import settings
QSettings().setValue("lastProject", project)
# Load data
self.loadDatas()
if loadFromFile:
self.loadEmptyDatas()
self.loadDatas()
self.makeConnections()
# Load settings
@ -432,6 +359,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.saveTimerNoChanges.setInterval(settings.autoSaveNoChangesDelay
* 1000)
self.saveTimerNoChanges.setSingleShot(True)
self.mdlFlatData.dataChanged.connect(self.startTimerNoChanges)
self.mdlOutline.dataChanged.connect(self.startTimerNoChanges)
self.mdlPersos.dataChanged.connect(self.startTimerNoChanges)
self.mdlPersosInfos.dataChanged.connect(self.startTimerNoChanges)
@ -450,25 +378,188 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Stuff
self.checkPersosID()
# Adds header labels
self.mdlPersos.setHorizontalHeaderLabels([i.name for i in Perso])
# Save recent files in settings
sttgns = QSettings()
if sttgns.contains("recentFiles"):
recentFiles = sttgns.value("recentFiles")
else:
recentFiles = []
while project in recentFiles:
recentFiles.remove(project)
recentFiles.insert(0, project)
recentFiles = recentFiles[:10]
sttgns.setValue("recentFiles", recentFiles)
# Show main Window
self.stack.setCurrentIndex(1)
def closeProject(self):
# Save datas
self.saveDatas()
self.currentProject = None
QSettings().setValue("lastProject", "")
# Clear datas
self.loadEmptyDatas()
self.saveTimer.stop()
# UI
for i in [self.actSave, self.actSaveAs, self.actCloseProject,
self.menuEdit, self.menuMode, self.menuView, self.menuTools,
self.menuHelp]:
i.setEnabled(False)
# Reload recent files
self.welcome.updateValues()
# Show welcome dialog
self.stack.setCurrentIndex(0)
def readSettings(self):
# Load State and geometry
sttgns = QSettings(qApp.organizationName(), qApp.applicationName())
if sttgns.contains("geometry"):
self.restoreGeometry(sttgns.value("geometry"))
if sttgns.contains("windowState"):
self.restoreState(sttgns.value("windowState"))
def closeEvent(self, event):
# Save State and geometry
sttgns = QSettings(qApp.organizationName(), qApp.applicationName())
sttgns.setValue("geometry", self.saveGeometry())
sttgns.setValue("windowState", self.saveState())
# Specific settings to save before quitting
settings.lastTab = self.tabMain.currentIndex()
if self.currentProject:
# Remembering the current item
if len(self.treeRedacOutline.selectedIndexes()) == 0:
sel = QModelIndex()
else:
sel = self.treeRedacOutline.currentIndex()
settings.lastIndex = self.mdlOutline.pathToIndex(sel)
# Save data from models
if self.currentProject and settings.saveOnQuit:
self.saveDatas()
# closeEvent
QMainWindow.closeEvent(self, event)
def startTimerNoChanges(self):
if settings.autoSaveNoChanges:
self.saveTimerNoChanges.start()
def saveDatas(self, projectName=None):
"""Saves the current project (in self.currentProject).
If ``projectName`` is given, currentProject becomes projectName.
In other words, it "saves as...".
"""
if projectName:
self.currentProject = projectName
QSettings().setValue("lastProject", projectName)
# Saving
files = []
files.append((saveStandardItemModelXML(self.mdlFlatData),
"flatModel.xml"))
files.append((saveStandardItemModelXML(self.mdlPersos),
"perso.xml"))
files.append((saveStandardItemModelXML(self.mdlPersosInfos),
"persoInfos.xml"))
files.append((saveStandardItemModelXML(self.mdlLabels),
"labels.xml"))
files.append((saveStandardItemModelXML(self.mdlStatus),
"status.xml"))
files.append((saveStandardItemModelXML(self.mdlPlots),
"plots.xml"))
files.append((self.mdlOutline.saveToXML(),
"outline.xml"))
files.append((settings.save(),
"settings.pickle"))
saveFilesToZip(files, self.currentProject)
# Giving some feedback
print(self.tr("Project {} saved.").format(self.currentProject))
self.statusBar().showMessage(
self.tr("Project {} saved.").format(self.currentProject), 5000)
def loadEmptyDatas(self):
self.mdlFlatData = QStandardItemModel()
self.mdlPersos = QStandardItemModel()
self.mdlPersosProxy = persosProxyModel(self)
self.mdlPersosInfos = QStandardItemModel()
self.mdlLabels = QStandardItemModel()
self.mdlStatus = QStandardItemModel()
self.mdlPlots = plotModel()
self.mdlOutline = outlineModel()
def loadDatas(self):
# Loading
files = loadFilesFromZip(self.currentProject)
errors = []
if "flatModel.xml" in files:
loadStandardItemModelXML(self.mdlFlatData,
files["flatModel.xml"], fromString=True)
else:
errors.append("flatModel.xml")
if "perso.xml" in files:
loadStandardItemModelXML(self.mdlPersos,
files["perso.xml"], fromString=True)
else:
errors.append("perso.xml")
if "persoInfos.xml" in files:
loadStandardItemModelXML(self.mdlPersosInfos,
files["persoInfos.xml"], fromString=True)
else:
errors.append("perso.xml")
if "labels.xml" in files:
loadStandardItemModelXML(self.mdlLabels,
files["labels.xml"], fromString=True)
else:
errors.append("perso.xml")
if "status.xml" in files:
loadStandardItemModelXML(self.mdlStatus,
files["status.xml"], fromString=True)
else:
errors.append("perso.xml")
if "plots.xml" in files:
loadStandardItemModelXML(self.mdlPlots,
files["plots.xml"], fromString=True)
else:
errors.append("perso.xml")
if "outline.xml" in files:
self.mdlOutline.loadFromXML(files["outline.xml"], fromString=True)
else:
errors.append("perso.xml")
if "settings.pickle" in files:
settings.load(files["settings.pickle"], fromString=True)
else:
errors.append("perso.xml")
# Giving some feedback
if not errors:
print(self.tr("Project {} loaded.").format(self.currentProject))
self.statusBar().showMessage(
self.tr("Project {} loaded.").format(self.currentProject), 5000)
else:
print(self.tr("Project {} loaded with some errors:").format(self.currentProject))
for e in errors:
print(self.tr(" * {} wasn't found in project file.").format(e))
self.statusBar().showMessage(
self.tr("Project {} loaded with some errors.").format(self.currentProject), 5000)
###############################################################################
# MAIN CONNECTIONS
###############################################################################
def makeConnections(self):
@ -631,99 +722,31 @@ class MainWindow(QMainWindow, Ui_MainWindow):
lambda v: self.redacEditor.setFolderView("cork"))
self.btnRedacFolderOutline.clicked.connect(
lambda v: self.redacEditor.setFolderView("outline"))
def readSettings(self):
# Load State and geometry
sttgns = QSettings(qApp.organizationName(), qApp.applicationName())
if sttgns.contains("geometry"):
self.restoreGeometry(sttgns.value("geometry"))
if sttgns.contains("windowState"):
self.restoreState(sttgns.value("windowState"))
def closeEvent(self, event):
# Save State and geometry
sttgns = QSettings(qApp.organizationName(), qApp.applicationName())
sttgns.setValue("geometry", self.saveGeometry())
sttgns.setValue("windowState", self.saveState())
# Specific settings to save before quitting
settings.lastTab = self.tabMain.currentIndex()
if len(self.treeRedacOutline.selectedIndexes()) == 0:
sel = QModelIndex()
else:
sel = self.treeRedacOutline.currentIndex()
settings.lastIndex = self.mdlOutline.pathToIndex(sel)
# Save data from models
if self.currentProject and settings.saveOnQuit:
self.saveDatas()
# closeEvent
QMainWindow.closeEvent(self, event)
def startTimerNoChanges(self):
if settings.autoSaveNoChanges:
self.saveTimerNoChanges.start()
def saveDatas(self):
# Saving
files = []
files.append((saveStandardItemModelXML(self.mdlFlatData),
"flatModel.xml"))
files.append((saveStandardItemModelXML(self.mdlPersos),
"perso.xml"))
files.append((saveStandardItemModelXML(self.mdlPersosInfos),
"persoInfos.xml"))
files.append((saveStandardItemModelXML(self.mdlLabels),
"labels.xml"))
files.append((saveStandardItemModelXML(self.mdlStatus),
"status.xml"))
files.append((saveStandardItemModelXML(self.mdlPlots),
"plots.xml"))
files.append((self.mdlOutline.saveToXML(),
"outline.xml"))
files.append((settings.save(),
"settings.pickle"))
saveFilesToZip(files, self.currentProject)
# Giving some feedback
print(self.tr("Project {} saved.").format(self.currentProject))
self.statusBar().showMessage(
self.tr("Project {} saved.").format(self.currentProject), 5000)
def loadDatas(self):
# Loading
files = loadFilesFromZip(self.currentProject)
if "flatModel.xml" in files:
loadStandardItemModelXML(self.mdlFlatData,
files["flatModel.xml"], fromString=True)
if "perso.xml" in files:
loadStandardItemModelXML(self.mdlPersos,
files["perso.xml"], fromString=True)
if "persoInfos.xml" in files:
loadStandardItemModelXML(self.mdlPersosInfos,
files["persoInfos.xml"], fromString=True)
if "labels.xml" in files:
loadStandardItemModelXML(self.mdlLabels,
files["labels.xml"], fromString=True)
if "status.xml" in files:
loadStandardItemModelXML(self.mdlStatus,
files["status.xml"], fromString=True)
if "plots.xml" in files:
loadStandardItemModelXML(self.mdlPlots,
files["plots.xml"], fromString=True)
if "outline.xml" in files:
self.mdlOutline.loadFromXML(files["outline.xml"], fromString=True)
if "settings.pickle" in files:
settings.load(files["settings.pickle"], fromString=True)
# Giving some feedback
print(self.tr("Project {} loaded.").format(self.currentProject))
self.statusBar().showMessage(
self.tr("Project {} loaded.").format(self.currentProject), 5000)
#Debug
self.mdlFlatData.setVerticalHeaderLabels(["Infos générales", "Summary"])
self.tblDebugFlatData.setModel(self.mdlFlatData)
self.tblDebugPersos.setModel(self.mdlPersos)
self.tblDebugPersosInfos.setModel(self.mdlPersosInfos)
self.tblDebugPlots.setModel(self.mdlPlots)
self.tblDebugPlotsPersos.setModel(self.mdlPlots)
self.tblDebugSubPlots.setModel(self.mdlPlots)
self.tblDebugPlots.selectionModel().currentChanged.connect(
lambda: self.tblDebugPlotsPersos.setRootIndex(self.mdlPlots.index(
self.tblDebugPlots.selectionModel().currentIndex().row(),
Plot.persos.value)))
self.tblDebugPlots.selectionModel().currentChanged.connect(
lambda: self.tblDebugSubPlots.setRootIndex(self.mdlPlots.index(
self.tblDebugPlots.selectionModel().currentIndex().row(),
Plot.subplots.value)))
self.treeDebugOutline.setModel(self.mdlOutline)
self.lstDebugLabels.setModel(self.mdlLabels)
self.lstDebugStatus.setModel(self.mdlStatus)
self.mdlPersos.setHorizontalHeaderLabels([i.name for i in Perso])
###############################################################################
# GENERAL AKA UNSORTED
###############################################################################
def clickCycle(self, i):
if i == 0: # step 2 - paragraph summary
@ -847,6 +870,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
lambda: self.redacEditor.showFullscreen(
self.treeRedacOutline.currentIndex()))
###############################################################################
# SPELLCHECK
###############################################################################
def updateMenuDict(self):
if not enchant:

View file

@ -159,4 +159,5 @@ def load(string, fromString=False):
if "fullScreenTheme" in allSettings:
global fullScreenTheme
fullScreenTheme = allSettings["fullScreenTheme"]
fullScreenTheme = allSettings["fullScreenTheme"]

View file

@ -47,6 +47,9 @@ class settingsWindow(QWidget, Ui_Settings):
self.chkSaveOnQuit.stateChanged.connect(self.saveSettingsChanged)
self.txtAutoSave.textEdited.connect(self.saveSettingsChanged)
self.txtAutoSaveNoChanges.textEdited.connect(self.saveSettingsChanged)
autoLoad, last = self.mw.welcome.getAutoLoadValues()
self.chkAutoLoad.setChecked(autoLoad)
self.chkAutoLoad.stateChanged.connect(self.saveSettingsChanged)
# Views
self.tabViews.setCurrentIndex(0)
@ -130,8 +133,8 @@ class settingsWindow(QWidget, Ui_Settings):
def setStyle(self, style):
#Save style to Qt Settings
settings = QSettings(qApp.organizationName(), qApp.applicationName())
settings.setValue("applicationStyle", style)
sttgs = QSettings(qApp.organizationName(), qApp.applicationName())
sttgs.setValue("applicationStyle", style)
qApp.setStyle(style)
def saveSettingsChanged(self):
@ -140,6 +143,10 @@ class settingsWindow(QWidget, Ui_Settings):
if self.txtAutoSaveNoChanges.text() in ["", "0"]:
self.txtAutoSaveNoChanges.setText("1")
sttgs = QSettings()
sttgs.setValue("autoLoad", True if self.chkAutoLoad.checkState() else False)
sttgs.sync()
settings.autoSave = True if self.chkAutoSave.checkState() else False
settings.autoSaveNoChanges = True if self.chkAutoSaveNoChanges.checkState() else False
settings.saveOnQuit = True if self.chkSaveOnQuit.checkState() else False

View file

@ -22,122 +22,20 @@ class Ui_MainWindow(object):
self.stack.setObjectName("stack")
self.page_5 = QtWidgets.QWidget()
self.page_5.setObjectName("page_5")
self.verticalLayout_33 = QtWidgets.QVBoxLayout(self.page_5)
self.verticalLayout_33.setObjectName("verticalLayout_33")
spacerItem = QtWidgets.QSpacerItem(20, 210, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_33.addItem(spacerItem)
self.horizontalLayout_35 = QtWidgets.QHBoxLayout()
self.horizontalLayout_35.setObjectName("horizontalLayout_35")
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_35.addItem(spacerItem1)
self.frame_2 = QtWidgets.QFrame(self.page_5)
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.verticalLayout_32 = QtWidgets.QVBoxLayout(self.frame_2)
self.verticalLayout_32.setObjectName("verticalLayout_32")
self.horizontalLayout_23 = QtWidgets.QHBoxLayout()
self.horizontalLayout_23.setObjectName("horizontalLayout_23")
self.treeWelcome = QtWidgets.QTreeWidget(self.frame_2)
self.treeWelcome.setRootIsDecorated(False)
self.treeWelcome.setObjectName("treeWelcome")
item_0 = QtWidgets.QTreeWidgetItem(self.treeWelcome)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item_0.setFont(0, font)
brush = QtGui.QBrush(QtGui.QColor(230, 230, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
item_0.setBackground(0, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 128))
brush.setStyle(QtCore.Qt.NoBrush)
item_0.setForeground(0, brush)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_0 = QtWidgets.QTreeWidgetItem(self.treeWelcome)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item_0.setFont(0, font)
brush = QtGui.QBrush(QtGui.QColor(230, 230, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
item_0.setBackground(0, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 128))
brush.setStyle(QtCore.Qt.NoBrush)
item_0.setForeground(0, brush)
self.treeWelcome.header().setVisible(False)
self.horizontalLayout_23.addWidget(self.treeWelcome)
self.verticalLayout_31 = QtWidgets.QVBoxLayout()
self.verticalLayout_31.setObjectName("verticalLayout_31")
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_31.addItem(spacerItem2)
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout = QtWidgets.QGridLayout(self.page_5)
self.gridLayout.setObjectName("gridLayout")
self.spinBox = QtWidgets.QSpinBox(self.frame_2)
self.spinBox.setMaximum(999)
self.spinBox.setProperty("value", 20)
self.spinBox.setObjectName("spinBox")
self.gridLayout.addWidget(self.spinBox, 0, 1, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit(self.frame_2)
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout.addWidget(self.lineEdit_4, 0, 2, 1, 1)
self.label_32 = QtWidgets.QLabel(self.frame_2)
self.label_32.setObjectName("label_32")
self.gridLayout.addWidget(self.label_32, 1, 0, 1, 1)
self.spinBox_2 = QtWidgets.QSpinBox(self.frame_2)
self.spinBox_2.setMaximum(999)
self.spinBox_2.setProperty("value", 5)
self.spinBox_2.setObjectName("spinBox_2")
self.gridLayout.addWidget(self.spinBox_2, 1, 1, 1, 1)
self.lineEdit_6 = QtWidgets.QLineEdit(self.frame_2)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout.addWidget(self.lineEdit_6, 1, 2, 1, 1)
self.label_33 = QtWidgets.QLabel(self.frame_2)
self.label_33.setObjectName("label_33")
self.gridLayout.addWidget(self.label_33, 2, 0, 1, 1)
self.spinBox_3 = QtWidgets.QSpinBox(self.frame_2)
self.spinBox_3.setMaximum(99999)
self.spinBox_3.setProperty("value", 500)
self.spinBox_3.setObjectName("spinBox_3")
self.gridLayout.addWidget(self.spinBox_3, 2, 1, 1, 1)
self.label_30 = QtWidgets.QLabel(self.frame_2)
self.label_30.setObjectName("label_30")
self.gridLayout.addWidget(self.label_30, 2, 2, 1, 1)
self.verticalLayout_31.addLayout(self.gridLayout)
self.horizontalLayout_23.addLayout(self.verticalLayout_31)
self.verticalLayout_32.addLayout(self.horizontalLayout_23)
self.line_4 = QtWidgets.QFrame(self.frame_2)
self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_4.setObjectName("line_4")
self.verticalLayout_32.addWidget(self.line_4)
self.checkBox = QtWidgets.QCheckBox(self.frame_2)
self.checkBox.setChecked(True)
self.checkBox.setObjectName("checkBox")
self.verticalLayout_32.addWidget(self.checkBox)
self.horizontalLayout_20 = QtWidgets.QHBoxLayout()
self.horizontalLayout_20.setObjectName("horizontalLayout_20")
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_20.addItem(spacerItem3)
self.btnWelcomeOpen = QtWidgets.QPushButton(self.frame_2)
self.btnWelcomeOpen.setObjectName("btnWelcomeOpen")
self.horizontalLayout_20.addWidget(self.btnWelcomeOpen)
self.btnWelcomeRecent = QtWidgets.QPushButton(self.frame_2)
self.btnWelcomeRecent.setObjectName("btnWelcomeRecent")
self.horizontalLayout_20.addWidget(self.btnWelcomeRecent)
self.btnWelcomeCreate = QtWidgets.QPushButton(self.frame_2)
self.btnWelcomeCreate.setObjectName("btnWelcomeCreate")
self.horizontalLayout_20.addWidget(self.btnWelcomeCreate)
self.verticalLayout_32.addLayout(self.horizontalLayout_20)
self.horizontalLayout_35.addWidget(self.frame_2)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_35.addItem(spacerItem4)
self.verticalLayout_33.addLayout(self.horizontalLayout_35)
spacerItem5 = QtWidgets.QSpacerItem(20, 209, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_33.addItem(spacerItem5)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 1, 2, 1, 1)
self.welcome = welcome(self.page_5)
self.welcome.setMinimumSize(QtCore.QSize(200, 200))
self.welcome.setObjectName("welcome")
self.gridLayout.addWidget(self.welcome, 1, 1, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem2, 0, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem3, 2, 1, 1, 1)
self.stack.addWidget(self.page_5)
self.page_4 = QtWidgets.QWidget()
self.page_4.setObjectName("page_4")
@ -185,8 +83,8 @@ class Ui_MainWindow(object):
self.txtGeneralVolume = lineEditView(self.grpBookInfos)
self.txtGeneralVolume.setObjectName("txtGeneralVolume")
self.horizontalLayout_25.addWidget(self.txtGeneralVolume)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_25.addItem(spacerItem6)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_25.addItem(spacerItem4)
self.formLayout_3.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_25)
self.label_14 = QtWidgets.QLabel(self.grpBookInfos)
self.label_14.setObjectName("label_14")
@ -274,8 +172,8 @@ class Ui_MainWindow(object):
self.lblSummaryWCSentance.setText("")
self.lblSummaryWCSentance.setObjectName("lblSummaryWCSentance")
self.verticalLayout_5.addWidget(self.lblSummaryWCSentance)
spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_5.addItem(spacerItem7)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_5.addItem(spacerItem5)
self.tabSummary.addWidget(self.tabSummaryPage1)
self.tabSummaryPage2 = QtWidgets.QWidget()
self.tabSummaryPage2.setObjectName("tabSummaryPage2")
@ -295,8 +193,8 @@ class Ui_MainWindow(object):
self.txtSummarySentance_2.setReadOnly(True)
self.txtSummarySentance_2.setObjectName("txtSummarySentance_2")
self.verticalLayout.addWidget(self.txtSummarySentance_2)
spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem8)
spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem6)
self.horizontalLayout_4.addLayout(self.verticalLayout)
self.line = QtWidgets.QFrame(self.tabSummaryPage2)
self.line.setFrameShape(QtWidgets.QFrame.VLine)
@ -315,8 +213,8 @@ class Ui_MainWindow(object):
self.lblSummaryWCPara.setText("")
self.lblSummaryWCPara.setObjectName("lblSummaryWCPara")
self.verticalLayout_2.addWidget(self.lblSummaryWCPara)
spacerItem9 = QtWidgets.QSpacerItem(20, 264, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem9)
spacerItem7 = QtWidgets.QSpacerItem(20, 264, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem7)
self.horizontalLayout_4.addLayout(self.verticalLayout_2)
self.tabSummary.addWidget(self.tabSummaryPage2)
self.tabSummaryPage3 = QtWidgets.QWidget()
@ -332,8 +230,8 @@ class Ui_MainWindow(object):
self.txtSummaryPara_2.setReadOnly(True)
self.txtSummaryPara_2.setObjectName("txtSummaryPara_2")
self.verticalLayout_6.addWidget(self.txtSummaryPara_2)
spacerItem10 = QtWidgets.QSpacerItem(20, 264, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_6.addItem(spacerItem10)
spacerItem8 = QtWidgets.QSpacerItem(20, 264, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_6.addItem(spacerItem8)
self.horizontalLayout_7.addLayout(self.verticalLayout_6)
self.line_2 = QtWidgets.QFrame(self.tabSummaryPage3)
self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
@ -390,8 +288,8 @@ class Ui_MainWindow(object):
self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.tabSummary)
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_5.addItem(spacerItem11)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_5.addItem(spacerItem9)
self.btnStepThree = QtWidgets.QPushButton(self.lytTabSummary)
icon = QtGui.QIcon.fromTheme("go-next")
self.btnStepThree.setIcon(icon)
@ -508,8 +406,8 @@ class Ui_MainWindow(object):
self.formLayout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummaryPara)
self.horizontalLayout_21 = QtWidgets.QHBoxLayout()
self.horizontalLayout_21.setObjectName("horizontalLayout_21")
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_21.addItem(spacerItem12)
spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_21.addItem(spacerItem10)
self.btnStepFour = QtWidgets.QPushButton(self.infos)
icon = QtGui.QIcon.fromTheme("go-next")
self.btnStepFour.setIcon(icon)
@ -544,8 +442,8 @@ class Ui_MainWindow(object):
self.verticalLayout_17.addWidget(self.txtPersoSummaryFull)
self.horizontalLayout_22 = QtWidgets.QHBoxLayout()
self.horizontalLayout_22.setObjectName("horizontalLayout_22")
spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_22.addItem(spacerItem13)
spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_22.addItem(spacerItem11)
self.btnStepSix = QtWidgets.QPushButton(self.tab_11)
icon = QtGui.QIcon.fromTheme("go-next")
self.btnStepSix.setIcon(icon)
@ -594,8 +492,8 @@ class Ui_MainWindow(object):
self.lineEdit = QtWidgets.QLineEdit(self.tab_12)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout_9.addWidget(self.lineEdit)
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_9.addItem(spacerItem14)
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_9.addItem(spacerItem12)
self.btnStepEight = QtWidgets.QPushButton(self.tab_12)
icon = QtGui.QIcon.fromTheme("go-next")
self.btnStepEight.setIcon(icon)
@ -688,8 +586,8 @@ class Ui_MainWindow(object):
self.verticalLayout_12.addWidget(self.lstPlotPerso)
self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
self.horizontalLayout_16.setObjectName("horizontalLayout_16")
spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_16.addItem(spacerItem15)
spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_16.addItem(spacerItem13)
self.btnAddPlotPerso = QtWidgets.QPushButton(self.infos_2)
self.btnAddPlotPerso.setText("")
icon = QtGui.QIcon.fromTheme("list-add")
@ -750,8 +648,8 @@ class Ui_MainWindow(object):
self.btnRmSubPlot.setIcon(icon)
self.btnRmSubPlot.setObjectName("btnRmSubPlot")
self.horizontalLayout_17.addWidget(self.btnRmSubPlot)
spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_17.addItem(spacerItem16)
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_17.addItem(spacerItem14)
self.btnShowSubPlotSummary = QtWidgets.QPushButton(self.tab_15)
self.btnShowSubPlotSummary.setText("")
icon = QtGui.QIcon.fromTheme("text-x-generic")
@ -816,6 +714,7 @@ class Ui_MainWindow(object):
self.lstOutlinePlots.setDragEnabled(True)
self.lstOutlinePlots.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly)
self.lstOutlinePlots.setObjectName("lstOutlinePlots")
self.lstOutlinePlots.headerItem().setText(0, "1")
self.lstOutlinePlots.header().setVisible(False)
self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH)
self.layoutWidget.setObjectName("layoutWidget")
@ -862,8 +761,8 @@ class Ui_MainWindow(object):
self.btnPlanRemoveItem.setIcon(icon)
self.btnPlanRemoveItem.setObjectName("btnPlanRemoveItem")
self.horizontalLayout_18.addWidget(self.btnPlanRemoveItem)
spacerItem17 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_18.addItem(spacerItem17)
spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_18.addItem(spacerItem15)
self.btnPlanShowDetails = QtWidgets.QPushButton(self.layoutWidget)
self.btnPlanShowDetails.setText("")
icon = QtGui.QIcon.fromTheme("text-x-generic")
@ -910,8 +809,8 @@ class Ui_MainWindow(object):
self.btnRedacRemoveItem.setIcon(icon)
self.btnRedacRemoveItem.setObjectName("btnRedacRemoveItem")
self.horizontalLayout_31.addWidget(self.btnRedacRemoveItem)
spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_31.addItem(spacerItem18)
spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_31.addItem(spacerItem16)
self.verticalLayout_30.addLayout(self.horizontalLayout_31)
self.layoutWidget1 = QtWidgets.QWidget(self.splitterRedac)
self.layoutWidget1.setObjectName("layoutWidget1")
@ -958,8 +857,8 @@ class Ui_MainWindow(object):
self.sldCorkSizeFactor.setOrientation(QtCore.Qt.Horizontal)
self.sldCorkSizeFactor.setObjectName("sldCorkSizeFactor")
self.horizontalLayout_19.addWidget(self.sldCorkSizeFactor)
spacerItem19 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_19.addItem(spacerItem19)
spacerItem17 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_19.addItem(spacerItem17)
self.lblRedacWC = QtWidgets.QLabel(self.layoutWidget1)
self.lblRedacWC.setMinimumSize(QtCore.QSize(10, 0))
self.lblRedacWC.setText("")
@ -1228,26 +1127,6 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
self.treeWelcome.headerItem().setText(0, _translate("MainWindow", "1"))
__sortingEnabled = self.treeWelcome.isSortingEnabled()
self.treeWelcome.setSortingEnabled(False)
self.treeWelcome.topLevelItem(0).setText(0, _translate("MainWindow", "Templates"))
self.treeWelcome.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "Empty"))
self.treeWelcome.topLevelItem(0).child(1).setText(0, _translate("MainWindow", "Novel"))
self.treeWelcome.topLevelItem(0).child(2).setText(0, _translate("MainWindow", "Novella"))
self.treeWelcome.topLevelItem(0).child(3).setText(0, _translate("MainWindow", "Short Story"))
self.treeWelcome.topLevelItem(0).child(4).setText(0, _translate("MainWindow", "Research paper"))
self.treeWelcome.topLevelItem(1).setText(0, _translate("MainWindow", "Demo projects"))
self.treeWelcome.setSortingEnabled(__sortingEnabled)
self.lineEdit_4.setText(_translate("MainWindow", "Chapter"))
self.label_32.setText(_translate("MainWindow", "of"))
self.lineEdit_6.setText(_translate("MainWindow", "Scene"))
self.label_33.setText(_translate("MainWindow", "of"))
self.label_30.setText(_translate("MainWindow", "words each."))
self.checkBox.setText(_translate("MainWindow", "Next time, automatically open last project"))
self.btnWelcomeOpen.setText(_translate("MainWindow", "Open..."))
self.btnWelcomeRecent.setText(_translate("MainWindow", "Recent"))
self.btnWelcomeCreate.setText(_translate("MainWindow", "Create"))
self.grpBookInfos.setTitle(_translate("MainWindow", "Book infos"))
self.label_10.setText(_translate("MainWindow", "Title"))
self.label_11.setText(_translate("MainWindow", "Subtitle"))
@ -1372,12 +1251,13 @@ class Ui_MainWindow(object):
self.actSettings.setShortcut(_translate("MainWindow", "F8"))
self.actCloseProject.setText(_translate("MainWindow", "Close project"))
from ui.views.treeView import treeView
from ui.welcome import welcome
from ui.editors.editorWidget import editorWidget
from ui.views.outlineView import outlineView
from ui.views.basicItemView import basicItemView
from ui.views.lineEditView import lineEditView
from ui.views.textEditView import textEditView
from ui.views.basicItemView import basicItemView
from ui.sldImportance import sldImportance
from ui.views.metadataView import metadataView
from ui.editors.editorWidget import editorWidget
from ui.views.plotTreeView import plotTreeView
from ui.views.textEditView import textEditView
from ui.views.treeView import treeView

View file

@ -33,8 +33,57 @@
<number>0</number>
</property>
<widget class="QWidget" name="page_5">
<layout class="QVBoxLayout" name="verticalLayout_33">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2">
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="welcome" name="welcome" native="true">
<property name="minimumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -42,311 +91,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>210</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_35">
<item>
<spacer name="horizontalSpacer_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_32">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_23">
<item>
<widget class="QTreeWidget" name="treeWelcome">
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>1</string>
</property>
</column>
<item>
<property name="text">
<string>Templates</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="background">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>230</red>
<green>230</green>
<blue>255</blue>
</color>
</brush>
</property>
<property name="foreground">
<brush brushstyle="NoBrush">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>128</blue>
</color>
</brush>
</property>
<item>
<property name="text">
<string>Empty</string>
</property>
</item>
<item>
<property name="text">
<string>Novel</string>
</property>
</item>
<item>
<property name="text">
<string>Novella</string>
</property>
</item>
<item>
<property name="text">
<string>Short Story</string>
</property>
</item>
<item>
<property name="text">
<string>Research paper</string>
</property>
</item>
</item>
<item>
<property name="text">
<string>Demo projects</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="background">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>230</red>
<green>230</green>
<blue>255</blue>
</color>
</brush>
</property>
<property name="foreground">
<brush brushstyle="NoBrush">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>128</blue>
</color>
</brush>
</property>
</item>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_31">
<item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QSpinBox" name="spinBox">
<property name="maximum">
<number>999</number>
</property>
<property name="value">
<number>20</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="lineEdit_4">
<property name="text">
<string>Chapter</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_32">
<property name="text">
<string>of</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBox_2">
<property name="maximum">
<number>999</number>
</property>
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="lineEdit_6">
<property name="text">
<string>Scene</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_33">
<property name="text">
<string>of</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="spinBox_3">
<property name="maximum">
<number>99999</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_30">
<property name="text">
<string>words each.</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>Next time, automatically open last project</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_20">
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnWelcomeOpen">
<property name="text">
<string>Open...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnWelcomeRecent">
<property name="text">
<string>Recent</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnWelcomeCreate">
<property name="text">
<string>Create</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_14">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>209</height>
<height>40</height>
</size>
</property>
</spacer>
@ -1633,6 +1378,11 @@
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
<widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="verticalLayout_14">
@ -2403,7 +2153,9 @@
</action>
<action name="actCloseProject">
<property name="icon">
<iconset theme="window-close"/>
<iconset theme="window-close">
<normaloff/>
</iconset>
</property>
<property name="text">
<string>Close project</string>
@ -2460,6 +2212,12 @@
<extends>QTreeWidget</extends>
<header>ui.views.plotTreeView.h</header>
</customwidget>
<customwidget>
<class>welcome</class>
<extends>QWidget</extends>
<header>ui.welcome.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections>

View file

@ -10,7 +10,7 @@ class sldImportance(QWidget, Ui_sldImportance):
importanceChanged = pyqtSignal(str)
def __init__(self, parent=None):
QWidget.__init__(self)
QWidget.__init__(self, parent)
self.setupUi(self)
self._column = 0
self._updating = False

367
src/ui/welcome.py Normal file
View file

@ -0,0 +1,367 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from qt import *
from functions import *
from ui.welcome_ui import *
from models.outlineModel import *
from models.plotModel import *
from models.persosProxyModel import *
import settings
import locale
locale.setlocale(locale.LC_ALL, '')
class welcome(QWidget, Ui_welcome):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self.mw = mainWindow()
self.btnOpen.clicked.connect(self.openFile)
self.btnCreate.clicked.connect(self.createFile)
self.chkLoadLastProject.toggled.connect(self.setAutoLoad)
self.tree.itemActivated.connect(self.changeTemplate)
self.btnAddLevel.clicked.connect(self.templateAddLevel)
self.btnAddWC.clicked.connect(self.templateAddWordCount)
self.populateTemplates()
def updateValues(self):
# Auto load
autoLoad, last = self.getAutoLoadValues()
self.chkLoadLastProject.setChecked(autoLoad)
# Recent Files
self.loadRecents()
###############################################################################
# AUTOLOAD
###############################################################################
def showEvent(self, event):
"""Waiting for things to be fully loaded to start opening projects."""
QWidget.showEvent(self, event)
# Auto load last project
autoLoad, last = self.getAutoLoadValues()
if autoLoad and last:
self.mw.loadProject(last)
def getAutoLoadValues(self):
sttgns = QSettings()
if sttgns.contains("autoLoad"):
autoLoad = True if sttgns.value("autoLoad") == "true" else False
else:
autoLoad = False
if autoLoad and sttgns.contains("lastProject"):
last = sttgns.value("lastProject")
else:
last = ""
return autoLoad, last
def setAutoLoad(self, v):
QSettings().setValue("autoLoad", v)
###############################################################################
# RECENTS
###############################################################################
def loadRecents(self):
sttgns = QSettings()
if sttgns.contains("recentFiles"):
lst = sttgns.value("recentFiles")
self.mw.menuRecents.clear()
for f in lst:
name = os.path.split(f)[1]
a = QAction(name, self)
a.setData(f)
a.setStatusTip(f)
a.triggered.connect(self.loadRecentFile)
self.mw.menuRecents.addAction(a)
self.btnRecent.setMenu(self.mw.menuRecents)
def appendToRecentFiles(self, project):
sttgns = QSettings()
if sttgns.contains("recentFiles"):
recentFiles = sttgns.value("recentFiles")
else:
recentFiles = []
while project in recentFiles:
recentFiles.remove(project)
recentFiles.insert(0, project)
recentFiles = recentFiles[:10]
sttgns.setValue("recentFiles", recentFiles)
def loadRecentFile(self):
act = self.sender()
self.appendToRecentFiles(act.data())
self.mw.loadProject(act.data())
###############################################################################
# DIALOGS
###############################################################################
def openFile(self):
"""File dialog that request an existing file. For opening project."""
filename = QFileDialog.getOpenFileName(self,
self.tr("Open project"),
".",
self.tr("Manuskript project (*.msk)"))[0]
if filename:
self.appendToRecentFiles(filename)
self.mw.loadProject(filename)
def saveAsFile(self):
"""File dialog that request a file, existing or not.
Save datas to that file, which then becomes the current project."""
filename = QFileDialog.getSaveFileName(self,
self.tr("Save project as..."),
".",
self.tr("Manuskript project (*.msk)"))[0]
if filename:
self.appendToRecentFiles(filename)
self.mw.saveDatas(filename)
def createFile(self):
"""When starting a new project, ask for a place to save it.
Datas are not loaded from file, so they must be populated another way."""
filename = QFileDialog.getSaveFileName(self,
self.tr("Create New Project"),
".",
self.tr("Manuskript project (*.msk)"))[0]
if filename:
self.appendToRecentFiles(filename)
self.loadDefaultDatas()
self.mw.loadProject(filename, loadFromFile=False)
###############################################################################
# TEMPLATES
###############################################################################
def templates(self):
return [
(self.tr("Empty"), []),
(self.tr("Novel"), [
( 20, self.tr("Chapter")),
( 5, self.tr("Scene")),
( 500, None) # A line with None is word count
]),
(self.tr("Novella"), [
( 10, self.tr("Chapter")),
( 5, self.tr("Scene")),
( 500, None)
]),
(self.tr("Short Story"), [
( 10, self.tr("Scene")),
(1000, None)
]),
(self.tr("Trilogy"), [
( 3, self.tr("Book")),
( 3, self.tr("Section")),
( 10, self.tr("Chapter")),
( 5, self.tr("Scene")),
( 500, None)
]),
(self.tr("Research paper"), [
( 3, self.tr("Section")),
(1000, None)
])
]
def changeTemplate(self, item, column):
self.template = [i for i in self.templates() if i[0] == item.text(0)][0][1]
self.updateTemplate()
def updateTemplate(self):
# Clear layout
def clearLayout(l):
while l.count() != 0:
i = l.takeAt(0)
if i.widget():
i.widget().deleteLater()
if i.layout():
clearLayout(i.layout())
clearLayout(self.lytTemplate)
#self.templateLayout.addStretch()
#l = QGridLayout()
#self.templateLayout.addLayout(l)
k = 0
hasWC = False
for d in self.template:
spin = QSpinBox(self)
spin.setRange(0, 999999)
spin.setValue(d[0])
spin.valueChanged.connect(self.updateWordCount)
if d[1] != None:
txt = QLineEdit(self)
txt.setText(d[1])
else:
hasWC = True
txt = QLabel(self.tr("words each."), self)
if k != 0:
of = QLabel(self.tr("of"), self)
self.lytTemplate.addWidget(of, k, 0)
btn = QPushButton("", self)
btn.setIcon(QIcon.fromTheme("edit-delete"))
btn.setProperty("deleteRow", k)
btn.clicked.connect(self.deleteTemplateRow)
self.lytTemplate.addWidget(btn, k, 3)
self.lytTemplate.addWidget(spin, k, 1)
self.lytTemplate.addWidget(txt, k, 2)
k += 1
self.btnAddWC.setEnabled(not hasWC and len(self.template) > 0)
self.btnAddLevel.setEnabled(True)
self.lblTotal.setVisible(hasWC)
self.updateWordCount()
def templateAddLevel(self):
if len(self.template) > 0 and \
self.template[len(self.template) - 1][1] == None:
# has word cound, so insert before
self.template.insert(len(self.template) - 1, (10, self.tr("Text")))
else:
# No word count, so insert at end
self.template.append((10, self.tr("Something")))
self.updateTemplate()
def templateAddWordCount(self):
self.template.append((500, None))
self.updateTemplate()
def deleteTemplateRow(self):
btn = self.sender()
row = btn.property("deleteRow")
self.template.pop(row)
self.updateTemplate()
def updateWordCount(self):
total = 1
for s in self.findChildren(QSpinBox, QRegExp(".*"),
Qt.FindChildrenRecursively):
total = total * s.value()
if total == 1:
total = 0
self.lblTotal.setText(self.tr("<b>Total:</b> {} words (~ {} pages)").format(
locale.format("%d", total, grouping=True),
locale.format("%d", total / 250, grouping=True)
))
def addTopLevelItem(self, name):
item = QTreeWidgetItem(self.tree, [name])
item.setBackground(0, QBrush(QColor(Qt.blue).lighter(190)))
item.setForeground(0, QBrush(Qt.darkBlue))
item.setTextAlignment(0, Qt.AlignCenter)
item.setFlags(Qt.ItemIsEnabled)
f = item.font(0)
f.setBold(True)
item.setFont(0, f)
return item
def populateTemplates(self):
self.tree.clear()
self.tree.setIndentation(0)
# Add templates
item = self.addTopLevelItem(self.tr("Templates"))
templates = self.templates()
for t in templates:
sub = QTreeWidgetItem(item, [t[0]])
# Add Demo project
item = self.addTopLevelItem(self.tr("Demo projects"))
# FIXME: none yet
self.tree.expandAll()
def loadDefaultDatas(self):
# Données
self.mw.mdlFlatData = QStandardItemModel(2, 8)
# Persos
self.mw.mdlPersos = QStandardItemModel(0, 0)
#self.mdlPersosProxy = None # persosProxyModel() # None
self.mw.mdlPersosProxy = persosProxyModel(self)
self.mw.mdlPersosInfos = QStandardItemModel(1, 0)
self.mw.mdlPersosInfos.insertColumn(0, [QStandardItem("ID")])
self.mw.mdlPersosInfos.setHorizontalHeaderLabels(["Description"])
# Labels
self.mw.mdlLabels = QStandardItemModel()
for color, text in [
(Qt.transparent, ""),
(Qt.yellow, self.tr("Idea")),
(Qt.green, self.tr("Note")),
(Qt.blue, self.tr("Chapter")),
(Qt.red, self.tr("Scene")),
(Qt.cyan, self.tr("Research"))
]:
self.mw.mdlLabels.appendRow(QStandardItem(iconFromColor(color), text))
# Status
self.mw.mdlStatus = QStandardItemModel()
for text in [
"",
self.tr("TODO"),
self.tr("First draft"),
self.tr("Second draft"),
self.tr("Final")
]:
self.mw.mdlStatus.appendRow(QStandardItem(text))
# Plot
self.mw.mdlPlots = plotModel()
# Outline
self.mw.mdlOutline = outlineModel()
root = self.mw.mdlOutline.rootItem
def addElement(parent, datas):
if len(datas) == 2 and datas[1][1] == None or \
len(datas) == 1:
# Next item is word count
n = 0
for i in range(datas[0][0]):
n += 1
item = outlineItem(title="{} {}".format(
datas[0][1],
str(n)),
type="text")
if len(datas) == 2:
item.setData(Outline.setGoal.value, datas[1][0])
parent.appendChild(item)
else:
n = 0
for i in range(datas[0][0]):
n += 1
item = outlineItem(title="{} {}".format(
datas[0][1],
str(n)),
type="folder")
parent.appendChild(item)
addElement(item, datas[1:])
addElement(root, self.template)

131
src/ui/welcome_ui.py Normal file
View file

@ -0,0 +1,131 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'src/ui/welcome_ui.ui'
#
# Created by: PyQt5 UI code generator 5.4.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_welcome(object):
def setupUi(self, welcome):
welcome.setObjectName("welcome")
welcome.resize(705, 422)
self.horizontalLayout = QtWidgets.QHBoxLayout(welcome)
self.horizontalLayout.setObjectName("horizontalLayout")
self.frame_2 = QtWidgets.QFrame(welcome)
self.frame_2.setMinimumSize(QtCore.QSize(500, 0))
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.verticalLayout_32 = QtWidgets.QVBoxLayout(self.frame_2)
self.verticalLayout_32.setObjectName("verticalLayout_32")
self.horizontalLayout_23 = QtWidgets.QHBoxLayout()
self.horizontalLayout_23.setObjectName("horizontalLayout_23")
self.tree = QtWidgets.QTreeWidget(self.frame_2)
self.tree.setMaximumSize(QtCore.QSize(150, 16777215))
self.tree.setRootIsDecorated(False)
self.tree.setObjectName("tree")
item_0 = QtWidgets.QTreeWidgetItem(self.tree)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item_0.setFont(0, font)
brush = QtGui.QBrush(QtGui.QColor(230, 230, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
item_0.setBackground(0, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 128))
brush.setStyle(QtCore.Qt.NoBrush)
item_0.setForeground(0, brush)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_1 = QtWidgets.QTreeWidgetItem(item_0)
item_0 = QtWidgets.QTreeWidgetItem(self.tree)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
item_0.setFont(0, font)
brush = QtGui.QBrush(QtGui.QColor(230, 230, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
item_0.setBackground(0, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 128))
brush.setStyle(QtCore.Qt.NoBrush)
item_0.setForeground(0, brush)
self.tree.header().setVisible(False)
self.horizontalLayout_23.addWidget(self.tree)
self.templateLayout = QtWidgets.QVBoxLayout()
self.templateLayout.setObjectName("templateLayout")
self.lytTemplate = QtWidgets.QGridLayout()
self.lytTemplate.setObjectName("lytTemplate")
self.templateLayout.addLayout(self.lytTemplate)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.templateLayout.addItem(spacerItem)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.lblTotal = QtWidgets.QLabel(self.frame_2)
self.lblTotal.setText("")
self.lblTotal.setObjectName("lblTotal")
self.horizontalLayout_2.addWidget(self.lblTotal)
self.btnAddLevel = QtWidgets.QPushButton(self.frame_2)
self.btnAddLevel.setEnabled(False)
self.btnAddLevel.setObjectName("btnAddLevel")
self.horizontalLayout_2.addWidget(self.btnAddLevel)
self.btnAddWC = QtWidgets.QPushButton(self.frame_2)
self.btnAddWC.setEnabled(False)
self.btnAddWC.setObjectName("btnAddWC")
self.horizontalLayout_2.addWidget(self.btnAddWC)
self.templateLayout.addLayout(self.horizontalLayout_2)
self.horizontalLayout_23.addLayout(self.templateLayout)
self.verticalLayout_32.addLayout(self.horizontalLayout_23)
self.line_4 = QtWidgets.QFrame(self.frame_2)
self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_4.setObjectName("line_4")
self.verticalLayout_32.addWidget(self.line_4)
self.chkLoadLastProject = QtWidgets.QCheckBox(self.frame_2)
self.chkLoadLastProject.setChecked(True)
self.chkLoadLastProject.setObjectName("chkLoadLastProject")
self.verticalLayout_32.addWidget(self.chkLoadLastProject)
self.horizontalLayout_20 = QtWidgets.QHBoxLayout()
self.horizontalLayout_20.setObjectName("horizontalLayout_20")
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_20.addItem(spacerItem1)
self.btnOpen = QtWidgets.QPushButton(self.frame_2)
self.btnOpen.setObjectName("btnOpen")
self.horizontalLayout_20.addWidget(self.btnOpen)
self.btnRecent = QtWidgets.QPushButton(self.frame_2)
self.btnRecent.setObjectName("btnRecent")
self.horizontalLayout_20.addWidget(self.btnRecent)
self.btnCreate = QtWidgets.QPushButton(self.frame_2)
self.btnCreate.setObjectName("btnCreate")
self.horizontalLayout_20.addWidget(self.btnCreate)
self.verticalLayout_32.addLayout(self.horizontalLayout_20)
self.horizontalLayout.addWidget(self.frame_2)
self.retranslateUi(welcome)
QtCore.QMetaObject.connectSlotsByName(welcome)
def retranslateUi(self, welcome):
_translate = QtCore.QCoreApplication.translate
welcome.setWindowTitle(_translate("welcome", "Form"))
self.tree.headerItem().setText(0, _translate("welcome", "1"))
__sortingEnabled = self.tree.isSortingEnabled()
self.tree.setSortingEnabled(False)
self.tree.topLevelItem(0).setText(0, _translate("welcome", "Templates"))
self.tree.topLevelItem(0).child(0).setText(0, _translate("welcome", "Empty"))
self.tree.topLevelItem(0).child(1).setText(0, _translate("welcome", "Novel"))
self.tree.topLevelItem(0).child(2).setText(0, _translate("welcome", "Novella"))
self.tree.topLevelItem(0).child(3).setText(0, _translate("welcome", "Short Story"))
self.tree.topLevelItem(0).child(4).setText(0, _translate("welcome", "Research paper"))
self.tree.topLevelItem(1).setText(0, _translate("welcome", "Demo projects"))
self.tree.setSortingEnabled(__sortingEnabled)
self.btnAddLevel.setText(_translate("welcome", "Add level"))
self.btnAddWC.setText(_translate("welcome", "Add wordcount"))
self.chkLoadLastProject.setText(_translate("welcome", "Next time, automatically open last project"))
self.btnOpen.setText(_translate("welcome", "Open..."))
self.btnRecent.setText(_translate("welcome", "Recent"))
self.btnCreate.setText(_translate("welcome", "Create"))

259
src/ui/welcome_ui.ui Normal file
View file

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>welcome</class>
<widget class="QWidget" name="welcome">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>705</width>
<height>422</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QFrame" name="frame_2">
<property name="minimumSize">
<size>
<width>500</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_32">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_23">
<item>
<widget class="QTreeWidget" name="tree">
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>1</string>
</property>
</column>
<item>
<property name="text">
<string>Templates</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="background">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>230</red>
<green>230</green>
<blue>255</blue>
</color>
</brush>
</property>
<property name="foreground">
<brush brushstyle="NoBrush">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>128</blue>
</color>
</brush>
</property>
<item>
<property name="text">
<string>Empty</string>
</property>
</item>
<item>
<property name="text">
<string>Novel</string>
</property>
</item>
<item>
<property name="text">
<string>Novella</string>
</property>
</item>
<item>
<property name="text">
<string>Short Story</string>
</property>
</item>
<item>
<property name="text">
<string>Research paper</string>
</property>
</item>
</item>
<item>
<property name="text">
<string>Demo projects</string>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="background">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>230</red>
<green>230</green>
<blue>255</blue>
</color>
</brush>
</property>
<property name="foreground">
<brush brushstyle="NoBrush">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>128</blue>
</color>
</brush>
</property>
</item>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="templateLayout">
<item>
<layout class="QGridLayout" name="lytTemplate"/>
</item>
<item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="lblTotal">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnAddLevel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Add level</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnAddWC">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Add wordcount</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkLoadLastProject">
<property name="text">
<string>Next time, automatically open last project</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_20">
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnOpen">
<property name="text">
<string>Open...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnRecent">
<property name="text">
<string>Recent</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnCreate">
<property name="text">
<string>Create</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>