PT import: Add new PTImportSelector dialog
This commit is contained in:
parent
ca6c11dbca
commit
a1de50f217
141
gtk2_ardour/pt_import_selector.cc
Normal file
141
gtk2_ardour/pt_import_selector.cc
Normal file
|
@ -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 ();
|
||||
}
|
55
gtk2_ardour/pt_import_selector.h
Normal file
55
gtk2_ardour/pt_import_selector.h
Normal file
|
@ -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
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue
Block a user