Theme, preview, and eternal logos

This commit is contained in:
Olivier Keshavjee 2015-06-18 21:28:47 +02:00
parent eff0408260
commit 915b9ac5bc
9 changed files with 911 additions and 158 deletions

View file

@ -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

View file

@ -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

View file

@ -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 husbands 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.

View file

@ -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

View file

@ -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

View file

@ -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
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)

View file

@ -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)
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()

View file

@ -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"))

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>634</width>
<height>382</height>
<width>658</width>
<height>486</height>
</rect>
</property>
<property name="windowTitle">
@ -1367,8 +1367,7 @@ text-align:center;</string>
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
<normaloff>../../../snowflaQe/src/ui</normaloff>../../../snowflaQe/src/ui</iconset>
</property>
</widget>
</item>
@ -1379,8 +1378,7 @@ text-align:center;</string>
</property>
<property name="icon">
<iconset theme="list-remove">
<normaloff/>
</iconset>
<normaloff>../../../snowflaQe/src/ui</normaloff>../../../snowflaQe/src/ui</iconset>
</property>
</widget>
</item>
@ -1443,8 +1441,7 @@ text-align:center;</string>
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
<normaloff>../../../snowflaQe/src/ui</normaloff>../../../snowflaQe/src/ui</iconset>
</property>
</widget>
</item>
@ -1455,8 +1452,7 @@ text-align:center;</string>
</property>
<property name="icon">
<iconset theme="list-remove">
<normaloff/>
</iconset>
<normaloff>../../../snowflaQe/src/ui</normaloff>../../../snowflaQe/src/ui</iconset>
</property>
</widget>
</item>
@ -1505,17 +1501,27 @@ text-align:center;</string>
</widget>
</item>
<item>
<widget class="QTabWidget" name="tabWidget">
<widget class="QStackedWidget" name="themeStack">
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>Themes</string>
</attribute>
<widget class="QWidget" name="stackedWidgetPage1_3" native="true">
<layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<widget class="QListWidget" name="listWidget"/>
<widget class="QListWidget" name="lstThemes">
<property name="movement">
<enum>QListView::Static</enum>
</property>
<property name="resizeMode">
<enum>QListView::Adjust</enum>
</property>
<property name="viewMode">
<enum>QListView::IconMode</enum>
</property>
<property name="uniformItemSizes">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
@ -1526,13 +1532,15 @@ text-align:center;</string>
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
<normaloff>../../../snowflaQe/src/ui</normaloff>../../../snowflaQe/src/ui</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnThemEdit">
<widget class="QPushButton" name="btnThemeEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Edit</string>
</property>
@ -1540,13 +1548,15 @@ text-align:center;</string>
</item>
<item>
<widget class="QPushButton" name="btnThemeRemove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Delete</string>
</property>
<property name="icon">
<iconset theme="list-remove">
<normaloff/>
</iconset>
<normaloff>../../../snowflaQe/src/ui</normaloff>../../../snowflaQe/src/ui</iconset>
</property>
</widget>
</item>
@ -1567,11 +1577,55 @@ text-align:center;</string>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string>Edit</string>
</attribute>
<widget class="QWidget" name="stackedWidgetPage2_3" native="true">
<layout class="QVBoxLayout" name="verticalLayout_13">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLabel" name="label_33">
<property name="text">
<string>Theme name:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txtThemeName"/>
</item>
<item>
<widget class="QPushButton" name="btnThemeEditOK">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnThemeEditCancel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
@ -1586,50 +1640,33 @@ text-align:center;</string>
<widget class="QWidget" name="">
<layout class="QVBoxLayout" name="verticalLayout_14">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<widget class="QComboBox" name="cmbThemeEdit">
<item>
<widget class="QComboBox" name="cmbThemeEdit">
<item>
<property name="text">
<string>Window Background</string>
</property>
</item>
<item>
<property name="text">
<string>Text Background</string>
</property>
</item>
<item>
<property name="text">
<string>Text Options</string>
</property>
</item>
<item>
<property name="text">
<string>Paragraph Options</string>
</property>
</item>
</widget>
<property name="text">
<string>Window Background</string>
</property>
</item>
<item>
<widget class="QPushButton" name="btnThemeEditOK">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
<property name="text">
<string>Text Background</string>
</property>
</item>
</layout>
<item>
<property name="text">
<string>Text Options</string>
</property>
</item>
<item>
<property name="text">
<string>Paragraph Options</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="themeStack">
<widget class="QStackedWidget" name="themeEditStack">
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="stackedWidgetPage1_2" native="true">
<layout class="QFormLayout" name="formLayout_4">
@ -1669,6 +1706,11 @@ text-align:center;</string>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="cmbThemBackgroundType">
<item>
<property name="text">
<string>No Image</string>
</property>
</item>
<item>
<property name="text">
<string>Tiled</string>
@ -1773,6 +1815,11 @@ text-align:center;</string>
<string>Right</string>
</property>
</item>
<item>
<property name="text">
<string>Stretched</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0">
@ -1862,6 +1909,35 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_34">
<property name="text">
<string>Padding:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="spnThemeTextPadding">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string> px</string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>199</number>
</property>
<property name="value">
<number>10</number>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
@ -1953,14 +2029,14 @@ text-align:center;</string>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<item row="1" column="0">
<widget class="QLabel" name="label_26">
<property name="text">
<string>Line spacing:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<item row="1" column="1">
<widget class="QComboBox" name="cmbThemeLineSpacing">
<item>
<property name="text">
@ -1984,7 +2060,7 @@ text-align:center;</string>
</item>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QSpinBox" name="spnThemeLineSpacing">
<property name="enabled">
<bool>false</bool>
@ -2009,14 +2085,14 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Tab width:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="QSpinBox" name="spnThemeTabWidth">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2038,14 +2114,14 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_28">
<property name="text">
<string>Spacing:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<widget class="QSpinBox" name="spnThemeParaAbove">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2067,7 +2143,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="5" column="1">
<item row="6" column="1">
<widget class="QSpinBox" name="spnThemeParaBelow">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2089,7 +2165,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QCheckBox" name="chkThemeIndent">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">