#ifndef VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSEVENTRECEIVER
#define VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSEVENTRECEIVER
#include "../NativeWindow/GuiNativeWindow.h"
namespace
{
namespace
{
namespace
{
namespace
{
class
;
}
}
}
}
namespace
{
namespace
{
namespace
{
class
;
class
:
public
virtual
,
public
<
>
{
public
:
class
{
public
:
<
>
;
};
virtual
bool
() =
0
;
};
template
<
typename
>
class
:
public
,
public
<
<
>>
{
public
:
typedef
void
(
)(
*,
&);
typedef
<
>
;
typedef
;
class
:
public
,
public
{
public
:
bool
=
true
;
;
(
const
&
)
:handler(
)
{
}
bool
()
override
{
return
;
}
void
(
*
,
&
)
{
,
);
}
};
protected
:
struct
{
<
>
;
<
>
;
};
*
;
<
>
;
bool
(
<
>
)
{
<
>*
= &
;
while
(*
currentHandler
)
{
if
((*
currentHandler
)
)
{
return
false
;
}
else
{
currentHandler
= &(*
currentHandler
)
;
}
}
(*
currentHandler
)
new
;
(*
currentHandler
)
;
return
true
;
}
public
:
(
*
=
0
)
:sender(
)
{
}
()
{
}
*
()
{
return
;
}
void
(
*
)
{
=
;
}
template
<
typename
,
typename
>
<
>
(
*
,
::*
)
{
auto
=
<
>(
(
,
));
(
handler
);
return
handler
;
}
<
>
(
*
)
{
auto
=
<
>(
(
));
(
handler
);
return
handler
;
}
<
>
(
const
&
)
{
auto
=
<
>(
);
(
handler
);
return
handler
;
}
template
<
typename
>
<
>
(
const
&
)
{
auto
=
<
>(
(
));
(
handler
);
return
handler
;
}
bool
(
<
>
)
{
auto
=
.
<
>();
if
(!
typedHandler
)
{
return
false
;
}
auto
=&
;
while
(*
currentHandler
)
{
if
((*
currentHandler
)
typedHandler
)
{
(*
currentHandler
)
=
false
;
auto
=(*
currentHandler
)
;
(*
currentHandler
)
next
;
return
true
;
}
else
{
currentHandler
=&(*
currentHandler
)
;
}
}
return
false
;
}
void
(
&
,
*
)
{
auto
=&
;
while
(*
currentHandler
)
{
(*
currentHandler
)
(
?
:
,
);
currentHandler
=&(*
currentHandler
)
;
}
}
void
(
&
)
{
(
,
0
);
}
void
(
const
&
)
{
auto
=
;
(
t
,
0
);
}
};
struct
:
public
,
public
<
>
{
*
;
*
;
bool
;
()
:compositionSource(
0
)
,eventSource(
0
)
,handled(
false
)
{
}
(
*
)
:compositionSource(
)
,eventSource(
)
,handled(
false
)
{
}
()
{
();
}
};
struct
:
public
,
public
<
>
{
bool
;
()
:cancel(
false
)
{
}
(
*
)
:
(
)
,cancel(
false
)
{
}
};
struct
:
public
,
public
,
public
<
>
{
()
{
}
(
*
)
:
(
)
{
}
};
struct
:
public
,
public
,
public
<
>
{
()
{
}
(
*
)
:
(
)
{
}
};
struct
:
public
,
public
,
public
<
>
{
()
{
}
(
*
)
:
(
)
{
}
};
enum
class
{
,
,
,
};
struct
GuiControlSignalEventArgs
:
public
,
public
<
GuiControlSignalEventArgs
>
{
=
::
;
GuiControlSignalEventArgs
()
{
}
GuiControlSignalEventArgs
(
*
)
:
(
)
{
}
};
typedef
<
>
;
typedef
<
>
;
typedef
<
>
;
typedef
<
>
;
typedef
<
>
;
typedef
<
GuiControlSignalEventArgs
>
;
struct
:
public
,
public
<
>
{
;
()
:itemIndex(-
1
)
{
}
(
*
)
:
(
)
,itemIndex(-
1
)
{
}
};
struct
:
public
,
public
<
>
{
;
()
:itemIndex(-
1
)
{
}
(
*
)
:
(
)
,itemIndex(-
1
)
{
}
};
typedef
<
>
;
typedef
<
>
;
struct
:
public
,
public
<
>
{
controls
::
tree
::
*
;
()
:node(
0
)
{
}
(
*
)
:
(
)
,node(
0
)
{
}
};
struct
:
public
,
public
<
>
{
controls
::
tree
::
*
;
()
:node(
0
)
{
}
(
*
)
:
(
)
,node(
0
)
{
}
};
typedef
<
>
;
typedef
<
>
;
class
:
public
{
protected
:
*
;
public
:
(
*
);
~
GuiGraphicsEventReceiver
();
*
();
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
};
}
}
namespace
{
template
<
typename
>
struct
<
presentation
::
compositions
::
<
>>
{
using
=
presentation
::
compositions
::
<
>;
using
=
presentation
::
compositions
::
;
using
=
presentation
::
compositions
::
;
using
=
<
void
(
*,
*)>;
class
:
public
,
public
reflection
::
description
::
{
public
:
<
>
;
(
<
>
)
:handler(
)
{
}
bool
()
override
{
return
();
}
};
static
<
reflection
::
description
::
>
(
&
,
)
{
return
<
>(
.
([=](
*
,
&
)
{
sender
, &
args
);
}));
}
static
bool
(
&
,
<
reflection
::
description
::
>
)
{
auto
=
.
<
>();
if
(!
impl
)
return
false
;
return
.
(
impl
);
}
static
auto
(
&
)
{
return
[&](
*
,
*
)
{
.
(*
args
,
sender
);
};
}
};
}
}
#endif