summaryrefslogtreecommitdiff
path: root/gtk2_ardour/automation_time_axis.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-07-07 00:37:13 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-07-07 00:37:13 +0000
commit10cb0a7646ae7da18e5e6f49b940a5e921a73b57 (patch)
tree9d23f3e2e5d961aa2520f51ebcf5ed9b64cf7c5c /gtk2_ardour/automation_time_axis.cc
parentd5bb72975523a35e65d94605de2abff01c3e6ce7 (diff)
introduce GUIObjectState; massive, pervasive changes in visibility and height management for track displays in the editor
git-svn-id: svn://localhost/ardour2/branches/3.0@9796 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/automation_time_axis.cc')
-rw-r--r--gtk2_ardour/automation_time_axis.cc136
1 files changed, 37 insertions, 99 deletions
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 26ca2ed79d..8adc1a904e 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -54,7 +54,6 @@ using namespace Editing;
Pango::FontDescription AutomationTimeAxisView::name_font;
bool AutomationTimeAxisView::have_name_font = false;
-const string AutomationTimeAxisView::state_node_name = "AutomationChild";
/** \a a the automatable object this time axis is to display data for.
@@ -142,6 +141,13 @@ AutomationTimeAxisView::AutomationTimeAxisView (
ARDOUR_UI::instance()->set_tip(auto_button, _("automation state"));
ARDOUR_UI::instance()->set_tip(hide_button, _("hide track"));
+ string str = gui_property ("height");
+ if (!str.empty()) {
+ set_height (atoi (str));
+ } else {
+ set_height (preset_height (HeightNormal));
+ }
+
/* rearrange the name display */
/* we never show these for automation tracks, so make
@@ -186,12 +192,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (
controls_base_unselected_name = X_("AutomationTrackControlsBase");
controls_ebox.set_name (controls_base_unselected_name);
- XMLNode* xml_node = get_state_node ();
-
- if (xml_node) {
- set_state (*xml_node, Stateful::loading_state_version);
- }
-
/* ask for notifications of any new RegionViews */
if (show_regions) {
@@ -403,19 +403,8 @@ AutomationTimeAxisView::set_height (uint32_t h)
uint32_t const normal = preset_height (HeightNormal);
bool const changed_between_small_and_normal = ( (height < normal && h >= normal) || (height >= normal || h < normal) );
- TimeAxisView* state_parent = get_parent_with_state ();
- assert(state_parent);
- XMLNode* xml_node = 0;
-
- if (_control) {
- xml_node = _control->extra_xml ("GUI");
- } else {
- /* XXX we need somewhere to store GUI info for per-region
- * automation
- */
- }
-
TimeAxisView::set_height (h);
+
_base_rect->property_y2() = h;
if (_line) {
@@ -427,12 +416,6 @@ AutomationTimeAxisView::set_height (uint32_t h)
_view->update_contents_height();
}
- char buf[32];
- snprintf (buf, sizeof (buf), "%u", height);
- if (xml_node) {
- xml_node->add_property ("height", buf);
- }
-
if (changed_between_small_and_normal || first_call_to_set_height) {
first_call_to_set_height = false;
@@ -483,12 +466,12 @@ AutomationTimeAxisView::set_samples_per_unit (double spu)
void
AutomationTimeAxisView::hide_clicked ()
{
- // LAME fix for refreshing the hide button
hide_button.set_sensitive(false);
-
set_marked_for_display (false);
- hide ();
-
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(parent);
+ if (rtv) {
+ rtv->request_redraw ();
+ }
hide_button.set_sensitive(true);
}
@@ -951,62 +934,31 @@ AutomationTimeAxisView::color_handler ()
}
int
-AutomationTimeAxisView::set_state (const XMLNode& node, int version)
-{
- TimeAxisView::set_state (node, version);
-
- if (version < 3000) {
- return set_state_2X (node, version);
- }
-
- XMLProperty const * prop = node.property ("shown");
-
- if (prop) {
- set_visibility (string_is_affirmative (prop->value()));
- } else {
- set_visibility (false);
- }
-
- return 0;
-}
-
-int
AutomationTimeAxisView::set_state_2X (const XMLNode& node, int /*version*/)
{
if (node.name() == X_("gain") && _parameter == Evoral::Parameter (GainAutomation)) {
XMLProperty const * shown = node.property (X_("shown"));
- if (shown && string_is_affirmative (shown->value ())) {
- set_marked_for_display (true);
- _canvas_display->show (); /* FIXME: necessary? show_at? */
+ if (shown) {
+ bool yn = string_is_affirmative (shown->value ());
+ if (yn) {
+ _canvas_display->show (); /* FIXME: necessary? show_at? */
+ }
+ set_gui_property ("visible", (yn ? "yes" : "no"));
+ } else {
+ set_gui_property ("visible", "no");
}
}
- if (!_marked_for_display) {
- hide ();
- }
-
return 0;
}
-XMLNode*
-AutomationTimeAxisView::get_state_node ()
+int
+AutomationTimeAxisView::set_state (const XMLNode& node, int /*version*/)
{
- if (_control) {
- return _control->extra_xml ("GUI", true);
- }
return 0;
}
void
-AutomationTimeAxisView::update_extra_xml_shown (bool shown)
-{
- XMLNode* xml_node = get_state_node();
- if (xml_node) {
- xml_node->add_property ("shown", shown ? "yes" : "no");
- }
-}
-
-void
AutomationTimeAxisView::what_has_visible_automation (const boost::shared_ptr<Automatable>& automatable, set<Evoral::Parameter>& visible)
{
/* this keeps "knowledge" of how we store visibility information
@@ -1037,35 +989,6 @@ AutomationTimeAxisView::what_has_visible_automation (const boost::shared_ptr<Aut
}
}
-guint32
-AutomationTimeAxisView::show_at (double y, int& nth, Gtk::VBox *parent)
-{
- if (!canvas_item_visible (_canvas_display)) {
- update_extra_xml_shown (true);
- }
-
- return TimeAxisView::show_at (y, nth, parent);
-}
-
-void
-AutomationTimeAxisView::show ()
-{
- if (!canvas_item_visible (_canvas_display)) {
- update_extra_xml_shown (true);
- }
-
- return TimeAxisView::show ();
-}
-
-void
-AutomationTimeAxisView::hide ()
-{
- if (canvas_item_visible (_canvas_display)) {
- update_extra_xml_shown (false);
- }
-
- TimeAxisView::hide ();
-}
/** @return true if this view has any automation data to display */
bool
@@ -1087,3 +1010,18 @@ AutomationTimeAxisView::lines () const
return lines;
}
+
+string
+AutomationTimeAxisView::state_id() const
+{
+ if (_control) {
+ return string_compose ("automation %1", _control->id().to_s());
+ } else {
+ assert (_parameter);
+ return string_compose ("automation %1 %2/%3/%4",
+ _route->id(),
+ _parameter.type(),
+ _parameter.id(),
+ _parameter.channel());
+ }
+}