From 70b8b861829f9239eb7a262db2769e2b153dd425 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 9 Feb 2023 01:30:32 +0100 Subject: [PATCH] Timeline: determine remaining work to wrap-up Intention is to shift focus of development work down towards Player and Scheduler soon. However, since the timeline display saw substantial improvement it seems prudent to finish work on some open ends, notably - the track head structure - the drawing and styling code While content rendering for Clip widgets can safely be postponed, regarding the TrackHeadWidget, where custom drawing is planned to display a structural outline of the nested scopes, some ground work should be completed to make those plannings explicit. --- src/stage/timeline/stave-bracket-widget.cpp | 73 +++++++++++ src/stage/timeline/stave-bracket-widget.hpp | 78 +++++++++++ src/stage/timeline/track-head-widget.hpp | 1 + wiki/thinkPad.ichthyo.mm | 136 +++++++++++++++++--- 4 files changed, 268 insertions(+), 20 deletions(-) create mode 100644 src/stage/timeline/stave-bracket-widget.cpp create mode 100644 src/stage/timeline/stave-bracket-widget.hpp diff --git a/src/stage/timeline/stave-bracket-widget.cpp b/src/stage/timeline/stave-bracket-widget.cpp new file mode 100644 index 000000000..d3f0fe64a --- /dev/null +++ b/src/stage/timeline/stave-bracket-widget.cpp @@ -0,0 +1,73 @@ +/* + StaveBracketWidget - track body area to show overview and timecode and markers + + Copyright (C) Lumiera.org + 2023, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + + +/** @file stave-bracket-widget.cpp + ** Implementation of drawing code to indicate the structure of nested tracks + ** in the header area of the Timleline UI. + ** + ** @todo WIP-WIP-WIP as of 2/2023 + ** + */ + + +#include "stage/timeline/stave-bracket-widget.hpp" +//#include "stage/style-scheme.hpp" /////////////////////TODO needed? +//#include "lib/util.hpp" + +//#include +//#include + + + +//using util::_Fmt; +//using util::isnil; +//using util::contains; +//using Gtk::Widget; +//using sigc::mem_fun; +//using sigc::ptr_fun; +//using std::cout; +//using std::endl; + + +namespace stage { +namespace timeline { + + namespace { + } + + + + + StaveBracketWidget::StaveBracketWidget () + : DrawingArea{} + { } + + + StaveBracketWidget::~StaveBracketWidget() { } + + + /** */ + + + +}}// namespace stage::timeline diff --git a/src/stage/timeline/stave-bracket-widget.hpp b/src/stage/timeline/stave-bracket-widget.hpp new file mode 100644 index 000000000..0c25bd9a4 --- /dev/null +++ b/src/stage/timeline/stave-bracket-widget.hpp @@ -0,0 +1,78 @@ +/* + STAVE-BRACKET-WIDGET.hpp - draw connector to indicate nested track structure + + Copyright (C) Lumiera.org + 2023, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + + +/** @file stave-bracket-widget.hpp + ** Widget to group tracks visually in the Timeline presentation. + ** The TrackHeadWidget is structured according to the nested structure of tracks + ** in the Fork, using nested widgets to represent sub-tracks; in the grid's first column + ** a graphical structure is rendered to indicate the nesting and connectivity of tracks. + ** While based on few rather simple visual primitives, this structure need to adapt to + ** the actual space allocation and positioning of sub-tracks in the layout; technicalities + ** of actual drawing this structure is abstracted into this custom widget — allowing the + ** track head to indicate the necessary layout constraints generic and recursively. + ** + ** @todo WIP-WIP-WIP as of 2/2023 + ** + */ + + +#ifndef STAGE_TIMELINE_STAVE_BRACKET_WIDGET_H +#define STAGE_TIMELINE_STAVE_BRACKET_WIDGET_H + +#include "stage/gtk-base.hpp" +//#include "stage/model/controller.hpp" + +//#include "lib/util.hpp" + +//#include +//#include + + + +namespace stage { +namespace timeline { + +// class TrackPresenter; + + + /** + * Helper widget to handle display of the structure of track nesting in the timeline + * header pane. For each TrackHeadWidget, the connected cells in the first grid column + * are populated with this component, indicating connectivity and layout constraints. + * The actual drawing is based on Cairo, and implemented in the virtual draw() function. + */ + class StaveBracketWidget + : public Gtk::DrawingArea + { + public: + ~StaveBracketWidget(); + + StaveBracketWidget (); + + private:/* ===== Internals ===== */ + + }; + + +}}// namespace stage::timeline +#endif /*STAGE_TIMELINE_STAVE_BRACKET_WIDGET_H*/ diff --git a/src/stage/timeline/track-head-widget.hpp b/src/stage/timeline/track-head-widget.hpp index 5b44c7ac0..4f506faf3 100644 --- a/src/stage/timeline/track-head-widget.hpp +++ b/src/stage/timeline/track-head-widget.hpp @@ -50,6 +50,7 @@ #include "stage/ctrl/bus-term.hpp" #include "stage/model/view-hook.hpp" #include "stage/widget/element-box-widget.hpp" +#include "stage/timeline/stave-bracket-widget.hpp" diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 9ea9d8a83..5b1bea6e3 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -21167,9 +21167,9 @@ - - - + + + @@ -24677,7 +24677,7 @@ - + @@ -27835,20 +27835,22 @@ - + - + - - - - + + + + + + @@ -27922,9 +27924,9 @@ - - - + + + @@ -27942,7 +27944,35 @@ - + + + + + + + + + +

+ �� das ist kein Fehler...
Da sie zuerst eingefügt + werden, und ohne vexpand() niemals zusätzlichen Platz aufgreifen, wird + das Grid insgesamt nur so hoch wie minimal nötig, und jedwedes + Alignment-Setting auf der Zelle mit den Placement-Controls bleibt + wirkungslos; anschließend wird die zusätzliche Zeile eingefügt und + aufgespreitzt, um den Kind-Navigationsbereich auf den Level des ersten + Kind-tracks runter zu drücken +

+ +
+
+ + + + + +
+ + @@ -27964,10 +27994,69 @@ + + + + + + + + + + + + + + + + +

+ In Anspielung auf +

+
    +
  • + eine Leiter +
  • +
  • + ein Notensystem (stave) +
  • +
+

+ (*) stave ist zwar selterner und ausgeprägt Brittisch, staff  wäre geläufiger. Aber staff versteht man heutzutage als Personal, wohingegen stave auch die Leitersprosse sein könnte (BE und AE) +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -29390,7 +29479,7 @@
- + @@ -34525,10 +34614,10 @@ - + - + @@ -34866,10 +34955,17 @@ - + - - + + + + + + + + +