Improve handling of tool dialogs on project close
This commit is contained in:
@@ -28,6 +28,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt5.QtCore import QSize, Qt
|
from PyQt5.QtCore import QSize, Qt
|
||||||
from PyQt5.QtGui import QWheelEvent
|
from PyQt5.QtGui import QWheelEvent
|
||||||
@@ -38,10 +39,13 @@ from PyQt5.QtWidgets import (
|
|||||||
|
|
||||||
from novelwriter import CONFIG, SHARED
|
from novelwriter import CONFIG, SHARED
|
||||||
|
|
||||||
|
if TYPE_CHECKING: # pragma: no cover
|
||||||
|
from novelwriter.guimain import GuiMain
|
||||||
|
|
||||||
|
|
||||||
class NToolDialog(QDialog):
|
class NToolDialog(QDialog):
|
||||||
|
|
||||||
def __init__(self, parent: QWidget | None = None) -> None:
|
def __init__(self, parent: GuiMain) -> None:
|
||||||
super().__init__(parent=parent)
|
super().__init__(parent=parent)
|
||||||
self.setModal(False)
|
self.setModal(False)
|
||||||
if CONFIG.osDarwin:
|
if CONFIG.osDarwin:
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ class SharedData(QObject):
|
|||||||
|
|
||||||
def closeProject(self) -> None:
|
def closeProject(self) -> None:
|
||||||
"""Close the current project."""
|
"""Close the current project."""
|
||||||
self._closeDialogs()
|
self._closeToolDialogs()
|
||||||
self.project.closeProject(self._idleTime)
|
self.project.closeProject(self._idleTime)
|
||||||
self._resetProject()
|
self._resetProject()
|
||||||
self._resetIdleTimer()
|
self._resetIdleTimer()
|
||||||
@@ -357,15 +357,12 @@ class SharedData(QObject):
|
|||||||
self._idleTime = 0.0
|
self._idleTime = 0.0
|
||||||
return
|
return
|
||||||
|
|
||||||
def _closeDialogs(self) -> None:
|
def _closeToolDialogs(self) -> None:
|
||||||
"""Close non-modal dialogs."""
|
"""Close all open tool dialogs."""
|
||||||
from novelwriter.tools.manuscript import GuiManuscript
|
from novelwriter.extensions.modified import NToolDialog
|
||||||
from novelwriter.tools.writingstats import GuiWritingStats
|
|
||||||
|
|
||||||
for widget in self.mainGui.children():
|
for widget in self.mainGui.children():
|
||||||
if isinstance(widget, (GuiManuscript, GuiWritingStats)):
|
if isinstance(widget, NToolDialog):
|
||||||
widget.close()
|
widget.close()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# END Class SharedData
|
# END Class SharedData
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import logging
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from time import time
|
from time import time
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot
|
from PyQt5.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot
|
||||||
from PyQt5.QtGui import QCloseEvent, QColor, QCursor, QFont, QPalette, QResizeEvent
|
from PyQt5.QtGui import QCloseEvent, QColor, QCursor, QFont, QPalette, QResizeEvent
|
||||||
@@ -56,6 +57,9 @@ from novelwriter.types import (
|
|||||||
QtSizeExpanding, QtSizeIgnored, QtUserRole
|
QtSizeExpanding, QtSizeIgnored, QtUserRole
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if TYPE_CHECKING: # pragma: no cover
|
||||||
|
from novelwriter.guimain import GuiMain
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -69,7 +73,7 @@ class GuiManuscript(NToolDialog):
|
|||||||
|
|
||||||
D_KEY = QtUserRole
|
D_KEY = QtUserRole
|
||||||
|
|
||||||
def __init__(self, parent: QWidget) -> None:
|
def __init__(self, parent: GuiMain) -> None:
|
||||||
super().__init__(parent=parent)
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
logger.debug("Create: GuiManuscript")
|
logger.debug("Create: GuiManuscript")
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt5.QtCore import QEvent, pyqtSignal, pyqtSlot
|
from PyQt5.QtCore import QEvent, pyqtSignal, pyqtSlot
|
||||||
from PyQt5.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument
|
from PyQt5.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
@@ -51,6 +53,9 @@ from novelwriter.types import (
|
|||||||
QtRoleApply, QtRoleReject, QtUserRole
|
QtRoleApply, QtRoleReject, QtUserRole
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if TYPE_CHECKING: # pragma: no cover
|
||||||
|
from novelwriter.guimain import GuiMain
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -69,7 +74,7 @@ class GuiBuildSettings(NToolDialog):
|
|||||||
|
|
||||||
newSettingsReady = pyqtSignal(BuildSettings)
|
newSettingsReady = pyqtSignal(BuildSettings)
|
||||||
|
|
||||||
def __init__(self, parent: QWidget, build: BuildSettings) -> None:
|
def __init__(self, parent: GuiMain, build: BuildSettings) -> None:
|
||||||
super().__init__(parent=parent)
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
logger.debug("Create: GuiBuildSettings")
|
logger.debug("Create: GuiBuildSettings")
|
||||||
|
|||||||
Reference in New Issue
Block a user