Commit graph

102 commits

Author SHA1 Message Date
a8e16a0f28 Navigator: identify and fix the bug
...which was basically harmless, no fundamental problem,
just a simple logical error on my behalf (using the wrong
depth level)
2017-12-26 14:40:51 +01:00
33ea1ebb79 Navigator: work around the clumsy design of IterExplorer (#1125)
yet some more trickery to get around this design problem.
I just do not want to rework IterSource right now, since this will be
a major change and require more careful consideration.

Thus introduce a workaround and mark it as future work

Using this implementation, "child expansion" should now be possible.
But we do not cover this directly in Unit test yet
2017-12-26 04:49:59 +01:00
c007fbda43 Navigator: res-structure inheritance chain to allow passing current position
we need to layer our Navigator implementation on top,
since this object needs to capture a reference to the "current position".

This is necessary to be able to derive the child position by extending
and then to form a child navigator -- which is the essence of
implementing expandChildren()
2017-12-26 04:28:02 +01:00
30a90166fb X-mas: switch demo-Child-Iterator to the new framework
...passes all the existing unit tests!
2017-12-24 23:30:22 +01:00
2ea2d38cb2 Navigator: build iterator front-end based on the new TreeExploer capabilities
...but not yet switched into the main LocationQuery interface,
because that would also break the existing implementation;
recasting this implementation is the next step to do....
2017-12-24 04:48:07 +01:00
a459468e3e Navigator: draft how building of the iterator might work
NOTE it just type checks right now,
but since meta programming is functional programming, this means
with >90% probability that it might actually work this way....
2017-12-23 00:24:56 +01:00
77c5573c80 Navigator: draft a navigation helper interface
...which also happens to include sibling and child iteration;
this is an attempt to reconcile the inner contradictions of the design
(we need both absolute flexibility for the type of each child level iterator
 yet we want just a single, generic iterator front-end)
2017-12-22 22:37:39 +01:00
1ca890d1b6 Navigator: decide how specifically to build on top of TreeExplorer
...this was a difficult piece of consideration and analysis.
In the end I've settled down on a compromise solution,
with the potential to be extended into the right direction eventually...
2017-12-22 19:35:36 +01:00
aa008d6d4a TreeExplorer: draft my requirements for packaging a TreeExplorer pipeline as IterSource
Since this now requires to import iter-adapter-stl.hpp and iter-source.hpp
at the same time, I decided to drop the convenience imports of the STL adapters
into namespace lib. There is no reason to prefer the IterSource-based adapters
over the iter-adapter-stl.hpp variants of the same functionality.
Thus better always import them explicitly at usage site.


...actual implementation of the planned IterSource packaging is only stubbed.
But I needed to redeclare a lot of ctors, which doesn't seem logical
And I get a bad function invocation from another test case which worked correct beforehand.
2017-12-07 05:48:36 +01:00
782b4f949f TreeExplorer: extended analysis regarding tree expanding and backtracking computation (#1117)
This can be seen as a side track, but the hope is
by relying on some kind of monadic evaluation pattern, we'll be
able to to reconcile the IterExplorer draft from 2012 with the requirement
to keep the implementation of "tree position" entirely opaque.

The latter is mandatory in the use case here, since we must not intermingle
the algorithm to resolve UI-coordinates in any way with the code actually
navigating and accessing GTK widgets. Thus, we're forced to build some kind
of abstraction barrier, and this turns out to be surprisingly difficult.
2017-11-17 21:43:50 +01:00
ca35891c41 Navigator: implement the mutation operations defined thus far
...so the only thing not yet implemented is the actual path resolution algorithm
2017-10-30 03:10:51 +01:00
e035dbc54a UI-Coordinates: support for truncating a given spec
...implemented within the builder.
Will shorten and discard extraneous storage,
but not expand and allocate new one
2017-10-30 02:59:56 +01:00
5530bbede8 Navigator: decide upon the fine points of meaning
anchorage vs. coverage
partial vs total
possible anchorage
possible coverage
2017-10-30 01:47:29 +01:00
4b6b4ad708 LocationQuery: now able to handle perspective info properly
...which was deliberately represented in an asymmetric way, to verify the
design's ability to cope with such implementation intricacies. So basically
we have to kick in at LEVEL == 1 and access the implementation differently.

This exercise just shows again, that treating tree structures recursively
is the way to go, and we should do similar when coding up the query-API
for the real GTK toolkit based window elements...
2017-10-29 16:00:08 +01:00
f0a32c986a LocationQuery: fix bugs and omissions 2017-10-28 02:06:05 +02:00
800407637a LocationQuery: compensate for the special representation of perspective info
this assymetry in representation was introduced deliberately,
to test the design's ability to cope with such complications
2017-10-28 01:12:06 +02:00
c39442a287 LocationQuery: recast syntax for inline structure definitions
this fixes a silly mistake:
obviously we want named sub-nodes, aka. "Attributes",
but we used the anonymous sub-nodes instead, aka. "Children"

Incidentally, this renders the definitions also way more readable;
in fact the strange post-fix naming notation of the original version
was a clear indication of using the system backwards....
2017-10-28 00:17:56 +02:00
16abe82cde LocationQuery: fix a segfault due to ill guided conversion path 2017-10-27 05:12:28 +02:00
5f9b8eb18c LocationQuery: draft the other query functions as recursive drill-down
Note: Unit test still fails...
2017-10-23 04:13:38 +02:00
75a7ecb6b3 LocationQuery: draft simple coverage check
ugly while loop....
maybe recursive?
2017-10-23 04:12:31 +02:00
144cc97e1b LocationQuery: draft simple coverage check
ugly while loop....
maybe recursive?
2017-10-23 03:17:18 +02:00
240459c550 LocationQuery: implement simple resolution of explicit anchoring by window-ID 2017-10-23 02:16:57 +02:00
fd3777de54 Navigator: draft the trivial resolution case
...based on the abstract LocationQuery interface
2017-10-21 23:47:27 +02:00
78a9ae875b Navigator: initial draft of the LocationQuery interface
the intention is to rely solely upon this abstract interface
in order to navigate the structure of the actual UI, so the
resolution process remains decoupled from the technicalities
of the actual UI toolkit set.

Through implementation of the corresponding unit test we'll determine
what it actually takes to build such a path resolution algorithm...
2017-10-21 23:37:04 +02:00
0dd516a298 Navigator: consider how to approach path resolution
obviously, we get a trivial case, when the path is explicit,
and we need a tricky full blown resolution with backtracking
when forced to interpolate wildcards to cover a given UICoord
spec against the actual UI topology.

Do we need it?
 * actually not right now
 * but already a complete implementation of the ViewSpec concept
   requires such a resolution
2017-10-21 01:53:13 +02:00
2d5717bfd7 Navigator: continue draft of UI coordinate resolver 2017-10-18 03:40:26 +02:00
7b2c98474f Navigator: initial draft of a UI coordinate resolver
...which in turn will drive the design of the LoactionQuery API
2017-10-16 02:39:22 +02:00
25c4e6b506 UI:Coordinates: Fix indentation 2017-10-13 21:41:13 +02:00
ed76151d14 UI-Coordinates: value representation finished and unit test PASS (#1106) 2017-10-03 00:57:23 +02:00
f23b02b841 UI-Coordinates: implement simple locally decideable predicates 2017-10-02 23:41:03 +02:00
d9555701ac UI-Coordinates: implement a partial "sub path" order 2017-10-02 23:06:23 +02:00
3d8d383ca8 UI-Coordinates: add relational operators for partial order
It is not possible to inherit through boost operators
and defining them explicitly is not that much fuss either.
Plus we avoid the boost include on widely used header
2017-10-02 22:18:00 +02:00
42277c5760 UI-Coordinates: need to spell out all ctors explicitly
the usual drill...
once there is one additional non explicit conversion ctor,
lots of preferred conversion paths are opened under various conditions.

The only remedy is to define all ctors explicitly, instead of letting the
compiler infer them (from the imported base class ctors). Because this way
we're able to indicate a yet-more-preferred initialisation path and thus
prevent the compiler from going the conversion route.

In the actual case, the coordinate Builder is the culprit; obviously
we need smooth implicit conversion from builder expressions, and obviously
we also want to restrict Builder's ctors to be used from UICoord solely.

Unfortunately this misleads the compiler to do implement a simple copy construction
from non const reference by going through the prohibited Builder ctor, or to
instantiate the vararg-ctor inherited from PathArray.

Thus better be explicit and noisy...
2017-10-02 22:17:56 +02:00
5127414773 UI-Coordinates: next steps to cover
- allow tab specification to be elided
- simple comparisons between UI coordinates
- local query predicates
2017-10-02 18:39:18 +02:00
18d1e7a280 UI-Coordinates: polish test and consider next steps
After completing the self-contained UICoord data elements,
the next thing to consider might be how to resolve UI coordinates
against an actual window topology. We need to define a suitable
command-and-query interface in order to build and verify this
intricate resolution process separated from the actual UI code.
2017-10-02 18:11:21 +02:00
5c113b058d UI-Coordinates: better name the local component UIC_PATH 2017-10-02 16:51:45 +02:00
286b1829fe UI-Coordinates: implement path split and appending of multiple components
Unit test passes thus far
2017-10-02 06:49:50 +02:00
835b964e63 UI-Coordinates: implement append / prepend mutation 2017-10-02 06:45:50 +02:00
7826d6dc24 UI-Coordinates: implement low-level data manipulation incl. storage expansion 2017-10-02 06:45:45 +02:00
ee5bc046ae UI-Coordinates: draft how the builder manipulates content 2017-10-02 00:38:22 +02:00
ebed6fff1a UI-Coordinates: draft structure of the builder-API 2017-10-01 23:25:23 +02:00
5097637f0d UI-Coordinates: basic unit test PASS 2017-10-01 21:54:35 +02:00
1079d51c7e UI-Coordinates: implement named component access 2017-10-01 21:37:04 +02:00
ac38f0f963 UI-Coordinates: implement string representation 2017-10-01 21:10:18 +02:00
6322f1bc3c UI-Coordinates: define next steps to cover 2017-10-01 20:04:12 +02:00
372512006f UI-Coordinates: use a recursive implementation layout
this is a more or less arbitrary guess regaring performance requirements
2017-09-25 00:26:19 +02:00
5e1c25aaf5 UI-Coordinates: extract PathArray base abstraction into a library class 2017-09-24 22:50:42 +02:00
4082526ec6 UI-Coordinates: stub basic path element iteration 2017-09-24 21:14:26 +02:00
6073dbfcaf UI-Coordinates: stub basic access operations (WIP) 2017-09-24 17:20:47 +02:00
feb8414016 UI-Coordinates: stub to pass compilation 2017-09-23 02:25:52 +02:00