mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
tweak Smart Mode to be more like Mixbus. Smart mode is just a modifier on Object mode which provides Range selection in the top half of the waveform. probably lots of corner cases to clear up before its all over, but at least we can use Mixbus as a consistent target rather than making it all up again.
git-svn-id: svn://localhost/ardour2/branches/3.0@13551 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
f9d1faa634
commit
e63da83c53
11 changed files with 164 additions and 184 deletions
|
|
@ -151,7 +151,7 @@
|
||||||
<menuitem action='ToggleClick'/>
|
<menuitem action='ToggleClick'/>
|
||||||
<menuitem action='toggle-follow-playhead'/>
|
<menuitem action='toggle-follow-playhead'/>
|
||||||
<menuitem action='panic'/>
|
<menuitem action='panic'/>
|
||||||
<separator/>
|
<separator/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu name='Edit' action='Edit'>
|
<menu name='Edit' action='Edit'>
|
||||||
|
|
@ -222,6 +222,7 @@
|
||||||
<menuitem action='set-tempo-from-region'/>
|
<menuitem action='set-tempo-from-region'/>
|
||||||
<menuitem action='set-tempo-from-edit-range'/>
|
<menuitem action='set-tempo-from-edit-range'/>
|
||||||
</menu>
|
</menu>
|
||||||
|
<menuitem action='set-mouse-mode-object-range'/>
|
||||||
#ifndef GTKOSX
|
#ifndef GTKOSX
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='ToggleRCOptionsEditor'/>
|
<menuitem action='ToggleRCOptionsEditor'/>
|
||||||
|
|
|
||||||
|
|
@ -1622,10 +1622,6 @@ ARDOUR_UI::transport_roll ()
|
||||||
_session->request_play_range (0, true);
|
_session->request_play_range (0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ((editor->current_mouse_mode() == Editing::MouseRange) || get_smart_mode()) && Config->get_always_play_range()) {
|
|
||||||
_session->request_play_range (&editor->get_selection().time, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rolling) {
|
if (!rolling) {
|
||||||
_session->request_transport_speed (1.0f);
|
_session->request_transport_speed (1.0f);
|
||||||
}
|
}
|
||||||
|
|
@ -1688,7 +1684,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
|
||||||
if (rolling) {
|
if (rolling) {
|
||||||
_session->request_stop (with_abort, true);
|
_session->request_stop (with_abort, true);
|
||||||
} else {
|
} else {
|
||||||
if ( ((editor->current_mouse_mode() == Editing::MouseRange) || editor->get_smart_mode()) && Config->get_always_play_range()) {
|
if ( Config->get_always_play_range() ) {
|
||||||
_session->request_play_range (&editor->get_selection().time, true);
|
_session->request_play_range (&editor->get_selection().time, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@
|
||||||
#include "public_editor.h"
|
#include "public_editor.h"
|
||||||
#include "audio_clock.h"
|
#include "audio_clock.h"
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "button_joiner.h"
|
|
||||||
#include "main_clock.h"
|
#include "main_clock.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "theme_manager.h"
|
#include "theme_manager.h"
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,6 @@
|
||||||
#include "audio_time_axis.h"
|
#include "audio_time_axis.h"
|
||||||
#include "automation_time_axis.h"
|
#include "automation_time_axis.h"
|
||||||
#include "bundle_manager.h"
|
#include "bundle_manager.h"
|
||||||
#include "button_joiner.h"
|
|
||||||
#include "canvas-noevent-text.h"
|
#include "canvas-noevent-text.h"
|
||||||
#include "canvas_impl.h"
|
#include "canvas_impl.h"
|
||||||
#include "crossfade_edit.h"
|
#include "crossfade_edit.h"
|
||||||
|
|
@ -2317,7 +2316,13 @@ Editor::set_state (const XMLNode& node, int /*version*/)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node.property ("join-object-range"))) {
|
if ((prop = node.property ("join-object-range"))) {
|
||||||
ActionManager::set_toggle_action ("MouseMode", "set-mouse-mode-object-range", string_is_affirmative (prop->value ()));
|
RefPtr<Action> act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-object-range"));
|
||||||
|
if (act) {
|
||||||
|
RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
|
||||||
|
tact->set_active (!yn);
|
||||||
|
tact->set_active (yn);
|
||||||
|
}
|
||||||
|
set_mouse_mode(mouse_mode, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node.property ("edit-point"))) {
|
if ((prop = node.property ("edit-point"))) {
|
||||||
|
|
@ -2828,14 +2833,12 @@ Editor::setup_toolbar ()
|
||||||
mode_box->set_spacing(4);
|
mode_box->set_spacing(4);
|
||||||
|
|
||||||
HBox* mouse_mode_box = manage (new HBox);
|
HBox* mouse_mode_box = manage (new HBox);
|
||||||
HBox* mouse_mode_hbox1 = manage (new HBox);
|
HBox* mouse_mode_hbox = manage (new HBox);
|
||||||
HBox* mouse_mode_hbox2 = manage (new HBox);
|
VBox* mouse_mode_vbox = manage (new VBox);
|
||||||
VBox* mouse_mode_vbox1 = manage (new VBox);
|
Alignment* mouse_mode_align = manage (new Alignment);
|
||||||
VBox* mouse_mode_vbox2 = manage (new VBox);
|
|
||||||
Alignment* mouse_mode_align1 = manage (new Alignment);
|
|
||||||
Alignment* mouse_mode_align2 = manage (new Alignment);
|
|
||||||
|
|
||||||
Glib::RefPtr<SizeGroup> mouse_mode_size_group = SizeGroup::create (SIZE_GROUP_BOTH);
|
Glib::RefPtr<SizeGroup> mouse_mode_size_group = SizeGroup::create (SIZE_GROUP_BOTH);
|
||||||
|
// mouse_mode_size_group->add_widget (smart_mode_button);
|
||||||
mouse_mode_size_group->add_widget (mouse_move_button);
|
mouse_mode_size_group->add_widget (mouse_move_button);
|
||||||
mouse_mode_size_group->add_widget (mouse_select_button);
|
mouse_mode_size_group->add_widget (mouse_select_button);
|
||||||
mouse_mode_size_group->add_widget (mouse_zoom_button);
|
mouse_mode_size_group->add_widget (mouse_zoom_button);
|
||||||
|
|
@ -2848,30 +2851,24 @@ Editor::setup_toolbar ()
|
||||||
/* make them just a bit bigger */
|
/* make them just a bit bigger */
|
||||||
mouse_move_button.set_size_request (-1, 25);
|
mouse_move_button.set_size_request (-1, 25);
|
||||||
|
|
||||||
smart_mode_joiner = manage (new ButtonJoiner ("mouse mode button", mouse_move_button, mouse_select_button, true));
|
mouse_mode_hbox->set_spacing (2);
|
||||||
smart_mode_joiner->set_related_action (smart_mode_action);
|
|
||||||
|
|
||||||
mouse_mode_hbox2->set_spacing (2);
|
mouse_mode_hbox->pack_start (smart_mode_button, false, false);
|
||||||
mouse_mode_box->set_spacing (2);
|
mouse_mode_hbox->pack_start (mouse_move_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (mouse_select_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (mouse_zoom_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (mouse_gain_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (mouse_timefx_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (mouse_audition_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (mouse_draw_button, false, false);
|
||||||
|
mouse_mode_hbox->pack_start (internal_edit_button, false, false, 8);
|
||||||
|
|
||||||
mouse_mode_hbox1->pack_start (*smart_mode_joiner, false, false);
|
mouse_mode_vbox->pack_start (*mouse_mode_hbox);
|
||||||
mouse_mode_hbox2->pack_start (mouse_zoom_button, false, false);
|
|
||||||
mouse_mode_hbox2->pack_start (mouse_gain_button, false, false);
|
|
||||||
mouse_mode_hbox2->pack_start (mouse_timefx_button, false, false);
|
|
||||||
mouse_mode_hbox2->pack_start (mouse_audition_button, false, false);
|
|
||||||
mouse_mode_hbox2->pack_start (mouse_draw_button, false, false);
|
|
||||||
mouse_mode_hbox2->pack_start (internal_edit_button, false, false, 8);
|
|
||||||
|
|
||||||
mouse_mode_vbox1->pack_start (*mouse_mode_hbox1, false, false);
|
mouse_mode_align->add (*mouse_mode_vbox);
|
||||||
mouse_mode_vbox2->pack_start (*mouse_mode_hbox2, false, false);
|
mouse_mode_align->set (0.5, 1.0, 0.0, 0.0);
|
||||||
|
|
||||||
mouse_mode_align1->add (*mouse_mode_vbox1);
|
mouse_mode_box->pack_start (*mouse_mode_align, false, false);
|
||||||
mouse_mode_align1->set (0.5, 1.0, 0.0, 0.0);
|
|
||||||
mouse_mode_align2->add (*mouse_mode_vbox2);
|
|
||||||
mouse_mode_align2->set (0.5, 1.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
mouse_mode_box->pack_start (*mouse_mode_align1, false, false);
|
|
||||||
mouse_mode_box->pack_start (*mouse_mode_align2, false, false);
|
|
||||||
|
|
||||||
edit_mode_strings.push_back (edit_mode_to_string (Slide));
|
edit_mode_strings.push_back (edit_mode_to_string (Slide));
|
||||||
if (!Profile->get_sae()) {
|
if (!Profile->get_sae()) {
|
||||||
|
|
@ -3049,14 +3046,14 @@ Editor::setup_toolbar ()
|
||||||
void
|
void
|
||||||
Editor::setup_tooltips ()
|
Editor::setup_tooltips ()
|
||||||
{
|
{
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_move_button, _("Select/Move Objects"));
|
ARDOUR_UI::instance()->set_tip (smart_mode_button, _("Smart Mode (add Range functions to Object mode)"));
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Select/Move Ranges"));
|
ARDOUR_UI::instance()->set_tip (mouse_move_button, _("Object Mode (select/move Objects)"));
|
||||||
|
ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Range Mode (select/move Ranges)"));
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_draw_button, _("Draw/Edit MIDI Notes"));
|
ARDOUR_UI::instance()->set_tip (mouse_draw_button, _("Draw/Edit MIDI Notes"));
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_gain_button, _("Draw Region Gain"));
|
ARDOUR_UI::instance()->set_tip (mouse_gain_button, _("Draw Region Gain"));
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_zoom_button, _("Select Zoom Range"));
|
ARDOUR_UI::instance()->set_tip (mouse_zoom_button, _("Select Zoom Range"));
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_timefx_button, _("Stretch/Shrink Regions and MIDI Notes"));
|
ARDOUR_UI::instance()->set_tip (mouse_timefx_button, _("Stretch/Shrink Regions and MIDI Notes"));
|
||||||
ARDOUR_UI::instance()->set_tip (mouse_audition_button, _("Listen to Specific Regions"));
|
ARDOUR_UI::instance()->set_tip (mouse_audition_button, _("Listen to Specific Regions"));
|
||||||
ARDOUR_UI::instance()->set_tip (smart_mode_joiner, _("Smart Mode (Select/Move Objects + Ranges)"));
|
|
||||||
ARDOUR_UI::instance()->set_tip (internal_edit_button, _("Note Level Editing"));
|
ARDOUR_UI::instance()->set_tip (internal_edit_button, _("Note Level Editing"));
|
||||||
ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: click to (de)activate\nContext-click for other operations"));
|
ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: click to (de)activate\nContext-click for other operations"));
|
||||||
ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Later"));
|
ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Later"));
|
||||||
|
|
@ -4200,9 +4197,7 @@ Editor::set_frames_per_unit (double fpu)
|
||||||
zoom_range_clock->set (frames);
|
zoom_range_clock->set (frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool const showing_time_selection =
|
bool const showing_time_selection = selection->time.length() > 0;
|
||||||
mouse_mode == MouseRange ||
|
|
||||||
(mouse_mode == MouseObject && _join_object_range_state != JOIN_OBJECT_RANGE_NONE);
|
|
||||||
|
|
||||||
if (showing_time_selection && selection->time.start () != selection->time.end_frame ()) {
|
if (showing_time_selection && selection->time.start () != selection->time.end_frame ()) {
|
||||||
for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||||
|
|
|
||||||
|
|
@ -1586,11 +1586,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
ArdourButton mouse_timefx_button;
|
ArdourButton mouse_timefx_button;
|
||||||
ArdourButton mouse_audition_button;
|
ArdourButton mouse_audition_button;
|
||||||
|
|
||||||
ButtonJoiner* smart_mode_joiner;
|
ArdourButton smart_mode_button;
|
||||||
Glib::RefPtr<Gtk::ToggleAction> smart_mode_action;
|
Glib::RefPtr<Gtk::ToggleAction> smart_mode_action;
|
||||||
|
|
||||||
void mouse_mode_toggled (Editing::MouseMode m);
|
void mouse_mode_toggled (Editing::MouseMode m);
|
||||||
void mouse_mode_object_range_toggled () {}
|
void mouse_mode_object_range_toggled ();
|
||||||
bool ignore_mouse_mode_toggle;
|
bool ignore_mouse_mode_toggle;
|
||||||
|
|
||||||
ArdourButton internal_edit_button;
|
ArdourButton internal_edit_button;
|
||||||
|
|
@ -2100,16 +2100,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
|
|
||||||
int time_fx (ARDOUR::RegionList&, float val, bool pitching);
|
int time_fx (ARDOUR::RegionList&, float val, bool pitching);
|
||||||
|
|
||||||
bool doing_range_stuff() const {
|
|
||||||
return (mouse_mode == Editing::MouseRange && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) ||
|
|
||||||
_join_object_range_state == JOIN_OBJECT_RANGE_RANGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool doing_object_stuff() const {
|
|
||||||
return (mouse_mode == Editing::MouseObject && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) ||
|
|
||||||
_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
void toggle_sound_midi_notes ();
|
void toggle_sound_midi_notes ();
|
||||||
|
|
||||||
/** Flag for a bit of a hack wrt control point selection; see set_selected_control_point_from_click */
|
/** Flag for a bit of a hack wrt control point selection; see set_selected_control_point_from_click */
|
||||||
|
|
|
||||||
|
|
@ -404,6 +404,12 @@ Editor::register_actions ()
|
||||||
Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode"));
|
Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode"));
|
||||||
RadioAction::Group mouse_mode_group;
|
RadioAction::Group mouse_mode_group;
|
||||||
|
|
||||||
|
act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Smart Object Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
|
||||||
|
smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
|
||||||
|
smart_mode_button.set_related_action (smart_mode_action);
|
||||||
|
smart_mode_button.set_text (_("Smart"));
|
||||||
|
smart_mode_button.set_name ("mouse mode button");
|
||||||
|
|
||||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
|
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
|
||||||
mouse_move_button.set_related_action (act);
|
mouse_move_button.set_related_action (act);
|
||||||
mouse_move_button.set_image (::get_icon("tool_object"));
|
mouse_move_button.set_image (::get_icon("tool_object"));
|
||||||
|
|
@ -419,9 +425,6 @@ Editor::register_actions ()
|
||||||
mouse_draw_button.set_image (::get_icon("midi_tool_pencil"));
|
mouse_draw_button.set_image (::get_icon("midi_tool_pencil"));
|
||||||
mouse_draw_button.set_name ("mouse mode button");
|
mouse_draw_button.set_name ("mouse mode button");
|
||||||
|
|
||||||
act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Link Object / Range Tools"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
|
|
||||||
smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
|
|
||||||
|
|
||||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), sigc::bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain));
|
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), sigc::bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain));
|
||||||
mouse_gain_button.set_related_action (act);
|
mouse_gain_button.set_related_action (act);
|
||||||
mouse_gain_button.set_image (::get_icon("tool_gain"));
|
mouse_gain_button.set_image (::get_icon("tool_gain"));
|
||||||
|
|
|
||||||
|
|
@ -3607,9 +3607,7 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||||
s->request_play_range (&_editor->selection->time, true);
|
s->request_play_range (&_editor->selection->time, true);
|
||||||
} else {
|
} else {
|
||||||
if (Config->get_always_play_range()) {
|
if (Config->get_always_play_range()) {
|
||||||
if (_editor->doing_range_stuff()) {
|
s->request_locate (_editor->get_selection().time.start());
|
||||||
s->request_locate (_editor->get_selection().time.start());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3617,28 +3615,7 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||||
} else {
|
} else {
|
||||||
/* just a click, no pointer movement.
|
/* just a click, no pointer movement.
|
||||||
*/
|
*/
|
||||||
|
_editor->selection->clear_time();
|
||||||
if (Keyboard::no_modifier_keys_pressed (&event->button)) {
|
|
||||||
if (!_time_selection_at_start) {
|
|
||||||
if (_editor->clicked_regionview) {
|
|
||||||
if (_editor->get_selection().selected (_editor->clicked_regionview)) {
|
|
||||||
/* range select the entire current
|
|
||||||
region selection
|
|
||||||
*/
|
|
||||||
_editor->select_range (_editor->get_selection().regions.start(),
|
|
||||||
_editor->get_selection().regions.end_frame());
|
|
||||||
} else {
|
|
||||||
/* range select this (unselected)
|
|
||||||
* region
|
|
||||||
*/
|
|
||||||
_editor->select_range (_editor->clicked_regionview->region()->position(),
|
|
||||||
_editor->clicked_regionview->region()->last_frame());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_editor->selection->clear_time();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_editor->clicked_axisview && !_editor->selection->selected (_editor->clicked_axisview)) {
|
if (_editor->clicked_axisview && !_editor->selection->selected (_editor->clicked_axisview)) {
|
||||||
_editor->selection->set (_editor->clicked_axisview);
|
_editor->selection->set (_editor->clicked_axisview);
|
||||||
|
|
|
||||||
|
|
@ -293,7 +293,7 @@ Editor::set_canvas_cursor ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* up-down cursor as a cue that automation can be dragged up and down when in join object/range mode */
|
/* up-down cursor as a cue that automation can be dragged up and down when in join object/range mode */
|
||||||
if (smart_mode_action->get_active()) {
|
if ( get_smart_mode() ) {
|
||||||
double x, y;
|
double x, y;
|
||||||
get_pointer_position (x, y);
|
get_pointer_position (x, y);
|
||||||
ArdourCanvas::Item* i = track_canvas->get_item_at (x, y);
|
ArdourCanvas::Item* i = track_canvas->get_item_at (x, y);
|
||||||
|
|
@ -308,6 +308,21 @@ Editor::set_canvas_cursor ()
|
||||||
set_canvas_cursor (current_canvas_cursor, true);
|
set_canvas_cursor (current_canvas_cursor, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::mouse_mode_object_range_toggled()
|
||||||
|
{
|
||||||
|
MouseMode m = mouse_mode;
|
||||||
|
|
||||||
|
Glib::RefPtr<Action> act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-range"));
|
||||||
|
assert (act);
|
||||||
|
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
|
||||||
|
assert (tact);
|
||||||
|
if (tact->get_active())
|
||||||
|
m = MouseObject; //Smart mode turned to ON, force editing to Object mode
|
||||||
|
|
||||||
|
set_mouse_mode(m, true); //call this so the button styles can get updated
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::set_mouse_mode (MouseMode m, bool force)
|
Editor::set_mouse_mode (MouseMode m, bool force)
|
||||||
{
|
{
|
||||||
|
|
@ -360,26 +375,7 @@ Editor::set_mouse_mode (MouseMode m, bool force)
|
||||||
tact->set_active (false);
|
tact->set_active (false);
|
||||||
tact->set_active (true);
|
tact->set_active (true);
|
||||||
|
|
||||||
MouseModeChanged (); /* EMIT SIGNAL */
|
//NOTE: this will result in a call to mouse_mode_toggled which does the heavy lifting
|
||||||
|
|
||||||
if ( (mouse_mode != MouseRange) && (mouse_mode != MouseGain) ) {
|
|
||||||
|
|
||||||
cancel_time_selection(); //disable the range, because an invisible operating range can cause confusing operation
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/*
|
|
||||||
in range mode,show the range selection.
|
|
||||||
*/
|
|
||||||
|
|
||||||
cancel_selection();
|
|
||||||
|
|
||||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
|
||||||
if ((*i)->get_selected()) {
|
|
||||||
(*i)->show_selection (selection->time);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -451,29 +447,25 @@ Editor::mouse_mode_toggled (MouseMode m)
|
||||||
|
|
||||||
instant_save ();
|
instant_save ();
|
||||||
|
|
||||||
if (!internal_editing()) {
|
//TODO: set button styles for smart buttons
|
||||||
if (mouse_mode != MouseRange && mouse_mode != MouseGain && _join_object_range_state == JOIN_OBJECT_RANGE_NONE) {
|
/*
|
||||||
|
if ( smart_mode_action->get_active() ) {
|
||||||
/* in all modes except range, gain and joined object/range, hide the range selection,
|
if( mouse_mode == MouseObject ) { //smart active and object active
|
||||||
show the object (region) selection.
|
smart_mode_button.set_active(1);
|
||||||
*/
|
smart_mode_button.set_name("smart mode button");
|
||||||
|
mouse_move_button.set_name("smart mode button");
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
} else { //smart active but object inactive
|
||||||
(*i)->hide_selection ();
|
smart_mode_button.set_active(0);
|
||||||
}
|
smart_mode_button.set_name("smart mode button");
|
||||||
|
mouse_move_button.set_name("mouse mode button");
|
||||||
} else {
|
|
||||||
|
|
||||||
/*
|
|
||||||
in range or object/range mode, show the range selection.
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
|
||||||
(*i)->show_selection (selection->time);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
smart_mode_button.set_active(0);
|
||||||
|
smart_mode_button.set_name("mouse mode button");
|
||||||
|
mouse_move_button.set_name("mouse mode button");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
set_canvas_cursor ();
|
set_canvas_cursor ();
|
||||||
set_gain_envelope_visibility ();
|
set_gain_envelope_visibility ();
|
||||||
|
|
||||||
|
|
@ -579,11 +571,9 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (((mouse_mode != MouseObject) &&
|
if (((mouse_mode != MouseObject) &&
|
||||||
(_join_object_range_state != JOIN_OBJECT_RANGE_OBJECT) &&
|
|
||||||
(mouse_mode != MouseAudition || item_type != RegionItem) &&
|
(mouse_mode != MouseAudition || item_type != RegionItem) &&
|
||||||
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
|
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
|
||||||
(mouse_mode != MouseGain) &&
|
(mouse_mode != MouseGain) &&
|
||||||
(mouse_mode != MouseRange) &&
|
|
||||||
(mouse_mode != MouseDraw)) ||
|
(mouse_mode != MouseDraw)) ||
|
||||||
((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3) ||
|
((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3) ||
|
||||||
(internal_editing() && mouse_mode != MouseTimeFX)) {
|
(internal_editing() && mouse_mode != MouseTimeFX)) {
|
||||||
|
|
@ -608,12 +598,10 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
|
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case RegionItem:
|
case RegionItem:
|
||||||
if (!doing_range_stuff()) {
|
|
||||||
set_selected_regionview_from_click (press, op);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (press) {
|
if (press) {
|
||||||
if (doing_range_stuff()) {
|
if ( mouse_mode != MouseRange ) {
|
||||||
|
set_selected_regionview_from_click (press, op);
|
||||||
|
} else {
|
||||||
/* don't change the selection unless the
|
/* don't change the selection unless the
|
||||||
clicked track is not currently selected. if
|
clicked track is not currently selected. if
|
||||||
so, "collapse" the selection to just this
|
so, "collapse" the selection to just this
|
||||||
|
|
@ -630,7 +618,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
case RegionViewName:
|
case RegionViewName:
|
||||||
case LeftFrameHandle:
|
case LeftFrameHandle:
|
||||||
case RightFrameHandle:
|
case RightFrameHandle:
|
||||||
if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
if ( mouse_mode != MouseRange ) {
|
||||||
set_selected_regionview_from_click (press, op);
|
set_selected_regionview_from_click (press, op);
|
||||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||||
set_selected_track_as_side_effect (op);
|
set_selected_track_as_side_effect (op);
|
||||||
|
|
@ -643,7 +631,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
case FadeOutItem:
|
case FadeOutItem:
|
||||||
case StartCrossFadeItem:
|
case StartCrossFadeItem:
|
||||||
case EndCrossFadeItem:
|
case EndCrossFadeItem:
|
||||||
if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
if ( mouse_mode != MouseRange ) {
|
||||||
set_selected_regionview_from_click (press, op);
|
set_selected_regionview_from_click (press, op);
|
||||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||||
set_selected_track_as_side_effect (op);
|
set_selected_track_as_side_effect (op);
|
||||||
|
|
@ -652,7 +640,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
||||||
|
|
||||||
case ControlPointItem:
|
case ControlPointItem:
|
||||||
set_selected_track_as_side_effect (op);
|
set_selected_track_as_side_effect (op);
|
||||||
if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
if ( mouse_mode != MouseRange ) {
|
||||||
set_selected_control_point_from_click (press, op);
|
set_selected_control_point_from_click (press, op);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -820,7 +808,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
pair<TimeAxisView*, int> tvp = trackview_by_y_position (y);
|
pair<TimeAxisView*, int> tvp = trackview_by_y_position (y);
|
||||||
if (tvp.first) {
|
if (tvp.first) {
|
||||||
AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*> (tvp.first);
|
AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*> (tvp.first);
|
||||||
if (smart_mode_action->get_active() && atv) {
|
if ( get_smart_mode() && atv) {
|
||||||
/* smart "join" mode: drag automation */
|
/* smart "join" mode: drag automation */
|
||||||
_drags->set (new AutomationRangeDrag (this, atv, selection->time), event, _cursors->up_down);
|
_drags->set (new AutomationRangeDrag (this, atv, selection->time), event, _cursors->up_down);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -854,7 +842,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
|
|
||||||
case LeftFrameHandle:
|
case LeftFrameHandle:
|
||||||
case RightFrameHandle:
|
case RightFrameHandle:
|
||||||
if (!internal_editing() && doing_object_stuff() && !clicked_regionview->region()->locked()) {
|
if (!internal_editing() && !clicked_regionview->region()->locked()) {
|
||||||
RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id);
|
RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id);
|
||||||
_drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
|
_drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -975,9 +963,9 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!internal_editing() && (_join_object_range_state == JOIN_OBJECT_RANGE_RANGE && !selection->regions.empty())) {
|
// if (!internal_editing() && (_join_object_range_state == JOIN_OBJECT_RANGE_RANGE && !selection->regions.empty())) {
|
||||||
_drags->add (new SelectionDrag (this, clicked_axisview->get_selection_rect (clicked_selection)->rect, SelectionDrag::SelectionMove));
|
// _drags->add (new SelectionDrag (this, clicked_axisview->get_selection_rect (clicked_selection)->rect, SelectionDrag::SelectionMove));
|
||||||
}
|
// }
|
||||||
|
|
||||||
_drags->start_grab (event);
|
_drags->start_grab (event);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1054,7 +1042,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
|
|
||||||
case SelectionItem:
|
case SelectionItem:
|
||||||
{
|
{
|
||||||
if (smart_mode_action->get_active()) {
|
if ( get_smart_mode() ) {
|
||||||
/* we're in "smart" joined mode, and we've clicked on a Selection */
|
/* we're in "smart" joined mode, and we've clicked on a Selection */
|
||||||
double const y = event->button.y + vertical_adjustment.get_value() - canvas_timebars_vsize;
|
double const y = event->button.y + vertical_adjustment.get_value() - canvas_timebars_vsize;
|
||||||
pair<TimeAxisView*, int> tvp = trackview_by_y_position (y);
|
pair<TimeAxisView*, int> tvp = trackview_by_y_position (y);
|
||||||
|
|
@ -1068,7 +1056,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
/* if we're over a track and a region, and in the `object' part of a region,
|
/* if we're over a track and a region, and in the `object' part of a region,
|
||||||
put a selection around the region and drag both
|
put a selection around the region and drag both
|
||||||
*/
|
*/
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tvp.first);
|
/* RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tvp.first);
|
||||||
if (rtv && _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (rtv && _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
||||||
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (rtv->route ());
|
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (rtv->route ());
|
||||||
if (t) {
|
if (t) {
|
||||||
|
|
@ -1089,6 +1077,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1362,7 +1351,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
|
||||||
}
|
}
|
||||||
|
|
||||||
//not rolling, range mode click + join_play_range : locate the PH here
|
//not rolling, range mode click + join_play_range : locate the PH here
|
||||||
if ( !_drags->active () && !_session->transport_rolling() && ( (mouse_mode == MouseRange) || _join_object_range_state == JOIN_OBJECT_RANGE_RANGE ) && Config->get_always_play_range() ) {
|
if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && Config->get_always_play_range() ) {
|
||||||
framepos_t where = event_frame (event, 0, 0);
|
framepos_t where = event_frame (event, 0, 0);
|
||||||
snap_to(where);
|
snap_to(where);
|
||||||
_session->request_locate (where, false);
|
_session->request_locate (where, false);
|
||||||
|
|
@ -1439,16 +1428,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
were_dragging = true;
|
were_dragging = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//a mouse click (no drag) in the range area of an audio track. maybe locate the playhead here
|
|
||||||
if ( !_drags->active () && (effective_mouse_mode() == MouseRange) && Config->get_always_play_range() && (item_type != AutomationTrackItem) && !Keyboard::is_context_menu_event (&event->button)) {
|
|
||||||
if ( _join_object_range_state == JOIN_OBJECT_RANGE_RANGE ) {
|
|
||||||
framepos_t pos = event_frame (event, 0, 0);
|
|
||||||
snap_to(pos);
|
|
||||||
_session->request_locate (pos, false);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
update_region_layering_order_editor ();
|
update_region_layering_order_editor ();
|
||||||
|
|
||||||
/* edit events get handled here */
|
/* edit events get handled here */
|
||||||
|
|
@ -1492,7 +1471,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
}
|
}
|
||||||
|
|
||||||
/* context menu events get handled here */
|
/* context menu events get handled here */
|
||||||
|
|
||||||
if (Keyboard::is_context_menu_event (&event->button)) {
|
if (Keyboard::is_context_menu_event (&event->button)) {
|
||||||
|
|
||||||
context_click_event = *event;
|
context_click_event = *event;
|
||||||
|
|
@ -1847,7 +1825,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RegionViewNameHighlight:
|
case RegionViewNameHighlight:
|
||||||
if (is_drawable() && doing_object_stuff() && entered_regionview) {
|
if (is_drawable() && effective_mouse_mode() == MouseObject && entered_regionview) {
|
||||||
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
||||||
_over_region_trim_target = true;
|
_over_region_trim_target = true;
|
||||||
}
|
}
|
||||||
|
|
@ -1855,7 +1833,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
|
|
||||||
case LeftFrameHandle:
|
case LeftFrameHandle:
|
||||||
case RightFrameHandle:
|
case RightFrameHandle:
|
||||||
if (is_drawable() && doing_object_stuff() && !internal_editing() && entered_regionview) {
|
if (is_drawable() && effective_mouse_mode() == MouseObject && !internal_editing() && entered_regionview) {
|
||||||
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1981,7 +1959,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SelectionItem:
|
case SelectionItem:
|
||||||
if (smart_mode_action->get_active()) {
|
if ( get_smart_mode() ) {
|
||||||
set_canvas_cursor ();
|
set_canvas_cursor ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -2814,7 +2792,7 @@ Editor::update_join_object_range_location (double /*x*/, double y)
|
||||||
that we're over requires searching the playlist.
|
that we're over requires searching the playlist.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!smart_mode_action->get_active() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
|
if ( !get_smart_mode() ) {
|
||||||
_join_object_range_state = JOIN_OBJECT_RANGE_NONE;
|
_join_object_range_state = JOIN_OBJECT_RANGE_NONE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3641,7 +3641,7 @@ Editor::copy ()
|
||||||
bool
|
bool
|
||||||
Editor::can_cut_copy () const
|
Editor::can_cut_copy () const
|
||||||
{
|
{
|
||||||
switch (current_mouse_mode()) {
|
switch (effective_mouse_mode()) {
|
||||||
|
|
||||||
case MouseObject:
|
case MouseObject:
|
||||||
if (!selection->regions.empty() || !selection->points.empty()) {
|
if (!selection->regions.empty() || !selection->points.empty()) {
|
||||||
|
|
@ -3700,7 +3700,8 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cut_buffer->clear ();
|
if ( op != Clear ) //"Delete" doesn't change copy/paste buf
|
||||||
|
cut_buffer->clear ();
|
||||||
|
|
||||||
if (entered_marker) {
|
if (entered_marker) {
|
||||||
|
|
||||||
|
|
@ -3719,7 +3720,7 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
|
|
||||||
if (internal_editing()) {
|
if (internal_editing()) {
|
||||||
|
|
||||||
switch (current_mouse_mode()) {
|
switch (effective_mouse_mode()) {
|
||||||
case MouseObject:
|
case MouseObject:
|
||||||
case MouseRange:
|
case MouseRange:
|
||||||
cut_copy_midi (op);
|
cut_copy_midi (op);
|
||||||
|
|
@ -3730,19 +3731,62 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
RegionSelection rs;
|
RegionSelection rs;
|
||||||
|
|
||||||
/* we only want to cut regions if some are selected */
|
/* we only want to cut regions if some are selected */
|
||||||
|
|
||||||
if (doing_object_stuff()) {
|
if (!selection->regions.empty()) {
|
||||||
rs = get_regions_from_selection ();
|
rs = get_regions_from_selection ();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (effective_mouse_mode()) {
|
||||||
|
/*
|
||||||
|
* case MouseGain: {
|
||||||
|
//find regions's gain line
|
||||||
|
AudioRegionView *rview = dynamic_cast<AudioRegionView*>(clicked_regionview);
|
||||||
|
AutomationTimeAxisView *tview = dynamic_cast<AutomationTimeAxisView*>(clicked_trackview);
|
||||||
|
if (rview) {
|
||||||
|
AudioRegionGainLine *line = rview->get_gain_line();
|
||||||
|
if (!line) break;
|
||||||
|
|
||||||
|
//cut region gain points in the selection
|
||||||
|
AutomationList& alist (line->the_list());
|
||||||
|
XMLNode &before = alist.get_state();
|
||||||
|
AutomationList* what_we_got = 0;
|
||||||
|
if ((what_we_got = alist.cut (selection->time.front().start - rview->audio_region()->position(), selection->time.front().end - rview->audio_region()->position())) != 0) {
|
||||||
|
session->add_command(new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
|
||||||
|
delete what_we_got;
|
||||||
|
what_we_got = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
rview->set_envelope_visible(true);
|
||||||
|
rview->audio_region()->set_envelope_active(true);
|
||||||
|
|
||||||
|
} else if (tview) {
|
||||||
|
AutomationLine *line = *(tview->lines.begin());
|
||||||
|
if (!line) break;
|
||||||
|
|
||||||
|
//cut auto points in the selection
|
||||||
|
AutomationList& alist (line->the_list());
|
||||||
|
XMLNode &before = alist.get_state();
|
||||||
|
AutomationList* what_we_got = 0;
|
||||||
|
if ((what_we_got = alist.cut (selection->time.front().start, selection->time.front().end)) != 0) {
|
||||||
|
session->add_command(new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
|
||||||
|
delete what_we_got;
|
||||||
|
what_we_got = 0;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
} break;
|
||||||
|
*/
|
||||||
|
case MouseObject:
|
||||||
|
case MouseRange:
|
||||||
if (!rs.empty() || !selection->points.empty()) {
|
if (!rs.empty() || !selection->points.empty()) {
|
||||||
|
|
||||||
begin_reversible_command (opname + _(" objects"));
|
begin_reversible_command (opname + _(" objects"));
|
||||||
|
|
||||||
if (!rs.empty()) {
|
if (!rs.empty()) {
|
||||||
cut_copy_regions (op, rs);
|
cut_copy_regions (op, rs);
|
||||||
|
|
||||||
if (op == Cut || op == Delete) {
|
if (op == Cut || op == Delete) {
|
||||||
selection->clear_regions ();
|
selection->clear_regions ();
|
||||||
}
|
}
|
||||||
|
|
@ -3755,16 +3799,11 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
selection->clear_points ();
|
selection->clear_points ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commit_reversible_command ();
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
if (!selection->time.empty() && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) {
|
|
||||||
/* don't cause suprises */
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (doing_range_stuff()) {
|
commit_reversible_command ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (selection->time.empty()) {
|
if (selection->time.empty()) {
|
||||||
framepos_t start, end;
|
framepos_t start, end;
|
||||||
if (!get_edit_op_range (start, end)) {
|
if (!get_edit_op_range (start, end)) {
|
||||||
|
|
@ -3772,18 +3811,22 @@ Editor::cut_copy (CutCopyOp op)
|
||||||
}
|
}
|
||||||
selection->set (start, end);
|
selection->set (start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
begin_reversible_command (opname + _(" range"));
|
begin_reversible_command (opname + _(" range"));
|
||||||
cut_copy_ranges (op);
|
cut_copy_ranges (op);
|
||||||
commit_reversible_command ();
|
commit_reversible_command ();
|
||||||
|
|
||||||
if (op == Cut || op == Delete) {
|
if (op == Cut || op == Delete) {
|
||||||
selection->clear_time ();
|
selection->clear_time ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
|
||||||
if (op == Delete || op == Cut || op == Clear) {
|
if (op == Delete || op == Cut || op == Clear) {
|
||||||
_drags->abort ();
|
_drags->abort ();
|
||||||
}
|
}
|
||||||
|
|
@ -5443,9 +5486,7 @@ Editor::set_playhead_cursor ()
|
||||||
void
|
void
|
||||||
Editor::split_region ()
|
Editor::split_region ()
|
||||||
{
|
{
|
||||||
if (((mouse_mode == MouseRange) ||
|
if ( !selection->time.empty()) {
|
||||||
(mouse_mode != MouseObject && _join_object_range_state == JOIN_OBJECT_RANGE_RANGE)) &&
|
|
||||||
!selection->time.empty()) {
|
|
||||||
separate_regions_between (selection->time);
|
separate_regions_between (selection->time);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -962,9 +962,7 @@ Editor::track_selection_changed ()
|
||||||
(*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
|
(*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yn &&
|
if (yn) {
|
||||||
((mouse_mode == MouseRange) ||
|
|
||||||
((mouse_mode == MouseObject) && (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT)))) {
|
|
||||||
(*i)->reshow_selection (selection->time);
|
(*i)->reshow_selection (selection->time);
|
||||||
} else {
|
} else {
|
||||||
(*i)->hide_selection ();
|
(*i)->hide_selection ();
|
||||||
|
|
@ -1801,7 +1799,7 @@ Editor::select_range_between ()
|
||||||
framepos_t start;
|
framepos_t start;
|
||||||
framepos_t end;
|
framepos_t end;
|
||||||
|
|
||||||
if (mouse_mode == MouseRange && !selection->time.empty()) {
|
if ( !selection->time.empty() ) {
|
||||||
selection->clear_time ();
|
selection->clear_time ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
|
||||||
virtual bool show_measures () const = 0;
|
virtual bool show_measures () const = 0;
|
||||||
virtual bool redraw_measures () = 0;
|
virtual bool redraw_measures () = 0;
|
||||||
|
|
||||||
|
virtual Editing::MouseMode effective_mouse_mode () const = 0;
|
||||||
|
|
||||||
/** Open main export dialog */
|
/** Open main export dialog */
|
||||||
virtual void export_audio () = 0;
|
virtual void export_audio () = 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue