Timeline: filter to select the pinned prefix part of the profile
...when rendering this part, which shall be always visible. And the rest of the profile needs to be rendered into a second canvas, which is placed within a pane with scrollbar. Implemented as a statefull iterator filter
This commit is contained in:
parent
ac3f1d8bef
commit
06163f6016
4 changed files with 183 additions and 245 deletions
249
research/try.cpp
249
research/try.cpp
|
|
@ -42,18 +42,15 @@
|
|||
// 10/18 - investigate insidious reinterpret cast
|
||||
// 12/18 - investigate the trinomial random number algorithm from the C standard lib
|
||||
// 04/19 - forwarding tuple element(s) to function invocation
|
||||
// 06/19 - use a statefull counting filter in a treeExplorer pipeline
|
||||
|
||||
|
||||
/** @file try.cpp
|
||||
* Research how to apply a tuple to a varargs function forwarder.
|
||||
* The recent standard library has a std::apply, which we can not yet use, unfortunately.
|
||||
* @note this research remains inconclusive. As far as I can see, the simplified setup
|
||||
* exactly mimics the problematic call situation; however, in the real use case,
|
||||
* we need to std::forward<Args> the argument tuple object field while here in
|
||||
* this simplified case, it compiles just fine without -- as it should after all,
|
||||
* since that is the whole point of perfect forwarding; std::get should expose
|
||||
* a LValue reference to the tuple element, and we pass that through a forwarding
|
||||
* function into the double dispatch to the receiving visitor.
|
||||
* How to pick a configurable prefix segment from an iterable sequence.
|
||||
* Instead of using a classic indexed for loop, the same effect can be achieved
|
||||
* through a statefull filter functor in a `treeExplore()`-pipeline; after full
|
||||
* optimisation I'd expect even to get the same assembly as from an equivalent
|
||||
* hand written for loop. (Caveat: debug builds will be bloated)
|
||||
*/
|
||||
|
||||
typedef unsigned int uint;
|
||||
|
|
@ -61,17 +58,13 @@ typedef unsigned int uint;
|
|||
#include "lib/format-cout.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "lib/util.hpp"
|
||||
#include "lib/verb-visitor.hpp"
|
||||
|
||||
#include "lib/meta/variadic-helper.hpp"
|
||||
#include "lib/iter-tree-explorer.hpp"
|
||||
|
||||
#include <utility>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
using lib::Literal;
|
||||
using std::string;
|
||||
using std::tuple;
|
||||
|
||||
|
||||
|
||||
|
|
@ -80,219 +73,37 @@ using std::tuple;
|
|||
#define SHOW_EXPR(_XX_) \
|
||||
cout << "Probe " << STRINGIFY(_XX_) << " ? = " << _XX_ <<endl;
|
||||
|
||||
template<typename FUN, typename...ARGS>
|
||||
void
|
||||
forwardInvoker (FUN& fun, ARGS&&... args)
|
||||
template<class IT>
|
||||
auto
|
||||
selectSeg(IT&& it, bool useFirst)
|
||||
{
|
||||
cout << "forwardInvoker...\n"
|
||||
<< lib::test::showVariadicTypes(args...)
|
||||
<< endl;
|
||||
fun (std::forward<ARGS>(args)...);
|
||||
}
|
||||
|
||||
template<typename FUN, typename...ARGS>
|
||||
struct Holder
|
||||
{
|
||||
using Args = tuple<ARGS...>;
|
||||
|
||||
Args tup;
|
||||
|
||||
Holder (Args& tup)
|
||||
: tup{tup}
|
||||
{ }
|
||||
|
||||
template<size_t...idx>
|
||||
void
|
||||
unpack_and_forward (FUN& fun, lib::meta::IndexSeq<idx...>)
|
||||
{
|
||||
cout << "unpack_and_forward...\n";
|
||||
SHOW_TYPE (Args)
|
||||
|
||||
forwardInvoker (fun, std::get<idx> (tup)...);
|
||||
}
|
||||
|
||||
void
|
||||
applyTuple (FUN& fun)
|
||||
{
|
||||
cout << "applyTuple...\n";
|
||||
SHOW_TYPE (Args)
|
||||
|
||||
using SequenceIterator = typename lib::meta::BuildIdxIter<ARGS...>::Ascending;
|
||||
|
||||
unpack_and_forward (fun, SequenceIterator());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
///////////////////////////TODO : Debugging
|
||||
struct Trackr
|
||||
{
|
||||
size_t num;
|
||||
|
||||
Trackr (size_t val)
|
||||
: num(val)
|
||||
struct CountingFilter
|
||||
{
|
||||
cout <<"Trackr("<<val<<")"<<endl;
|
||||
}
|
||||
~Trackr()
|
||||
{
|
||||
cout <<"~Trackr("<<num<<")"<<endl;
|
||||
}
|
||||
Trackr (Trackr const& lval)
|
||||
: num(lval.num)
|
||||
{
|
||||
cout <<"Trackr()<<-LVal"<<endl;
|
||||
}
|
||||
Trackr (Trackr && rval)
|
||||
: num(rval.num)
|
||||
{
|
||||
cout <<"Trackr()<<-RVal"<<endl;
|
||||
}
|
||||
Trackr&
|
||||
operator= (Trackr const& orig)
|
||||
{
|
||||
cout <<"Tracker = orig"<<endl;
|
||||
num = orig.num;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
///////////////////////////TODO : Debugging
|
||||
|
||||
struct Receiver
|
||||
{
|
||||
void
|
||||
grrrn (uint& x, Trackr y)
|
||||
{
|
||||
cout <<"grrrn()..."<< x<<"*Trckr("<<y.num<<")="<<(x*y.num)<<endl;
|
||||
}
|
||||
};
|
||||
|
||||
template<class REC, class SIG>
|
||||
struct Hodler;
|
||||
|
||||
template<class REC, class RET, typename... ARGS>
|
||||
struct Hodler<REC, RET(ARGS...)>
|
||||
{
|
||||
typedef RET (REC::*Handler) (ARGS...);
|
||||
|
||||
Handler handler_;
|
||||
using Verb = lib::VerbToken<REC,RET(ARGS...)>;
|
||||
using Args = std::tuple<ARGS...>;
|
||||
|
||||
/** meta-sequence to pick argument values from the storage tuple */
|
||||
using SequenceIterator = typename lib::meta::BuildIdxIter<ARGS...>::Ascending;
|
||||
|
||||
Verb verb_;
|
||||
Args args_;
|
||||
|
||||
// Hodler (typename Verb::Handler handlerRef, Literal verbID, ARGS&&... args)
|
||||
Hodler (Handler handlerRef, Literal verbID, ARGS&&... args)
|
||||
: handler_{handlerRef}
|
||||
, verb_{handlerRef, verbID}
|
||||
, args_{std::forward<ARGS> (args)...}
|
||||
{ }
|
||||
|
||||
RET
|
||||
applyTo (REC& receiver)
|
||||
{
|
||||
return invokeVerb (receiver, SequenceIterator());
|
||||
}
|
||||
|
||||
template<size_t...idx>
|
||||
RET
|
||||
invokeVerb (REC& receiver, lib::meta::IndexSeq<idx...>)
|
||||
{ //////////////////////////////////////////TICKET #1006 | TICKET #1184 why do we need std::forward here? the target is a "perfect forwarding" function, which should be able to receive a LValue reference to the tuple element just fine...
|
||||
// lib::test::TypeDebugger<Args> buggy;
|
||||
// return verb_.applyTo (receiver, std::get<idx> (std::forward<Args>(args_))...); /// <<------------this compiles, but consumes the tuple's content (move init)
|
||||
// return verb_.applyTo (receiver, std::get<idx> (args_)...);
|
||||
// return (receiver.*handler_)(std::get<idx> (args_)...); /// <<------------this works
|
||||
// return applyToVerb (receiver, std::get<idx> (args_)...);
|
||||
// return getVerbFun(receiver) (std::get<idx> (args_)...); /// <<------------this compiles, but creates a spurious copy
|
||||
return verb_.applyTo (receiver, forwardElm<idx> (args_)...); /// <<------------this compiles, but consumes the tuple's content (move init)
|
||||
}
|
||||
|
||||
template<size_t idx>
|
||||
using TupleElmType = typename std::tuple_element<idx, Args>::type;
|
||||
|
||||
template<size_t idx>
|
||||
// std::remove_reference_t<decltype(std::get<idx> (args))>&&
|
||||
TupleElmType<idx>&&
|
||||
forwardElm (Args& args)
|
||||
{
|
||||
using ElmRef = decltype(std::get<idx> (args));
|
||||
using Elm = std::remove_reference_t<TupleElmType<idx>>;
|
||||
int cnt;
|
||||
bool useFirst;
|
||||
|
||||
return std::forward<TupleElmType<idx>> (std::get<idx> (args));
|
||||
}
|
||||
|
||||
RET
|
||||
applyToVerb (REC& receiver, ARGS&& ...args)
|
||||
{
|
||||
// REQUIRE ("NIL" != token_);
|
||||
return (receiver.*handler_)(std::forward<ARGS>(args)...);
|
||||
}
|
||||
|
||||
// std::function<RET(ARGS...)>
|
||||
decltype(auto)
|
||||
getVerbFun(REC& receiver)
|
||||
{
|
||||
return [&](ARGS...args) -> RET
|
||||
{
|
||||
return (receiver.*handler_)(std::forward<ARGS>(args)...);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
using lib::meta::Yes_t;
|
||||
using lib::meta::No_t;
|
||||
|
||||
META_DETECT_FUNCTION(void, cloneInto, (void*) const);
|
||||
META_DETECT_FUNCTION_NAME(cloneInto);
|
||||
bool
|
||||
operator() (...)
|
||||
{
|
||||
bool isPrefixPart = 0 < cnt--;
|
||||
return useFirst? isPrefixPart : not isPrefixPart;
|
||||
}
|
||||
};
|
||||
return lib::treeExplore(std::forward<IT> (it))
|
||||
.filter(CountingFilter{50, useFirst});
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int, char**)
|
||||
{
|
||||
auto tup = std::make_tuple(1,2,3);
|
||||
auto fun = [](int a, int b, int c)
|
||||
{
|
||||
cout << a<<"+"<<b<<"+"<<c<<"="<<(a+b+c)<<endl;
|
||||
};
|
||||
|
||||
using Hol = Holder<decltype(fun), int, int, int>;
|
||||
Hol holder(tup);
|
||||
holder.applyTuple (fun);
|
||||
|
||||
|
||||
uint zwo{2};
|
||||
std::tuple<uint&, Trackr> trp{zwo,Trackr(3)};
|
||||
auto frn = [](uint& x, Trackr y)
|
||||
{
|
||||
cout << x<<"*Trckr("<<y.num<<")="<<(x*y.num)<<endl;
|
||||
};
|
||||
using Hrl = Holder<decltype(frn), uint&, Trackr>;
|
||||
Hrl hrlder(trp);
|
||||
hrlder.applyTuple (frn);
|
||||
cout << "\n.ulps.\n";
|
||||
|
||||
Hodler<Receiver, void(uint&,Trackr)> holyh(&Receiver::grrrn, "holyhandgrenade", zwo, Trackr(5));
|
||||
Receiver recy;
|
||||
// recy.grrrn (std::get<0>(trp), Trackr(5));
|
||||
holyh.applyTo (recy);
|
||||
|
||||
cout << "---Types---"<<endl;
|
||||
using BussI = lib::VerbInvoker<Receiver, void>;
|
||||
using CloneI = lib::polyvalue::CloneValueSupport<lib::polyvalue::EmptyBase>;
|
||||
SHOW_TYPE(BussI);
|
||||
SHOW_EXPR (lib::polyvalue::exposes_CloneFunction<BussI>::value)
|
||||
SHOW_EXPR (HasFunSig_cloneInto<BussI>::value)
|
||||
SHOW_EXPR (HasFunSig_cloneInto<CloneI>::value)
|
||||
SHOW_EXPR (HasFunName_cloneInto<BussI>::value)
|
||||
SHOW_EXPR (HasFunName_cloneInto<CloneI>::value)
|
||||
using BussP = decltype(&BussI::cloneInto);
|
||||
SHOW_TYPE(BussP)
|
||||
using VecN = std::vector<int>;
|
||||
VecN numz{1,1,2,3,5,8,13,21};
|
||||
|
||||
for (auto& elm : selectSeg(numz, false))
|
||||
cout << elm<<"::";
|
||||
for (auto& elm : selectSeg(numz, true))
|
||||
cout << elm<<"::";
|
||||
|
||||
cout << "\n.gulp.\n";
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -220,8 +220,7 @@ namespace timeline {
|
|||
return [&](CairoC cox)
|
||||
{
|
||||
PINT concreteRenderScheme{cox, layout};
|
||||
/////////////////////////////////////////////////////////////////////////////////TICKET #1039 : find out a way how to select the header/body part of the profile!
|
||||
getProfile().performWith (concreteRenderScheme);
|
||||
getProfile().performWith (concreteRenderScheme, isRuler);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include "stage/gtk-base.hpp"
|
||||
#include "lib/verb-visitor.hpp"
|
||||
|
||||
#include "lib/iter-tree-explorer.hpp"
|
||||
#include "lib/symbol.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
|
|
@ -110,6 +111,10 @@ namespace timeline {
|
|||
slopeVerb.applyTo (interpreter);
|
||||
}
|
||||
|
||||
void performWith (ProfileInterpreter& interpreter, bool selectRuler);
|
||||
|
||||
|
||||
|
||||
private:/* ===== Internals: handling tokens ===== */
|
||||
|
||||
template<typename FUN, typename...ARGS>
|
||||
|
|
@ -151,12 +156,6 @@ namespace timeline {
|
|||
append_close (1);
|
||||
}
|
||||
|
||||
uint
|
||||
getPinnedPrefixCnt()
|
||||
{
|
||||
return firstEntryIs("prelude")? elements.front().accessArg<uint>() : 0;
|
||||
}
|
||||
|
||||
private:
|
||||
bool
|
||||
firstEntryIs (Literal expectedToken)
|
||||
|
|
@ -180,8 +179,57 @@ namespace timeline {
|
|||
|
||||
++ slopeDepth;
|
||||
}
|
||||
|
||||
int
|
||||
getPinnedPrefixCnt()
|
||||
{
|
||||
return firstEntryIs("prelude")? elements.front().accessArg<uint>() : 0;
|
||||
}
|
||||
|
||||
auto
|
||||
filterSegment(bool selectPrefixPart)
|
||||
{
|
||||
struct CountingFilter
|
||||
{
|
||||
int cnt;
|
||||
bool selectPrefix;
|
||||
|
||||
bool
|
||||
operator() (...)
|
||||
{
|
||||
bool isPrefixPart = 0 < cnt--;
|
||||
return selectPrefix? isPrefixPart : not isPrefixPart;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return lib::treeExplore(elements)
|
||||
.filter(CountingFilter{getPinnedPrefixCnt(), selectPrefixPart});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* A variation of standard evaluation, only rendering one segment of the profile.
|
||||
* The `prelude` verb defines a special _prefix part_ of the track profile, which
|
||||
* is assumed to correspond to the timecode ruler tracks. These special _overview_
|
||||
* tracks are rendered _always visible_ at the top of the timeline, even when scrolling
|
||||
* down on large arrangements with several tracks. Effectively this means we have to
|
||||
* split the TrackProfile into two segments, which are to be rendered within two
|
||||
* distinct TimelineCanvas widgets (the first one always on top, while the second one
|
||||
* with the actual track content is shown within pane with scrollbars).
|
||||
* @param selectRuler decide if this evaluation shall render the overview rulers
|
||||
* (when given `true`) or alternatively the remaining standard body
|
||||
* part of the timeline (when given `false`).
|
||||
*/
|
||||
inline void
|
||||
TrackProfile::performWith (ProfileInterpreter& interpreter, bool selectRuler)
|
||||
{
|
||||
for (auto& slopeVerb : filterSegment(selectRuler))
|
||||
slopeVerb.applyTo (interpreter);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}}// namespace stage::timeline
|
||||
#endif /*STAGE_TIMELINE_TRACK_PROFILE_H*/
|
||||
|
|
|
|||
|
|
@ -16671,7 +16671,7 @@
|
|||
<node COLOR="#338800" CREATED="1539270786646" ID="ID_1019344552" MODIFIED="1557498707221" TEXT="delegierenden Mutator implementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1539270801572" ID="ID_1535443502" MODIFIED="1557498707221" TEXT="für InteractionDirector">
|
||||
<node CREATED="1539270491013" ID="ID_1136748343" MODIFIED="1557498707221" TEXT="Problem der korrekten Diff-Struktur">
|
||||
<node CREATED="1539270491013" ID="ID_1136748343" MODIFIED="1561140449209" TEXT="Problem der korrekten Diff-Struktur">
|
||||
<arrowlink COLOR="#cbada9" DESTINATION="ID_1555798999" ENDARROW="Default" ENDINCLINATION="1069;-129;" ID="Arrow_ID_46239762" STARTARROW="None" STARTINCLINATION="-474;40;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
|
|
@ -18018,7 +18018,7 @@
|
|||
</node>
|
||||
<node CREATED="1480723110777" HGAP="24" ID="ID_1197860604" MODIFIED="1557498707224" TEXT="Kontrollstruktur" VSHIFT="7">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1480723136861" ID="ID_839909208" MODIFIED="1557498707224" TEXT="Einstiegspunkt">
|
||||
<node CREATED="1480723136861" ID="ID_839909208" MODIFIED="1561151251774" TEXT="Einstiegspunkt">
|
||||
<arrowlink COLOR="#8d8ba5" DESTINATION="ID_1295897045" ENDARROW="Default" ENDINCLINATION="296;-456;" ID="Arrow_ID_150397161" STARTARROW="None" STARTINCLINATION="1056;0;"/>
|
||||
<node CREATED="1480723144188" ID="ID_420419439" MODIFIED="1557498707224" TEXT="TimelineWidget"/>
|
||||
<node CREATED="1480723148572" ID="ID_1331974915" MODIFIED="1557498707224" TEXT="wirklich">
|
||||
|
|
@ -19241,7 +19241,8 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561047338983" ID="ID_608382986" MODIFIED="1561047362267" TEXT="wie werden Änderungen dieser realisiert?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1561048744043" ID="ID_1401239177" MODIFIED="1561048756692" TEXT="Konzept klären">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1561048744043" ID="ID_1401239177" MODIFIED="1561140347286" TEXT="Konzept klären">
|
||||
<linktarget COLOR="#b13064" DESTINATION="ID_1401239177" ENDARROW="Default" ENDINCLINATION="363;61;" ID="Arrow_ID_807164253" SOURCE="ID_1143074852" STARTARROW="None" STARTINCLINATION="1263;0;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561048792468" ID="ID_638394722" MODIFIED="1561048797689" TEXT="#1199 handle Timeline layout changes">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -20619,9 +20620,9 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1560175646834" ID="ID_585934033" MODIFIED="1560442420666" TEXT="Selektor für den relevanten Teil des Profils">
|
||||
<node COLOR="#338800" CREATED="1560175646834" ID="ID_585934033" MODIFIED="1561150742874" TEXT="Selektor für den relevanten Teil des Profils">
|
||||
<linktarget COLOR="#235691" DESTINATION="ID_585934033" ENDARROW="Default" ENDINCLINATION="-259;-8;" ID="Arrow_ID_975721855" SOURCE="ID_1448105245" STARTARROW="Default" STARTINCLINATION="168;-53;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1560442117286" ID="ID_1565882906" MODIFIED="1560442234529" TEXT="wir haben jetzt zwei Canvas">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1560442238349" ID="ID_1013135995" MODIFIED="1560442245202" TEXT="Overview-Ruler (always on top)"/>
|
||||
|
|
@ -20712,6 +20713,60 @@
|
|||
<node CREATED="1560618449106" ID="ID_450355502" MODIFIED="1560618479666" TEXT="undurchdringbar verworren">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561150468059" ID="ID_725781646" MODIFIED="1561151353967" TEXT="muß wohl letztlich irgendwie aus der Session kommen">
|
||||
<arrowlink COLOR="#ce7c94" DESTINATION="ID_1443277448" ENDARROW="Default" ENDINCLINATION="509;0;" ID="Arrow_ID_1589685813" STARTARROW="None" STARTINCLINATION="296;0;"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1561150497032" ID="ID_617550585" MODIFIED="1561150736047" TEXT="Aufspalten des Profils">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1561150521519" ID="ID_1498693390" MODIFIED="1561150537509" TEXT="Schei...">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
<node CREATED="1561150540851" ID="ID_490080987" MODIFIED="1561150545451" TEXT="noch eine Komplexität"/>
|
||||
</node>
|
||||
<node CREATED="1561150547674" ID="ID_1791753235" MODIFIED="1561150564863" TEXT="naja, eigentlich nur noch einen Zähler in die For-Loop einbauen"/>
|
||||
<node CREATED="1561150569779" ID="ID_1587537475" MODIFIED="1561150583155" TEXT="ich will aber den Standardfall irgendwie erhalten">
|
||||
<node CREATED="1561150585582" ID="ID_791249238" MODIFIED="1561150668295" TEXT="und sei es bloß zur Dokumentation">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
d.h. ich will den Standardfall als Standardfall sichtbar haben,
|
||||
</p>
|
||||
<p>
|
||||
und dann diese zusätzliche Filterung oben drauf pflanzen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1561150616496" ID="ID_942796141" MODIFIED="1561150627953" TEXT="also irgendwie noch einen Dekorator bauen??">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1561150669160" ID="ID_1043420247" MODIFIED="1561150734271" TEXT="Lösung mit einem Iterator-Filter">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1561150688515" ID="ID_1217282542" MODIFIED="1561150695224" TEXT="stateful counting Filter geht doch..."/>
|
||||
<node CREATED="1561150696094" ID="ID_1756846313" MODIFIED="1561150726654" TEXT="sollte am Ende genauso effizient sein">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
als ob es darauf ankäme...
|
||||
</p>
|
||||
<p>
|
||||
Hauptsache, keine zusätzliche Speicher-Allokation
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -20761,9 +20816,11 @@
|
|||
<node CREATED="1560618694269" ID="ID_1133842596" MODIFIED="1560618694932" TEXT="der TrackBody-Struktur"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1560687839463" ID="ID_1827462767" MODIFIED="1560687897342" TEXT="wer bewirkt diesen Aufbau?">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1560687839463" ID="ID_1827462767" MODIFIED="1561140522795" TEXT="wer bewirkt diesen Aufbau?">
|
||||
<arrowlink COLOR="#a394b6" DESTINATION="ID_1098160043" ENDARROW="Default" ENDINCLINATION="-688;15;" ID="Arrow_ID_1886446261" STARTARROW="None" STARTINCLINATION="442;0;"/>
|
||||
<arrowlink COLOR="#9a6ea1" DESTINATION="ID_453891028" ENDARROW="Default" ENDINCLINATION="227;0;" ID="Arrow_ID_1574621169" STARTARROW="None" STARTINCLINATION="227;0;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1560687908668" ID="ID_1449365398" MODIFIED="1560687970291" TEXT="spätestens onDraw() muß es da sein...">
|
||||
<node COLOR="#435e98" CREATED="1560687908668" ID="ID_1449365398" MODIFIED="1561140382981" TEXT="spätestens onDraw() muß es da sein...">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1560688238047" ID="ID_228690289" MODIFIED="1560698414957" TEXT="Lösung-1 : refresh/rebuild im Aufruf">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
@ -20792,17 +20849,19 @@
|
|||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1560618895535" ID="ID_1961154233" MODIFIED="1560688445449" TEXT="Lösung-2 : rebuild bei Strukturänderung">
|
||||
<node CREATED="1560618895535" ID="ID_1961154233" MODIFIED="1561140376217" TEXT="Lösung-2 : rebuild bei Strukturänderung">
|
||||
<linktarget COLOR="#795ea0" DESTINATION="ID_1961154233" ENDARROW="Default" ENDINCLINATION="-24;56;" ID="Arrow_ID_1097113138" SOURCE="ID_1716935157" STARTARROW="None" STARTINCLINATION="150;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1560698425620" ID="ID_620629162" MODIFIED="1560698443221" TEXT="hierfür fehlt noch komplett die Infrastuktur"/>
|
||||
<node CREATED="1560698444169" ID="ID_1929184570" MODIFIED="1560698455499" TEXT="wir bauen bisher nur Sub-Widgets auf"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561049066764" ID="ID_1132615828" MODIFIED="1561049077241" TEXT="Aufbau on-demand">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1561049066764" ID="ID_1132615828" MODIFIED="1561140354363" TEXT="Aufbau on-demand">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1561049080043" ID="ID_1865072728" MODIFIED="1561049150441" TEXT="signalStructureChange leert das Profil">
|
||||
<arrowlink COLOR="#89adc8" DESTINATION="ID_1799554074" ENDARROW="Default" ENDINCLINATION="340;0;" ID="Arrow_ID_19787354" STARTARROW="None" STARTINCLINATION="1589;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1561049195744" ID="ID_795602177" MODIFIED="1561049204230" TEXT="Zugriff der Renderer auf das Profil">
|
||||
<node COLOR="#338800" CREATED="1561049195744" ID="ID_795602177" MODIFIED="1561140362229" TEXT="Zugriff der Renderer auf das Profil">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1561049205709" ID="ID_87098848" MODIFIED="1561049213673" TEXT="bisher direkte Referenz">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
|
|
@ -20832,8 +20891,16 @@
|
|||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561139978982" ID="ID_1098160043" MODIFIED="1561139990042" TEXT="doch in den Layout-Manager verschieben?">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561139978982" ID="ID_1098160043" MODIFIED="1561140431874" TEXT="doch in den Layout-Manager verschieben?">
|
||||
<linktarget COLOR="#a394b6" DESTINATION="ID_1098160043" ENDARROW="Default" ENDINCLINATION="-688;15;" ID="Arrow_ID_1886446261" SOURCE="ID_1827462767" STARTARROW="None" STARTINCLINATION="442;0;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1561140197469" ID="ID_198072463" MODIFIED="1561140213679" TEXT="Nachteil: der muß dann von der TrackBody-Struktur wissen"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1561140221999" ID="ID_1143074852" MODIFIED="1561140347286" TEXT="es sei denn...">
|
||||
<arrowlink COLOR="#b13064" DESTINATION="ID_1401239177" ENDARROW="Default" ENDINCLINATION="363;61;" ID="Arrow_ID_807164253" STARTARROW="None" STARTINCLINATION="1263;0;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1561140235537" ID="ID_633845025" MODIFIED="1561140252066" TEXT="daß das gar nicht Aufgabe der TrackBody-Struktur wäre,"/>
|
||||
<node CREATED="1561140254165" ID="ID_1265373483" MODIFIED="1561140267869" TEXT="bzw. dies anders aufgehängt und aktualisiert würde"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -20848,7 +20915,8 @@
|
|||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1560618715494" ID="ID_453891028" MODIFIED="1560618729609" TEXT="wer verwaltet das TrackProfil?">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1560618715494" ID="ID_453891028" MODIFIED="1561140513713" TEXT="wer verwaltet das TrackProfil?">
|
||||
<linktarget COLOR="#9a6ea1" DESTINATION="ID_453891028" ENDARROW="Default" ENDINCLINATION="227;0;" ID="Arrow_ID_1574621169" SOURCE="ID_1827462767" STARTARROW="None" STARTINCLINATION="227;0;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1560618780573" ID="ID_1295221704" MODIFIED="1560619724431" TEXT="naheliegend: das BodyCanvasWidget selber">
|
||||
<icon BUILTIN="forward"/>
|
||||
|
|
@ -20939,7 +21007,14 @@
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554995841966" ID="ID_1443277448" MODIFIED="1557498707229" TEXT="genaue Rolle der Session??">
|
||||
<node CREATED="1561151742029" ID="ID_857875045" MODIFIED="1561151755207" TEXT="repräsentiert als Ruler des top-level-Track"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561151772593" ID="ID_1142063549" MODIFIED="1561151789167" TEXT="aber die Zahl der Präfix-Elemente muß korrekt eingesetzt werden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554995841966" ID="ID_1443277448" MODIFIED="1561151658998" TEXT="genaue Rolle der Session??">
|
||||
<linktarget COLOR="#ce7c94" DESTINATION="ID_1443277448" ENDARROW="Default" ENDINCLINATION="509;0;" ID="Arrow_ID_1589685813" SOURCE="ID_725781646" STARTARROW="None" STARTINCLINATION="296;0;"/>
|
||||
<linktarget COLOR="#ce7c94" DESTINATION="ID_1443277448" ENDARROW="Default" ENDINCLINATION="509;0;" ID="Arrow_ID_1860575220" SOURCE="ID_790305134" STARTARROW="None" STARTINCLINATION="296;0;"/>
|
||||
<linktarget COLOR="#337fe3" DESTINATION="ID_1443277448" ENDARROW="Default" ENDINCLINATION="-2069;0;" ID="Arrow_ID_934863827" SOURCE="ID_1520503504" STARTARROW="Default" STARTINCLINATION="-702;0;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -21175,7 +21250,7 @@
|
|||
<node COLOR="#338800" CREATED="1554516438055" ID="ID_1490793853" MODIFIED="1557498707230" TEXT="open / close">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1554567321239" FOLDED="true" ID="ID_1638157583" MODIFIED="1557498707230" TEXT="prelude / coda">
|
||||
<node COLOR="#338800" CREATED="1554567321239" FOLDED="true" ID="ID_1638157583" MODIFIED="1561151276838" TEXT="prelude / coda">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1554567338981" ID="ID_1124816442" MODIFIED="1554567365787" TEXT="damit der Display-Code da was Spezielles machen kann..."/>
|
||||
</node>
|
||||
|
|
@ -21214,6 +21289,10 @@
|
|||
</node>
|
||||
<node CREATED="1554516951713" ID="ID_318462518" MODIFIED="1557498707230" TEXT="Verben (rekursiv) generieren">
|
||||
<node CREATED="1554516977204" ID="ID_305770947" MODIFIED="1557498707230" TEXT="Ruler"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1561150468059" ID="ID_790305134" MODIFIED="1561151468663" TEXT="fixed Overview Ruler steuern">
|
||||
<arrowlink COLOR="#ce7c94" DESTINATION="ID_1443277448" ENDARROW="Default" ENDINCLINATION="509;0;" ID="Arrow_ID_1860575220" STARTARROW="None" STARTINCLINATION="296;0;"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
<node CREATED="1554516979454" ID="ID_508239889" MODIFIED="1557498707230" TEXT="Gaps handhaben"/>
|
||||
<node CREATED="1554516984485" ID="ID_351302473" MODIFIED="1557498707230" TEXT="Content">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
@ -22982,7 +23061,7 @@
|
|||
<node CREATED="1488423428942" ID="ID_1847992077" MODIFIED="1557498707233" TEXT="Stop"/>
|
||||
</node>
|
||||
<node CREATED="1488423436478" ID="ID_1037695008" MODIFIED="1557498707233" TEXT="Einstieg">
|
||||
<node CREATED="1488423440629" ID="ID_1295897045" MODIFIED="1557498707233" TEXT="in Timeline">
|
||||
<node CREATED="1488423440629" ID="ID_1295897045" MODIFIED="1561151251774" TEXT="in Timeline">
|
||||
<linktarget COLOR="#8d8ba5" DESTINATION="ID_1295897045" ENDARROW="Default" ENDINCLINATION="296;-456;" ID="Arrow_ID_150397161" SOURCE="ID_839909208" STARTARROW="None" STARTINCLINATION="1056;0;"/>
|
||||
<node CREATED="1488423569203" ID="ID_1753722831" MODIFIED="1557498707233" TEXT="TimelinePane anzeigen">
|
||||
<linktarget COLOR="#a1543e" DESTINATION="ID_1753722831" ENDARROW="Default" ENDINCLINATION="1150;-267;" ID="Arrow_ID_912757548" SOURCE="ID_292894978" STARTARROW="None" STARTINCLINATION="496;-77;"/>
|
||||
|
|
@ -23455,7 +23534,8 @@
|
|||
<arrowlink DESTINATION="ID_1319425167" ENDARROW="Default" ENDINCLINATION="-1;-52;" ID="Arrow_ID_1260691192" STARTARROW="None" STARTINCLINATION="-79;17;"/>
|
||||
</node>
|
||||
<node CREATED="1538956709026" ID="ID_326010297" MODIFIED="1557498707234" TEXT="Sequence{Marker}"/>
|
||||
<node CREATED="1560686038649" FOLDED="true" ID="ID_1520503504" MODIFIED="1560686343370" TEXT="pinned overview Rulers">
|
||||
<node CREATED="1560686038649" FOLDED="true" ID="ID_1520503504" MODIFIED="1561151688909" TEXT="pinned overview Rulers">
|
||||
<arrowlink COLOR="#337fe3" DESTINATION="ID_1443277448" ENDARROW="Default" ENDINCLINATION="-2069;0;" ID="Arrow_ID_934863827" STARTARROW="Default" STARTINCLINATION="-702;0;"/>
|
||||
<linktarget COLOR="#486ebf" DESTINATION="ID_1520503504" ENDARROW="Default" ENDINCLINATION="-1443;0;" ID="Arrow_ID_312917871" SOURCE="ID_1236432450" STARTARROW="None" STARTINCLINATION="630;0;"/>
|
||||
<node CREATED="1560686062574" ID="ID_250993855" MODIFIED="1560686076868" TEXT="Timecode und Marker-Anzeige"/>
|
||||
<node CREATED="1560686051799" ID="ID_1555560276" MODIFIED="1560686061961" TEXT="auch bei vertikalem Scrolling immer sichtbar"/>
|
||||
|
|
@ -41818,7 +41898,7 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1539270417847" ID="ID_1555798999" MODIFIED="1557498707237" TEXT="korrekte Diff-Struktur">
|
||||
<node CREATED="1539270417847" ID="ID_1555798999" MODIFIED="1561140449209" TEXT="korrekte Diff-Struktur">
|
||||
<linktarget COLOR="#cbada9" DESTINATION="ID_1555798999" ENDARROW="Default" ENDINCLINATION="1069;-129;" ID="Arrow_ID_46239762" SOURCE="ID_1136748343" STARTARROW="None" STARTINCLINATION="-474;40;"/>
|
||||
<linktarget COLOR="#d47366" DESTINATION="ID_1555798999" ENDARROW="Default" ENDINCLINATION="713;-263;" ID="Arrow_ID_971172326" SOURCE="ID_1387553695" STARTARROW="None" STARTINCLINATION="-1999;120;"/>
|
||||
<linktarget COLOR="#d47366" DESTINATION="ID_1555798999" ENDARROW="Default" ENDINCLINATION="590;-127;" ID="Arrow_ID_308349501" SOURCE="ID_1435731309" STARTARROW="None" STARTINCLINATION="915;0;"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue