void edit_tempo_section (ARDOUR::TempoSection*);
void edit_meter_section (ARDOUR::MeterSection*);
- void edit_tempo_marker (ArdourCanvas::Item*);
- void edit_meter_marker (ArdourCanvas::Item*);
+ void edit_tempo_marker (TempoMarker&);
+ void edit_meter_marker (MeterMarker&);
void edit_control_point (ArdourCanvas::Item*);
void edit_notes (TimeAxisViewItem&);
RegionMotionDrag::finished (ev, movement_occurred);
if (!movement_occurred) {
+
/* just a click */
+
+ if (was_double_click() && !_views.empty()) {
+ DraggingView dv = _views.front();
+ dv.view->show_region_editor ();
+
+ }
+
return;
}
void
MeterMarkerDrag::motion (GdkEvent* event, bool first_move)
{
+ if (!_marker->meter().movable()) {
+ return;
+ }
+
if (first_move) {
// create a dummy marker for visual representation of moving the
MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
{
if (!movement_occurred) {
+ if (was_double_click()) {
+ _editor->edit_meter_marker (*_marker);
+ }
+ return;
+ }
+
+ if (!_marker->meter().movable()) {
return;
}
void
TempoMarkerDrag::motion (GdkEvent* event, bool first_move)
{
+ if (!_marker->tempo().movable()) {
+ return;
+ }
+
if (first_move) {
// create a dummy marker for visual representation of moving the
TempoMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
{
if (!movement_occurred) {
+ if (was_double_click()) {
+ _editor->edit_tempo_marker (*_marker);
+ }
+ return;
+ }
+
+ if (!_marker->tempo().movable()) {
return;
}
if (!movement_occurred) {
if (was_double_click()) {
- cerr << "End of marker double click\n";
+ _editor->rename_marker (_marker);
+ return;
}
/* just a click, do nothing but finish
_editor->new_transport_marker_context_menu (&event->button, _item);
break;
}
+
} else {
+
/* just a click, no pointer movement. remember that context menu stuff was handled elsewhere */
- if (Keyboard::no_modifier_keys_pressed (&event->button) && _operation != CreateCDMarker) {
+ if (_operation == CreateTransportMarker) {
+
+ /* didn't drag, so just locate */
+
+ _editor->session()->request_locate (grab_frame(), _editor->session()->transport_rolling());
+
+ } else if (_operation == CreateCDMarker) {
+
+ /* didn't drag, but mark is already created so do
+ * nothing */
+
+ } else { /* operation == CreateRangeMarker */
+
framepos_t start;
framepos_t end;
{
TempoMarker* m = reinterpret_cast<TempoMarker*> (item->get_data ("marker"));
assert (m);
- if (m->tempo().movable ()) {
- _drags->set (
- new TempoMarkerDrag (
- this,
- item,
- Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)
- ),
- event
- );
- return true;
- } else {
- return false;
- }
+ _drags->set (
+ new TempoMarkerDrag (
+ this,
+ item,
+ Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)
+ ),
+ event
+ );
+ return true;
}
case MeterMarkerItem:
{
MeterMarker* m = reinterpret_cast<MeterMarker*> (item->get_data ("marker"));
assert (m);
- if (m->meter().movable ()) {
- _drags->set (
- new MeterMarkerDrag (
- this,
- item,
- Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)
- ),
- event
- );
- return true;
- } else {
- return false;
- }
+ _drags->set (
+ new MeterMarkerDrag (
+ this,
+ item,
+ Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)
+ ),
+ event
+ );
+ return true;
}
case VideoBarItem:
{
if (event->type == GDK_2BUTTON_PRESS) {
_drags->mark_double_click ();
- return false;
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ return true;
}
if (event->type != GDK_BUTTON_PRESS) {
- if (event->type == GDK_2BUTTON_PRESS) {
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- return button_double_click_handler (item, event, item_type);
- }
return false;
}
return button_bindings->activate (b, Gtkmm2ext::Bindings::Release);
}
-bool
-Editor::button_double_click_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) {
-
- if (event->button.button != 1) {
- return false;
- }
-
- switch (item_type) {
- case RegionItem:
- RegionView *rv;
- rv = clicked_regionview;
- rv->show_region_editor ();
- return true;
- case NoteItem:
- case PlayheadCursorItem:
- break;
- case MarkerItem:
- case RangeMarkerBarItem:
- case CdMarkerBarItem:
- Marker* marker;
- if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
- break;
- }
- rename_marker (marker);
- return true;
- case TempoMarkerItem:
- edit_tempo_marker (item);
- return true;
- case MeterMarkerItem:
- edit_meter_marker (item);
- return true;
- case MarkerBarItem:
- case TempoBarItem:
- case MeterBarItem:
- case TransportMarkerBarItem:
- case StreamItem:
- break;
-
- default:
- break;
- }
- return false;
-}
-
-
-
bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
show_region_properties ();
break;
- case TempoMarkerItem:
- edit_tempo_marker (item);
+ case TempoMarkerItem: {
+ Marker* marker;
+ TempoMarker* tempo_marker;
+
+ if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
+ fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
+ /*NOTREACHED*/
+ }
+
+ if ((tempo_marker = dynamic_cast<TempoMarker*> (marker)) == 0) {
+ fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg;
+ /*NOTREACHED*/
+ }
+
+ edit_tempo_marker (*tempo_marker);
break;
+ }
- case MeterMarkerItem:
- edit_meter_marker (item);
+ case MeterMarkerItem: {
+ Marker* marker;
+ MeterMarker* meter_marker;
+
+ if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
+ fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
+ /*NOTREACHED*/
+ }
+
+ if ((meter_marker = dynamic_cast<MeterMarker*> (marker)) == 0) {
+ fatal << _("programming error: marker for meter is not a meter marker!") << endmsg;
+ /*NOTREACHED*/
+ }
+ edit_meter_marker (*meter_marker);
break;
+ }
case RegionViewName:
if (clicked_regionview->name_active()) {
}
void
-Editor::edit_tempo_marker (ArdourCanvas::Item *item)
+Editor::edit_tempo_marker (TempoMarker& tm)
{
- Marker* marker;
- TempoMarker* tempo_marker;
-
- if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
- fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
- }
-
- if ((tempo_marker = dynamic_cast<TempoMarker*> (marker)) == 0) {
- fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg;
- /*NOTREACHED*/
- }
-
- edit_tempo_section (&tempo_marker->tempo());
+ edit_tempo_section (&tm.tempo());
}
void
-Editor::edit_meter_marker (ArdourCanvas::Item *item)
+Editor::edit_meter_marker (MeterMarker& mm)
{
- Marker* marker;
- MeterMarker* meter_marker;
-
- if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
- fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
- /*NOTREACHED*/
- }
-
- if ((meter_marker = dynamic_cast<MeterMarker*> (marker)) == 0) {
- fatal << _("programming error: marker for meter is not a meter marker!") << endmsg;
- /*NOTREACHED*/
- }
-
- edit_meter_section (&meter_marker->meter());
+ edit_meter_section (&mm.meter());
}
gint