Commit graph

5035 commits

Author SHA1 Message Date
017c72e74c Function-Tools: unit test for signature trait PASS 2017-03-19 04:09:25 +01:00
58898997d8 Function-Tools: get rid of the old-style FunctionSignature template
...it is now completely redundant, even superseded by the new _Fun
signature trait (which additionally also handles lambdas)
2017-03-19 04:09:24 +01:00
9a0b72e8ca Function-Tools: include the investigation code as unit test
...since there is not any test coverage for this trait, which
turned out to be quite deeply rooted in the system by now and
handles several rather subtle special cases
2017-03-19 02:29:39 +01:00
efad48c831 Function-Tools: new improved function signature trait including lambda support (#994)
move the reworked solution in place,
replacing the existing workarounds, partial solutions and variations
2017-03-19 02:07:18 +01:00
e2c4dec015 Function-Tools: verify coverage of reference and rvalue reference types
the usual suspects...
turns out we need specialisations for those too, even while in most cases
those special reference type won't make it far, and just degrade to function pointer
2017-03-19 01:26:48 +01:00
f8f8cc02d1 Function-Tools: simplify and modernise the main cases
...to not rely on the old-style signature templates anymore,
i.e. get rid of typename FunctionSignature<function<RET(ARGS...)>>

now, most cases just delegate to the "plain signature" case
2017-03-19 00:56:52 +01:00
f19fabfa3a Function-Tools: thus change behaviour for member-pointer-to-function
...to not include the "this" argument anymore
2017-03-19 00:40:10 +01:00
dfea57fd02 Function-Tools: switch tail-call to variadic template
..otherwise unchanged.

NOTE: we need two variants, since lambdas are always const functions,
      while a member pointer to (non)const function would not be captured
      by that overload and thus recurse into the main case and fail there
      with "has no operator()"
2017-03-19 00:27:59 +01:00
0b7559ce9a Function-Tools: include lambdas into the investigation
...and move the tail-call of the template instantiation into try.cpp


This experiment clearly shows the discrepancy now:
 - binding a member pointer directly into a function object will expand the argument list
 - but binding a similar lambda into a function object won't
   (it is not necessary due to the context capture)

The result is that we need to drop support for one of those cases,
and it is clear that the member poiter will be the looser...
2017-03-19 00:19:07 +01:00
c5bff75bc2 Function-Tools: start investigation regarding Signatures and member pointers
It is not clear what would be the 'right' way to handle a member pointer to function
within the function-trait _Fun. The existing implementation choose to inject
an additional parameter for the enclosing class ("this"), which seems to collide
with the intention to use this overload with the "decltype trick" to integrate
support for lambdas.

As it turns out, this specific code path of the existing _Fun trait was not
yet used, fortunately, so we're free to search for the proper design here...
2017-03-18 23:31:10 +01:00
4ff07b62f1 Functor-Tools: reshape generic function signature trait to integrate Lambdas (#994)
As a first step towards a gradual rework of our function metaprogramming helpers,
this change prepends a generic case for all kinds of functors to our existing
solution, which up to now was entirely based on explicit specialisations.

C++11 supplied the new language construct 'decltype(EXPR)', which allows us
to capture any class with an function operator, which also includes the Lambdas.

The solution was proposed 2011 on StackOverflow
http://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda/7943765#7943765

We used it already with success within our TreeMutator.
But obviously the goal should be to unite all the function trait / metaprogramming helpers,
which unfortunately is a more expensive undertaking, since it also involves
to get rid of the explicit specialisations and retrofit our Types<XXX...> helper
to rely on variadic templates rather than on loki-style typelists.


This first step here is rather conservative, since we'll still rely on our
explicit specialisations in most cases. Only the Lambdas will go through the
new, generic case, and from there invoke the specialisation for member functions.
The latter need to be rectified as well, which is subject of the next changeset...
2017-03-18 22:06:44 +01:00
afadc35eab WIP: draft command binding by lambda...
as it stands, this does not work, since lambdas are passed by-value,
while function references can only be passed by explicit reference,
otherwise they'll degrade to a function pointer. And std::function
requires a plain function signature as type argument, not the type
of a function pointer (which doesn't mean you can't construct a
std::function from a FP, indeed there is an explicit overload for
that).
2017-03-18 19:02:41 +01:00
e9948084fc Commands: integrate inline command definition by lambda
...this was the problematic part of the whole design attempted here,
and seemingly it works like a charm!
2017-03-18 17:56:41 +01:00
180b1224e7 Commands: implement invocation of enqueued command definitions 2017-03-18 05:28:56 +01:00
d044abe3c7 Commands: implement the registration queue for command definitions 2017-03-18 04:40:16 +01:00
29ce5b9c69 Commands: define interface for installing a command definition
The idea is to assign a lambda, which will be enqueued by side-effect.
implementation is just stubbed.
2017-03-18 03:52:18 +01:00
833193342f Commands: define basic properties of unbound CommandSetup 2017-03-18 03:20:05 +01:00
4648703952 Commands: new test for shaping the CommandSetup helper 2017-03-18 02:27:11 +01:00
b865acf758 Commands: decide about the basic concept how commands are to be defined (#215)
The point in question is how to manage these definitions in practice,
since we're about to create a huge lot of them eventually. The solution
attempted here is heavily inspired by the boost-test framework
2017-03-18 01:55:45 +01:00
c251f9c2a9 Commands: establish location for defining commands 2017-03-17 21:07:12 +01:00
ada40609f5 more planning of command invocation structure 2017-03-17 04:09:44 +01:00
cfe9cc96f6 planning and analysis regarding command invocation 2017-03-15 04:37:06 +01:00
ff42530f25 push on the topic of global action definitions (#1085)
...because this topic serves as a vehicle to elaborate various core concepts
of the UI backbone, especially how to access, bind and invoke Proc-Layer commands
2017-03-14 04:30:02 +01:00
57a336ab49 more planning with respect to UI/Session command access (#1087) 2017-03-11 02:07:52 +01:00
789246fc3a draft a concept for command instantiation (#1070) 2017-03-08 04:25:33 +01:00
2f538f5f95 continue analysis regarding command invocation (#1070)
...turns out to be a nasty subject, now we're able to see
in more concrete detail how this interaction needs to be carried out.
Basically this is a blocker for the top-level, since it is obviously
some service in top-level, which ultimately becomes responsible for
orchestrating this activity
2017-03-05 02:53:04 +01:00
4acb9be4d2 Library: singleton / lib::Depend should be rewritten eventually (#1086) 2017-03-05 01:01:08 +01:00
c068779a80 command-invocation: use case analysis 2017-03-03 23:59:22 +01:00
40eba94917 planning: next steps towards command invocation (#1070) 2017-03-03 19:42:53 +01:00
41ea59176c UI-top-level: include global help controller ("wizzard") 2017-03-02 23:49:23 +01:00
8d27585976 Menu-Actions: add stubs to forward session operations to InteractionDirector 2017-03-02 23:08:01 +01:00
d37fa89a5e reorder actions in the file menu
- we do not need an "open" action especially for projects
- a generic "open" for any will suffice, depending on the context
2017-03-02 22:15:12 +01:00
36024e0786 fail UI when main menu is misconfigured
...there is no point in running an obviously misconfigured application.
2017-03-02 21:49:13 +01:00
02d8744f25 UI-top-level: Considerations regarding control structure (#1085) 2017-03-02 18:01:11 +01:00
b4e0f6bf40 Doxygen: fill in the last missing file level comments for plain-C tests
now each and every source file should be marked with a @file doxygen comment
2017-02-22 03:46:23 +01:00
155bf95ce5 Doxygen: magically insert a reference to the test class
this bit of Sed magic relies on the fact that we happen to write
the almost correct class name of a test into the header comment.

HOWTO:
for F in $(find tests -type f \( -name '*.cpp' \)  -exec egrep -q '§§TODO§§' {} \; -print);
  do sed -r -i -e'
    2          {h;x;s/\s+(.+)\(Test\).*$/\\ref \1_test/;x};
    /§§TODO§§/ {s/§§TODO§§//;G;s/\n//}'
    $F;
done
2017-02-22 03:17:18 +01:00
42d97f6cf6 Doxygen: supply missing file level comments for test support helpers 2017-02-22 01:58:49 +01:00
24b3bec4be Doxygen: prepare all unit tests for inclusion in the documentation
Doxygen will only process files with a @file documentation comment.
Up to now, none of our test code has such a comment, preventing the
cross-links to unit tests from working.

This is unfortunate, since unit tests, and even the code comments there,
can be considered as the most useful form of technical documentation.
Thus I'll start an initiative to fill in those missing comments automatically
2017-02-22 01:54:20 +01:00
198ccff396 UI-top-level: install presentation state recording service (#1081) 2017-02-19 04:46:13 +01:00
60adaa5639 UI-top-level: simplify name and namespace
the (Presentation)StateManager interface and implementation
seems to fit in more into the ctrl package
2017-02-19 04:27:09 +01:00
4f1def6366 UI-top-level: setup wiring of interacton control core components 2017-02-19 03:46:00 +01:00
4784605771 move a using clause down 2017-02-19 03:17:08 +01:00
a1240c8acd UI-top-level: connect the asset managment section to the UI-Bus 2017-02-19 03:02:42 +01:00
cddc5afe41 UI-top-level: establish top-level model and control structure 2017-02-19 02:50:55 +01:00
f1f7b06d90 UI-top-level: introduce new entities for Interaction Control (#979, #1078, #1080)
In fact this also introduces various new concepts and represents
a fundamental decision regarding the organisation of the UI
2017-02-18 02:54:50 +01:00
65cae05333 remove yet another wildcard include 2017-02-18 00:28:31 +01:00
b82b1f4460 UI-top-level: rearrange and split out styling/theming into dedicated class
gradually UiManager turnes into proper shape for that kind of class
2017-02-18 00:28:31 +01:00
3e6b2ae51f UI-top-level: rearrange various file locations
"workspace" is no longer the de-facto backbone of the UI,
rather, we got a global context residing in "ctrl"
2017-02-17 21:16:42 +01:00
d3937261ab detailed analyse regarding focus movements 2017-02-16 21:51:53 +01:00
e40c14606e more generic analysis regarding fundamentals of *interaction control* 2017-02-16 04:01:08 +01:00