Timeline: squeeze in some test/diagnostics code to inject a button onto each track

This is dummy/test/diagnostics code and should be removed when the track display code is complete!
It can be activated by sending a "mark"-Message via the UI-Bus, towards the
Timeline element to be tested (Tip: use the same ID as used when injecting
the Timeline via the TestControl Dialog box). When receiving this message
(asynchronously), the TimelineControler asks each nested TrackPresnter
to inject a Button with the corresponding track name onto the BodyCanvasWidget.

This allows us to verify the coordinate calculation and size allocation --
and indeed, the numbers are not yet correct (TODO)
This commit is contained in:
Fischlurch 2019-09-07 19:24:54 +02:00
parent cae013c4f4
commit 03c358fe86
11 changed files with 201 additions and 15 deletions

View file

@ -285,9 +285,18 @@ namespace dialog {
{
Gtk::Entry dummy_;
FrameBox part_1_{_("populate"), Gtk::ORIENTATION_HORIZONTAL},
part_2_{_("modify content")};
part_2_{_("modify content")},
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
part_3_{_("send UI-Bus Mess"), Gtk::ORIENTATION_HORIZONTAL}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
;
Gtk::Button seq_1_, seq_2_;
Gtk::Button mut_1_;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
Gtk::Button bus_1_;
Gtk::Entry bus_id_;
Gtk::Entry bus_msg_;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
string
pickDummyID()
@ -325,6 +334,28 @@ namespace dialog {
pack_start (part_1_, Gtk::PACK_SHRINK);
pack_start (part_2_, Gtk::PACK_SHRINK);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
bus_1_.set_label("UIBus::mark");
bus_id_.set_tooltip_markup("<b>UI-Bus ID</b> of the receiver\n"
"Tip: the same ID as used when injecting the sequence...\n"
"(use the <i>dummy ID value</i> above!)");
bus_msg_.set_tooltip_markup("magic payload to deliver to this UI-Element....");
part_3_.pack_start (bus_1_, Gtk::PACK_SHRINK);
part_3_.pack_start (bus_id_, Gtk::PACK_SHRINK);
part_3_.pack_start (bus_msg_, Gtk::PACK_SHRINK);
pack_start (part_3_, Gtk::PACK_SHRINK);
// cast a UI-Bus message...
// also works from within the UI-Thread (which will perform this lambda when button is clicked)...
bus_1_.signal_clicked().connect(
[&]{
// since this is not a real timeline existing somewhere in the session
// we use a cheesy way to fake a proper element-ID for addressing on the UI-Bus.
auto dummyRecord = lib::diff::MakeRec().genNode(bus_id_.get_text());
// now send a "mark" message. It is up to the receiver to interpret it's ID as action. Typically the payload is irrelevant.
GuiNotification::facade().mark (dummyRecord.idi, GenNode{string{bus_msg_.get_text()}, 49 /*some irrelevant payload*/} );
});
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
// define the action triggers...
seq_1_.signal_clicked().connect(

View file

@ -42,6 +42,9 @@
#include "common/advice.hpp"
#include "lib/util.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
#include "lib/format-cout.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
//#include <algorithm>
//#include <vector>
@ -510,6 +513,21 @@ namespace timeline {
adjust (rulerCanvas_, canvasWidth, rulerHeight);
adjust (mainCanvas_, canvasWidth, max(0, totalHeight-rulerHeight));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
///
///
void
BodyCanvasWidget::DEBUG_injectTrackLabel (cuString const& trackName, int startLine)
{
Gtk::Button* butt = Gtk::manage (new Gtk::Button{trackName});
butt->signal_clicked().connect(
[butt]{ cout << "|=="<<butt->get_label()<<endl; });
uint x = rand() % 50;
mainCanvas_.put (*butt, x, startLine);
butt->show();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this

View file

@ -131,6 +131,9 @@ namespace timeline {
/** a way to get and possibly (re)compute the current TrackProfile */
using ProfileGetter = std::function<TrackProfile&()>;
ProfileGetter getProfile;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
void DEBUG_injectTrackLabel(cuString const& trackName, int startLine);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
private:/* ===== Internals ===== */

View file

@ -44,6 +44,9 @@
#include "stage/timeline/timeline-controller.hpp"
#include "stage/timeline/track-presenter.hpp"
#include "stage/timeline/marker-widget.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
#include "stage/timeline/body-canvas-widget.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
//#include "stage/workspace/workspace-window.hpp"
//#include "stage/ui-bus.hpp"
@ -90,6 +93,9 @@ namespace timeline {
{
layoutManager.installRootTrack (head, body);
}}}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
, DEBUG_canvas_{layoutManager.exposeCanvasForDebug()}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
{ }
@ -97,7 +103,19 @@ namespace timeline {
{
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
void
TimelineController::doMark (GenNode const& mark)
{
if (mark.idi.getSym() == "test" && this->fork_)
{
this->fork_->injectDebugTrackLabels(DEBUG_canvas_);
}
else // forward to default handler
model::Controller::doMark (mark);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
/**
* @internal this method is invoked by the UI-Bus when dispatching a MutationMessage...
* @remarks this is likely the first occasion a casual reader sees such a binding function,

View file

@ -74,6 +74,9 @@ namespace timeline {
class TrackPresenter;
class TimelineLayout;
class MarkerWidget;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
class BodyCanvasWidget;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
/**
@ -119,6 +122,10 @@ namespace timeline {
public: /* ===== Signals ===== */
private:/* ===== Events ===== */
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
virtual void doMark (GenNode const& mark) override;
BodyCanvasWidget& DEBUG_canvas_;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
private:/* ===== Internals ===== */
};

View file

@ -125,6 +125,9 @@ namespace timeline {
void installRootTrack (TrackHeadWidget&,TrackBody&);
Gtk::WidgetPath getBodyWidgetPath() const;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
BodyCanvasWidget& exposeCanvasForDebug() { return bodyCanvas_; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
protected:/* ==== Interface: LayoutManager===== */

View file

@ -89,6 +89,9 @@ namespace timeline {
TrackBody::setTrackName (cuString& trackName)
{
TODO ("is the track name of any relevance for the TrackBody widget?");
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
this->TODO_trackName_ = trackName;;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
}

View file

@ -139,6 +139,9 @@ namespace timeline {
}
friend class TrackPresenter;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
uString TODO_trackName_;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
};

View file

@ -37,6 +37,9 @@
#include "stage/gtk-base.hpp"
#include "include/ui-protocol.hpp"
#include "stage/timeline/track-presenter.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
#include "stage/timeline/body-canvas-widget.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
//#include "stage/ui-bus.hpp"
//#include "lib/format-string.hpp"
@ -78,6 +81,15 @@ namespace timeline {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
void
TrackPresenter::injectDebugTrackLabels(BodyCanvasWidget& bodyCanvas)
{
bodyCanvas.DEBUG_injectTrackLabel (display_.body.TODO_trackName_, display_.body.startLine_ + display_.body.contentOffset_);
for (auto& subTrack : subFork_)
subTrack->injectDebugTrackLabels (bodyCanvas);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
/**
* @note we distinguish between the contents of our four nested child collections
* based on the symbolic type field sent in the Record type within the diff representation

View file

@ -66,6 +66,9 @@
namespace stage {
namespace timeline {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
class BodyCanvasWidget;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
using std::vector;
using std::unique_ptr;
@ -140,14 +143,16 @@ namespace timeline {
, subFork_{}
, markers_{}
, clips_{}
{
setTrackName (id.getSym()); // fallback initialise track-name from human-readable ID symbol
{
setTrackName (id.getSym()); // fallback initialise track-name from human-readable ID symbol
}
/** set up a binding to respond to mutation messages via UiBus */
virtual void buildMutator (lib::diff::TreeMutator::Handle) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
void injectDebugTrackLabels(BodyCanvasWidget&);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
private:/* ===== Internals ===== */

View file

@ -38,8 +38,9 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1501940591109" ID="ID_1925240675" MODIFIED="1557498707214" TEXT="#1099 DemoGuiRoundtrip">
<node COLOR="#338800" CREATED="1501940591109" ID="ID_1925240675" MODIFIED="1567875602930" TEXT="#1099 DemoGuiRoundtrip">
<arrowlink COLOR="#e5e53f" DESTINATION="ID_1007296291" ENDARROW="Default" ENDINCLINATION="-931;34;" ID="Arrow_ID_1440938291" STARTARROW="None" STARTINCLINATION="-7;605;"/>
<linktarget COLOR="#64bf95" DESTINATION="ID_1925240675" ENDARROW="Default" ENDINCLINATION="-664;1183;" ID="Arrow_ID_1404986843" SOURCE="ID_504220515" STARTARROW="None" STARTINCLINATION="821;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1501940627280" ID="ID_1675066241" MODIFIED="1557498707214" TEXT="Dummy-Code im UI"/>
<node CREATED="1501940632871" ID="ID_189611570" MODIFIED="1557498707214" TEXT="Dummy Proc-Command"/>
@ -2541,7 +2542,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1533689031860" FOLDED="true" HGAP="97" ID="ID_657232437" MODIFIED="1561827483825" TEXT="Implementierung" VSHIFT="9">
<node COLOR="#338800" CREATED="1533689031860" HGAP="97" ID="ID_657232437" MODIFIED="1567875645070" TEXT="Implementierung" VSHIFT="9">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1533689046050" ID="ID_32330448" MODIFIED="1538263469670" TEXT="ErrorLog-Widget">
<icon BUILTIN="button_ok"/>
@ -3050,9 +3051,10 @@
<node COLOR="#435e98" CREATED="1533689164394" ID="ID_405297881" MODIFIED="1538708568344" TEXT="in NotificationService integrieren">
<icon BUILTIN="full-4"/>
</node>
<node COLOR="#435e98" CREATED="1533689225658" FOLDED="true" ID="ID_662017160" MODIFIED="1561827482908" TEXT="Pling! -Button">
<node COLOR="#435e98" CREATED="1533689225658" ID="ID_662017160" MODIFIED="1567875645072" TEXT="Pling! -Button">
<icon BUILTIN="full-5"/>
<node COLOR="#338800" CREATED="1533689235200" FOLDED="true" ID="ID_1760873318" MODIFIED="1561827469146" TEXT="non-modal TestControl">
<node COLOR="#338800" CREATED="1533689235200" FOLDED="true" ID="ID_1760873318" MODIFIED="1567875759269" TEXT="non-modal TestControl">
<linktarget COLOR="#57b762" DESTINATION="ID_1760873318" ENDARROW="Default" ENDINCLINATION="-989;0;" ID="Arrow_ID_782679142" SOURCE="ID_994953692" STARTARROW="None" STARTINCLINATION="-756;-143;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1537836495530" FOLDED="true" ID="ID_182389429" MODIFIED="1561827469125" TEXT="per Men&#xfc;eintrag &#xf6;ffnen">
<icon BUILTIN="button_ok"/>
@ -3974,7 +3976,7 @@
<node CREATED="1501782399454" ID="ID_1238852873" MODIFIED="1518487921055" TEXT="InteractionDirector"/>
<node CREATED="1501784310336" ID="ID_455705917" MODIFIED="1533608413540" TEXT="was f&#xfc;r eine Nachricht?">
<icon BUILTIN="help"/>
<node CREATED="1501784324670" ID="ID_202531654" MODIFIED="1518487921055" TEXT="mu&#xdf; in das Protokoll passen"/>
<node CREATED="1501784324670" ID="ID_202531654" MODIFIED="1567875686498" TEXT="mu&#xdf; in das Protokoll passen"/>
<node CREATED="1501784333946" ID="ID_238263434" MODIFIED="1518487921055" TEXT="sollte nicht willk&#xfc;rlich sein"/>
<node CREATED="1501804506790" ID="ID_985808643" MODIFIED="1518487921055" TEXT="gibts nicht">
<icon BUILTIN="stop-sign"/>
@ -5208,7 +5210,7 @@
</body>
</html></richcontent>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1477784813895" ID="ID_330280074" MODIFIED="1557498707218">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1477784813895" ID="ID_330280074" MODIFIED="1567875934606">
<richcontent TYPE="NODE"><html>
<head>
@ -5220,6 +5222,7 @@
</body>
</html></richcontent>
<linktarget COLOR="#f9b709" DESTINATION="ID_330280074" ENDARROW="Default" ENDINCLINATION="-37;-88;" ID="Arrow_ID_779644313" SOURCE="ID_635303062" STARTARROW="None" STARTINCLINATION="-34;70;"/>
<linktarget COLOR="#6db0a6" DESTINATION="ID_330280074" ENDARROW="Default" ENDINCLINATION="-770;358;" ID="Arrow_ID_690602400" SOURCE="ID_1435888336" STARTARROW="None" STARTINCLINATION="1193;46;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1538942842294" ID="ID_1752483939" MODIFIED="1557498707218" TEXT="minimalen Diff f&#xfc;r eine Timeline">
<icon BUILTIN="hourglass"/>
@ -5524,7 +5527,8 @@
</p>
</body>
</html></richcontent>
<node CREATED="1537961734956" ID="ID_345535043" MODIFIED="1561827464713" TEXT="Notebook-Widget">
<node CREATED="1537961734956" ID="ID_345535043" MODIFIED="1567875424269" TEXT="Notebook-Widget">
<linktarget COLOR="#7895b6" DESTINATION="ID_345535043" ENDARROW="Default" ENDINCLINATION="-60;247;" ID="Arrow_ID_81056795" SOURCE="ID_18019089" STARTARROW="None" STARTINCLINATION="382;0;"/>
<node CREATED="1537961776184" ID="ID_167848646" MODIFIED="1537961791126" TEXT="Problematik">
<icon BUILTIN="forward"/>
<node CREATED="1537961797061" ID="ID_104206298" MODIFIED="1537961806159" TEXT="extrem viele Komponenten-Widgets"/>
@ -5642,6 +5646,58 @@
</node>
</node>
</node>
<node CREATED="1567875279032" ID="ID_740945922" MODIFIED="1567875284419" TEXT="Test-Hilfsmittel">
<node CREATED="1567875285952" ID="ID_979231150" MODIFIED="1567875288691" TEXT="TestControl"/>
<node COLOR="#435e98" CREATED="1567875664340" ID="ID_994953692" MODIFIED="1567875770727">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<b>TestControl</b>&#160;Dialogbox
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#57b762" DESTINATION="ID_1760873318" ENDARROW="Default" ENDINCLINATION="-989;0;" ID="Arrow_ID_782679142" STARTARROW="None" STARTINCLINATION="-756;-143;"/>
<node CREATED="1567875290021" ID="ID_286133902" MODIFIED="1567875757319" TEXT="ein non-modaler Dialog"/>
<node CREATED="1567875314411" ID="ID_26242186" MODIFIED="1567875341444" TEXT="erreichbar im Wizard | Men&#xfc; &quot;help&quot; &gt; &quot;self tests...&quot;"/>
<node CREATED="1567875342584" ID="ID_18019089" MODIFIED="1567875428331" TEXT="hat ein Notebook mit diversen Tabs...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...welche ad hoc mit beil&#228;ufig geschriebenem Debug/Test-Code belegt werden
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#7895b6" DESTINATION="ID_345535043" ENDARROW="Default" ENDINCLINATION="-60;247;" ID="Arrow_ID_81056795" STARTARROW="None" STARTINCLINATION="382;0;"/>
</node>
<node COLOR="#435e98" CREATED="1567875433443" ID="ID_1033273101" MODIFIED="1567875940590" TEXT="TestControl-Tabs">
<icon BUILTIN="info"/>
<node CREATED="1567875526281" ID="ID_504220515" MODIFIED="1567875602930" TEXT="Tab-1: #1099 : Nachrichten via ProcDispatcher und UI-Bus senden an das ErrorLogDisplay">
<arrowlink COLOR="#64bf95" DESTINATION="ID_1925240675" ENDARROW="Default" ENDINCLINATION="-664;1183;" ID="Arrow_ID_1404986843" STARTARROW="None" STARTINCLINATION="821;0;"/>
</node>
<node CREATED="1567875813488" ID="ID_1435888336" MODIFIED="1567875934606" TEXT="Tab-2: #1014 : &#xbb;populate Timeline&#xab; &#x2015; generiert Dummy-Timelines f&#xfc;r das GUI">
<arrowlink COLOR="#6db0a6" DESTINATION="ID_330280074" ENDARROW="Default" ENDINCLINATION="-770;358;" ID="Arrow_ID_690602400" STARTARROW="None" STARTINCLINATION="1193;46;"/>
<node CREATED="1567876207795" HGAP="44" ID="ID_320559885" MODIFIED="1567876244788" TEXT="kann jetzt auch beliebige mark()-Nachricht senden" VSHIFT="25">
<linktarget COLOR="#687584" DESTINATION="ID_320559885" ENDARROW="Default" ENDINCLINATION="-28;61;" ID="Arrow_ID_1133205207" SOURCE="ID_1232074573" STARTARROW="Default" STARTINCLINATION="206;0;"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1567876056816" ID="ID_1341115014" MODIFIED="1567876175057" TEXT="UIBus::mark - Nachricht an beliebiges Element senden">
<linktarget COLOR="#54bbd6" DESTINATION="ID_1341115014" ENDARROW="Default" ENDINCLINATION="-3095;0;" ID="Arrow_ID_547692411" SOURCE="ID_1701413392" STARTARROW="None" STARTINCLINATION="888;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1567876176943" ID="ID_1120090317" MODIFIED="1567876185194" TEXT="schnell geschriebener Debug/Test-Code"/>
<node CREATED="1567876185972" ID="ID_1232074573" MODIFIED="1567876244788" TEXT="im Moment mal eben auf Tab-2 vom TestControl eingeh&#xe4;ngt">
<arrowlink COLOR="#687584" DESTINATION="ID_320559885" ENDARROW="Default" ENDINCLINATION="-28;61;" ID="Arrow_ID_1133205207" STARTARROW="Default" STARTINCLINATION="206;0;"/>
</node>
</node>
</node>
</node>
<node CREATED="1537659082073" ID="ID_986070389" MODIFIED="1557498707218" TEXT="Schema">
<node CREATED="1537659311850" ID="ID_741254991" MODIFIED="1557498707218" TEXT="Struktur"/>
@ -24047,14 +24103,31 @@
<arrowlink COLOR="#5595df" DESTINATION="ID_224781783" ENDARROW="Default" ENDINCLINATION="-573;42;" ID="Arrow_ID_1285897355" STARTARROW="None" STARTINCLINATION="47;-43;"/>
<icon BUILTIN="info"/>
</node>
<node COLOR="#338800" CREATED="1567085637546" ID="ID_682932701" MODIFIED="1567870091954" TEXT="sind im TrackBody zu speichern">
<node COLOR="#338800" CREATED="1567085637546" ID="ID_682932701" MODIFIED="1567876361526" TEXT="sind im TrackBody zu speichern">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1567870083327" ID="ID_400610372" MODIFIED="1567870089365" TEXT="dieses auch testen">
<node COLOR="#338800" CREATED="1567870083327" ID="ID_400610372" MODIFIED="1567876360311" TEXT="dieses auch testen">
<icon BUILTIN="button_ok"/>
<node COLOR="#437b98" CREATED="1567876021748" ID="ID_1701413392" MODIFIED="1567876360311" TEXT="generischer Test-Code, um eine Nachricht via UI-Bus zu senden">
<arrowlink COLOR="#54bbd6" DESTINATION="ID_1341115014" ENDARROW="Default" ENDINCLINATION="-3095;0;" ID="Arrow_ID_547692411" STARTARROW="None" STARTINCLINATION="888;0;"/>
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1567876260420" ID="ID_1982958415" MODIFIED="1567876360311" TEXT="quick-n-dirty auf Tab-2 vom TestControl eingeh&#xe4;ngt ">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1567876314629" ID="ID_1352878688" MODIFIED="1567876360311" TEXT="Labels erscheinen, aber noch nicht an der korrekten Position">
<arrowlink COLOR="#d66a46" DESTINATION="ID_764240247" ENDARROW="Default" ENDINCLINATION="220;12;" ID="Arrow_ID_748970743" STARTARROW="None" STARTINCLINATION="64;28;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1567876291814" ID="ID_764240247" MODIFIED="1567876393288" TEXT="Thema: Offsets und Koordinaten auf dem Canvas">
<arrowlink COLOR="#c25c5f" DESTINATION="ID_1434222749" ENDARROW="Default" ENDINCLINATION="-123;0;" ID="Arrow_ID_1862539064" STARTARROW="None" STARTINCLINATION="-876;0;"/>
<linktarget COLOR="#d66a46" DESTINATION="ID_764240247" ENDARROW="Default" ENDINCLINATION="220;12;" ID="Arrow_ID_748970743" SOURCE="ID_1352878688" STARTARROW="None" STARTINCLINATION="64;28;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node COLOR="#338800" CREATED="1567085650636" ID="ID_394868232" MODIFIED="1567088360350" TEXT="brauche elaboriertere Storage f&#xfc;r Dekorationen">
<icon BUILTIN="button_ok"/>
<node CREATED="1567876052888" ID="ID_1307787525" MODIFIED="1567876052888" TEXT=""/>
</node>
<node COLOR="#338800" CREATED="1567085662725" ID="ID_1234980335" MODIFIED="1567111947683" TEXT="beim Profile-building pass mit berechnen">
<icon BUILTIN="button_ok"/>
@ -24154,7 +24227,8 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1566956347881" ID="ID_1434222749" MODIFIED="1567112111879" TEXT="Koordinaten beachten">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1566956347881" ID="ID_1434222749" MODIFIED="1567876387739" TEXT="Koordinaten beachten">
<linktarget COLOR="#c25c5f" DESTINATION="ID_1434222749" ENDARROW="Default" ENDINCLINATION="-123;0;" ID="Arrow_ID_1862539064" SOURCE="ID_764240247" STARTARROW="None" STARTINCLINATION="-876;0;"/>
<icon BUILTIN="bell"/>
<node CREATED="1566956361471" ID="ID_1879544719" MODIFIED="1566956417944" TEXT="Vorsicht bei gemeinsam genormten Koordinaten">
<richcontent TYPE="NOTE"><html>
@ -24168,6 +24242,15 @@
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1567876399531" ID="ID_1578713642" MODIFIED="1567876412481" TEXT="genau.... jetzt hamma den Salat">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1567876413663" ID="ID_1376431800" MODIFIED="1567876429537" TEXT="alle Content-Labels erscheinen nach untern verschoben">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1567876430941" ID="ID_1855510589" MODIFIED="1567876437643" TEXT="Ursache untersuchen">
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
</node>
</node>