diff --git a/resources/themes/gentleblues.theme b/resources/themes/gentleblues.theme
new file mode 100644
index 0000000..0de7584
--- /dev/null
+++ b/resources/themes/gentleblues.theme
@@ -0,0 +1,40 @@
+[General]
+LoadColor=#a8bacc
+Name="Gentle Blues"
+
+[Background]
+Color=#a8bacc
+ImageFile=
+Type=0
+
+[Foreground]
+Color=#a8bacc
+Margin=65
+Opacity=0
+Padding=10
+Position=1
+Rounding=0
+RoundingDisabled=10
+Width=700
+
+[ForegroundBlur]
+Enabled=false
+Radius=32
+
+[ForegroundShadow]
+Color=#000000
+Enabled=false
+Offset=2
+Radius=8
+
+[Spacings]
+IndentFirstLine=false
+LineSpacing=100
+ParagraphAbove=0
+ParagraphBelow=0
+TabWidth=48
+
+[Text]
+Color=#2d3f56
+Font="Times New Roman,12,-1,5,50,0,0,0,0,0"
+Misspelled=#ff0000
diff --git a/resources/themes/oldschool.theme b/resources/themes/oldschool.theme
new file mode 100644
index 0000000..e7427a0
--- /dev/null
+++ b/resources/themes/oldschool.theme
@@ -0,0 +1,39 @@
+[General]
+LoadColor=#000000
+
+[Background]
+Color=#000000
+ImageFile=
+Type=0
+
+[Foreground]
+Color=#000000
+Margin=65
+Opacity=0
+Padding=10
+Position=1
+Rounding=0
+RoundingDisabled=10
+Width=700
+
+[ForegroundBlur]
+Enabled=false
+Radius=32
+
+[ForegroundShadow]
+Color=#000000
+Enabled=false
+Offset=2
+Radius=8
+
+[Spacings]
+IndentFirstLine=false
+LineSpacing=100
+ParagraphAbove=0
+ParagraphBelow=0
+TabWidth=48
+
+[Text]
+Color=#0cf155
+Font="Courier New,12,-1,5,50,0,0,0,0,0"
+Misspelled=#0d5322
diff --git a/resources/themes/preview.txt b/resources/themes/preview.txt
new file mode 100644
index 0000000..9d55372
--- /dev/null
+++ b/resources/themes/preview.txt
@@ -0,0 +1,5 @@
+In the beginning was the Word, and the Word was with God, and the Word was God. He was with God in the beginning. Through him all things were made; without him nothing was made that has been made. In him was life, and that life was the light of all mankind. The light shines in the darkness, and the darkness has not overcome[a] it.
+There was a man sent from God whose name was John. He came as a witness to testify concerning that light, so that through him all might believe. He himself was not the light; he came only as a witness to the light.
+The true light that gives light to everyone was coming into the world. He was in the world, and though the world was made through him, the world did not recognize him. He came to that which was his own, but his own did not receive him. Yet to all who did receive him, to those who believed in his name, he gave the right to become children of God— children born not of natural descent, nor of human decision or a husband’s will, but born of God.
+The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son, who came from the Father, full of grace and truth.
+(John testified concerning him. He cried out, saying, “This is the one I spoke about when I said, ‘He who comes after me has surpassed me because he was before me.’”) Out of his fullness we have all received grace in place of grace already given. For the law was given through Moses; grace and truth came through Jesus Christ. No one has ever seen God, but the one and only Son, who is himself God and[b] is in closest relationship with the Father, has made him known.
\ No newline at end of file
diff --git a/resources/themes/spacedreams.theme b/resources/themes/spacedreams.theme
new file mode 100644
index 0000000..61ba90b
--- /dev/null
+++ b/resources/themes/spacedreams.theme
@@ -0,0 +1,39 @@
+[General]
+LoadColor=#5d3e3d
+
+[Background]
+Color=#000000
+ImageFile=spacedreams.jpg
+Type=5
+
+[Foreground]
+Color=#beaf9b
+Margin=65
+Opacity=50
+Padding=10
+Position=1
+Rounding=10
+RoundingDisabled=0
+Width=700
+
+[ForegroundBlur]
+Enabled=true
+Radius=32
+
+[ForegroundShadow]
+Color=#000000
+Enabled=true
+Offset=2
+Radius=16
+
+[Spacings]
+IndentFirstLine=false
+LineSpacing=100
+ParagraphAbove=0
+ParagraphBelow=0
+TabWidth=48
+
+[Text]
+Color=#000000
+Font="Times New Roman,12,-1,5,50,0,0,0,0,0"
+Misspelled=#ff0000
diff --git a/resources/themes/writingdesk.theme b/resources/themes/writingdesk.theme
new file mode 100644
index 0000000..f13faca
--- /dev/null
+++ b/resources/themes/writingdesk.theme
@@ -0,0 +1,39 @@
+[General]
+LoadColor=#985a20
+
+[Background]
+Color=#985a20
+ImageFile=writingdesk.jpg
+Type=5
+
+[Foreground]
+Color=#fffdf6
+Margin=65
+Opacity=100
+Padding=10
+Position=1
+Rounding=0
+RoundingDisabled=10
+Width=700
+
+[ForegroundBlur]
+Enabled=false
+Radius=32
+
+[ForegroundShadow]
+Color=#000000
+Enabled=true
+Offset=1
+Radius=4
+
+[Spacings]
+IndentFirstLine=false
+LineSpacing=100
+ParagraphAbove=0
+ParagraphBelow=0
+TabWidth=48
+
+[Text]
+Color=#000000
+Font="Times New Roman,12,-1,5,50,0,0,0,0,0"
+Misspelled=#ff0000
diff --git a/src/functions.py b/src/functions.py
index 512a2f5..8a640b8 100644
--- a/src/functions.py
+++ b/src/functions.py
@@ -135,26 +135,30 @@ def colorifyPixmap(pixmap, color):
p.fillRect(pixmap.rect(), color)
return pixmap
-def appPath():
- return os.path.realpath(os.path.join(os.path.split(__file__)[0], ".."))
+def appPath(suffix=None):
+ p = os.path.realpath(os.path.join(os.path.split(__file__)[0], ".."))
+ if suffix:
+ p = os.path.join(p, suffix)
+ return p
-def writablePath():
- return QStandardPaths.writableLocation(QStandardPaths.AppLocalDataLocation)
+def writablePath(suffix=None):
+ p = QStandardPaths.writableLocation(QStandardPaths.AppLocalDataLocation)
+ if suffix:
+ p = os.path.join(p, suffix)
+ return p
def allPaths(suffix=None):
paths = []
# src directory
- paths.append(appPath())
+ paths.append(appPath(suffix))
# user writable directory
- paths.append(writablePath())
-
- if suffix:
- paths2 = []
- for p in paths:
- p2 = os.path.join(p, suffix)
- paths2.append(p2)
- if not os.path.exists(p2):
- os.makedirs(p2)
- paths = paths2
-
- return paths
\ No newline at end of file
+ paths.append(writablePath(suffix))
+ return paths
+
+def findBackground(filename):
+ paths = allPaths("resources/backgrounds")
+ for p in paths:
+ lst = os.listdir(p)
+ for l in lst:
+ if l == filename:
+ return os.path.join(p, l)
\ No newline at end of file
diff --git a/src/settingsWindow.py b/src/settingsWindow.py
index cc174d4..78c3e10 100644
--- a/src/settingsWindow.py
+++ b/src/settingsWindow.py
@@ -60,7 +60,8 @@ class settingsWindow(QWidget, Ui_Settings):
chk.setChecked(col in settings.outlineViewColumns)
chk.stateChanged.connect(self.outlineColumnsChanged)
- self.populatesCorkBackgrounds()
+ self.populatesCmbBackgrounds(self.cmbCorkImage)
+ self.setCorkImageDefault()
self.updateCorkColor()
self.cmbCorkImage.currentIndexChanged.connect(self.setCorkBackground)
self.btnCorkColor.clicked.connect(self.setCorkColor)
@@ -80,11 +81,28 @@ class settingsWindow(QWidget, Ui_Settings):
self.btnStatusRemove.clicked.connect(self.removeStatus)
# Fullscreen
- self.btnThemeEditOK.setIcon(qApp.style().standardIcon(QStyle.SP_DialogOkButton))
- self.cmbThemeEdit.currentIndexChanged.connect(self.themeStack.setCurrentIndex)
+ self._editingTheme = None
+ # Preview editor
+ self.previewText = QTextEdit()
+ self.previewText.setFrameStyle(QFrame.NoFrame)
+ self.previewText.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+ self.previewText.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+ self.previewText.setPlainText(open(appPath("resources/themes/preview.txt")).read())
+ # UI stuff
+ self.btnThemeEditOK.setIcon(qApp.style().standardIcon(QStyle.SP_DialogApplyButton))
+ self.btnThemeEditOK.clicked.connect(self.saveTheme)
+ self.btnThemeEditCancel.setIcon(qApp.style().standardIcon(QStyle.SP_DialogCancelButton))
+ self.btnThemeEditCancel.clicked.connect(self.cancelEdit)
+ self.cmbThemeEdit.currentIndexChanged.connect(self.themeEditStack.setCurrentIndex)
self.cmbThemeEdit.setCurrentIndex(0)
self.cmbThemeEdit.currentIndexChanged.emit(0)
- print(QStandardPaths.writableLocation(QStandardPaths.AppLocalDataLocation))
+ self.themeStack.setCurrentIndex(0)
+ self.populatesThemesList()
+ self.lstThemes.currentItemChanged.connect(self.themeSelected)
+ self.btnThemeAdd.clicked.connect(self.newTheme)
+ self.btnThemeEdit.clicked.connect(self.editTheme)
+ self.btnThemeRemove.clicked.connect(self.removeTheme)
+
def setTab(self, tab):
@@ -197,23 +215,24 @@ class settingsWindow(QWidget, Ui_Settings):
# Update Cork view
self.mw.redacEditor.corkView.updateBackground()
- def populatesCorkBackgrounds(self):
+ def populatesCmbBackgrounds(self, cmb):
#self.cmbDelegate = cmbPixmapDelegate()
#self.cmbCorkImage.setItemDelegate(self.cmbDelegate)
paths = allPaths("resources/backgrounds")
-
- self.cmbCorkImage.addItem(QIcon.fromTheme("list-remove"), "", "")
+ cmb.clear()
+ cmb.addItem(QIcon.fromTheme("list-remove"), "", "")
for p in paths:
lst = os.listdir(p)
for l in lst:
if l.lower()[-4:] in [".jpg", ".png"] or \
l.lower()[-5:] in [".jpeg"]:
px = QPixmap(os.path.join(p, l)).scaled(128, 64, Qt.KeepAspectRatio)
- self.cmbCorkImage.addItem(QIcon(px), "", os.path.join(p, l))
+ cmb.addItem(QIcon(px), "", os.path.join(p, l))
- self.cmbCorkImage.setIconSize(QSize(128, 64))
+ cmb.setIconSize(QSize(128, 64))
+ def setCorkImageDefault(self):
if settings.corkBackground["image"] != "":
i = self.cmbCorkImage.findData(settings.corkBackground["image"])
if i != -1:
@@ -259,4 +278,451 @@ class settingsWindow(QWidget, Ui_Settings):
px = QPixmap(32, 32)
px.fill(color)
self.mw.mdlLabels.item(index.row()).setIcon(QIcon(px))
- self.updateLabelColor(index)
\ No newline at end of file
+ self.updateLabelColor(index)
+
+####################################################################################################
+# FULLSCREEN #
+####################################################################################################
+
+ def themeSelected(self, current, previous):
+ if current:
+ self.btnThemeEdit.setEnabled(current.data(Qt.UserRole+1))
+ self.btnThemeRemove.setEnabled(current.data(Qt.UserRole+1))
+ else:
+ self.btnThemeEdit.setEnabled(False)
+ self.btnThemeRemove.setEnabled(False)
+
+ def newTheme(self):
+ path = writablePath("resources/themes")
+ name = self.tr("newtheme")
+ if os.path.exists(os.path.join(path, "{}.theme".format(name))):
+ i = 1
+ while os.path.exists(os.path.join(path, "{}_{}.theme".format(name, i))):
+ i += 1
+ name = os.path.join(path, "{}_{}.theme".format(name, i))
+ else:
+ name = os.path.join(path, "{}.theme".format(name))
+
+ settings = QSettings(name, QSettings.IniFormat)
+ settings.setValue("Name", self.tr("New theme"))
+ settings.sync()
+ print(name)
+
+ self.populatesThemesList()
+
+ def editTheme(self):
+ item = self.lstThemes.currentItem()
+ theme = item.data(Qt.UserRole)
+ self.loadTheme(theme)
+ self.themeStack.setCurrentIndex(1)
+
+ def removeTheme(self):
+ item = self.lstThemes.currentItem()
+ theme = item.data(Qt.UserRole)
+ os.remove(theme)
+ self.populatesThemesList()
+
+ def populatesThemesList(self):
+ paths = allPaths("resources/themes")
+ self.lstThemes.clear()
+
+ for p in paths:
+ lst = [i for i in os.listdir(p) if os.path.splitext(i)[1] == ".theme"]
+ for t in lst:
+ theme = os.path.join(p, t)
+ editable = not appPath() in theme
+ n = self.getThemeName(theme)
+
+ item = QListWidgetItem(n)
+ item.setData(Qt.UserRole, theme)
+ item.setData(Qt.UserRole+1, editable)
+
+ thumb = os.path.join(p, t.replace(".theme", ".jpg"))
+ px = QPixmap(200, 120)
+ px.fill(Qt.white)
+ if not os.path.exists(thumb):
+ thumb = self.createPreview(theme)
+
+ icon = QPixmap(thumb).scaled(200, 120, Qt.KeepAspectRatio)
+ painter = QPainter(px)
+ painter.drawPixmap(px.rect().center()-icon.rect().center(), icon)
+ painter.end()
+ item.setIcon(QIcon(px))
+
+ self.lstThemes.addItem(item)
+ self.lstThemes.setIconSize(QSize(200, 120))
+
+ def getThemeName(self, theme):
+ settings = QSettings(theme, QSettings.IniFormat)
+
+ if settings.contains("Name"):
+ return settings.value("Name")
+ else:
+ return os.path.splitext(os.path.split(theme)[1])[0]
+
+ def loadTheme(self, theme):
+ self._editingTheme = theme
+ self._loadingTheme = True # So we don't generate preview while loading
+
+ # Load datas
+ self.loadThemeDatas(theme)
+
+ # Window Background
+ self.btnThemWindowBackgroundColor.clicked.connect(lambda: self.getThemeColor("Background/Color"))
+ try:
+ self.cmbThemeBackgroundImage.disconnect()
+ except:
+ pass
+ self.populatesCmbBackgrounds(self.cmbThemeBackgroundImage)
+ self.cmbThemeBackgroundImage.currentIndexChanged.connect(self.updateThemeBackground)
+ self.cmbThemBackgroundType.currentIndexChanged.connect(lambda i: self.setSetting("Background/Type", i))
+
+ # Text Background
+ self.btnThemeTextBackgroundColor.clicked.connect(lambda: self.getThemeColor("Foreground/Color"))
+ self.spnThemeTextBackgroundOpacity.valueChanged.connect(lambda v: self.setSetting("Foreground/Opacity", v))
+ self.spnThemeTextMargins.valueChanged.connect(lambda v: self.setSetting("Foreground/Margin", v))
+ self.spnThemeTextPadding.valueChanged.connect(lambda v: self.setSetting("Foreground/Padding", v))
+ self.cmbThemeTextPosition.currentIndexChanged.connect(lambda i: self.setSetting("Foreground/Position", i))
+ self.spnThemeTextRadius.valueChanged.connect(lambda v: self.setSetting("Foreground/Rounding", v))
+ self.spnThemeTextWidth.valueChanged.connect(lambda v: self.setSetting("Foreground/Width", v))
+
+ # Text Options
+ self.btnThemeTextColor.clicked.connect(lambda: self.getThemeColor("Text/Color"))
+ self.cmbThemeFont.currentFontChanged.connect(self.updateThemeFont)
+ try:
+ self.cmbThemeFontSize.currentIndexChanged.disconnect(self.updateThemeFont)
+ except:
+ pass
+ self.populatesFontSize()
+ self.cmbThemeFontSize.currentIndexChanged.connect(self.updateThemeFont)
+ self.btnThemeMisspelledColor.clicked.connect(lambda: self.getThemeColor("Text/Misspelled"))
+
+ # Paragraph Options
+ self.chkThemeIndent.stateChanged.connect(lambda v: self.setSetting("Spacings/IndendFirstLine", v!=0))
+ self.cmbThemeLineSpacing.currentIndexChanged.connect(self.updateLineSpacing)
+ self.cmbThemeLineSpacing.currentIndexChanged.connect(self.updateLineSpacing)
+ self.spnThemeLineSpacing.valueChanged.connect(lambda v: self.setSetting("Spacings/LineSpacing", v))
+ self.spnThemeParaAbove.valueChanged.connect(lambda v: self.setSetting("Spacings/ParagraphAbove", v))
+ self.spnThemeParaBelow.valueChanged.connect(lambda v: self.setSetting("Spacings/ParagraphBelow", v))
+ self.spnThemeTabWidth.valueChanged.connect(lambda v: self.setSetting("Spacings/TabWidth", v))
+
+ # Update UI
+ self.updateUIFromTheme()
+
+ # Generate preview
+ self._loadingTheme = False
+ self.updatePreview()
+
+ def loadThemeDatas(self, theme):
+ settings = QSettings(theme, QSettings.IniFormat)
+ self._themeData = {}
+
+ # Theme name
+ self._themeData["Name"] = self.getThemeName(theme)
+
+ # Window Background
+ self.loadSetting(settings, "Background/Color", "#000000")
+ self.loadSetting(settings, "Background/ImageFile", "")
+ self.loadSetting(settings, "Background/Type", 0)
+
+ # Text Background
+ self.loadSetting(settings, "Foreground/Color", "#ffffff")
+ self.loadSetting(settings, "Foreground/Opacity", 50)
+ self.loadSetting(settings, "Foreground/Margin", 40)
+ self.loadSetting(settings, "Foreground/Padding", 10)
+ self.loadSetting(settings, "Foreground/Position", 1)
+ self.loadSetting(settings, "Foreground/Rounding", 5)
+ self.loadSetting(settings, "Foreground/Width", 700)
+
+ # Text Options
+ self.loadSetting(settings, "Text/Color", "#ffffff")
+ self.loadSetting(settings, "Text/Font", qApp.font().toString())
+ self.loadSetting(settings, "Text/Misspelled", "#ff0000")
+
+ # Paragraph Options
+ self.loadSetting(settings, "Spacings/IndendFirstLine", False)
+ self.loadSetting(settings, "Spacings/LineSpacing", 100)
+ self.loadSetting(settings, "Spacings/ParagraphAbove", 0)
+ self.loadSetting(settings, "Spacings/ParagraphBelow", 0)
+ self.loadSetting(settings, "Spacings/TabWidth", 48)
+
+ def loadSetting(self, settings, key, default):
+ if settings.contains(key):
+ self._themeData[key] = type(default)(settings.value(key))
+ else:
+ self._themeData[key] = default
+
+ def setSetting(self, key, val):
+ self._themeData[key] = val
+ self.updatePreview()
+
+ def updateUIFromTheme(self):
+ self.txtThemeName.setText(self._themeData["Name"])
+
+ # Window Background
+ self.setButtonColor(self.btnThemWindowBackgroundColor, self._themeData["Background/Color"])
+ i = self.cmbThemeBackgroundImage.findData(self._themeData["Background/ImageFile"], flags=Qt.MatchContains)
+ if i != -1:
+ self.cmbThemeBackgroundImage.setCurrentIndex(i)
+ self.cmbThemBackgroundType.setCurrentIndex(self._themeData["Background/Type"])
+
+ # Text background
+ self.setButtonColor(self.btnThemeTextBackgroundColor, self._themeData["Foreground/Color"])
+ self.spnThemeTextBackgroundOpacity.setValue(self._themeData["Foreground/Opacity"])
+ self.spnThemeTextMargins.setValue(self._themeData["Foreground/Margin"])
+ self.spnThemeTextPadding.setValue(self._themeData["Foreground/Padding"])
+ self.cmbThemeTextPosition.setCurrentIndex(self._themeData["Foreground/Position"])
+ self.spnThemeTextRadius.setValue(self._themeData["Foreground/Rounding"])
+ self.spnThemeTextWidth.setValue(self._themeData["Foreground/Width"])
+
+ # Text Options
+ self.setButtonColor(self.btnThemeTextColor, self._themeData["Text/Color"])
+ f = QFont()
+ f.fromString(self._themeData["Text/Font"])
+ self.cmbThemeFont.setCurrentFont(f)
+ i = self.cmbThemeFontSize.findText(str(f.pointSize()))
+ if i != -1:
+ self.cmbThemeFontSize.setCurrentIndex(i)
+ else:
+ self.cmbThemeFontSize.addItem(str(f.pointSize()))
+ self.cmbThemeFontSize.setCurrentIndex(self.cmbThemeFontSize.count()-1)
+ self.setButtonColor(self.btnThemeMisspelledColor, self._themeData["Text/Misspelled"])
+
+ # Paragraph Options
+ self.chkThemeIndent.setCheckState(Qt.Checked if self._themeData["Spacings/IndendFirstLine"] else Qt.Unchecked)
+ self.spnThemeLineSpacing.setEnabled(False)
+ if self._themeData["Spacings/LineSpacing"] == 100:
+ self.cmbThemeLineSpacing.setCurrentIndex(0)
+ elif self._themeData["Spacings/LineSpacing"] == 150:
+ self.cmbThemeLineSpacing.setCurrentIndex(1)
+ elif self._themeData["Spacings/LineSpacing"] == 200:
+ self.cmbThemeLineSpacing.setCurrentIndex(2)
+ else:
+ self.cmbThemeLineSpacing.setCurrentIndex(3)
+ self.spnThemeLineSpacing.setEnabled(True)
+ self.spnThemeLineSpacing.setValue(self._themeData["Spacings/LineSpacing"])
+ self.spnThemeParaAbove.setValue(self._themeData["Spacings/ParagraphAbove"])
+ self.spnThemeParaBelow.setValue(self._themeData["Spacings/ParagraphBelow"])
+ self.spnThemeTabWidth.setValue(self._themeData["Spacings/TabWidth"])
+
+ def populatesFontSize(self):
+ self.cmbThemeFontSize.clear()
+ s = list(range(6, 13)) + list(range(14,29, 2)) + [36, 48, 72]
+ for i in s:
+ self.cmbThemeFontSize.addItem(str(i))
+
+ def updateThemeFont(self, v):
+ f = self.cmbThemeFont.currentFont()
+ s = self.cmbThemeFontSize.itemText(self.cmbThemeFontSize.currentIndex())
+ if s:
+ f.setPointSize(int(s))
+
+ self._themeData["Text/Font"] = f.toString()
+ self.updatePreview()
+
+ def updateLineSpacing(self, i):
+ if i == 0:
+ self._themeData["Spacings/LineSpacing"] = 100
+ elif i == 1:
+ self._themeData["Spacings/LineSpacing"] = 150
+ elif i == 2:
+ self._themeData["Spacings/LineSpacing"] = 200
+ elif i == 3:
+ self._themeData["Spacings/LineSpacing"] = self.spnThemeLineSpacing.value()
+ self.spnThemeLineSpacing.setEnabled(i == 3)
+ self.updatePreview()
+
+ def updateThemeBackground(self, i):
+ img = self.cmbCorkImage.itemData(i)
+
+ if img:
+ self._themeData["Background/ImageFile"] = os.path.split(img)[1]
+ else:
+ self._themeData["Background/ImageFile"] = ""
+ self.updatePreview()
+
+ def getThemeColor(self, key):
+ color = self._themeData[key]
+ self.colorDialog = QColorDialog(QColor(color), self)
+ color = self.colorDialog.getColor(QColor(color))
+ if color.isValid():
+ self._themeData[key] = color.name()
+ self.updateUIFromTheme()
+ self.updatePreview()
+
+ def updatePreview(self):
+ if self._loadingTheme:
+ return
+
+ px = self.createPreview(self._editingTheme, self.lblPreview.size())
+ self.lblPreview.setPixmap(px)
+
+ def createPreview(self, theme, size=QSize(200, 120)):
+ pixmap = self.getPixmapFromTheme(theme)
+
+ px = QPixmap(pixmap).scaled(size, Qt.KeepAspectRatio)
+
+ w = px.width() / 10
+ h = px.height() / 10
+ r = self.textRect()
+
+ painter = QPainter(px)
+ painter.drawPixmap(QRect(w, h, w*4, h*5), pixmap, QRect(r.topLeft() - QPoint(w/3, h/3), QSize(w*4, h*5)))
+ painter.setPen(Qt.white)
+ painter.drawRect(QRect(w, h, w*4, h*5))
+ painter.end()
+
+ return px
+
+ def setButtonColor(self, btn, color):
+ btn.setStyleSheet("background:{};".format(color))
+
+ def saveTheme(self):
+ settings = QSettings(self._editingTheme, QSettings.IniFormat)
+
+ self._themeData["Name"] = self.txtThemeName.text()
+ for key in self._themeData:
+ settings.setValue(key, self._themeData[key])
+
+ settings.sync()
+ self.populatesThemesList()
+ self.themeStack.setCurrentIndex(0)
+ self._editingTheme = None
+
+ def cancelEdit(self):
+ self.themeStack.setCurrentIndex(0)
+ self._editingTheme = None
+
+ def getPixmapFromTheme(self, theme):
+
+ if not self._editingTheme:
+ self.loadThemeDatas(theme)
+
+ currentScreen = qApp.desktop().screenNumber(self)
+ screen = qApp.desktop().screenGeometry(currentScreen)
+
+ # Window Background
+ px = QPixmap(screen.size())
+ px.fill(QColor(self._themeData["Background/Color"]))
+
+ painter = QPainter(px)
+ if self._themeData["Background/ImageFile"]:
+ path = findBackground(self._themeData["Background/ImageFile"])
+ _type =self._themeData["Background/Type"]
+ if path and _type > 0:
+ if _type == 1: # Tiled
+ painter.fillRect(screen, QBrush(QImage(path)))
+ else:
+ img = QImage(path)
+ scaled = img.size()
+ if _type == 3: # Stretched
+ scaled.scale(screen.size(), Qt.IgnoreAspectRatio)
+ elif _type == 4: # Scaled
+ scaled.scale(screen.size(), Qt.KeepAspectRatio)
+ elif _type == 5: # Zoomed
+ scaled.scale(screen.size(), Qt.KeepAspectRatioByExpanding)
+
+ painter.drawImage((screen.width() - scaled.width()) / 2, (screen.height() - scaled.height()) / 2, img.scaled(scaled))
+
+ # Text Background
+ textRect = self.textRect()
+
+ painter.save()
+ color = QColor(self._themeData["Foreground/Color"])
+ color.setAlpha(self._themeData["Foreground/Opacity"] * 255 / 100)
+ painter.setBrush(color)
+ painter.setPen(Qt.NoPen)
+ r = self._themeData["Foreground/Rounding"]
+ painter.drawRoundedRect(textRect, r, r)
+ painter.restore()
+
+ painter.end()
+
+ # Text
+ padding = self._themeData["Foreground/Padding"]
+ x = textRect.x() + padding
+ y = textRect.y() + padding + self._themeData["Spacings/ParagraphAbove"]
+ width = textRect.width() - 2 * padding
+ height = textRect.height() - 2 * padding - self._themeData["Spacings/ParagraphAbove"]
+ self.previewText.setGeometry(x, y, width, height)
+
+ p = self.previewText.palette()
+ p.setBrush(QPalette.Base, QBrush(px.copy(x, y, width, height)))
+ p.setColor(QPalette.Text, QColor(self._themeData["Text/Color"]))
+ p.setColor(QPalette.Highlight, QColor(self._themeData["Text/Color"]))
+ p.setColor(QPalette.HighlightedText, Qt.black if qGray(QColor(self._themeData["Text/Color"]).rgb()) > 127 else Qt.white)
+ self.previewText.setPalette(p)
+
+ bf = QTextBlockFormat()
+ bf.setLineHeight(self._themeData["Spacings/LineSpacing"], QTextBlockFormat.ProportionalHeight)
+ bf.setTextIndent(self._themeData["Spacings/TabWidth"] * 1 if self._themeData["Spacings/IndendFirstLine"] else 0)
+ bf.setTopMargin(self._themeData["Spacings/ParagraphAbove"])
+ bf.setBottomMargin(self._themeData["Spacings/ParagraphBelow"])
+
+ b = self.previewText.document().firstBlock()
+ cursor = self.previewText.textCursor()
+ while b.isValid():
+ bf2 = b.blockFormat()
+ bf2.merge(bf)
+ cursor.setPosition(b.position())
+ #cursor.setPosition(b.position(), QTextCursor.KeepAnchor)
+ cursor.setBlockFormat(bf2)
+ b = b.next()
+
+ self.previewText.setTabStopWidth(self._themeData["Spacings/TabWidth"])
+ self.previewText.document().setIndentWidth(self._themeData["Spacings/TabWidth"])
+
+ f = QFont()
+ f.fromString(self._themeData["Text/Font"])
+ self.previewText.setFont(f)
+
+ self.previewText.render(px, self.previewText.pos())
+ return px
+
+
+ ## Text Background
+ ##self._themeData["Foreground/Color"]
+ ##self._themeData["Foreground/Opacity"]
+ ##self._themeData["Foreground/Margin"]
+ ##self._themeData["Foreground/Padding"]
+ ##self._themeData["Foreground/Position"]
+ ##self._themeData["Foreground/Rounding"]
+ ##self._themeData["Foreground/Width"]
+
+ ## Text Options
+ ##self._themeData["Text/Color"]
+ ##self._themeData["Text/Font"]
+ #self._themeData["Text/Misspelled"]
+
+ ## Paragraph Options
+ ##self._themeData["Spacings/IndendFirstLine"]
+ ##self._themeData["Spacings/LineSpacing"]
+ ##self._themeData["Spacings/ParagraphAbove"]
+ ##self._themeData["Spacings/ParagraphBelow"]
+ ##self._themeData["Spacings/TabWidth"]
+
+ def textRect(self):
+ currentScreen = qApp.desktop().screenNumber(self)
+ screen = qApp.desktop().screenGeometry(currentScreen)
+
+ margin = self._themeData["Foreground/Margin"]
+ x = 0
+ y = margin
+ width = min(self._themeData["Foreground/Width"], screen.width() - 2 * margin)
+ height = screen.height() - 2 * margin
+
+ if self._themeData["Foreground/Position"] == 0: # Left
+ x = margin
+ elif self._themeData["Foreground/Position"] == 1: # Center
+ x = (screen.width() - width) / 2
+ elif self._themeData["Foreground/Position"] == 2: # Right
+ x = screen.width() - margin - width
+ elif self._themeData["Foreground/Position"] == 3: # Stretched
+ x = margin
+ width = screen.width() - 2 * margin
+ return QRect(x, y, width, height)
+
+ def resizeEvent(self, event):
+ QWidget.resizeEvent(self, event)
+ if self._editingTheme:
+ self.updatePreview()
\ No newline at end of file
diff --git a/src/ui/settings.py b/src/ui/settings.py
index f262ce4..64e8180 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(634, 382)
+ Settings.resize(658, 486)
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(Settings)
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.lstMenu = QtWidgets.QListWidget(Settings)
@@ -718,26 +718,32 @@ class Ui_Settings(object):
self.lblTitleStatus_2.setAlignment(QtCore.Qt.AlignCenter)
self.lblTitleStatus_2.setObjectName("lblTitleStatus_2")
self.verticalLayout_10.addWidget(self.lblTitleStatus_2)
- self.tabWidget = QtWidgets.QTabWidget(self.page)
- self.tabWidget.setObjectName("tabWidget")
- self.tab_4 = QtWidgets.QWidget()
- self.tab_4.setObjectName("tab_4")
- self.verticalLayout_12 = QtWidgets.QVBoxLayout(self.tab_4)
+ self.themeStack = QtWidgets.QStackedWidget(self.page)
+ self.themeStack.setObjectName("themeStack")
+ self.stackedWidgetPage1_3 = QtWidgets.QWidget()
+ self.stackedWidgetPage1_3.setObjectName("stackedWidgetPage1_3")
+ self.verticalLayout_12 = QtWidgets.QVBoxLayout(self.stackedWidgetPage1_3)
self.verticalLayout_12.setObjectName("verticalLayout_12")
- self.listWidget = QtWidgets.QListWidget(self.tab_4)
- self.listWidget.setObjectName("listWidget")
- self.verticalLayout_12.addWidget(self.listWidget)
+ self.lstThemes = QtWidgets.QListWidget(self.stackedWidgetPage1_3)
+ self.lstThemes.setMovement(QtWidgets.QListView.Static)
+ self.lstThemes.setResizeMode(QtWidgets.QListView.Adjust)
+ self.lstThemes.setViewMode(QtWidgets.QListView.IconMode)
+ self.lstThemes.setUniformItemSizes(True)
+ self.lstThemes.setObjectName("lstThemes")
+ self.verticalLayout_12.addWidget(self.lstThemes)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
- self.btnThemeAdd = QtWidgets.QPushButton(self.tab_4)
+ self.btnThemeAdd = QtWidgets.QPushButton(self.stackedWidgetPage1_3)
icon = QtGui.QIcon.fromTheme("list-add")
self.btnThemeAdd.setIcon(icon)
self.btnThemeAdd.setObjectName("btnThemeAdd")
self.horizontalLayout_6.addWidget(self.btnThemeAdd)
- self.btnThemEdit = QtWidgets.QPushButton(self.tab_4)
- self.btnThemEdit.setObjectName("btnThemEdit")
- self.horizontalLayout_6.addWidget(self.btnThemEdit)
- self.btnThemeRemove = QtWidgets.QPushButton(self.tab_4)
+ self.btnThemeEdit = QtWidgets.QPushButton(self.stackedWidgetPage1_3)
+ self.btnThemeEdit.setEnabled(False)
+ self.btnThemeEdit.setObjectName("btnThemeEdit")
+ self.horizontalLayout_6.addWidget(self.btnThemeEdit)
+ self.btnThemeRemove = QtWidgets.QPushButton(self.stackedWidgetPage1_3)
+ self.btnThemeRemove.setEnabled(False)
icon = QtGui.QIcon.fromTheme("list-remove")
self.btnThemeRemove.setIcon(icon)
self.btnThemeRemove.setObjectName("btnThemeRemove")
@@ -745,12 +751,42 @@ class Ui_Settings(object):
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_6.addItem(spacerItem9)
self.verticalLayout_12.addLayout(self.horizontalLayout_6)
- self.tabWidget.addTab(self.tab_4, "")
- self.tab_5 = QtWidgets.QWidget()
- self.tab_5.setObjectName("tab_5")
- self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.tab_5)
+ self.themeStack.addWidget(self.stackedWidgetPage1_3)
+ self.stackedWidgetPage2_3 = QtWidgets.QWidget()
+ self.stackedWidgetPage2_3.setObjectName("stackedWidgetPage2_3")
+ self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.stackedWidgetPage2_3)
self.verticalLayout_13.setObjectName("verticalLayout_13")
- self.splitter = QtWidgets.QSplitter(self.tab_5)
+ self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_10.setObjectName("horizontalLayout_10")
+ self.label_33 = QtWidgets.QLabel(self.stackedWidgetPage2_3)
+ self.label_33.setObjectName("label_33")
+ self.horizontalLayout_10.addWidget(self.label_33)
+ self.txtThemeName = QtWidgets.QLineEdit(self.stackedWidgetPage2_3)
+ self.txtThemeName.setObjectName("txtThemeName")
+ self.horizontalLayout_10.addWidget(self.txtThemeName)
+ self.btnThemeEditOK = QtWidgets.QPushButton(self.stackedWidgetPage2_3)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.btnThemeEditOK.sizePolicy().hasHeightForWidth())
+ self.btnThemeEditOK.setSizePolicy(sizePolicy)
+ self.btnThemeEditOK.setObjectName("btnThemeEditOK")
+ self.horizontalLayout_10.addWidget(self.btnThemeEditOK)
+ self.btnThemeEditCancel = QtWidgets.QPushButton(self.stackedWidgetPage2_3)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.btnThemeEditCancel.sizePolicy().hasHeightForWidth())
+ self.btnThemeEditCancel.setSizePolicy(sizePolicy)
+ self.btnThemeEditCancel.setObjectName("btnThemeEditCancel")
+ self.horizontalLayout_10.addWidget(self.btnThemeEditCancel)
+ self.verticalLayout_13.addLayout(self.horizontalLayout_10)
+ self.line = QtWidgets.QFrame(self.stackedWidgetPage2_3)
+ self.line.setFrameShape(QtWidgets.QFrame.HLine)
+ self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
+ self.line.setObjectName("line")
+ self.verticalLayout_13.addWidget(self.line)
+ self.splitter = QtWidgets.QSplitter(self.stackedWidgetPage2_3)
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setHandleWidth(3)
self.splitter.setChildrenCollapsible(False)
@@ -760,27 +796,15 @@ class Ui_Settings(object):
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout_14.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_14.setObjectName("verticalLayout_14")
- self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.cmbThemeEdit = QtWidgets.QComboBox(self.widget)
self.cmbThemeEdit.setObjectName("cmbThemeEdit")
self.cmbThemeEdit.addItem("")
self.cmbThemeEdit.addItem("")
self.cmbThemeEdit.addItem("")
self.cmbThemeEdit.addItem("")
- self.horizontalLayout_10.addWidget(self.cmbThemeEdit)
- self.btnThemeEditOK = QtWidgets.QPushButton(self.widget)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.btnThemeEditOK.sizePolicy().hasHeightForWidth())
- self.btnThemeEditOK.setSizePolicy(sizePolicy)
- self.btnThemeEditOK.setText("")
- self.btnThemeEditOK.setObjectName("btnThemeEditOK")
- self.horizontalLayout_10.addWidget(self.btnThemeEditOK)
- self.verticalLayout_14.addLayout(self.horizontalLayout_10)
- self.themeStack = QtWidgets.QStackedWidget(self.widget)
- self.themeStack.setObjectName("themeStack")
+ self.verticalLayout_14.addWidget(self.cmbThemeEdit)
+ self.themeEditStack = QtWidgets.QStackedWidget(self.widget)
+ self.themeEditStack.setObjectName("themeEditStack")
self.stackedWidgetPage1_2 = QtWidgets.QWidget()
self.stackedWidgetPage1_2.setObjectName("stackedWidgetPage1_2")
self.formLayout_4 = QtWidgets.QFormLayout(self.stackedWidgetPage1_2)
@@ -809,8 +833,9 @@ class Ui_Settings(object):
self.cmbThemBackgroundType.addItem("")
self.cmbThemBackgroundType.addItem("")
self.cmbThemBackgroundType.addItem("")
+ self.cmbThemBackgroundType.addItem("")
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbThemBackgroundType)
- self.themeStack.addWidget(self.stackedWidgetPage1_2)
+ self.themeEditStack.addWidget(self.stackedWidgetPage1_2)
self.stackedWidgetPage2_2 = QtWidgets.QWidget()
self.stackedWidgetPage2_2.setObjectName("stackedWidgetPage2_2")
self.formLayout_5 = QtWidgets.QFormLayout(self.stackedWidgetPage2_2)
@@ -849,6 +874,7 @@ class Ui_Settings(object):
self.cmbThemeTextPosition.addItem("")
self.cmbThemeTextPosition.addItem("")
self.cmbThemeTextPosition.addItem("")
+ self.cmbThemeTextPosition.addItem("")
self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbThemeTextPosition)
self.label_23 = QtWidgets.QLabel(self.stackedWidgetPage2_2)
self.label_23.setObjectName("label_23")
@@ -892,7 +918,21 @@ class Ui_Settings(object):
self.spnThemeTextMargins.setProperty("value", 20)
self.spnThemeTextMargins.setObjectName("spnThemeTextMargins")
self.formLayout_5.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.spnThemeTextMargins)
- self.themeStack.addWidget(self.stackedWidgetPage2_2)
+ self.label_34 = QtWidgets.QLabel(self.stackedWidgetPage2_2)
+ self.label_34.setObjectName("label_34")
+ self.formLayout_5.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_34)
+ self.spnThemeTextPadding = QtWidgets.QSpinBox(self.stackedWidgetPage2_2)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.spnThemeTextPadding.sizePolicy().hasHeightForWidth())
+ self.spnThemeTextPadding.setSizePolicy(sizePolicy)
+ self.spnThemeTextPadding.setMinimum(0)
+ self.spnThemeTextPadding.setMaximum(199)
+ self.spnThemeTextPadding.setProperty("value", 10)
+ self.spnThemeTextPadding.setObjectName("spnThemeTextPadding")
+ self.formLayout_5.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.spnThemeTextPadding)
+ self.themeEditStack.addWidget(self.stackedWidgetPage2_2)
self.page_2 = QtWidgets.QWidget()
self.page_2.setObjectName("page_2")
self.formLayout_7 = QtWidgets.QFormLayout(self.page_2)
@@ -941,7 +981,7 @@ class Ui_Settings(object):
self.btnThemeMisspelledColor.setText("")
self.btnThemeMisspelledColor.setObjectName("btnThemeMisspelledColor")
self.formLayout_7.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.btnThemeMisspelledColor)
- self.themeStack.addWidget(self.page_2)
+ self.themeEditStack.addWidget(self.page_2)
self.stackedWidgetPage3_2 = QtWidgets.QWidget()
self.stackedWidgetPage3_2.setObjectName("stackedWidgetPage3_2")
self.formLayout_6 = QtWidgets.QFormLayout(self.stackedWidgetPage3_2)
@@ -949,14 +989,14 @@ class Ui_Settings(object):
self.formLayout_6.setObjectName("formLayout_6")
self.label_26 = QtWidgets.QLabel(self.stackedWidgetPage3_2)
self.label_26.setObjectName("label_26")
- self.formLayout_6.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_26)
+ self.formLayout_6.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_26)
self.cmbThemeLineSpacing = QtWidgets.QComboBox(self.stackedWidgetPage3_2)
self.cmbThemeLineSpacing.setObjectName("cmbThemeLineSpacing")
self.cmbThemeLineSpacing.addItem("")
self.cmbThemeLineSpacing.addItem("")
self.cmbThemeLineSpacing.addItem("")
self.cmbThemeLineSpacing.addItem("")
- self.formLayout_6.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbThemeLineSpacing)
+ self.formLayout_6.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbThemeLineSpacing)
self.spnThemeLineSpacing = QtWidgets.QSpinBox(self.stackedWidgetPage3_2)
self.spnThemeLineSpacing.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
@@ -968,10 +1008,10 @@ class Ui_Settings(object):
self.spnThemeLineSpacing.setMaximum(999)
self.spnThemeLineSpacing.setProperty("value", 100)
self.spnThemeLineSpacing.setObjectName("spnThemeLineSpacing")
- self.formLayout_6.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.spnThemeLineSpacing)
+ self.formLayout_6.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spnThemeLineSpacing)
self.label_27 = QtWidgets.QLabel(self.stackedWidgetPage3_2)
self.label_27.setObjectName("label_27")
- self.formLayout_6.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_27)
+ self.formLayout_6.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_27)
self.spnThemeTabWidth = QtWidgets.QSpinBox(self.stackedWidgetPage3_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -982,10 +1022,10 @@ class Ui_Settings(object):
self.spnThemeTabWidth.setMaximum(199)
self.spnThemeTabWidth.setProperty("value", 20)
self.spnThemeTabWidth.setObjectName("spnThemeTabWidth")
- self.formLayout_6.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spnThemeTabWidth)
+ self.formLayout_6.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.spnThemeTabWidth)
self.label_28 = QtWidgets.QLabel(self.stackedWidgetPage3_2)
self.label_28.setObjectName("label_28")
- self.formLayout_6.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_28)
+ self.formLayout_6.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_28)
self.spnThemeParaAbove = QtWidgets.QSpinBox(self.stackedWidgetPage3_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -996,7 +1036,7 @@ class Ui_Settings(object):
self.spnThemeParaAbove.setMaximum(199)
self.spnThemeParaAbove.setProperty("value", 5)
self.spnThemeParaAbove.setObjectName("spnThemeParaAbove")
- self.formLayout_6.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.spnThemeParaAbove)
+ self.formLayout_6.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.spnThemeParaAbove)
self.spnThemeParaBelow = QtWidgets.QSpinBox(self.stackedWidgetPage3_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -1007,7 +1047,7 @@ class Ui_Settings(object):
self.spnThemeParaBelow.setMaximum(199)
self.spnThemeParaBelow.setProperty("value", 5)
self.spnThemeParaBelow.setObjectName("spnThemeParaBelow")
- self.formLayout_6.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.spnThemeParaBelow)
+ self.formLayout_6.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.spnThemeParaBelow)
self.chkThemeIndent = QtWidgets.QCheckBox(self.stackedWidgetPage3_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -1015,9 +1055,9 @@ class Ui_Settings(object):
sizePolicy.setHeightForWidth(self.chkThemeIndent.sizePolicy().hasHeightForWidth())
self.chkThemeIndent.setSizePolicy(sizePolicy)
self.chkThemeIndent.setObjectName("chkThemeIndent")
- self.formLayout_6.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.chkThemeIndent)
- self.themeStack.addWidget(self.stackedWidgetPage3_2)
- self.verticalLayout_14.addWidget(self.themeStack)
+ self.formLayout_6.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.chkThemeIndent)
+ self.themeEditStack.addWidget(self.stackedWidgetPage3_2)
+ self.verticalLayout_14.addWidget(self.themeEditStack)
self.lblPreview = QtWidgets.QLabel(self.splitter)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
@@ -1028,16 +1068,16 @@ class Ui_Settings(object):
self.lblPreview.setText("")
self.lblPreview.setObjectName("lblPreview")
self.verticalLayout_13.addWidget(self.splitter)
- self.tabWidget.addTab(self.tab_5, "")
- self.verticalLayout_10.addWidget(self.tabWidget)
+ self.themeStack.addWidget(self.stackedWidgetPage2_3)
+ self.verticalLayout_10.addWidget(self.themeStack)
self.stack.addWidget(self.page)
self.horizontalLayout_8.addWidget(self.stack)
self.retranslateUi(Settings)
self.stack.setCurrentIndex(4)
self.tabViews.setCurrentIndex(2)
- self.tabWidget.setCurrentIndex(1)
self.themeStack.setCurrentIndex(0)
+ self.themeEditStack.setCurrentIndex(1)
self.lstMenu.currentRowChanged['int'].connect(self.stack.setCurrentIndex)
QtCore.QMetaObject.connectSlotsByName(Settings)
@@ -1157,9 +1197,11 @@ class Ui_Settings(object):
self.lblTitleStatus.setText(_translate("Settings", "Status"))
self.lblTitleStatus_2.setText(_translate("Settings", "Fullscreen"))
self.btnThemeAdd.setText(_translate("Settings", "New"))
- self.btnThemEdit.setText(_translate("Settings", "Edit"))
+ self.btnThemeEdit.setText(_translate("Settings", "Edit"))
self.btnThemeRemove.setText(_translate("Settings", "Delete"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("Settings", "Themes"))
+ self.label_33.setText(_translate("Settings", "Theme name:"))
+ self.btnThemeEditOK.setText(_translate("Settings", "Apply"))
+ self.btnThemeEditCancel.setText(_translate("Settings", "Cancel"))
self.cmbThemeEdit.setItemText(0, _translate("Settings", "Window Background"))
self.cmbThemeEdit.setItemText(1, _translate("Settings", "Text Background"))
self.cmbThemeEdit.setItemText(2, _translate("Settings", "Text Options"))
@@ -1167,11 +1209,12 @@ class Ui_Settings(object):
self.label_17.setText(_translate("Settings", "Color:"))
self.label_18.setText(_translate("Settings", "Image:"))
self.label_19.setText(_translate("Settings", "Type:"))
- self.cmbThemBackgroundType.setItemText(0, _translate("Settings", "Tiled"))
- self.cmbThemBackgroundType.setItemText(1, _translate("Settings", "Centered"))
- self.cmbThemBackgroundType.setItemText(2, _translate("Settings", "Stretched"))
- self.cmbThemBackgroundType.setItemText(3, _translate("Settings", "Scaled"))
- self.cmbThemBackgroundType.setItemText(4, _translate("Settings", "Zoomed"))
+ self.cmbThemBackgroundType.setItemText(0, _translate("Settings", "No Image"))
+ self.cmbThemBackgroundType.setItemText(1, _translate("Settings", "Tiled"))
+ self.cmbThemBackgroundType.setItemText(2, _translate("Settings", "Centered"))
+ self.cmbThemBackgroundType.setItemText(3, _translate("Settings", "Stretched"))
+ self.cmbThemBackgroundType.setItemText(4, _translate("Settings", "Scaled"))
+ self.cmbThemBackgroundType.setItemText(5, _translate("Settings", "Zoomed"))
self.label_20.setText(_translate("Settings", "Color:"))
self.label_21.setText(_translate("Settings", "Opacity:"))
self.spnThemeTextBackgroundOpacity.setSuffix(_translate("Settings", "%"))
@@ -1179,12 +1222,15 @@ class Ui_Settings(object):
self.cmbThemeTextPosition.setItemText(0, _translate("Settings", "Left"))
self.cmbThemeTextPosition.setItemText(1, _translate("Settings", "Center"))
self.cmbThemeTextPosition.setItemText(2, _translate("Settings", "Right"))
+ self.cmbThemeTextPosition.setItemText(3, _translate("Settings", "Stretched"))
self.label_23.setText(_translate("Settings", "Width:"))
self.spnThemeTextWidth.setSuffix(_translate("Settings", " px"))
self.spnThemeTextRadius.setSuffix(_translate("Settings", " px"))
self.label_24.setText(_translate("Settings", "Corner radius:"))
self.label_25.setText(_translate("Settings", "Margins:"))
self.spnThemeTextMargins.setSuffix(_translate("Settings", " px"))
+ self.label_34.setText(_translate("Settings", "Padding:"))
+ self.spnThemeTextPadding.setSuffix(_translate("Settings", " px"))
self.label_29.setText(_translate("Settings", "Color:"))
self.label_30.setText(_translate("Settings", "Font:"))
self.label_31.setText(_translate("Settings", "Size:"))
@@ -1201,5 +1247,4 @@ class Ui_Settings(object):
self.spnThemeParaAbove.setSuffix(_translate("Settings", " px"))
self.spnThemeParaBelow.setSuffix(_translate("Settings", " px"))
self.chkThemeIndent.setText(_translate("Settings", "Indent 1st line"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("Settings", "Edit"))
diff --git a/src/ui/settings.ui b/src/ui/settings.ui
index 55ee3de..25c46ec 100644
--- a/src/ui/settings.ui
+++ b/src/ui/settings.ui
@@ -6,8 +6,8 @@
0
0
- 634
- 382
+ 658
+ 486
@@ -1367,8 +1367,7 @@ text-align:center;
-
-
+ ../../../snowflaQe/src/ui../../../snowflaQe/src/ui
@@ -1379,8 +1378,7 @@ text-align:center;
-
-
+ ../../../snowflaQe/src/ui../../../snowflaQe/src/ui
@@ -1443,8 +1441,7 @@ text-align:center;
-
-
+ ../../../snowflaQe/src/ui../../../snowflaQe/src/ui
@@ -1455,8 +1452,7 @@ text-align:center;
-
-
+ ../../../snowflaQe/src/ui../../../snowflaQe/src/ui
@@ -1505,17 +1501,27 @@ text-align:center;
-
-
+
- 1
+ 0
-
-
- Themes
-
+
-
-
+
+
+ QListView::Static
+
+
+ QListView::Adjust
+
+
+ QListView::IconMode
+
+
+ true
+
+
-
@@ -1526,13 +1532,15 @@ text-align:center;
-
-
+ ../../../snowflaQe/src/ui../../../snowflaQe/src/ui
-
-
+
+
+ false
+
Edit
@@ -1540,13 +1548,15 @@ text-align:center;
-
+
+ false
+
Delete
-
-
+ ../../../snowflaQe/src/ui../../../snowflaQe/src/ui
@@ -1567,11 +1577,55 @@ text-align:center;
-
-
- Edit
-
+
+ -
+
+
-
+
+
+ Theme name:
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Apply
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Cancel
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
-
@@ -1586,50 +1640,33 @@ text-align:center;
-
-
+
-
-
-
-
-
- Window Background
-
-
- -
-
- Text Background
-
-
- -
-
- Text Options
-
-
- -
-
- Paragraph Options
-
-
-
+
+ Window Background
+
-
-
-
-
- 0
- 0
-
-
-
-
-
-
+
+ Text Background
+
-
+ -
+
+ Text Options
+
+
+ -
+
+ Paragraph Options
+
+
+
-
-
+
- 0
+ 1
@@ -1669,6 +1706,11 @@ text-align:center;
-
+
-
+
+ No Image
+
+
-
Tiled
@@ -1773,6 +1815,11 @@ text-align:center;
Right
+ -
+
+ Stretched
+
+
-
@@ -1862,6 +1909,35 @@ text-align:center;
+ -
+
+
+ Padding:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ px
+
+
+ 0
+
+
+ 199
+
+
+ 10
+
+
+
@@ -1953,14 +2029,14 @@ text-align:center;
QFormLayout::AllNonFixedFieldsGrow
- -
+
-
Line spacing:
- -
+
-
-
@@ -1984,7 +2060,7 @@ text-align:center;
- -
+
-
false
@@ -2009,14 +2085,14 @@ text-align:center;
- -
+
-
Tab width:
- -
+
-
@@ -2038,14 +2114,14 @@ text-align:center;
- -
+
-
Spacing:
- -
+
-
@@ -2067,7 +2143,7 @@ text-align:center;
- -
+
-
@@ -2089,7 +2165,7 @@ text-align:center;
- -
+
-