Exemple #1
0
    def __init__(self):
        self.devices = {}
        self.cp = ControlPointBL()
        self.cp.subscribe('new_device_event', self.on_new_device)
        self.cp.subscribe('removed_device_event', self.on_removed_device)
        self.glade = gtk.glade.XML(os.path.join(os.path.dirname(__file__),
                                   'lightcp.glade'))
        self.main_window = self.glade.get_widget('cpwindow')
        self.image0 = self.glade.get_widget('image0')
        self.image1 = self.glade.get_widget('image1')
        self.main_window.connect('destroy', self.quit)
        self.set_target_window = self.glade.get_widget('set_target_window')
        self.set_target_window.connect('destroy', self.ok)
        self.vbox = self.glade.get_widget('vboxk')
        self.combobox = gtk.combo_box_new_text()
        self.combobox.show()
        self.vbox.pack_start(self.combobox)
        self.vbox.reorder_child(self.combobox, 0)
        self.value_checkbt = self.glade.get_widget('value')

        signals = {'on_get_status_clicked': self.get_status,
                   'on_get_target_clicked': self.get_target,
                   'on_set_target_clicked': self.set_target,
                   'on_cancel_clicked': self.cancel,
                   'on_ok_clicked': self.ok}

        self.glade.signal_autoconnect(signals)
Exemple #2
0
class GTKControlPoint(object):

    def __init__(self):
        self.devices = {}
        self.cp = ControlPointBL()
        self.cp.subscribe('new_device_event', self.on_new_device)
        self.cp.subscribe('removed_device_event', self.on_removed_device)
        self.glade = gtk.glade.XML(os.path.join(os.path.dirname(__file__),
                                   'lightcp.glade'))
        self.main_window = self.glade.get_widget('cpwindow')
        self.image0 = self.glade.get_widget('image0')
        self.image1 = self.glade.get_widget('image1')
        self.main_window.connect('destroy', self.quit)
        self.set_target_window = self.glade.get_widget('set_target_window')
        self.set_target_window.connect('destroy', self.ok)
        self.vbox = self.glade.get_widget('vboxk')
        self.combobox = gtk.combo_box_new_text()
        self.combobox.show()
        self.vbox.pack_start(self.combobox)
        self.vbox.reorder_child(self.combobox, 0)
        self.value_checkbt = self.glade.get_widget('value')

        signals = {'on_get_status_clicked': self.get_status,
                   'on_get_target_clicked': self.get_target,
                   'on_set_target_clicked': self.set_target,
                   'on_cancel_clicked': self.cancel,
                   'on_ok_clicked': self.ok}

        self.glade.signal_autoconnect(signals)

    def run(self):
        self.main_window.show()
        self.cp.start_search(600, 'upnp:rootdevice')
        reactor.add_after_stop_func(self.cp.stop)
        reactor.main()

    def quit(self, widget=None):
        reactor.main_quit()

    def on_new_device(self, device):
        if device.device_type != 'urn:schemas-upnp-org:device:BinaryLight:1':
            return
        self.devices[device.udn] = device
        self.sync_combobox()

    def on_removed_device(self, udn):
        for d in self.devices:
            if d.udn == udn:
                self.devices.remove(d)
        self.sync_combobox()

    def sync_combobox(self):
        self.combobox.get_model().clear()

        for d in self.devices.values():
            self.combobox.append_text(str(d.friendly_name))

        self.combobox.set_active(0)

    def _get_selected_device(self):
        selected = self.combobox.get_active()
        model = self.combobox.get_model()
        if selected < 0:
            return None
        selected = model[selected][0]
        device = None
        for d in self.devices.values():
            if d.friendly_name == selected:
                device = d

        if not device:
            raise Exception('Device is None (critical)')

        return device

    def get_status(self, widget):
        self.cp.current_server = self._get_selected_device()
        value = self.cp.get_status()
        self.image0.hide()
        self.image0.set_from_stock('gtk-yes' if value else 'gtk-no',
                                   gtk.ICON_SIZE_BUTTON)
        self.image0.show()

    def get_target(self, widget):
        self.cp.current_server = self._get_selected_device()
        value = self.cp.get_target()
        self.image1.hide()
        self.image1.set_from_stock('gtk-yes' if value else 'gtk-no',
                                   gtk.ICON_SIZE_BUTTON)
        self.image1.show()

    def set_target(self, widget):
        self.set_target_window.show()

    def cancel(self, widget):
        self.set_target_window.hide()
        self.main_window.show()

    def ok(self, widget=None):
        self.set_target_window.hide()
        self.main_window.show()
        self.cp.current_server = self._get_selected_device()
        k = self.value_checkbt.get_active()
        self.cp.set_target(k)