#include "pbd/error.h"
#include "pbd/enumwriter.h"
-#include <gtkmm2ext/utils.h>
-#include <gtkmm2ext/tearoff.h>
#include "pbd/memento_command.h"
#include "pbd/basename.h"
#include "pbd/stateful_diff_command.h"
+#include "gtkmm2ext/bindings.h"
+#include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/tearoff.h"
+
#include "ardour_ui.h"
#include "actions.h"
#include "canvas-note.h"
Selection::Operation op = ArdourKeyboard::selection_type (event->button.state);
bool press = (event->type == GDK_BUTTON_PRESS);
- // begin_reversible_command (_("select on click"));
-
switch (item_type) {
case RegionItem:
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
if (internal_editing()) {
/* trim notes if we're in internal edit mode and near the ends of the note */
ArdourCanvas::CanvasNote* cn = dynamic_cast<ArdourCanvas::CanvasNote*> (item);
- cerr << "NoteItem button press, cursor = " << current_canvas_cursor << endl;
- if (cn->mouse_near_ends()) {
+ if (cn->big_enough_to_trim() && cn->mouse_near_ends()) {
_drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
} else {
_drags->set (new NoteDrag (this, item), event);
/* click on a normal region view */
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
add_region_copy_drag (item, event, clicked_regionview);
- }
- else if (Keyboard::the_keyboard().key_is_down (GDK_b)) {
+ } else if (Keyboard::the_keyboard().key_is_down (GDK_b)) {
add_region_brush_drag (item, event, clicked_regionview);
} else {
add_region_drag (item, event, clicked_regionview);
case MouseObject:
switch (item_type) {
case RegionItem:
+ if (internal_editing ()) {
+ /* no region drags in internal edit mode */
+ return false;
+ }
+
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
add_region_copy_drag (item, event, clicked_regionview);
} else {
case MouseZoom:
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
- temporal_zoom_session();
+ temporal_zoom_to_frame (false, event_frame (event));
} else {
temporal_zoom_to_frame (true, event_frame(event));
}
break;
default:
+ return button_press_dispatch (&event->button);
break;
}
return false;
}
+bool
+Editor::button_press_dispatch (GdkEventButton* ev)
+{
+ /* this function is intended only for buttons 4 and above.
+ */
+
+ Gtkmm2ext::MouseButton b (ev->state, ev->button);
+ return button_bindings->activate (b, Gtkmm2ext::Bindings::Press);
+}
+
+bool
+Editor::button_release_dispatch (GdkEventButton* ev)
+{
+ /* this function is intended only for buttons 4 and above.
+ */
+
+ Gtkmm2ext::MouseButton b (ev->state, ev->button);
+ return button_bindings->activate (b, Gtkmm2ext::Bindings::Release);
+}
+
bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
break;
case MouseAudition:
- set_canvas_cursor (current_canvas_cursor);
+ set_canvas_cursor (current_canvas_cursor);
if (scrubbing_direction == 0) {
/* no drag, just a click */
switch (item_type) {
default:
break;
-
+
}
+ /* do any (de)selection operations that should occur on button release */
+ button_selection (item, event, item_type);
return true;
break;
default:
break;
}
+
return false;
}
break;
case FeatureLineItem:
{
- ArdourCanvas::SimpleLine *line = dynamic_cast<ArdourCanvas::SimpleLine *> (item);
- line->property_color_rgba() = 0xFF0000FF;
+ ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
+ line->property_fill_color_rgba() = 0xFF0000FF;
}
break;
case SelectionItem:
break;
case FeatureLineItem:
{
- ArdourCanvas::SimpleLine *line = dynamic_cast<ArdourCanvas::SimpleLine *> (item);
- line->property_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();;
+ ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
+ line->property_fill_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();;
}
break;
double speed = rtv->track()->speed();
playlist->clear_changes ();
- boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region()));
+ boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region(), true));
playlist->add_region (new_region, (framepos_t) (pos * speed));
_session->add_command (new StatefulDiffCommand (playlist));
ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Draw/Edit MIDI Notes"));
mouse_mode_toggled (mouse_mode);
+ pre_internal_mouse_mode = mouse_mode;
+
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ (*i)->enter_internal_edit_mode ();
+ }
+
} else {
mouse_select_button.set_image (*(manage (new Image (::get_icon("tool_range")))));
mouse_select_button.get_image ()->show ();
ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Select/Move Ranges"));
mouse_mode_toggled (mouse_mode); // sets cursor
+
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ (*i)->leave_internal_edit_mode ();
+ }
+
+ if (mouse_mode == MouseRange && pre_internal_mouse_mode != MouseRange) {
+ /* we were drawing .. flip back to something sensible */
+ set_mouse_mode (pre_internal_mouse_mode);
+ }
}
}