Timeline: establish wiring with the timeline DisplayManager

This commit is contained in:
Fischlurch 2019-04-12 02:00:19 +02:00
parent 9292da84f2
commit bd13df2308
6 changed files with 141 additions and 20 deletions

View file

@ -31,6 +31,7 @@
#include "stage/gtk-base.hpp"
#include "stage/timeline/body-canvas-widget.hpp"
#include "stage/timeline/display-manager.hpp"
#include "stage/timeline/track-profile.hpp"
#include "stage/timeline/track-body.hpp"
@ -42,16 +43,19 @@
//#include <algorithm>
//#include <vector>
#include <utility>
//using util::_Fmt;
//using util::contains;
//using Gtk::Widget;
using Gdk::Rectangle;
//using sigc::mem_fun;
//using sigc::ptr_fun;
//using std::cout;
//using std::endl;
using std::move;
namespace stage {
@ -64,7 +68,8 @@ namespace timeline {
class TrackGroundingRenderer
: public ProfileInterpreter
{
CairoC cox;
CairoC cox_;
PixSpan display_;
/** paint the top of the track body area
@ -125,18 +130,23 @@ namespace timeline {
public:
TrackGroundingRenderer (CairoC currentDrawContext)
: cox{currentDrawContext}
TrackGroundingRenderer (CairoC currentDrawContext, PixSpan toShow)
: cox_{currentDrawContext}
, display_{move (toShow)}
{ }
virtual ~TrackGroundingRenderer() { }
};
}
TimelineCanvas::TimelineCanvas()
TimelineCanvas::TimelineCanvas (DisplayManager& displayManager)
: Gtk::Layout{}
, layout_{displayManager}
, rootBody_{nullptr}
, profile_{}
{ }
@ -144,9 +154,9 @@ namespace timeline {
BodyCanvasWidget::~BodyCanvasWidget() { }
BodyCanvasWidget::BodyCanvasWidget ()
BodyCanvasWidget::BodyCanvasWidget (DisplayManager& displayManager)
: Gtk::ScrolledWindow{}
, canvas_{}
, canvas_{displayManager}
{
this->set_shadow_type(Gtk::SHADOW_IN);
this->set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC); // always need a horizontal scrollbar
@ -251,7 +261,7 @@ namespace timeline {
if (not profile_)
rootBody_->establishTrackSpace (profile_);
TrackGroundingRenderer renderer{cox};
TrackGroundingRenderer renderer{cox, layout_.getPixSpan()};
profile_.performWith (renderer);
}
/////////////////////////////////////////////TICKET #1039 : placeholder drawing

View file

@ -70,17 +70,20 @@
namespace stage {
namespace timeline {
class DisplayManager;
class TrackBody;
class TimelineCanvas
: public Gtk::Layout
{
DisplayManager& layout_;
public:
TrackBody* rootBody_;
TrackProfile profile_;
TimelineCanvas();
TimelineCanvas (DisplayManager&);
private:
virtual bool on_draw (Cairo::RefPtr<Cairo::Context> const&) override;
@ -102,7 +105,7 @@ namespace timeline {
TimelineCanvas canvas_;
public:
BodyCanvasWidget();
BodyCanvasWidget (DisplayManager&);
~BodyCanvasWidget();
/** @internal Initially install the contents corresponding to the root track fork */

View file

@ -58,7 +58,7 @@
#include "lib/error.hpp"
#include "lib/nocopy.hpp"
//#include "lib/util.hpp"
#include "lib/util.hpp"
//#include <memory>
//#include <vector>
@ -68,9 +68,29 @@
namespace stage {
namespace timeline {
using util::max;
// class TrackHeadWidget;
/** @todo quick-n-dirty hack. Should consider the Range TR (C++20) */
struct PixSpan
{
int b = 0;
int e = 0;
PixSpan() { }
PixSpan(int begin, int end)
: b{begin}, e{max (begin,end)}
{ }
bool
empty() const
{
return e <= b;
}
};
/**
* Interface used by the widgets to translate themselves into screen layout.
* @todo WIP-WIP as of 11/2018
@ -84,6 +104,8 @@ namespace timeline {
public:
virtual ~DisplayManager(); ///< this is an interface
/** the overall horizontal pixel span to cover by this timeline */
virtual PixSpan getPixSpan() =0;
private:/* ===== Internals ===== */

View file

@ -63,8 +63,8 @@ namespace timeline {
TimelineLayout::TimelineLayout (Gtk::Paned& topLevelContainer)
: paneSplitPosition_{topLevelContainer.property_position()}
, bodyCanvas_{}
, headerPane_{bodyCanvas_.get_vadjustment()} // wire the header pane (Gtk::Viewport) to follow the body vertical scroll movement
, bodyCanvas_{*this} // inject (as interface DisplayManager)
, headerPane_{bodyCanvas_.get_vadjustment()} // wire the header pane (Gtk::Viewport) to follow the body vertical scroll movement
{
topLevelContainer.add1 (headerPane_);
topLevelContainer.add2 (bodyCanvas_);
@ -86,7 +86,17 @@ namespace timeline {
bodyCanvas_.installForkRoot (body);
}
/* ==== Interface: LayoutManager===== */
PixSpan
TimelineLayout::getPixSpan()
{
////////////////////////////////////////////////////////TICKET 1019 : need a "ZoomWindow" here to manage the visible area
////////////////////////////////////////////////////////TICKET 1039 : "somehow" wire with the TimelineController to find out the covered span
return PixSpan {0, 2048}; ////////////////Lalala Lalü
}

View file

@ -115,6 +115,7 @@ namespace timeline {
BodyCanvasWidget bodyCanvas_;
HeaderPaneWidget headerPane_;
/////////////////////////////////////////////////////////////////////////////////////////////TICKET 1019 : need a "ZoomWindow" here to manage the visible area
public:
TimelineLayout (Gtk::Paned&);
@ -125,6 +126,8 @@ namespace timeline {
protected:/* ==== Interface: LayoutManager===== */
PixSpan getPixSpan() override;
private:/* ===== Internals ===== */
};

View file

@ -19111,6 +19111,30 @@
</node>
</node>
<node CREATED="1480639473324" ID="ID_191170582" MODIFIED="1518487921082" TEXT="eval pass"/>
<node CREATED="1555022703032" ID="ID_13722484" MODIFIED="1555022709661" TEXT="Verdrahtung">
<node CREATED="1555022710839" ID="ID_1166296639" MODIFIED="1555022758423" TEXT="mu&#xdf; in alle Nutzer injiziert werden"/>
<node CREATED="1555022761189" ID="ID_640769952" MODIFIED="1555022811382" TEXT="wie? geht wohl nur direkte Referenz">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
es ist hier kein by-Name-Zugriff,
</p>
<p>
weil ein Layout-Manager immer nur im Bereich eines TimelineWidget relevant ist
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1555023446038" ID="ID_858959830" MODIFIED="1555023448646" TEXT="clients">
<node CREATED="1555023449597" ID="ID_1228634821" MODIFIED="1555023475298" TEXT="TimelineCanvas">
<node CREATED="1555023483241" ID="ID_753460169" MODIFIED="1555023494947" TEXT="zum Feststellen des zu zeichnenden Bereiches"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1306244096" MODIFIED="1538940563330" TEXT="Track-Presenter">
<linktarget COLOR="#fec680" DESTINATION="ID_1306244096" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_951723874" SOURCE="ID_1570849604" STARTARROW="None" STARTINCLINATION="407;0;"/>
@ -19461,8 +19485,8 @@
<icon BUILTIN="forward"/>
</node>
</node>
<node CREATED="1554996492819" ID="ID_1391546845" MODIFIED="1554996595043" TEXT="Konfig laut systematischem Modell">
<arrowlink COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-136;-11;" ID="Arrow_ID_1858329997" STARTARROW="None" STARTINCLINATION="-747;0;"/>
<node CREATED="1554996492819" ID="ID_1391546845" MODIFIED="1555020047700" TEXT="Konfig laut systematischem Modell">
<arrowlink COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-612;-125;" ID="Arrow_ID_1858329997" STARTARROW="None" STARTINCLINATION="-747;0;"/>
<icon BUILTIN="info"/>
</node>
</node>
@ -19531,6 +19555,20 @@
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554995834875" ID="ID_1119649795" MODIFIED="1554995856751" TEXT="Zusammenspiel mit Expand/Collapse">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1555020163776" ID="ID_1470546162" MODIFIED="1555020172977" TEXT="collapsed == Scope durch Ruler ersetzt"/>
<node CREATED="1555020175102" ID="ID_1798602" MODIFIED="1555020201810">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<i>das </i>ist ein reiner (pesistent) presentation state
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554995841966" ID="ID_1443277448" MODIFIED="1554995854985" TEXT="genaue Rolle der Session??">
<icon BUILTIN="help"/>
@ -19621,7 +19659,7 @@
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862804070" ID="ID_430268635" MODIFIED="1541865190835" TEXT="Display-Manager == Abstraktion">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862816104" FOLDED="true" ID="ID_1545586243" MODIFIED="1554475739966" TEXT="lokal injiziert beim Aufbau">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862816104" FOLDED="true" ID="ID_1545586243" MODIFIED="1555021961047" TEXT="lokal injiziert beim Aufbau">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1554475687257" ID="ID_908192712" MODIFIED="1554475728633" TEXT="das hei&#xdf;t: separates Thema">
<icon BUILTIN="yes"/>
@ -19633,9 +19671,19 @@
</node>
<node CREATED="1541862265474" ID="ID_1967442368" MODIFIED="1541862271660" TEXT="Grundfunktion: translate window"/>
<node CREATED="1541862852155" ID="ID_1628726016" MODIFIED="1541862855014" TEXT="Anfragen">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862862450" ID="ID_1333221051" MODIFIED="1541862900766" TEXT="was ist meine Postion und Extension?">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862862450" ID="ID_1333221051" MODIFIED="1555021921487" TEXT="was ist meine Position und Extension?">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1555024009413" ID="ID_1600874732" MODIFIED="1555024044058" TEXT="welches Pixel-Window mu&#xdf; dargestellt werden">
<linktarget COLOR="#3d4476" DESTINATION="ID_1600874732" ENDARROW="Default" ENDINCLINATION="561;0;" ID="Arrow_ID_1463649935" SOURCE="ID_1781062229" STARTARROW="None" STARTINCLINATION="550;27;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1555027076942" HGAP="38" ID="ID_479062556" MODIFIED="1555027099088" TEXT="wie bekomme ich das heraus?" VSHIFT="39">
<icon BUILTIN="help"/>
</node>
<node CREATED="1555027102243" HGAP="40" ID="ID_855793949" MODIFIED="1555027111855" TEXT="Idee" VSHIFT="5">
<node CREATED="1555027114837" ID="ID_727253754" MODIFIED="1555027124236" TEXT="den TimelineController fragen..?"/>
</node>
</node>
</node>
</node>
<node CREATED="1541861495569" ID="ID_1828075998" MODIFIED="1541861767263" TEXT="Thema: ZoomWindow">
@ -19658,6 +19706,28 @@
<node COLOR="#435e98" CREATED="1542383689152" ID="ID_1534655843" MODIFIED="1554476058485" TEXT="wird der on_draw() mitgegeben">
<arrowlink COLOR="#5e86ca" DESTINATION="ID_577859258" ENDARROW="Default" ENDINCLINATION="-1325;0;" ID="Arrow_ID_1966515866" STARTARROW="None" STARTINCLINATION="-1797;81;"/>
<icon BUILTIN="info"/>
<node CREATED="1555021726291" ID="ID_529262560" MODIFIED="1555021754334" TEXT="Entnehmen und Aufbereiten">
<node CREATED="1555021755898" ID="ID_968519712" MODIFIED="1555021763596" TEXT="Cairo liefert double-Koordinaten"/>
<node CREATED="1555021772375" ID="ID_860582416" MODIFIED="1555021779306" TEXT="gdk_cairo_get_clip_rectangle() als Vorlage"/>
</node>
<node CREATED="1555021797428" ID="ID_1566025774" MODIFIED="1555021808494" TEXT="Problem: Fallback">
<node CREATED="1555021809578" ID="ID_1964178964" MODIFIED="1555021844764" TEXT="was wenn die Clip-Region nicht gesetzt ist?">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
wir k&#246;nnen nicht von 0 bis MAXINT zeichnen
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1555023959073" ID="ID_118083348" MODIFIED="1555023989547" TEXT="auf Pixel-Window zur&#xfc;ckfallen">
<arrowlink COLOR="#677e9a" DESTINATION="ID_1781062229" ENDARROW="Default" ENDINCLINATION="230;6;" ID="Arrow_ID_733563643" STARTARROW="None" STARTINCLINATION="296;77;"/>
</node>
</node>
</node>
<node CREATED="1542383722599" ID="ID_1927110373" MODIFIED="1542383731623" TEXT="Optimierungs-Potential">
<node CREATED="1542383737043" ID="ID_1858424140" MODIFIED="1542383739795" TEXT="sp&#xe4;ter">
@ -19675,7 +19745,10 @@
</node>
<node CREATED="1542383915849" ID="ID_557373288" MODIFIED="1544125773986" TEXT="relevantTimeWindow">
<linktarget COLOR="#6f83c4" DESTINATION="ID_557373288" ENDARROW="Default" ENDINCLINATION="84;-18;" ID="Arrow_ID_391816329" SOURCE="ID_892953664" STARTARROW="None" STARTINCLINATION="-125;2;"/>
<node CREATED="1542384024260" ID="ID_1781062229" MODIFIED="1542384036230" TEXT="festgelegt im DisplayManager"/>
<node CREATED="1542384024260" ID="ID_1781062229" MODIFIED="1555024050531" TEXT="festgelegt im DisplayManager">
<arrowlink COLOR="#3d4476" DESTINATION="ID_1600874732" ENDARROW="Default" ENDINCLINATION="561;0;" ID="Arrow_ID_1463649935" STARTARROW="None" STARTINCLINATION="550;27;"/>
<linktarget COLOR="#677e9a" DESTINATION="ID_1781062229" ENDARROW="Default" ENDINCLINATION="230;6;" ID="Arrow_ID_733563643" SOURCE="ID_118083348" STARTARROW="None" STARTINCLINATION="296;77;"/>
</node>
</node>
</node>
</node>
@ -22037,8 +22110,8 @@
<node CREATED="1538957049292" ID="ID_98299428" MODIFIED="1538957077700" TEXT="if typeID = &quot;Marker&quot;"/>
</node>
</node>
<node CREATED="1544840312839" ID="ID_433238862" MODIFIED="1554996595043" TEXT="Ruler">
<linktarget COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-136;-11;" ID="Arrow_ID_1858329997" SOURCE="ID_1391546845" STARTARROW="None" STARTINCLINATION="-747;0;"/>
<node CREATED="1544840312839" ID="ID_433238862" MODIFIED="1555020047701" TEXT="Ruler">
<linktarget COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-612;-125;" ID="Arrow_ID_1858329997" SOURCE="ID_1391546845" STARTARROW="None" STARTINCLINATION="-747;0;"/>
<node CREATED="1544840455429" ID="ID_1283986005" MODIFIED="1544840465760" TEXT="&quot;timecode&quot; = formatID"/>
<node CREATED="1544840496225" ID="ID_230755841" MODIFIED="1544840613171" TEXT="&quot;contentFormat&quot; = formatID (none|pivot|frames|wave|synopsis)"/>
<node CREATED="1544840634822" ID="ID_1138129422" MODIFIED="1544840643904" TEXT="Sequence{Marker.kind}">