fix d6029f9 (recent sort-order)
[ardour.git] / gtk2_ardour / session_dialog.cc
index 2664bc1ddb86f5cfb35a15fcdcb0a2fcf20a3797..e47f390eb694825f6633ae96f1cf2f6dc9997e83 100644 (file)
@@ -321,6 +321,8 @@ SessionDialog::setup_initial_choice_box ()
        recent_label.set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", _("Recent Sessions")));
        
        recent_session_model = TreeStore::create (recent_session_columns);
+       recent_session_model->signal_sort_column_changed().connect (sigc::mem_fun (*this, &SessionDialog::recent_session_sort_changed));
+
        
        recent_session_display.set_model (recent_session_model);
        recent_session_display.append_column (_("Session Name"), recent_session_columns.visible_name);
@@ -599,7 +601,7 @@ SessionDialog::redisplay_recent_sessions ()
                recent_session_display.set_model (recent_session_model);
                return 0;
        }
-       //
+
        // sort them alphabetically
        sort (rs.begin(), rs.end(), cmp);
 
@@ -704,7 +706,7 @@ SessionDialog::redisplay_recent_sessions ()
                                child_row[recent_session_columns.time_modified] = gsb.st_mtime;
 
                                Glib::DateTime gdt(Glib::DateTime::create_now_local (gsb.st_mtime));
-                               child_row[recent_session_columns.time_formatted] = gdt.format ("%F");
+                               child_row[recent_session_columns.time_formatted] = gdt.format ("%F %H:%M");
 
                                if (gsb.st_mtime > most_recent) {
                                        most_recent = gsb.st_mtime;
@@ -740,7 +742,7 @@ SessionDialog::redisplay_recent_sessions ()
                }
 
                Glib::DateTime gdt(Glib::DateTime::create_now_local (row[recent_session_columns.time_modified]));
-               row[recent_session_columns.time_formatted] = gdt.format ("%F");
+               row[recent_session_columns.time_formatted] = gdt.format ("%F %H:%M");
        }
 
        recent_session_display.set_tooltip_column(1); // recent_session_columns.tip 
@@ -755,9 +757,29 @@ SessionDialog::redisplay_recent_sessions ()
                pColumn->set_sort_column (recent_session_columns.time_modified); // unixtime
        }
 
+       int32_t sort = ARDOUR_UI::config()->get_recent_session_sort();
+       if (abs(sort) != 1 + recent_session_columns.visible_name.index () &&
+           abs(sort) != 1 + recent_session_columns.time_modified.index ()) {
+               sort = 1 + recent_session_columns.visible_name.index();
+       }
+       recent_session_model->set_sort_column (abs (sort) -1, sort < 0 ? Gtk::SORT_DESCENDING : Gtk::SORT_ASCENDING);
+
        return session_snapshot_count;
 }
 
+void
+SessionDialog::recent_session_sort_changed ()
+{
+       int column;
+       SortType order;
+       if (recent_session_model->get_sort_column_id (column, order)) {
+               int32_t sort = (column + 1) * (order == Gtk::SORT_DESCENDING ? -1 : 1);
+               if (sort != ARDOUR_UI::config()->get_recent_session_sort()) {
+                       ARDOUR_UI::config()->set_recent_session_sort(sort);
+               }
+       }
+}
+
 void
 SessionDialog::recent_session_row_selected ()
 {