skip markers respond to single-click by toggling skipping state

This commit is contained in:
Paul Davis 2014-09-21 17:38:35 -04:00
parent 119c91813f
commit 2bff69b2fa
5 changed files with 39 additions and 7 deletions

View file

@ -58,6 +58,7 @@ CANVAS_VARIABLE(canvasvar_LocationLoop, "location loop")
CANVAS_VARIABLE(canvasvar_LocationMarker, "location marker")
CANVAS_VARIABLE(canvasvar_LocationPunch, "location punch")
CANVAS_VARIABLE(canvasvar_LocationSkip, "location skip")
CANVAS_VARIABLE(canvasvar_LocationSkipping, "location skipping")
CANVAS_VARIABLE(canvasvar_LocationRange, "location range")
CANVAS_VARIABLE(canvasvar_MarkerBar, "marker bar")
CANVAS_VARIABLE(canvasvar_MarkerBarSeparator, "marker bar separator")

View file

@ -47,10 +47,11 @@
<Option name="inactive fade handle" value="bbbbbbaa"/>
<Option name="inactive group tab" value="434343ff"/>
<Option name="location cd marker" value="B700FFff"/>
<Option name="location loop" value="5DA557ff"/>
<Option name="location loop" value="ffffffff"/>
<Option name="location marker" value="B700FFff"/>
<Option name="location punch" value="B700FFff"/>
<Option name="location skip" value="eb7801ff"/>
<Option name="location skip" value="6c6c6cff"/>
<Option name="location skipping" value="eb7801ff"/>
<Option name="location range" value="E0922Fff"/>
<Option name="marker bar" value="575757ff"/>
<Option name="marker bar separator" value="ffffff15"/>

View file

@ -3419,13 +3419,24 @@ void
MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
{
if (!movement_occurred) {
if (was_double_click()) {
_editor->rename_marker (_marker);
return;
}
/* just a click, do nothing but finish
/* just a single click */
Location* loc = _marker->location ();
if (loc) {
if (loc->is_skip()) {
/* skip range - click toggles active skip status */
loc->set_skipping (!loc->is_skipping());
return;
}
}
/* other markers: do nothing but finish
off the selection process
*/
@ -4550,7 +4561,7 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
if (_operation == CreateSkipMarker) {
_editor->begin_reversible_command (_("new skip marker"));
_editor->session()->locations()->next_available_name(rangename,_("skip "));
flags = Location::IsRangeMarker | Location::IsSkip;
flags = Location::IsRangeMarker | Location::IsSkip | Location::IsSkipping;
_editor->skip_drag_rect->hide();
} else if (_operation == CreateCDMarker) {
_editor->session()->locations()->next_available_name(rangename, _("CD"));
@ -4559,7 +4570,7 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
_editor->cd_marker_bar_drag_rect->hide();
} else {
_editor->begin_reversible_command (_("new range marker"));
_editor->session()->locations()->next_available_name(rangename, _("Marker "));
_editor->session()->locations()->next_available_name (rangename, _(Marker::default_new_marker_prefix));
flags = Location::IsRangeMarker;
_editor->range_bar_drag_rect->hide();
}

View file

@ -40,6 +40,7 @@
* due to a conflicting definition of 'Rect' between
* Apple's MacTypes.h and GTK.
*/
#include "gui_thread.h"
#include "marker.h"
#include "public_editor.h"
#include "utils.h"
@ -300,6 +301,10 @@ Marker::Marker (ARDOUR::Location* l, PublicEditor& ed, ArdourCanvas::Container&
set_name (annotation);
pick_basic_color (rgba);
use_color ();
if (_location) {
_location->FlagsChanged.connect (flags_changed_connection, MISSING_INVALIDATOR, boost::bind (&Marker::flags_changed, this), gui_context());
}
}
Marker::~Marker ()
@ -317,6 +322,12 @@ void Marker::reparent(ArdourCanvas::Container & parent)
_parent = &parent;
}
void
Marker::flags_changed ()
{
pick_basic_color (0);
}
void
Marker::set_color (ArdourCanvas::Color c)
{
@ -345,7 +356,11 @@ Marker::pick_basic_color (ArdourCanvas::Color c)
} else if (_location->is_auto_punch()) {
col = ARDOUR_UI::config()->get_canvasvar_LocationPunch();
} else if (_location->is_skip()) {
col = ARDOUR_UI::config()->get_canvasvar_LocationSkip();
if (_location->is_skipping()) {
col = ARDOUR_UI::config()->get_canvasvar_LocationSkipping();
} else {
col = ARDOUR_UI::config()->get_canvasvar_LocationSkip();
}
} else {
col = ARDOUR_UI::config()->get_canvasvar_LocationRange();
}

View file

@ -65,6 +65,7 @@ class Marker : public sigc::trackable
static PBD::Signal1<void,Marker*> CatchDeletion;
ArdourCanvas::Item& the_item() const;
ARDOUR::Location* location() const { return _location; }
void set_has_scene_change (bool);
@ -127,6 +128,7 @@ class Marker : public sigc::trackable
double _label_offset;
bool _have_scene_change;
void flags_changed ();
void pick_basic_color (ArdourCanvas::Color);
virtual void use_color ();
void reposition ();
@ -139,6 +141,8 @@ private:
/* disallow copy construction */
Marker (Marker const &);
Marker & operator= (Marker const &);
PBD::ScopedConnection flags_changed_connection;
};
/** A Marker that displays a range (start+end) rather than a single location