recent_session_display.show();
recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &SessionDialog::recent_row_activated));
+ recent_session_display.signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::recent_button_press), false);
}
void
session_filter.add_pattern (string_compose(X_("*%1"), ARDOUR::statefile_suffix));
session_filter.set_name (string_compose (_("%1 sessions"), PROGRAM_NAME));
existing_session_chooser.add_filter (session_filter);
+
+ FileFilter archive_filter;
+ archive_filter.add_pattern (X_("*.tar.xz"));
+ archive_filter.set_name (_("Session Archives"));
+ existing_session_chooser.add_filter (archive_filter);
+
existing_session_chooser.set_filter (session_filter);
Gtkmm2ext::add_volume_shortcuts (existing_session_chooser);
float sr;
SampleFormat sf;
+ std::string program_version;
std::string state_file_basename;
g_stat (s.c_str(), &gsb);
row[recent_session_columns.fullpath] = s;
- row[recent_session_columns.tip] = Gtkmm2ext::markup_escape_text (dirname);
row[recent_session_columns.time_modified] = gsb.st_mtime;
- if (Session::get_info_from_path (s, sr, sf) == 0) {
+ if (Session::get_info_from_path (s, sr, sf, program_version) == 0) {
row[recent_session_columns.sample_rate] = rate_as_string (sr);
switch (sf) {
case FormatFloat:
row[recent_session_columns.disk_format] = "--";
}
+ if (program_version.empty()) {
+ row[recent_session_columns.tip] = Gtkmm2ext::markup_escape_text (dirname);
+ } else {
+ row[recent_session_columns.tip] = Gtkmm2ext::markup_escape_text (dirname + "\n" + string_compose (_("Last modified with: %1"), program_version));
+ }
+
++session_snapshot_count;
if (state_file_names.size() > 1) {
int64_t most_recent = 0;
// add the children
+ int kidcount = 0;
for (std::vector<std::string>::iterator i2 = state_file_names.begin(); i2 != state_file_names.end(); ++i2) {
s = Glib::build_filename (dirname, *i2 + statefile_suffix);
most_recent = gsb.st_mtime;
}
- if (Session::get_info_from_path (s, sr, sf) == 0) {
- child_row[recent_session_columns.sample_rate] = rate_as_string (sr);
- switch (sf) {
- case FormatFloat:
- child_row[recent_session_columns.disk_format] = _("32-bit float");
- break;
- case FormatInt24:
- child_row[recent_session_columns.disk_format] = _("24-bit");
- break;
- case FormatInt16:
- child_row[recent_session_columns.disk_format] = _("16-bit");
- break;
+ if (++kidcount < 5) {
+ // parse "modified with" for the first 5 snapshots
+ if (Session::get_info_from_path (s, sr, sf, program_version) == 0) {
+#if 0
+ child_row[recent_session_columns.sample_rate] = rate_as_string (sr);
+ switch (sf) {
+ case FormatFloat:
+ child_row[recent_session_columns.disk_format] = _("32-bit float");
+ break;
+ case FormatInt24:
+ child_row[recent_session_columns.disk_format] = _("24-bit");
+ break;
+ case FormatInt16:
+ child_row[recent_session_columns.disk_format] = _("16-bit");
+ break;
+ }
+#else
+ child_row[recent_session_columns.sample_rate] = "";
+ child_row[recent_session_columns.disk_format] = "";
+#endif
+ } else {
+ child_row[recent_session_columns.sample_rate] = "??";
+ child_row[recent_session_columns.disk_format] = "--";
+ }
+ if (!program_version.empty()) {
+ child_row[recent_session_columns.tip] = Gtkmm2ext::markup_escape_text (string_compose (_("Last modified with: %1"), program_version));
}
} else {
- child_row[recent_session_columns.sample_rate] = "??";
- child_row[recent_session_columns.disk_format] = "--";
+ child_row[recent_session_columns.sample_rate] = "";
+ child_row[recent_session_columns.disk_format] = "";
}
++session_snapshot_count;
response (RESPONSE_ACCEPT);
}
+bool
+SessionDialog::recent_button_press (GdkEventButton* ev)
+{
+ if ((ev->type == GDK_BUTTON_PRESS) && (ev->button == 3) ) {
+
+ TreeModel::Path path;
+ TreeViewColumn* column;
+ int cellx, celly;
+ if (recent_session_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
+ Glib::RefPtr<Gtk::TreeView::Selection> selection = recent_session_display.get_selection();
+ if (selection) {
+ selection->unselect_all();
+ selection->select(path);
+ }
+ }
+
+ if (recent_session_display.get_selection()->count_selected_rows() > 0) {
+ recent_context_mennu (ev);
+ }
+ }
+ return false;
+}
+
+void
+SessionDialog::recent_context_mennu (GdkEventButton *ev)
+{
+ using namespace Gtk::Menu_Helpers;
+
+ TreeIter iter = recent_session_display.get_selection()->get_selected();
+ assert (iter);
+ string s = (*iter)[recent_session_columns.fullpath];
+ if (Glib::file_test (s, Glib::FILE_TEST_IS_REGULAR)) {
+ s = Glib::path_get_dirname (s);
+ }
+ if (!Glib::file_test (s, Glib::FILE_TEST_IS_DIR)) {
+ return;
+ }
+
+ Gtk::TreeModel::Path tpath = recent_session_model->get_path(iter);
+ const bool is_child = tpath.up () && tpath.up ();
+
+ Gtk::Menu* m = manage (new Menu);
+ MenuList& items = m->items ();
+ items.push_back (MenuElem (s, sigc::bind (sigc::hide_return (sigc::ptr_fun (&PBD::open_folder)), s)));
+ if (!is_child) {
+ items.push_back (SeparatorElem());
+ items.push_back (MenuElem (_("Remove session from recent list"), sigc::mem_fun (*this, &SessionDialog::recent_remove_selected)));
+ }
+ m->popup (ev->button, ev->time);
+}
+
+void
+SessionDialog::recent_remove_selected ()
+{
+ TreeIter iter = recent_session_display.get_selection()->get_selected();
+ assert (iter);
+ string s = (*iter)[recent_session_columns.fullpath];
+ if (Glib::file_test (s, Glib::FILE_TEST_IS_REGULAR)) {
+ s = Glib::path_get_dirname (s);
+ }
+ ARDOUR::remove_recent_sessions (s);
+ redisplay_recent_sessions ();
+}
+
void
SessionDialog::disable_plugins_clicked ()
{