+/*
+ Copyright (C) 2010 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
#include <fstream>
#include <algorithm>
#include "pbd/file_utils.h"
#include "pbd/filesystem.h"
#include "pbd/replace_all.h"
+#include "pbd/whitespace.h"
#include "ardour/filesystem_paths.h"
#include "ardour/recent_sessions.h"
#include "opts.h"
#include "engine_dialog.h"
#include "i18n.h"
+#include "utils.h"
using namespace std;
using namespace Gtk;
, _output_limit_count_adj (1, 0, 100, 1, 10, 0)
, _input_limit_count_adj (1, 0, 100, 1, 10, 0)
, _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
-
+ , _existing_session_chooser_used (false)
{
audio_page_index = -1;
initial_choice_index = -1;
set_position (WIN_POS_CENTER);
set_border_width (12);
- sys::path icon_file;
-
- if (!find_file_in_search_path (ardour_search_path() + system_data_search_path().add_subdirectory_to_paths("icons"), "ardour_icon_48px.png", icon_file)) {
- throw failed_constructor();
- }
-
- try {
- icon_pixbuf = Gdk::Pixbuf::create_from_file (icon_file.to_string());
- }
-
- catch (...) {
+ if ((icon_pixbuf = ::get_icon ("ardour_icon_48px")) == 0) {
throw failed_constructor();
}
}
}
-Glib::ustring
+std::string
ArdourStartup::session_template_name ()
{
if (!load_template_override.empty()) {
}
if (ic_existing_session_button.get_active()) {
- return ustring();
+ return string();
}
if (use_template_button.get_active()) {
}
}
-Glib::ustring
+std::string
ArdourStartup::session_name (bool& should_be_new)
{
if (ic_new_session_button.get_active()) {
should_be_new = true;
- return new_name_entry.get_text ();
+ string val = new_name_entry.get_text ();
+ strip_whitespace_edges (val);
+ return val;
+ } else if (_existing_session_chooser_used) {
+ /* existing session chosen from file chooser */
+ should_be_new = false;
+ return existing_session_chooser.get_filename ();
} else {
+ /* existing session chosen from recent list */
should_be_new = false;
TreeIter iter = recent_session_display.get_selection()->get_selected();
}
}
-Glib::ustring
+std::string
ArdourStartup::session_folder ()
{
if (ic_new_session_button.get_active()) {
- Glib::ustring legal_session_folder_name = legalize_for_path (new_name_entry.get_text());
+ std::string legal_session_folder_name = legalize_for_path (new_name_entry.get_text());
return Glib::build_filename (new_folder_chooser.get_current_folder(), legal_session_folder_name);
+ } else if (_existing_session_chooser_used) {
+ /* existing session chosen from file chooser */
+ return existing_session_chooser.get_current_folder ();
} else {
+ /* existing session chosen from recent list */
TreeIter iter = recent_session_display.get_selection()->get_selected();
if (iter) {
new_user_page_index = append_page (*vbox);
set_page_type (*vbox, ASSISTANT_PAGE_INTRO);
- set_page_title (*vbox, _("Welcome to Ardour"));
+ set_page_title (*vbox, string_compose (_("Welcome to %1"), PROGRAM_NAME));
set_page_header_image (*vbox, icon_pixbuf);
set_page_complete (*vbox, true);
}
HBox* hbox = manage (new HBox);
VBox* vbox = manage (new VBox);
- txt->set_markup (_("\
-Each project that you work on with Ardour has its own folder.\n\
+ txt->set_markup (string_compose (_("\
+Each project that you work on with %1 has its own folder.\n\
These can require a lot of disk space if you are recording audio.\n\
\n\
-Where would you like new Ardour sessions to be stored by default?\n\n\
-<i>(You can put new sessions anywhere, this is just a default)</i>"));
+Where would you like new %1 sessions to be stored by default?\n\n\
+<i>(You can put new sessions anywhere, this is just a default)</i>"), PROGRAM_NAME));
txt->set_alignment (0.0, 0.0);
vbox->set_spacing (18);
bool
ArdourStartup::initial_button_press (GdkEventButton *event)
{
- if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1)
- {
+ if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) {
set_current_page(session_page_index);
return true;
} else {
}
static bool
-lost_name_entry_focus (GdkEventFocus* ev)
+lost_name_entry_focus (GdkEventFocus*)
{
cerr << "lost focus\n";
return false;
}
new_folder_chooser.set_title (_("Select folder for session"));
+#ifdef GTKOSX
+ new_folder_chooser->add_shortcut_folder ("/Volumes");
+#endif
+
vbox1->pack_start (*hbox2, false, false);
session_new_vbox.pack_start (*vbox1, false, false);
void
ArdourStartup::setup_existing_session_page ()
{
+ recent_session_model = TreeStore::create (recent_session_columns);
+ redisplay_recent_sessions ();
+
if (!session_hbox.get_children().empty()) {
session_hbox.remove (**session_hbox.get_children().begin());
}
- if (recent_scroller.get_children().empty()) {
+ if (session_existing_vbox.get_children().empty()) {
- recent_session_model = TreeStore::create (recent_session_columns);
recent_session_display.set_model (recent_session_model);
recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
recent_session_display.set_headers_visible (false);
recent_session_display.get_selection()->set_mode (SELECTION_BROWSE);
-
+
recent_session_display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::recent_session_row_selected));
-
+
recent_scroller.add (recent_session_display);
recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
recent_scroller.set_shadow_type (Gtk::SHADOW_IN);
-
+
recent_session_display.show();
- }
-
- recent_scroller.show();
- int cnt = redisplay_recent_sessions ();
- recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &ArdourStartup::recent_row_activated));
+
+ recent_scroller.show();
+ int cnt = redisplay_recent_sessions ();
+ recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &ArdourStartup::recent_row_activated));
+
+ if (cnt > 4) {
+ recent_scroller.set_size_request (-1, 300);
+ }
- if (cnt > 4) {
- recent_scroller.set_size_request (-1, 300);
+ session_existing_vbox.set_spacing (8);
+ session_existing_vbox.pack_start (recent_scroller, true, true);
+
+ existing_session_chooser.set_title (_("Select session file"));
+ existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &ArdourStartup::existing_session_selected));
+
+#ifdef GTKOSX
+ existing_session_chooser->add_shortcut_folder ("/Volumes");
+#endif
+
+ HBox* hbox = manage (new HBox);
+ hbox->set_spacing (4);
+ hbox->pack_start (*manage (new Label (_("Browse:"))), PACK_SHRINK);
+ hbox->pack_start (existing_session_chooser);
+ session_existing_vbox.pack_start (*hbox);
+ hbox->show_all ();
}
+
+ session_existing_vbox.show_all ();
+ session_hbox.pack_start (session_existing_vbox, true, true);
- session_hbox.pack_start (recent_scroller, true, true);
set_page_title (session_vbox, _("Select a session"));
set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
}
set_page_complete (session_vbox, true);
move_along_now ();
}
+
+void
+ArdourStartup::existing_session_selected ()
+{
+ _existing_session_chooser_used = true;
+
+ set_page_complete (session_vbox, true);
+ move_along_now ();
+}