French translation update
[ardour.git] / gtk2_ardour / session_dialog.cc
index 22023f75bf09aa1462bda7a4bc9afe089c0b5d91..f94074f718081e213871ea24fbcc6091151b437a 100644 (file)
@@ -41,6 +41,7 @@
 #include "pbd/openuri.h"
 
 #include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/keyboard.h"
 
 #include "ardour/audioengine.h"
 #include "ardour/filesystem_paths.h"
@@ -54,7 +55,7 @@
 #include "session_dialog.h"
 #include "opts.h"
 #include "engine_dialog.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
 #include "tooltips.h"
 #include "ui_config.h"
 #include "utils.h"
@@ -87,6 +88,7 @@ SessionDialog::SessionDialog (bool require_new, const std::string& session_name,
        open_button = add_button (Stock::OPEN, RESPONSE_ACCEPT);
 
        back_button->signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::back_button_pressed), false);
+       open_button->signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::open_button_pressed), false);
 
        open_button->set_sensitive (false);
        back_button->set_sensitive (false);
@@ -322,6 +324,7 @@ SessionDialog::setup_recent_sessions ()
 
        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
@@ -348,7 +351,10 @@ SessionDialog::setup_initial_choice_box ()
 
        string image_path;
 
-       if (find_file (ardour_data_search_path(), "small-splash.png", image_path)) {
+       Searchpath rc (ARDOUR::ardour_data_search_path());
+       rc.add_subdirectory_to_paths ("resources");
+
+       if (find_file (rc, PROGRAM_NAME "-small-splash.png", image_path)) {
                Gtk::Image* image;
                if ((image = manage (new Gtk::Image (image_path))) != 0) {
                        hbox->pack_start (*image, false, false);
@@ -475,6 +481,16 @@ SessionDialog::back_button_pressed (GdkEventButton*)
        return true;
 }
 
+bool
+SessionDialog::open_button_pressed (GdkEventButton* ev)
+{
+       if (Gtkmm2ext::Keyboard::modifier_state_equals (ev->state, Gtkmm2ext::Keyboard::PrimaryModifier)) {
+               _disable_plugins.set_active();
+       }
+       response (RESPONSE_ACCEPT);
+       return true;
+}
+
 void
 SessionDialog::populate_session_templates ()
 {
@@ -740,13 +756,13 @@ SessionDialog::redisplay_recent_sessions ()
                        row[recent_session_columns.sample_rate] = rate_as_string (sr);
                        switch (sf) {
                        case FormatFloat:
-                               row[recent_session_columns.disk_format] = _("32 bit float");
+                               row[recent_session_columns.disk_format] = _("32-bit float");
                                break;
                        case FormatInt24:
-                               row[recent_session_columns.disk_format] = _("24 bit");
+                               row[recent_session_columns.disk_format] = _("24-bit");
                                break;
                        case FormatInt16:
-                               row[recent_session_columns.disk_format] = _("16 bit");
+                               row[recent_session_columns.disk_format] = _("16-bit");
                                break;
                        }
                } else {
@@ -787,13 +803,13 @@ SessionDialog::redisplay_recent_sessions ()
                                        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");
+                                               child_row[recent_session_columns.disk_format] = _("32-bit float");
                                                break;
                                        case FormatInt24:
-                                               child_row[recent_session_columns.disk_format] = _("24 bit");
+                                               child_row[recent_session_columns.disk_format] = _("24-bit");
                                                break;
                                        case FormatInt16:
-                                               child_row[recent_session_columns.disk_format] = _("16 bit");
+                                               child_row[recent_session_columns.disk_format] = _("16-bit");
                                                break;
                                        }
                                } else {
@@ -1163,6 +1179,65 @@ SessionDialog::recent_row_activated (const Gtk::TreePath&, Gtk::TreeViewColumn*)
        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::Menu* m = manage (new Menu);
+       MenuList& items = m->items ();
+       items.push_back (MenuElem (s));
+       items.push_back (SeparatorElem());
+       items.push_back (MenuElem (_("Remove from recent"), 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 ()
 {