From 22c1a1d189eb71bdfb31724079c2514f28fc75a1 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 8 Apr 2017 16:24:36 +0200 Subject: [PATCH] Commands: rename some of the planned components for command access ...to make the names more handy --- doc/devel/uml/Command-ui-access.png | Bin 23223 -> 23081 bytes .../{cmd-accessor.cpp => cmd-access.cpp} | 8 +++--- .../{cmd-accessor.hpp => cmd-access.hpp} | 22 +++++++-------- ...tate-manager.cpp => interaction-state.cpp} | 6 ++-- ...tate-manager.hpp => interaction-state.hpp} | 12 ++++---- src/gui/interact/invocation-trail.hpp | 7 +++-- src/proc/cmd.hpp | 2 +- src/proc/cmd/session-cmd.cpp | 2 +- src/proc/control/command-instance-manager.hpp | 4 +-- src/proc/control/command-setup.hpp | 2 +- .../control/session-command-function-test.cpp | 3 +- wiki/renderengine.html | 26 +++++++++--------- wiki/thinkPad.ichthyo.mm | 6 ++++ 13 files changed, 54 insertions(+), 46 deletions(-) rename src/gui/interact/{cmd-accessor.cpp => cmd-access.cpp} (88%) rename src/gui/interact/{cmd-accessor.hpp => cmd-access.hpp} (78%) rename src/gui/interact/{interaction-state-manager.cpp => interaction-state.cpp} (88%) rename src/gui/interact/{interaction-state-manager.hpp => interaction-state.hpp} (84%) diff --git a/doc/devel/uml/Command-ui-access.png b/doc/devel/uml/Command-ui-access.png index 5cb4ac0174436cab261e72087322254b8404e9bc..a3f2d8cce71de953d7f74925675ef54f222ba265 100644 GIT binary patch delta 20040 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 bvGX`f@8(9G+ZecNAtgnyb;g(29J%;6P|bim delta 20132 zcmZsB1ymGo-}VAZN|$t}gmm}PB_Z7*T@n()Ah|RW(jeU+4bmYf-Q6WfN;lu|f1c<4 z-uHXIbN0;Ho!OnacjmsY-xa^&TDXQfxL8^^fzNc5zP zTt}W)YKyfxj(drm3nP+upUNzc?CQI+Hmq7#?g^r%szd2mGt}L zj#uX49#z6h-*AiAJxfB0_6*WV(#uw(54)FD&Db}M)K)7s7rRl; ziwmi3eTQYYCHKSCd#&RzIBzXZ=2HR=3JV z>M7goMvi_(^Tvg5x?^?EP6NZ@^6hT7Z#mAx_HSi{$rz!wAc8L_i3Z9i1fFy4l|PnF z>wVgGnXQbXRlWN6FcA5TvGzPf6z4>Kj_EsLOBl-PX99^5q+m6lxe`oX<) zwG2?4W=p6@Xcf+R5I_|ZC@=4BZ(&2b6?n?YftY%f?%!;1RL-~-{yih zt80GTu9LcyZ5GzNr^unO=*Ztp;tE|1ij`M67vx)EI`o@ncx-u58whC!Eu z{!d|#0{S_gIyX~(xifbGat_(k1V+ERlQd7{eCVh7#8Z=bn8HdwW;Ty|&ShvhVYM z79138`Z7G0EoYWI#3tua7&6^Xm;Zz?>Wuk~n*DdX7&n6(D zL5jaqUVZpya!hn2p{0MoMSn^;n@r^(lU2P}Dz#Vjc3fOdI;RZchKDHGWoEN+%B}gb zQuyQB8dsTOAIn3ZWxx13y5%%Jb5%m-f)2_KkM}z1p6nw52xyyvO|@>; z$_-YhE>{BSGe>lSVpe5&--309^Mv?3_SR^*P-aX%u~pVP=-3g=gsGuTWejcA4KCD= zv|jECkC@|3e)-TZ;FtTR@|D~V6dK6)rjaVyd1Uk>Ee}D{e1mY3jW^}%$Mb33;j_Y%--P|X%lnVFI zAd2g)53o(KoJ34I=2(8Ark0#xUV%)17$3pceL!y2@CMfxPj!uvAsXLTou^U>U+w0a zR+cCh1J(ZQb%^5HS;ChiD{?WV5|`3W=CO-rV2Lx*181Kr;cDpZ-IWT1DYtos%S#9~ zzZfEXxU-_@wWROZ`q>{!E%MaI2#w?sC%U>&xx(e`*#FX`jwdwXuErSNe0;S-aE z=D80u>!sB8p1^#8>c^LE+zR$@NR^Qft%QM!@lI2LKXdUho|u~6uL@&qyXMS&P)$D1 zaSJh~OVARZzmRBr&JaS<<`7Gp`>IJ_Y_@}&SACE^V?LXhUD(DNGt6?FxA0|JVo zddW9_BNacm@NY z1;@mXt%>N=y47E0s*m1LW*)<{8Vybsfg-lByF%1q2`^9o6cXakXG7i9aqKU@L(svi zm@=2h7bVN97xNw(v9tb$cxg@>-Y6hEKV;d}`o!4kjWE}4b2Ymg;E+9m(B6=86t00Q1jT$ZwU zSg!&;nNh^23t?JKI;jOj3IX+y55L2FjysVBKNJbUlcJ5qYL{b;@gu*OrJ#UUjdzXj zf8md)6eQA5)j>H)I3@IsU|ys2%{#(Ya|~GlkAnWKuv}CpiyNKq@W)8jpZcU<0+%_D z4RQ^Q&jb^rEcz+6LRCIRMGuxJMB`h=iUJW^(`8=aUsBb^dgXH?Kc@vUNKtB4@vwDd zRLu})p2SHP(XrQk!Jr&hOC*Y^?lJvBMf8Ko=R-rB`d7RXH|b2qkhNGfkqp^*@t0cX z2&OJu>Vn-^ILGUg(^Q10H0;HRa=-(58HO%}{^MVb?IY2PEHTT6hjic};rg@>Cs>6l zCcrUyl&_?OT5y!gldQ+2hQWt9Upes(LLn;`gO zIyO_4CUGxv@A@J;(dv!-(b{>UACZZ+szhGZ#EI881q2U&n`3{d9>uF5^TBz?haf8; zVPKH0VY&^)&mfy4bP8z3i=a@TMw<)utG`29=@W>5hvEl#@)e*EQ*P&$v0`BgSCd1- zQgW1TB9LOzpyYhJ8;DK#_&xlj*bQ5h{oM$1`j{rdw#Yg_6-?A0rlBg?QYm1YI^(&G=9AP0~cmMC31N#`PsKz zWw#sq1wNH{9W*|GP_0VNEk$1-X1K0}g?uOcyI`YQ76lsnxw>x1GKvx&Qg!n(95VjWVhti+9CJ{go}@SEJ+z@HT2;-31kcO0%tMey>$ z6NtEy@;hcdCuMnmAf`|+Is{@Ifn&uI34oA0AJ^;K0A4zohxJfyEc?!p5 zA>+dnnTK(uS#rYSh5pa220Wz(Vi~0QRum zA*VOlMKl?p6^SR#+8X`yayk0iFMpXia5c@~>&#uffMM0HiDlyjcR;5b{E;*V;27M2 zs~LpAwpeqF=Sd>7D<8|ro@-Ws*%lOizwxMT0lAF%Wttr()xxWHi>6x z=Ov5OZU9wh_sq~*FvD}?XW}aQ6=dv4B#=J~#haDI}nR2Ev#_s41(MdmbG;C;W-sm`c`Ea!2f{mqD_x#kVE44D!7})@o9En5bv!TFm z{UY`0MH<9pz7g-GGTyqo6Ov0{p3%A+p0iiO(OCnZ%}m&WUxwZ#;c-hxOv||2Nihuf zg-!_FsPkT{ZH~OrI8r!nYfUr#DF!<~>s(GddN8^TA3y%!#7cgJ_PJ?{mz<&q>nm|u z%+;?F@*l157<=80AfAnIONWdrfi`rt*$NG%He7nK11Hj~&p6b28AT{nISI@4xK8{{ zV(O^@-;^pg4m~K5(v($)Y&;n^P8{+sN?8bX%W=nrBewvnqHP_T)LtE|Bm=uI$~nkx zzSw#iIoK=@q1Av3mdf~3)MF8LNJc^(8SNAk-(!id&ZQ_3siLa&`Ln#BST5RdPT}s` zAajo*>5QCxZ1K5b8;W~cmEX_bM8H^eY)qvA)gI!XU-sXsR(Jqo^=U`hIYv1 z0VAiq43_MT`KT;Czi-HEO9^GEIfPSkY`b<@4mI|I$)%#pxODY5{;>K9(!h9Ks z74y829&1wI>&@O^RR%z%{OkHm6QyK_F{bBVl7l$6=V4mVhz@&CycV?n0tKn{d!UzQ zlmss%LCg7b2;bE~c<9Tn-0GE;@t3DmBSt(!9FZj8-O zRvB_Twow3a8dVA>GH{*0>i$KLnFGL~S-n>Y{EoQLxm!JqT%O|~#D71^#bAz8KOfKk z0xPUn{H^~T{(4LE=|vEfovH+f4Q^Kt539N66A{Xd-u0oGgteAQkWhM_B`PNN*7(H7 z0=raL{G|b1PUTREz^)rXmQxXP$woCxuN1;3(L!tN)y{;90=+&{hBEghgF~R2AH}&s zB-hyapdR0d)<%2N{!ovvr~d^@LKbUMw@aO+Ywc&rhSE3}>Qv^U;G&YjnrH7O_;UFkq-KNV+NGHX z>~KsO=IpKJCE;-r^>{~dRS2+6s&ol^D`q~y4I$DR7v}odxJ|?Mum|4Qb#la9at;0cX}NcTVj>yC+BJL4Q-}x+;D?CJdAQ7|CD5kK+qFIW4z| z6bxX}GCM-a%$^!)yyTG!=My;VpI7-|p1V~Sam4u?{yoh_d4l3Ii{U);%kgE+>UmDi zFu|pHD4EpNc1@6|771s8(VHDPT8Ge$XCm8P??08~p}1so(#*LLlLA=#6#^^p{I>S7 zih<0dCMG{H)+5~7VRwD(H2B%clUPW8UwJ6o;1)>_^dK~s7g%?Y0{flG@Q%L5@FAH; zL-?X%5{Kmcm;8K~C*dcl$zH`a{IM6*o9PPQgMbdH>^J&SH^Sl9C1qj(`KQuQtmHQ%C&iDp~=_qwvm~uE5$D5Z(jD$DAe-rlxB9E=hiko(`wY#Bet8WiR+xOv0#%e z@v-|Rm9BO9&T|u1Q{*OToT!k;=e20$^A0ZJg{5Uwz-Q;$Ae2$+Mx@YD(MCJD$l-8m zz15~Zxm!tpxF~VpHi4{8f@J69rI=i@6~?vc&Sl}y^Vo1lhIV}p2$gXu?$;f2YIp3RT1ay=l{(*ia|m0lO-$S`W_v3QyG5t-U@Cqjd; zZ<`Tf^DX-G8B5%#gDh^n#QxvN0(ux??PC(#RalP&4HMP?yRtWUujRQ-NS6Hbe@k?| z4b z-#26n`u|k$0<4G+kdG{}5OIOzL{b;(yq}Psg2Q^Xo!2iems35a{VvGLfCDj>1To|= zOm`hNxekO=v?HWM+}%Vjma!Ze|LmfcnR9xsW&0DN&IN%LK(K!r3Ge-kO0$RiSn zLlXC}cA*(roL~)(BW9$0+v}x=?&c(sN`pr>PJ9%NN4EY7sTVj9JRMURzwz*3Yh4y0 zujITCTNqI_w0*ebbvH4+us&s$cjP`JC@#rOS9$?c}?D9(GOF)o+VPMvpx+ey~;PXuR zNvc-7jEhh$gcOI>ad++0znry!@6fG{UUBu`D0g4+kOuZLObCP(hREdRapB8~$PGg> z#;js&B=#ABHogR`EREM~p@AnIiCg{-Z6ylVZ3RL+6VFU0B;1Pjp81&Z<80XY3Xgq9rjIKmnGa+1c7j!E-4FfT6MW2e~m{|M&=TveO0+ z7NO$AR{Ceh_6XThmY~E3F?c1UMx_)4zm7EwI4{c?88W@_=VkdPfmQq+e}vyM0_@ubF#3*00am@f=@$BJOoVfdr#UzL zSkr&99nLSsIDpI9n+XDen0jmK#9I=RDpa9&yheWJQ}7eH19zcfln{BSgr?{G!IF=T=F~FM@ycQ{k(J3yiDQfmZfW5bPdE-KwGJ8i z9&Qo2Ipt!Nb8Gs{mOPKayz0T)jbGI-Sf!OXr19WojL&u6Eh7u1cv4}%K?rg|G=0|& zlr8&ized1#y=u^wWkpW@Ze-c6vh`j0xx|9qfe06T^ae5n(h&>`lcU7?O4&iSs)W%I zWkxbD+=!6g4cCZC6%O75tcCyICVotp0Dx4X|M%mER4$5qFSnxDHJm;ml^)l;fI!Gz zF2Ht75~tx}pv9B0A2}r@ETIY|_%dFy*+%dXH#d7bHCpR-{xL?&jA2R~6#Z0qY{V4&zI#XRXsAx+`V#^%!M%uBNFS0Zfo;@oV^ZUU1(6meD$wmy#d|$_cIC9v zro^21tyL}`CsCo(Wqy3TGCt1C=j`}kzRp!$-CkO{;5x*fOcYy8%-w!}l*>wVgWo|~ zdV4U%1rF|kGbI#=iAl2TS1*QU$GW7~=h2$~nH)20_BdQ#`fziWTwQIbb^0#THF|_@)TsoYF)E3avQ4fIyg(2ZJe-)N&O4gKb< za$IZ<|BYH=Wq#~(L!sO0a$iKL3d{bFyuFb`O3=Bvqr5_Px}2*kY^~F2#`?FK7C4{v z4s5)jAA8H*Jya0c(TjcThdIC;ASSYAx6$yyl4}V}xrd83lsRd9rIwtS_34klXRD~G zQ~6z}e7tvnQ5(PRU-7c2&)})&TLgXwVtN=fsaMR*V5_N(SyBtW&x?h{#Z&w}j!i!L zteSFpfB73`y+506Zx$<3H>jUm&StG z2T7XdvMpPzGrzK%oj5+Gq@HhbZBqI0wN13LML2#1h&|fUP@g8mH|!rVZnYXwpyniw zg5nWOXTiqD-xCu@YH4f-hg?wQNQDmL;iXgONCe*SCi3-KaN^?|rgB-aVz*xC#cg5# z{r5vjxug6B2jRat=Y62yW$$CtWi`4BYG{Zv1lIWvrb>khRAc^LYS%bsl$(q4{dAcJ zCMPZG=Ho}G^nd@EA`1%}^Yi;tpuUaE#I{UKNSLk8G-*2$6cnnUz?s@lqG-%QP&}3S z`7>4Xhf3=|u-R_g?W5GH?NjsXj&#~>TDY%K&q(_~%WL|?fumo4H95=4l_<9*_jvB$ zVl>Aa1Ckv73<43iM}R=A`O2GAag0%c=MYE*!Gd#Zx#8L*9AuTehu8Y?_}$0|;_5IS z_|-t4k?1kxcKK%zN94;ma21=8Kp_6+-M-*^|JjgR+65vNG6-ZI+4Y|th);X}vl;bn zRKp9?CoqU#*Cm3-TKM-{0-%FFx8=EqE)oO;3DO^( z%oW$8JpKC4-@>IN;J|@2%6UqeAV7L}!D03AIahTfxM0{_24p`}(H$_Lc$bvl77o z`TOhHjt(0lBE1xrFR)0NcqM|p1At5xI#aRq@$N6ah>yzd^ubskg|W-Mcj9%(^0Eu3 zE=!-w9sS3Ehllvy=!_2+_8i!T?M6Iy)6JhgO>CZ2wYB|Krb|n`NgT7*t79f}B7&GK zA`W?-4h`L20#>gV1>APd>?)NRa=w4R2|=W}4TX(QBwg&!S@yt^wukhM-vWtrNiq0g zL2uvc+S~J)_v)|s`IsFoYc?&?2znnLEQDkTCDovFaV~pqeqMuGw4pRhbX#-#UK*;o zoh@!|zJ0uz5qmf2Y4`YWG*gjrzZs9|<0+S_;Bk4_P1@&se=b3t%I8G9ECl(6w#cx1 zCgX)hyrei@Jki~LS8ci4Q3$XZEf#3`;CvRxqQgNUAwGE?z?l6;$N2FeLkRu-wN9|4 z76@2CqQl{?Kt;XQ$UCMenfREPnJAK#Z|LCHb?&%UHse(<{Ej=LUupNB-w5W8ZEock zRSch;5F2Z_HdnAEJ+Ci_V`Z=WxcaG2HEa1L&dFf8{w)gzE9#{@JRttcL}mPW>&>4@ zhAe~YE;QWuxaHdEAMtOljE|a?woN%*5)*m$Z9F}(un!iS3<`zb7-wl4W&U!qKF={! z=)cLyQM|q`z1-K8hsxxBhIMt_;Hv5AVUV!%ChphT41iT2F5ztZ?mEnK<7tYg)_%OM zp^*(KGe{A(*NJ5X_D0h9l=Icy4uwA%`Yg0~t)1<1{Q6Z2K3g35S_PiA>mfoGIrUPJ z?(QrKu?MHSuAwwSdU_dly|ZE{PPwLSssb;w?PwgGYBUL-{oi$l<6b!bR`4(F>JH0) zAI*MRj;|d-F!%=%{~~fVfS>q zyuo+j?vBD;uzNK7epVxQjN7b7Q6Zn6?T`nL1;UT^kv*)m$z72UpXYayu>zPA>E;r7 zT-g8Z3@o%?Y5BTJi!Ci3TwPeIZFRS2Eav`)_WrP$I)U|RhFq4xhE!E7qcGkYNzO+ zXH(iMAwj~q>OauQh4+rvY5-_L(&YvWo4rbP?3YE=?_tAwgMbE1$bO*jdMH96kGeEz z;T8p0t?6^Z!<9~h_erGS;qNXFmFcLfbZVW~HlUNGNfdoHbB_aGM9v>>*>Th!A6n}{Qe#EeXS3pSR0%yBSB&?2^c~3%TG2DC2E5M|p=S;4%8!T5 z=g`RpC)MbQo9p5*>+!swhRw@mp z%qkf-iLmLi>r~h>;BEIs?||tutenm3sMU>Hug-QM5VK7VYHtcsE1306#bXAyjf-R# zb*Ul*@|pofE0TmS68434K~ux^b}$94vZXp2=6AKW0_C=!^>6igl!pHOOM^kmuL8vs zBb9+7c9T(m_xwArZR|T>woqrsH%G>}P|wQo@_qZ28C)OWQmB&gTbnmatkyu?ctso< z9GvzdWbx*vrN&B(CIn#3s^JscSNZ20Vx3$=VOD98uf@*d~wGGasp{y5clvVt#{2V9B
+S)-1 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 //#include @@ -53,7 +53,7 @@ namespace interact { - CmdAccessor::~CmdAccessor() { } // Emit dtors of embedded objects here... + CmdAccess::~CmdAccess() { } // Emit dtors of embedded objects here... diff --git a/src/gui/interact/cmd-accessor.hpp b/src/gui/interact/cmd-access.hpp similarity index 78% rename from src/gui/interact/cmd-accessor.hpp rename to src/gui/interact/cmd-access.hpp index e37edb4d8..b46cafa48 100644 --- a/src/gui/interact/cmd-accessor.hpp +++ b/src/gui/interact/cmd-access.hpp @@ -21,31 +21,31 @@ */ -/** @file cmd-accessor.hpp +/** @file cmd-access.hpp ** Abstraction: access to command invocation for UI-Elements. - ** The interact::CmdAccessor front-end is used by any UI element about to invoke and dispatch + ** The interact::CmdAccess front-end is used by any UI element about to invoke and dispatch ** commands into the session via ProcDispatcher. To invoke a command, typically it is necessary ** to prepare a _command instance_ and to pick up and bind _command arguments._ This can be achieved - ** with the help of an intermediary, known as InteractionStateManager. Thus, CmdAccessor allows to - ** discover a specific InteractionStateManager instance, which + ** with the help of an intermediary, known as ["interaction state manager"](\ref InteractionState). + ** Thus, the command accessor allows to discover a specific InteractionState instance, which ** - is responsible for the specific command to be invoked ** - can handle context information related to a specific _control system_ (e.g mouse, keyboard, ** hardware controller, pen) ** - might handle changing contextual state and thus decide if a command can be invoked - ** From the InteractionStateManager, it is possible to retrieve a concrete InvocationTrail for + ** From the InteractionState instance, it is possible to retrieve a concrete InvocationTrail for ** this specific command instance about to be invoked. This InvocationTrail is an embedded command ID ** and can be used, to bind arguments and finally trigger the command invocation. ** ** @todo as of 3/2017 this is a early design draft and WIP-WIP-WIP ** - ** @see TODO___cmd-accessor-test.cpp + ** @see TODO___cmd-access-test.cpp ** @see ////TODO_test usage example ** */ -#ifndef GUI_INTERACT_CMD_ACCESSOR_H -#define GUI_INTERACT_CMD_ACCESSOR_H +#ifndef GUI_INTERACT_CMD_ACCESS_H +#define GUI_INTERACT_CMD_ACCESS_H #include "lib/error.hpp" @@ -70,12 +70,12 @@ namespace interact { * Abstract foundation of UI state tracking components. * @todo write type comment... */ - class CmdAccessor + class CmdAccess : boost::noncopyable { public: - ~CmdAccessor(); ///< @todo do we need a VTable / virtual dtor? + ~CmdAccess(); ///< @todo do we need a VTable / virtual dtor? private: }; @@ -83,4 +83,4 @@ namespace interact { }} // namespace gui::interact -#endif /*GUI_INTERACT_CMD_ACCESSOR_H*/ +#endif /*GUI_INTERACT_CMD_ACCESS_H*/ diff --git a/src/gui/interact/interaction-state-manager.cpp b/src/gui/interact/interaction-state.cpp similarity index 88% rename from src/gui/interact/interaction-state-manager.cpp rename to src/gui/interact/interaction-state.cpp index 3566f9000..427ac6b20 100644 --- a/src/gui/interact/interaction-state-manager.cpp +++ b/src/gui/interact/interaction-state.cpp @@ -1,5 +1,5 @@ /* - InteractionStateManager - facility to watch and guide one aspect of UI interaction + InteractionState - facility to watch and guide one aspect of UI interaction Copyright (C) Lumiera.org 2015, Hermann Vosseler @@ -21,7 +21,7 @@ * *****************************************************/ -/** @file interaction-state-manager.cpp +/** @file interaction-state.cpp ** Common base implementation for UI state tracking components. ** ** @see TODO___abstract-tangible-test.cpp @@ -32,7 +32,7 @@ //#include "lib/util.hpp" //#include "lib/symbol.hpp" //#include "include/logging.h" -#include "gui/interact/interaction-state-manager.hpp" +#include "gui/interact/interaction-state.hpp" //#include //#include diff --git a/src/gui/interact/interaction-state-manager.hpp b/src/gui/interact/interaction-state.hpp similarity index 84% rename from src/gui/interact/interaction-state-manager.hpp rename to src/gui/interact/interaction-state.hpp index 1a1cee969..2c176b2d7 100644 --- a/src/gui/interact/interaction-state-manager.hpp +++ b/src/gui/interact/interaction-state.hpp @@ -1,5 +1,5 @@ /* - INTERACTION-STATE-MANAGER.hpp - facility to watch and guide one aspect of UI interaction + INTERACTION-STATE.hpp - facility to watch and guide one aspect of UI interaction Copyright (C) Lumiera.org 2015, Hermann Vosseler @@ -21,7 +21,7 @@ */ -/** @file interaction-state-manager.hpp +/** @file interaction-state.hpp ** Abstraction: a component to watch, maintain and guide UI state. ** Typically, each such component is focused on one specific aspect ** of complex interface interactions. An example would be a component @@ -34,8 +34,8 @@ */ -#ifndef GUI_INTERACT_INTERACTION_STATE_MANAGER_H -#define GUI_INTERACT_INTERACTION_STATE_MANAGER_H +#ifndef GUI_INTERACT_INTERACTION_STATE_H +#define GUI_INTERACT_INTERACTION_STATE_H #include "lib/error.hpp" @@ -60,7 +60,7 @@ namespace interact { * Abstract foundation of UI state tracking components. * @todo write type comment... */ - class InteractionStateManager + class InteractionState : boost::noncopyable { protected: @@ -73,4 +73,4 @@ namespace interact { }} // namespace gui::interact -#endif /*GUI_INTERACT_INTERACTION_STATE_MANAGER_H*/ +#endif /*GUI_INTERACT_INTERACTION_STATE_H*/ diff --git a/src/gui/interact/invocation-trail.hpp b/src/gui/interact/invocation-trail.hpp index e7a4b9f7f..515190bd7 100644 --- a/src/gui/interact/invocation-trail.hpp +++ b/src/gui/interact/invocation-trail.hpp @@ -68,9 +68,10 @@ namespace interact { * This value object is a tracking handle used within the UI to deal with establishing * a command context, maybe to present the command within a menu or to picking up * actual invocation parameters from the context. - * @remarks typically you don't create an InvocationTrail from scratch; rather - * you'll find it embedded into rules placed into a [InteractionStateManager]. - * The intention is to define it alongside with the command prototype. + * @remarks typically you don't create an InvocationTrail from scratch; rather you'll + * retrieve it through \ref CmdAccess, which basically involves a specific + * ["interaction state manager"](\ref InteractionState) to conduct the invocation. + * @todo as of 4/2017 the concept and usage pattern is not entirely worked out and clear */ class InvocationTrail { diff --git a/src/proc/cmd.hpp b/src/proc/cmd.hpp index e04a24541..cd057be40 100644 --- a/src/proc/cmd.hpp +++ b/src/proc/cmd.hpp @@ -29,7 +29,7 @@ ** ** @see command.hpp ** @see command-def.hpp - ** @see command-accessor.hpp + ** @see cmd-access.hpp ** @see TODO_CommandGuiUsage_test ** */ diff --git a/src/proc/cmd/session-cmd.cpp b/src/proc/cmd/session-cmd.cpp index 9bb6e5020..e368fc108 100644 --- a/src/proc/cmd/session-cmd.cpp +++ b/src/proc/cmd/session-cmd.cpp @@ -28,7 +28,7 @@ ** @see cmd.hpp ** @see command.hpp ** @see command-def.hpp - ** @see command-accessor.hpp + ** @see cmd-access.hpp ** @see TODO_CommandGuiUsage_test ** */ diff --git a/src/proc/control/command-instance-manager.hpp b/src/proc/control/command-instance-manager.hpp index 4788cccb3..c3325d727 100644 --- a/src/proc/control/command-instance-manager.hpp +++ b/src/proc/control/command-instance-manager.hpp @@ -29,7 +29,7 @@ ** be formed during an extended time period, non-deterministically -- since the actual context ** depends on the user interactions. Within the UI, there is a dedicated mechanism to form such ** command invocations similar to forming sentences of a language (with subject, predication and - ** possibly some further objects). The UI manages several InteractionStateManager instances to observe + ** possibly some further objects). The UI manages several InteractionState instances to observe ** and pick up contextual state, finally leading to a complete parametrisation of a command. ** The CommandInstanceManager is a service to support this process; it prepares command instances ** and provides dedicated instance IDs, which can be stored in the UI and later used to retrieve @@ -47,7 +47,7 @@ ** @see command.hpp ** @see command-def.hpp ** @see command-setup.hpp - ** @see command-accessor.hpp + ** @see cmd-access.hpp ** @see CommandInstanceManager_test ** */ diff --git a/src/proc/control/command-setup.hpp b/src/proc/control/command-setup.hpp index 63c6271c8..b1176912b 100644 --- a/src/proc/control/command-setup.hpp +++ b/src/proc/control/command-setup.hpp @@ -41,7 +41,7 @@ ** ** @see command-def.hpp ** @see command.hpp - ** @see command-accessor.hpp + ** @see cmd-access.hpp ** @see CommandSetup_test ** */ diff --git a/tests/core/proc/control/session-command-function-test.cpp b/tests/core/proc/control/session-command-function-test.cpp index 13cec905e..f8745b48f 100644 --- a/tests/core/proc/control/session-command-function-test.cpp +++ b/tests/core/proc/control/session-command-function-test.cpp @@ -228,7 +228,8 @@ namespace test { /** @test start the session loop thread, * similar to what the »session subsystem« does - * @note we are _not_ actually starting the subsystem + * @note we are _not_ actually starting the subsystem itself, + * but we indeed start the _»session loop thread«_ * @see facade.cpp */ void diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 34907b0ea..7b1f04a8b 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -1652,7 +1652,7 @@ Each of these files is specialised to defining a set of thematically related com !command &harr; interaction The User Interface does not just trigger commands -- rather it performs //user interactions.// -An interaction is formed like a sentence of spoken language, which means, there is a process of forming such a sentence, giving rise to [[interaction state|InteractionStateManager]]. In many cases, the actual arguments of a command invocation are to be drawn from the current context. Thus, GuiCommandBinding is a way more elaborate topic, while it builds upon the fundamentals defined here... +An interaction is formed like a sentence of spoken language, which means, there is a process of forming such a sentence, giving rise to [[interaction state|InteractionState]]. In many cases, the actual arguments of a command invocation are to be drawn from the current context. Thus, GuiCommandBinding is a way more elaborate topic, while it builds upon the fundamentals defined here...
@@ -2593,9 +2593,9 @@ The consequence of this approach is that the relations and whereabouts of entiti !!!Abstracted binding definitions This contrastive approach attempts to keep knowledge and definition clustered in a way according to the commands and actions to be performed -- even at the price of some abstractions and indirections. There is no natural and obvious place where to collect those information, and thus we need to create such a location deliberately. This new entity or location to be conceived will serve as a link between user interface and session elements, and it tends to rely on definitions from both realms. * in addition to the command script, here we build a parameter accessor, which is some kind of functor or closure. -* we need to introduce a new abstraction, termed InteractionStateManager. This is deliberately not a single entity, rather some distinct facility in charge for one specific kind of interaction, like gestures being formed by mouse, touch or pen input. +* we need to introduce a new abstraction, termed InteractionState. This is deliberately not a single entity, rather some distinct facility in charge for one specific kind of interaction, like gestures being formed by mouse, touch or pen input. * from the command definition site, we need to send a combination of //rules// and parameter accessors, which together define an invocation path for one specific flavour of a command -* the InteractionStateManager, driven by the state changes he observes, will evaluate those rules and determine the feasibility of specific command invocation paths +* the InteractionState, driven by the state changes he observes, will evaluate those rules and determine the feasibility of specific command invocation paths * he sends the //enablement of a command invocation trail// as a preconfigured binding to the actual //trigger sites,// which in turn allows them to install actual reaction patterns &rarr; InvocationTrail * if finally some button is hit, the local event binding can issue the command right away, as preconfigured in this //enablement binding,// by accessing just any UI-Bus terminal at reach within that context @@ -2617,7 +2617,7 @@ To gain some understanding of the topic, we pose the question "who has to d * the developer of ~Proc-Layer, obviously. The result of that development process is a set of [[command definitions|CommandHandling]], which get installed during start-up of the SessionSubsystem * global menu actions (and keybindings) want to issue a specific command, but possibly also need context information * a widget, button or context-menu binding typically want to trigger a command on some [[tangible element|UI-Element]] (widget or controller), but also needs to prepare the arguments prior to invocation -* some InteractionStateManager observes contextual change and needs to mark possible consequences for invoking a given command +* some [[interaction state manager|InteractionState]] observes contextual change and needs to mark possible consequences for invoking a given command from these use cases, we can derive the //crucial activities for command handling...// ;instance management @@ -2627,25 +2627,25 @@ from these use cases, we can derive the //crucial activities for command handlin ;forming and enrichment of invocation state :interactions might happen in the form of ''gestures'' :consequently, interaction state is picked up from context, during an extended time span prior to the invocation -;access to the right ~InteractionStateManager -:a widget just wants to invoke a command, yet it needs the help of "some" InteractionStateManager for +;access to the right ~InteractionState +:a widget just wants to invoke a command, yet it needs the help of "some" InteractionState for :* creating the command instance, so arguments can be bound :* fill in missing values for the arguments, depending on context !command invocation protocol * at start-up, command definitions are created in Proc, hard wired * ~UI-Elements know the basic ~Command-IDs relevant to their functionality. These are defined in some central header -* when command usage is indicated, some part in the UI queries the {{{CmdAccessor}}} for an InteractionStateManager +* when command usage is indicated, some part in the UI queries the {{{CmdAccess}}} for an InteractionState * the latter in turn retrieves a new command instance ID from the {{{CmdInstanceManager}}} in Proc * and the latter keeps a smart-ptr corresponding to this instance in its internal registration table -* within the UI, a command instance corresponds to a specific invocation trail, and is thus stored within the managing {{{InteractionStateManager}}} -* ~UI-Elements use the services of the InteractionStateManager, either to get arguments directly, or to act as observer of state changes -* when a command is completely parametrised, it can be invoked. The managing {{{InteractionStateManager}}} knows about this +* within the UI, a command instance corresponds to a specific invocation trail, and is thus stored within the managing {{{InteractionState}}} +* ~UI-Elements use the services of {{{CmdAccess}}}, either to get arguments directly, or to act as observer of state changes +* when a command is completely parametrised, it can be invoked. The managing {{{InteractionState}}} knows about this * on invocation, the ID of the instance is sent via UI-Bus to the {{{CmdInstanceManager}}} * which in turn removes the instance handle from its registration table and hands it over into the ProcDispatcher * only the {{{CmdInstanceManager}}} need to know about this actual command instance; there is no global registration [<img[Access to Session Commands from UI|uml/Command-ui-access.png]] -An immediate consequence is that command instances will be formed //per instance// of InteractionStateManager. Each distinct kind of control system has its own instances, which are kept around, until they are ready for invocation. Each invocation "burns" an instance -- on next access, a new instance ID will be allocated, and the next command invocation cycle starts... +An immediate consequence is that command instances will be formed //per instance// of InteractionState. Each distinct kind of control system has its own instances, which are kept around, until they are ready for invocation. Each invocation "burns" an instance -- on next access, a new instance ID will be allocated, and the next command invocation cycle starts... Command instances are like prototypes -- thus each additional level of differentiation will create a clone copy and decorate the basic command ID. Yet this extension process is delegated into multiple stages. Already when a specific InvocationTrail is established, the bare command prototype is specialised, and additionally combined with specific context access rules and maybe even a accessor to retrieve some argument value. The {{{CmdInstanceManager}}} internally maintains and tracks a prepared anonymous command instance within a local registration table. The //smart-handle//-nature of command instance is enough to keep concurrently existing instances apart; instances might be around for an extended period, because commands are enqueued with the ProcDispatcher. @@ -3402,11 +3402,11 @@ The InteractionDirector is part of the model, and thus we have to distinguish be !Collaborations
-
+
A facility within the GUI to// track and manage one specific aspect of interaction state.//
 In a more elaborate UI, as can be expected for such a task like editing, there are interactions beyond "point and shot". For a fluid and natural interaction it is vital to build and exploit an operation context, so to guide and specify the ongoing operations. Interaction events can not be treated in isolation, but rather in spatial and temporal clusters known as ''gestures''. A good example is the intention to trim or roll an edit. Here the user has some clips in mind, which happen to be located in immediate succession, and the kind of adjustment has to be determined from the way the user approaches the junction point. To deal with such an interaction pattern, we need to track a possible future interpretation of the user's actions as a hypothesis, to be confirmed and executed when all pieces fall into place.
 
-An InteractionStateManager is a global component, but rarely addressed directly. Rather this tracking component attaches and taps into various information sources to observe some aspects of global state. Moreover, it is outfitted with a set of rules, leading to enablement of some [[command invocation trail|InvocationTrail]]. These enablements or disablements are forwarded to the actual trigger points, which are those UI elements to witness the completion of a gesture.
+An InteractionState is a global component, but often not addressed directly. To deal with context dependent activation, this tracking component attaches and taps into various information sources to observe some aspects of global state. Moreover, it is outfitted with a set of rules, leading to enablement of some [[command invocation trail|InvocationTrail]]. These enablements or disablements are forwarded to the actual trigger points, which are those UI elements to witness the completion of a gesture.
 
 &rarr; CommandInvocationAnalysis
 &rarr; InteractionControl
diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm
index a955c727d..6a8c818bc 100644
--- a/wiki/thinkPad.ichthyo.mm
+++ b/wiki/thinkPad.ichthyo.mm
@@ -11793,6 +11793,12 @@
 
 
 
+
+
+
+
+
+