diff --git a/doc/technical/code/codingGuidelines.txt b/doc/technical/code/codingGuidelines.txt index 8ec17e34e..36b6ea44b 100644 --- a/doc/technical/code/codingGuidelines.txt +++ b/doc/technical/code/codingGuidelines.txt @@ -84,6 +84,10 @@ General Code Arrangement and Layout The primary author(s) and the year of the initial copyright claim should be mentioned. - Each header should be focused on a specific purpose. Preferably it starts with a file-level doxygen comment explaining the intention and anything not obvious from reading the code. + At lest a `@file` tag with one line of classification in a doxygen comment at the top of every + file is mandatory.footnote:[this rule stands simply because, without such a file-level doxygen + comment, doxygen will _ignore all contents_ of this file (really, might be surprising, yet it is + the way it is...)] - when arranging headers and compilation units, please take care of the compilation times and the code size. Avoid unnecessary includes. Use forward declarations where applicable. Yet still, _all immediately required direct dependencies should be mentioned_, even if already @@ -91,11 +95,20 @@ General Code Arrangement and Layout link:{ldoc}/technical/code/linkingStructure.html#_imports_and_import_order[issues of code organisation] - The include block starts with our own dependencies, followed by a second block with the library dependencies. After that, optionally some symbols may be brought into scope (through +using+ clauses). - Avoid cluttering top-level namespaces. Never import full namespaces (no +using namespace boost;+ please!) + Avoid cluttering top-level namespaces. Never import full namespaces.footnote:[no `using namespace gtk;` + or `using namespace boost` please! Experience shows, in the end you'll be using 5 names or so, but + pull in all the others just for sake of laziness. Just type the f**g `using` clause for every + import individually, and we'll all be better off...] - the includes for our own dependencies shall be given relative to source-root (or test root). Don't use relative includes for headers located in the same directory, or -- worse still -- in the parent directory. -- sometimes, the actual translation units will combine several facilities for technical reasons, e.g. - when sharing an implementation-level class or even singleton instance. +- sometimes, the actual translation units will combine several facilities for technical reasons.footnote: + [this means, there can be ``headers'', which are actually only be intended for inclusion on one or two + distinct places. This should be mentioned in the file-level comment, but generally is an acceptable + practice, and better then lumping everything into a 1000 lines header. As a guideline, if you expect + a rather technical concern not to be of much interest for most readers of a header, then better + extract it into a separate self-contained header and include it. E.g., you might be sharing an + an implementation-level class or even singleton instance and some constant definitions. Just + be sure not to include definitions several times.] Anonymous namespaces should be used liberally to avoid unnecessary exports. - template code mostly needs to reside in headers. (same for metaprogramming code). We employ the simple inclusion model (``Borland model'') for template instantiation. diff --git a/src/gui/timeline/timeline-controller.cpp b/src/gui/timeline/timeline-controller.cpp index 6bf6d18ce..bd18fc694 100644 --- a/src/gui/timeline/timeline-controller.cpp +++ b/src/gui/timeline/timeline-controller.cpp @@ -40,7 +40,7 @@ #include "gui/gtk-base.hpp" #include "include/ui-protocol.hpp" -#include "gui/timeline/layout-manager.hpp" +#include "gui/timeline/timeline-layout.hpp" #include "gui/timeline/timeline-controller.hpp" #include "gui/timeline/track-presenter.hpp" #include "gui/timeline/marker-widget.hpp" @@ -82,7 +82,7 @@ namespace timeline { - TimelineController::TimelineController (ID identity, ID trackID, ctrl::BusTerm& nexus, LayoutManager& layoutManager) + TimelineController::TimelineController (ID identity, ID trackID, ctrl::BusTerm& nexus, TimelineLayout& layoutManager) : Controller{identity, nexus} , name_{identity.getSym()} // fallback initialise name from human-readable ID symbol , markers_{} diff --git a/src/gui/timeline/timeline-controller.hpp b/src/gui/timeline/timeline-controller.hpp index 85ca2d9bf..eb157626e 100644 --- a/src/gui/timeline/timeline-controller.hpp +++ b/src/gui/timeline/timeline-controller.hpp @@ -72,7 +72,7 @@ namespace timeline { using std::string; class TrackPresenter; - class LayoutManager; + class TimelineLayout; class MarkerWidget; @@ -99,7 +99,7 @@ namespace timeline { * @param trackID the mandatory root track used in the associated Sequence * @param nexus some established connection to the UI-Bus, used for registration. */ - TimelineController (ID identity, ID trackID, ctrl::BusTerm& nexus, LayoutManager&); + TimelineController (ID identity, ID trackID, ctrl::BusTerm& nexus, TimelineLayout&); ~TimelineController(); diff --git a/src/gui/timeline/timeline-gui.cpp b/src/gui/timeline/timeline-gui.cpp index 6e78f04c5..f68a385e7 100644 --- a/src/gui/timeline/timeline-gui.cpp +++ b/src/gui/timeline/timeline-gui.cpp @@ -73,7 +73,11 @@ namespace timeline { , rootTrackID_{rr.rootTrackID_} { } - TimelineGui::~TimelineGui() { } + TimelineGui::~TimelineGui() + { + if (this->isActive()) + TODO ("cascading destruction of the TimelineWidget"); /////////////////////////////////////////////TICKET 1016 : implement sane unwinding + } /** diff --git a/src/gui/timeline/layout-manager.cpp b/src/gui/timeline/timeline-layout.cpp similarity index 82% rename from src/gui/timeline/layout-manager.cpp rename to src/gui/timeline/timeline-layout.cpp index e266344a8..a57284a1b 100644 --- a/src/gui/timeline/layout-manager.cpp +++ b/src/gui/timeline/timeline-layout.cpp @@ -1,5 +1,5 @@ /* - LayoutManager - global timeline layout management and display control + TimelineLayout - global timeline layout management and display control Copyright (C) Lumiera.org 2016, Hermann Vosseler @@ -21,7 +21,7 @@ * *****************************************************/ -/** @file layout-manager.cpp +/** @file timeline-layout.cpp ** Implementation details of global timeline layout management. ** ** @todo WIP-WIP-WIP as of 12/2016 @@ -31,7 +31,7 @@ #include "gui/gtk-base.hpp" -#include "gui/timeline/layout-manager.hpp" +#include "gui/timeline/timeline-layout.hpp" //#include "gui/ui-bus.hpp" //#include "lib/format-string.hpp" @@ -59,15 +59,17 @@ namespace timeline { - LayoutManager::~LayoutManager() { } + TimelineLayout::~TimelineLayout() { } - LayoutManager::LayoutManager () + TimelineLayout::TimelineLayout () + : headerPane_{} + , bodyCanvas_{} { } void - LayoutManager::installRootTrack(TrackHeadWidget& head, TrackBody& body) + TimelineLayout::installRootTrack(TrackHeadWidget& head, TrackBody& body) { UNIMPLEMENTED ("attach the widgets for the root track display"); } diff --git a/src/gui/timeline/layout-manager.hpp b/src/gui/timeline/timeline-layout.hpp similarity index 91% rename from src/gui/timeline/layout-manager.hpp rename to src/gui/timeline/timeline-layout.hpp index 464e9202f..b7b714f60 100644 --- a/src/gui/timeline/layout-manager.hpp +++ b/src/gui/timeline/timeline-layout.hpp @@ -1,5 +1,5 @@ /* - LAYOUT-MANAGER.hpp - global timeline layout management and display control + TIMELINE-LAYOUT.hpp - global timeline layout management and display control Copyright (C) Lumiera.org 2016, Hermann Vosseler @@ -21,7 +21,7 @@ */ -/** @file layout-manager.hpp +/** @file timeline-layout.hpp ** A core service of the timeline UI to ensure consistent display and layout ** of all components within the timeline. The content of the timeline is organised ** into several nested collections, possibly holding several thousand individual elements. @@ -79,10 +79,12 @@ */ -#ifndef GUI_TIMELINE_LAYOUT_MANAGER_H -#define GUI_TIMELINE_LAYOUT_MANAGER_H +#ifndef GUI_TIMELINE_TIMELINE_LAYOUT_H +#define GUI_TIMELINE_TIMELINE_LAYOUT_H #include "gui/gtk-base.hpp" +#include "gui/timeline/header-pane-widget.hpp" +#include "gui/timeline/body-canvas-widget.hpp" //#include "lib/util.hpp" @@ -101,11 +103,14 @@ namespace timeline { /** * @todo WIP-WIP as of 12/2016 */ - class LayoutManager + class TimelineLayout { + HeaderPaneWidget headerPane_; + BodyCanvasWidget bodyCanvas_; + public: - LayoutManager (); - ~LayoutManager(); + TimelineLayout (); + ~TimelineLayout(); void installRootTrack(TrackHeadWidget&,TrackBody&); @@ -115,4 +120,4 @@ namespace timeline { }}// namespace gui::timeline -#endif /*GUI_TIMELINE_LAYOUT_MANAGER_H*/ +#endif /*GUI_TIMELINE_TIMELINE_LAYOUT_H*/ diff --git a/src/gui/timeline/timeline-widget.cpp b/src/gui/timeline/timeline-widget.cpp index 22ee125c5..be1d6f0fe 100644 --- a/src/gui/timeline/timeline-widget.cpp +++ b/src/gui/timeline/timeline-widget.cpp @@ -33,7 +33,7 @@ #include "gui/gtk-base.hpp" #include "gui/timeline/timeline-widget.hpp" #include "gui/timeline/timeline-controller.hpp" -#include "gui/timeline/layout-manager.hpp" +#include "gui/timeline/timeline-layout.hpp" //#include "gui/workspace/workspace-window.hpp" //#include "gui/ui-bus.hpp" @@ -69,7 +69,7 @@ namespace timeline { TimelineWidget::TimelineWidget (BusTerm::ID identity, BusTerm::ID trackID, BusTerm& nexus) : TimelinePage{} - , layout_{new LayoutManager} + , layout_{new TimelineLayout} , control_{new TimelineController{identity, trackID, nexus, *layout_}} { UNIMPLEMENTED ("build the timeline UI"); diff --git a/src/gui/timeline/timeline-widget.hpp b/src/gui/timeline/timeline-widget.hpp index 98290fb6f..974ed869f 100644 --- a/src/gui/timeline/timeline-widget.hpp +++ b/src/gui/timeline/timeline-widget.hpp @@ -62,6 +62,7 @@ #include "lib/time/timevalue.hpp" #include "lib/diff/diff-mutable.hpp" +#include "lib/nocopy.hpp" //#include //#include @@ -78,7 +79,7 @@ namespace timeline { using ctrl::BusTerm; class TimelineController; - class LayoutManager; + class TimelineLayout; /** * Interface: GUI page holding a timeline display @@ -106,8 +107,9 @@ namespace timeline { */ class TimelineWidget : public TimelinePage + , util::NonCopyable { - std::unique_ptr layout_; + std::unique_ptr layout_; std::unique_ptr control_; public: diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 369a7e0c9..bd89a5fbd 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -18288,11 +18288,44 @@ + + + + + + + + + + + + +

+ ...da wir unterstellen, daß das Gegenstück im Session-Modell, +

+

+ von dem der Diff ausgeht, ebenfalls den Root-Track als festes Attribut hält. +

+

+ Daher sollte eine inkompatible Strukturänderung überhaupt nicht auftreten können +

+ + +
+
+
+ + + + + + + - + @@ -18308,6 +18341,8 @@ + + @@ -18330,7 +18365,7 @@ - + @@ -18351,11 +18386,14 @@ + + - + + - + @@ -18768,6 +18806,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -18993,11 +19051,26 @@ - + + - - + + + + + + + + + + + + + + + + @@ -19040,7 +19113,86 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -39458,13 +39610,15 @@ - - - - + + + + + + @@ -39474,6 +39628,9 @@ + + + @@ -40411,6 +40568,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ ...führen automatisch dazu, daß das Widget +

+

+ ggfs. neu gemapped und invalidiert wird, woraufhin es neu gezeichnet wird +

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + @@ -40433,6 +40657,33 @@ + + + + + + + + + + + +

+ ist of einfacher und der bevorzugete Weg. +

+

+ Im Besonderen kann man sich an Signale anderer Widgets anhängen +

+ + +
+ + + + + + +