Timeline: better save the number of pinned elements as dedicated field

...within the Profile object, instead of sneaking this info into the prelude verb
This commit is contained in:
Fischlurch 2019-07-14 22:58:09 +02:00
parent ec50407167
commit 713178aecd
4 changed files with 63 additions and 62 deletions

View file

@ -89,12 +89,9 @@ namespace timeline {
/** paint the top of the track body area /** paint the top of the track body area
* @param f number of consecutive track elements
* to keep pinned (always visible) at top
* @todo argument doesn't belong here
*/ */
void void
prelude (uint) override prelude() override
{ {
int topMargin = style_->get_margin().get_top(); int topMargin = style_->get_margin().get_top();
style_->render_background (cox_ style_->render_background (cox_
@ -190,12 +187,9 @@ namespace timeline {
/** overlays to show at top of the track body area /** overlays to show at top of the track body area
* @param f number of consecutive track elements
* to keep pinned (always visible) at top
* @todo argument doesn't belong here
*/ */
void void
prelude (uint) override prelude() override
{ {
/* nothing to paint */ /* nothing to paint */
line_ += style_->get_margin().get_top(); line_ += style_->get_margin().get_top();

View file

@ -131,7 +131,14 @@ namespace timeline {
{ {
bool topLevel = isnil (profile); bool topLevel = isnil (profile);
if (topLevel) if (topLevel)
profile.append_prelude (rulers_.size()); {
// global setup for the profile
profile.append_prelude();
// Profile elements are always visible on top:
// Top-level rules and one additionally for the prelude
profile.pinnedPrefixCnt = 1 + rulers_.size();
}
for (auto& ruler : rulers_) for (auto& ruler : rulers_)
{ {

View file

@ -68,8 +68,8 @@ namespace timeline {
virtual void content(uint h) =0; ///< represent a content area with the given vertical extension virtual void content(uint h) =0; ///< represent a content area with the given vertical extension
virtual void open() =0; ///< indicate entering a nested structure, typically as 3D inset virtual void open() =0; ///< indicate entering a nested structure, typically as 3D inset
virtual void close(uint n) =0; ///< indicate the end of `n` nested structures, typically by ascending back `n` levels virtual void close(uint n) =0; ///< indicate the end of `n` nested structures, typically by ascending back `n` levels
virtual void prelude(uint f) =0; ///< start track presentation at top of the timeline, with `f` pinned (always visible) elements @todo argument doesn't belong here virtual void prelude() =0; ///< start the track presentation at top of the timeline
virtual void coda(uint pad) =0; ///< the closing part of the timeline at the bottom of the track display, with `pad` additional padding virtual void coda(uint pad) =0; ///< closing part of the timeline below track display, with `pad` additional padding
static const size_t MAX_ARG_SIZE = sizeof(size_t); static const size_t MAX_ARG_SIZE = sizeof(size_t);
}; };
@ -91,6 +91,8 @@ namespace timeline {
Elements elements; Elements elements;
uint pinnedPrefixCnt = 0;
// default constructible, standard copy operations // default constructible, standard copy operations
bool bool
@ -158,13 +160,6 @@ namespace timeline {
} }
private: private:
bool
firstEntryIs (Literal expectedToken)
{
return not isnil(elements)
and elements.front()->getID() == expectedToken;
}
bool bool
lastEntryIs (Literal expectedToken) lastEntryIs (Literal expectedToken)
{ {
@ -181,12 +176,6 @@ namespace timeline {
++ slopeDepth; ++ slopeDepth;
} }
int
getPinnedPrefixCnt()
{
return firstEntryIs("prelude")? elements.front().accessArg<uint>() : 0;
}
auto auto
filterSegment(bool selectPrefixPart) filterSegment(bool selectPrefixPart)
{ {
@ -205,7 +194,7 @@ namespace timeline {
return lib::treeExplore(elements) return lib::treeExplore(elements)
.filter(CountingFilter{getPinnedPrefixCnt(), selectPrefixPart}); .filter(CountingFilter{pinnedPrefixCnt, selectPrefixPart});
} }
}; };

View file

@ -20872,35 +20872,24 @@
<node CREATED="1560612790659" ID="ID_977261236" MODIFIED="1560612827353" STYLE="fork" TEXT="und f&#xfc;r die up-Slope habe ich einen solchen Zugriff auch akzeptabel befunden"> <node CREATED="1560612790659" ID="ID_977261236" MODIFIED="1560612827353" STYLE="fork" TEXT="und f&#xfc;r die up-Slope habe ich einen solchen Zugriff auch akzeptabel befunden">
<icon BUILTIN="smiley-neutral"/> <icon BUILTIN="smiley-neutral"/>
</node> </node>
<node CREATED="1560612863371" FOLDED="true" ID="ID_161592739" MODIFIED="1561827482929" TEXT="alternativ k&#xf6;nnte man ein Feld im Profil selber machen"> <node CREATED="1560612863371" FOLDED="true" ID="ID_161592739" MODIFIED="1563141484962" TEXT="alternativ k&#xf6;nnte man ein Feld im Profil selber machen">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/> <font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1560612942381" ID="ID_1967930581" MODIFIED="1560612949943" TEXT="und das w&#xe4;re etwa die gleiche Menge Code"/> <node CREATED="1560612942381" ID="ID_1967930581" MODIFIED="1560612949943" TEXT="und das w&#xe4;re etwa die gleiche Menge Code"/>
<node CREATED="1560612951033" ID="ID_850127059" MODIFIED="1560612963343" TEXT="und auch etwa gleicherma&#xdf;en lesbar"/> <node CREATED="1560612951033" ID="ID_850127059" MODIFIED="1560612963343" TEXT="und auch etwa gleicherma&#xdf;en lesbar"/>
</node> </node>
<node CREATED="1560613101287" ID="ID_4285270" MODIFIED="1563118082873" TEXT="Beschlu&#xdf;: sofern die Prelude/Coda-Stukur da ist, kann man sie auch so nutzen"> <node CREATED="1560613101287" ID="ID_4285270" MODIFIED="1563141611597" TEXT="einen Monat sp&#xe4;ter fand ich dann doch ein dediziertes Feld im Profil-Objekt besser">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head>
</head> </head>
<body> <body>
<p> <p>
weil genau an der Stelle, an der diese Klammer erzeugt wird, auch diese Info &#252;ber die Pr&#228;fix-Tracks angelegt werden mu&#223;. ...ist klarer, und erlaubt nebenbei auch noch, zwei Methoden einzusparen
</p>
<p>
Es macht also durchaus Sinn, das als eine Einheit zu betrachten.
</p>
<p>
</p>
<p>
Sollte sich dagegen <i>l&#228;ngerfristig</i>&#160;herausstellen, da&#223; diese Prelude/Coda-Struktur sinnfrei bleibt,
</p>
<p>
dann w&#228;re ein dediziertes Feld f&#252;r das fixierte Track-Pr&#228;fix wohl besser
</p> </p>
</body> </body>
</html></richcontent> </html>
<linktarget COLOR="#304ed9" DESTINATION="ID_4285270" ENDARROW="Default" ENDINCLINATION="751;409;" ID="Arrow_ID_1197384474" SOURCE="ID_189142395" STARTARROW="None" STARTINCLINATION="603;0;"/> </richcontent>
<linktarget COLOR="#304ed9" DESTINATION="ID_4285270" ENDARROW="None" ENDINCLINATION="751;409;" ID="Arrow_ID_1197384474" SOURCE="ID_189142395" STARTARROW="Default" STARTINCLINATION="603;0;"/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
</node> </node>
</node> </node>
@ -20960,9 +20949,9 @@
</html></richcontent> </html></richcontent>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563118329642" ID="ID_337327442" MODIFIED="1563118375106" TEXT="Denkfehler: prelude() mu&#xdf; mitgez&#xe4;hlt werden"> <node COLOR="#338800" CREATED="1563118329642" ID="ID_337327442" MODIFIED="1563141708284" TEXT="Denkfehler: prelude() mu&#xdf; mitgez&#xe4;hlt werden">
<linktarget COLOR="#d7476c" DESTINATION="ID_337327442" ENDARROW="Default" ENDINCLINATION="523;0;" ID="Arrow_ID_376180455" SOURCE="ID_1599825097" STARTARROW="Default" STARTINCLINATION="1063;0;"/> <linktarget COLOR="#25e58e" DESTINATION="ID_337327442" ENDARROW="Default" ENDINCLINATION="523;0;" ID="Arrow_ID_376180455" SOURCE="ID_1599825097" STARTARROW="Default" STARTINCLINATION="1063;0;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="button_ok"/>
</node> </node>
</node> </node>
</node> </node>
@ -21996,36 +21985,58 @@
<linktarget COLOR="#44437f" DESTINATION="ID_1017084418" ENDARROW="Default" ENDINCLINATION="1682;-201;" ID="Arrow_ID_187242024" SOURCE="ID_1267787629" STARTARROW="None" STARTINCLINATION="1913;158;"/> <linktarget COLOR="#44437f" DESTINATION="ID_1017084418" ENDARROW="Default" ENDINCLINATION="1682;-201;" ID="Arrow_ID_187242024" SOURCE="ID_1267787629" STARTARROW="None" STARTINCLINATION="1913;158;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563117568795" ID="ID_1179051544" MODIFIED="1563117587278" TEXT="Unterscheidung realisieren"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563117568795" ID="ID_1179051544" MODIFIED="1563117587278" TEXT="Unterscheidung realisieren">
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node CREATED="1563117596397" ID="ID_925319859" MODIFIED="1563117602323" TEXT="pinned-elements"> <node COLOR="#435e98" CREATED="1563117596397" ID="ID_925319859" MODIFIED="1563141882354" TEXT="pinned-elements...">
<node CREATED="1563117603629" ID="ID_760190185" MODIFIED="1563117609774" TEXT="im prelude()-Verb"> <node COLOR="#338800" CREATED="1563117655125" FOLDED="true" ID="ID_764471994" MODIFIED="1563141879178" TEXT="in das Profil speichern">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1563117613147" ID="ID_1413963999" MODIFIED="1563117625089" TEXT="keine Gute Idee"> <icon BUILTIN="button_ok"/>
<node CREATED="1563117603629" ID="ID_760190185" MODIFIED="1563141837891" TEXT="war im prelude()-Verb">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="info"/>
<node CREATED="1563117613147" ID="ID_1413963999" MODIFIED="1563141844997" TEXT="keine Gute Idee">
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563117630103" ID="ID_251975498" MODIFIED="1563117644348" TEXT="sollte in ein Objekt-Feld im Profil"> <node COLOR="#435e98" CREATED="1563117630103" ID="ID_251975498" MODIFIED="1563141856315" TEXT="sollte in ein Objekt-Feld im Profil"/>
<icon BUILTIN="bell"/>
</node> </node>
</node>
<node CREATED="1563117655125" ID="ID_764471994" MODIFIED="1563118116587" TEXT="in das Profil speichern">
<icon BUILTIN="hourglass"/>
<node CREATED="1563118014245" ID="ID_336436751" MODIFIED="1563118086917" TEXT="ja...nein...ja...??"> <node CREATED="1563118014245" ID="ID_336436751" MODIFIED="1563118086917" TEXT="ja...nein...ja...??">
<icon BUILTIN="smiley-angry"/> <icon BUILTIN="smiley-angry"/>
</node> </node>
<node CREATED="1563118023721" ID="ID_189142395" MODIFIED="1563118124539" TEXT="hatte da vor 1 Monat schon mal dar&#xfc;ber nachgedacht"> <node CREATED="1563118023721" ID="ID_189142395" MODIFIED="1563141663430" TEXT="hatte da vor 1 Monat schon mal dar&#xfc;ber nachgedacht">
<arrowlink COLOR="#304ed9" DESTINATION="ID_4285270" ENDARROW="Default" ENDINCLINATION="751;409;" ID="Arrow_ID_1197384474" STARTARROW="None" STARTINCLINATION="603;0;"/> <richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
und seinerzeit beschlossen, es vorerst im prelude() zu belassen...
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#304ed9" DESTINATION="ID_4285270" ENDARROW="None" ENDINCLINATION="751;409;" ID="Arrow_ID_1197384474" STARTARROW="Default" STARTINCLINATION="603;0;"/>
<icon BUILTIN="stop-sign"/> <icon BUILTIN="stop-sign"/>
</node> </node>
<node CREATED="1563118092858" ID="ID_1331508927" MODIFIED="1563118108338" TEXT="und beschlossen, es vorerst im prelude() zu belassen"> <node COLOR="#435e98" CREATED="1563118092858" ID="ID_1331508927" MODIFIED="1563141685957" TEXT="jetzt doch ein separates, Feld -- ist doch sauberer">
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563117670147" ID="ID_1912884721" MODIFIED="1563117681947" TEXT="Filter realisieren"> <node COLOR="#338800" CREATED="1563117670147" ID="ID_1912884721" MODIFIED="1563141879178" TEXT="Filter realisieren">
<icon BUILTIN="pencil"/> <icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1563117686001" ID="ID_698759785" MODIFIED="1563117694625" TEXT="prefix-Filter implementiert"> <node COLOR="#338800" CREATED="1563117686001" ID="ID_698759785" MODIFIED="1563141879178" TEXT="prefix-Filter implementiert">
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563117696328" ID="ID_1599825097" MODIFIED="1563118375105" TEXT="Konzeptioneller Fehler beim Z&#xe4;hlen"> <node COLOR="#338800" CREATED="1563117696328" ID="ID_1599825097" MODIFIED="1563141879178" TEXT="Konzeptioneller Fehler beim Z&#xe4;hlen gefixt">
<arrowlink COLOR="#d7476c" DESTINATION="ID_337327442" ENDARROW="Default" ENDINCLINATION="523;0;" ID="Arrow_ID_376180455" STARTARROW="Default" STARTINCLINATION="1063;0;"/> <richcontent TYPE="NOTE"><html>
<icon BUILTIN="flag-yellow"/> <head>
</head>
<body>
<p>
nicht nur die Ruler, auch das Prelude selber ist ein solches gePinntes Element (selbst wenn es leer ist)
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#25e58e" DESTINATION="ID_337327442" ENDARROW="Default" ENDINCLINATION="523;0;" ID="Arrow_ID_376180455" STARTARROW="Default" STARTINCLINATION="1063;0;"/>
<icon BUILTIN="button_ok"/>
</node> </node>
</node> </node>
</node> </node>