Ejemplo n.º 1
0
    def __init__(self, unit):
        super().__init__(visible=True, full_title=self.title)
        self.unit = unit
        self.config = self.unit.config
        self.ampd = self.unit.ampd.sub_executor()
        self.signal_handlers = []
        self.actions = Gio.SimpleActionGroup()
        self.signals = {}
        self.win = None

        self.action_aggregator = unit.manager.create_aggregator(
            self.name + '.action',
            self.action_added_cb,
            self.action_removed_cb,
            also_wants=[
                provider + '.action' for provider in self.use_resources
            ])

        self.bind_property(
            'status', self, 'full-title', GObject.BindingFlags(0),
            lambda x, y: "{} [{}]".format(self.title, self.status)
            if self.status else self.title)

        self.connect('destroy', self.__destroy_cb)
        self.connect('map', self.__map_cb)
        self.connect('unmap', self.__unmap_cb)
        self.signal_handler_connect(unit.unit_server.ampd_client,
                                    'client-connected',
                                    self.client_connected_cb)
        if self.ampd.get_is_connected():
            self.client_connected_cb(unit.unit_server.ampd_client)
Ejemplo n.º 2
0
    def __init__(self, *args):
        super().__init__(*args)
        self.signals['check-resize'] = self.window_check_resize_cb

        self.pixbufs = PixbufCache()
        self.images = []

        builder = self.unit.unit_builder.build_ui('current')
        self.welcome = builder.get_object('welcome')
        self.current = builder.get_object('current')
        self.unit.unit_server.bind_property('current-song', self.welcome, 'visible', GObject.BindingFlags.SYNC_CREATE, lambda x, y: not y)
        self.unit.unit_server.bind_property('current-song', self.current, 'visible', GObject.BindingFlags.SYNC_CREATE, lambda x, y: bool(y))
        self.signal_handler_connect(self.unit.unit_server, 'notify::current-song', self.fader)
        self.fading = None

        self.width = 0
        self.css_provider = Gtk.CssProvider.new()
        self.get_style_context().add_provider(self.css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        self.connect('size-allocate', self.size_allocate_cb)
        self.bind_property('size', builder.get_object('image-icon'), 'pixel-size', GObject.BindingFlags(0), lambda x, y: y * 5)

        for field in self.FIELD_NAMES:
            label = builder.get_object('label-' + field.lower())
            label.field = field
            image = builder.get_object('image-' + field.lower())
            if image:
                image_label = builder.get_object('image-label-' + field.lower())
                if image_label:
                    label.bind_property('label', image_label, 'label', GObject.BindingFlags.SYNC_CREATE)
                    image.bind_property('visible', image_label, 'visible', GObject.BindingFlags.SYNC_CREATE)
                label.connect('notify::label', self.notify_label_cb, image)
                image.connect('size-allocate', self.image_size_allocate_cb)
                self.images.append(image)
            else:
                self.unit.unit_server.bind_property('current-song',
                                                    label, 'visible',
                                                    GObject.BindingFlags.SYNC_CREATE,
                                                    lambda x, y, z: z in y,
                                                    None, field)
            self.unit.unit_server.bind_property('current-song',
                                                label, 'label',
                                                GObject.BindingFlags.SYNC_CREATE,
                                                lambda x, y, z: self.set_size() or y.get(z, ''),
                                                None, field)

        self.add(builder.get_object('widget'))
        self.connect('map', self.__map_cb)
        self.connect('destroy', self.__destroy_cb)