%D \module
%D   [       file=prop-lay,
%D        version=2003.04.20,
%D          title=\CONTEXT\ Property Macros,
%D       subtitle=Layers,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\writestatus{loading}{ConTeXt Property Macros / Layers}

%D Highly experimental, will probably change/evolve. Also, quite certainly
%D we will no longer share code between mkii and mkiv.

\unprotect

\let\currentlayerproperty\empty

\def\checklayerproperty
  {\doifelse{\checkedpropertyparameter\v!printable\currentproperty}\v!no
     {\def\printviewerlayer{0}}
     {\def\printviewerlayer{1}}%
   \dodefineviewerlayer
     \currentproperty % tag
     {\checkedpropertyparameter\c!title\currentproperty}%
     {\checkedpropertyparameter\c!state\v!start}% visible or hidden
     {0}% type (1=frozen)
     {\printviewerlayer}}% 1=printable

\def\startlayerproperty
  {\let\currentlayerproperty\currentproperty
   \dostartviewerlayer\currentproperty}

\def\stoplayerproperty
  {\dostopviewerlayer
   \let\currentlayerproperty\previousproperty}

\def\domakelayerpropertylist
  {\iflocation
     \expandafter\domakeviewerlayerlist
   \else
     \expandafter\gobbleoneargument
   \fi}

\setglobalsystemreference \rt!exec \v!HideLayer   {hidelayer}
\setglobalsystemreference \rt!exec \v!VideLayer   {videlayer}
\setglobalsystemreference \rt!exec \v!ToggleLayer {togglelayer}

\setexecutecommandcheck {hidelayer}   \domakelayerpropertylist
\setexecutecommandcheck {videlayer}   \domakelayerpropertylist
\setexecutecommandcheck {togglelayer} \domakelayerpropertylist

% \currentlayerproperty
% \checklayerproperty
% \startlayerproperty
% \stoplayerproperty
% \domakelayerpropertylist

%D \starttext
%D
%D \setuppapersize[S4][S4]
%D \setuplayout[middle]
%D \setupcolors[state=start]
%D \setupinteraction[state=start,color=,contrastcolor=]
%D
%D \defineproperty [L1] [layer] [title=layer 1]
%D \defineproperty [L2] [layer] [title=layer 2]
%D
%D \button{HIDE   L1}[HideLayer{L1}]
%D \button{VIDE   L1}[VideLayer{L1}]
%D \button{TOGGLE L1}[ToggleLayer{L1}]
%D
%D \button{HIDE L2}[HideLayer{L2}]
%D \button{VIDE L2}[VideLayer{L2}]
%D \button{TOGGLE L2}[ToggleLayer{L2}]
%D
%D \noheaderandfooterlines \centerbox{\startoverlay
%D   {\definedfont[Mono at 150pt]%
%D    \startproperty[L1]\red   TEST\stopproperty}
%D   {\definedfont[Mono at 150pt]%
%D    \startproperty[L2]\green TEST\stopproperty}
%D \stopoverlay} \page
%D
%D \noheaderandfooterlines \centerbox{\startoverlay
%D   {\definedfont[Mono at 15pt]%
%D    \goto{\startproperty[L1]\red   TEST\stopproperty}[CloseDocument]}
%D   {\definedfont[Mono at 15pt]%
%D    \goto{\startproperty[L2]\green TEST\stopproperty}[CloseDocument]}
%D \stopoverlay} \page
%D
%D \startproperty[L1]
%D   level 1 \startproperty[L2]level 2 \stopproperty level 1
%D \stopproperty
%D
%D \startproperty[L1]
%D   level 1 \page \startproperty[L2]level 2 \stopproperty level 1
%D \stopproperty
%D
%D \stoptext

%D Handy for tracing:

\def\showlayoutcomponents
  {\let\startlayoutcomponent\dostartlayoutcomponent
   \let\stoplayoutcomponent \dostoplayoutcomponent}

\def\dodefinelayoutcomponent#1#2%
  {\doifelsenothing{#2}%
     {\defineproperty[#1][\s!layer]}%
     {\defineproperty[#1][\s!layer][\c!title=#2]}}

\def\dostartlayoutcomponent#1#2%
  {\doifelseproperty{#1}\donothing{\dodefinelayoutcomponent{#1}{#2}}%
   \startproperty[#1]}

\def\dostoplayoutcomponent
  {\stopproperty}

\let\startlayoutcomponent\gobbletwoarguments
\let\stoplayoutcomponent \relax

\protect \endinput

% \def\remaplayering
%   {\dodoubleargument\doremaplayering}
%
% \def\remaplayering[#1][#2]%
%   {\setvalue{\??lm#1}{#2}}
%
% \def\remappedlayering#1%
%   {\ifcsname\??lm#1\endcsname
%      \@EA\remappedlayering\csname\??lm#1\endcsname\else#1%
%    \fi}
%
% \def\startshowlayering#1#2%
%   {\ifshowlayering
%      \defineproperty[\remappedlayering{#1}][\s!layer][\c!titel=#2]%
%      \startproperty[\remappedlayering{#1}]%
%    \fi}
