184 lines
5.5 KiB
Python
184 lines
5.5 KiB
Python
import typing
|
|
|
|
from qtpy import QtCore as QC
|
|
|
|
from hydrus.core import HydrusConstants as HC
|
|
from hydrus.core import HydrusGlobals as HG
|
|
|
|
from hydrus.client import ClientApplicationCommand as CAC
|
|
from hydrus.client.gui import ClientGUIMediaControls
|
|
from hydrus.client.gui import ClientGUIShortcuts
|
|
from hydrus.client.gui import ClientGUITopLevelWindows
|
|
from hydrus.client.gui import QtPorting as QP
|
|
from hydrus.client.gui.canvas import ClientGUICanvas
|
|
|
|
class CanvasFrame( ClientGUITopLevelWindows.FrameThatResizesWithHovers ):
|
|
|
|
def __init__( self, parent ):
|
|
|
|
# Parent is set to None here so that this window shows up as a separate entry on the taskbar
|
|
ClientGUITopLevelWindows.FrameThatResizesWithHovers.__init__( self, None, 'hydrus client media viewer', 'media_viewer' )
|
|
|
|
self._canvas_window = None
|
|
|
|
self._my_shortcut_handler = ClientGUIShortcuts.ShortcutsHandler( self, [ 'global', 'media_viewer' ] )
|
|
|
|
HG.client_controller.gui.RegisterCanvasFrameReference( self )
|
|
|
|
self.destroyed.connect( HG.client_controller.gui.MaintainCanvasFrameReferences )
|
|
|
|
self._was_maximised_before_fullscreen = True
|
|
|
|
|
|
def closeEvent( self, event ):
|
|
|
|
if self._canvas_window is not None:
|
|
|
|
can_close = self._canvas_window.TryToDoPreClose()
|
|
|
|
if can_close:
|
|
|
|
self._canvas_window.CleanBeforeDestroy()
|
|
|
|
ClientGUITopLevelWindows.FrameThatResizes.closeEvent( self, event )
|
|
|
|
else:
|
|
|
|
event.ignore()
|
|
|
|
|
|
else:
|
|
|
|
ClientGUITopLevelWindows.FrameThatResizes.closeEvent( self, event )
|
|
|
|
|
|
|
|
def FullscreenSwitch( self ):
|
|
|
|
if self.isFullScreen():
|
|
|
|
if self._was_maximised_before_fullscreen:
|
|
|
|
self.showMaximized()
|
|
|
|
else:
|
|
|
|
self.showNormal()
|
|
|
|
|
|
else:
|
|
|
|
if HC.PLATFORM_MACOS:
|
|
|
|
return
|
|
|
|
|
|
self._was_maximised_before_fullscreen = self.isMaximized()
|
|
|
|
self.showFullScreen()
|
|
|
|
|
|
self._canvas_window.ResetMediaWindowCenterPosition()
|
|
|
|
|
|
def PauseMedia( self ):
|
|
|
|
self._canvas_window.PauseMedia()
|
|
|
|
|
|
def ProcessApplicationCommand( self, command: CAC.ApplicationCommand ):
|
|
|
|
command_processed = True
|
|
|
|
data = command.GetData()
|
|
|
|
if command.IsSimpleCommand():
|
|
|
|
action = data
|
|
|
|
if action == CAC.SIMPLE_EXIT_APPLICATION:
|
|
|
|
HG.client_controller.gui.TryToExit()
|
|
|
|
elif action == CAC.SIMPLE_EXIT_APPLICATION_FORCE_MAINTENANCE:
|
|
|
|
HG.client_controller.gui.TryToExit( force_shutdown_maintenance = True )
|
|
|
|
elif action == CAC.SIMPLE_RESTART_APPLICATION:
|
|
|
|
HG.client_controller.gui.TryToExit( restart = True )
|
|
|
|
elif action == CAC.SIMPLE_HIDE_TO_SYSTEM_TRAY:
|
|
|
|
HG.client_controller.gui.HideToSystemTray()
|
|
|
|
elif action == CAC.SIMPLE_CLOSE_MEDIA_VIEWER:
|
|
|
|
self.close()
|
|
|
|
elif action == CAC.SIMPLE_SWITCH_BETWEEN_FULLSCREEN_BORDERLESS_AND_REGULAR_FRAMED_WINDOW:
|
|
|
|
self.FullscreenSwitch()
|
|
|
|
elif action == CAC.SIMPLE_FLIP_DARKMODE:
|
|
|
|
HG.client_controller.gui.FlipDarkmode()
|
|
|
|
elif action == CAC.SIMPLE_GLOBAL_AUDIO_MUTE:
|
|
|
|
ClientGUIMediaControls.SetMute( ClientGUIMediaControls.AUDIO_GLOBAL, True )
|
|
|
|
elif action == CAC.SIMPLE_GLOBAL_AUDIO_UNMUTE:
|
|
|
|
ClientGUIMediaControls.SetMute( ClientGUIMediaControls.AUDIO_GLOBAL, False )
|
|
|
|
elif action == CAC.SIMPLE_GLOBAL_AUDIO_MUTE_FLIP:
|
|
|
|
ClientGUIMediaControls.FlipMute( ClientGUIMediaControls.AUDIO_GLOBAL )
|
|
|
|
else:
|
|
|
|
command_processed = False
|
|
|
|
|
|
else:
|
|
|
|
command_processed = False
|
|
|
|
|
|
return command_processed
|
|
|
|
|
|
def minimumSizeHint( self ):
|
|
|
|
return QC.QSize( 240, 180 )
|
|
|
|
|
|
def SetCanvas( self, canvas_window: ClientGUICanvas.CanvasWithDetails ):
|
|
|
|
self._canvas_window = canvas_window
|
|
|
|
self.setFocusProxy( self._canvas_window )
|
|
|
|
vbox = QP.VBoxLayout( margin = 0 )
|
|
|
|
QP.AddToLayout( vbox, self._canvas_window )
|
|
|
|
self.setLayout( vbox )
|
|
|
|
ClientGUITopLevelWindows.SetInitialTLWSizeAndPosition( self, self._frame_key )
|
|
|
|
self.show()
|
|
|
|
# just to reinforce, as Qt sometimes sets none focus for this window until it goes off and back on
|
|
self._canvas_window.setFocus( QC.Qt.OtherFocusReason )
|
|
|
|
|
|
def TakeFocusForUser( self ):
|
|
|
|
self.activateWindow()
|
|
|
|
self._canvas_window.setFocus( QC.Qt.OtherFocusReason )
|
|
|
|
|