Add named ranges to quick export dialog

This commit is contained in:
Robin Gareus 2022-12-09 19:09:32 +01:00
parent c629f3ffcb
commit b2fddeb43d
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 53 additions and 21 deletions

View File

@ -52,6 +52,10 @@ SimpleExportDialog::SimpleExportDialog (PublicEditor& editor)
_eps.the_combo ().get_parent ()->remove (_eps.the_combo ());
}
_range_list = ListStore::create (_range_cols);
_range_combo.set_model (_range_list);
_range_combo.pack_start (_range_cols.label);
Table* t = manage (new Table);
int r = 0;
@ -124,7 +128,7 @@ SimpleExportDialog::set_session (ARDOUR::Session* s)
SimpleExport::set_session (s);
ArdourDialog::set_session (s);
_range_combo.remove_all ();
_range_list->clear ();
_preset_cfg_connection.disconnect ();
if (!s) {
@ -149,17 +153,34 @@ SimpleExportDialog::set_session (ARDOUR::Session* s)
Location* srl (s->locations ()->session_range_location ());
TimeSelection const& tsel (_editor.get_selection ().time);
bool ok = false;
if (!tsel.empty ()) {
ok = true;
_range_combo.append (_("Using time selection"));
}
if (srl) {
ok = true;
_range_combo.append (_("Session start to session end")); // same text as ExportVideoDialog::apply_state
TreeModel::Row row = *_range_list->append ();
row[_range_cols.label] = _("Using time selection");
row[_range_cols.start] = tsel.start_sample ();
row[_range_cols.end] = tsel.end_sample ();
row[_range_cols.name] = string_compose (_("%1 (selection)"), SimpleExport::_session->snap_name ());
}
if (!ok) {
if (srl) {
TreeModel::Row row = *_range_list->append ();
row[_range_cols.label] = _("Session start to session end"); // same text as ExportVideoDialog::apply_state
row[_range_cols.start] = srl->start_sample ();
row[_range_cols.end] = srl->end_sample ();
row[_range_cols.name] = SimpleExport::_session->snap_name ();
}
for (auto l : s->locations ()->list ()) {
if (l->is_session_range () || !l->is_range_marker () || l->name ().empty ()) {
continue;
}
TreeModel::Row row = *_range_list->append ();
row[_range_cols.label] = l->name (); // string_compose (_("Range '%1'"), l->name ());
row[_range_cols.start] = l->start_sample ();
row[_range_cols.end] = l->end_sample ();
row[_range_cols.name] = string_compose (_("%1 - %2"), SimpleExport::_session->snap_name (), l->name ());
}
if (_range_list->children ().size () == 0) {
set_error ("Error: No valid range to export. Select a range or create session start/end markers");
return;
}
@ -214,17 +235,9 @@ SimpleExportDialog::close_dialog ()
void
SimpleExportDialog::start_export ()
{
Location* srl = SimpleExport::_session->locations ()->session_range_location ();
TimeSelection const& tsel (_editor.get_selection ().time);
std::string range = _range_combo.get_active_text ();
if (!tsel.empty () && range == _("Using time selection")) {
set_range (tsel.start_sample (), tsel.end_sample ());
SimpleExport::set_name (string_compose (_("%1 (selection)"), SimpleExport::_session->snap_name ()));
} else {
set_range (srl->start_sample (), srl->end_sample ());
SimpleExport::set_name (SimpleExport::_session->snap_name ());
}
TreeModel::iterator r = _range_combo.get_active ();
set_range ((*r)[_range_cols.start], (*r)[_range_cols.end]);
SimpleExport::set_name ((*r)[_range_cols.name]);
SimpleExport::_session->add_extra_xml (get_state ());

View File

@ -60,15 +60,34 @@ private:
void set_error (std::string const&);
bool progress_timeout ();
class ExportRangeCols : public Gtk::TreeModelColumnRecord
{
public:
ExportRangeCols ()
{
add (label);
add (name);
add (start);
add (end);
}
Gtk::TreeModelColumn<std::string> label;
Gtk::TreeModelColumn<std::string> name;
Gtk::TreeModelColumn<samplepos_t> start;
Gtk::TreeModelColumn<samplepos_t> end;
};
PublicEditor& _editor;
ExportPresetSelector _eps;
Gtk::Button* _cancel_button;
Gtk::Button* _export_button;
Gtk::ComboBoxText _range_combo;
Gtk::ComboBox _range_combo;
Gtk::ComboBoxText _post_export_combo;
Gtk::Label _error_label;
Gtk::ProgressBar _progress_bar;
ExportRangeCols _range_cols;
Glib::RefPtr<Gtk::ListStore> _range_list;
sigc::connection _progress_connection;
sigc::connection _preset_cfg_connection;
};