diff --git a/src/mainWindow.py b/src/mainWindow.py index 94c66cd..c6c562b 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -391,12 +391,20 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.treeRedacOutline.setCurrentIndex(self.mdlOutline.indexFromPath(settings.lastIndex)) # Set autosave + self.saveTimer = QTimer() + self.saveTimer.setInterval(settings.autoSaveDelay * 60 * 1000) + self.saveTimer.setSingleShot(False) + self.saveTimer.timeout.connect(self.saveDatas) if settings.autoSave: - self.saveTimer = QTimer() - self.saveTimer.setInterval(settings.autoSaveDelay * 60 * 1000) - self.saveTimer.setSingleShot(False) - self.saveTimer.timeout.connect(self.saveDatas) self.saveTimer.start() + + # Set autosave if no changes + self.saveTimerNoChanges = QTimer() + self.saveTimerNoChanges.setInterval(settings.autoSaveNoChangesDelay * 1000) + self.saveTimerNoChanges.setSingleShot(True) + self.mdlOutline.dataChanged.connect(self.startTimerNoChanges) + self.saveTimerNoChanges.timeout.connect(self.saveDatas) + self.saveTimerNoChanges.stop() # UI self.actSave.setEnabled(True) @@ -437,6 +445,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): # closeEvent QMainWindow.closeEvent(self, event) + def startTimerNoChanges(self): + if settings.autoSaveNoChanges: + self.saveTimerNoChanges.start() + def saveDatas(self): # Saving files = [] @@ -628,10 +640,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): #################################################################################################### def settingsLabel(self): - self.settingsWindow(1) + self.settingsWindow(2) def settingsStatus(self): - self.settingsWindow(2) + self.settingsWindow(3) def settingsWindow(self, tab=None): self.sw = settingsWindow(self) @@ -700,15 +712,18 @@ class MainWindow(QMainWindow, Ui_MainWindow): a.setData("{},{},{}".format(mnud, sd, vd)) if settings.viewSettings[mnud][sd] == vd: a.setChecked(True) - a.triggered.connect(self.setViewElement) + a.triggered.connect(self.setViewSettingsAction) agp.addAction(a) m2.addAction(a) m.addMenu(m2) self.menuView.addMenu(m) - def setViewElement(self): + def setViewSettingsAction(self): action = self.sender() item, part, element = action.data().split(",") + self.setViewSettings(item, part, element) + + def setViewSettings(self, item, part, element): settings.viewSettings[item][part] = element if item == "Cork": self.redacEditor.corkView.viewport().update() diff --git a/src/models/outlineModel.py b/src/models/outlineModel.py index 28d255c..e98fe56 100644 --- a/src/models/outlineModel.py +++ b/src/models/outlineModel.py @@ -90,21 +90,30 @@ class outlineModel(QAbstractItemModel): def setData(self, index, value, role=Qt.EditRole): item = index.internalPointer() - item.setData(index.column(), value, role) + if item.data(index.column(), role) != value: + item.setData(index.column(), value, role) - self.dataChanged.emit(index.sibling(index.row(), 0), - index.sibling(index.row(), max([i.value for i in Outline]))) + self.dataChanged.emit(index.sibling(index.row(), 0), + index.sibling(index.row(), max([i.value for i in Outline]))) return True def headerData(self, section, orientation, role=Qt.DisplayRole): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if orientation == Qt.Horizontal and role in [Qt.DisplayRole, Qt.ToolTipRole]: if section == Outline.title.value: - return "Titre" + return self.tr("Title") + elif section == Outline.POV.value: + return self.tr("POV") + elif section == Outline.label.value: + return self.tr("Label") + elif section == Outline.status.value: + return self.tr("Status") + elif section == Outline.compile.value: + return self.tr("Compile") elif section == Outline.wordCount.value: - return "Mots" + return self.tr("Word count") elif section == Outline.goal.value: - return "Goal" + return self.tr("Goal") elif section == Outline.goalPercentage.value: return "%" else: diff --git a/src/settings.py b/src/settings.py index 5e12f11..fa06c74 100644 --- a/src/settings.py +++ b/src/settings.py @@ -2,6 +2,7 @@ import pickle import pprint +from enums import * viewSettings = { "Tree": { @@ -29,14 +30,19 @@ corkSizeFactor = 100 folderView = "cork" lastTab = 0 lastIndex = "" -autoSave = True +autoSave = False autoSaveDelay = 5 +autoSaveNoChanges = True +autoSaveNoChangesDelay = 5 saveOnQuit = True +outlineViewColumns = [Outline.title.value, Outline.POV.value, Outline.status.value, + Outline.compile.value, Outline.wordCount.value, Outline.goal.value, + Outline.goalPercentage.value, Outline.label.value] def save(filename=None): global spellcheck, dict, corkSliderFactor, viewSettings, corkSizeFactor, folderView, lastTab, lastIndex, \ - autoSave, autoSaveDelay, saveOnQuit + autoSave, autoSaveDelay, saveOnQuit, autoSaveNoChanges, autoSaveNoChangesDelay, outlineViewColumns allSettings = { "viewSettings": viewSettings, @@ -49,6 +55,9 @@ def save(filename=None): "autoSave":autoSave, "autoSaveDelay":autoSaveDelay, "saveOnQuit":saveOnQuit, + "autoSaveNoChanges":autoSaveNoChanges, + "autoSaveNoChangesDelay":autoSaveNoChangesDelay, + "outlineViewColumns":outlineViewColumns, } #pp=pprint.PrettyPrinter(indent=4, compact=False) @@ -121,5 +130,15 @@ def load(string, fromString=False): global saveOnQuit saveOnQuit = allSettings["saveOnQuit"] - + if "autoSaveNoChanges" in allSettings: + global autoSaveNoChanges + autoSaveNoChanges = allSettings["autoSaveNoChanges"] + + if "autoSaveNoChangesDelay" in allSettings: + global autoSaveNoChangesDelay + autoSaveNoChangesDelay = allSettings["autoSaveNoChangesDelay"] + + if "outlineViewColumns" in allSettings: + global outlineViewColumns + outlineViewColumns = allSettings["outlineViewColumns"] \ No newline at end of file diff --git a/src/settingsWindow.py b/src/settingsWindow.py index be92923..aef06c7 100644 --- a/src/settingsWindow.py +++ b/src/settingsWindow.py @@ -27,12 +27,29 @@ class settingsWindow(QWidget, Ui_Settings): self.cmbStyle.currentIndexChanged[str].connect(self.setStyle) self.txtAutoSave.setValidator(QIntValidator(0, 999, self)) + self.txtAutoSaveNoChanges.setValidator(QIntValidator(0, 999, self)) self.chkAutoSave.setChecked(settings.autoSave) + self.chkAutoSaveNoChanges.setChecked(settings.autoSaveNoChanges) self.txtAutoSave.setText(str(settings.autoSaveDelay)) + self.txtAutoSaveNoChanges.setText(str(settings.autoSaveNoChangesDelay)) self.chkSaveOnQuit.setChecked(settings.saveOnQuit) self.chkAutoSave.stateChanged.connect(self.saveSettingsChanged) + self.chkAutoSaveNoChanges.stateChanged.connect(self.saveSettingsChanged) self.chkSaveOnQuit.stateChanged.connect(self.saveSettingsChanged) self.txtAutoSave.textEdited.connect(self.saveSettingsChanged) + self.txtAutoSaveNoChanges.textEdited.connect(self.saveSettingsChanged) + + # Views + lst = ["Nothing", "POV", "Label", "Progress", "Compile"] + for cmb in self.viewSettingsDatas(): + item, part = self.viewSettingsDatas()[cmb] + cmb.setCurrentIndex(lst.index(settings.viewSettings[item][part])) + cmb.currentIndexChanged.connect(self.viewSettingsChanged) + + for chk in self.outlineColumnsData(): + col = self.outlineColumnsData()[chk] + chk.setChecked(col in settings.outlineViewColumns) + chk.stateChanged.connect(self.outlineColumnsChanged) # Labels self.lstLabels.setModel(self.mw.mdlLabels) @@ -48,6 +65,10 @@ class settingsWindow(QWidget, Ui_Settings): self.btnStatusAdd.clicked.connect(self.addStatus) self.btnStatusRemove.clicked.connect(self.removeStatus) +#################################################################################################### +# GENERAL # +#################################################################################################### + def setStyle(self, style): #Save style to Qt Settings settings = QSettings(qApp.organizationName(), qApp.applicationName()) @@ -57,11 +78,73 @@ class settingsWindow(QWidget, Ui_Settings): def saveSettingsChanged(self): if self.txtAutoSave.text() in ["", "0"]: self.txtAutoSave.setText("1") + if self.txtAutoSaveNoChanges.text() in ["", "0"]: + self.txtAutoSaveNoChanges.setText("1") + 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 settings.autoSaveDelay = int(self.txtAutoSave.text()) + settings.autoSaveNoChangesDelay = int(self.txtAutoSaveNoChanges.text()) self.mw.saveTimer.setInterval(settings.autoSaveDelay * 60 * 1000) + self.mw.saveTimerNoChanges.setInterval(settings.autoSaveNoChangesDelay * 1000) + +#################################################################################################### +# VIEWS # +#################################################################################################### + + def viewSettingsDatas(self): + return { + self.cmbTreeIcon: ("Tree", "Icon"), + self.cmbTreeText: ("Tree", "Text"), + self.cmbTreeBackground: ("Tree", "Background"), + self.cmbOutlineIcon: ("Outline", "Icon"), + self.cmbOutlineText: ("Outline", "Text"), + self.cmbOutlineBackground: ("Outline", "Background"), + self.cmbCorkIcon: ("Cork", "Icon"), + self.cmbCorkText: ("Cork", "Text"), + self.cmbCorkBackground: ("Cork", "Background"), + self.cmbCorkBorder: ("Cork", "Border"), + self.cmbCorkCorner: ("Cork", "Corner") + } + def viewSettingsChanged(self): + cmb = self.sender() + lst = ["Nothing", "POV", "Label", "Progress", "Compile"] + item, part = self.viewSettingsDatas()[cmb] + element = lst[cmb.currentIndex()] + self.mw.setViewSettings(item, part, element) + + def outlineColumnsData(self): + return { + self.chkOutlineTitle: Outline.title.value, + self.chkOutlinePOV: Outline.POV.value, + self.chkOutlineLabel: Outline.label.value, + self.chkOutlineStatus: Outline.status.value, + self.chkOutlineCompile: Outline.compile.value, + self.chkOutlineWordCount: Outline.wordCount.value, + self.chkOutlineGoal: Outline.goal.value, + self.chkOutlinePercentage: Outline.goalPercentage.value, + } + + def outlineColumnsChanged(self): + chk = self.sender() + val = True if chk.checkState() else False + col = self.outlineColumnsData()[chk] + if val and not col in settings.outlineViewColumns: + settings.outlineViewColumns.append(col) + elif not val and col in settings.outlineViewColumns: + settings.outlineViewColumns.remove(col) + + # Update views + self.mw.redacEditor.outlineView.hideColumns() + self.mw.treePlanOutline.hideColumns() + + +#################################################################################################### +# STATUS # +#################################################################################################### + def addStatus(self): self.mw.mdlStatus.appendRow(QStandardItem(self.tr("New status"))) @@ -75,6 +158,10 @@ class settingsWindow(QWidget, Ui_Settings): self.btnLabelColor.setIcon(QIcon(px)) self.btnLabelColor.setEnabled(True) +#################################################################################################### +# LABELS # +#################################################################################################### + def addLabel(self): px = QPixmap(32, 32) px.fill(Qt.transparent) diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index b820f4f..3be8ac0 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -75,6 +75,7 @@ class Ui_MainWindow(object): self.grpAuthor = QtWidgets.QGroupBox(self.lytTabOverview) self.grpAuthor.setObjectName("grpAuthor") self.formLayout_4 = QtWidgets.QFormLayout(self.grpAuthor) + self.formLayout_4.setFieldGrowthPolicy(QtWidgets.QFormLayout.ExpandingFieldsGrow) self.formLayout_4.setContentsMargins(6, 6, 6, -1) self.formLayout_4.setObjectName("formLayout_4") self.label_15 = QtWidgets.QLabel(self.grpAuthor) @@ -89,9 +90,6 @@ class Ui_MainWindow(object): self.txtGeneralEmail = lineEditView(self.grpAuthor) self.txtGeneralEmail.setObjectName("txtGeneralEmail") self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.txtGeneralEmail) - self.cmbStyle = QtWidgets.QComboBox(self.grpAuthor) - self.cmbStyle.setObjectName("cmbStyle") - self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbStyle) self.horizontalLayout_26.addWidget(self.grpAuthor) self.verticalLayout_23.addLayout(self.horizontalLayout_26) self.tabMain.addTab(self.lytTabOverview, "") @@ -1247,11 +1245,11 @@ class Ui_MainWindow(object): self.actViewOutline.setText(_translate("MainWindow", "Outline")) self.actSettings.setText(_translate("MainWindow", "Settings")) -from ui.views.lineEditView import lineEditView -from ui.views.outlineView import outlineView -from ui.views.basicItemView import basicItemView -from ui.views.textEditView import textEditView -from ui.editors.editorWidget import editorWidget -from ui.views.metadataView import metadataView -from ui.sldImportance import sldImportance from ui.views.treeView import treeView +from ui.views.lineEditView import lineEditView +from ui.sldImportance import sldImportance +from ui.editors.editorWidget import editorWidget +from ui.views.textEditView import textEditView +from ui.views.basicItemView import basicItemView +from ui.views.outlineView import outlineView +from ui.views.metadataView import metadataView diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index 0926172..c954fcc 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -131,6 +131,9 @@ Author + + QFormLayout::ExpandingFieldsGrow + 6 @@ -160,9 +163,6 @@ - - - diff --git a/src/ui/settings.py b/src/ui/settings.py index 14b49e2..fc97466 100644 --- a/src/ui/settings.py +++ b/src/ui/settings.py @@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Settings(object): def setupUi(self, Settings): Settings.setObjectName("Settings") - Settings.resize(485, 379) + Settings.resize(485, 585) self.verticalLayout = QtWidgets.QVBoxLayout(Settings) self.verticalLayout.setObjectName("verticalLayout") self.tabWidget = QtWidgets.QTabWidget(Settings) @@ -60,14 +60,225 @@ class Ui_Settings(object): spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem) self.verticalLayout_6.addLayout(self.horizontalLayout_5) + self.horizontalLayout_7 = QtWidgets.QHBoxLayout() + self.horizontalLayout_7.setObjectName("horizontalLayout_7") + self.chkAutoSaveNoChanges = QtWidgets.QCheckBox(self.groupBox) + self.chkAutoSaveNoChanges.setChecked(True) + self.chkAutoSaveNoChanges.setObjectName("chkAutoSaveNoChanges") + self.horizontalLayout_7.addWidget(self.chkAutoSaveNoChanges) + self.txtAutoSaveNoChanges = QtWidgets.QLineEdit(self.groupBox) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.txtAutoSaveNoChanges.sizePolicy().hasHeightForWidth()) + self.txtAutoSaveNoChanges.setSizePolicy(sizePolicy) + self.txtAutoSaveNoChanges.setMaximumSize(QtCore.QSize(50, 16777215)) + self.txtAutoSaveNoChanges.setStyleSheet("border-radius: 6px;") + self.txtAutoSaveNoChanges.setMaxLength(3) + self.txtAutoSaveNoChanges.setAlignment(QtCore.Qt.AlignCenter) + self.txtAutoSaveNoChanges.setObjectName("txtAutoSaveNoChanges") + self.horizontalLayout_7.addWidget(self.txtAutoSaveNoChanges) + self.label_14 = QtWidgets.QLabel(self.groupBox) + self.label_14.setObjectName("label_14") + self.horizontalLayout_7.addWidget(self.label_14) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_7.addItem(spacerItem1) + self.verticalLayout_6.addLayout(self.horizontalLayout_7) self.chkSaveOnQuit = QtWidgets.QCheckBox(self.groupBox) self.chkSaveOnQuit.setChecked(True) self.chkSaveOnQuit.setObjectName("chkSaveOnQuit") self.verticalLayout_6.addWidget(self.chkSaveOnQuit) self.verticalLayout_7.addWidget(self.groupBox) - spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_7.addItem(spacerItem1) + spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_7.addItem(spacerItem2) self.tabWidget.addTab(self.tab_3, "") + self.tab_4 = QtWidgets.QWidget() + self.tab_4.setObjectName("tab_4") + self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.tab_4) + self.verticalLayout_9.setObjectName("verticalLayout_9") + self.horizontalLayout_6 = QtWidgets.QHBoxLayout() + self.horizontalLayout_6.setObjectName("horizontalLayout_6") + self.groupBox_3 = QtWidgets.QGroupBox(self.tab_4) + self.groupBox_3.setObjectName("groupBox_3") + self.formLayout = QtWidgets.QFormLayout(self.groupBox_3) + self.formLayout.setObjectName("formLayout") + self.label_3 = QtWidgets.QLabel(self.groupBox_3) + self.label_3.setObjectName("label_3") + self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_3) + self.cmbTreeIcon = QtWidgets.QComboBox(self.groupBox_3) + self.cmbTreeIcon.setObjectName("cmbTreeIcon") + self.cmbTreeIcon.addItem("") + self.cmbTreeIcon.addItem("") + self.cmbTreeIcon.addItem("") + self.cmbTreeIcon.addItem("") + self.cmbTreeIcon.addItem("") + self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbTreeIcon) + self.label_4 = QtWidgets.QLabel(self.groupBox_3) + self.label_4.setObjectName("label_4") + self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_4) + self.cmbTreeText = QtWidgets.QComboBox(self.groupBox_3) + self.cmbTreeText.setObjectName("cmbTreeText") + self.cmbTreeText.addItem("") + self.cmbTreeText.addItem("") + self.cmbTreeText.addItem("") + self.cmbTreeText.addItem("") + self.cmbTreeText.addItem("") + self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbTreeText) + self.label_5 = QtWidgets.QLabel(self.groupBox_3) + self.label_5.setObjectName("label_5") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_5) + self.cmbTreeBackground = QtWidgets.QComboBox(self.groupBox_3) + self.cmbTreeBackground.setObjectName("cmbTreeBackground") + self.cmbTreeBackground.addItem("") + self.cmbTreeBackground.addItem("") + self.cmbTreeBackground.addItem("") + self.cmbTreeBackground.addItem("") + self.cmbTreeBackground.addItem("") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbTreeBackground) + self.horizontalLayout_6.addWidget(self.groupBox_3) + self.groupBox_5 = QtWidgets.QGroupBox(self.tab_4) + self.groupBox_5.setObjectName("groupBox_5") + self.formLayout_2 = QtWidgets.QFormLayout(self.groupBox_5) + self.formLayout_2.setObjectName("formLayout_2") + self.label_9 = QtWidgets.QLabel(self.groupBox_5) + self.label_9.setObjectName("label_9") + self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_9) + self.cmbCorkIcon = QtWidgets.QComboBox(self.groupBox_5) + self.cmbCorkIcon.setObjectName("cmbCorkIcon") + self.cmbCorkIcon.addItem("") + self.cmbCorkIcon.addItem("") + self.cmbCorkIcon.addItem("") + self.cmbCorkIcon.addItem("") + self.cmbCorkIcon.addItem("") + self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbCorkIcon) + self.label_10 = QtWidgets.QLabel(self.groupBox_5) + self.label_10.setObjectName("label_10") + self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_10) + self.cmbCorkText = QtWidgets.QComboBox(self.groupBox_5) + self.cmbCorkText.setObjectName("cmbCorkText") + self.cmbCorkText.addItem("") + self.cmbCorkText.addItem("") + self.cmbCorkText.addItem("") + self.cmbCorkText.addItem("") + self.cmbCorkText.addItem("") + self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbCorkText) + self.label_11 = QtWidgets.QLabel(self.groupBox_5) + self.label_11.setObjectName("label_11") + self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_11) + self.cmbCorkBackground = QtWidgets.QComboBox(self.groupBox_5) + self.cmbCorkBackground.setObjectName("cmbCorkBackground") + self.cmbCorkBackground.addItem("") + self.cmbCorkBackground.addItem("") + self.cmbCorkBackground.addItem("") + self.cmbCorkBackground.addItem("") + self.cmbCorkBackground.addItem("") + self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbCorkBackground) + self.label_12 = QtWidgets.QLabel(self.groupBox_5) + self.label_12.setObjectName("label_12") + self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_12) + self.cmbCorkBorder = QtWidgets.QComboBox(self.groupBox_5) + self.cmbCorkBorder.setObjectName("cmbCorkBorder") + self.cmbCorkBorder.addItem("") + self.cmbCorkBorder.addItem("") + self.cmbCorkBorder.addItem("") + self.cmbCorkBorder.addItem("") + self.cmbCorkBorder.addItem("") + self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.cmbCorkBorder) + self.label_13 = QtWidgets.QLabel(self.groupBox_5) + self.label_13.setObjectName("label_13") + self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_13) + self.cmbCorkCorner = QtWidgets.QComboBox(self.groupBox_5) + self.cmbCorkCorner.setObjectName("cmbCorkCorner") + self.cmbCorkCorner.addItem("") + self.cmbCorkCorner.addItem("") + self.cmbCorkCorner.addItem("") + self.cmbCorkCorner.addItem("") + self.cmbCorkCorner.addItem("") + self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.cmbCorkCorner) + self.horizontalLayout_6.addWidget(self.groupBox_5) + self.verticalLayout_9.addLayout(self.horizontalLayout_6) + self.groupBox_4 = QtWidgets.QGroupBox(self.tab_4) + self.groupBox_4.setObjectName("groupBox_4") + self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_4) + self.horizontalLayout_4.setObjectName("horizontalLayout_4") + self.formLayout_3 = QtWidgets.QFormLayout() + self.formLayout_3.setObjectName("formLayout_3") + self.label_6 = QtWidgets.QLabel(self.groupBox_4) + self.label_6.setObjectName("label_6") + self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_6) + self.cmbOutlineIcon = QtWidgets.QComboBox(self.groupBox_4) + self.cmbOutlineIcon.setObjectName("cmbOutlineIcon") + self.cmbOutlineIcon.addItem("") + self.cmbOutlineIcon.addItem("") + self.cmbOutlineIcon.addItem("") + self.cmbOutlineIcon.addItem("") + self.cmbOutlineIcon.addItem("") + self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbOutlineIcon) + self.label_7 = QtWidgets.QLabel(self.groupBox_4) + self.label_7.setObjectName("label_7") + self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_7) + self.cmbOutlineText = QtWidgets.QComboBox(self.groupBox_4) + self.cmbOutlineText.setObjectName("cmbOutlineText") + self.cmbOutlineText.addItem("") + self.cmbOutlineText.addItem("") + self.cmbOutlineText.addItem("") + self.cmbOutlineText.addItem("") + self.cmbOutlineText.addItem("") + self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbOutlineText) + self.label_8 = QtWidgets.QLabel(self.groupBox_4) + self.label_8.setObjectName("label_8") + self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_8) + self.cmbOutlineBackground = QtWidgets.QComboBox(self.groupBox_4) + self.cmbOutlineBackground.setObjectName("cmbOutlineBackground") + self.cmbOutlineBackground.addItem("") + self.cmbOutlineBackground.addItem("") + self.cmbOutlineBackground.addItem("") + self.cmbOutlineBackground.addItem("") + self.cmbOutlineBackground.addItem("") + self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbOutlineBackground) + self.horizontalLayout_4.addLayout(self.formLayout_3) + self.line = QtWidgets.QFrame(self.groupBox_4) + self.line.setFrameShape(QtWidgets.QFrame.VLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") + self.horizontalLayout_4.addWidget(self.line) + self.verticalLayout_8 = QtWidgets.QVBoxLayout() + self.verticalLayout_8.setObjectName("verticalLayout_8") + self.chkOutlineTitle = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlineTitle.setChecked(True) + self.chkOutlineTitle.setObjectName("chkOutlineTitle") + self.verticalLayout_8.addWidget(self.chkOutlineTitle) + self.chkOutlinePOV = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlinePOV.setChecked(True) + self.chkOutlinePOV.setObjectName("chkOutlinePOV") + self.verticalLayout_8.addWidget(self.chkOutlinePOV) + self.chkOutlineLabel = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlineLabel.setChecked(True) + self.chkOutlineLabel.setObjectName("chkOutlineLabel") + self.verticalLayout_8.addWidget(self.chkOutlineLabel) + self.chkOutlineStatus = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlineStatus.setChecked(True) + self.chkOutlineStatus.setObjectName("chkOutlineStatus") + self.verticalLayout_8.addWidget(self.chkOutlineStatus) + self.chkOutlineCompile = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlineCompile.setChecked(True) + self.chkOutlineCompile.setObjectName("chkOutlineCompile") + self.verticalLayout_8.addWidget(self.chkOutlineCompile) + self.chkOutlineWordCount = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlineWordCount.setChecked(True) + self.chkOutlineWordCount.setObjectName("chkOutlineWordCount") + self.verticalLayout_8.addWidget(self.chkOutlineWordCount) + self.chkOutlineGoal = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlineGoal.setChecked(True) + self.chkOutlineGoal.setObjectName("chkOutlineGoal") + self.verticalLayout_8.addWidget(self.chkOutlineGoal) + self.chkOutlinePercentage = QtWidgets.QCheckBox(self.groupBox_4) + self.chkOutlinePercentage.setChecked(True) + self.chkOutlinePercentage.setObjectName("chkOutlinePercentage") + self.verticalLayout_8.addWidget(self.chkOutlinePercentage) + self.horizontalLayout_4.addLayout(self.verticalLayout_8) + self.verticalLayout_9.addWidget(self.groupBox_4) + self.tabWidget.addTab(self.tab_4, "") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab) @@ -92,8 +303,8 @@ class Ui_Settings(object): self.btnLabelColor.setIconSize(QtCore.QSize(64, 64)) self.btnLabelColor.setObjectName("btnLabelColor") self.verticalLayout_2.addWidget(self.btnLabelColor) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_2.addItem(spacerItem2) + spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_2.addItem(spacerItem3) self.horizontalLayout_2.addLayout(self.verticalLayout_2) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() @@ -110,8 +321,8 @@ class Ui_Settings(object): self.btnLabelRemove.setIcon(icon) self.btnLabelRemove.setObjectName("btnLabelRemove") self.horizontalLayout.addWidget(self.btnLabelRemove) - spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem3) + spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem4) self.verticalLayout_3.addLayout(self.horizontalLayout) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() @@ -135,14 +346,14 @@ class Ui_Settings(object): self.btnStatusRemove.setIcon(icon) self.btnStatusRemove.setObjectName("btnStatusRemove") self.horizontalLayout_3.addWidget(self.btnStatusRemove) - spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_3.addItem(spacerItem4) + spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem5) self.verticalLayout_4.addLayout(self.horizontalLayout_3) self.tabWidget.addTab(self.tab_2, "") self.verticalLayout.addWidget(self.tabWidget) self.retranslateUi(Settings) - self.tabWidget.setCurrentIndex(0) + self.tabWidget.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(Settings) def retranslateUi(self, Settings): @@ -153,8 +364,88 @@ class Ui_Settings(object): self.groupBox.setTitle(_translate("Settings", "Saving")) self.chkAutoSave.setText(_translate("Settings", "Automatically save every")) self.label.setText(_translate("Settings", "minutes.")) + self.chkAutoSaveNoChanges.setText(_translate("Settings", "If no changes during")) + self.label_14.setText(_translate("Settings", "seconds.")) self.chkSaveOnQuit.setText(_translate("Settings", "Save on quit")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Settings", "General")) + self.groupBox_3.setTitle(_translate("Settings", "Tree")) + self.label_3.setText(_translate("Settings", "Icon color:")) + self.cmbTreeIcon.setItemText(0, _translate("Settings", "Nothing")) + self.cmbTreeIcon.setItemText(1, _translate("Settings", "POV")) + self.cmbTreeIcon.setItemText(2, _translate("Settings", "Label")) + self.cmbTreeIcon.setItemText(3, _translate("Settings", "Progress")) + self.cmbTreeIcon.setItemText(4, _translate("Settings", "Compile")) + self.label_4.setText(_translate("Settings", "Text color:")) + self.cmbTreeText.setItemText(0, _translate("Settings", "Nothing")) + self.cmbTreeText.setItemText(1, _translate("Settings", "POV")) + self.cmbTreeText.setItemText(2, _translate("Settings", "Label")) + self.cmbTreeText.setItemText(3, _translate("Settings", "Progress")) + self.cmbTreeText.setItemText(4, _translate("Settings", "Compile")) + self.label_5.setText(_translate("Settings", "Background color:")) + self.cmbTreeBackground.setItemText(0, _translate("Settings", "Nothing")) + self.cmbTreeBackground.setItemText(1, _translate("Settings", "POV")) + self.cmbTreeBackground.setItemText(2, _translate("Settings", "Label")) + self.cmbTreeBackground.setItemText(3, _translate("Settings", "Progress")) + self.cmbTreeBackground.setItemText(4, _translate("Settings", "Compile")) + self.groupBox_5.setTitle(_translate("Settings", "Index cards")) + self.label_9.setText(_translate("Settings", "Icon color:")) + self.cmbCorkIcon.setItemText(0, _translate("Settings", "Nothing")) + self.cmbCorkIcon.setItemText(1, _translate("Settings", "POV")) + self.cmbCorkIcon.setItemText(2, _translate("Settings", "Label")) + self.cmbCorkIcon.setItemText(3, _translate("Settings", "Progress")) + self.cmbCorkIcon.setItemText(4, _translate("Settings", "Compile")) + self.label_10.setText(_translate("Settings", "Text color:")) + self.cmbCorkText.setItemText(0, _translate("Settings", "Nothing")) + self.cmbCorkText.setItemText(1, _translate("Settings", "POV")) + self.cmbCorkText.setItemText(2, _translate("Settings", "Label")) + self.cmbCorkText.setItemText(3, _translate("Settings", "Progress")) + self.cmbCorkText.setItemText(4, _translate("Settings", "Compile")) + self.label_11.setText(_translate("Settings", "Background color:")) + self.cmbCorkBackground.setItemText(0, _translate("Settings", "Nothing")) + self.cmbCorkBackground.setItemText(1, _translate("Settings", "POV")) + self.cmbCorkBackground.setItemText(2, _translate("Settings", "Label")) + self.cmbCorkBackground.setItemText(3, _translate("Settings", "Progress")) + self.cmbCorkBackground.setItemText(4, _translate("Settings", "Compile")) + self.label_12.setText(_translate("Settings", "Border color:")) + self.cmbCorkBorder.setItemText(0, _translate("Settings", "Nothing")) + self.cmbCorkBorder.setItemText(1, _translate("Settings", "POV")) + self.cmbCorkBorder.setItemText(2, _translate("Settings", "Label")) + self.cmbCorkBorder.setItemText(3, _translate("Settings", "Progress")) + self.cmbCorkBorder.setItemText(4, _translate("Settings", "Compile")) + self.label_13.setText(_translate("Settings", "Corner color:")) + self.cmbCorkCorner.setItemText(0, _translate("Settings", "Nothing")) + self.cmbCorkCorner.setItemText(1, _translate("Settings", "POV")) + self.cmbCorkCorner.setItemText(2, _translate("Settings", "Label")) + self.cmbCorkCorner.setItemText(3, _translate("Settings", "Progress")) + self.cmbCorkCorner.setItemText(4, _translate("Settings", "Compile")) + self.groupBox_4.setTitle(_translate("Settings", "Outline")) + self.label_6.setText(_translate("Settings", "Icon color:")) + self.cmbOutlineIcon.setItemText(0, _translate("Settings", "Nothing")) + self.cmbOutlineIcon.setItemText(1, _translate("Settings", "POV")) + self.cmbOutlineIcon.setItemText(2, _translate("Settings", "Label")) + self.cmbOutlineIcon.setItemText(3, _translate("Settings", "Progress")) + self.cmbOutlineIcon.setItemText(4, _translate("Settings", "Compile")) + self.label_7.setText(_translate("Settings", "Text color:")) + self.cmbOutlineText.setItemText(0, _translate("Settings", "Nothing")) + self.cmbOutlineText.setItemText(1, _translate("Settings", "POV")) + self.cmbOutlineText.setItemText(2, _translate("Settings", "Label")) + self.cmbOutlineText.setItemText(3, _translate("Settings", "Progress")) + self.cmbOutlineText.setItemText(4, _translate("Settings", "Compile")) + self.label_8.setText(_translate("Settings", "Background color:")) + self.cmbOutlineBackground.setItemText(0, _translate("Settings", "Nothing")) + self.cmbOutlineBackground.setItemText(1, _translate("Settings", "POV")) + self.cmbOutlineBackground.setItemText(2, _translate("Settings", "Label")) + self.cmbOutlineBackground.setItemText(3, _translate("Settings", "Progress")) + self.cmbOutlineBackground.setItemText(4, _translate("Settings", "Compile")) + self.chkOutlineTitle.setText(_translate("Settings", "Title")) + self.chkOutlinePOV.setText(_translate("Settings", "POV")) + self.chkOutlineLabel.setText(_translate("Settings", "Label")) + self.chkOutlineStatus.setText(_translate("Settings", "Status")) + self.chkOutlineCompile.setText(_translate("Settings", "Compile")) + self.chkOutlineWordCount.setText(_translate("Settings", "Word count")) + self.chkOutlineGoal.setText(_translate("Settings", "Goal")) + self.chkOutlinePercentage.setText(_translate("Settings", "Percentage")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("Settings", "Views")) self.btnLabelColor.setShortcut(_translate("Settings", "Ctrl+S")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Settings", "Labels")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Settings", "Status")) diff --git a/src/ui/settings.ui b/src/ui/settings.ui index 8e78126..4afa7d3 100644 --- a/src/ui/settings.ui +++ b/src/ui/settings.ui @@ -7,7 +7,7 @@ 0 0 485 - 379 + 585 @@ -17,7 +17,7 @@ - 0 + 1 true @@ -111,6 +111,65 @@ + + + + + + If no changes during + + + true + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + border-radius: 6px; + + + 3 + + + Qt::AlignCenter + + + + + + + seconds. + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + @@ -139,6 +198,535 @@ + + + Views + + + + + + + + Tree + + + + + + Icon color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Text color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Background color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + + + + Index cards + + + + + + Icon color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Text color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Background color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Border color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Corner color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + + + + + + Outline + + + + + + + + Icon color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Text color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + Background color: + + + + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + + + + + + Qt::Vertical + + + + + + + + + Title + + + true + + + + + + + POV + + + true + + + + + + + Label + + + true + + + + + + + Status + + + true + + + + + + + Compile + + + true + + + + + + + Word count + + + true + + + + + + + Goal + + + true + + + + + + + Percentage + + + true + + + + + + + + + + Labels diff --git a/src/ui/views/outlineView.py b/src/ui/views/outlineView.py index 5520df7..8dacd9a 100644 --- a/src/ui/views/outlineView.py +++ b/src/ui/views/outlineView.py @@ -55,12 +55,7 @@ class outlineView(QTreeView, dndView, outlineBasics): self.setItemDelegateForColumn(Outline.label.value, self.outlineLabelDelegate) # Hiding columns - for c in range(1, self.model().columnCount()): - self.hideColumn(c) - for c in [Outline.POV.value, Outline.status.value, Outline.compile.value, - Outline.wordCount.value, Outline.goal.value, Outline.goalPercentage.value, - Outline.label.value]: - self.showColumn(c) + self.hideColumns() self.header().setSectionResizeMode(Outline.title.value, QHeaderView.Stretch) self.header().setSectionResizeMode(Outline.POV.value, QHeaderView.ResizeToContents) @@ -71,6 +66,12 @@ class outlineView(QTreeView, dndView, outlineBasics): self.header().setSectionResizeMode(Outline.goal.value, QHeaderView.ResizeToContents) self.header().setSectionResizeMode(Outline.goalPercentage.value, QHeaderView.ResizeToContents) + def hideColumns(self): + for c in range(self.model().columnCount()): + self.hideColumn(c) + for c in settings.outlineViewColumns: + self.showColumn(c) + def setRootIndex(self, index): QTreeView.setRootIndex(self, index) self.outlineGoalPercentageDelegate = outlineGoalPercentageDelegate(index)