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
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