diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-08-27 15:20:29 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-08-27 15:20:29 +0000 |
commit | 218b893464e0b5f42eda2dec42fe2b5413d6b65f (patch) | |
tree | 9b7e8d9e4c187fdcedae79c1e91ea2e47a638d89 /gtk2_ardour | |
parent | 8755c7124512613f4bfa74b13887285c64146747 (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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour-sae.menus | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_keyboard.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/sfdb_ui.cc | 66 | ||||
-rw-r--r-- | gtk2_ardour/sfdb_ui.h | 11 |
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 (); }; |