Update dialog buttons on all dialogs and tools

This commit is contained in:
Veronica Berglyd Olsen
2025-10-25 23:38:19 +02:00
parent 1b0c339845
commit c9c2b35455
16 changed files with 193 additions and 130 deletions
+7 -3
View File
@@ -33,10 +33,11 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import readTextFile from novelwriter.common import readTextFile
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.versioninfo import VersionInfoWidget from novelwriter.extensions.versioninfo import VersionInfoWidget
from novelwriter.types import QtAlignRightTop, QtDialogClose, QtHexArgb from novelwriter.types import QtAlignRightTop, QtHexArgb
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -82,8 +83,11 @@ class GuiAbout(NDialog):
self.txtCredits.setViewportMargins(0, 8, 8, 0) self.txtCredits.setViewportMargins(0, 8, 8, 0)
# Buttons # Buttons
self.btnBox = QDialogButtonBox(QtDialogClose, self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnBox.rejected.connect(self.reject) self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.innerBox = QVBoxLayout() self.innerBox = QVBoxLayout()
+15 -8
View File
@@ -33,10 +33,11 @@ from PyQt6.QtWidgets import (
) )
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtDialogReset, QtUserRole from novelwriter.types import QtAccepted, QtUserRole
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -85,13 +86,19 @@ class GuiDocMerge(NDialog):
self.optBox.setColumnStretch(2, 1) self.optBox.setColumnStretch(2, 1)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.resetButton = self.buttonBox.addButton(QtDialogReset) self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
if self.resetButton: self.btnCancel.clicked.connect(self.reject)
self.resetButton.clicked.connect(self._resetList)
self.btnReset = SHARED.theme.getStandardButton(nwStandardButton.RESET, self)
self.btnReset.clicked.connect(self._resetList)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
self.btnBox.addButton(self.btnReset, QDialogButtonBox.ButtonRole.ResetRole)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -103,7 +110,7 @@ class GuiDocMerge(NDialog):
self.outerBox.addSpacing(8) self.outerBox.addSpacing(8)
self.outerBox.addLayout(self.optBox) self.outerBox.addLayout(self.optBox)
self.outerBox.addSpacing(12) self.outerBox.addSpacing(12)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
# Load Content # Load Content
+12 -5
View File
@@ -33,10 +33,11 @@ from PyQt6.QtWidgets import (
) )
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NComboBox, 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, QtUserRole
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -117,9 +118,15 @@ class GuiDocSplit(NDialog):
self.optBox.setColumnStretch(3, 1) self.optBox.setColumnStretch(3, 1)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -132,7 +139,7 @@ class GuiDocSplit(NDialog):
self.outerBox.addSpacing(8) self.outerBox.addSpacing(8)
self.outerBox.addLayout(self.optBox) self.outerBox.addLayout(self.optBox)
self.outerBox.addSpacing(12) self.outerBox.addSpacing(12)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
# Load Content # Load Content
+13 -5
View File
@@ -27,8 +27,10 @@ import logging
from PyQt6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget from PyQt6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget
from novelwriter import SHARED
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk from novelwriter.types import QtAccepted
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -54,9 +56,15 @@ class GuiEditLabel(NDialog):
self.lblValue.setBuddy(self.lblValue) self.lblValue.setBuddy(self.lblValue)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.innerBox = QHBoxLayout() self.innerBox = QHBoxLayout()
@@ -67,7 +75,7 @@ class GuiEditLabel(NDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.setSpacing(12) self.outerBox.setSpacing(12)
self.outerBox.addLayout(self.innerBox, 1) self.outerBox.addLayout(self.innerBox, 1)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -5
View File
@@ -38,13 +38,14 @@ from novelwriter.common import compact, describeFont, processDialogSymbols, uniq
from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT, DEF_ICONS, DEF_TREECOL from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT, DEF_ICONS, DEF_TREECOL
from novelwriter.constants import nwLabels, nwQuotes, nwUnicode, trConst from novelwriter.constants import nwLabels, nwQuotes, nwUnicode, trConst
from novelwriter.dialogs.quotes import GuiQuoteSelect from novelwriter.dialogs.quotes import GuiQuoteSelect
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel, NScrollableForm from novelwriter.extensions.configlayout import NColorLabel, NScrollableForm
from novelwriter.extensions.modified import ( from novelwriter.extensions.modified import (
NComboBox, NDialog, NDoubleSpinBox, NIconToolButton, NSpinBox NComboBox, NDialog, NDoubleSpinBox, NIconToolButton, NSpinBox
) )
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignCenter, QtDialogCancel, QtDialogSave from novelwriter.types import QtAlignCenter
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -89,9 +90,15 @@ class GuiPreferences(NDialog):
self.mainForm.setHelpTextStyle(SHARED.theme.helpText) self.mainForm.setHelpTextStyle(SHARED.theme.helpText)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogCancel, self) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.buttonBox.accepted.connect(self._doSave) self.btnSave.clicked.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnSave, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.searchBox = QHBoxLayout() self.searchBox = QHBoxLayout()
@@ -107,7 +114,7 @@ class GuiPreferences(NDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.searchBox) self.outerBox.addLayout(self.searchBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8) self.outerBox.setSpacing(8)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -9
View File
@@ -41,15 +41,12 @@ from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter, qtAddAction, qtLambda, simplified from novelwriter.common import formatFileFilter, qtAddAction, qtLambda, simplified
from novelwriter.constants import nwLabels, trConst from novelwriter.constants import nwLabels, trConst
from novelwriter.core.status import CUSTOM_COL, NWStatus, StatusEntry from novelwriter.core.status import CUSTOM_COL, NWStatus, StatusEntry
from novelwriter.enum import nwStatusShape from novelwriter.enum import nwStandardButton, nwStatusShape
from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollableForm from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollableForm
from novelwriter.extensions.modified import NComboBox, NDialog, NIconToolButton from novelwriter.extensions.modified import NComboBox, NDialog, NIconToolButton
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import ( from novelwriter.types import QtSizeMinimum, QtSizeMinimumExpanding, QtUserRole
QtDialogCancel, QtDialogSave, QtSizeMinimum, QtSizeMinimumExpanding,
QtUserRole
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -95,9 +92,15 @@ class GuiProjectSettings(NDialog):
self.sidebar.buttonClicked.connect(self._sidebarClicked) self.sidebar.buttonClicked.connect(self._sidebarClicked)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogCancel, self) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.buttonBox.accepted.connect(self._doSave) self.btnSave.clicked.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnSave, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
# Content # Content
SHARED.project.countStatus() SHARED.project.countStatus()
@@ -126,7 +129,7 @@ class GuiProjectSettings(NDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox) self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8) self.outerBox.setSpacing(8)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+13 -8
View File
@@ -32,12 +32,11 @@ from PyQt6.QtWidgets import (
QListWidgetItem, QVBoxLayout, QWidget QListWidgetItem, QVBoxLayout, QWidget
) )
from novelwriter import SHARED
from novelwriter.constants import nwQuotes, trConst from novelwriter.constants import nwQuotes, trConst
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.types import ( from novelwriter.types import QtAccepted, QtAlignCenter, QtAlignTop, QtUserRole
QtAccepted, QtAlignCenter, QtAlignTop, QtDialogCancel, QtDialogOk,
QtUserRole
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -91,9 +90,15 @@ class GuiQuoteSelect(NDialog):
self.listBox.setMinimumHeight(150) self.listBox.setMinimumHeight(150)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self) self.btnOk = SHARED.theme.getStandardButton(nwStandardButton.OK, self)
self.buttonBox.accepted.connect(self.accept) self.btnOk.clicked.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnCancel.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOk, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.labelBox.addWidget(self.previewLabel, 0, QtAlignTop) self.labelBox.addWidget(self.previewLabel, 0, QtAlignTop)
@@ -103,7 +108,7 @@ class GuiQuoteSelect(NDialog):
self.innerBox.addWidget(self.listBox) self.innerBox.addWidget(self.listBox)
self.outerBox.addLayout(self.innerBox) self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+11 -5
View File
@@ -37,9 +37,9 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter from novelwriter.common import formatFileFilter
from novelwriter.core.spellcheck import UserDictionary from novelwriter.core.spellcheck import UserDictionary
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel from novelwriter.extensions.configlayout import NColorLabel
from novelwriter.extensions.modified import NDialog, NIconToolButton from novelwriter.extensions.modified import NDialog, NIconToolButton
from novelwriter.types import QtDialogClose, QtDialogSave
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -110,9 +110,15 @@ class GuiWordList(NDialog):
self.editBox.addWidget(self.delButton, 0) self.editBox.addWidget(self.delButton, 0)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogClose, self) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.buttonBox.accepted.connect(self._doSave) self.btnSave.clicked.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnSave, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -120,7 +126,7 @@ class GuiWordList(NDialog):
self.outerBox.addWidget(self.listBox, 1) self.outerBox.addWidget(self.listBox, 1)
self.outerBox.addLayout(self.editBox, 0) self.outerBox.addLayout(self.editBox, 0)
self.outerBox.addSpacing(12) self.outerBox.addSpacing(12)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.outerBox.setSpacing(4) self.outerBox.setSpacing(4)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+17 -11
View File
@@ -57,17 +57,23 @@ STYLES_MIN_TOOLBUTTON = "minimalToolButton"
STYLES_BIG_TOOLBUTTON = "bigToolButton" STYLES_BIG_TOOLBUTTON = "bigToolButton"
STANDARD_BUTTONS = { STANDARD_BUTTONS = {
nwStandardButton.OK: (QT_TRANSLATE_NOOP("Button", "OK"), "btn_ok", "blue"), nwStandardButton.OK: (QT_TRANSLATE_NOOP("Button", "OK"), "btn_ok", "blue"),
nwStandardButton.CANCEL: (QT_TRANSLATE_NOOP("Button", "Cancel"), "btn_cancel", "red"), nwStandardButton.CANCEL: (QT_TRANSLATE_NOOP("Button", "Cancel"), "btn_cancel", "red"),
nwStandardButton.YES: (QT_TRANSLATE_NOOP("Button", "Yes"), "btn_yes", "green"), nwStandardButton.YES: (QT_TRANSLATE_NOOP("Button", "&Yes"), "btn_yes", "green"),
nwStandardButton.NO: (QT_TRANSLATE_NOOP("Button", "No"), "btn_no", "red"), nwStandardButton.NO: (QT_TRANSLATE_NOOP("Button", "&No"), "btn_no", "red"),
nwStandardButton.OPEN: (QT_TRANSLATE_NOOP("Button", "Open"), "btn_open", "blue"), nwStandardButton.OPEN: (QT_TRANSLATE_NOOP("Button", "Open"), "btn_open", "blue"),
nwStandardButton.CLOSE: (QT_TRANSLATE_NOOP("Button", "Close"), "btn_close", "red"), nwStandardButton.CLOSE: (QT_TRANSLATE_NOOP("Button", "Close"), "btn_close", "faded"),
nwStandardButton.BROWSE: (QT_TRANSLATE_NOOP("Button", "Browse"), "btn_browse", "yellow"), nwStandardButton.SAVE: (QT_TRANSLATE_NOOP("Button", "Save"), "btn_save", "blue"),
nwStandardButton.LIST: (QT_TRANSLATE_NOOP("Button", "List"), "btn_list", "blue"), nwStandardButton.BROWSE: (QT_TRANSLATE_NOOP("Button", "Browse"), "btn_browse", "yellow"),
nwStandardButton.NEW: (QT_TRANSLATE_NOOP("Button", "New"), "btn_new", "green"), nwStandardButton.LIST: (QT_TRANSLATE_NOOP("Button", "List"), "btn_list", "blue"),
nwStandardButton.CREATE: (QT_TRANSLATE_NOOP("Button", "Create"), "btn_create", "yellow"), nwStandardButton.NEW: (QT_TRANSLATE_NOOP("Button", "New"), "btn_new", "green"),
nwStandardButton.RESET: (QT_TRANSLATE_NOOP("Button", "Reset"), "btn_reset", "green"), nwStandardButton.CREATE: (QT_TRANSLATE_NOOP("Button", "Create"), "btn_create", "yellow"),
nwStandardButton.RESET: (QT_TRANSLATE_NOOP("Button", "Reset"), "btn_reset", "green"),
nwStandardButton.INSERT: (QT_TRANSLATE_NOOP("Button", "Insert"), "btn_insert", "blue"),
nwStandardButton.APPLY: (QT_TRANSLATE_NOOP("Button", "Apply"), "btn_apply", "blue"),
nwStandardButton.BUILD: (QT_TRANSLATE_NOOP("Button", "Build"), "btn_build", "blue"),
nwStandardButton.PRINT: (QT_TRANSLATE_NOOP("Button", "Print"), "btn_print", "blue"),
nwStandardButton.PREVIEW: (QT_TRANSLATE_NOOP("Button", "Preview"), "btn_preview", "blue"),
} }
+8 -4
View File
@@ -37,9 +37,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter, formatInt, getFileSize, openExternalPath from novelwriter.common import formatFileFilter, formatInt, getFileSize, openExternalPath
from novelwriter.enum import nwStandardButton
from novelwriter.error import formatException from novelwriter.error import formatException
from novelwriter.extensions.modified import NIconToolButton, NNonBlockingDialog from novelwriter.extensions.modified import NIconToolButton, NNonBlockingDialog
from novelwriter.types import QtDialogClose, QtHexArgb from novelwriter.types import QtHexArgb
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -110,8 +111,11 @@ class GuiDictionaries(NNonBlockingDialog):
self.infoBox.setFrameStyle(QFrame.Shape.NoFrame) self.infoBox.setFrameStyle(QFrame.Shape.NoFrame)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogClose, self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.buttonBox.rejected.connect(self.reject) self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.AcceptRole)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -123,7 +127,7 @@ class GuiDictionaries(NNonBlockingDialog):
self.outerBox.addLayout(self.inBox, 0) self.outerBox.addLayout(self.inBox, 0)
self.outerBox.addWidget(self.infoBox, 1) self.outerBox.addWidget(self.infoBox, 1)
self.outerBox.addSpacing(8) self.outerBox.addSpacing(8)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+12 -11
View File
@@ -34,9 +34,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import readTextFile from novelwriter.common import readTextFile
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignLeft, QtAlignRight, QtDialogClose, QtRoleAction from novelwriter.types import QtAlignLeft, QtAlignRight
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -91,22 +92,22 @@ class GuiLipsum(NDialog):
self.innerBox.addLayout(self.formBox) self.innerBox.addLayout(self.formBox)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(self) self.btnInsert = SHARED.theme.getStandardButton(nwStandardButton.INSERT, self)
self.buttonBox.rejected.connect(self.reject) self.btnInsert.clicked.connect(self._doInsert)
self.btnInsert.setAutoDefault(False)
self.btnClose = self.buttonBox.addButton(QtDialogClose) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
if self.btnClose: self.btnClose.clicked.connect(self.reject)
self.btnClose.setAutoDefault(False) self.btnClose.setAutoDefault(False)
self.btnInsert = self.buttonBox.addButton(self.tr("Insert"), QtRoleAction) self.btnBox = QDialogButtonBox(self)
if self.btnInsert: self.btnBox.addButton(self.btnInsert, QDialogButtonBox.ButtonRole.ApplyRole)
self.btnInsert.clicked.connect(self._doInsert) self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
self.btnInsert.setAutoDefault(False)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.innerBox) self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(16) self.outerBox.setSpacing(16)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+16 -22
View File
@@ -32,7 +32,7 @@ from PyQt6.QtCore import QTimer, pyqtSlot
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog, QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog,
QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem,
QPushButton, QSplitter, QVBoxLayout, QWidget QSplitter, QVBoxLayout, QWidget
) )
from novelwriter import SHARED from novelwriter import SHARED
@@ -40,10 +40,10 @@ from novelwriter.common import makeFileNameSafe, openExternalPath
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
from novelwriter.core.docbuild import NWBuildDocument from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.enum import nwBuildFmt from novelwriter.enum import nwBuildFmt, nwStandardButton
from novelwriter.extensions.modified import NDialog, NIconToolButton from novelwriter.extensions.modified import NDialog, NIconToolButton, NPushButton
from novelwriter.extensions.progressbars import NProgressSimple from novelwriter.extensions.progressbars import NProgressSimple
from novelwriter.types import QtAlignCenter, QtDialogClose, QtRoleAction, QtRoleReject, QtUserRole from novelwriter.types import QtAlignCenter, QtRoleAction, QtRoleReject, QtUserRole
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -178,25 +178,19 @@ class GuiManuscriptBuild(NDialog):
self.buildBox.setVerticalSpacing(4) self.buildBox.setVerticalSpacing(4)
# Dialog Buttons # Dialog Buttons
self.buttonBox = QDialogButtonBox(self) self.btnOpen = NPushButton(self, self.tr("Open Folder"), bSz, "browse", "yellow")
self.btnOpen = QPushButton(
SHARED.theme.getIcon("browse", "yellow"), self.tr("Open Folder"), self
)
self.btnOpen.setIconSize(bSz)
self.btnOpen.setAutoDefault(False) self.btnOpen.setAutoDefault(False)
self.buttonBox.addButton(self.btnOpen, QtRoleAction)
self.btnBuild = QPushButton( self.btnBuild = SHARED.theme.getStandardButton(nwStandardButton.BUILD, self)
SHARED.theme.getIcon("sb_build", "blue"), self.tr("&Build"), self
)
self.btnBuild.setIconSize(bSz)
self.btnBuild.setAutoDefault(True) self.btnBuild.setAutoDefault(True)
self.buttonBox.addButton(self.btnBuild, QtRoleAction)
self.btnClose = self.buttonBox.addButton(QtDialogClose) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
if self.btnClose: self.btnClose.setAutoDefault(False)
self.btnClose.setAutoDefault(False)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnOpen, QtRoleAction)
self.btnBox.addButton(self.btnBuild, QtRoleAction)
self.btnBox.addButton(self.btnClose, QtRoleReject)
# Assemble GUI # Assemble GUI
# ============ # ============
@@ -223,7 +217,7 @@ class GuiManuscriptBuild(NDialog):
self.outerBox.addSpacing(4) self.outerBox.addSpacing(4)
self.outerBox.addLayout(self.buildBox, 0) self.outerBox.addLayout(self.buildBox, 0)
self.outerBox.addSpacing(16) self.outerBox.addSpacing(16)
self.outerBox.addWidget(self.buttonBox, 0) self.outerBox.addWidget(self.btnBox, 0)
self.outerBox.setSpacing(0) self.outerBox.setSpacing(0)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
@@ -239,7 +233,7 @@ class GuiManuscriptBuild(NDialog):
# Signals # Signals
self.btnReset.clicked.connect(self._doResetBuildName) self.btnReset.clicked.connect(self._doResetBuildName)
self.btnBrowse.clicked.connect(self._doSelectPath) self.btnBrowse.clicked.connect(self._doSelectPath)
self.buttonBox.clicked.connect(self._dialogButtonClicked) self.btnBox.clicked.connect(self._dialogButtonClicked)
self.listFormats.itemSelectionChanged.connect(self._resetProgress) self.listFormats.itemSelectionChanged.connect(self._resetProgress)
logger.debug("Ready: GuiManuscriptBuild") logger.debug("Ready: GuiManuscriptBuild")
@@ -266,7 +260,7 @@ class GuiManuscriptBuild(NDialog):
@pyqtSlot("QAbstractButton*") @pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None: def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box.""" """Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button) role = self.btnBox.buttonRole(button)
if role == QtRoleAction: if role == QtRoleAction:
if button == self.btnBuild: if button == self.btnBuild:
self._runBuild() self._runBuild()
+8 -7
View File
@@ -36,9 +36,9 @@ from PyQt6.QtGui import (
from PyQt6.QtPrintSupport import QPrinter, QPrintPreviewDialog from PyQt6.QtPrintSupport import QPrinter, QPrintPreviewDialog
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout, QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout,
QLabel, QListWidget, QListWidgetItem, QPushButton, QSplitter, QLabel, QListWidget, QListWidgetItem, QSplitter, QStackedWidget,
QStackedWidget, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
QVBoxLayout, QWidget QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
@@ -46,6 +46,7 @@ from novelwriter.common import fuzzyTime, qtLambda
from novelwriter.constants import nwHeadFmt, nwLabels, nwStats, nwUnicode, trStats from novelwriter.constants import nwHeadFmt, nwLabels, nwStats, nwUnicode, trStats
from novelwriter.core.buildsettings import BuildCollection, BuildSettings from novelwriter.core.buildsettings import BuildCollection, BuildSettings
from novelwriter.core.docbuild import NWBuildDocument from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NIconToggleButton, NIconToolButton, NToolDialog from novelwriter.extensions.modified import NIconToggleButton, NIconToolButton, NToolDialog
from novelwriter.extensions.progressbars import NProgressCircle from novelwriter.extensions.progressbars import NProgressCircle
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
@@ -171,16 +172,16 @@ class GuiManuscript(NToolDialog):
# Process Controls # Process Controls
# ================ # ================
self.btnPreview = QPushButton(self.tr("Preview"), self) self.btnPreview = SHARED.theme.getStandardButton(nwStandardButton.PREVIEW, self)
self.btnPreview.clicked.connect(self._generatePreview) self.btnPreview.clicked.connect(self._generatePreview)
self.btnPrint = QPushButton(self.tr("Print"), self) self.btnPrint = SHARED.theme.getStandardButton(nwStandardButton.PRINT, self)
self.btnPrint.clicked.connect(self._printDocument) self.btnPrint.clicked.connect(self._printDocument)
self.btnBuild = QPushButton(self.tr("Build"), self) self.btnBuild = SHARED.theme.getStandardButton(nwStandardButton.BUILD, self)
self.btnBuild.clicked.connect(self._buildManuscript) self.btnBuild.clicked.connect(self._buildManuscript)
self.btnClose = QPushButton(self.tr("Close"), self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(qtLambda(self.close)) self.btnClose.clicked.connect(qtLambda(self.close))
self.processBox = QGridLayout() self.processBox = QGridLayout()
+14 -7
View File
@@ -40,6 +40,7 @@ from novelwriter import CONFIG, SHARED
from novelwriter.common import describeFont, fontMatcher, qtAddAction, qtLambda from novelwriter.common import describeFont, fontMatcher, qtAddAction, qtLambda
from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwUnicode, trConst from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwUnicode, trConst
from novelwriter.core.buildsettings import BuildSettings, FilterMode from novelwriter.core.buildsettings import BuildSettings, FilterMode
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import ( from novelwriter.extensions.configlayout import (
NColorLabel, NFixedPage, NScrollableForm, NScrollablePage NColorLabel, NFixedPage, NScrollableForm, NScrollablePage
) )
@@ -50,9 +51,8 @@ from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.extensions.switchbox import NSwitchBox from novelwriter.extensions.switchbox import NSwitchBox
from novelwriter.types import ( from novelwriter.types import (
QtAlignCenter, QtAlignLeft, QtDialogApply, QtDialogClose, QtDialogSave, QtAlignCenter, QtAlignLeft, QtHeaderFixed, QtHeaderStretch, QtRoleAccept,
QtHeaderFixed, QtHeaderStretch, QtRoleAccept, QtRoleApply, QtRoleReject, QtRoleApply, QtRoleReject, QtUserRole
QtUserRole
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -125,8 +125,15 @@ class GuiBuildSettings(NToolDialog):
self.toolStack.addWidget(self.optTabFormatting) self.toolStack.addWidget(self.optTabFormatting)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogApply | QtDialogSave | QtDialogClose, self) self.btnApply = SHARED.theme.getStandardButton(nwStandardButton.APPLY, self)
self.buttonBox.clicked.connect(self._dialogButtonClicked) self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
self.btnCancel = SHARED.theme.getStandardButton(nwStandardButton.CANCEL, self)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnApply, QDialogButtonBox.ButtonRole.ApplyRole)
self.btnBox.addButton(self.btnSave, QDialogButtonBox.ButtonRole.AcceptRole)
self.btnBox.addButton(self.btnCancel, QDialogButtonBox.ButtonRole.RejectRole)
self.btnBox.clicked.connect(self._dialogButtonClicked)
# Assemble # Assemble
self.topBox = QHBoxLayout() self.topBox = QHBoxLayout()
@@ -143,7 +150,7 @@ class GuiBuildSettings(NToolDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox) self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(12) self.outerBox.setSpacing(12)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
@@ -205,7 +212,7 @@ class GuiBuildSettings(NToolDialog):
@pyqtSlot("QAbstractButton*") @pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None: def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box.""" """Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button) role = self.btnBox.buttonRole(button)
if role == QtRoleApply: if role == QtRoleApply:
self._applyChanges() self._applyChanges()
self._emitBuildData() self._emitBuildData()
+8 -4
View File
@@ -38,12 +38,13 @@ from PyQt6.QtWidgets import (
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.common import formatTime, numberToRoman from novelwriter.common import formatTime, numberToRoman
from novelwriter.constants import nwUnicode from novelwriter.constants import nwUnicode
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollablePage from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollablePage
from novelwriter.extensions.modified import NNonBlockingDialog from novelwriter.extensions.modified import NNonBlockingDialog
from novelwriter.extensions.novelselector import NovelSelector from novelwriter.extensions.novelselector import NovelSelector
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignRight, QtDecoration, QtDialogClose from novelwriter.types import QtAlignRight, QtDecoration
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
@@ -102,8 +103,11 @@ class GuiNovelDetails(NNonBlockingDialog):
self.mainStack.addWidget(self.contentsPage) self.mainStack.addWidget(self.contentsPage)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogClose, self) self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.buttonBox.rejected.connect(self.reject) self.btnClose.clicked.connect(self.reject)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble # Assemble
self.topBox = QHBoxLayout() self.topBox = QHBoxLayout()
@@ -119,7 +123,7 @@ class GuiNovelDetails(NNonBlockingDialog):
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox) self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox) self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox) self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8) self.outerBox.setSpacing(8)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
+15 -16
View File
@@ -39,13 +39,11 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax, qtLambda from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax, qtLambda
from novelwriter.constants import nwConst from novelwriter.constants import nwConst
from novelwriter.enum import nwStandardButton
from novelwriter.error import formatException from novelwriter.error import formatException
from novelwriter.extensions.modified import NToolDialog from novelwriter.extensions.modified import NPushButton, NToolDialog
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import ( from novelwriter.types import QtAlignLeftMiddle, QtAlignRight, QtAlignRightMiddle, QtDecoration
QtAlignLeftMiddle, QtAlignRight, QtAlignRightMiddle, QtDecoration,
QtDialogClose, QtRoleAction
)
if TYPE_CHECKING: if TYPE_CHECKING:
from novelwriter.guimain import GuiMain from novelwriter.guimain import GuiMain
@@ -182,6 +180,7 @@ class GuiWritingStats(NToolDialog):
# Filter Options # Filter Options
iPx = SHARED.theme.baseIconHeight iPx = SHARED.theme.baseIconHeight
bSz = SHARED.theme.buttonIconSize
self.filterForm = QGridLayout(self) self.filterForm = QGridLayout(self)
self.filterForm.setRowStretch(6, 1) self.filterForm.setRowStretch(6, 1)
@@ -276,6 +275,10 @@ class GuiWritingStats(NToolDialog):
self.optsBox.addWidget(self.histMax, 0) self.optsBox.addWidget(self.histMax, 0)
# Buttons # Buttons
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(self._doClose)
self.btnClose.setAutoDefault(False)
self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self) self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self)
self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON)) self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
@@ -286,17 +289,13 @@ class GuiWritingStats(NToolDialog):
self.saveMenu.addAction(self.saveJSON) self.saveMenu.addAction(self.saveJSON)
self.saveMenu.addAction(self.saveCSV) self.saveMenu.addAction(self.saveCSV)
self.buttonBox = QDialogButtonBox(self) self.btnSave = NPushButton(self, self.tr("Save As"), bSz, "btn_save", "blue")
self.buttonBox.rejected.connect(self._doClose) self.btnSave.setAutoDefault(False)
self.btnSave.setMenu(self.saveMenu)
self.btnClose = self.buttonBox.addButton(QtDialogClose) self.btnBox = QDialogButtonBox(self)
if self.btnClose: self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
self.btnClose.setAutoDefault(False) self.btnBox.addButton(self.btnSave, QDialogButtonBox.ButtonRole.ActionRole)
self.btnSave = self.buttonBox.addButton(self.tr("Save As"), QtRoleAction)
if self.btnSave:
self.btnSave.setAutoDefault(False)
self.btnSave.setMenu(self.saveMenu)
# Assemble # Assemble
self.outerBox = QGridLayout() self.outerBox = QGridLayout()
@@ -304,7 +303,7 @@ class GuiWritingStats(NToolDialog):
self.outerBox.addLayout(self.optsBox, 1, 0, 1, 2) self.outerBox.addLayout(self.optsBox, 1, 0, 1, 2)
self.outerBox.addWidget(self.infoBox, 2, 0) self.outerBox.addWidget(self.infoBox, 2, 0)
self.outerBox.addWidget(self.filterBox, 2, 1) self.outerBox.addWidget(self.filterBox, 2, 1)
self.outerBox.addWidget(self.buttonBox, 3, 0, 1, 2) self.outerBox.addWidget(self.btnBox, 3, 0, 1, 2)
self.outerBox.setRowStretch(0, 1) self.outerBox.setRowStretch(0, 1)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)