58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
from ngSkinTools2 import signal
|
|
from ngSkinTools2.api.python_compatibility import Object
|
|
from ngSkinTools2.api.session import Session
|
|
|
|
|
|
class Action(Object):
|
|
name = "Action"
|
|
tooltip = ""
|
|
checkable = False
|
|
|
|
def __init__(self, session):
|
|
self.session = session # type: Session
|
|
|
|
def run(self):
|
|
pass
|
|
|
|
def enabled(self):
|
|
return True
|
|
|
|
def checked(self):
|
|
return False
|
|
|
|
def run_if_enabled(self):
|
|
if self.enabled():
|
|
self.run()
|
|
|
|
def update_on_signals(self):
|
|
return []
|
|
|
|
def as_qt_action(self, parent):
|
|
from ngSkinTools2.ui import actions
|
|
|
|
result = actions.define_action(parent, self.name, callback=self.run_if_enabled, tooltip=self.tooltip)
|
|
result.setCheckable(self.checkable)
|
|
|
|
def update():
|
|
result.setEnabled(self.enabled())
|
|
if self.checkable:
|
|
result.setChecked(self.checked())
|
|
|
|
signal.on(*self.update_on_signals(), qtParent=parent)(update)
|
|
|
|
update()
|
|
return result
|
|
|
|
|
|
def qt_action(action_class, session, parent):
|
|
"""
|
|
Wrap provided action_class into a QT action
|
|
"""
|
|
return action_class(session).as_qt_action(parent)
|
|
|
|
|
|
def do_action_hotkey(action_class):
|
|
from ngSkinTools2.api import session
|
|
|
|
action_class(session.session).run_if_enabled()
|