def create_widgets(self): """Create Looper's GTK widgets.""" self.appshell = ApplicationShell(self.shell) self.main_box = Gtk.VBox() self.controls_box = Gtk.HBox() self.loops_box = Gtk.Grid() self.loops_box.set_row_spacing(2) self.loops_box.set_column_spacing(2) self.loops_box.set_column_homogeneous(True) self.loops_box.set_row_homogeneous(True) self.loops_box.set_border_width(0) self.save_loop_btn = Gtk.Button(label='Save loop') self.min_range_label = Gtk.Label() self.min_range_label.set_text('Min range ') adj = Gtk.Adjustment(self.MIN_RANGE, self.MIN_RANGE, self.MIN_RANGE, 1, 10, 0) self.min_range = Gtk.SpinButton(adjustment=adj) if is_rb3(self.shell): self.activation_btn = Gtk.Button(self.OFF_LABEL) else: self.activation_btn = Gtk.CheckButton() self.activation_btn.set_related_action(self.action.action) self.status_label = Gtk.Label() self.start_slider = self.create_slider() self.end_slider = self.create_slider()
def connect_signals(self): """Connects all needed GTK signals.""" self.settings_changed_sigid = self.settings.connect( 'changed', self.on_settings_changed) if is_rb3(self.shell): # In RB3 plugins cannot be activated from custom buttons so # we need to hack it with dummy button that will emit activation # on click. If Looper is activated through Rhythmbox just change # activation_btn label else if Looper is activated through # our button, change the button label and emit a signal for # Rhythmbox. self.action_sigid = self.action.connect( 'change-state', self.on_rb_activation, '') self.activation_btn_sigid = self.activation_btn.connect( 'clicked', self.on_btn_activation) self.min_range_sigid = self.min_range.connect( 'value-changed', self.on_min_range_changed) self.song_changed_sigid = self.player.connect( "playing-song-changed", self.on_playing_song_changed) self.start_slider_changed_sigid = self.start_slider.connect( "value-changed", self.on_slider_moved, 'start') self.end_slider_changed_sigid = self.end_slider.connect( "value-changed", self.on_slider_moved, 'end') # Start and End slider values need to be formated from # seconds to (MM:SS) self.start_slider_value_sigid = self.start_slider.connect( "format-value", self.on_format_slider_value) self.end_slider_value_sigid = self.end_slider.connect( "format-value", self.on_format_slider_value) self.save_loop_btn_sigid = self.save_loop_btn.connect( 'clicked', self.on_save_loop)
def destroy_widgets(self): if is_rb3(self.looper.shell): self.activation_btn.disconnect(self.activation_btn_sigid) self.min_range.disconnect(self.min_range_sigid) self.start_slider.disconnect(self.start_slider_changed_sigid) self.start_slider.disconnect(self.start_slider_value_sigid) self.end_slider.disconnect(self.end_slider_changed_sigid) self.end_slider.disconnect(self.end_slider_value_sigid) self.save_loop_btn.disconnect(self.save_loop_btn_sigid) self.tuner_btn.disconnect(self.tuner_sigid) self.audiokaraoke_btn.disconnect(self.audiokaraoke_sigid) self.rbpitch_btn.disconnect(self.rbpitch_sigid) del self.looper del self.save_loop_btn del self.min_range_label del self.min_range del self.activation_btn del self.status_label del self.start_slider del self.end_slider del self.tuner_btn del self.rbpitch_btn del self.audiokaraoke_btn del self.audiokaraoke
def __init__(self, looper): super(Controls, self).__init__() self.looper = looper self.set_orientation(Gtk.Orientation.HORIZONTAL) self.set_row_spacing(5) self.set_column_spacing(2) self.set_column_homogeneous(True) self.set_row_homogeneous(True) self.save_loop_btn = Gtk.Button(label='Save loop') self.tuner_btn = Gtk.Button('Tuner') self.tuner_sigid = self.tuner_btn.connect('clicked', self.on_tuner_btn_clicked) self.audiokaraoke = Gst.ElementFactory.make('audiokaraoke', None) self.audiokaraoke_btn = Gtk.ToggleButton('Filter out speech') self.audiokaraoke_sigid = self.audiokaraoke_btn.connect( 'clicked', self.on_audiokaraoke_toggle) self.rbpitch_btn = Gtk.ToggleButton('T/P/R') self.rbpitch_sigid = self.rbpitch_btn.connect('clicked', self.on_rbpitch_toggle) self.min_range_label = Gtk.Label() self.min_range_label.set_text('Min range ') adj = Gtk.Adjustment(MIN_RANGE, MIN_RANGE, MIN_RANGE, 1, 10, 0) self.min_range = Gtk.SpinButton(adjustment=adj) if is_rb3(looper.shell): self.activation_btn = Gtk.Button(OFF_LABEL) else: self.activation_btn = Gtk.CheckButton() self.activation_btn.set_related_action(self.action.action) self.status_label = Gtk.ProgressBar() self.status_label.set_show_text(True) self.start_slider = create_slider() self.start_slider.set_property('margin-left', 5) self.end_slider = create_slider() self.end_slider.set_property('margin-right', 5) self.attach(self.start_slider, 0, 0, 7, 2) self.attach(self.end_slider, 7, 0, 7, 2) self.attach(self.status_label, 0, 2, 14, 2) self.attach(self.tuner_btn, 0, 4, 2, 2) self.attach(self.audiokaraoke_btn, 2, 4, 2, 2) self.attach(self.rbpitch_btn, 4, 4, 2, 2) self.attach(self.min_range_label, 6, 4, 2, 2) self.attach(self.min_range, 8, 4, 1, 2) self.attach(self.save_loop_btn, 10, 4, 2, 2) self.attach(self.activation_btn, 12, 4, 2, 2) if is_rb3(looper.shell): # In RB3 plugins cannot be activated from custom buttons so # we need to hack it with dummy button that will emit activation # on click. If Looper is activated through Rhythmbox just change # activation_btn label else if Looper is activated through # our button, change the button label and emit a signal for # Rhythmbox. self.action_sigid = looper.action.connect('change-state', self.on_rb_activation, '') self.activation_btn_sigid = self.activation_btn.connect( 'clicked', self.on_btn_activation) self.min_range_sigid = self.min_range.connect( 'value-changed', self.on_min_range_changed) self.start_slider_changed_sigid = self.start_slider.connect( "value-changed", self.on_slider_moved, 'start') self.end_slider_changed_sigid = self.end_slider.connect( "value-changed", self.on_slider_moved, 'end') # Start and End slider values need to be formated from # seconds to (MM:SS) self.start_slider_value_sigid = self.start_slider.connect( "format-value", self.on_format_slider_value) self.end_slider_value_sigid = self.end_slider.connect( "format-value", self.on_format_slider_value) self.save_loop_btn_sigid = self.save_loop_btn.connect( 'clicked', looper.on_save_loop)