e0df8b84e5
Add a (half-finished) input library, that for now simply allows registration and triggering of events. As next steps, the trigger will happen as part of a separate thread that reads input events. Additionally, invoking commands via a execute() will be supported. Thirdly, there is need of a way to selectively update the affected modules (widgets), which should be possible given that the event contains both the instance (widget ID) and name (module name).
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
# pylint: disable=C0111,R0903
|
|
|
|
'''Displays the current date and time.
|
|
|
|
Parameters:
|
|
* datetime.format: strftime()-compatible formatting string
|
|
* datetime.locale: locale to use rather than the system default
|
|
'''
|
|
|
|
from __future__ import absolute_import
|
|
import datetime
|
|
import locale
|
|
|
|
import core.module
|
|
import core.widget
|
|
import core.input
|
|
|
|
class Module(core.module.Module):
|
|
def __init__(self, config):
|
|
super().__init__(config, core.widget.Widget(self.full_text))
|
|
|
|
core.input.register(self, button=core.input.LEFT_MOUSE, cmd='calendar')
|
|
self._fmt = self.parameter('format', self.default_format())
|
|
l = locale.getdefaultlocale()
|
|
if not l or l == (None, None):
|
|
l = ('en_US', 'UTF-8')
|
|
lcl = self.parameter('locale', '.'.join(l))
|
|
try:
|
|
locale.setlocale(locale.LC_TIME, lcl.split('.'))
|
|
except Exception as e:
|
|
locale.setlocale(locale.LC_TIME, ('en_US', 'UTF-8'))
|
|
|
|
def default_format(self):
|
|
return '%x %X'
|
|
|
|
def full_text(self):
|
|
enc = locale.getpreferredencoding()
|
|
retval = datetime.datetime.now().strftime(self._fmt)
|
|
if hasattr(retval, 'decode'):
|
|
return retval.decode(enc)
|
|
return retval
|
|
|
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|