hydrus/hydrus/client/gui/ClientGUIDialogsMessage.py

59 lines
1.7 KiB
Python

import typing
from qtpy import QtCore as QC
from qtpy import QtWidgets as QW
from hydrus.core import HydrusData
from hydrus.core import HydrusGlobals as HG
# This holds common calls for the various QMessageBox dialogs
# a thread can call these safely and they'll block
def ShowDialog( dialog_call: typing.Callable, win: typing.Optional[ QW.QWidget ], title: str, message: str ):
if not isinstance( message, str ):
try:
message = str( message )
except Exception as e:
message = f'Could not determine the text for this dialog message! Please let hydev know. My best attempt at rendering what I was given is:\n\n{repr( message )}'
HydrusData.DebugPrint( message )
HydrusData.PrintException( e )
if QC.QThread.currentThread() == QW.QApplication.instance().thread():
dialog_call( win, title, message )
else:
qt_obj = HG.client_controller.app if win is None else win
HG.client_controller.CallBlockingToQt( qt_obj, dialog_call, win, title, message )
def ShowCritical( win: typing.Optional[ QW.QWidget ], title: str, message: str ):
HydrusData.DebugPrint( title )
HydrusData.DebugPrint( message )
ShowDialog( QW.QMessageBox.critical, win, title, message )
def ShowInformation( win: typing.Optional[ QW.QWidget ], message: str ):
ShowDialog( QW.QMessageBox.information, win, 'Information', message )
def ShowWarning( win: typing.Optional[ QW.QWidget ], message: str ):
ShowDialog( QW.QMessageBox.warning, win, 'Warning', message )