PT import: Add new PTImportSelector dialog
authorDamien Zammit <damien@zamaudio.com>
Wed, 10 Oct 2018 09:09:24 +0000 (20:09 +1100)
committerDamien Zammit <damien@zamaudio.com>
Fri, 12 Oct 2018 08:09:40 +0000 (19:09 +1100)
gtk2_ardour/pt_import_selector.cc [new file with mode: 0644]
gtk2_ardour/pt_import_selector.h [new file with mode: 0644]
gtk2_ardour/wscript

diff --git a/gtk2_ardour/pt_import_selector.cc b/gtk2_ardour/pt_import_selector.cc
new file mode 100644 (file)
index 0000000..d6c17a6
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+    Copyright (C) 2018 Paul Davis
+    Author: Damien Zammit
+
+    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 <pbd/error.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <iostream>
+#include "pbd/gstdio_compat.h"
+#include "pbd/i18n.h"
+#include "pbd/file_utils.h"
+
+#include <ptfformat.h>
+
+#include "ardour/session_handle.h"
+#include "pt_import_selector.h"
+
+using namespace Gtk;
+using namespace ARDOUR;
+using namespace PBD;
+
+PTImportSelector::PTImportSelector (PTFFormat& ptf) :
+       ArdourDialog (_("Import PT Session")),
+       ptimport_ptf_chooser (FILE_CHOOSER_ACTION_OPEN),
+       ptimport_import_button (_("Import")),
+       ptimport_cancel_button (_("Cancel"))
+{
+       _ptf = &ptf;
+
+       if (!_session_rate) {
+               Gtk::Dialog::response(RESPONSE_CANCEL);
+       }
+
+       set_size_request (800, 450);
+       ptimport_import_button.set_size_request (90, 35);
+       ptimport_cancel_button.set_size_request (90, 35);
+
+       Gtk::FileFilter match_pt_filter;
+
+       ptimport_info_text.set_editable (false);
+       ptimport_info_text.set_wrap_mode (Gtk::WRAP_NONE);
+       ptimport_info_text.get_buffer ()->set_text ("Select a PT session\n");
+       ptimport_info_text.set_sensitive (false);
+
+       match_pt_filter.add_pattern ("*.pt5");
+       match_pt_filter.add_pattern ("*.pt6");
+       match_pt_filter.add_pattern ("*.pt7");
+       match_pt_filter.add_pattern ("*.pts");
+       match_pt_filter.add_pattern ("*.ptf");
+       match_pt_filter.add_pattern ("*.ptx");
+       match_pt_filter.set_name (_("All PT sessions"));
+
+       ptimport_ptf_chooser.add_filter (match_pt_filter);
+       ptimport_ptf_chooser.set_select_multiple (false);
+       //XXX ptimport_ptf_chooser.set_current_folder (dstdir);
+
+
+       HBox* buttons = manage (new HBox);
+       buttons->set_spacing (2);
+       buttons->set_border_width (10);
+       buttons->pack_start (ptimport_import_button, false, false);
+       buttons->pack_start (ptimport_cancel_button, false, false);
+
+       HBox* infobox = manage (new HBox);
+       infobox->set_spacing (1);
+       infobox->set_border_width (50);
+       infobox->pack_start (ptimport_info_text, false, false);
+
+       HBox* toplevel = manage (new HBox);
+       toplevel->set_spacing (2);
+       toplevel->set_border_width (10);
+       toplevel->pack_start (ptimport_ptf_chooser, true, true);
+       toplevel->pack_start (*infobox, false, false);
+
+       get_vbox()->pack_start (*toplevel, true, true);
+       get_vbox()->pack_start (*buttons, false, false);
+
+       ptimport_ptf_chooser.signal_selection_changed ().connect (sigc::mem_fun (*this, &PTImportSelector::update_ptf));
+
+       ptimport_import_button.set_sensitive(false);
+       ptimport_cancel_button.set_sensitive(true);
+
+       ptimport_cancel_button.signal_clicked ().connect (sigc::bind (sigc::mem_fun (*this, &Gtk::Dialog::response), RESPONSE_CANCEL));
+       ptimport_import_button.signal_clicked ().connect (sigc::bind (sigc::mem_fun (*this, &Gtk::Dialog::response), RESPONSE_ACCEPT));
+
+       show_all ();
+}
+
+void
+PTImportSelector::update_ptf()
+{
+       if (ptimport_ptf_chooser.get_filename ().size () > 0) {
+                std::string path = ptimport_ptf_chooser.get_filename ();
+               bool ok = Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK)
+                               && !Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_DIR);
+               if (ok) {
+                       if (_ptf->load (path, _session_rate) == -1) {
+                               ptimport_info_text.get_buffer ()->set_text ("Cannot detect PT session\n");
+                               ptimport_import_button.set_sensitive(false);
+                       } else {
+                               std::string ptinfo = string_compose (_("PT Session [ VALID ]\n\nSession Info:\n\n\nPT v%1 Session @ %2Hz\n\n%3 audio files\n%4 audio regions\n%5 active audio regions\n%6 midi regions\n%7 active midi regions\n\n"),
+                                       (int)_ptf->version,
+                                       _ptf->sessionrate,
+                                       _ptf->audiofiles.size (),
+                                       _ptf->regions.size (),
+                                       _ptf->tracks.size (),
+                                       _ptf->midiregions.size (),
+                                       _ptf->miditracks.size ()
+                               );
+                               if (_session_rate != _ptf->sessionrate) {
+                                       ptinfo = string_compose (_("%1WARNING:\n\nSample rate mismatch,\nwill be resampling\n"), ptinfo);
+                               }
+                               ptimport_info_text.get_buffer ()->set_text (ptinfo);
+                               ptimport_import_button.set_sensitive(true);
+                       }
+               }
+       }
+}
+
+void
+PTImportSelector::set_session (Session* s)
+{
+        ArdourDialog::set_session (s);
+       _session_rate = s->sample_rate ();
+}
diff --git a/gtk2_ardour/pt_import_selector.h b/gtk2_ardour/pt_import_selector.h
new file mode 100644 (file)
index 0000000..760acb3
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    Copyright (C) 2018 Paul Davis
+    Author: Damien Zammit
+
+    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.
+
+*/
+#ifndef __pt_import_selector_h__
+#define __pt_import_selector_h__
+
+#include <string>
+#include <stdio.h>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <vector>
+
+#include <ptfformat.h>
+
+#include "ardour_dialog.h"
+#include "ardour/session.h"
+#include <gtkmm/box.h>
+#include <gtkmm/button.h>
+#include <gtkmm/filechooserwidget.h>
+#include <gtkmm/textview.h>
+
+class PTImportSelector : public ArdourDialog
+{
+public:
+       PTImportSelector (PTFFormat& ptf);
+       void update_ptf ();
+       void set_session (ARDOUR::Session*);
+
+private:
+       PTFFormat* _ptf;
+       uint32_t _session_rate;
+       Gtk::FileChooserWidget ptimport_ptf_chooser;
+       Gtk::TextView ptimport_info_text;
+       Gtk::Button ptimport_import_button;
+       Gtk::Button ptimport_cancel_button;
+};
+
+#endif
index d98e4e99107011ecde608350886a6e3dc30ed52c..21792ae94cd5edb34e1bea89ff5bce3316dc4b53 100644 (file)
@@ -204,6 +204,7 @@ gtk2_ardour_sources = [
         'processor_selection.cc',
         'patch_change_dialog.cc',
         'progress_reporter.cc',
+        'pt_import_selector.cc',
         'public_editor.cc',
         'quantize_dialog.cc',
         'rc_option_editor.cc',