mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-17 04:06:26 +01:00
Split TimeFXDialog from Editor.
git-svn-id: svn://localhost/ardour2/branches/3.0@4698 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
9f77cd9e19
commit
eeae6aec34
7 changed files with 341 additions and 241 deletions
|
|
@ -248,6 +248,7 @@ tempo_lines.cc
|
||||||
theme_manager.cc
|
theme_manager.cc
|
||||||
time_axis_view.cc
|
time_axis_view.cc
|
||||||
time_axis_view_item.cc
|
time_axis_view_item.cc
|
||||||
|
time_fx_dialog.cc
|
||||||
time_selection.cc
|
time_selection.cc
|
||||||
ui_config.cc
|
ui_config.cc
|
||||||
utils.cc
|
utils.cc
|
||||||
|
|
|
||||||
|
|
@ -88,30 +88,31 @@ namespace LADSPA {
|
||||||
class Plugin;
|
class Plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
class TimeAxisView;
|
class AnalysisWindow;
|
||||||
class AudioTimeAxisView;
|
|
||||||
class AutomationTimeAxisView;
|
|
||||||
class AudioRegionView;
|
class AudioRegionView;
|
||||||
class CrossfadeView;
|
class AudioStreamView;
|
||||||
class PluginSelector;
|
class AudioTimeAxisView;
|
||||||
class PlaylistSelector;
|
|
||||||
class Marker;
|
|
||||||
class GroupedButtons;
|
|
||||||
class AutomationLine;
|
class AutomationLine;
|
||||||
|
class AutomationSelection;
|
||||||
|
class AutomationTimeAxisView;
|
||||||
|
class BundleManager;
|
||||||
|
class ControlPoint;
|
||||||
|
class CrossfadeView;
|
||||||
|
class GlobalPortMatrixWindow;
|
||||||
|
class GroupedButtons;
|
||||||
|
class Marker;
|
||||||
|
class MixerStrip;
|
||||||
|
class PlaylistSelector;
|
||||||
|
class PluginSelector;
|
||||||
|
class RhythmFerret;
|
||||||
class Selection;
|
class Selection;
|
||||||
|
class SoundFileOmega;
|
||||||
|
class StreamView;
|
||||||
class TempoLines;
|
class TempoLines;
|
||||||
|
class TimeAxisView;
|
||||||
|
class TimeFXDialog;
|
||||||
class TimeSelection;
|
class TimeSelection;
|
||||||
class TrackSelection;
|
class TrackSelection;
|
||||||
class AutomationSelection;
|
|
||||||
class MixerStrip;
|
|
||||||
class StreamView;
|
|
||||||
class AudioStreamView;
|
|
||||||
class ControlPoint;
|
|
||||||
class SoundFileOmega;
|
|
||||||
class RhythmFerret;
|
|
||||||
class AnalysisWindow;
|
|
||||||
class BundleManager;
|
|
||||||
class GlobalPortMatrixWindow;
|
|
||||||
|
|
||||||
/* <CMT Additions> */
|
/* <CMT Additions> */
|
||||||
class ImageFrameView;
|
class ImageFrameView;
|
||||||
|
|
@ -264,6 +265,7 @@ class Editor : public PublicEditor
|
||||||
bool show_measures () const { return _show_measures; }
|
bool show_measures () const { return _show_measures; }
|
||||||
|
|
||||||
/* analysis window */
|
/* analysis window */
|
||||||
|
|
||||||
void analyze_region_selection();
|
void analyze_region_selection();
|
||||||
void analyze_range_selection();
|
void analyze_range_selection();
|
||||||
|
|
||||||
|
|
@ -814,7 +816,6 @@ class Editor : public PublicEditor
|
||||||
Gtk::Label transport_mark_label;
|
Gtk::Label transport_mark_label;
|
||||||
Gtk::Label cd_mark_label;
|
Gtk::Label cd_mark_label;
|
||||||
|
|
||||||
|
|
||||||
Gtk::VBox time_button_vbox;
|
Gtk::VBox time_button_vbox;
|
||||||
Gtk::HBox time_button_hbox;
|
Gtk::HBox time_button_hbox;
|
||||||
|
|
||||||
|
|
@ -833,9 +834,7 @@ class Editor : public PublicEditor
|
||||||
void set_y_axis (double position);
|
void set_y_axis (double position);
|
||||||
};
|
};
|
||||||
|
|
||||||
friend struct Cursor; /* it needs access to several private
|
friend struct Cursor; /* FIXME: needs access to several private fields */
|
||||||
fields. XXX fix me.
|
|
||||||
*/
|
|
||||||
|
|
||||||
Cursor* playhead_cursor;
|
Cursor* playhead_cursor;
|
||||||
ArdourCanvas::Group* cursor_group;
|
ArdourCanvas::Group* cursor_group;
|
||||||
|
|
@ -2016,7 +2015,8 @@ public:
|
||||||
|
|
||||||
/* Drag-n-Drop */
|
/* Drag-n-Drop */
|
||||||
|
|
||||||
int convert_drop_to_paths (std::vector<Glib::ustring>& paths,
|
int convert_drop_to_paths (
|
||||||
|
std::vector<Glib::ustring>& paths,
|
||||||
const Glib::RefPtr<Gdk::DragContext>& context,
|
const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
|
|
@ -2024,35 +2024,40 @@ public:
|
||||||
guint info,
|
guint info,
|
||||||
guint time);
|
guint time);
|
||||||
|
|
||||||
void track_canvas_drag_data_received (const Glib::RefPtr<Gdk::DragContext>& context,
|
void track_canvas_drag_data_received (
|
||||||
|
const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
const Gtk::SelectionData& data,
|
const Gtk::SelectionData& data,
|
||||||
guint info,
|
guint info,
|
||||||
guint time);
|
guint time);
|
||||||
|
|
||||||
void region_list_display_drag_data_received (const Glib::RefPtr<Gdk::DragContext>& context,
|
void region_list_display_drag_data_received (
|
||||||
|
const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
const Gtk::SelectionData& data,
|
const Gtk::SelectionData& data,
|
||||||
guint info,
|
guint info,
|
||||||
guint time);
|
guint time);
|
||||||
|
|
||||||
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
|
void drop_paths (
|
||||||
|
const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
const Gtk::SelectionData& data,
|
const Gtk::SelectionData& data,
|
||||||
guint info,
|
guint info,
|
||||||
guint time);
|
guint time);
|
||||||
|
|
||||||
void drop_regions (const Glib::RefPtr<Gdk::DragContext>& context,
|
void drop_regions (
|
||||||
|
const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
const Gtk::SelectionData& data,
|
const Gtk::SelectionData& data,
|
||||||
guint info,
|
guint info,
|
||||||
guint time);
|
guint time);
|
||||||
|
|
||||||
void drop_routes (const Glib::RefPtr<Gdk::DragContext>& context,
|
void drop_routes (
|
||||||
|
const Glib::RefPtr<Gdk::DragContext>& context,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
const Gtk::SelectionData& data,
|
const Gtk::SelectionData& data,
|
||||||
|
|
@ -2128,45 +2133,6 @@ public:
|
||||||
void start_time_fx (ArdourCanvas::Item*, GdkEvent*);
|
void start_time_fx (ArdourCanvas::Item*, GdkEvent*);
|
||||||
void end_time_fx (ArdourCanvas::Item*, GdkEvent*);
|
void end_time_fx (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
|
||||||
struct TimeFXDialog : public ArdourDialog {
|
|
||||||
ARDOUR::TimeFXRequest request;
|
|
||||||
Editor& editor;
|
|
||||||
bool pitching;
|
|
||||||
Gtk::Adjustment pitch_octave_adjustment;
|
|
||||||
Gtk::Adjustment pitch_semitone_adjustment;
|
|
||||||
Gtk::Adjustment pitch_cent_adjustment;
|
|
||||||
Gtk::SpinButton pitch_octave_spinner;
|
|
||||||
Gtk::SpinButton pitch_semitone_spinner;
|
|
||||||
Gtk::SpinButton pitch_cent_spinner;
|
|
||||||
RegionSelection regions;
|
|
||||||
Gtk::ProgressBar progress_bar;
|
|
||||||
|
|
||||||
/* SoundTouch */
|
|
||||||
Gtk::ToggleButton quick_button;
|
|
||||||
Gtk::ToggleButton antialias_button;
|
|
||||||
Gtk::HBox upper_button_box;
|
|
||||||
|
|
||||||
/* RubberBand */
|
|
||||||
Gtk::ComboBoxText stretch_opts_selector;
|
|
||||||
Gtk::Label stretch_opts_label;
|
|
||||||
Gtk::ToggleButton precise_button;
|
|
||||||
Gtk::ToggleButton preserve_formants_button;
|
|
||||||
Gtk::HBox opts_box;
|
|
||||||
|
|
||||||
Gtk::Button* cancel_button;
|
|
||||||
Gtk::Button* action_button;
|
|
||||||
Gtk::VBox packer;
|
|
||||||
int status;
|
|
||||||
|
|
||||||
TimeFXDialog (Editor& e, bool for_pitch);
|
|
||||||
|
|
||||||
gint update_progress ();
|
|
||||||
sigc::connection first_cancel;
|
|
||||||
sigc::connection first_delete;
|
|
||||||
void cancel_in_progress ();
|
|
||||||
gint delete_in_progress (GdkEventAny*);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* "whats mine is yours" */
|
/* "whats mine is yours" */
|
||||||
|
|
||||||
friend class TimeFXDialog;
|
friend class TimeFXDialog;
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,11 @@
|
||||||
#include <gtkmm2ext/window_title.h>
|
#include <gtkmm2ext/window_title.h>
|
||||||
#include <gtkmm2ext/utils.h>
|
#include <gtkmm2ext/utils.h>
|
||||||
|
|
||||||
#include "editor.h"
|
|
||||||
#include "audio_time_axis.h"
|
|
||||||
#include "audio_region_view.h"
|
#include "audio_region_view.h"
|
||||||
|
#include "audio_time_axis.h"
|
||||||
|
#include "editor.h"
|
||||||
#include "region_selection.h"
|
#include "region_selection.h"
|
||||||
|
#include "time_fx_dialog.h"
|
||||||
|
|
||||||
#include "ardour/session.h"
|
#include "ardour/session.h"
|
||||||
#include "ardour/region.h"
|
#include "ardour/region.h"
|
||||||
|
|
@ -59,132 +60,6 @@ using namespace sigc;
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
using namespace Gtkmm2ext;
|
using namespace Gtkmm2ext;
|
||||||
|
|
||||||
Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
|
|
||||||
: ArdourDialog (X_("time fx dialog")),
|
|
||||||
editor (e),
|
|
||||||
pitching (pitch),
|
|
||||||
pitch_octave_adjustment (0.0, -4.0, 4.0, 1, 2.0),
|
|
||||||
pitch_semitone_adjustment (0.0, -12.0, 12.0, 1.0, 4.0),
|
|
||||||
pitch_cent_adjustment (0.0, -499.0, 500.0, 5.0, 15.0),
|
|
||||||
pitch_octave_spinner (pitch_octave_adjustment),
|
|
||||||
pitch_semitone_spinner (pitch_semitone_adjustment),
|
|
||||||
pitch_cent_spinner (pitch_cent_adjustment),
|
|
||||||
quick_button (_("Quick but Ugly")),
|
|
||||||
antialias_button (_("Skip Anti-aliasing")),
|
|
||||||
stretch_opts_label (_("Contents:")),
|
|
||||||
precise_button (_("Strict Linear")),
|
|
||||||
preserve_formants_button(_("Preserve Formants"))
|
|
||||||
{
|
|
||||||
set_modal (true);
|
|
||||||
set_position (Gtk::WIN_POS_MOUSE);
|
|
||||||
set_name (N_("TimeFXDialog"));
|
|
||||||
|
|
||||||
WindowTitle title(Glib::get_application_name());
|
|
||||||
if (pitching) {
|
|
||||||
title += _("Pitch Shift");
|
|
||||||
} else {
|
|
||||||
title += _("Time Stretch");
|
|
||||||
}
|
|
||||||
set_title(title.get_string());
|
|
||||||
|
|
||||||
cancel_button = add_button (_("Cancel"), Gtk::RESPONSE_CANCEL);
|
|
||||||
|
|
||||||
get_vbox()->set_spacing (5);
|
|
||||||
get_vbox()->set_border_width (12);
|
|
||||||
|
|
||||||
if (pitching) {
|
|
||||||
|
|
||||||
upper_button_box.set_spacing (5);
|
|
||||||
upper_button_box.set_border_width (5);
|
|
||||||
|
|
||||||
Gtk::Label* l;
|
|
||||||
|
|
||||||
l = manage (new Label (_("Octaves")));
|
|
||||||
upper_button_box.pack_start (*l, false, false);
|
|
||||||
upper_button_box.pack_start (pitch_octave_spinner, false, false);
|
|
||||||
|
|
||||||
l = manage (new Label (_("Semitones (12TET)")));
|
|
||||||
upper_button_box.pack_start (*l, false, false);
|
|
||||||
upper_button_box.pack_start (pitch_semitone_spinner, false, false);
|
|
||||||
|
|
||||||
l = manage (new Label (_("Cents")));
|
|
||||||
upper_button_box.pack_start (*l, false, false);
|
|
||||||
upper_button_box.pack_start (pitch_cent_spinner, false, false);
|
|
||||||
|
|
||||||
pitch_cent_spinner.set_digits (1);
|
|
||||||
|
|
||||||
upper_button_box.pack_start (preserve_formants_button, false, false);
|
|
||||||
|
|
||||||
|
|
||||||
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
|
|
||||||
|
|
||||||
get_vbox()->pack_start (upper_button_box, false, false);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
#ifdef USE_RUBBERBAND
|
|
||||||
opts_box.set_spacing (5);
|
|
||||||
opts_box.set_border_width (5);
|
|
||||||
vector<string> strings;
|
|
||||||
|
|
||||||
set_popdown_strings (stretch_opts_selector, editor.rb_opt_strings);
|
|
||||||
/* set default */
|
|
||||||
stretch_opts_selector.set_active_text (editor.rb_opt_strings[4]);
|
|
||||||
|
|
||||||
opts_box.pack_start (precise_button, false, false);
|
|
||||||
opts_box.pack_start (stretch_opts_label, false, false);
|
|
||||||
opts_box.pack_start (stretch_opts_selector, false, false);
|
|
||||||
|
|
||||||
get_vbox()->pack_start (opts_box, false, false);
|
|
||||||
|
|
||||||
#else
|
|
||||||
upper_button_box.set_homogeneous (true);
|
|
||||||
upper_button_box.set_spacing (5);
|
|
||||||
upper_button_box.set_border_width (5);
|
|
||||||
|
|
||||||
upper_button_box.pack_start (quick_button, true, true);
|
|
||||||
upper_button_box.pack_start (antialias_button, true, true);
|
|
||||||
|
|
||||||
quick_button.set_name (N_("TimeFXButton"));
|
|
||||||
antialias_button.set_name (N_("TimeFXButton"));
|
|
||||||
|
|
||||||
get_vbox()->pack_start (upper_button_box, false, false);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
add_button (_("Stretch/Shrink"), Gtk::RESPONSE_ACCEPT);
|
|
||||||
}
|
|
||||||
|
|
||||||
get_vbox()->pack_start (progress_bar);
|
|
||||||
|
|
||||||
progress_bar.set_name (N_("TimeFXProgress"));
|
|
||||||
|
|
||||||
show_all_children ();
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
Editor::TimeFXDialog::update_progress ()
|
|
||||||
{
|
|
||||||
progress_bar.set_fraction (request.progress);
|
|
||||||
return !request.done;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::TimeFXDialog::cancel_in_progress ()
|
|
||||||
{
|
|
||||||
status = -2;
|
|
||||||
request.cancel = true;
|
|
||||||
first_cancel.disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
Editor::TimeFXDialog::delete_in_progress (GdkEventAny* ev)
|
|
||||||
{
|
|
||||||
status = -2;
|
|
||||||
request.cancel = true;
|
|
||||||
first_delete.disconnect();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Editor::time_stretch (RegionSelection& regions, float fraction)
|
Editor::time_stretch (RegionSelection& regions, float fraction)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -28,11 +28,10 @@ using std::list;
|
||||||
using std::set;
|
using std::set;
|
||||||
|
|
||||||
class RegionView;
|
class RegionView;
|
||||||
|
class TimeAxisView;
|
||||||
|
|
||||||
/**
|
/** Class to represent list of selected regions.
|
||||||
* Class to represent list of selected regions.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class RegionSelection : public std::list<RegionView*>, public sigc::trackable
|
class RegionSelection : public std::list<RegionView*>, public sigc::trackable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
189
gtk2_ardour/time_fx_dialog.cc
Normal file
189
gtk2_ardour/time_fx_dialog.cc
Normal file
|
|
@ -0,0 +1,189 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2000-2009 Paul Davis
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "time_fx_dialog.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "pbd/error.h"
|
||||||
|
#include "pbd/pthread_utils.h"
|
||||||
|
#include "pbd/memento_command.h"
|
||||||
|
|
||||||
|
#include <gtkmm2ext/window_title.h>
|
||||||
|
#include <gtkmm2ext/utils.h>
|
||||||
|
|
||||||
|
#include "editor.h"
|
||||||
|
#include "audio_time_axis.h"
|
||||||
|
#include "audio_region_view.h"
|
||||||
|
#include "region_selection.h"
|
||||||
|
|
||||||
|
#include "ardour/session.h"
|
||||||
|
#include "ardour/region.h"
|
||||||
|
#include "ardour/audioplaylist.h"
|
||||||
|
#include "ardour/audio_track.h"
|
||||||
|
#include "ardour/audioregion.h"
|
||||||
|
#include "ardour/audio_diskstream.h"
|
||||||
|
#include "ardour/stretch.h"
|
||||||
|
#include "ardour/midi_stretch.h"
|
||||||
|
#include "ardour/pitch.h"
|
||||||
|
|
||||||
|
#ifdef USE_RUBBERBAND
|
||||||
|
#include "rubberband/RubberBandStretcher.h"
|
||||||
|
using namespace RubberBand;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace ARDOUR;
|
||||||
|
using namespace PBD;
|
||||||
|
using namespace sigc;
|
||||||
|
using namespace Gtk;
|
||||||
|
using namespace Gtkmm2ext;
|
||||||
|
|
||||||
|
TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
|
||||||
|
: ArdourDialog (X_("time fx dialog"))
|
||||||
|
, editor (e)
|
||||||
|
, pitching (pitch)
|
||||||
|
, pitch_octave_adjustment (0.0, -4.0, 4.0, 1, 2.0)
|
||||||
|
, pitch_semitone_adjustment (0.0, -12.0, 12.0, 1.0, 4.0)
|
||||||
|
, pitch_cent_adjustment (0.0, -499.0, 500.0, 5.0, 15.0)
|
||||||
|
, pitch_octave_spinner (pitch_octave_adjustment)
|
||||||
|
, pitch_semitone_spinner (pitch_semitone_adjustment)
|
||||||
|
, pitch_cent_spinner (pitch_cent_adjustment)
|
||||||
|
, quick_button (_("Quick but Ugly"))
|
||||||
|
, antialias_button (_("Skip Anti-aliasing"))
|
||||||
|
, stretch_opts_label (_("Contents:"))
|
||||||
|
, precise_button (_("Strict Linear"))
|
||||||
|
, preserve_formants_button(_("Preserve Formants"))
|
||||||
|
{
|
||||||
|
set_modal (true);
|
||||||
|
set_position (Gtk::WIN_POS_MOUSE);
|
||||||
|
set_name (N_("TimeFXDialog"));
|
||||||
|
|
||||||
|
WindowTitle title(Glib::get_application_name());
|
||||||
|
if (pitching) {
|
||||||
|
title += _("Pitch Shift");
|
||||||
|
} else {
|
||||||
|
title += _("Time Stretch");
|
||||||
|
}
|
||||||
|
set_title(title.get_string());
|
||||||
|
|
||||||
|
cancel_button = add_button (_("Cancel"), Gtk::RESPONSE_CANCEL);
|
||||||
|
|
||||||
|
get_vbox()->set_spacing (5);
|
||||||
|
get_vbox()->set_border_width (12);
|
||||||
|
|
||||||
|
if (pitching) {
|
||||||
|
|
||||||
|
upper_button_box.set_spacing (5);
|
||||||
|
upper_button_box.set_border_width (5);
|
||||||
|
|
||||||
|
Gtk::Label* l;
|
||||||
|
|
||||||
|
l = manage (new Label (_("Octaves")));
|
||||||
|
upper_button_box.pack_start (*l, false, false);
|
||||||
|
upper_button_box.pack_start (pitch_octave_spinner, false, false);
|
||||||
|
|
||||||
|
l = manage (new Label (_("Semitones (12TET)")));
|
||||||
|
upper_button_box.pack_start (*l, false, false);
|
||||||
|
upper_button_box.pack_start (pitch_semitone_spinner, false, false);
|
||||||
|
|
||||||
|
l = manage (new Label (_("Cents")));
|
||||||
|
upper_button_box.pack_start (*l, false, false);
|
||||||
|
upper_button_box.pack_start (pitch_cent_spinner, false, false);
|
||||||
|
|
||||||
|
pitch_cent_spinner.set_digits (1);
|
||||||
|
|
||||||
|
upper_button_box.pack_start (preserve_formants_button, false, false);
|
||||||
|
|
||||||
|
|
||||||
|
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
|
||||||
|
|
||||||
|
get_vbox()->pack_start (upper_button_box, false, false);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
#ifdef USE_RUBBERBAND
|
||||||
|
opts_box.set_spacing (5);
|
||||||
|
opts_box.set_border_width (5);
|
||||||
|
vector<string> strings;
|
||||||
|
|
||||||
|
set_popdown_strings (stretch_opts_selector, editor.rb_opt_strings);
|
||||||
|
/* set default */
|
||||||
|
stretch_opts_selector.set_active_text (editor.rb_opt_strings[4]);
|
||||||
|
|
||||||
|
opts_box.pack_start (precise_button, false, false);
|
||||||
|
opts_box.pack_start (stretch_opts_label, false, false);
|
||||||
|
opts_box.pack_start (stretch_opts_selector, false, false);
|
||||||
|
|
||||||
|
get_vbox()->pack_start (opts_box, false, false);
|
||||||
|
|
||||||
|
#else
|
||||||
|
upper_button_box.set_homogeneous (true);
|
||||||
|
upper_button_box.set_spacing (5);
|
||||||
|
upper_button_box.set_border_width (5);
|
||||||
|
|
||||||
|
upper_button_box.pack_start (quick_button, true, true);
|
||||||
|
upper_button_box.pack_start (antialias_button, true, true);
|
||||||
|
|
||||||
|
quick_button.set_name (N_("TimeFXButton"));
|
||||||
|
antialias_button.set_name (N_("TimeFXButton"));
|
||||||
|
|
||||||
|
get_vbox()->pack_start (upper_button_box, false, false);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
add_button (_("Stretch/Shrink"), Gtk::RESPONSE_ACCEPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
get_vbox()->pack_start (progress_bar);
|
||||||
|
|
||||||
|
progress_bar.set_name (N_("TimeFXProgress"));
|
||||||
|
|
||||||
|
show_all_children ();
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
TimeFXDialog::update_progress ()
|
||||||
|
{
|
||||||
|
progress_bar.set_fraction (request.progress);
|
||||||
|
return !request.done;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TimeFXDialog::cancel_in_progress ()
|
||||||
|
{
|
||||||
|
status = -2;
|
||||||
|
request.cancel = true;
|
||||||
|
first_cancel.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
TimeFXDialog::delete_in_progress (GdkEventAny* ev)
|
||||||
|
{
|
||||||
|
status = -2;
|
||||||
|
request.cancel = true;
|
||||||
|
first_delete.disconnect();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
69
gtk2_ardour/time_fx_dialog.h
Normal file
69
gtk2_ardour/time_fx_dialog.h
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2000-2009 Paul Davis
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ardour_time_fx_dialog_h__
|
||||||
|
#define __ardour_time_fx_dialog_h__
|
||||||
|
|
||||||
|
#include <gtkmm.h>
|
||||||
|
|
||||||
|
#include "ardour_dialog.h"
|
||||||
|
#include "region_selection.h"
|
||||||
|
|
||||||
|
class Editor;
|
||||||
|
|
||||||
|
struct TimeFXDialog : public ArdourDialog {
|
||||||
|
ARDOUR::TimeFXRequest request;
|
||||||
|
Editor& editor;
|
||||||
|
bool pitching;
|
||||||
|
Gtk::Adjustment pitch_octave_adjustment;
|
||||||
|
Gtk::Adjustment pitch_semitone_adjustment;
|
||||||
|
Gtk::Adjustment pitch_cent_adjustment;
|
||||||
|
Gtk::SpinButton pitch_octave_spinner;
|
||||||
|
Gtk::SpinButton pitch_semitone_spinner;
|
||||||
|
Gtk::SpinButton pitch_cent_spinner;
|
||||||
|
RegionSelection regions;
|
||||||
|
Gtk::ProgressBar progress_bar;
|
||||||
|
|
||||||
|
/* SoundTouch */
|
||||||
|
Gtk::ToggleButton quick_button;
|
||||||
|
Gtk::ToggleButton antialias_button;
|
||||||
|
Gtk::HBox upper_button_box;
|
||||||
|
|
||||||
|
/* RubberBand */
|
||||||
|
Gtk::ComboBoxText stretch_opts_selector;
|
||||||
|
Gtk::Label stretch_opts_label;
|
||||||
|
Gtk::ToggleButton precise_button;
|
||||||
|
Gtk::ToggleButton preserve_formants_button;
|
||||||
|
Gtk::HBox opts_box;
|
||||||
|
|
||||||
|
Gtk::Button* cancel_button;
|
||||||
|
Gtk::Button* action_button;
|
||||||
|
Gtk::VBox packer;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
TimeFXDialog (Editor& e, bool for_pitch);
|
||||||
|
|
||||||
|
gint update_progress ();
|
||||||
|
sigc::connection first_cancel;
|
||||||
|
sigc::connection first_delete;
|
||||||
|
void cancel_in_progress ();
|
||||||
|
gint delete_in_progress (GdkEventAny*);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ardour_time_fx_dialog_h__ */
|
||||||
|
|
@ -221,6 +221,7 @@ def build(bld):
|
||||||
theme_manager.cc
|
theme_manager.cc
|
||||||
time_axis_view.cc
|
time_axis_view.cc
|
||||||
time_axis_view_item.cc
|
time_axis_view_item.cc
|
||||||
|
time_fx_dialog.cc
|
||||||
time_selection.cc
|
time_selection.cc
|
||||||
ui_config.cc
|
ui_config.cc
|
||||||
utils.cc
|
utils.cc
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue