[tuxdroid-svn] r864 - in software/gadgets/tux_controller/trunk: . TuxController/Scripts/Python/GUI/
Status: Beta
Brought to you by:
ks156
From: Paul_R <c2m...@c2...> - 2008-01-21 15:39:30
|
Author: Paul_R Date: 2008-01-21 16:39:30 +0100 (Mon, 21 Jan 2008) New Revision: 864 Modified: software/gadgets/tux_controller/trunk/TuxController.tgf software/gadgets/tux_controller/trunk/TuxController/Scripts/Python/GUI/widget/other.pyp Log: * Major review of this gadget : - Cleaned the code (removed not used functions, reorganized the functions, etc). - Improved the eyes - mouth - flippers - spinning 's functions to fix some bugs with the graphics (especially with the run / stop buttons's icons) Modified: software/gadgets/tux_controller/trunk/TuxController/Scripts/Python/GUI/widget/other.pyp =================================================================== --- software/gadgets/tux_controller/trunk/TuxController/Scripts/Python/GUI/widget/other.pyp 2008-01-21 15:37:48 UTC (rev 863) +++ software/gadgets/tux_controller/trunk/TuxController/Scripts/Python/GUI/widget/other.pyp 2008-01-21 15:39:30 UTC (rev 864) @@ -3,10 +3,9 @@ import voice_cb except: print sys.exc_info() - + __led_toggled_by_event = False - class Window(SimpleGladeApp): def __init__(self, @@ -44,291 +43,12 @@ [['none', 'Show', 'Panel'], self.show_tab, ()], ] _me.voice_recognition.set_rules(rules) - - def update(self): - self.__eyes_active = False - self.__eyes_stop = False - self.__eyes_infinite = False - self.__mouth_active = False - self.__mouth_stop = False - self.__mouth_infinite = False - self.__wings_active = False - self.__wings_stop = False - self.__wings_infinite = False - self.__spin_active = False - self.__spin_stop = False - self.__spin_infinite = False - - _me.set_var('pitch', _me.get_param('pitch')) - _me.set_var('speaker', _me.get_param('speaker')) - - self.cb_voice = voice_cb.VoiceComboBoxAdd(tux, self.get_widget("comboboxentry1")) - self.cb_voice.set_spk(_me.get_var('speaker')) - self.get_widget('spinPitch').set_value(_me.get_param('pitch')) - self.cb_voice.update() - self.cb_voice.set_spk(_me.get_param('speaker')) - - self.update_labels() - self.update_pix() - - tux.cmd.raw(0x31, 0, 0, 0) - self.update_status() - - self.binding() - tux.sys.wait(1) - - - - def on_window1_destroy(self, widget, *args): - _me.get_funct('on_standby')() - - def binding(self): - ''' - This function 'connect' some Tux's events with local functions. - See the tux.event help for more informations. - - The light, battery and audio monitoring are also initialized here. - ''' - ### Correct the leds inversion on the next daemon - tux.event.on_left_blue_led_on = self.on_left_led_on - tux.event.on_left_blue_led_off = self.on_left_led_off - tux.event.on_right_blue_led_on = self.on_right_led_on - tux.event.on_right_blue_led_off = self.on_right_led_off - tux.event.on_eyes_open = self.on_eyes_open - tux.event.on_eyes_close = self.on_eyes_close - tux.event.on_mouth_open = self.on_mouth_open - tux.event.on_mouth_close = self.on_mouth_close - tux.event.on_spin_stop = self.on_spin_stop - - tux.event.on_remote_bt[K_UP] = self.on_key_up #eyes - tux.event.on_remote_bt[K_DOWN] = self.on_key_down #wings - tux.event.on_remote_bt[K_OK] = self.on_key_ok #mouth - tux.event.on_remote_bt[K_LEFT] = self.on_key_left #spin right - tux.event.on_remote_bt[K_RIGHT] = self.on_key_right #spin left - tux.event.on_remote_bt[K_RED] = self.on_key_red #Run eyes - tux.event.on_remote_bt[K_GREEN] = self.on_key_green #Run mouth - tux.event.on_remote_bt[K_BLUE] = self.on_key_blue #Run wings - tux.event.on_remote_bt[K_YELLOW] = self.on_key_yellow #Run spinning - tux.event.on_remote_bt[K_STOP] = self.StopAll - - - - battery_idx = tux.monitoring.insert(0x25, self.on_battery_level) - - light_idx = tux.monitoring.insert(0x1B, self.on_light_level) - - tux.micro.on() - sound_idx = tux.monitoring.insert(0xF0, self.on_microphone_energy) - tux.sys.wait(0.1) - _me.set_param('batt', battery_idx) - _me.set_param('light', light_idx) - _me.set_param('sound', sound_idx) - - - def update_status(self): - ''' - This function update the status when the gadget is starting. - ''' - global __toggled_by_event - __led_toggled_by_event = True - if tux.status.lled(): - self.get_widget('chkLEDLeft').set_active(True) - else: - self.get_widget('chkLEDLeft').set_active(False) - - if tux.status.rled(): - self.get_widget('chkLEDRight').set_active(True) - else: - self.get_widget('chkLEDRight').set_active(False) - - __led_toggled_by_event = False - - def update_pix(self): - self.path = _me.get_path('pictures')+'/Icons/' - self.get_widget('chkShow').set_active(True) - self.get_widget('chkShow').set_label(_me.string('chkShow')) - - self.get_widget('imgLight').set_from_file(self.path+'light.png') - self.get_widget('imgBattery').set_from_file(self.path+'battery.png') - self.get_widget('imgSound').set_from_file(self.path+'microphone.png') - - self.led_on = gtk.gdk.pixbuf_new_from_file(self.path+'led_on.png') - self.led_off = gtk.gdk.pixbuf_new_from_file(self.path+'led_off.png') - self.eyes_close = gtk.gdk.pixbuf_new_from_file(self.path+'eye_closed.png') - self.wings_down = gtk.gdk.pixbuf_new_from_file(self.path+'wings_down.png') - self.wings_up = gtk.gdk.pixbuf_new_from_file(self.path+'wings_up.png') - self.spin_left = gtk.gdk.pixbuf_new_from_file(self.path+'spin_left.png') - self.spin_right = gtk.gdk.pixbuf_new_from_file(self.path+'spin_right.png') - self.spin_off = gtk.gdk.pixbuf_new_from_file(self.path+'spin_off.png') - self.spin_transfo = gtk.gdk.pixbuf_new_from_file(self.path+'spin_off_charging.png') - self.beak_open = gtk.gdk.pixbuf_new_from_file(self.path+'beak_open.png') - self.beak_closed = gtk.gdk.pixbuf_new_from_file(self.path+'beak_closed.png') - self.up = gtk.gdk.pixbuf_new_from_file(self.path+'up.png') - self.down = gtk.gdk.pixbuf_new_from_file(self.path+'down.png') - self.right = gtk.gdk.pixbuf_new_from_file(self.path+'right.png') - self.left = gtk.gdk.pixbuf_new_from_file(self.path+'left.png') - self.run = gtk.gdk.pixbuf_new_from_file(self.path+'run.png') - self.stop = gtk.gdk.pixbuf_new_from_file(self.path+'gear-off.png') - - self.get_widget('imgLEDRun').set_from_pixbuf(self.run) - - self.get_widget('imgEyesOpen').set_from_pixbuf(self.up) - self.get_widget('imgEyesClose').set_from_pixbuf(self.down) - self.get_widget('imgEyesRun').set_from_pixbuf(self.run) - - self.get_widget('imgMouthClose').set_from_pixbuf(self.up) - self.get_widget('imgMouthOpen').set_from_pixbuf(self.down) - self.get_widget('imgMouthRun').set_from_pixbuf(self.run) - - self.get_widget('imgWingsUp').set_from_pixbuf(self.up) - self.get_widget('imgWingsDown').set_from_pixbuf(self.down) - self.get_widget('imgWingsRun').set_from_pixbuf(self.run) - - self.get_widget('imgSpinLeft').set_from_pixbuf(self.left) - self.get_widget('imgSpinRight').set_from_pixbuf(self.right) - self.get_widget('imgSpinRun').set_from_pixbuf(self.run) - - self.get_widget('imgStopAll').set_from_pixbuf(self.stop) - self.show_tab() - - if tux.status.rled(): - self.get_widget('imgLed').set_from_pixbuf(self.led_on) - else: - self.get_widget('imgLed').set_from_pixbuf(self.led_off) - - if tux.status.eyes_closed() == 0: - self.get_widget('imgLed').set_from_pixbuf(self.eyes_close) - - if tux.status.mouth_closed() == 0: - self.get_widget('imgMouth').set_from_pixbuf(self.beak_closed) - else: - self.get_widget('imgMouth').set_from_pixbuf(self.beak_open) - - self.get_widget('imgWings').set_from_pixbuf(self.wings_down) - - self.get_widget('imgSpin').set_from_pixbuf(self.spin_off) - - def create_tooltips(self): - self.get_widget('imgLEDRun').set_tooltip_text(_me.string('toolLEDRun')) - self.get_widget('slideLED').set_tooltip_text(_me.string('toolLEDslide')) - self.get_widget('spinLED').set_tooltip_text(_me.string('toolLEDspin')) - - self.get_widget('imgEyesRun').set_tooltip_text(_me.string('toolEyesRun')) - self.get_widget('spinEyes').set_tooltip_text(_me.string('toolMove')) - - self.get_widget('imgMouthRun').set_tooltip_text(_me.string('toolMouthRun')) - self.get_widget('spinMouth').set_tooltip_text(_me.string('toolMove')) - - self.get_widget('imgWingsRun').set_tooltip_text(_me.string('toolWingsRun')) - self.get_widget('spinWings').set_tooltip_text(_me.string('toolMove')) - self.get_widget('slideWings').set_tooltip_text(_me.string('toolPWM')) - - self.get_widget('imgSpinRun').set_tooltip_text(_me.string('toolSpinRun')) - self.get_widget('spinSpin').set_tooltip_text(_me.string('toolMove')) - self.get_widget('slideSpin').set_tooltip_text(_me.string('toolPWM')) - self.get_widget('radSpinDirLeft').set_tooltip_text(_me.string('toolSpinDir')) - self.get_widget('radSpinDirRight').set_tooltip_text(_me.string('toolSpinDir')) - - self.get_widget('imgStopAll').set_tooltip_text(_me.string('toolStopAll')) - - self.get_widget('chkShow').set_tooltip_text(_me.string('toolAdvanced')) - - self.get_widget('chkLEDRight').set_tooltip_text(_me.string('toolLEDRight')) - self.get_widget('chkLEDLeft').set_tooltip_text(_me.string('toolLEDLeft')) - - self.get_widget('btnEyesOpen').set_tooltip_text(_me.string('toolEyesOpen')) - self.get_widget('btnEyesClose').set_tooltip_text(_me.string('toolEyesClose')) - - self.get_widget('btnMouthOpen').set_tooltip_text(_me.string('toolMouthOpen')) - self.get_widget('btnMouthClose').set_tooltip_text(_me.string('toolMouthClose')) - - self.get_widget('btnWingsUp').set_tooltip_text(_me.string('toolWingsUp')) - self.get_widget('btnWingsDown').set_tooltip_text(_me.string('toolWingsDown')) - - self.get_widget('btnSpinRight').set_tooltip_text(_me.string('toolSpinRight')) - self.get_widget('btnSpinLeft').set_tooltip_text(_me.string('toolSpinLeft')) - - self.get_widget('imgLight').set_tooltip_text(_me.string('toolLight')) - self.get_widget('imgBattery').set_tooltip_text(_me.string('toolBattery')) - self.get_widget('imgSound').set_tooltip_text(_me.string('toolSound')) - - self.get_widget('comboboxentry1').set_tooltip_text(_me.string('toolLang')) - self.get_widget('spinPitch').set_tooltip_text(_me.string('toolPitch')) - - self.get_widget('btnTTS').set_tooltip_text(_me.string('toolTTS')) - self.get_widget('btnTTSClear').set_tooltip_text(_me.string('toolTTSClear')) - self.get_widget('scrolledwindow1').set_tooltip_text(_me.string('toolTTSText')) - - - def hide_tab(self): - self.get_widget('fix1').hide() - self.get_widget('fix1').set_size_request(2,0) - self.get_widget('fix2').hide() - self.get_widget('fix2').set_size_request(2,0) - self.get_widget('fix3').hide() - self.get_widget('fix3').set_size_request(2,0) - self.get_widget('fix4').hide() - self.get_widget('fix4').set_size_request(2,0) - self.get_widget('fix5').hide() - self.get_widget('fix5').set_size_request(2,0) - self.get_widget('fix6').hide() - self.get_widget('fix6').set_size_request(2,0) - self.get_widget('fix7').hide() - self.get_widget('fix7').set_size_request(2,0) - - def show_tab(self): - self.get_widget('fix1').show() - self.get_widget('fix1').set_size_request(330,0) - self.get_widget('fix2').show() - self.get_widget('fix2').set_size_request(330,0) - self.get_widget('fix3').show() - self.get_widget('fix3').set_size_request(330,0) - self.get_widget('fix4').show() - self.get_widget('fix4').set_size_request(330,0) - self.get_widget('fix5').show() - self.get_widget('fix5').set_size_request(330,0) - self.get_widget('fix6').show() - self.get_widget('fix6').set_size_request(330,0) - self.get_widget('fix7').show() - self.get_widget('fix7').set_size_request(330,0) - - - - def update_labels(self): - ## Update the radio button labels - self.get_widget('btnTTS').set_label(_me.string('TTS')) - self.get_widget('btnTTSClear').set_label(_me.string('TTSClear')) - self.get_widget('lblTTS').set_label(_me.string('lblTTS')) - - self.get_widget('lblStop').set_label(_me.string('lblStop')) - - self.get_widget('lblLED').set_label(_me.string('lblLED')) - self.get_widget('lblEyes').set_label(_me.string('lblEyes')) - self.get_widget('lblMouth').set_label(_me.string('lblMouth')) - self.get_widget('lblWings').set_label(_me.string('lblWings')) - self.get_widget('lblSpin').set_label(_me.string('lblSpin')) - self.get_widget('lblConf').set_label(_me.string('lblConf')) - self.get_widget('lblTTSConf').set_label(_me.string('lblTTSConf')) - self.get_widget('lblPitch').set_label(_me.string('lblPitch')) - - self.get_widget('lblFrequency').set_label(_me.string('lblFrequency')) - self.get_widget('lblWingsPWM').set_label(_me.string('lblPWM')) - self.get_widget('lblSpinPWM').set_label(_me.string('lblPWM')) - - self.get_widget('radSpinDirLeft').set_label(_me.string('radSpinDirLeft')) - self.get_widget('radSpinDirRight').set_label(_me.string('radSpinDirRight')) - - - -#################################################################### +############################################################################### # -# Widget items events +# TTS part # -# This section contains all the functions connected to the widgets -# signals. -# -#################################################################### +############################################################################### def set_spk(self, speaker): self.cb_voice.set_spk(speaker) @@ -339,7 +59,6 @@ _me.set_param('pitch', self.get_widget('spinPitch').get_value()) _me.set_var('speaker', spk_id) _me.set_var('pitch', self.get_widget('spinPitch').get_value()) - def on_spinPitch_changed(self, widget, *args): @@ -350,7 +69,26 @@ _me.set_var('speaker', spk_id) _me.set_var('pitch', self.get_widget('spinPitch').get_value()) - + def on_btnTTS_clicked(self, widget, *args): + textedit=self.get_widget('txtTTS') + buffer=textedit.get_buffer() + my_text=buffer.get_text(*buffer.get_bounds()) + tux.tts.speak_free(my_text) + + def on_btnTTSClear_clicked(self, widget, *args): + textedit=self.get_widget('txtTTS') + buffer=textedit.get_buffer() + buffer.set_text("") + + +############################################################################### +# +# Widget items events +# +# This section contains all the functions connected to the widgets +# signals. +# +############################################################################### def StopAll(self): thread.start_new_thread(self.__stop_all, ()) @@ -394,13 +132,18 @@ thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_off)) tux.cmd.spinl_off() tux.cmd.spinr_off() - - - + def on_btnStopAll_clicked(self, widget, *args): thread.start_new_thread(self.__stop_all, ()) -## btnLEDrun + def refresh_picture(self, widget, picture): + self.get_widget(widget).set_from_pixbuf(picture) + +############################################################################### +# +# LEDs part +# +############################################################################### def on_btnLEDRun_clicked(self, widget, *args): freq = self.get_widget('slideLED').get_value() freq = 256 - freq @@ -408,52 +151,149 @@ value = value * 2 tux.cmd.leds_blink(int(value), int(freq)) - - def on_btnEyesOpen_released(self, widget, *args): + def on_chkLEDRight_toggled(self, widget, *args): + ''' + When the check box is toggled, the LED will be switched off/on. + This trig a LED event, which will toggle the checkbox, which + will trig a LED event, etc ... + + To prevent this bug, a global flag is used to indicate that the + LED has been toggled by an event, and not by the user. + ''' + global __led_toggled_by_event + if __led_toggled_by_event: + return + if widget.get_active(): + tux.cmd.ledr_on() + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) + else: + tux.cmd.ledr_off() + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) + +## chkLEDLeft + def on_chkLEDLeft_toggled(self, widget, *args): + global __led_toggled_by_event + if __led_toggled_by_event: + return + + if widget.get_active(): + tux.cmd.ledl_on() + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) + else: + tux.cmd.ledl_off() + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) + + def on_right_led_on(self): + global __led_toggled_by_event + __led_toggled_by_event = True + self.get_widget('chkLEDLeft').set_active(True) thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) + + __led_toggled_by_event = False + + def on_right_led_off(self): + global __led_toggled_by_event + __led_toggled_by_event = True + self.get_widget('chkLEDLeft').set_active(False) + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) + + __led_toggled_by_event = False + + def on_left_led_on(self): + global __led_toggled_by_event + __led_toggled_by_event = True + self.get_widget('chkLEDRight').set_active(True) + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) + + __led_toggled_by_event = False + + def on_left_led_off(self): + global __led_toggled_by_event + __led_toggled_by_event = True + self.get_widget('chkLEDRight').set_active(False) + thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) + + __led_toggled_by_event = False + + +############################################################################### +# +# Eyes part +# +############################################################################### + def on_btnEyesOpen_released(self, widget, *args): + #thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) + if self.__eyes_active: + tux.cmd.eyes_off() + tux.sys.wait(0.2) self.__mouth_active = False + self.__eyes_active = False if tux.status.eyes_opened(): - thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.run)) - tux.cmd.eyes_open() + tux.cmd.eyes_open() def on_btnEyesClose_released(self, widget, *args): + if self.__eyes_active: + tux.cmd.eyes_off() + tux.sys.wait(0.2) self.__mouth_active = False + self.__eyes_active = False if tux.status.eyes_closed(): - thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.run)) - tux.cmd.eyes_close() + tux.cmd.eyes_close() def on_btnEyesRun_clicked(self, widget, *args): if self.__mouth_active: - tux.cmd.mouth_off() + tux.cmd.mouth_on(1) self.__mouth_active = False - self.__mouth_stop = True - self.__mouth_infinite = False - thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.run)) + thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.run)) if self.__eyes_active == False: self.__eyes_active = True thread.start_new_thread(self.refresh_picture, ('imgEyesRun', self.stop)) value = self.get_widget('spinEyes').get_value() value = value * 2 - if value == 0: - self.__eyes_infinite = True tux.cmd.eyes_on_free(int(value)) - tux.sys.looped_function(self.__update_eyes_buttons, 0.2) + if value != 0: + thread.start_new_thread(self.eyes_run, ()) else: tux.cmd.eyes_on(1) self.__eyes_active = False - self.__eyes_stop = True - self.__eyes_infinite = False thread.start_new_thread(self.refresh_picture, ('imgEyesRun', self.run)) + + def eyes_run(self): + tux.sys.wait(0.5) + while tux.status.eyes_counter() != 0 and self.__eyes_active: + tux.sys.wait(0.5) + self.get_widget('imgEyesRun').set_from_pixbuf(self.run) + self.__eyes_active = False + def on_eyes_close(self): + thread.start_new_thread(self.refresh_picture, ('imgLed', self.eyes_close)) + + def on_eyes_open(self): + tux.status.lled() + tux.status.rled() + +############################################################################### +# +# Mouth part +# +############################################################################### def on_btnMouthClose_released(self, widget, *args): + if self.__mouth_active: + tux.cmd.mouth_off() + tux.sys.wait(0.2) + self.__mouth_active = False self.__eyes_active = False if tux.status.mouth_closed(): thread.start_new_thread(self.refresh_picture, ('imgEyesRun', self.run)) tux.cmd.mouth_close() def on_btnMouthOpen_released(self, widget, *args): + if self.__mouth_active: + tux.cmd.mouth_off() + tux.sys.wait(0.2) + self.__mouth_active = False self.__eyes_active = False if tux.status.mouth_opened(): thread.start_new_thread(self.refresh_picture, ('imgEyesRun', self.run)) @@ -461,10 +301,8 @@ def on_btnMouthRun_clicked(self, widget, *args): if self.__eyes_active: - tux.cmd.eyes_off() + tux.cmd.eyes_on(1) self.__eyes_active = False - self.__eyes_stop = True - self.__eyes_infinite = False thread.start_new_thread(self.refresh_picture, ('imgEyesRun', self.run)) if self.__mouth_active == False: @@ -472,47 +310,83 @@ thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.stop)) value = self.get_widget('spinMouth').get_value() value = value * 2 - if value == 0: - self.__mouth_infinite = True tux.cmd.mouth_on_free(int(value)) - tux.sys.looped_function(self.__update_mouth_buttons, 0.2) + if value != 0: + thread.start_new_thread(self.mouth_run, ()) else: tux.cmd.mouth_on(1) self.__mouth_active = False - self.__mouth_stop = True - self.__mouth_infinite = False thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.run)) + + def mouth_run(self): + tux.sys.wait(0.5) + while tux.status.mouth_counter() != 0 and self.__mouth_active: + tux.sys.wait(0.5) + + self.get_widget('imgMouthRun').set_from_pixbuf(self.run) + self.__mouth_active = False + + def on_mouth_open(self): + thread.start_new_thread(self.refresh_picture, ('imgMouth', self.beak_open)) + + def on_mouth_close(self): + thread.start_new_thread(self.refresh_picture, ('imgMouth', self.beak_closed)) + +############################################################################### +# +# Wings part +# +############################################################################### def on_btnWingsUp_released(self, widget, *args): + if self.__wings_active: + tux.cmd.wings_off() + tux.sys.wait(0.3) + self.__wings_active = False thread.start_new_thread(self.refresh_picture, ('imgWings', self.wings_up)) + thread.start_new_thread(self.refresh_picture, ('imgWingsRun', self.run)) tux.cmd.raw(0x39, 0, 0, 0) def on_btnWingsDown_released(self, widget, *args): + if self.__wings_active: + tux.cmd.wings_off() + tux.sys.wait(0.3) + self.__wings_active = False thread.start_new_thread(self.refresh_picture, ('imgWings', self.wings_down)) + thread.start_new_thread(self.refresh_picture, ('imgWingsRun', self.run)) tux.cmd.raw(0x3A, 0, 0, 0) def on_btnWingsRun_clicked(self, widget, *args): - if self.__wings_active == False: + if self.__wings_active == False:p self.__wings_active = True thread.start_new_thread(self.refresh_picture, ('imgWingsRun', self.stop)) value = self.get_widget('spinWings').get_value() value = value * 2 - if value == 0: - self.__wings_infinite = True freq = self.get_widget('slideWings').get_value() tux.cmd.wings_on_free(int(value), int(freq)) - tux.sys.looped_function(self.__update_wings_buttons, 0.2) + if value != 0: + thread.start_new_thread(self.wings_run, ()) else: tux.cmd.wings_on(1) self.__wings_active = False - self.__wings_stop = True - self.__wings_infinite = False thread.start_new_thread(self.refresh_picture, ('imgWingsRun', self.run)) - #tux.sys.wait(0.2) thread.start_new_thread(self.refresh_picture, ('imgWings', self.wings_down)) tux.cmd.raw(0x3A, 0, 0, 0) + + def wings_run(self): + tux.sys.wait(0.5) + while tux.status.wings_counter() != 0 and self.__wings_active: + tux.sys.wait(0.5) - + self.get_widget('imgWingsRun').set_from_pixbuf(self.run) + self.__wings_active = False + + +############################################################################### +# +# Spinning part +# +############################################################################### def on_btnSpinLeft_pressed(self, widget, *args): if tux.status.power_plug(): thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_transfo)) @@ -539,15 +413,11 @@ if tux.status.power_plug(): thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_transfo)) thread.start_new_thread(self.__wait2, ()) - return + if self.__spin_active == False: self.__spin_active = True - value = self.get_widget('spinSpin').get_value() - if value == 0: - self.__spin_infite = True - freq = self.get_widget('slideSpin').get_value() if self.get_widget('radSpinDirLeft').get_active(): tux.cmd.spinl_on_free(int(value), int(freq)) @@ -562,121 +432,24 @@ tux.cmd.spinl_off() tux.cmd.spinr_off() self.__spin_active = False - self.__spin_stop = True - self.__spin_infinite = False thread.start_new_thread(self.refresh_picture, ('imgSpinRun', self.run)) + thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_off)) - -## chkLEDRight - def on_chkLEDRight_toggled(self, widget, *args): - ''' - When the check box is toggled, the LED will be switched off/on. - This trig a LED event, which will toggle the checkbox, which - will trig a LED event, etc ... - - To prevent this bug, a global flag is used to indicate that the - LED has been toggled by an event, and not by the user. - ''' - global __led_toggled_by_event - if __led_toggled_by_event: - return - if widget.get_active(): - tux.cmd.ledr_on() - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) - else: - tux.cmd.ledr_off() - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) - -## chkLEDLeft - def on_chkLEDLeft_toggled(self, widget, *args): - global __led_toggled_by_event - if __led_toggled_by_event: - return - - if widget.get_active(): - tux.cmd.ledl_on() - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) - else: - tux.cmd.ledl_off() - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) - - - def on_btnTTS_clicked(self, widget, *args): - textedit=self.get_widget('txtTTS') - buffer=textedit.get_buffer() - my_text=buffer.get_text(*buffer.get_bounds()) - tux.tts.speak_free(my_text) - - def on_btnTTSClear_clicked(self, widget, *args): - textedit=self.get_widget('txtTTS') - buffer=textedit.get_buffer() - buffer.set_text("") - - -#################################################################### -# -# Tux events functions -# -# These functions are trigged when an Tux event occurs. -# All of these functions are declared in the 'binding' function. -# -#################################################################### - def on_right_led_on(self): - global __led_toggled_by_event - __led_toggled_by_event = True - self.get_widget('chkLEDLeft').set_active(True) - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) - - __led_toggled_by_event = False - - def on_right_led_off(self): - global __led_toggled_by_event - __led_toggled_by_event = True - self.get_widget('chkLEDLeft').set_active(False) - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) - - __led_toggled_by_event = False - - def on_left_led_on(self): - global __led_toggled_by_event - __led_toggled_by_event = True - self.get_widget('chkLEDRight').set_active(True) - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_on)) - - __led_toggled_by_event = False - - def on_left_led_off(self): - global __led_toggled_by_event - __led_toggled_by_event = True - self.get_widget('chkLEDRight').set_active(False) - thread.start_new_thread(self.refresh_picture, ('imgLed', self.led_off)) - - __led_toggled_by_event = False - - def on_eyes_close(self): - thread.start_new_thread(self.refresh_picture, ('imgLed', self.eyes_close)) - - def on_eyes_open(self): - tux.status.lled() - tux.status.rled() - - def on_mouth_open(self): - thread.start_new_thread(self.refresh_picture, ('imgMouth', self.beak_open)) - - def on_mouth_close(self): - thread.start_new_thread(self.refresh_picture, ('imgMouth', self.beak_closed)) - def on_spin_stop(self): thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_off)) self.__spin_active = False thread.start_new_thread(self.refresh_picture, ('imgSpinRun', self.run)) - - def refresh_picture(self, widget, picture): - self.get_widget(widget).set_from_pixbuf(picture) -#-------------------------------- -# Remote events -#-------------------------------- + def __wait2(self): + tux.sys.wait(2) + thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_off)) + + +############################################################################### +# +# Remote control events +# +############################################################################### def on_key_up(self): tux.cmd.eyes_on(2) @@ -713,7 +486,13 @@ def on_key_yellow(self): self.on_btnSpinRun_clicked(None) - + + +############################################################################### +# +# Monitoring functions +# +############################################################################### def on_light_level(self, args): level = args[0]*256 + args[1] level = level / 1124.0 * 100.0 @@ -743,57 +522,273 @@ self.get_widget('lblSound').set_text('%.1f%s'%(val*100, '%')) self.get_widget('SoundLevel').set_fraction(val) - - def __update_eyes_buttons(self): - if _me.get_param('generalStop'): - return False - tux.sys.wait(0.4) - if self.__eyes_stop: - self.__eyes_stop = False - return False + +############################################################################### +# +# General GUI functions +# +############################################################################### + def update(self): + self.__eyes_active = False + self.__mouth_active = False + self.__wings_active = False + self.__spin_active = False + self.__spin_right = False + self.__spin_left = False + + _me.set_var('pitch', _me.get_param('pitch')) + _me.set_var('speaker', _me.get_param('speaker')) + + self.cb_voice = voice_cb.VoiceComboBoxAdd(tux, self.get_widget("comboboxentry1")) + self.cb_voice.set_spk(_me.get_var('speaker')) + self.get_widget('spinPitch').set_value(_me.get_param('pitch')) + + self.cb_voice.update() + self.cb_voice.set_spk(_me.get_param('speaker')) + + self.update_labels() + self.update_pix() + + tux.cmd.raw(0x31, 0, 0, 0) + self.update_status() + + self.binding() + tux.sys.wait(1) + + + + def on_window1_destroy(self, widget, *args): + _me.get_funct('on_standby')() + + def binding(self): + ''' + This function 'connect' some Tux's events with local functions. + See the tux.event help for more informations. + + The light, battery and audio monitoring are also initialized here. + ''' + ### Correct the leds inversion on the next daemon + tux.event.on_left_blue_led_on = self.on_left_led_on + tux.event.on_left_blue_led_off = self.on_left_led_off + tux.event.on_right_blue_led_on = self.on_right_led_on + tux.event.on_right_blue_led_off = self.on_right_led_off + tux.event.on_eyes_open = self.on_eyes_open + tux.event.on_eyes_close = self.on_eyes_close + tux.event.on_mouth_open = self.on_mouth_open + tux.event.on_mouth_close = self.on_mouth_close + tux.event.on_spin_stop = self.on_spin_stop + + tux.event.on_remote_bt[K_UP] = self.on_key_up #eyes + tux.event.on_remote_bt[K_DOWN] = self.on_key_down #wings + tux.event.on_remote_bt[K_OK] = self.on_key_ok #mouth + tux.event.on_remote_bt[K_LEFT] = self.on_key_left #spin right + tux.event.on_remote_bt[K_RIGHT] = self.on_key_right #spin left + tux.event.on_remote_bt[K_RED] = self.on_key_red #Run eyes + tux.event.on_remote_bt[K_GREEN] = self.on_key_green #Run mouth + tux.event.on_remote_bt[K_BLUE] = self.on_key_blue #Run wings + tux.event.on_remote_bt[K_YELLOW] = self.on_key_yellow #Run spinning + tux.event.on_remote_bt[K_STOP] = self.StopAll + + battery_idx = tux.monitoring.insert(0x25, self.on_battery_level) + + light_idx = tux.monitoring.insert(0x1B, self.on_light_level) + + tux.micro.on() + sound_idx = tux.monitoring.insert(0xF0, self.on_microphone_energy) + tux.sys.wait(0.1) + _me.set_param('batt', battery_idx) + _me.set_param('light', light_idx) + _me.set_param('sound', sound_idx) + + + def update_status(self): + ''' + This function update the status when the gadget is starting. + ''' + global __toggled_by_event + __led_toggled_by_event = True + if tux.status.lled(): + self.get_widget('chkLEDLeft').set_active(True) + else: + self.get_widget('chkLEDLeft').set_active(False) - if tux.status.eyes_counter() == 0 and self.__eyes_active == True and self.__eyes_infinite == False: - self.__eyes_active = False - thread.start_new_thread(self.refresh_picture, ('imgEyesRun', self.run)) - return False + if tux.status.rled(): + self.get_widget('chkLEDRight').set_active(True) + else: + self.get_widget('chkLEDRight').set_active(False) - return True + __led_toggled_by_event = False + + def update_pix(self): + self.path = _me.get_path('pictures')+'/Icons/' + self.get_widget('chkShow').set_active(True) + self.get_widget('chkShow').set_label(_me.string('chkShow')) + self.get_widget('imgLight').set_from_file(self.path+'light.png') + self.get_widget('imgBattery').set_from_file(self.path+'battery.png') + self.get_widget('imgSound').set_from_file(self.path+'microphone.png') - def __update_mouth_buttons(self): - if _me.get_param('generalStop'): - return False - - tux.sys.wait(0.4) + self.led_on = gtk.gdk.pixbuf_new_from_file(self.path+'led_on.png') + self.led_off = gtk.gdk.pixbuf_new_from_file(self.path+'led_off.png') + self.eyes_close = gtk.gdk.pixbuf_new_from_file(self.path+'eye_closed.png') + self.wings_down = gtk.gdk.pixbuf_new_from_file(self.path+'wings_down.png') + self.wings_up = gtk.gdk.pixbuf_new_from_file(self.path+'wings_up.png') + self.spin_left = gtk.gdk.pixbuf_new_from_file(self.path+'spin_left.png') + self.spin_right = gtk.gdk.pixbuf_new_from_file(self.path+'spin_right.png') + self.spin_off = gtk.gdk.pixbuf_new_from_file(self.path+'spin_off.png') + self.spin_transfo = gtk.gdk.pixbuf_new_from_file(self.path+'spin_off_charging.png') + self.beak_open = gtk.gdk.pixbuf_new_from_file(self.path+'beak_open.png') + self.beak_closed = gtk.gdk.pixbuf_new_from_file(self.path+'beak_closed.png') + self.up = gtk.gdk.pixbuf_new_from_file(self.path+'up.png') + self.down = gtk.gdk.pixbuf_new_from_file(self.path+'down.png') + self.right = gtk.gdk.pixbuf_new_from_file(self.path+'right.png') + self.left = gtk.gdk.pixbuf_new_from_file(self.path+'left.png') + self.run = gtk.gdk.pixbuf_new_from_file(self.path+'run.png') + self.stop = gtk.gdk.pixbuf_new_from_file(self.path+'gear-off.png') - if self.__mouth_stop: - self.__mouth_stop = False - return False + self.get_widget('imgLEDRun').set_from_pixbuf(self.run) + + self.get_widget('imgEyesOpen').set_from_pixbuf(self.up) + self.get_widget('imgEyesClose').set_from_pixbuf(self.down) + self.get_widget('imgEyesRun').set_from_pixbuf(self.run) + + self.get_widget('imgMouthClose').set_from_pixbuf(self.up) + self.get_widget('imgMouthOpen').set_from_pixbuf(self.down) + self.get_widget('imgMouthRun').set_from_pixbuf(self.run) + + self.get_widget('imgWingsUp').set_from_pixbuf(self.up) + self.get_widget('imgWingsDown').set_from_pixbuf(self.down) + self.get_widget('imgWingsRun').set_from_pixbuf(self.run) + + self.get_widget('imgSpinLeft').set_from_pixbuf(self.left) + self.get_widget('imgSpinRight').set_from_pixbuf(self.right) + self.get_widget('imgSpinRun').set_from_pixbuf(self.run) + + self.get_widget('imgStopAll').set_from_pixbuf(self.stop) + self.show_tab() + + if tux.status.rled(): + self.get_widget('imgLed').set_from_pixbuf(self.led_on) + else: + self.get_widget('imgLed').set_from_pixbuf(self.led_off) - if tux.status.mouth_counter() == 0 and self.__mouth_active == True and self.__mouth_infinite == False: - self.__mouth_active = False - thread.start_new_thread(self.refresh_picture, ('imgMouthRun', self.run)) - return False + if tux.status.eyes_closed() == 0: + self.get_widget('imgLed').set_from_pixbuf(self.eyes_close) - return True + if tux.status.mouth_closed() == 0: + self.get_widget('imgMouth').set_from_pixbuf(self.beak_closed) + else: + self.get_widget('imgMouth').set_from_pixbuf(self.beak_open) + self.get_widget('imgWings').set_from_pixbuf(self.wings_down) + + self.get_widget('imgSpin').set_from_pixbuf(self.spin_off) - def __update_wings_buttons(self): - if _me.get_param('generalStop'): - return False - tux.sys.wait(0.4) - if self.__wings_stop: - self.__wings_stop = False - return False + def create_tooltips(self): + self.get_widget('imgLEDRun').set_tooltip_text(_me.string('toolLEDRun')) + self.get_widget('slideLED').set_tooltip_text(_me.string('toolLEDslide')) + self.get_widget('spinLED').set_tooltip_text(_me.string('toolLEDspin')) + + self.get_widget('imgEyesRun').set_tooltip_text(_me.string('toolEyesRun')) + self.get_widget('spinEyes').set_tooltip_text(_me.string('toolMove')) + + self.get_widget('imgMouthRun').set_tooltip_text(_me.string('toolMouthRun')) + self.get_widget('spinMouth').set_tooltip_text(_me.string('toolMove')) + + self.get_widget('imgWingsRun').set_tooltip_text(_me.string('toolWingsRun')) + self.get_widget('spinWings').set_tooltip_text(_me.string('toolMove')) + self.get_widget('slideWings').set_tooltip_text(_me.string('toolPWM')) + + self.get_widget('imgSpinRun').set_tooltip_text(_me.string('toolSpinRun')) + self.get_widget('spinSpin').set_tooltip_text(_me.string('toolMove')) + self.get_widget('slideSpin').set_tooltip_text(_me.string('toolPWM')) + self.get_widget('radSpinDirLeft').set_tooltip_text(_me.string('toolSpinDir')) + self.get_widget('radSpinDirRight').set_tooltip_text(_me.string('toolSpinDir')) + + self.get_widget('imgStopAll').set_tooltip_text(_me.string('toolStopAll')) + + self.get_widget('chkShow').set_tooltip_text(_me.string('toolAdvanced')) + + self.get_widget('chkLEDRight').set_tooltip_text(_me.string('toolLEDRight')) + self.get_widget('chkLEDLeft').set_tooltip_text(_me.string('toolLEDLeft')) + + self.get_widget('btnEyesOpen').set_tooltip_text(_me.string('toolEyesOpen')) + self.get_widget('btnEyesClose').set_tooltip_text(_me.string('toolEyesClose')) + + self.get_widget('btnMouthOpen').set_tooltip_text(_me.string('toolMouthOpen')) + self.get_widget('btnMouthClose').set_tooltip_text(_me.string('toolMouthClose')) + + self.get_widget('btnWingsUp').set_tooltip_text(_me.string('toolWingsUp')) + self.get_widget('btnWingsDown').set_tooltip_text(_me.string('toolWingsDown')) + + self.get_widget('btnSpinRight').set_tooltip_text(_me.string('toolSpinRight')) + self.get_widget('btnSpinLeft').set_tooltip_text(_me.string('toolSpinLeft')) + + self.get_widget('imgLight').set_tooltip_text(_me.string('toolLight')) + self.get_widget('imgBattery').set_tooltip_text(_me.string('toolBattery')) + self.get_widget('imgSound').set_tooltip_text(_me.string('toolSound')) + + self.get_widget('comboboxentry1').set_tooltip_text(_me.string('toolLang')) + self.get_widget('spinPitch').set_tooltip_text(_me.string('toolPitch')) + + self.get_widget('btnTTS').set_tooltip_text(_me.string('toolTTS')) + self.get_widget('btnTTSClear').set_tooltip_text(_me.string('toolTTSClear')) + self.get_widget('scrolledwindow1').set_tooltip_text(_me.string('toolTTSText')) + + + def hide_tab(self): + self.get_widget('fix1').hide() + self.get_widget('fix1').set_size_request(2,0) + self.get_widget('fix2').hide() + self.get_widget('fix2').set_size_request(2,0) + self.get_widget('fix3').hide() + self.get_widget('fix3').set_size_request(2,0) + self.get_widget('fix4').hide() + self.get_widget('fix4').set_size_request(2,0) + self.get_widget('fix5').hide() + self.get_widget('fix5').set_size_request(2,0) + self.get_widget('fix6').hide() + self.get_widget('fix6').set_size_request(2,0) + self.get_widget('fix7').hide() + self.get_widget('fix7').set_size_request(2,0) + + def show_tab(self): + self.get_widget('fix1').show() + self.get_widget('fix1').set_size_request(330,0) + self.get_widget('fix2').show() + self.get_widget('fix2').set_size_request(330,0) + self.get_widget('fix3').show() + self.get_widget('fix3').set_size_request(330,0) + self.get_widget('fix4').show() + self.get_widget('fix4').set_size_request(330,0) + self.get_widget('fix5').show() + self.get_widget('fix5').set_size_request(330,0) + self.get_widget('fix6').show() + self.get_widget('fix6').set_size_request(330,0) + self.get_widget('fix7').show() + self.get_widget('fix7').set_size_request(330,0) + - if tux.status.wings_counter() == 0 and self.__wings_active == True and self.__wings_infinite == False: - self.__wings_active = False - thread.start_new_thread(self.refresh_picture, ('imgWingsRun', self.run)) - return False - - return True - - def __wait2(self): - tux.sys.wait(2) - thread.start_new_thread(self.refresh_picture, ('imgSpin', self.spin_off)) + def update_labels(self): + self.get_widget('btnTTS').set_label(_me.string('TTS')) + self.get_widget('btnTTSClear').set_label(_me.string('TTSClear')) + self.get_widget('lblTTS').set_label(_me.string('lblTTS')) + + self.get_widget('lblStop').set_label(_me.string('lblStop')) + + self.get_widget('lblLED').set_label(_me.string('lblLED')) + self.get_widget('lblEyes').set_label(_me.string('lblEyes')) + self.get_widget('lblMouth').set_label(_me.string('lblMouth')) + self.get_widget('lblWings').set_label(_me.string('lblWings')) + self.get_widget('lblSpin').set_label(_me.string('lblSpin')) + self.get_widget('lblConf').set_label(_me.string('lblConf')) + self.get_widget('lblTTSConf').set_label(_me.string('lblTTSConf')) + self.get_widget('lblPitch').set_label(_me.string('lblPitch')) + + self.get_widget('lblFrequency').set_label(_me.string('lblFrequency')) + self.get_widget('lblWingsPWM').set_label(_me.string('lblPWM')) + self.get_widget('lblSpinPWM').set_label(_me.string('lblPWM')) + + self.get_widget('radSpinDirLeft').set_label(_me.string('radSpinDirLeft')) + self.get_widget('radSpinDirRight').set_label(_me.string('radSpinDirRight')) Modified: software/gadgets/tux_controller/trunk/TuxController.tgf =================================================================== (Binary files differ) |