Commit graph

5302 commits

Author SHA1 Message Date
240459c550 LocationQuery: implement simple resolution of explicit anchoring by window-ID 2017-10-23 02:16:57 +02:00
2c96fcd164 LocationQuery: draft unit test to cover the query API 2017-10-22 00:44:30 +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
121b13e665 Navigator: analysis indicates to limit mutations
...to limit them to the UI-Coordinates themselves,
while declining the possibility to mutate the target environment
through the PathResolver. Better handle changes within the
target environment by dedicated API calls on the target elements,
instead of creating some kind of "universal structure"
2017-10-16 01:28:49 +02:00
2b1c9370b8 Navigator: analysis continued.... 2017-10-15 00:55:06 +02:00
cbd58662ba Navigator: start investigation of requirements (#1107, #1108, #1109) 2017-10-14 02:15:39 +02:00
25c4e6b506 UI:Coordinates: Fix indentation 2017-10-13 21:41:13 +02:00
322467159f DOC: Considerations and Definitions regarding »Interaction Control«
..this collection of ideas, terms and conclusions has been shaped
since some time within the TiddlyWiki. Since I've now started even
some supporting implementation regarding these concepts, its time
to publish them in the design documentation section of the Website
2017-10-09 04:00:07 +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
3a8f639a12 UI-Coordinates: implement reverse lookup 2017-10-01 20:12:45 +02:00
6322f1bc3c UI-Coordinates: define next steps to cover 2017-10-01 20:04:12 +02:00
8c694b6ec0 UI-Coordinates: PathArray abstraction finished and unit test PASS 2017-10-01 06:08:54 +02:00
ebe74bcb53 UI-Coordinates: add further coverage for various boundary cases 2017-10-01 04:45:19 +02:00
107e9008e5 UI-Coordinates: bugfix to pass unit test thus far
whew!
2017-10-01 03:58:42 +02:00
5dfd135595 Library: remove redundant checks from IterAdapter implementation
Explicitly assuming that those functions are called solely from IterAdapter
and that they are implemented in a typical standard style, we're able to elide
two redundant calls to the checkPoint() function. Since checkPoint typically performs
some non-trivial checks, this has the potential of a significant performance improvement

- we check (and throw ITER_EXHAUST) anyway from operator++, so we know that pos is valid
- the iterate() function ensures checkPoint is invoked right after iterNext,
  and thus the typical standard implementation of iterNext need not do the same
2017-10-01 03:25:33 +02:00
a08fba5880 UI-Coordinates: establish contract 2017-10-01 01:30:53 +02:00
294efb0321 UI-Coordinates: finish iteration control logic 2017-09-30 21:34:55 +02:00
d7dd01ad62 UI-Coordinates: change subscript to expose const& 2017-09-30 20:03:05 +02:00
21e2227d50 UI-Coordinates: simplify copy initialisation
deliberately skip calls to the default ctor, since we're copying anyway
2017-09-30 19:57:13 +02:00
0bef215350 UI-Coordinates: switch internal path array storage to Literal
...since that is what it meant to be.
To allow this chance, I've now added a default ctor to lib::Literal,
defaulting to the Symbol::EMPTY (the interned empty string)
2017-09-30 18:32:08 +02:00
dd45d6110d Library: Literal now default constructible to empty string
The class Literal is used as a thin wrapper to mark the fact that
some string parameter or value is assumed to be given *literally*

For the contract this indicates
- that storage is somewhere
- storage is not owned and managed by Literal
- yet storage guaranteed to exist during the whole lifetime of the program
- Literal can not be altered
- Literal is transparently convertible to const char *


Currently I am in the course of building some path abstraction, and for that
task it makes sense to hold an array of Literals (instead of pointers), just
because it expresses the intent way more clear. I do not see anything in the
above mentioned contract to prohibit a default constructed Literal, with the
empty string being the most obvious choice.

Note: there is the class Symbol, which derives from Literal. Symbol takes
arbitrary strings, but *interns* them into a static symbol table.
2017-09-30 17:45:38 +02:00
1138898989 UI-Coordinates: implement indexed access
...under the assumption that the content is normalised,
which means
- leading NULL is changed to Symbol::EMPTY
- missing elements in the middle are marked as "*"
- trailing NULL in extension storage is handled by adjusting nominal extension size
2017-09-30 02:48:25 +02:00
ab391d3dfa UI-Coordinates: implement size()
...which is the first step towards standard storage handling
2017-09-30 02:17:13 +02:00
9378badf6b UI-Coordinates: integrate the initialisation split
...as developed in during the metaprogramming investigation
2017-09-30 00:46:52 +02:00
a839cac02b UI-Coordinates: memory management for PathArray extension storage 2017-09-29 18:04:28 +02:00
73adcdf2e0 UI-Coordinates: initial draft for PathArray storage
after various fruitless attempts to rely somehow on the array variant of unique_ptr,
I ended up with a hand coded version of an heap allocated array, managed automatically
2017-09-29 15:03:14 +02:00
fcd8882206 Metaprogramming: finish variadic argument picker test 2017-09-29 03:21:47 +02:00
4348cd462c Metaprogramming: extend testcase and remould pickInit to support arbitrary arguments
as it turned out, the solution from yesterday works only with uniform argument lists,
but not with arbitrarily mixed types. Moreover the whole trickery with the
indices was shitty -- better use a predicate decision on template argument level.
This simple solution somehow just didn't occur to me...
2017-09-29 02:35:15 +02:00
636ab6e608 Metaprogramming: integrate the new facilities into the library 2017-09-29 00:51:13 +02:00
7296e60731 Metaprogramming: draft test for the new argument picker (WIP) 2017-09-28 16:28:15 +02:00
b5af8dbb51 Investigation: cleaner solution for default initialisation
Handle corner cases within the front-end functions,
either by static assert or direct branching;
keeps the variadic implementation template clean
2017-09-28 04:51:25 +02:00