Esempio n. 1
0
    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()
Esempio n. 2
0
    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)
Esempio n. 3
0
 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
Esempio n. 4
0
    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)