class Channel(Gtk.Alignment):

    ICON_HEIGHT = 36

    def __init__(self):
        Gtk.Alignment.__init__(self)
        #self.set_homogeneous(False)
        self._init()
        self.set_size_request(self.ICON_HEIGHT, self.ICON_HEIGHT)

    def _init(self):
        self.frame = Gtk.Frame()
        self.hbox = Gtk.HBox()
        self._create()
        self._pack_contents()
        self._pack_frame()

    def _pack_contents(self):
        self.mute_box.pack_start(self.mute, False, True, 2)
        self.mute_box.pack_start(Gtk.HBox(), True, True, 0)
        self.menu_box.pack_start(self.menu_button, False, True, 2)
        self.menu_box.pack_start(Gtk.HBox(), True, True, 0)

        self.hbox.pack_start(self.mute_box, False, True, 2)
        self.hbox.pack_start(self.slider,True,True,5)
        self.hbox.pack_start(self.menu_box,False,False, 2)

    def _pack_frame(self):
        self.frame.add(self.hbox)
        self.add(self.frame)
        self.connect("button-press-event", self.on_button_press_event)

    def _create(self):
        self._create_mute()
        self._create_slider()
        self._create_menu_button()

    def _create_menu_button(self):
        self.menu_box=Gtk.VBox()
        self.menu_button = Gtk.ToggleButton()
        self.menu_button.set_relief(Gtk.ReliefStyle.NONE)
        self.menu_button.set_can_focus(False)
        self.menu_button.add(Gtk.Arrow(Gtk.ArrowType.DOWN, Gtk.ShadowType.NONE))
        self.menu_button.connect("released", self.show_popupmenu)
        self.menu_button.set_size_request(-1, self.ICON_HEIGHT)

    def on_menu_button_released(self, widget):
        self.menu_button.set_active(False)

    def _create_mute(self):
        self.mute_box = Gtk.VBox()
        self.mute = MuteButton()
        self.mute.connect_clicked(self.on_mute_clicked)

    def _create_slider(self):
        self.slider = SliderWidget()

    def show_popupmenu(self, widget, button=0, time=0):
        self.menu = Gtk.Menu()
        self.menu.connect("selection-done", self.on_menu_button_released)
        instance = ContextMenu.get_instance()
        instance.populate_menu(self.pa_sink_proxy(), self.menu, self.slider)
        self.menu.show_all()
        self.menu.popup(None, None, None, None, 0, 0)
        return False

    def on_button_press_event(self, widget, event):
        if (event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3):
            self.show_popupmenu(event.button, event.time)
            return True # event has been handled

    def on_mute_clicked(self, button, event):
        # catch drag and drop:
        if (Gdk.EventType.BUTTON_RELEASE and (event.x != 0.0 and event.y != 0.0)):
            self.pa_sink_proxy().toggle_mute()
            return True
        return False

    def pa_sink_proxy(self):
        return self._pa_sink

    def on_pa_data_updated(self, data):
        self._pa_sink = data

        self.slider.set_volume(data)
        self.mute.set_active(data.isMuted())
        self.mute.set_image_name(data.get_nice_icon())

    def step_volume(self, up):
        self.slider.step_volume(up)

    def toggle_mute(self):
        self.pa_sink_proxy().toggle_mute()

    def on_pa_module_data_updated(self, data):
        pass
Exemple #2
0
class Channel(Gtk.Alignment):

    ICON_HEIGHT = 36

    def __init__(self):
        Gtk.Alignment.__init__(self)
        #self.set_homogeneous(False)
        self._init()
        self.set_size_request(self.ICON_HEIGHT, self.ICON_HEIGHT)

    def _init(self):
        self.frame = Gtk.Frame()
        self.hbox = Gtk.HBox()
        self._create()
        self._pack_contents()
        self._pack_frame()

    def _pack_contents(self):
        self.mute_box.pack_start(self.mute, False, True, 2)
        self.mute_box.pack_start(Gtk.HBox(), True, True, 0)
        self.menu_box.pack_start(self.menu_button, False, True, 2)
        self.menu_box.pack_start(Gtk.HBox(), True, True, 0)

        self.hbox.pack_start(self.mute_box, False, True, 2)
        self.hbox.pack_start(self.slider, True, True, 5)
        self.hbox.pack_start(self.menu_box, False, False, 2)

    def _pack_frame(self):
        self.frame.add(self.hbox)
        self.add(self.frame)
        self.connect("button-press-event", self.on_button_press_event)

    def _create(self):
        self._create_mute()
        self._create_slider()
        self._create_menu_button()

    def _create_menu_button(self):
        self.menu_box = Gtk.VBox()
        self.menu_button = Gtk.ToggleButton()
        self.menu_button.set_relief(Gtk.ReliefStyle.NONE)
        self.menu_button.set_can_focus(False)
        self.menu_button.add(Gtk.Arrow(Gtk.ArrowType.DOWN,
                                       Gtk.ShadowType.NONE))
        self.menu_button.connect("released", self.show_popupmenu)
        self.menu_button.set_size_request(-1, self.ICON_HEIGHT)

    def on_menu_button_released(self, widget):
        self.menu_button.set_active(False)

    def _create_mute(self):
        self.mute_box = Gtk.VBox()
        self.mute = MuteButton()
        self.mute.connect_clicked(self.on_mute_clicked)

    def _create_slider(self):
        self.slider = SliderWidget()

    def show_popupmenu(self, widget, button=0, time=0):
        self.menu = Gtk.Menu()
        self.menu.connect("selection-done", self.on_menu_button_released)
        instance = ContextMenu.get_instance()
        instance.populate_menu(self.pa_sink_proxy(), self.menu, self.slider)
        self.menu.show_all()
        self.menu.popup(None, None, None, None, 0, 0)
        return False

    def on_button_press_event(self, widget, event):
        if (event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3):
            self.show_popupmenu(event.button, event.time)
            return True  # event has been handled

    def on_mute_clicked(self, button, event):
        # catch drag and drop:
        if (Gdk.EventType.BUTTON_RELEASE
                and (event.x != 0.0 and event.y != 0.0)):
            self.pa_sink_proxy().toggle_mute()
            return True
        return False

    def pa_sink_proxy(self):
        return self._pa_sink

    def on_pa_data_updated(self, data):
        self._pa_sink = data

        self.slider.set_volume(data)
        self.mute.set_active(data.isMuted())
        self.mute.set_image_name(data.get_nice_icon())

    def step_volume(self, up):
        self.slider.step_volume(up)

    def toggle_mute(self):
        self.pa_sink_proxy().toggle_mute()

    def on_pa_module_data_updated(self, data):
        pass