13
0

Track Add/Remove Time dialog improvements:

Add a clock to show the position of the edit, to remove ambiguity
 If a Range is selected, pre-fill the position and length clocks
 Clock format should default to the editor's secondary clock mode
This commit is contained in:
Ben Loftis 2016-10-20 14:53:34 -05:00
parent 4925967560
commit 9a9a9f9eac
3 changed files with 49 additions and 16 deletions

View File

@ -7393,7 +7393,7 @@ Editor::do_insert_time ()
}
insert_time (
get_preferred_edit_position (EDIT_IGNORE_MOUSE),
d.position(),
d.distance(),
d.intersected_region_action (),
d.all_playlists(),
@ -7542,7 +7542,6 @@ Editor::do_remove_time ()
return;
}
framepos_t pos = get_preferred_edit_position (EDIT_IGNORE_MOUSE);
InsertRemoveTimeDialog d (*this, true);
int response = d.run ();
@ -7558,7 +7557,7 @@ Editor::do_remove_time ()
}
remove_time (
pos,
d.position(),
distance,
SplitIntersected,
d.move_glued(),

View File

@ -23,49 +23,75 @@
#include <gtkmm/alignment.h>
#include "insert_remove_time_dialog.h"
#include "audio_clock.h"
#include "ardour_ui.h"
#include "main_clock.h"
#include "pbd/i18n.h"
using namespace Gtk;
using namespace Editing;
using namespace ARDOUR;
InsertRemoveTimeDialog::InsertRemoveTimeDialog (PublicEditor& e, bool remove)
: ArdourDialog (remove ? _("Remove Time") : _("Insert Time"))
, _editor (e)
, _clock ("insertTimeClock", true, "",
, duration_clock ("insertTimeClock", true, "",
true, // editable
false, // follows_playhead
true, // duration
false, // with_info
true // accept_on_focus_out
)
, position_clock ("insertPosTimeClock", true, "",
true, // editable
false, // follows_playhead
false, // duration
false, // with_info
true // accept_on_focus_out
)
{
set_session (_editor.session ());
framepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE);
get_vbox()->set_border_width (12);
get_vbox()->set_spacing (4);
Table* table = manage (new Table (2, 2));
Table* table = manage (new Table (2, 3));
table->set_spacings (4);
Label* time_label = manage (new Label (remove ? _("Time to remove") : _("Time to insert:")));
Label* time_label = manage (new Label (remove ? _("Remove Time starting at:") : _("Insert Time starting at:")));
time_label->set_alignment (1, 0.5);
table->attach (*time_label, 0, 1, 0, 1, FILL | EXPAND);
_clock.set (0);
_clock.set_session (_session);
_clock.set_bbt_reference (pos);
table->attach (_clock, 1, 2, 0, 1);
position_clock.set_session (_session);
position_clock.set_mode (ARDOUR_UI::instance()->secondary_clock->mode());
table->attach (position_clock, 1, 2, 0, 1);
time_label = manage (new Label (remove ? _("Time to remove:") : _("Time to insert:")));
time_label->set_alignment (1, 0.5);
table->attach (*time_label, 0, 1, 1, 2, FILL | EXPAND);
duration_clock.set_session (_session);
duration_clock.set_mode (ARDOUR_UI::instance()->secondary_clock->mode());
table->attach (duration_clock, 1, 2, 1, 2);
//if a Range is selected, assume the user wants to insert/remove the length of the range
if ( _editor.get_selection().time.length() != 0 ) {
position_clock.set ( _editor.get_selection().time.start(), true );
duration_clock.set ( _editor.get_selection().time.end_frame(), true, _editor.get_selection().time.start() );
duration_clock.set_bbt_reference (_editor.get_selection().time.start());
} else {
framepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE);
position_clock.set ( pos, true );
duration_clock.set_bbt_reference (pos);
duration_clock.set (0);
}
if (!remove) {
Label* intersected_label = manage (new Label (_("Intersected regions should:")));
intersected_label->set_alignment (1, 0.5);
table->attach (*intersected_label, 0, 1, 1, 2, FILL | EXPAND);
table->attach (*intersected_label, 0, 1, 2, 3, FILL | EXPAND);
_intersected_combo.append_text (_("stay in position"));
_intersected_combo.append_text (_("move"));
_intersected_combo.append_text (_("be split"));
_intersected_combo.set_active (0);
table->attach (_intersected_combo, 1, 2, 1, 2);
table->attach (_intersected_combo, 1, 2, 2, 3);
}
get_vbox()->pack_start (*table);
@ -161,10 +187,16 @@ InsertRemoveTimeDialog::move_locked_markers () const
return _move_locked_markers.get_active ();
}
framepos_t
InsertRemoveTimeDialog::position () const
{
return position_clock.current_time();
}
framepos_t
InsertRemoveTimeDialog::distance () const
{
return _clock.current_duration (_editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE));
return duration_clock.current_duration ( position_clock.current_time() );
}
void

View File

@ -34,6 +34,7 @@ public:
bool move_glued_markers () const;
bool move_locked_markers () const;
bool move_tempos () const;
framepos_t position () const;
framepos_t distance () const;
private:
@ -49,5 +50,6 @@ private:
Gtk::CheckButton _move_locked_markers;
Gtk::CheckButton _move_tempos;
Gtk::Label tempo_label;
AudioClock _clock;
AudioClock duration_clock;
AudioClock position_clock;
};