From 0059557c3acef6873af860fca79796cf22ef1b84 Mon Sep 17 00:00:00 2001
From: Thomas Brand <tom@trellis.ch>
Date: Fri, 9 Aug 2013 05:08:19 +0200
Subject: [PATCH] add actions to quickly add one normal mode mono and stereo
 audio track

---
 gtk2_ardour/ardour.menus.in   |    4 +++-
 gtk2_ardour/editor.h          |    2 ++
 gtk2_ardour/editor_actions.cc |    3 +++
 gtk2_ardour/editor_ops.cc     |   40 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 15f1bde..e134490 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -325,7 +325,9 @@
     </menu>
 
     <menu action='TrackMenu'>
-      <menuitem action='AddTrackBus'/>	
+      <menuitem action='AddTrackBus'/>
+      <menuitem action='add-mono-track'/>
+      <menuitem action='add-stereo-track'/>
       <menuitem action='insert-time'/>
       <menuitem action="move-selected-tracks-up"/>
       <menuitem action="move-selected-tracks-down"/>
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 033888c..4e18b39 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1180,6 +1180,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	void do_insert_time ();
 	void insert_time (framepos_t, framecnt_t, Editing::InsertTimeOption, bool, bool, bool, bool, bool, bool);
 
+	void add_single_audio_track (int channels);
+
 	void tab_to_transient (bool forward);
 
 	void set_tempo_from_region ();
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index a5e2e8a..7152a6c 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -359,6 +359,9 @@ Editor::register_actions ()
 
 	ActionManager::register_toggle_action (editor_actions, "toggle-stationary-playhead", _("Stationary Playhead"), (mem_fun(*this, &Editor::toggle_stationary_playhead)));
 
+	reg_sens (editor_actions, "add-mono-track", _("Add Audio Track (Mono)"), sigc::bind (sigc::mem_fun(*this, &Editor::add_single_audio_track),1));
+	reg_sens (editor_actions, "add-stereo-track", _("Add Audio Track (Stereo)") ,sigc::bind (sigc::mem_fun(*this, &Editor::add_single_audio_track),2));
+
 	act = reg_sens (editor_actions, "insert-time", _("Insert Time"), (sigc::mem_fun(*this, &Editor::do_insert_time)));
 	ActionManager::track_selection_sensitive_actions.push_back (act);
 
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 93a53dd..f38b703 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -6535,6 +6535,46 @@ edit your ardour.rc file to set the\n\
 }
 
 void
+Editor::add_single_audio_track (int channels) //1=mono, 2=stereo
+{
+	if (!_session) {
+		return;
+	}
+
+	int track_count=1;
+
+	ChanCount input_chan;
+	input_chan.set (DataType::AUDIO, channels);
+	ChanCount output_chan;
+
+	AutoConnectOption oac = Config->get_output_auto_connect();
+
+	if (oac & AutoConnectMaster) {
+		output_chan.set (DataType::AUDIO, (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan.n_audio()));
+		output_chan.set (DataType::MIDI, 0);
+	} else {
+		output_chan = input_chan;
+	}
+
+	string name_template="Audio";
+	RouteGroup* route_group=_session->route_group_by_name("No Group");
+
+	list<boost::shared_ptr<AudioTrack> > tracks;
+
+	try
+	{
+		tracks = _session->new_audio_track (input_chan.n_audio(), output_chan.n_audio(), ARDOUR::Normal, route_group, track_count, name_template);
+
+		if (tracks.size() != track_count) {
+			cerr << "COULD NOT CREATE AUDIO TRACK\n";
+		}
+	}
+	catch (...) {
+		cerr << "NOT ENOUGH PORTS\n";
+	}
+}
+
+void
 Editor::do_insert_time ()
 {
 	if (selection->tracks.empty()) {
-- 
1.7.9.5

