Merge branch 'main' into theme_settings

This commit is contained in:
Veronica Berglyd Olsen
2025-06-20 16:38:10 +02:00
committed by GitHub
10 changed files with 50 additions and 36 deletions
+2 -1
View File
@@ -296,7 +296,8 @@ def _createApp(style: str) -> QApplication:
"""Create the app. This is done in a function to make it easier to """Create the app. This is done in a function to make it easier to
block app creation during testing. block app creation during testing.
""" """
app = QApplication([CONFIG.appName, f"-style={style}"]) app = QApplication([CONFIG.appName])
app.setStyle(style)
app.setApplicationName(CONFIG.appName) app.setApplicationName(CONFIG.appName)
app.setApplicationVersion(__version__) app.setApplicationVersion(__version__)
app.setOrganizationDomain(__domain__) app.setOrganizationDomain(__domain__)
+2 -2
View File
@@ -67,10 +67,10 @@ hidden = faded
shortcode = green shortcode = green
keyword = red keyword = red
tag = green tag = green
value = blue value = green
optional = green optional = green
spellcheckline = red spellcheckline = red
errorline = green errorline = green
replacetag = green replacetag = green
modifier = green modifier = blue
texthighlight = yellow:72 texthighlight = yellow:72
+2 -2
View File
@@ -67,10 +67,10 @@ hidden = faded
shortcode = green shortcode = green
keyword = red keyword = red
tag = green tag = green
value = blue value = green
optional = green optional = green
spellcheckline = red spellcheckline = red
errorline = green errorline = green
replacetag = green replacetag = green
modifier = green modifier = blue
texthighlight = yellow:72 texthighlight = yellow:72
+13 -13
View File
@@ -26,7 +26,7 @@ url = https://ethanschoonover.com/solarized/
## ##
[Base] [Base]
base = #073642 base = #002b36
default = #fdf6e3 default = #fdf6e3
faded = #eee8d5 faded = #eee8d5
red = #dc322f red = #dc322f
@@ -50,12 +50,12 @@ inactive = red
disabled = faded disabled = faded
[Palette] [Palette]
window = #002b36 window = #073642
windowtext = default windowtext = default
base = base base = base
alternatebase = #586e75 alternatebase = #586e75
text = default text = default
tooltipbase = yellow tooltipbase = yellow:L150
tooltiptext = #002b36 tooltiptext = #002b36
button = base button = base
buttontext = default buttontext = default
@@ -74,21 +74,21 @@ errortext = red
[Syntax] [Syntax]
background = base background = base
text = default text = default
line = default:32 line = #073642
link = blue link = blue
headertext = default:D125 headertext = blue
headertag = cyan headertag = #657b83
emphasis = blue emphasis = blue
dialog = cyan dialog = cyan
altdialog = cyan altdialog = red
note = cyan:L115 note = cyan:D125
hidden = default:D150 hidden = default:L200
shortcode = yellow shortcode = blue
keyword = green keyword = green
tag = orange tag = yellow
value = orange value = orange
optional = cyan:L115 optional = cyan:D125
spellcheckline = orange spellcheckline = red
errorline = red errorline = red
replacetag = green replacetag = green
modifier = yellow modifier = yellow
+10 -10
View File
@@ -26,7 +26,7 @@ url = https://ethanschoonover.com/solarized/
## ##
[Base] [Base]
base = #eee8d5 base = #fdf6e3
default = #002b36 default = #002b36
faded = #073642 faded = #073642
red = #dc322f red = #dc322f
@@ -50,12 +50,12 @@ inactive = red
disabled = faded disabled = faded
[Palette] [Palette]
window = #fdf6e3 window = #eee8d5
windowtext = default windowtext = default
base = base base = base
alternatebase = #93a1a1 alternatebase = #93a1a1
text = default text = default
tooltipbase = yellow tooltipbase = yellow:L150
tooltiptext = #002b36 tooltiptext = #002b36
button = base button = base
buttontext = default buttontext = default
@@ -74,21 +74,21 @@ errortext = red
[Syntax] [Syntax]
background = base background = base
text = default text = default
line = default:32 line = #eee8d5
link = blue link = blue
headertext = default:L125 headertext = blue
headertag = cyan headertag = #657b83
emphasis = blue emphasis = blue
dialog = cyan dialog = cyan
altdialog = cyan altdialog = red
note = cyan:D125 note = cyan:D125
hidden = default:L200 hidden = default:L200
shortcode = yellow shortcode = blue
keyword = green keyword = green
tag = orange tag = yellow
value = orange value = orange
optional = cyan:D125 optional = cyan:D125
spellcheckline = orange spellcheckline = red
errorline = red errorline = red
replacetag = green replacetag = green
modifier = yellow modifier = yellow
+4 -4
View File
@@ -28,13 +28,13 @@ import logging
from PyQt6.QtCore import pyqtSlot from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QComboBox, QDialogButtonBox, QGridLayout, QLabel, QAbstractItemView, QDialogButtonBox, QGridLayout, QLabel, QListWidget,
QListWidget, QListWidgetItem, QVBoxLayout, QWidget QListWidgetItem, QVBoxLayout, QWidget
) )
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NComboBox, NDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtUserRole from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtUserRole
@@ -79,7 +79,7 @@ class GuiDocSplit(NDialog):
self.listBox.setMinimumWidth(400) self.listBox.setMinimumWidth(400)
self.listBox.setMinimumHeight(180) self.listBox.setMinimumHeight(180)
self.splitLevel = QComboBox(self) self.splitLevel = NComboBox(self)
self.splitLevel.addItem(self.tr("Split on Heading Level 1 (Partition)"), 1) self.splitLevel.addItem(self.tr("Split on Heading Level 1 (Partition)"), 1)
self.splitLevel.addItem(self.tr("Split up to Heading Level 2 (Chapter)"), 2) self.splitLevel.addItem(self.tr("Split up to Heading Level 2 (Chapter)"), 2)
self.splitLevel.addItem(self.tr("Split up to Heading Level 3 (Scene)"), 3) self.splitLevel.addItem(self.tr("Split up to Heading Level 3 (Scene)"), 3)
+2 -2
View File
@@ -180,11 +180,11 @@ class GuiPreferences(NDialog):
self.mainForm.addRow( self.mainForm.addRow(
self.tr("Light colour theme"), self.lightTheme, self.tr("Light colour theme"), self.lightTheme,
self.tr("User interface colour theme."), stretch=(3, 2) self.tr("You can change theme mode from the sidebar."), stretch=(3, 2)
) )
self.mainForm.addRow( self.mainForm.addRow(
self.tr("Dark colour theme"), self.darkTheme, self.tr("Dark colour theme"), self.darkTheme,
self.tr("User interface colour theme."), stretch=(3, 2) self.tr("You can change theme mode from the sidebar."), stretch=(3, 2)
) )
# Icon Theme # Icon Theme
+8 -1
View File
@@ -117,12 +117,19 @@ class NTreeView(QTreeView):
class NComboBox(QComboBox): class NComboBox(QComboBox):
def __init__(self, parent: QWidget | None = None) -> None: def __init__(self, parent: QWidget | None = None, maxItems: int = 15) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
self.setFocusPolicy(Qt.FocusPolicy.StrongFocus) self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
self.setMaxVisibleItems(maxItems)
# The style sheet disables Fusion style pop-up mode on some platforms
# and allows for scrolling of long lists of items
self.setStyleSheet("QComboBox {combobox-popup: 0;}")
return return
def wheelEvent(self, event: QWheelEvent) -> None: def wheelEvent(self, event: QWheelEvent) -> None:
"""Only capture the mouse wheel if the widget has focus."""
if self.hasFocus(): if self.hasFocus():
super().wheelEvent(event) super().wheelEvent(event)
else: else:
+6 -1
View File
@@ -25,14 +25,19 @@ from __future__ import annotations
import logging import logging
from typing import TYPE_CHECKING
from PyQt6.QtCore import pyqtSignal, pyqtSlot from PyQt6.QtCore import pyqtSignal, pyqtSlot
from PyQt6.QtGui import QPalette from PyQt6.QtGui import QPalette
from PyQt6.QtWidgets import QComboBox, QWidget from PyQt6.QtWidgets import QComboBox
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
from novelwriter.enum import nwItemClass from novelwriter.enum import nwItemClass
if TYPE_CHECKING:
from PyQt6.QtWidgets import QWidget
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+1
View File
@@ -126,6 +126,7 @@ QtHeaderFixed = QHeaderView.ResizeMode.Fixed
# Scroll Bar Policy # Scroll Bar Policy
QtScrollAlwaysOn = Qt.ScrollBarPolicy.ScrollBarAlwaysOn
QtScrollAlwaysOff = Qt.ScrollBarPolicy.ScrollBarAlwaysOff QtScrollAlwaysOff = Qt.ScrollBarPolicy.ScrollBarAlwaysOff
QtScrollAsNeeded = Qt.ScrollBarPolicy.ScrollBarAsNeeded QtScrollAsNeeded = Qt.ScrollBarPolicy.ScrollBarAsNeeded