summaryrefslogtreecommitdiff
path: root/gtk2_ardour/automation_line.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-05-29 18:30:10 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-05-29 18:30:10 +0000
commitf1505b631dd6a2ef30eae01e00ca7162de0aba3f (patch)
tree9387adf7cde30f50990c1fae5ac92ecbd002eed4 /gtk2_ardour/automation_line.cc
parent71988944739d8daf2fda75ee709fa54af2f2f1f5 (diff)
substantive change to try to provide some rationality for region gain line visibility (and automation line visibility in general
git-svn-id: svn://localhost/ardour2/branches/3.0@12478 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/automation_line.cc')
-rw-r--r--gtk2_ardour/automation_line.cc85
1 files changed, 39 insertions, 46 deletions
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index 72bc1a69e3..54755d36c5 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -76,11 +76,11 @@ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanv
_our_time_converter = true;
}
- points_visible = false;
+ _visible = Line;
+
update_pending = false;
_uses_gain_mapping = false;
no_draw = false;
- _visible = true;
_is_boolean = false;
terminal_points_can_slide = true;
_height = 0;
@@ -135,27 +135,36 @@ AutomationLine::queue_reset ()
void
AutomationLine::show ()
{
- if (alist->interpolation() != AutomationList::Discrete) {
- line->show();
+ if (_visible & Line) {
+ if (alist->interpolation() != AutomationList::Discrete) {
+ line->show();
+ } else {
+ line->hide ();
+ }
+ } else {
+ line->hide();
}
- if (points_visible) {
+ if (_visible & ControlPoints) {
for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
+ (*i)->set_visible (true);
(*i)->show ();
}
+ } else if (_visible & SelectedControlPoints) {
+ for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
+ (*i)->set_visible ((*i)->get_selected());
+ }
+ } else {
+ for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
+ (*i)->set_visible (false);
+ }
}
-
- _visible = true;
}
void
AutomationLine::hide ()
{
- line->hide();
- for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
- (*i)->hide();
- }
- _visible = false;
+ set_visibility (VisibleAspects (0));
}
double
@@ -895,44 +904,31 @@ AutomationLine::set_list (boost::shared_ptr<ARDOUR::AutomationList> list)
}
void
-AutomationLine::show_all_control_points ()
+AutomationLine::add_visibility (VisibleAspects va)
{
- if (_is_boolean) {
- // show the line but don't allow any control points
- return;
- }
-
- points_visible = true;
-
- for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
- if (!(*i)->visible()) {
- (*i)->show ();
- (*i)->set_visible (true);
- }
- }
+ _visible = VisibleAspects (_visible | va);
+ show ();
}
void
-AutomationLine::hide_all_but_selected_control_points ()
+AutomationLine::set_visibility (VisibleAspects va)
{
- if (alist->interpolation() == AutomationList::Discrete) {
- return;
- }
-
- points_visible = false;
+ _visible = va;
+ show ();
+}
- for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
- if (!(*i)->get_selected()) {
- (*i)->set_visible (false);
- }
- }
+void
+AutomationLine::remove_visibility (VisibleAspects va)
+{
+ _visible = VisibleAspects (_visible & ~va);
+ show ();
}
void
AutomationLine::track_entered()
{
if (alist->interpolation() != AutomationList::Discrete) {
- show_all_control_points();
+ add_visibility (ControlPoints);
}
}
@@ -940,7 +936,7 @@ void
AutomationLine::track_exited()
{
if (alist->interpolation() != AutomationList::Discrete) {
- hide_all_but_selected_control_points();
+ remove_visibility (ControlPoints);
}
}
@@ -1011,11 +1007,10 @@ void
AutomationLine::interpolation_changed (AutomationList::InterpolationStyle style)
{
if (style == AutomationList::Discrete) {
- show_all_control_points();
+ set_visibility (ControlPoints);
line->hide();
} else {
- hide_all_but_selected_control_points();
- line->show();
+ set_visibility (Line);
}
}
@@ -1059,13 +1054,11 @@ AutomationLine::add_visible_control_point (uint32_t view_index, uint32_t pi, dou
/* finally, control visibility */
- if (_visible && points_visible) {
+ if (_visible & ControlPoints) {
control_points[view_index]->show ();
control_points[view_index]->set_visible (true);
} else {
- if (!points_visible) {
- control_points[view_index]->set_visible (false);
- }
+ control_points[view_index]->set_visible (false);
}
}