#ifndef VCZH_PRESENTATION_CONTROLS_GUITREEVIEWCONTROLS
#define VCZH_PRESENTATION_CONTROLS_GUITREEVIEWCONTROLS
#include "GuiListControls.h"
namespace
{
namespace
{
namespace
{
namespace
{
class
;
class
;
class
:
public
virtual
,
public
<
>
{
public
:
virtual
void
(
*
)=
0
;
virtual
void
(
*
,
,
,
)=
0
;
virtual
void
(
*
,
,
,
)=
0
;
virtual
void
(
*
)=
0
;
virtual
void
(
*
)=
0
;
};
class
:
public
virtual
,
public
<
>
{
public
:
virtual
bool
()=
0
;
virtual
void
(
bool
)=
0
;
virtual
CalculateTotalVisibleNodes
()=
0
;
virtual
()=
0
;
virtual
<
>
()=
0
;
virtual
<
>
(
)=
0
;
};
class
:
public
virtual
,
public
<
>
{
public
:
virtual
<
>
()=
0
;
virtual
bool
()=
0
;
virtual
<
>
(
)=
0
;
virtual
bool
(
*
)=
0
;
virtual
bool
(
*
)=
0
;
virtual
(
*
) =
0
;
virtual
description
::
(
*
) =
0
;
virtual
*
(
const
&
)=
0
;
};
}
namespace
{
class
:
public
virtual
,
public
<
>
{
public
:
static
const
wchar_t
*
const
;
virtual
<
>
(
)=
0
;
virtual
CalculateNodeVisibilityIndex
(
*
)=
0
;
};
class
:
public
list
::
,
protected
virtual
,
public
virtual
,
public
<
>
{
typedef
collections
::
<
*,
>
;
protected
:
<
>
;
offsetBeforeChildModifieds
;
<
>
(
<
>
,
);
void
(
*
)
override
;
void
(
*
,
,
,
)
override
;
void
(
*
,
,
,
)
override
;
void
(
*
)
override
;
void
(
*
)
override
;
CalculateNodeVisibilityIndexInternal
(
*
);
CalculateNodeVisibilityIndex
(
*
)
override
;
<
>
(
)
override
;
public
:
(
<
>
);
();
<
>
();
()
override
;
(
)
override
;
description
::
(
)
override
;
*
(
const
&
)
override
;
};
}
namespace
{
class
:
public
,
public
virtual
,
public
<
>
{
typedef
collections
::
<
<
>>
;
typedef
collections
::
<
<
>>
;
public
:
class
:
public
collections
::
<
<
>>
{
friend
class
;
protected
:
offsetBeforeChildModified
=
0
;
*
;
void
(
,
,
);
void
(
,
,
);
bool
(
,
<
>
const
&
)
override
;
bool
(
,
<
>
const
&
)
override
;
void
(
,
<
>
const
&
)
override
;
void
(
,
<
>
const
&
)
override
;
void
(
,
<
>
const
&
)
override
;
void
(
,
)
override
;
();
public
:
};
protected
:
*
=
nullptr
;
bool
=
false
;
=
0
;
=
1
;
<
>
;
;
virtual
*
();
void
OnChildTotalVisibleNodesChanged
(
);
public
:
(
<
>
=
nullptr
);
();
<
>
();
void
(
const
<
>&
);
void
();
&
();
bool
()
override
;
void
(
bool
)
override
;
CalculateTotalVisibleNodes
()
override
;
()
override
;
<
>
()
override
;
<
>
(
)
override
;
};
class
:
public
virtual
,
protected
virtual
,
public
<
>
{
collections
::
<
*>
;
protected
:
void
(
*
)
override
;
void
(
*
,
,
,
)
override
;
void
(
*
,
,
,
)
override
;
void
(
*
)
override
;
void
(
*
)
override
;
public
:
();
();
bool
()
override
;
<
>
(
)
override
;
bool
(
*
)
override
;
bool
(
*
)
override
;
*
(
const
&
)
override
;
};
class
:
public
,
public
,
public
<
>
{
protected
:
*
()
override
;
public
:
();
();
<
>
()
override
;
*
(
*
);
};
}
class
GuiVirtualTreeListControl
:
public
,
protected
virtual
tree
::
,
public
<
GuiVirtualTreeListControl
>
{
GUI_SPECIFY_CONTROL_TEMPLATE_TYPE(TreeViewTemplate, GuiSelectableListControl)
public
:
using
=
templates
::
;
private
:
templates
::
*
=
nullptr
;
void
BeforeControlTemplateUninstalled_
();
void
AfterControlTemplateInstalled_
(
bool
);
protected
:
void
BeforeControlTemplateUninstalled
()
override
{
BeforeControlTemplateUninstalled_
();
::
BeforeControlTemplateUninstalled
(); }
void
AfterControlTemplateInstalled
(
bool
)
override
{
::
AfterControlTemplateInstalled
(
);
AfterControlTemplateInstalled_
(
); }
void
CheckAndStoreControlTemplate
(
templates
::
*
)
override
{
auto
=
dynamic_cast
<
templates
::
*>(
);
do
{
if
(!(
ct
))
throw
(
L"The assigned control template is not vl::presentation::templates::Gui"
L"TreeViewTemplate"
L"."
);}
while
(
0
);
=
ct
;
::
CheckAndStoreControlTemplate
(
); }
public
:
templates
::
*
TypedControlTemplateObject
(
bool
) {
if
(
) {
EnsureControlTemplateExists
(); }
return
; }
private
:
protected
:
void
(
tree
::
*
)
override
;
void
(
tree
::
*
,
,
,
)
override
;
void
(
tree
::
*
,
,
,
)
override
;
void
(
tree
::
*
)
override
;
void
(
tree
::
*
)
override
;
protected
:
tree
::
*
;
tree
::
*
;
void
(
compositions
::
&
,
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
&
,
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
public
:
GuiVirtualTreeListControl
(
theme
::
,
<
tree
::
>
);
~
GuiVirtualTreeListControl
();
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
compositions
::
;
tree
::
*
();
tree
::
*
();
};
namespace
{
class
:
public
virtual
,
public
<
>
{
public
:
static
const
wchar_t
*
const
;
virtual
<
>
(
*
)=
0
;
};
class
:
public
,
public
<
>
{
public
:
<
>
;
;
description
::
;
();
(
const
<
>&
,
const
&
);
};
class
:
public
,
public
virtual
,
public
<
>
{
protected
:
<
>
(
*
)
override
;
(
*
)
override
;
description
::
(
*
)
override
;
public
:
();
~
TreeViewItemRootProvider
();
*
(
const
&
)
override
;
<
>
(
*
);
void
(
*
,
<
>
);
void
(
*
);
};
}
class
:
public
GuiVirtualTreeListControl
,
public
<
>
{
protected
:
tree
::
*
=
nullptr
;
templates
::
*
(
tree
::
*
);
void
(
tree
::
*
,
bool
);
void
(
tree
::
*
,
bool
);
void
(
tree
::
*
,
,
,
)
override
;
void
(
tree
::
*
)
override
;
void
(
tree
::
*
)
override
;
void
(
,
*
)
override
;
public
:
(
theme
::
,
<
tree
::
>
);
();
};
class
:
public
,
public
<
>
{
protected
:
<
tree
::
>
;
public
:
(
theme
::
);
();
<
tree
::
>
();
<
tree
::
>
();
};
namespace
{
class
:
public
templates
::
{
protected
:
*
=
nullptr
;
compositions
::
*
=
nullptr
;
elements
::
*
=
nullptr
;
elements
::
*
=
nullptr
;
void
()
override
;
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
void
(
compositions
::
*
,
compositions
::
&
);
public
:
();
();
};
}
}
}
namespace
{
namespace
{
template
<>
struct
<
presentation
::
controls
::
tree
::
>
{
static
const
bool
=
true
;
static
const
bool
=
false
;
};
}
}
}
#endif