From 866d7efe0ac3f7eb569767a173f349da389b6bff Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 10 Nov 2018 02:59:23 +0100 Subject: [PATCH] Timeline: push the trackname attribute down into the widget/display ...in accordance to our general design guideline: we don't duplicate actual model values within the controllers/presenters, since our widgets act themselves as view-model --- src/gui/timeline/track-body.cpp | 9 +++++- src/gui/timeline/track-body.hpp | 4 ++- src/gui/timeline/track-head-widget.cpp | 10 +++++-- src/gui/timeline/track-head-widget.hpp | 4 ++- src/gui/timeline/track-presenter.cpp | 2 +- src/gui/timeline/track-presenter.hpp | 28 ++++++++++++++----- .../session/dummy-session-connection.cpp | 6 ++-- wiki/thinkPad.ichthyo.mm | 6 ++++ 8 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/gui/timeline/track-body.cpp b/src/gui/timeline/track-body.cpp index dca82cb9d..ac485de3a 100644 --- a/src/gui/timeline/track-body.cpp +++ b/src/gui/timeline/track-body.cpp @@ -64,7 +64,7 @@ namespace timeline { - TrackBody::TrackBody (cuString trackName) + TrackBody::TrackBody() : overviewHeight_{DEFAULT_OVERVIEW_HEIGHT_px} , contentHeight_{DEFAULT_OVERVIEW_HEIGHT_px} , subTracks_{} @@ -77,6 +77,13 @@ namespace timeline { } + void + TrackBody::setTrackName (cuString& trackName) + { + TODO ("is the track name of any relevance for the TrackBody widget?"); + } + + /** * recursively calculate the height in pixels to display this track, * including all nested sub-tracks diff --git a/src/gui/timeline/track-body.hpp b/src/gui/timeline/track-body.hpp index 839006066..f9f60401c 100644 --- a/src/gui/timeline/track-body.hpp +++ b/src/gui/timeline/track-body.hpp @@ -78,9 +78,11 @@ namespace timeline { SubTracks subTracks_; public: - TrackBody (cuString trackName); + TrackBody(); ~TrackBody(); + void setTrackName (cuString&); + uint calcHeight(); private:/* ===== Internals ===== */ diff --git a/src/gui/timeline/track-head-widget.cpp b/src/gui/timeline/track-head-widget.cpp index da1366bf8..e4748e996 100644 --- a/src/gui/timeline/track-head-widget.cpp +++ b/src/gui/timeline/track-head-widget.cpp @@ -62,9 +62,9 @@ namespace timeline { - TrackHeadWidget::TrackHeadWidget (cuString& trackName) + TrackHeadWidget::TrackHeadWidget() : Gtk::Grid{} - , nameTODO_{trackName} + , nameTODO_{"?"} , treeTODO_{"↳"} { this->attach (nameTODO_, 0,0, 2,1); @@ -74,6 +74,12 @@ namespace timeline { } + void + TrackHeadWidget::setTrackName (cuString& trackName) + { + nameTODO_.set_label (trackName); + } + /** * @remark The Lumiera Timeline model does not rely on a list of tracks, as most conventional * video editing software does -- rather, each sequence holds a _fork of nested scopes._ diff --git a/src/gui/timeline/track-head-widget.hpp b/src/gui/timeline/track-head-widget.hpp index f632e83fb..19d158ca4 100644 --- a/src/gui/timeline/track-head-widget.hpp +++ b/src/gui/timeline/track-head-widget.hpp @@ -74,9 +74,11 @@ namespace timeline { Gtk::Label treeTODO_; public: - TrackHeadWidget (cuString& trackName); + TrackHeadWidget(); ~TrackHeadWidget(); + void setTrackName (cuString&); + /** Integrate the control area for a nested sub track fork. */ void injectSubFork (TrackHeadWidget& subForkHead); diff --git a/src/gui/timeline/track-presenter.cpp b/src/gui/timeline/track-presenter.cpp index 829b460dc..e84610543 100644 --- a/src/gui/timeline/track-presenter.cpp +++ b/src/gui/timeline/track-presenter.cpp @@ -152,7 +152,7 @@ namespace timeline { })) .change(ATTR_name, [&](string val) { // »Attribute Setter« : receive a new value for the track name field - name_ = val; + this->setTrackName (val); })); } diff --git a/src/gui/timeline/track-presenter.hpp b/src/gui/timeline/track-presenter.hpp index 6befa66a0..70b4d8c97 100644 --- a/src/gui/timeline/track-presenter.hpp +++ b/src/gui/timeline/track-presenter.hpp @@ -80,9 +80,9 @@ namespace timeline { TrackBody body; template - DisplayFrame (cuString& name, FUN anchorDisplay) - : head{name} - , body{name} + DisplayFrame (FUN anchorDisplay) + : head{} + , body{} { anchorDisplay (head, body); } @@ -92,6 +92,13 @@ namespace timeline { TODO ("cause the managed presentation elements to detach from their parents"); } + void + setTrackName (cuString& name) + { + head.setTrackName (name); + body.setTrackName (name); ///////////////////////////////////TICKET #1017 -- TODO 11/18 : not clear yet if TrackBody needs to know its name + } + void injectSubTrack (TrackHeadWidget& head, TrackBody& body) { @@ -106,7 +113,6 @@ namespace timeline { class TrackPresenter : public model::Controller { - string name_; DisplayFrame display_; vector> subFork_; @@ -124,12 +130,13 @@ namespace timeline { template TrackPresenter (ID id, ctrl::BusTerm& nexus, FUN anchorDisplay) : Controller{id, nexus} - , name_{id.getSym()} // fallback initialise track-name from human-readable ID symbol - , display_{name_, anchorDisplay} + , display_{anchorDisplay} , subFork_{} , markers_{} , clips_{} - { } + { + setTrackName (id.getSym()); // fallback initialise track-name from human-readable ID symbol + } /** set up a binding to respond to mutation messages via UiBus */ @@ -137,6 +144,13 @@ namespace timeline { private:/* ===== Internals ===== */ + + /** invoked via diff to show a (changed) track name */ + void + setTrackName (string name) + { + display_.setTrackName (name); + } }; diff --git a/src/proc/mobject/session/dummy-session-connection.cpp b/src/proc/mobject/session/dummy-session-connection.cpp index 5913ea8cd..fcbd37adc 100644 --- a/src/proc/mobject/session/dummy-session-connection.cpp +++ b/src/proc/mobject/session/dummy-session-connection.cpp @@ -109,9 +109,9 @@ namespace session { DummySessionConnection::fabricateSeq1 (string baseID) { const RandID forkRootID{gui::ATTR_fork}; - const GenNode timeline = emptyTimeline (baseID, forkRootID); - const GenNode rootTrackName{string{gui::ATTR_name}, "Track-"+baseID} - , FORK_ROOT = MakeRec().genNode(forkRootID) + const GenNode timeline = emptyTimeline (baseID, forkRootID) + , rootTrackName = GenNode{string{gui::ATTR_name}, "Track-"+baseID} + , FORK_ROOT = MakeRec().genNode(forkRootID) ; return MutationMessage{ ins (timeline) diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 4e321b39e..d1482fd3d 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -19326,6 +19326,12 @@ + + + + + +