diff --git a/src/Track.cpp b/src/Track.cpp index 4778b1d70..6e77df7f9 100644 --- a/src/Track.cpp +++ b/src/Track.cpp @@ -1191,9 +1191,10 @@ void Track::WriteCommonXMLAttributes( xmlFile.WriteAttr(wxT("name"), GetName()); xmlFile.WriteAttr(wxT("isSelected"), this->GetSelected()); } - auto &view = TrackView::Get( *this ); - xmlFile.WriteAttr(wxT("height"), view.GetActualHeight()); - xmlFile.WriteAttr(wxT("minimized"), view.GetMinimized()); + if ( mpView ) + mpView->WriteXMLAttributes( xmlFile ); + if ( mpControls ) + mpControls->WriteXMLAttributes( xmlFile ); } // Return true iff the attribute is recognized. @@ -1201,21 +1202,15 @@ bool Track::HandleCommonXMLAttribute(const wxChar *attr, const wxChar *value) { long nValue = -1; wxString strValue( value ); - if (!wxStrcmp(attr, wxT("name")) && + if ( mpView && mpView->HandleXMLAttribute( attr, value ) ) + ; + else if ( mpControls && mpControls->HandleXMLAttribute( attr, value ) ) + ; + else if (!wxStrcmp(attr, wxT("name")) && XMLValueChecker::IsGoodString(strValue)) { SetName( strValue ); return true; } - else if (!wxStrcmp(attr, wxT("height")) && - XMLValueChecker::IsGoodInt(strValue) && strValue.ToLong(&nValue)) { - TrackView::Get( *this ).SetHeight(nValue); - return true; - } - else if (!wxStrcmp(attr, wxT("minimized")) && - XMLValueChecker::IsGoodInt(strValue) && strValue.ToLong(&nValue)) { - TrackView::Get( *this ).SetMinimized(nValue != 0); - return true; - } else if (!wxStrcmp(attr, wxT("isSelected")) && XMLValueChecker::IsGoodInt(strValue) && strValue.ToLong(&nValue)) { this->SetSelected(nValue != 0); diff --git a/src/tracks/ui/CommonTrackPanelCell.cpp b/src/tracks/ui/CommonTrackPanelCell.cpp index 5c3caeb26..e3b280e6f 100644 --- a/src/tracks/ui/CommonTrackPanelCell.cpp +++ b/src/tracks/ui/CommonTrackPanelCell.cpp @@ -66,3 +66,12 @@ std::shared_ptr CommonTrackCell::DoFindTrack() { return mwTrack.lock(); } + +void CommonTrackCell::WriteXMLAttributes( XMLWriter & ) const +{ +} + +bool CommonTrackCell::HandleXMLAttribute( const wxChar *, const wxChar * ) +{ + return false; +} diff --git a/src/tracks/ui/CommonTrackPanelCell.h b/src/tracks/ui/CommonTrackPanelCell.h index a571624b5..ace3520fe 100644 --- a/src/tracks/ui/CommonTrackPanelCell.h +++ b/src/tracks/ui/CommonTrackPanelCell.h @@ -19,6 +19,7 @@ Paul Licameli split from TrackPanel.cpp #include class Track; +class XMLWriter; class AUDACITY_DLL_API CommonTrackPanelCell /* not final */ : public TrackPanelCell @@ -65,6 +66,12 @@ public: virtual void Reparent( const std::shared_ptr &parent ); + // default does nothing + virtual void WriteXMLAttributes( XMLWriter & ) const; + + // default recognizes no attributes, and returns false + virtual bool HandleXMLAttribute( const wxChar *attr, const wxChar *value ); + private: std::weak_ptr< Track > mwTrack; }; diff --git a/src/tracks/ui/TrackView.cpp b/src/tracks/ui/TrackView.cpp index d1924434f..0deb266c1 100644 --- a/src/tracks/ui/TrackView.cpp +++ b/src/tracks/ui/TrackView.cpp @@ -16,6 +16,8 @@ Paul Licameli split from TrackPanel.cpp #include "../../ClientData.h" #include "../../Project.h" +#include "../../xml/XMLTagHandler.h" +#include "../../xml/XMLWriter.h" TrackView::~TrackView() { @@ -74,6 +76,30 @@ void TrackView::SetMinimized(bool isMinimized) leader->AdjustPositions(); } +void TrackView::WriteXMLAttributes( XMLWriter &xmlFile ) const +{ + xmlFile.WriteAttr(wxT("height"), GetActualHeight()); + xmlFile.WriteAttr(wxT("minimized"), GetMinimized()); +} + +bool TrackView::HandleXMLAttribute( const wxChar *attr, const wxChar *value ) +{ + wxString strValue; + long nValue; + if (!wxStrcmp(attr, wxT("height")) && + XMLValueChecker::IsGoodInt(strValue) && strValue.ToLong(&nValue)) { + SetHeight(nValue); + return true; + } + else if (!wxStrcmp(attr, wxT("minimized")) && + XMLValueChecker::IsGoodInt(strValue) && strValue.ToLong(&nValue)) { + SetMinimized(nValue != 0); + return true; + } + else + return false; +} + void TrackView::DoSetMinimized(bool isMinimized) { mMinimized = isMinimized; diff --git a/src/tracks/ui/TrackView.h b/src/tracks/ui/TrackView.h index e1afaa32d..3c339c78b 100644 --- a/src/tracks/ui/TrackView.h +++ b/src/tracks/ui/TrackView.h @@ -69,6 +69,9 @@ public: std::shared_ptr GetResizer(); std::shared_ptr GetResizer() const; + void WriteXMLAttributes( XMLWriter & ) const override; + bool HandleXMLAttribute( const wxChar *attr, const wxChar *value ) override; + protected: virtual void DoSetMinimized( bool isMinimized );