summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-08-27 15:20:29 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-08-27 15:20:29 +0000
commit218b893464e0b5f42eda2dec42fe2b5413d6b65f (patch)
tree9b7e8d9e4c187fdcedae79c1e91ea2e47a638d89
parent8755c7124512613f4bfa74b13887285c64146747 (diff)
fix crashing mouse-button+'s' operation (generically, not just for 's'); more import changes to support SAE goals re: embedding
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2351 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/ardour-sae.menus1
-rw-r--r--gtk2_ardour/editor_audio_import.cc2
-rw-r--r--gtk2_ardour/editor_keyboard.cc8
-rw-r--r--gtk2_ardour/editor_ops.cc4
-rw-r--r--gtk2_ardour/sfdb_ui.cc66
-rw-r--r--gtk2_ardour/sfdb_ui.h11
6 files changed, 81 insertions, 11 deletions
diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus
index d9827a38dd..382a02d74e 100644
--- a/gtk2_ardour/ardour-sae.menus
+++ b/gtk2_ardour/ardour-sae.menus
@@ -13,6 +13,7 @@
<separator/>
<menuitem action='AddTrackBus'/>
<separator/>
+ <menuitem action='addExistingAudioFiles'/>
<separator/>
<menu name='Cleanup' action='Cleanup'>
<menuitem action='CleanupUnused'/>
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index d0b5f6dfa1..66521f5c15 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -110,7 +110,7 @@ Editor::external_audio_dialog ()
paths = browser.get_paths ();
- options = new SoundFileOptionsDialog (browser, paths, selection->tracks.size());
+ options = new SoundFileOptionsDialog (browser, *session, paths, selection->tracks.size());
options->show_all ();
response = options->run ();
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index e9082445c4..a8a4694b90 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -43,6 +43,14 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot, bool use_track_canvas, b
doit = true;
}
+ /* any use of "keyboard mouse buttons" invalidates an existing grab
+ */
+
+ if (drag_info.item) {
+ drag_info.item->ungrab (GDK_CURRENT_TIME);
+ drag_info.item = 0;
+ }
+
if (doit) {
if (entered_regionview && can_select) {
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index b046b763ce..dbfc17b011 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -153,8 +153,8 @@ Editor::split_regions_at (nframes_t where, RegionSelection& regions)
}
a = tmp;
- }
-
+ }
+
commit_reversible_command ();
_new_regionviews_show_envelope = false;
}
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 5633edf306..79fcddc6d1 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -21,7 +21,9 @@
#include <cerrno>
#include <sstream>
+#include <unistd.h>
#include <sys/stat.h>
+#include <sys/param.h>
#include <gtkmm/box.h>
#include <gtkmm/stock.h>
@@ -37,6 +39,7 @@
#include <ardour/audiofilesource.h>
#include <ardour/region_factory.h>
#include <ardour/source_factory.h>
+#include <ardour/profile.h>
#include "ardour_ui.h"
#include "editing.h"
@@ -71,8 +74,7 @@ SoundFileBox::SoundFileBox ()
set_size_request (250, 250);
Label* label = manage (new Label);
- label->set_use_markup (true);
- label->set_text (_("<b>Soundfile Info</b>"));
+ label->set_markup (_("<b>Soundfile Info</b>"));
border_frame.set_label_widget (*label);
border_frame.add (main_box);
@@ -503,7 +505,7 @@ SoundFileChooser::get_filename ()
}
-SoundFileOptionsDialog::SoundFileOptionsDialog (Window& parent, const vector<Glib::ustring>& p, int selected_tracks)
+SoundFileOptionsDialog::SoundFileOptionsDialog (Window& parent, const Session& s, const vector<Glib::ustring>& p, int selected_tracks)
: ArdourDialog (parent, _("External Audio Options"), false),
mode (ImportAsTrack),
paths (p),
@@ -515,9 +517,11 @@ SoundFileOptionsDialog::SoundFileOptionsDialog (Window& parent, const vector<Gli
as_tape_tracks (rgroup1, _("Add files as new tape tracks")),
import (rgroup2, _("Copy to Ardour-native files")),
embed (rgroup2, _("Use file without copying")),
+ session (s),
selected_track_cnt (selected_tracks)
{
selection_includes_multichannel = check_multichannel_status (paths);
+ selection_can_be_embedded_with_links = check_link_status (s, paths);
block_two.set_border_width (12);
block_three.set_border_width (12);
@@ -535,9 +539,22 @@ SoundFileOptionsDialog::SoundFileOptionsDialog (Window& parent, const vector<Gli
block_three.pack_start (merge_stereo, false, false);
block_three.pack_start (split_files, false, false);
-
- block_four.pack_start (import, false, false);
- block_four.pack_start (embed, false, false);
+
+ if (Profile->get_sae()) {
+ if (selection_can_be_embedded_with_links) {
+ block_four.pack_start (import, false, false);
+ block_four.pack_start (embed, false, false);
+ } else {
+ Label* message = manage (new Label);
+ message->set_text (string_compose (_("%1 will be imported into Ardour's native format"),
+ (selected_track_cnt > 1 ? "These files" : "This file")));
+
+ block_four.pack_start (*message, false, false);
+ }
+ } else {
+ block_four.pack_start (import, false, false);
+ block_four.pack_start (embed, false, false);
+ }
get_vbox()->set_spacing (12);
get_vbox()->pack_start (block_two, false, false);
@@ -604,3 +621,40 @@ SoundFileOptionsDialog::check_multichannel_status (const vector<Glib::ustring>&
return false;
}
+bool
+SoundFileOptionsDialog::check_link_status (const Session& s, const vector<Glib::ustring>& paths)
+{
+ string tmpdir = s.sound_dir();
+ bool ret = false;
+
+ tmpdir += "/linktest";
+
+ if (mkdir (tmpdir.c_str(), 0744)) {
+ if (errno != EEXIST) {
+ return false;
+ }
+ }
+
+ for (vector<Glib::ustring>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
+
+ char tmpc[MAXPATHLEN+1];
+
+ snprintf (tmpc, sizeof(tmpc), "%s/%s", tmpdir.c_str(), Glib::path_get_basename (*i).c_str());
+
+ /* can we link ? */
+
+ if (link ((*i).c_str(), tmpc)) {
+ goto out;
+ }
+
+ unlink (tmpc);
+ }
+
+ ret = true;
+
+ out:
+ rmdir (tmpdir.c_str());
+ return ret;
+}
+
+
diff --git a/gtk2_ardour/sfdb_ui.h b/gtk2_ardour/sfdb_ui.h
index 02d9caa2e3..117851480c 100644
--- a/gtk2_ardour/sfdb_ui.h
+++ b/gtk2_ardour/sfdb_ui.h
@@ -42,6 +42,10 @@
#include "ardour_dialog.h"
#include "editing.h"
+namespace ARDOUR {
+ class Session;
+};
+
class SoundFileBox : public Gtk::VBox
{
public:
@@ -150,7 +154,7 @@ class SoundFileOptionsDialog : public ArdourDialog
Gtk::RadioButtonGroup rgroup2;
public:
- SoundFileOptionsDialog (Gtk::Window& parent, const vector<Glib::ustring>& p, int selected_tracks);
+ SoundFileOptionsDialog (Gtk::Window& parent, const ARDOUR::Session&, const vector<Glib::ustring>& p, int selected_tracks);
Editing::ImportMode mode;
@@ -168,13 +172,16 @@ class SoundFileOptionsDialog : public ArdourDialog
Gtk::RadioButton embed;
private:
+ const ARDOUR::Session& session;
int selected_track_cnt;
bool selection_includes_multichannel;
+ bool selection_can_be_embedded_with_links;
Gtk::VBox block_two;
Gtk::VBox block_three;
Gtk::VBox block_four;
-
+
static bool check_multichannel_status (const std::vector<Glib::ustring>& paths);
+ static bool check_link_status (const ARDOUR::Session& s, const std::vector<Glib::ustring>& paths);
void mode_changed ();
};