From 915b9ac5bcfbf248928d5dd88e8eaa05826930f8 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Thu, 18 Jun 2015 21:28:47 +0200 Subject: [PATCH] Theme, preview, and eternal logos --- resources/themes/gentleblues.theme | 40 +++ resources/themes/oldschool.theme | 39 +++ resources/themes/preview.txt | 5 + resources/themes/spacedreams.theme | 39 +++ resources/themes/writingdesk.theme | 39 +++ src/functions.py | 38 ++- src/settingsWindow.py | 486 ++++++++++++++++++++++++++++- src/ui/settings.py | 163 ++++++---- src/ui/settings.ui | 220 ++++++++----- 9 files changed, 911 insertions(+), 158 deletions(-) create mode 100644 resources/themes/gentleblues.theme create mode 100644 resources/themes/oldschool.theme create mode 100644 resources/themes/preview.txt create mode 100644 resources/themes/spacedreams.theme create mode 100644 resources/themes/writingdesk.theme 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; - +