UI-Coordinates: dream up some basic properties (WIP)

ZOMG... who is to code up all this stuff...?
This commit is contained in:
Fischlurch 2017-09-24 02:04:23 +02:00
parent 78cbf0f57e
commit 08f70c068c
2 changed files with 111 additions and 14 deletions

View file

@ -26,11 +26,13 @@
#include "lib/test/run.hpp"
//#include "lib/test/test-helper.hpp"
#include "lib/test/test-helper.hpp"
#include "gui/interact/ui-coord.hpp"
#include "lib/format-cout.hpp"
#include "lib/format-util.hpp"
//#include "lib/idi/entry-id.hpp"
//#include "lib/diff/gen-node.hpp"
//#include "lib/util.hpp"
#include "lib/util.hpp"
//#include <string>
@ -39,7 +41,9 @@
//using lib::idi::EntryID;
//using lib::diff::GenNode;
//using util::isSameObject;
//using util::isnil;
using util::isnil;
using util::join;
namespace gui {
@ -47,6 +51,8 @@ namespace interact {
namespace test {
// using lumiera::error::LUMIERA_ERROR_WRONG_TYPE;
using lumiera::error::LUMIERA_ERROR_INDEX_BOUNDS;
using lumiera::error::LUMIERA_ERROR_LOGIC;
namespace { //Test fixture...
@ -82,13 +88,104 @@ namespace test {
void
verify_basics()
{
UNIMPLEMENTED ("define basic properties of UI coordinates");
UICoord undef;
CHECK (isnil (undef));
UICoord uic{"Γ","Δ","Θ","Ξ","Σ","Ψ","Φ","Ω"};
CHECK (not isnil (uic));
CHECK (8 == uic.size());
// path is iterable
CHECK ("ΓΔΘΞΣΨΦΩ" == join(uic,""));
// indexed access
CHECK ("Γ" == uic[UIC_WINDOW]);
CHECK ("Δ" == uic[UIC_PERSP]);
CHECK ("Θ" == uic[UIC_PANEL]);
CHECK ("Ξ" == uic[UIC_VIEW]);
CHECK ("Σ" == uic[UIC_TAB]);
CHECK ("Ψ" == uic[UIC_PART]);
CHECK ("Φ" == uic[UIC_PART+1]);
CHECK ("Ω" == uic[UIC_PART+2]);
// iteration matches index order
uint i=0;
for (UICoord::iterator ii = uic.begin(); ii; ++ii, ++i)
CHECK (uic[i] == *ii);
CHECK (8 == i);
VERIFY_ERROR (INDEX_BOUNDS, uic[8]);
// string representation
CHECK ("UI:Γ[Δ]-Θ.Ξ.Σ/Ψ/Φ/Ω" == string(uic));
CHECK ("Γ[Δ]-Θ.Ξ.Σ" == uic.getComp());
CHECK ("Ψ/Φ/Ω" == uic.getPath());
// new value can be assigned, but not altered in place
uic = UICoord{nullptr,nullptr,"Θ",nullptr,nullptr,nullptr,"Φ"};
CHECK (7 == uic.size());
// representation is trimmed and filled
CHECK ("UI:Θ.*.*/*/Φ" == string(uic));
CHECK (NULL == uic[UIC_WINDOW]);
CHECK (NULL == uic[UIC_PERSP]);
CHECK ("Θ" == uic[UIC_PANEL]);
CHECK ("*" == uic[UIC_VIEW]);
CHECK ("*" == uic[UIC_TAB]);
CHECK ("*" == uic[UIC_PART]);
CHECK ("Φ" == uic[UIC_PART+1]);
VERIFY_ERROR (INDEX_BOUNDS, uic[UIC_PART+2]);
}
void
verify_builder()
{
UICoord uic1 = UICoord::window("window");
UICoord uic2 = uic2.view("view");
CHECK ("UI:window" == string(uic1));
CHECK ("UI:window[*]-*.view" == string(uic2));
CHECK (1 == uic1.size());
CHECK (4 == uic2.size());
// fault-tolerant accessors for the generic part
CHECK ("window" == uic1.getWindow());
CHECK ("window" == uic2.getWindow());
CHECK ("" == uic1.getPersp());
CHECK ("*" == uic2.getPersp());
CHECK ("" == uic1.getPanel());
CHECK ("*" == uic2.getPanel());
CHECK ("" == uic1.getView());
CHECK ("view" == uic2.getView());
CHECK ("" == uic1.getTab());
CHECK ("" == uic2.getTab());
CHECK ("" == uic1.getPath());
CHECK ("" == uic2.getPath());
CHECK ("window" == uic1.getComp());
CHECK ("window[*]-*.view" == uic2.getComp());
VERIFY_ERROR (INDEX_BOUNDS, uic1[UIC_PERSP]);
VERIFY_ERROR (INDEX_BOUNDS, uic2[UIC_TAB]);
UICoord uic3 = UICoord::view("view");
CHECK (4 == uic3.size());
CHECK ("UI:?.view" == string(uic3));
CHECK ("" == uic3.getWindow());
CHECK ("" == uic3.getPersp());
CHECK ("" == uic3.getPanel());
CHECK ("view" == uic3.getView());
UICoord uic4 = uic3.persp("persp");
CHECK (4 == uic4.size());
CHECK ("UI:?[persp]-*.view" == string(uic4));
uic4 = uic3.append("tab");
CHECK (5 == uic4.size());
CHECK ("UI:?.view.tab" == string(uic4));
uic4 = uic3.prepend("panel");
CHECK (4 == uic4.size());
CHECK ("UI:?-panel.view" == string(uic4));
VERIFY_ERROR(LOGIC, uic1.prepend("root"));
UNIMPLEMENTED ("verify the UI coordinate builder DSL");
}

View file

@ -2747,7 +2747,7 @@ Command instances are like prototypes -- thus each additional level of different
see the description in &amp;rarr; CommandSetup
</pre>
</div>
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201709222301" tags="def GuiPattern design" changecount="33">
<div title="GuiComponentView" creator="Ichthyostega" modifier="Ichthyostega" created="201709021521" modified="201709232234" tags="def GuiPattern design" changecount="36">
<pre>//A view within the UI, featuring some component of relevance to »the model«.//
While any UI is comprised of numerous widgets acting as //view of something,// only some of those views play the prominent role to act as //building block component// of the user interface.
Such UI component views exhibit some substantial traits
@ -2794,32 +2794,32 @@ locate = panel(timeline)
{{{
alloc = onlyOne
locate = external(beamer)
               or perspective(mediaView).panel(viewer)
                or existingPanel(viewer)
                or firstWindow().panel(viewer)
or perspective(mediaView).panel(viewer)
or existingPanel(viewer)
or firstWindow().panel(viewer)
}}}
:* allow two viewer panels (the standard layout of editing applications)
{{{
alloc = limitPerWindow(2)
locate = perspective(edit).existingPanel(viewer)
               or currentWindow().existingPanel(viewer)
                or existingPanel(viewer)
                or panel(viewer)
or currentWindow().existingPanel(viewer)
or existingPanel(viewer)
or panel(viewer)
}}}
;(Asset)Bin
:within the dedicated asset panel, add to the appropriate group for the kind of asset
{{{
alloc = unlimited
locate = currentWindow().perspective(edit).existingPanel(asset).existingGroup()
               or perspective(asset).panel(asset)
                or firstWindow().panel(asset)
or perspective(asset).panel(asset)
or firstWindow().panel(asset)
}}}
;~Error-Log
:use the current {{{InfoBoxPanel}}} if such exists, fall back to using a single view on the primary window
{{{
alloc = limitPerWindow(1)
locate = currentWindow().existingPanel(infobox)
or firstWindow().panel(infobox)
or firstWindow().panel(infobox)
}}}
;Playcontrol
://not determined yet what we'll need here....//