2005-09-25 14:42:24 -04:00
|
|
|
/*
|
|
|
|
Copyright (C) 1999-2002 Paul Davis
|
|
|
|
|
|
|
|
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 __ardour_export_dialog_h__
|
|
|
|
#define __ardour_export_dialog_h__
|
|
|
|
|
2007-04-30 13:43:40 -04:00
|
|
|
#include <gtkmm.h>
|
2005-09-25 14:42:24 -04:00
|
|
|
|
|
|
|
#include <ardour/export.h>
|
|
|
|
#include <ardour/location.h>
|
|
|
|
|
2005-10-27 15:46:27 -04:00
|
|
|
#include "ardour_dialog.h"
|
2005-09-25 14:42:24 -04:00
|
|
|
|
|
|
|
class PublicEditor;
|
|
|
|
|
|
|
|
namespace ARDOUR {
|
|
|
|
class Session;
|
|
|
|
class AudioRegion;
|
2005-10-27 15:46:27 -04:00
|
|
|
class Port;
|
2005-09-25 14:42:24 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
class ExportDialog : public ArdourDialog
|
|
|
|
{
|
|
|
|
public:
|
2006-03-05 14:39:16 -05:00
|
|
|
ExportDialog (PublicEditor&);
|
2005-09-25 14:42:24 -04:00
|
|
|
~ExportDialog ();
|
|
|
|
|
|
|
|
void connect_to_session (ARDOUR::Session*);
|
2006-09-28 13:23:52 -04:00
|
|
|
virtual void set_range (nframes_t start, nframes_t end);
|
2005-09-25 14:42:24 -04:00
|
|
|
void start_export ();
|
|
|
|
|
2007-03-05 10:34:56 -05:00
|
|
|
virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; }
|
|
|
|
|
2005-10-27 15:46:27 -04:00
|
|
|
protected:
|
2006-03-05 14:39:16 -05:00
|
|
|
ARDOUR::AudioExportSpecification spec;
|
2007-03-05 10:34:56 -05:00
|
|
|
Gtk::Frame file_frame;
|
2006-03-05 14:39:16 -05:00
|
|
|
|
|
|
|
struct ExportModelColumns : public Gtk::TreeModel::ColumnRecord
|
2005-10-27 15:46:27 -04:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
Gtk::TreeModelColumn<std::string> output;
|
|
|
|
Gtk::TreeModelColumn<bool> left;
|
|
|
|
Gtk::TreeModelColumn<bool> right;
|
|
|
|
Gtk::TreeModelColumn<ARDOUR::Port*> port;
|
|
|
|
|
|
|
|
ExportModelColumns() { add(output); add(left); add(right); add(port);}
|
|
|
|
};
|
|
|
|
|
|
|
|
ExportModelColumns exp_cols;
|
2006-03-05 14:39:16 -05:00
|
|
|
|
|
|
|
// These methods are intended to be used in constructors of subclasses
|
|
|
|
void do_not_allow_track_and_master_selection();
|
|
|
|
void do_not_allow_channel_count_selection();
|
|
|
|
void do_not_allow_export_cd_markers();
|
|
|
|
|
|
|
|
// Checks the given filename for validity when export gets started.
|
|
|
|
// Export will interrupt when this method returns 'false'.
|
|
|
|
// Method is responsible for informing user.
|
|
|
|
virtual bool is_filepath_valid(string &filepath);
|
|
|
|
|
|
|
|
// Gets called from within do_export. Is responsible for exporting the
|
|
|
|
// audio data. spec has already been filled with user input before calling
|
|
|
|
// this method. The dialog will be closed after this function exited.
|
|
|
|
virtual void export_audio_data() = 0;
|
2007-01-31 13:51:33 -05:00
|
|
|
|
|
|
|
virtual bool wants_dir() { return false; }
|
2006-03-05 14:39:16 -05:00
|
|
|
|
|
|
|
// reads the user input and fills spec with the according values
|
|
|
|
// filepath: complete path to the target file, including filename
|
|
|
|
void initSpec(string &filepath);
|
2005-10-27 15:46:27 -04:00
|
|
|
|
2006-03-05 14:39:16 -05:00
|
|
|
void set_progress_fraction(double progress) {
|
|
|
|
progress_bar.set_fraction (progress); }
|
|
|
|
|
|
|
|
ARDOUR::Session& getSession() { return *session; };
|
|
|
|
string get_selected_header_format() {
|
|
|
|
return header_format_combo.get_active_text(); };
|
|
|
|
string get_selected_file_name() { return file_entry.get_text(); };
|
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
private:
|
|
|
|
PublicEditor& editor;
|
|
|
|
ARDOUR::Session* session;
|
2006-03-05 14:39:16 -05:00
|
|
|
bool track_and_master_selection_allowed;
|
|
|
|
bool channel_count_selection_allowed;
|
|
|
|
bool export_cd_markers_allowed;
|
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::VBox track_vpacker;
|
|
|
|
Gtk::HBox hpacker;
|
|
|
|
|
|
|
|
Gtk::Table format_table;
|
|
|
|
Gtk::Frame format_frame;
|
|
|
|
|
2005-12-02 14:18:26 -05:00
|
|
|
Gtk::Label cue_file_label;
|
|
|
|
Gtk::ComboBoxText cue_file_combo;
|
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::Label channel_count_label;
|
2005-09-26 10:33:53 -04:00
|
|
|
Gtk::ComboBoxText channel_count_combo;
|
2005-11-30 15:30:44 -05:00
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::Label header_format_label;
|
2005-09-26 10:33:53 -04:00
|
|
|
Gtk::ComboBoxText header_format_combo;
|
2005-11-30 15:30:44 -05:00
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::Label bitdepth_format_label;
|
2005-09-26 10:33:53 -04:00
|
|
|
Gtk::ComboBoxText bitdepth_format_combo;
|
2005-11-30 15:30:44 -05:00
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::Label endian_format_label;
|
2005-09-26 10:33:53 -04:00
|
|
|
Gtk::ComboBoxText endian_format_combo;
|
2005-11-30 15:30:44 -05:00
|
|
|
|
|
|
|
Gtk::Label sample_rate_label;
|
|
|
|
Gtk::ComboBoxText sample_rate_combo;
|
|
|
|
|
|
|
|
Gtk::Label src_quality_label;
|
|
|
|
Gtk::ComboBoxText src_quality_combo;
|
|
|
|
|
|
|
|
Gtk::Label dither_type_label;
|
|
|
|
Gtk::ComboBoxText dither_type_combo;
|
|
|
|
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::CheckButton cuefile_only_checkbox;
|
|
|
|
|
|
|
|
Gtk::Entry file_entry;
|
|
|
|
Gtk::HBox file_hbox;
|
use filechooser widget in export dialog, selected files set format combos, hide progress bar until use in export dialog, speed up 'separate regions in range' operation on larger sessions, ruler scale now calculated separately to mark generation, fix for non-stacked layering regression, try not to generate 'buried' crossfades, use playlist->freeze() to speed up copying/moving regions on large playlists (not done for undo), width dependent items now reset on regionview init, get rid of jack_port_ensure_monitor check, remove audiosourse _length (only source has a length.. i think), make overlapend differ to overlapexternal where start points coincide.
git-svn-id: svn://localhost/ardour2/trunk@2576 d708f5d6-7413-0410-9779-e7cbd77b26cf
2007-10-26 09:32:24 -04:00
|
|
|
Gtk::FileChooserWidget file_chooser;
|
2005-09-25 14:42:24 -04:00
|
|
|
|
2005-12-02 14:18:26 -05:00
|
|
|
Gtk::Button* ok_button;
|
|
|
|
Gtk::Button* cancel_button;
|
2005-09-25 14:42:24 -04:00
|
|
|
Gtk::Label cancel_label;
|
|
|
|
Gtk::ProgressBar progress_bar;
|
|
|
|
Gtk::ScrolledWindow track_scroll;
|
|
|
|
Gtk::ScrolledWindow master_scroll;
|
|
|
|
Gtk::Button track_selector_button;
|
2005-10-27 15:46:27 -04:00
|
|
|
Gtk::TreeView track_selector;
|
|
|
|
Glib::RefPtr<Gtk::ListStore> track_list;
|
|
|
|
Gtk::TreeView master_selector;
|
|
|
|
Glib::RefPtr<Gtk::ListStore> master_list;
|
2005-09-25 14:42:24 -04:00
|
|
|
|
|
|
|
static void *_thread (void *arg);
|
2006-03-05 14:39:16 -05:00
|
|
|
// sets the export progress in the progress bar
|
|
|
|
virtual gint progress_timeout ();
|
2005-09-25 16:33:00 -04:00
|
|
|
sigc::connection progress_connection;
|
2005-09-25 14:42:24 -04:00
|
|
|
void build_window ();
|
|
|
|
void end_dialog();
|
2005-10-27 15:46:27 -04:00
|
|
|
void header_chosen ();
|
|
|
|
void channels_chosen ();
|
|
|
|
void bitdepth_chosen ();
|
|
|
|
void sample_rate_chosen ();
|
|
|
|
void cue_file_type_chosen();
|
use filechooser widget in export dialog, selected files set format combos, hide progress bar until use in export dialog, speed up 'separate regions in range' operation on larger sessions, ruler scale now calculated separately to mark generation, fix for non-stacked layering regression, try not to generate 'buried' crossfades, use playlist->freeze() to speed up copying/moving regions on large playlists (not done for undo), width dependent items now reset on regionview init, get rid of jack_port_ensure_monitor check, remove audiosourse _length (only source has a length.. i think), make overlapend differ to overlapexternal where start points coincide.
git-svn-id: svn://localhost/ardour2/trunk@2576 d708f5d6-7413-0410-9779-e7cbd77b26cf
2007-10-26 09:32:24 -04:00
|
|
|
void file_chooser_selection_changed();
|
2005-10-27 15:46:27 -04:00
|
|
|
|
|
|
|
void fill_lists();
|
2006-03-05 14:39:16 -05:00
|
|
|
void write_track_and_master_selection_to_spec();
|
2005-09-25 14:42:24 -04:00
|
|
|
|
2006-03-05 14:39:16 -05:00
|
|
|
void do_export_cd_markers (const string& path, const string& cuefile_type);
|
2005-09-25 14:42:24 -04:00
|
|
|
void export_cue_file (ARDOUR::Locations::LocationList& locations, const string& path);
|
|
|
|
void export_toc_file (ARDOUR::Locations::LocationList& locations, const string& path);
|
|
|
|
void do_export ();
|
|
|
|
gint window_closed (GdkEventAny *ignored);
|
|
|
|
|
|
|
|
void track_selector_button_click ();
|
|
|
|
|
|
|
|
void set_state();
|
|
|
|
void save_state();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // __ardour_export_dialog_h__
|