189 lines
4.5 KiB
Python
189 lines
4.5 KiB
Python
from qtpy import QtWidgets as QW
|
|
from qtpy import QtGui as QG
|
|
|
|
from hydrus.core import HydrusConstants as HC
|
|
from hydrus.core import HydrusData
|
|
from hydrus.core import HydrusGlobals as HG
|
|
from hydrus.core import HydrusText
|
|
|
|
from hydrus.client.gui import QtPorting as QP
|
|
|
|
def AppendMenu( menu, submenu, label ):
|
|
|
|
label = SanitiseLabel( label )
|
|
|
|
submenu.setTitle( label )
|
|
menu_action = menu.addMenu( submenu )
|
|
|
|
return menu_action
|
|
|
|
def AppendMenuBitmapItem( menu, label, description, bitmap, callable, *args, **kwargs ):
|
|
|
|
label = SanitiseLabel( label )
|
|
|
|
menu_item = QW.QAction( menu )
|
|
|
|
if HC.PLATFORM_MACOS:
|
|
|
|
menu_item.setMenuRole( QW.QAction.ApplicationSpecificRole )
|
|
|
|
|
|
menu_item.setText( HydrusText.ElideText( label, 128, elide_center = True ) )
|
|
|
|
menu_item.setStatusTip( description )
|
|
menu_item.setToolTip( description )
|
|
menu_item.setWhatsThis( description )
|
|
|
|
menu_item.setIcon( QG.QIcon( bitmap ) )
|
|
|
|
menu.addAction(menu_item)
|
|
|
|
BindMenuItem( menu_item, callable, *args, **kwargs )
|
|
|
|
return menu_item
|
|
|
|
def AppendMenuCheckItem( menu, label, description, initial_value, callable, *args, **kwargs ):
|
|
|
|
label = SanitiseLabel( label )
|
|
|
|
menu_item = QW.QAction( menu )
|
|
|
|
if HC.PLATFORM_MACOS:
|
|
|
|
menu_item.setMenuRole( QW.QAction.ApplicationSpecificRole )
|
|
|
|
|
|
menu_item.setText( HydrusText.ElideText( label, 128, elide_center = True ) )
|
|
|
|
menu_item.setStatusTip( description )
|
|
menu_item.setToolTip( description )
|
|
menu_item.setWhatsThis( description )
|
|
|
|
menu_item.setCheckable( True )
|
|
menu_item.setChecked( initial_value )
|
|
|
|
menu.addAction( menu_item )
|
|
|
|
BindMenuItem( menu_item, callable, *args, **kwargs )
|
|
|
|
return menu_item
|
|
|
|
def AppendMenuItem( menu, label, description, callable, *args, **kwargs ):
|
|
|
|
label = SanitiseLabel( label )
|
|
|
|
menu_item = QW.QAction( menu )
|
|
|
|
if HC.PLATFORM_MACOS:
|
|
|
|
menu_item.setMenuRole( QW.QAction.ApplicationSpecificRole )
|
|
|
|
|
|
elided_label = HydrusText.ElideText( label, 128, elide_center = True )
|
|
|
|
menu_item.setText( elided_label )
|
|
|
|
if elided_label != label:
|
|
|
|
menu_item.setToolTip( label )
|
|
|
|
else:
|
|
|
|
menu_item.setToolTip( description )
|
|
|
|
|
|
menu_item.setStatusTip( description )
|
|
menu_item.setWhatsThis( description )
|
|
|
|
menu.addAction( menu_item )
|
|
|
|
BindMenuItem( menu_item, callable, *args, **kwargs )
|
|
|
|
return menu_item
|
|
|
|
def AppendMenuLabel( menu, label, description = '' ):
|
|
|
|
if description is None:
|
|
|
|
description = ''
|
|
|
|
|
|
menu_item = QW.QAction( menu )
|
|
|
|
if HC.PLATFORM_MACOS:
|
|
|
|
menu_item.setMenuRole( QW.QAction.ApplicationSpecificRole )
|
|
|
|
|
|
menu_item.setText( HydrusText.ElideText( label, 128, elide_center = True ) )
|
|
|
|
menu_item.setStatusTip( description )
|
|
menu_item.setToolTip( description )
|
|
menu_item.setWhatsThis( description )
|
|
|
|
menu.addAction( menu_item )
|
|
|
|
BindMenuItem( menu_item, HG.client_controller.pub, 'clipboard', 'text', label )
|
|
|
|
return menu_item
|
|
|
|
def AppendSeparator( menu ):
|
|
|
|
num_items = len( menu.actions() )
|
|
|
|
if num_items > 0:
|
|
|
|
last_item = menu.actions()[-1]
|
|
|
|
if not last_item.isSeparator():
|
|
|
|
menu.addSeparator()
|
|
|
|
|
|
|
|
def BindMenuItem( menu_item, callable, *args, **kwargs ):
|
|
|
|
event_callable = GetEventCallable( callable, *args, **kwargs )
|
|
|
|
menu_item.triggered.connect( event_callable )
|
|
|
|
def DestroyMenu( menu ):
|
|
|
|
if menu is None:
|
|
|
|
return
|
|
|
|
|
|
if QP.isValid( menu ):
|
|
|
|
menu.deleteLater()
|
|
|
|
|
|
def GetEventCallable( callable, *args, **kwargs ):
|
|
|
|
def event_callable( checked_state ):
|
|
|
|
if HG.profile_mode:
|
|
|
|
summary = 'Profiling menu: ' + repr( callable )
|
|
|
|
HydrusData.Profile( summary, 'callable( *args, **kwargs )', globals(), locals(), min_duration_ms = HG.menu_profile_min_job_time_ms )
|
|
|
|
else:
|
|
|
|
callable( *args, **kwargs )
|
|
|
|
|
|
|
|
return event_callable
|
|
|
|
def SanitiseLabel( label ):
|
|
|
|
if label == '':
|
|
|
|
label = '-invalid label-'
|
|
|
|
|
|
return label.replace( '&', '&&' )
|
|
|