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
+8 -4
View File
@@ -37,9 +37,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED
from novelwriter.common import formatFileFilter, formatInt, getFileSize, openExternalPath
from novelwriter.enum import nwStandardButton
from novelwriter.error import formatException
from novelwriter.extensions.modified import NIconToolButton, NNonBlockingDialog
from novelwriter.types import QtDialogClose, QtHexArgb
from novelwriter.types import QtHexArgb
logger = logging.getLogger(__name__)
@@ -110,8 +111,11 @@ class GuiDictionaries(NNonBlockingDialog):
self.infoBox.setFrameStyle(QFrame.Shape.NoFrame)
# Buttons
self.buttonBox = QDialogButtonBox(QtDialogClose, self)
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.btnClose, QDialogButtonBox.ButtonRole.AcceptRole)
# Assemble
self.outerBox = QVBoxLayout()
@@ -123,7 +127,7 @@ class GuiDictionaries(NNonBlockingDialog):
self.outerBox.addLayout(self.inBox, 0)
self.outerBox.addWidget(self.infoBox, 1)
self.outerBox.addSpacing(8)
self.outerBox.addWidget(self.buttonBox, 0)
self.outerBox.addWidget(self.btnBox, 0)
self.setLayout(self.outerBox)
+12 -11
View File
@@ -34,9 +34,10 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED
from novelwriter.common import readTextFile
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NDialog
from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignLeft, QtAlignRight, QtDialogClose, QtRoleAction
from novelwriter.types import QtAlignLeft, QtAlignRight
logger = logging.getLogger(__name__)
@@ -91,22 +92,22 @@ class GuiLipsum(NDialog):
self.innerBox.addLayout(self.formBox)
# Buttons
self.buttonBox = QDialogButtonBox(self)
self.buttonBox.rejected.connect(self.reject)
self.btnInsert = SHARED.theme.getStandardButton(nwStandardButton.INSERT, self)
self.btnInsert.clicked.connect(self._doInsert)
self.btnInsert.setAutoDefault(False)
self.btnClose = self.buttonBox.addButton(QtDialogClose)
if self.btnClose:
self.btnClose.setAutoDefault(False)
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
self.btnClose.clicked.connect(self.reject)
self.btnClose.setAutoDefault(False)
self.btnInsert = self.buttonBox.addButton(self.tr("Insert"), QtRoleAction)
if self.btnInsert:
self.btnInsert.clicked.connect(self._doInsert)
self.btnInsert.setAutoDefault(False)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnInsert, QDialogButtonBox.ButtonRole.ApplyRole)
self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox)
self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(16)
self.setLayout(self.outerBox)
+16 -22
View File
@@ -32,7 +32,7 @@ from PyQt6.QtCore import QTimer, pyqtSlot
from PyQt6.QtWidgets import (
QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog,
QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem,
QPushButton, QSplitter, QVBoxLayout, QWidget
QSplitter, QVBoxLayout, QWidget
)
from novelwriter import SHARED
@@ -40,10 +40,10 @@ from novelwriter.common import makeFileNameSafe, openExternalPath
from novelwriter.constants import nwLabels
from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.core.item import NWItem
from novelwriter.enum import nwBuildFmt
from novelwriter.extensions.modified import NDialog, NIconToolButton
from novelwriter.enum import nwBuildFmt, nwStandardButton
from novelwriter.extensions.modified import NDialog, NIconToolButton, NPushButton
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:
from PyQt6.QtGui import QCloseEvent
@@ -178,25 +178,19 @@ class GuiManuscriptBuild(NDialog):
self.buildBox.setVerticalSpacing(4)
# Dialog Buttons
self.buttonBox = QDialogButtonBox(self)
self.btnOpen = QPushButton(
SHARED.theme.getIcon("browse", "yellow"), self.tr("Open Folder"), self
)
self.btnOpen.setIconSize(bSz)
self.btnOpen = NPushButton(self, self.tr("Open Folder"), bSz, "browse", "yellow")
self.btnOpen.setAutoDefault(False)
self.buttonBox.addButton(self.btnOpen, QtRoleAction)
self.btnBuild = QPushButton(
SHARED.theme.getIcon("sb_build", "blue"), self.tr("&Build"), self
)
self.btnBuild.setIconSize(bSz)
self.btnBuild = SHARED.theme.getStandardButton(nwStandardButton.BUILD, self)
self.btnBuild.setAutoDefault(True)
self.buttonBox.addButton(self.btnBuild, QtRoleAction)
self.btnClose = self.buttonBox.addButton(QtDialogClose)
if self.btnClose:
self.btnClose.setAutoDefault(False)
self.btnClose = SHARED.theme.getStandardButton(nwStandardButton.CLOSE, self)
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
# ============
@@ -223,7 +217,7 @@ class GuiManuscriptBuild(NDialog):
self.outerBox.addSpacing(4)
self.outerBox.addLayout(self.buildBox, 0)
self.outerBox.addSpacing(16)
self.outerBox.addWidget(self.buttonBox, 0)
self.outerBox.addWidget(self.btnBox, 0)
self.outerBox.setSpacing(0)
self.setLayout(self.outerBox)
@@ -239,7 +233,7 @@ class GuiManuscriptBuild(NDialog):
# Signals
self.btnReset.clicked.connect(self._doResetBuildName)
self.btnBrowse.clicked.connect(self._doSelectPath)
self.buttonBox.clicked.connect(self._dialogButtonClicked)
self.btnBox.clicked.connect(self._dialogButtonClicked)
self.listFormats.itemSelectionChanged.connect(self._resetProgress)
logger.debug("Ready: GuiManuscriptBuild")
@@ -266,7 +260,7 @@ class GuiManuscriptBuild(NDialog):
@pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button)
role = self.btnBox.buttonRole(button)
if role == QtRoleAction:
if button == self.btnBuild:
self._runBuild()
+8 -7
View File
@@ -36,9 +36,9 @@ from PyQt6.QtGui import (
from PyQt6.QtPrintSupport import QPrinter, QPrintPreviewDialog
from PyQt6.QtWidgets import (
QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout,
QLabel, QListWidget, QListWidgetItem, QPushButton, QSplitter,
QStackedWidget, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem,
QVBoxLayout, QWidget
QLabel, QListWidget, QListWidgetItem, QSplitter, QStackedWidget,
QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
QWidget
)
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.core.buildsettings import BuildCollection, BuildSettings
from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.modified import NIconToggleButton, NIconToolButton, NToolDialog
from novelwriter.extensions.progressbars import NProgressCircle
from novelwriter.extensions.switch import NSwitch
@@ -171,16 +172,16 @@ class GuiManuscript(NToolDialog):
# Process Controls
# ================
self.btnPreview = QPushButton(self.tr("Preview"), self)
self.btnPreview = SHARED.theme.getStandardButton(nwStandardButton.PREVIEW, self)
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.btnBuild = QPushButton(self.tr("Build"), self)
self.btnBuild = SHARED.theme.getStandardButton(nwStandardButton.BUILD, self)
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.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.constants import nwHeadFmt, nwKeyWords, nwLabels, nwUnicode, trConst
from novelwriter.core.buildsettings import BuildSettings, FilterMode
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import (
NColorLabel, NFixedPage, NScrollableForm, NScrollablePage
)
@@ -50,9 +51,8 @@ from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch
from novelwriter.extensions.switchbox import NSwitchBox
from novelwriter.types import (
QtAlignCenter, QtAlignLeft, QtDialogApply, QtDialogClose, QtDialogSave,
QtHeaderFixed, QtHeaderStretch, QtRoleAccept, QtRoleApply, QtRoleReject,
QtUserRole
QtAlignCenter, QtAlignLeft, QtHeaderFixed, QtHeaderStretch, QtRoleAccept,
QtRoleApply, QtRoleReject, QtUserRole
)
if TYPE_CHECKING:
@@ -125,8 +125,15 @@ class GuiBuildSettings(NToolDialog):
self.toolStack.addWidget(self.optTabFormatting)
# Buttons
self.buttonBox = QDialogButtonBox(QtDialogApply | QtDialogSave | QtDialogClose, self)
self.buttonBox.clicked.connect(self._dialogButtonClicked)
self.btnApply = SHARED.theme.getStandardButton(nwStandardButton.APPLY, self)
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
self.topBox = QHBoxLayout()
@@ -143,7 +150,7 @@ class GuiBuildSettings(NToolDialog):
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox)
self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(12)
self.setLayout(self.outerBox)
@@ -205,7 +212,7 @@ class GuiBuildSettings(NToolDialog):
@pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button)
role = self.btnBox.buttonRole(button)
if role == QtRoleApply:
self._applyChanges()
self._emitBuildData()
+8 -4
View File
@@ -38,12 +38,13 @@ from PyQt6.QtWidgets import (
from novelwriter import SHARED
from novelwriter.common import formatTime, numberToRoman
from novelwriter.constants import nwUnicode
from novelwriter.enum import nwStandardButton
from novelwriter.extensions.configlayout import NColorLabel, NFixedPage, NScrollablePage
from novelwriter.extensions.modified import NNonBlockingDialog
from novelwriter.extensions.novelselector import NovelSelector
from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch
from novelwriter.types import QtAlignRight, QtDecoration, QtDialogClose
from novelwriter.types import QtAlignRight, QtDecoration
if TYPE_CHECKING:
from PyQt6.QtGui import QCloseEvent
@@ -102,8 +103,11 @@ class GuiNovelDetails(NNonBlockingDialog):
self.mainStack.addWidget(self.contentsPage)
# Buttons
self.buttonBox = QDialogButtonBox(QtDialogClose, self)
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.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
# Assemble
self.topBox = QHBoxLayout()
@@ -119,7 +123,7 @@ class GuiNovelDetails(NNonBlockingDialog):
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox)
self.outerBox.addWidget(self.btnBox)
self.outerBox.setSpacing(8)
self.setLayout(self.outerBox)
+15 -16
View File
@@ -39,13 +39,11 @@ from PyQt6.QtWidgets import (
from novelwriter import CONFIG, SHARED
from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax, qtLambda
from novelwriter.constants import nwConst
from novelwriter.enum import nwStandardButton
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.types import (
QtAlignLeftMiddle, QtAlignRight, QtAlignRightMiddle, QtDecoration,
QtDialogClose, QtRoleAction
)
from novelwriter.types import QtAlignLeftMiddle, QtAlignRight, QtAlignRightMiddle, QtDecoration
if TYPE_CHECKING:
from novelwriter.guimain import GuiMain
@@ -182,6 +180,7 @@ class GuiWritingStats(NToolDialog):
# Filter Options
iPx = SHARED.theme.baseIconHeight
bSz = SHARED.theme.buttonIconSize
self.filterForm = QGridLayout(self)
self.filterForm.setRowStretch(6, 1)
@@ -276,6 +275,10 @@ class GuiWritingStats(NToolDialog):
self.optsBox.addWidget(self.histMax, 0)
# 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.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
@@ -286,17 +289,13 @@ class GuiWritingStats(NToolDialog):
self.saveMenu.addAction(self.saveJSON)
self.saveMenu.addAction(self.saveCSV)
self.buttonBox = QDialogButtonBox(self)
self.buttonBox.rejected.connect(self._doClose)
self.btnSave = NPushButton(self, self.tr("Save As"), bSz, "btn_save", "blue")
self.btnSave.setAutoDefault(False)
self.btnSave.setMenu(self.saveMenu)
self.btnClose = self.buttonBox.addButton(QtDialogClose)
if self.btnClose:
self.btnClose.setAutoDefault(False)
self.btnSave = self.buttonBox.addButton(self.tr("Save As"), QtRoleAction)
if self.btnSave:
self.btnSave.setAutoDefault(False)
self.btnSave.setMenu(self.saveMenu)
self.btnBox = QDialogButtonBox(self)
self.btnBox.addButton(self.btnClose, QDialogButtonBox.ButtonRole.RejectRole)
self.btnBox.addButton(self.btnSave, QDialogButtonBox.ButtonRole.ActionRole)
# Assemble
self.outerBox = QGridLayout()
@@ -304,7 +303,7 @@ class GuiWritingStats(NToolDialog):
self.outerBox.addLayout(self.optsBox, 1, 0, 1, 2)
self.outerBox.addWidget(self.infoBox, 2, 0)
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.setLayout(self.outerBox)