diff options
Diffstat (limited to 'gtk2_ardour')
-rwxr-xr-x | gtk2_ardour/ardev | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 139 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dependents.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/audio_streamview.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/automation_line.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 9 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_export_audio.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/region_gain_line.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/sfdb_ui.cc | 2 |
11 files changed, 111 insertions, 63 deletions
diff --git a/gtk2_ardour/ardev b/gtk2_ardour/ardev index 751557d634..d3d44e55fe 100755 --- a/gtk2_ardour/ardev +++ b/gtk2_ardour/ardev @@ -1,3 +1,3 @@ #!/bin/sh source `dirname "$0"`/ardev_common.sh -exec gtk2_ardour/ardour.bin --novst "$*" +exec gtk2_ardour/ardour.bin --novst $* diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index c65346881a..0c8c26fdf0 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1616,6 +1616,9 @@ ARDOUR_UI::save_template () void ARDOUR_UI::new_session (bool startup, std::string predetermined_path) { + string session_name; + string session_path; + int response = Gtk::RESPONSE_NONE; new_session_dialog->set_modal(true); @@ -1637,14 +1640,28 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path) new_session_dialog->reset(); } else if (response == Gtk::RESPONSE_YES) { - /* YES == OPEN, but there's no enum for that */ - std::string session_name = new_session_dialog->session_name(); - std::string session_path = new_session_dialog->session_folder(); - load_session (session_path, session_name); + /* YES == OPEN, but there's no enum for that */ + session_name = new_session_dialog->session_name(); + + if (session_name.empty()) { + response = Gtk::RESPONSE_NONE; + cerr << "session name is empty\n"; + continue; + } + + if (session_name[0] == '/' || + (session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') || + (session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) { + load_session (Glib::path_get_dirname (session_name), session_name); + } else { + session_path = new_session_dialog->session_folder(); + load_session (session_path, session_name); + } } else if (response == Gtk::RESPONSE_OK) { + if (new_session_dialog->get_current_page() == 1) { /* XXX this is a bit of a hack.. @@ -1652,93 +1669,121 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path) if we're on page 1 (the load page) Unfortunately i can't see how atm.. */ - - std::string session_name = new_session_dialog->session_name(); - std::string session_path = new_session_dialog->session_folder(); - load_session (session_path, session_name); - + + if (session_name.empty()) { + response = Gtk::RESPONSE_NONE; + cerr << "session name is empty 2\n"; + continue; + } + + if (session_name[0] == '/' || + (session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') || + (session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) { + load_session (Glib::path_get_dirname (session_name), session_name); + } else { + session_path = new_session_dialog->session_folder(); + load_session (session_path, session_name); + } + } else { _session_is_new = true; - std::string session_name = new_session_dialog->session_name(); - std::string session_path = new_session_dialog->session_folder(); + session_name = new_session_dialog->session_name(); + if (session_name.empty()) { + response = Gtk::RESPONSE_NONE; + cerr << "session name is empty 3\n"; + continue; + } + + if (session_name[0] == '/' || + (session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') || + (session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) { + + session_path = Glib::path_get_dirname (session_name); + session_name = Glib::path_get_basename (session_name); + + } else { + + std::string session_path = new_session_dialog->session_folder(); + + } //XXX This is needed because session constructor wants a //non-existant path. hopefully this will be fixed at some point. - - session_path = Glib::build_filename(session_path, session_name); - + + session_path = Glib::build_filename (session_path, session_name); + std::string template_name = new_session_dialog->session_template_name(); - + if (new_session_dialog->use_session_template()) { - - load_session (session_path, session_name, &template_name); + + load_session (session_path, session_name, &template_name); } else { - - uint32_t cchns; + + uint32_t cchns; uint32_t mchns; Session::AutoConnectOption iconnect; Session::AutoConnectOption oconnect; - + if (new_session_dialog->create_control_bus()) { - cchns = (uint32_t) new_session_dialog->control_channel_count(); + cchns = (uint32_t) new_session_dialog->control_channel_count(); } else { - cchns = 0; + cchns = 0; } - + if (new_session_dialog->create_master_bus()) { - mchns = (uint32_t) new_session_dialog->master_channel_count(); + mchns = (uint32_t) new_session_dialog->master_channel_count(); } else { - mchns = 0; + mchns = 0; } - + if (new_session_dialog->connect_inputs()) { - iconnect = Session::AutoConnectPhysical; + iconnect = Session::AutoConnectPhysical; } else { - iconnect = Session::AutoConnectOption (0); + iconnect = Session::AutoConnectOption (0); } - + /// @todo some minor tweaks. - + if (new_session_dialog->connect_outs_to_master()) { - oconnect = Session::AutoConnectMaster; + oconnect = Session::AutoConnectMaster; } else if (new_session_dialog->connect_outs_to_physical()) { - oconnect = Session::AutoConnectPhysical; + oconnect = Session::AutoConnectPhysical; } else { - oconnect = Session::AutoConnectOption (0); + oconnect = Session::AutoConnectOption (0); } - + uint32_t nphysin = (uint32_t) new_session_dialog->input_limit_count(); uint32_t nphysout = (uint32_t) new_session_dialog->output_limit_count(); - + build_session (session_path, - session_name, - cchns, - mchns, - iconnect, - oconnect, - nphysin, - nphysout, - engine->frame_rate() * 60 * 5); + session_name, + cchns, + mchns, + iconnect, + oconnect, + nphysin, + nphysout, + engine->frame_rate() * 60 * 5); } - } + } } } while (response == Gtk::RESPONSE_NONE); + show(); new_session_dialog->get_window()->set_cursor(); - new_session_dialog->hide(); } void ARDOUR_UI::close_session() { - unload_session(); - new_session (); + unload_session(); + new_session (); } int diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index 0603fc6baa..bf096f86c1 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -79,6 +79,10 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s) { editor->connect_to_session (s); mixer->connect_to_session (s); + + /* its safe to do this now */ + + s->restore_history (s->snap_name()); } void diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index beb8cb8d2e..fcf2289570 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -69,6 +69,7 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv) use_rec_regions = tv.editor.show_waveforms_recording (); last_rec_peak_frame = 0; + } AudioStreamView::~AudioStreamView () diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index f8262d2a2d..8311025b02 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -163,9 +163,8 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible XMLNode& get_state (void); int set_state (const XMLNode&); - PBD::ID id() { return _id; } protected: - PBD::ID _id; + string _name; guint32 _height; uint32_t _line_color; diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 1b2d61a136..b9d14d4475 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1327,6 +1327,7 @@ Editor::connect_to_session (Session *t) } /* register for undo history */ + session->register_with_memento_command_factory(_id, this); } @@ -2109,6 +2110,9 @@ Editor::set_state (const XMLNode& node) int x, y, xoff, yoff; Gdk::Geometry g; + if ((prop = node.property ("id")) != 0) { + _id = prop->value (); + } if ((geometry = find_named_node (node, "geometry")) == 0) { @@ -2240,6 +2244,9 @@ Editor::get_state () XMLNode* node = new XMLNode ("Editor"); char buf[32]; + _id.print (buf); + node->add_property ("id", buf); + if (is_realized()) { Glib::RefPtr<Gdk::Window> win = get_window(); @@ -2249,7 +2256,7 @@ Editor::get_state () win->get_size(width, height); XMLNode* geometry = new XMLNode ("geometry"); - char buf[32]; + snprintf(buf, sizeof(buf), "%d", width); geometry->add_property("x_size", string(buf)); snprintf(buf, sizeof(buf), "%d", height); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 49a5a7b94f..81bbbdaaab 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -143,8 +143,6 @@ class Editor : public PublicEditor XMLNode& get_state (); int set_state (const XMLNode& ); - PBD::ID id() { return _id; } - void set_mouse_mode (Editing::MouseMode, bool force=true); void step_mouse_mode (bool next); Editing::MouseMode current_mouse_mode () { return mouse_mode; } @@ -349,8 +347,6 @@ class Editor : public PublicEditor ARDOUR::AudioEngine& engine; bool constructed; - PBD::ID _id; - PlaylistSelector* _playlist_selector; void set_frames_per_unit (double); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 75517ec18d..2b3d983ab4 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -270,7 +270,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool idspec += string_compose(":%1", n); try { - source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (idspec, (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0)))); + source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (*session, idspec, (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0)))); sources.push_back(source); } diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index dc7fadb470..2a62f7a751 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -208,7 +208,7 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region) try { - fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (path, AudioFileSource::Flag (0))); + fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (*session, path, AudioFileSource::Flag (0))); } catch (failed_constructor& err) { @@ -339,7 +339,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi path = s; try { - fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (path, AudioFileSource::Flag (0))); + fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (*session, path, AudioFileSource::Flag (0))); } catch (failed_constructor& err) { diff --git a/gtk2_ardour/region_gain_line.h b/gtk2_ardour/region_gain_line.h index 02340c8bae..3781fe60bb 100644 --- a/gtk2_ardour/region_gain_line.h +++ b/gtk2_ardour/region_gain_line.h @@ -26,16 +26,12 @@ class AudioRegionGainLine : public AutomationLine void remove_point (ControlPoint&); - PBD::ID id() { return _id; } - private: ARDOUR::Session& session; AudioRegionView& rv; UndoAction get_memento(); - - PBD::ID _id; }; diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 5cfcf56337..124b33a9f1 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -198,7 +198,7 @@ SoundFileBox::play_btn_clicked () for (int n = 0; n < sf_info.channels; ++n) { try { - afs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (path+":"+string_compose("%1", n), AudioFileSource::Flag (0))); + afs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (*_session, path+":"+string_compose("%1", n), AudioFileSource::Flag (0))); srclist.push_back(afs); } catch (failed_constructor& err) { |