Settings: app style and auto save (though autosave is not implemented yet)

This commit is contained in:
Olivier Keshavjee 2015-06-17 09:33:25 +02:00
parent 028d5f42e9
commit 9a76d0b3ee
9 changed files with 273 additions and 29 deletions

View file

@ -27,8 +27,13 @@ def run():
else:
print(app.tr("Failed to load translator for {}...").format(locale))
from mainWindow import MainWindow
# Load style from QSettings
settings = QSettings(app.organizationName(), app.applicationName())
if settings.contains("applicationStyle"):
style = settings.value("applicationStyle")
app.setStyle(style)
from mainWindow import MainWindow
main = MainWindow()
main.show()

View file

@ -209,6 +209,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Main Menu
self.actLabels.triggered.connect(self.settingsLabel)
self.actStatus.triggered.connect(self.settingsStatus)
self.actSettings.triggered.connect(self.settingsWindow)
self.actQuit.triggered.connect(self.close)
self.generateViewMenu()
@ -221,12 +223,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.lstDebugLabels.setModel(self.mdlLabels)
self.lstDebugStatus.setModel(self.mdlStatus)
# Playing with qStyle
self.cmbStyle.addItems(list(QStyleFactory.keys()))
self.cmbStyle.setCurrentIndex([i.lower() for i in list(QStyleFactory.keys())].index(qApp.style().objectName()))
self.cmbStyle.currentIndexChanged[str].connect(qApp.setStyle)
self.loadProject("test_project")
####################################################################################################
@ -422,12 +418,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
settings.lastIndex = self.mdlOutline.pathToIndex(sel)
# Save data from models
saveStandardItemModelXML(self.mdlFlatData, "{}/flatModel.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlPersos, "{}/perso.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlPersosInfos, "{}/persoInfos.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlLabels, "{}/labels.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlStatus, "{}/status.xml".format(self.currentProject))
self.mdlOutline.saveToXML("{}/outline.xml".format(self.currentProject))
if settings.saveOnQuit:
saveStandardItemModelXML(self.mdlFlatData, "{}/flatModel.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlPersos, "{}/perso.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlPersosInfos, "{}/persoInfos.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlLabels, "{}/labels.xml".format(self.currentProject))
saveStandardItemModelXML(self.mdlStatus, "{}/status.xml".format(self.currentProject))
self.mdlOutline.saveToXML("{}/outline.xml".format(self.currentProject))
# Save settings
settings.save("{}/settings.pickle".format(self.currentProject))
# closeEvent
@ -583,10 +582,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
####################################################################################################
def settingsLabel(self):
self.settingsWindow(0)
self.settingsWindow(1)
def settingsStatus(self):
self.settingsWindow(1)
self.settingsWindow(2)
def settingsWindow(self, tab=None):
self.sw = settingsWindow(self)

View file

@ -29,10 +29,14 @@ corkSizeFactor = 100
folderView = "cork"
lastTab = 0
lastIndex = ""
autoSave = True
autoSaveDelay = 5
saveOnQuit = True
def save(filename):
global spellcheck, dict, corkSliderFactor, viewSettings, corkSizeFactor, folderView, lastTab, lastIndex
global spellcheck, dict, corkSliderFactor, viewSettings, corkSizeFactor, folderView, lastTab, lastIndex, \
autoSave, autoSaveDelay, saveOnQuit
allSettings = {
"viewSettings": viewSettings,
@ -41,7 +45,10 @@ def save(filename):
"corkSizeFactor": corkSizeFactor,
"folderView": folderView,
"lastTab": lastTab,
"lastIndex": lastIndex
"lastIndex": lastIndex,
"autoSave":autoSave,
"autoSaveDelay":autoSaveDelay,
"saveOnQuit":saveOnQuit,
}
#pp=pprint.PrettyPrinter(indent=4, compact=False)
@ -94,5 +101,17 @@ def load(filename):
global lastIndex
lastIndex = allSettings["lastIndex"]
if "autoSave" in allSettings:
global autoSave
autoSave = allSettings["autoSave"]
if "autoSaveDelay" in allSettings:
global autoSaveDelay
autoSaveDelay = allSettings["autoSaveDelay"]
if "saveOnQuit" in allSettings:
global saveOnQuit
saveOnQuit = allSettings["saveOnQuit"]

View file

@ -6,7 +6,7 @@ from qt import *
from ui.settings import *
from enums import *
from functions import *
import settings
# Spell checker support
try:
import enchant
@ -21,6 +21,19 @@ class settingsWindow(QWidget, Ui_Settings):
self.mw = mainWindow
# General
self.cmbStyle.addItems(list(QStyleFactory.keys()))
self.cmbStyle.setCurrentIndex([i.lower() for i in list(QStyleFactory.keys())].index(qApp.style().objectName()))
self.cmbStyle.currentIndexChanged[str].connect(self.setStyle)
self.txtAutoSave.setValidator(QIntValidator(0, 999, self))
self.chkAutoSave.setChecked(settings.autoSave)
self.txtAutoSave.setText(str(settings.autoSaveDelay))
self.chkSaveOnQuit.setChecked(settings.saveOnQuit)
self.chkAutoSave.stateChanged.connect(self.saveSettingsChanged)
self.chkSaveOnQuit.stateChanged.connect(self.saveSettingsChanged)
self.txtAutoSave.textEdited.connect(self.saveSettingsChanged)
# Labels
self.lstLabels.setModel(self.mw.mdlLabels)
self.lstLabels.setRowHidden(0, True)
@ -35,6 +48,20 @@ class settingsWindow(QWidget, Ui_Settings):
self.btnStatusAdd.clicked.connect(self.addStatus)
self.btnStatusRemove.clicked.connect(self.removeStatus)
def setStyle(self, style):
#Save style to Qt Settings
settings = QSettings(qApp.organizationName(), qApp.applicationName())
settings.setValue("applicationStyle", style)
qApp.setStyle(style)
def saveSettingsChanged(self):
if self.txtAutoSave.text() in ["", "0"]:
self.txtAutoSave.setText("1")
settings.autoSave = True if self.chkAutoSave.checkState() else False
settings.saveOnQuit = True if self.chkSaveOnQuit.checkState() else False
settings.autoSaveDelay = int(self.txtAutoSave.text())
def addStatus(self):
self.mw.mdlStatus.appendRow(QStandardItem(self.tr("New status")))

View file

@ -1044,6 +1044,10 @@ class Ui_MainWindow(object):
self.actViewCork.setObjectName("actViewCork")
self.actViewOutline = QtWidgets.QAction(MainWindow)
self.actViewOutline.setObjectName("actViewOutline")
self.actSettings = QtWidgets.QAction(MainWindow)
icon = QtGui.QIcon.fromTheme("preferences-system")
self.actSettings.setIcon(icon)
self.actSettings.setObjectName("actSettings")
self.menuFile.addAction(self.actNew)
self.menuFile.addAction(self.actOpen)
self.menuFile.addAction(self.actRecents)
@ -1058,6 +1062,7 @@ class Ui_MainWindow(object):
self.menuTools.addAction(self.actSpellcheck)
self.menuEdit.addAction(self.actLabels)
self.menuEdit.addAction(self.actStatus)
self.menuEdit.addAction(self.actSettings)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuEdit.menuAction())
self.menubar.addAction(self.menuMode.menuAction())
@ -1240,12 +1245,13 @@ class Ui_MainWindow(object):
self.actModeFractal.setText(_translate("MainWindow", "Fractal"))
self.actViewCork.setText(_translate("MainWindow", "Index cards"))
self.actViewOutline.setText(_translate("MainWindow", "Outline"))
self.actSettings.setText(_translate("MainWindow", "Settings"))
from ui.views.basicItemView import basicItemView
from ui.views.textEditView import textEditView
from ui.editors.editorWidget import editorWidget
from ui.sldImportance import sldImportance
from ui.views.basicItemView import basicItemView
from ui.views.lineEditView import lineEditView
from ui.views.metadataView import metadataView
from ui.views.outlineView import outlineView
from ui.views.treeView import treeView
from ui.views.textEditView import textEditView
from ui.views.outlineView import outlineView
from ui.views.metadataView import metadataView
from ui.sldImportance import sldImportance

View file

@ -1915,6 +1915,7 @@
</property>
<addaction name="actLabels"/>
<addaction name="actStatus"/>
<addaction name="actSettings"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
@ -2097,6 +2098,14 @@
<string>Outline</string>
</property>
</action>
<action name="actSettings">
<property name="icon">
<iconset theme="preferences-system"/>
</property>
<property name="text">
<string>Settings</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View file

@ -15,7 +15,59 @@ class Ui_Settings(object):
self.verticalLayout = QtWidgets.QVBoxLayout(Settings)
self.verticalLayout.setObjectName("verticalLayout")
self.tabWidget = QtWidgets.QTabWidget(Settings)
self.tabWidget.setDocumentMode(True)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.tab_3)
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.groupBox_2 = QtWidgets.QGroupBox(self.tab_3)
self.groupBox_2.setObjectName("groupBox_2")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.groupBox_2)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.label_2 = QtWidgets.QLabel(self.groupBox_2)
self.label_2.setObjectName("label_2")
self.verticalLayout_5.addWidget(self.label_2)
self.cmbStyle = QtWidgets.QComboBox(self.groupBox_2)
self.cmbStyle.setObjectName("cmbStyle")
self.verticalLayout_5.addWidget(self.cmbStyle)
self.verticalLayout_7.addWidget(self.groupBox_2)
self.groupBox = QtWidgets.QGroupBox(self.tab_3)
self.groupBox.setObjectName("groupBox")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.chkAutoSave = QtWidgets.QCheckBox(self.groupBox)
self.chkAutoSave.setChecked(True)
self.chkAutoSave.setObjectName("chkAutoSave")
self.horizontalLayout_5.addWidget(self.chkAutoSave)
self.txtAutoSave = QtWidgets.QLineEdit(self.groupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.txtAutoSave.sizePolicy().hasHeightForWidth())
self.txtAutoSave.setSizePolicy(sizePolicy)
self.txtAutoSave.setMaximumSize(QtCore.QSize(50, 16777215))
self.txtAutoSave.setStyleSheet("border-radius: 6px;")
self.txtAutoSave.setMaxLength(3)
self.txtAutoSave.setAlignment(QtCore.Qt.AlignCenter)
self.txtAutoSave.setObjectName("txtAutoSave")
self.horizontalLayout_5.addWidget(self.txtAutoSave)
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setObjectName("label")
self.horizontalLayout_5.addWidget(self.label)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_5.addItem(spacerItem)
self.verticalLayout_6.addLayout(self.horizontalLayout_5)
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)
self.tabWidget.addTab(self.tab_3, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab)
@ -40,8 +92,8 @@ class Ui_Settings(object):
self.btnLabelColor.setIconSize(QtCore.QSize(64, 64))
self.btnLabelColor.setObjectName("btnLabelColor")
self.verticalLayout_2.addWidget(self.btnLabelColor)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem2)
self.horizontalLayout_2.addLayout(self.verticalLayout_2)
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
self.horizontalLayout = QtWidgets.QHBoxLayout()
@ -58,8 +110,8 @@ class Ui_Settings(object):
self.btnLabelRemove.setIcon(icon)
self.btnLabelRemove.setObjectName("btnLabelRemove")
self.horizontalLayout.addWidget(self.btnLabelRemove)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem3)
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
@ -83,8 +135,8 @@ class Ui_Settings(object):
self.btnStatusRemove.setIcon(icon)
self.btnStatusRemove.setObjectName("btnStatusRemove")
self.horizontalLayout_3.addWidget(self.btnStatusRemove)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_3.addItem(spacerItem2)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_3.addItem(spacerItem4)
self.verticalLayout_4.addLayout(self.horizontalLayout_3)
self.tabWidget.addTab(self.tab_2, "")
self.verticalLayout.addWidget(self.tabWidget)
@ -96,6 +148,13 @@ class Ui_Settings(object):
def retranslateUi(self, Settings):
_translate = QtCore.QCoreApplication.translate
Settings.setWindowTitle(_translate("Settings", "Form"))
self.groupBox_2.setTitle(_translate("Settings", "Application style"))
self.label_2.setText(_translate("Settings", "You might need to restart the app in order to avoid some visual issues."))
self.groupBox.setTitle(_translate("Settings", "Saving"))
self.chkAutoSave.setText(_translate("Settings", "Automatically save every"))
self.label.setText(_translate("Settings", "minutes."))
self.chkSaveOnQuit.setText(_translate("Settings", "Save on quit"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Settings", "General"))
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"))

View file

@ -19,6 +19,126 @@
<property name="currentIndex">
<number>0</number>
</property>
<property name="documentMode">
<bool>true</bool>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>General</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Application style</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>You might need to restart the app in order to avoid some visual issues.</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cmbStyle"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Saving</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QCheckBox" name="chkAutoSave">
<property name="text">
<string>Automatically save every</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txtAutoSave">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">border-radius: 6px;</string>
</property>
<property name="maxLength">
<number>3</number>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>minutes.</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<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>
<widget class="QCheckBox" name="chkSaveOnQuit">
<property name="text">
<string>Save on quit</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Labels</string>

Binary file not shown.