From 6ef5c8da56800bbce1c23a9ea51c9a1646d5887f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 19 Jan 2006 05:01:43 +0000 Subject: add GUI support to create tape/destructive tracks git-svn-id: svn://localhost/trunk/ardour2@278 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/add_route_dialog.cc | 82 +++++++++++++++++++++++++++++++++++++++-- gtk2_ardour/add_route_dialog.h | 6 ++- gtk2_ardour/ardour_ui.cc | 21 ++--------- gtk2_ardour/ardour_ui.h | 8 ++-- gtk2_ardour/ardour_ui_ed.cc | 2 +- gtk2_ardour/utils.cc | 17 --------- gtk2_ardour/utils.h | 1 - 7 files changed, 92 insertions(+), 45 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 9020b6c74d..85408ca692 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -22,7 +22,8 @@ #include #include - +#include +#include #include #include "utils.h" @@ -34,7 +35,26 @@ using namespace Gtkmm2ext; using namespace sigc; using namespace std; -extern std::vector channel_combo_strings; +static const char* channel_setup_names[] = { + "mono", + "stereo", + "3 channels", + "4 channels", + "5 channels", + "8 channels", + "manual setup", + 0 +}; + +static const char* track_mode_names[] = { + "normal", + "tape", + 0 +}; + +static vector channel_combo_strings; +static vector track_mode_strings; + AddRouteDialog::AddRouteDialog () : Dialog (_("ardour: add track/bus")), @@ -43,6 +63,15 @@ AddRouteDialog::AddRouteDialog () routes_adjustment (1, 1, 32, 1, 4), routes_spinner (routes_adjustment) { + if (channel_combo_strings.empty()) { + channel_combo_strings = internationalize (channel_setup_names); + } + + if (track_mode_strings.empty()) { + track_mode_strings = internationalize (track_mode_names); + } + + set_name ("AddRouteDialog"); set_wmclass (X_("ardour_add_track_bus"), "Ardour"); set_position (Gtk::WIN_POS_MOUSE); @@ -65,8 +94,15 @@ AddRouteDialog::AddRouteDialog () hbrb->pack_start (bus_button, false, false); set_popdown_strings (channel_combo, channel_combo_strings); + set_popdown_strings (track_mode_combo, track_mode_strings); channel_combo.set_active_text (channel_combo_strings.front()); channel_combo.set_name (X_("ChannelCountSelector")); + + track_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen)); + bus_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen)); + + track_mode_combo.set_active_text (track_mode_strings.front()); + track_mode_combo.set_name (X_("ChannelCountSelector")); #if NOT_USEFUL_YET HBox *hbnt = manage (new HBox); @@ -78,6 +114,7 @@ AddRouteDialog::AddRouteDialog () get_vbox()->pack_start (*hbrb, false, false); get_vbox()->pack_start (*(manage (new Label ("Channel configuration"))), false, false); get_vbox()->pack_start (channel_combo, false, false); + get_vbox()->pack_start (track_mode_combo, false, false, 10); #if NOT_USEFUL_YET get_vbox()->pack_start (*hbnt, false, false); #endif @@ -92,6 +129,16 @@ AddRouteDialog::~AddRouteDialog () { } +void +AddRouteDialog::track_type_chosen () +{ + if (track_button.get_active()) { + track_mode_combo.set_sensitive (true); + } else { + track_mode_combo.set_sensitive (true); + } +} + bool AddRouteDialog::track () { @@ -110,8 +157,37 @@ AddRouteDialog::count () return (int) floor (routes_adjustment.get_value ()); } +ARDOUR::TrackMode +AddRouteDialog::mode () +{ + Glib::ustring str = track_mode_combo.get_active_text(); + if (str == _("normal")) { + return ARDOUR::Normal; + } else if (str == _("tape")) { + return ARDOUR::Destructive; + } else { + fatal << string_compose (X_("programming error: unknown track mode in add route dialog combo = %1"), str) + << endmsg; + /*NOTREACHED*/ + } + /* keep gcc happy */ + return ARDOUR::Normal; +} + int AddRouteDialog::channels () { - return channel_combo_get_channel_count (channel_combo); + string str = channel_combo.get_active_text(); + int chns; + + if (str == _("mono")) { + return 1; + } else if (str == _("stereo")) { + return 2; + } else if ((chns = atoi (str)) != 0) { + return chns; + } else { + return 0; + } } + diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index 76481fe025..759f3208b3 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -11,7 +11,7 @@ #include #include -#include +#include class AddRouteDialog : public Gtk::Dialog { @@ -23,6 +23,7 @@ class AddRouteDialog : public Gtk::Dialog std::string name_template (); int channels (); int count (); + ARDOUR::TrackMode mode(); private: Gtk::Entry name_template_entry; @@ -31,6 +32,9 @@ class AddRouteDialog : public Gtk::Dialog Gtk::Adjustment routes_adjustment; Gtk::SpinButton routes_spinner; Gtk::ComboBoxText channel_combo; + Gtk::ComboBoxText track_mode_combo; + + void track_type_chosen (); }; #endif /* __gtk_ardour_add_route_dialog_h__ */ diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 686652c4eb..eb084fb5ea 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -87,19 +87,6 @@ sigc::signal ARDOUR_UI::RapidScreenUpdate; sigc::signal ARDOUR_UI::SuperRapidScreenUpdate; sigc::signal ARDOUR_UI::Clock; -static const char* channel_setup_names[] = { - "mono", - "stereo", - "3 channels", - "4 channels", - "5 channels", - "8 channels", - "manual setup", - 0 -}; - -vector channel_combo_strings; - ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile) : Gtkmm2ext::UI ("ardour", argcp, argvp, rcfile), @@ -203,8 +190,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile) ARDOUR::Session::AskAboutPendingState.connect (mem_fun(*this, &ARDOUR_UI::pending_state_dialog)); - channel_combo_strings = internationalize (channel_setup_names); - /* have to wait for AudioEngine and Configuration before proceeding */ } @@ -903,7 +888,7 @@ ARDOUR_UI::session_add_midi_track () } void -ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels) +ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode) { Route* route; @@ -914,7 +899,7 @@ ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t o try { if (disk) { - if ((route = session->new_audio_track (input_channels, output_channels)) == 0) { + if ((route = session->new_audio_track (input_channels, output_channels, mode)) == 0) { error << _("could not create new audio track") << endmsg; } } else { @@ -2086,7 +2071,7 @@ ARDOUR_UI::add_route () while (count) { if (track) { - session_add_audio_track (input_chan, output_chan); + session_add_audio_track (input_chan, output_chan, add_route_dialog->mode()); } else { session_add_audio_bus (input_chan, output_chan); } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index f0637ad535..3b1ebd47d7 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -188,12 +188,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI void add_route (); - void session_add_audio_track (int input_channels, int32_t output_channels) { - session_add_audio_route (true, input_channels, output_channels); + void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode) { + session_add_audio_route (true, input_channels, output_channels, mode); } void session_add_audio_bus (int input_channels, int32_t output_channels) { - session_add_audio_route (false, input_channels, output_channels); + session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal); } void session_add_midi_track (); @@ -523,7 +523,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI void save_template (); - void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels); + void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode); void add_diskstream_to_menu (ARDOUR::DiskStream&); void diskstream_selected (gint32); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index b065f55a06..d2f6ea153e 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -176,7 +176,7 @@ ARDOUR_UI::install_actions () ActionManager::session_sensitive_actions.push_back (act); ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_splash)); - act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("add audio track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1)); + act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("add audio track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("add audio bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index acc9574a18..e609d0e33b 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -291,23 +291,6 @@ get_canvas_points (string who, uint32_t npoints) return new ArdourCanvas::Points (npoints); } -int -channel_combo_get_channel_count (Gtk::ComboBoxText& combo) -{ - string str = combo.get_active_text(); - int chns; - - if (str == _("mono")) { - return 1; - } else if (str == _("stereo")) { - return 2; - } else if ((chns = atoi (str)) != 0) { - return chns; - } else { - return 0; - } -} - static int32_t int_from_hex (char hic, char loc) { diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h index b6f3e0563a..b607ebdb64 100644 --- a/gtk2_ardour/utils.h +++ b/gtk2_ardour/utils.h @@ -64,7 +64,6 @@ unsigned char* xpm2rgba (const char** xpm, uint32_t& w, uint32_t& h); ArdourCanvas::Points* get_canvas_points (std::string who, uint32_t npoints); -int channel_combo_get_channel_count (Gtk::ComboBoxText& combo); Pango::FontDescription get_font_for_style (std::string widgetname); gint pane_handler (GdkEventButton*, Gtk::Paned*); -- cgit v1.2.3