X-Git-Url: http://git.tremily.us/?p=hooke.git;a=blobdiff_plain;f=hooke%2Fui%2F__init__.py;h=cfdac7293bbc07ceb28cafa9cadd6597c081b7e6;hp=18a220657dc06a037b4c283ad816a38ea1900d91;hb=ab9c8c1e394de4f816440129d5b483d04845f783;hpb=4b67f022b07fc09a07d5a29d2d5845d7613c4433 diff --git a/hooke/ui/__init__.py b/hooke/ui/__init__.py index 18a2206..cfdac72 100644 --- a/hooke/ui/__init__.py +++ b/hooke/ui/__init__.py @@ -2,15 +2,15 @@ # # This file is part of Hooke. # -# Hooke is free software: you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# Hooke is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. # -# Hooke is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. +# Hooke is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General +# Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with Hooke. If not, see @@ -20,12 +20,21 @@ """ import ConfigParser as configparser +import logging from .. import version -from ..license import short_license from ..config import Setting +from ..engine import CommandMessage from ..util.pluggable import IsSubclass, construct_odict +try: + from ..license import short_license +except ImportError, e: + logging.warn('could not load short_license from hooke.license') + from .. import __license__ + def short_license(extra_info, **kwargs): + return __license__ + USER_INTERFACE_MODULES = [ 'commandline', @@ -39,25 +48,6 @@ USER_INTERFACE_SETTING_SECTION = 'user interfaces' """ -class QueueMessage (object): - def __str__(self): - return self.__class__.__name__ - -class CloseEngine (QueueMessage): - pass - -class CommandMessage (QueueMessage): - """A message storing a command to run, `command` should be a - :class:`hooke.command.Command` instance, and `arguments` should be - a :class:`dict` with `argname` keys and `value` values to be - passed to the command. - """ - def __init__(self, command, arguments=None): - self.command = command - if arguments == None: - arguments = {} - self.arguments = arguments - class UserInterface (object): """A user interface to drive the :class:`hooke.engine.CommandEngine`. """ @@ -93,6 +83,26 @@ class UserInterface (object): # Assorted useful tidbits for subclasses + def _submit_command(self, command_message, ui_to_command_queue): + log = logging.getLogger('hooke') + log.debug('executing %s' % command_message) + ui_to_command_queue.put(command_message) + + def _set_config(self, option, value, ui_to_command_queue, response_handler, + section=None): + if section == None: + section = self.setting_section + if section in [self.setting_section, 'conditions']: + if self.config[option] == value: + return # No change, so no need to push the new value. + self.config[option] = value + cm = CommandMessage( + command='set config', + arguments={'section': section, 'option': option, 'value': value}) + self._submit_command(command_message=cm, + ui_to_command_queue=ui_to_command_queue) + response_handler(command_message=cm) + def _splash_text(self, extra_info, **kwargs): return (""" Hooke version %s @@ -103,7 +113,7 @@ Hooke version %s def _playlist_status(self, playlist): if len(playlist) > 0: - return '%s (%s/%s)' % (playlist.name, playlist._index + 1, + return '%s (%s/%s)' % (playlist.name, playlist.index() + 1, len(playlist)) return 'The playlist %s does not contain any valid force curve data.' \ % self.name