added info box for the unifying receiver

This commit is contained in:
Daniel Pavel 2012-10-22 20:59:21 +03:00
parent b10ade4430
commit 4f183b2826
5 changed files with 74 additions and 16 deletions

View File

@ -29,6 +29,9 @@ class State(object):
self._countdown -= 1
return True
if self._countdown < 0:
return False
self._countdown -= 1
if self._countdown > 0 and self.success is None:
return True
@ -46,7 +49,6 @@ class State(object):
def stop_scan(self):
if self._countdown >= 0:
self._countdown = -1
reply = self._watcher.receiver.request(0xFF, b'\x80\xB2', b'\x02')
_l.debug("stop scan reply %s", repr(reply))
self._watcher.receiver.events_filter = None

View File

@ -154,6 +154,9 @@ class Receiver(_listener.EventsListener):
self.LOG = _Logger("Receiver-%s" % path)
self.LOG.info("initializing")
self._serial = None
self._firmware = None
self.devices = {}
self.events_filter = None
self.events_handler = None
@ -212,6 +215,20 @@ class Receiver(_listener.EventsListener):
def count_devices(self):
return self.call_api(_api.count_devices)
@property
def serial(self):
if self._serial is None:
if self:
self._serial, firmware, bootloader = self.call_api(_api.get_receiver_info)
self._firmware = (firmware, bootloader)
return self._serial or '?'
@property
def firmware(self):
s = self.serial
return self._firmware or ('?', '?')
def _device_changed(self, dev, urgent=False):
self.status_changed.reason = dev
self.status_changed.urgent = urgent

View File

@ -15,10 +15,19 @@ _PLACEHOLDER = '~'
def _update_receiver_box(box, receiver):
label, buttons = ui.find_children(box, 'label', 'buttons')
button, label, frame, info = ui.find_children(box,
'info-button', 'status-label', 'info-frame', 'info-label')
label.set_text(receiver.status_text or '')
# buttons.set_visible(receiver.status >= STATUS.CONNECTED)
if receiver.status < STATUS.CONNECTED:
button.set_sensitive(False)
button.set_active(False)
frame.set_visible(False)
info.set_text('')
else:
button.set_sensitive(True)
if not info.get_text():
info.set_text('Serial:\t\t%s\nFirmware: \t%s\nBootloader: \t%s\nMax devices:\t%s' %
(receiver.serial, receiver.firmware[0], receiver.firmware[1], receiver.max_devices))
def _update_device_box(frame, dev):
if dev is None:
@ -100,25 +109,51 @@ def update(window, receiver):
#
def _receiver_box(name):
box = _device_box(False, False)
info_button = Gtk.ToggleButton()
info_button.set_name('info-button')
info_button.set_alignment(0.5, 0)
info_button.set_image(Gtk.Image.new_from_icon_name(name, _SMALL_DEVICE_ICON_SIZE))
info_button.set_relief(Gtk.ReliefStyle.NONE)
info_button.set_tooltip_text(name)
info_button.set_sensitive(False)
icon, status_box = ui.find_children(box, 'icon', 'status')
icon.set_from_icon_name(name, _SMALL_DEVICE_ICON_SIZE)
icon.set_tooltip_text(name)
label = Gtk.Label('Initializing...')
label.set_name('status-label')
label.set_alignment(0, 0.5)
toolbar = Gtk.Toolbar()
toolbar.set_name('buttons')
toolbar.set_style(Gtk.ToolbarStyle.ICONS)
toolbar.set_icon_size(Gtk.IconSize.MENU)
toolbar.set_show_arrow(False)
toolbar.insert(ui.action.pair.create_tool_item(), 0)
toolbar.show_all()
# toolbar.set_visible(False)
status_box.pack_end(toolbar, False, False, 0)
info_label = Gtk.Label('')
info_label.set_name('info-label')
info_label.set_alignment(0, 0.5)
info_label.set_padding(24, 4)
info_label.set_selectable(True)
return box
info_frame = Gtk.Frame()
info_frame.set_name('info-frame')
info_frame.set_label(name)
info_frame.add(info_label)
info_button.connect('toggled', lambda b: info_frame.set_visible(b.get_active()))
hbox = Gtk.HBox(homogeneous=False, spacing=8)
hbox.pack_start(info_button, False, False, 0)
hbox.pack_start(label, True, True, 0)
hbox.pack_end(toolbar, False, False, 0)
vbox = Gtk.VBox(homogeneous=False, spacing=4)
vbox.set_border_width(4)
vbox.pack_start(hbox, True, True, 0)
vbox.pack_start(info_frame, True, True, 0)
vbox.show_all()
info_frame.set_visible(False)
return vbox
def _device_box(has_status_icons=True, has_frame=True):

View File

@ -54,7 +54,8 @@ def _prepare(assistant, page, state):
assistant.remove_page(0)
state.stop_scan()
def _scan_complete(assistant, device):
def _scan_complete_ui(assistant, device):
if device is None:
page = _create_page(assistant,
'No new device detected.\n'
@ -93,6 +94,9 @@ def _scan_complete(assistant, device):
assistant.next_page()
def _scan_complete(assistant, device):
GObject.idle_add(_scan_complete_ui, assistant, device)
def create(action, state):
assistant = Gtk.Assistant()

View File

@ -40,7 +40,7 @@ def get_receiver_info(handle):
serial = None
reply = _base.request(handle, 0xFF, b'\x83\xB5', b'\x03')
if reply and reply[0:1] == b'\x03':
serial = _hexlify(reply[1:5])
serial = _hexlify(reply[1:5]).upper()
firmware = '??.??'
reply = _base.request(handle, 0xFF, b'\x81\xF1', b'\x01')
@ -50,7 +50,7 @@ def get_receiver_info(handle):
reply = _base.request(handle, 0xFF, b'\x81\xF1', b'\x02')
if reply and reply[0:1] == b'\x02':
firmware += '.B' + _hexlify(reply[1:3])
firmware += '.' + _hexlify(reply[1:3])
bootloader = None
reply = _base.request(handle, 0xFF, b'\x81\xF1', b'\x04')