43 TimelineLayout::~TimelineLayout() { }
45 TimelineLayout::TimelineLayout (Gtk::Paned& topLevelContainer)
46 : paneSplitPosition_{topLevelContainer.property_position()}
48 , headerPane_{bodyCanvas_.get_vadjustment()}
49 , displayEvaluation_{}
51 topLevelContainer.add1 (headerPane_);
52 topLevelContainer.add2 (bodyCanvas_);
54 zoomWindow_.attachChangeNotification (signalStructureChange_);
56 bodyCanvas_.get_hadjustment()->property_value().signal_changed().connect(
58 ,bodyCanvas_.get_hadjustment()));
60 bodyCanvas_.signal_size_allocate().connect(
76 headerPane_.installForkRoot (head);
77 bodyCanvas_.installForkRoot (body);
80 body.signalStructureChange_ = signalStructureChange_;
81 signalStructureChange_();
91 displayEvaluation_.attach (*
this);
92 displayEvaluation_.attach (forkRoot);
93 displayEvaluation_.attach (bodyCanvas_);
97 TimelineLayout::getBodyWidgetPath()
const 99 return bodyCanvas_.get_path();
113 displayEvaluation_.perform();
123 Time windowStart = zoomWindow_.visible().start();
124 int pxOffset = translateTimeToPixels (windowStart);
125 bodyCanvas_.get_hadjustment()->set_value(pxOffset);
146 double pos = hadj->get_value();
147 TimeValue windowStart = applyScreenDelta(zoomWindow_.overallSpan().start(), pos);
148 zoomWindow_.setVisibleStart (windowStart);
159 int contentWidthPx = alloc.get_width();
160 if (abs(contentWidthPx) != zoomWindow_.pxWidth())
161 zoomWindow_.calibrateExtension (contentWidthPx);
171 headerPane_.installForkRoot (head);
177 bodyCanvas_.installForkRoot (body);
180 body.signalStructureChange_ = signalStructureChange_;
181 signalStructureChange_();
188 headerPane_.disable();
194 bodyCanvas_.disable();
201 NOTREACHED (
"TimelineLayout: top-Level must not be re-ordered");
205 TimelineLayout::rehook (
TrackBody&) noexcept
207 NOTREACHED (
"TimelineLayout: top-Level must not be re-ordered");
void establishLayout(DisplayEvaluation &) override
TimelineLayout also participates itself in the DisplayEvaluation, notably to set up the basic paramet...
void setupStructure(LayoutElement &)
Lumiera's internal time value datatype.
void triggerDisplayEvaluation() override
Perform a complete recursive pass over all elements relevant for layout, reestablish size allocation ...
void sizeZoomWindow(Gtk::Allocation &)
Signal receiver (slot) to react on changes of the window screen space allocation. ...
A core service of the timeline UI to ensure consistent display and layout of all components within th...
Visitor and state holder for a collaborative layout adjustment pass.
Expecting Advice and giving Advice: a cross-cutting collaboration of loosely coupled participants...
Lumiera GTK UI implementation root.
void syncZoomWindow(PAdjustment)
Signal receiver (slot) to react on scrollbar changes.
void installRootTrack(TrackHeadWidget &, TrackBody &)
This function is invoked once for each new TimelineWidget, in order to build the starting point for t...
boost::rational< int64_t > FSecs
rational representation of fractional seconds
Helper to organise and draw the space allocated for a fork of sub-tracks.
This helper class serves to manage the layout and display of the horizontally extended space of a "tr...
A time interval anchored at a specific point in time.
a family of time value like entities and their relationships.
basic constant internal time value.
A set of basic GTK includes for the UI.