diff options
author | Benjamin Schwartz <bens@alum.mit.edu> | 2007-09-30 02:26:08 (GMT) |
---|---|---|
committer | Benjamin Schwartz <bens@alum.mit.edu> | 2007-09-30 02:26:08 (GMT) |
commit | 6bbda01e1fae72475a4fc3d90eee1b33f2e54926 (patch) | |
tree | fd0764f1dc472b3f3c9da00a5ddad2cfbdb6d77a /activity.py | |
parent | 98601575584d0775959e9e727aa342f321ce9f1e (diff) |
Use continuous measurement
Diffstat (limited to 'activity.py')
-rw-r--r-- | activity.py | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/activity.py b/activity.py index d03262e..d31f433 100644 --- a/activity.py +++ b/activity.py @@ -21,8 +21,7 @@ import time import logging import telepathy import telepathy.client - -import sugar.graphics.button +import pango from dbus import Interface from dbus.service import method, signal @@ -54,6 +53,7 @@ class AcousticMeasureActivity(Activity): """AcousticMeasure Activity as specified in activity.info""" _message_dict = {} + _button_dict = {} def __init__(self, handle): """Set up the Acoustic Tape Measure activity.""" @@ -65,26 +65,49 @@ class AcousticMeasureActivity(Activity): toolbox = ActivityToolbox(self) self.set_toolbox(toolbox) toolbox.show() + + #worker thread + self._button_event = threading.Event() + thread.start_new_thread(self._helper_thread, ()) # Main Panel GUI self.main_panel = gtk.VBox() self._message_dict['unshared'] = gettext("To measure the distance between two laptops, you must first share this Activity.") - self._message_dict['ready'] = gettext("Press this button to measure the distance to another laptop") + self._message_dict['ready'] = gettext("Press the button to measure the distance to another laptop") self._message_dict['preparing'] = gettext("Preparing to measure distance") self._message_dict['waiting'] = gettext("Ready to make a measurement. Waiting for partner to be ready.") self._message_dict['playing'] = gettext("Recording sound from each laptop.") self._message_dict['processing'] = gettext("Processing recorded audio.") self._message_dict['done'] = self._message_dict['ready'] - self.button = gtk.Button(label=self._message_dict['unshared']) + self._button_dict['waiting'] = gettext("Begin Measuring Distance") + self._button_dict['going'] = gettext("Stop Measuring Distance") + + self.button = gtk.ToggleButton(label=self._button_dict['waiting']) self.button.connect('clicked',self._button_clicked) self.button.set_sensitive(False) - self.text = gtk.Label() - self.text.set_selectable(True) + self.message = gtk.Label(self._message_dict['unshared']) + self.message.set_selectable(True) + self.message.set_single_line_mode(True) + + self.value = gtk.Label() + self.value.set_selectable(True) + self.value.set_alignment(1.0, 0.5) + self.value.set_single_line_mode(True) + + valuefont = pango.FontDescription() + valuefont.set_family("monospace") + valuefont.set_absolute_size(200*pango.SCALE) + + valuestyle = pango.AttrList() + valuestyle.insert(pango.AttrFontDesc(valuefont,0,100)) + + self.value.set_attributes(valuestyle) self.main_panel.pack_start(self.button, expand=False, padding=6) - self.main_panel.pack_start(self.text, expand=False) + self.main_panel.pack_start(self.message, expand=False) + self.main_panel.pack_start(self.value, expand=True, fill=True, padding=10) self.set_canvas(self.main_panel) self.show_all() @@ -117,20 +140,27 @@ class AcousticMeasureActivity(Activity): self._joined_cb() def _button_clicked(self, button): - self.button.set_sensitive(False) - thread.start_new_thread(self._do_sockets,()) + if button.get_active(): + self._button_event.set() + button.set_label(self._button_dict['going']) + else: + self._button_event.clear() + button.set_label(self._button_dict['waiting']) + + def _helper_thread(self): + while True: + self._button_event.wait() + self._logger.debug("initiating measurement") + dt = arange.measure_dt_seq(self.hellotube, self.initiating, self._change_message) + x = dt * arange.speed_of_sound() - arange.OLPC_OFFSET + self._update_distance(x) - def _do_sockets(self): - self._logger.debug("initiating socket_test") - dt = arange.measure_dt_seq(self.hellotube, self.initiating, self._change_button_label) - x = dt * arange.speed_of_sound() - arange.OLPC_OFFSET - mes = gettext("The distance is %(num).2f meters.\n") % {'num': x} - self._logger.debug("socket_test: " + mes) - self.text.set_label(mes + self.text.get_label()) - self.button.set_sensitive(True) + def _update_distance(self, x): + mes = "%(num).2f " % {'num': x} + self.value.set_text(mes) - def _change_button_label(self,signal): - self.button.set_label(self._message_dict[signal]) + def _change_message(self,signal): + self.message.set_text(self._message_dict[signal]) def _shared_cb(self, activity): self._logger.debug('My activity was shared') @@ -145,8 +175,6 @@ class AcousticMeasureActivity(Activity): self._shared_activity.connect('buddy-left', self._buddy_left_cb) self._logger.debug('This is my activity: making a tube...') -# id = self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube( -# telepathy.TUBE_TYPE_DBUS, SERVICE, {}) id = self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube( SERVICE, {}) @@ -199,7 +227,6 @@ class AcousticMeasureActivity(Activity): def _list_tubes_reply_cb(self, tubes): for tube_info in tubes: self._new_tube_cb(*tube_info) - def _list_tubes_error_cb(self, e): self._logger.error('ListTubes() failed: %s', e) @@ -234,7 +261,7 @@ class AcousticMeasureActivity(Activity): id, group_iface=self.text_chan[telepathy.CHANNEL_INTERFACE_GROUP]) self.hellotube = HelloTube(tube_conn, self.initiating, self._get_buddy) self.button.set_sensitive(True) - self.button.set_label(self._message_dict['ready']) + self._change_message('ready') def _buddy_joined_cb (self, activity, buddy): self._logger.debug('Buddy %s joined' % buddy.props.nick) |