mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 16:35:33 +00:00
This file may be distributed and/or modified under the terms of the GNU Lesser General Public License version 2 as published by the Free Software Foundation. This file is distributed without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
173 lines
4.5 KiB
Python
173 lines
4.5 KiB
Python
'''
|
|
Base sequence step class and some derivatives.
|
|
|
|
@author: Eitan Isaacson
|
|
@copyright: Copyright (c) 2007 - 2009 Eitan Isaacson
|
|
@license: LGPL
|
|
|
|
http://ldtp.freedesktop.org
|
|
|
|
This file may be distributed and/or modified under the terms of the GNU Lesser General
|
|
Public License version 2 as published by the Free Software Foundation. This file
|
|
is distributed without any warranty; without even the implied warranty of
|
|
merchantability or fitness for a particular purpose.
|
|
|
|
See "COPYING" in the source distribution for more information.
|
|
|
|
Headers in this file shall remain intact.
|
|
'''
|
|
|
|
import pyatspi, sys
|
|
try:
|
|
from gi.repository import GObject as gobject
|
|
except:
|
|
import gobject
|
|
|
|
class SequenceStep(gobject.GObject):
|
|
'''
|
|
Base class for all sequence steps in a Macaroon sequence. Emits a "done"
|
|
signal when the step is done.
|
|
|
|
@cvar delta_time: Time, in milliseconds, before this step should be executed.
|
|
@type delta_time: integer
|
|
|
|
@ivar done: True if step is done.
|
|
@type done: boolean
|
|
'''
|
|
__gsignals__ = {'done' : (gobject.SIGNAL_RUN_FIRST,
|
|
gobject.TYPE_NONE, ())}
|
|
delta_time = 0
|
|
def __init__(self):
|
|
'''
|
|
Initialize L{SequenceStep}.
|
|
'''
|
|
try:
|
|
super(SequenceStep, self).__init__()
|
|
except:
|
|
self.__gobject_init__()
|
|
self.done = False
|
|
|
|
def stepDone(self):
|
|
'''
|
|
Puts instance in "done" state. And emits "done" signal.
|
|
|
|
@return: Return False because this is usually called through a
|
|
gobject timeout.
|
|
@rtype: boolean
|
|
'''
|
|
if not self.done:
|
|
self.done = True
|
|
self.emit('done')
|
|
return False
|
|
|
|
class AtomicAction(SequenceStep):
|
|
'''
|
|
A L{SequenceStep} that performs a certain action.
|
|
|
|
@ivar _func: Function to call.
|
|
@type _func: callable
|
|
@ivar _args: Arguments to give the function.
|
|
@type _args: list
|
|
@ivar _kwargs: Key word arguments for function.
|
|
@type _kwargs: dictionary
|
|
'''
|
|
def __init__(self, delta_time, func, *args, **kwargs):
|
|
'''
|
|
Initialize L{AtomicAction}.
|
|
|
|
@param delta_time: Time, in milliseconds, before this step should be
|
|
executed.
|
|
@type delta_time: integer
|
|
@param func: Function to call.
|
|
@type func: callable
|
|
@param _args: Arguments to give the function.
|
|
@type _args: list
|
|
@param _kwargs: Key word arguments for function.
|
|
@type _kwargs: dictionary
|
|
'''
|
|
SequenceStep.__init__(self)
|
|
self.delta_time = delta_time
|
|
self._func = func
|
|
self._args = args
|
|
self._kwargs = kwargs
|
|
|
|
def __call__(self):
|
|
'''
|
|
Perform the given function.
|
|
'''
|
|
self._func(*self._args, **self._kwargs)
|
|
self.stepDone()
|
|
|
|
class DebugAction(AtomicAction):
|
|
'''
|
|
An action that prints a debug message to standard output.
|
|
'''
|
|
def __init__(self, debug_msg, delta_time=0):
|
|
'''
|
|
Initialize L{DebugAction}
|
|
|
|
@param debug_msg: Message to print out to standard output.
|
|
@type debug_msg: string
|
|
@param delta_time: Time to wait before printing the message.
|
|
@type delta_time: integer
|
|
'''
|
|
self._debug_msg = debug_msg
|
|
AtomicAction.__init__(self, 0, self._printDebugMsg)
|
|
|
|
def _printDebugMsg(self):
|
|
'''
|
|
Print the debug message.
|
|
'''
|
|
print(self._debug_msg)
|
|
|
|
def __str__(self):
|
|
'''
|
|
String representation of instance.
|
|
|
|
@return: String representation of instance.
|
|
@rtype: string
|
|
'''
|
|
return 'Debug message: %s' % self._debug_msg
|
|
|
|
class PauseAction(AtomicAction):
|
|
'''
|
|
A simple pause for a given amount of time.
|
|
'''
|
|
def __init__(self, delta_time):
|
|
'''
|
|
Initialize a L{PauseAction}.
|
|
|
|
@param delta_time: Duration of pause in milliseconds.
|
|
@type delta_time: integer
|
|
'''
|
|
AtomicAction.__init__(self, delta_time, lambda args, kwargs: None, [], {})
|
|
|
|
def __str__(self):
|
|
'''
|
|
String representation of instance.
|
|
|
|
@return: String representation of instance.
|
|
@rtype: string
|
|
'''
|
|
return 'Pause for %d milliseconds' % self.delta_time
|
|
|
|
|
|
class CallableAction(AtomicAction):
|
|
'''
|
|
A simplified L{AtomicAction} that makes it easy for simply calling a function.
|
|
'''
|
|
def __init__(self, func, *args, **kwargs):
|
|
'''
|
|
Initialize L{AtomicAction}.
|
|
|
|
@param delta_time: Time, in milliseconds, before this step should be
|
|
executed.
|
|
@type delta_time: integer
|
|
@param func: Function to call.
|
|
@type func: callable
|
|
@param _args: Arguments to give the function.
|
|
@type _args: list
|
|
@param _kwargs: Key word arguments for function.
|
|
@type _kwargs: dictionary
|
|
'''
|
|
AtomicAction.__init__(self, 0, func, *args, **kwargs)
|