actioninfopanels.c
class ActionInfoPanelBase: LayoutHolder
{}
class TargetActionInfoPanelBase: ActionInfoPanelBase
{
protected int m_VisibleGridCount;
protected ActionInfoDataBase m_ActionInfo;
protected ActionTarget m_Target;
protected ref array<ref ActionInfoGridBase> m_GridsArray;
void Init()
{
InitGridStructure();
}
protected void InitGridStructure()
{
m_GridsArray = new array<ref ActionInfoGridBase>();
}
//! set to null when not in use
void SetActionInfo(ActionInfoDataBase info)
{
m_ActionInfo = info;
}
//! generic use not handled yet, if needed, just do something like hiding all children of 'MainGrid' widget and filling your stuff into it directly
override void SetLayoutName()
{
m_LayoutName = "Gui/layouts/new_ui/hud/action_info_spacer.layout";
}
void SetParentWidget(Widget w)
{
m_ParentWidget = w;
}
void UpdateTargetActionInfoPanel(ActionInfoDataBase info, ActionTarget target)
{
m_ActionInfo = info;
m_Target = target;
UpdateInterval();
}
override void UpdateInterval()
{
m_VisibleGridCount = 0;
foreach (ActionInfoGridBase grid : m_GridsArray)
{
grid.SetInfoData(m_ActionInfo, m_Target);
grid.UpdateInterval();
m_VisibleGridCount += grid.IsVisible();
}
bool show = m_VisibleGridCount > 0;
if (!m_RootWidget.IsVisibleHierarchy() && show)
OnShow();
if (m_RootWidget.IsVisibleHierarchy() && !show)
PerformPanelCleanup();
//Print(this);
//Print(m_VisibleGridCount);
}
//! also hides!
void PerformPanelCleanup()
{
Cleanup();
OnHide();
}
protected void Cleanup()
{
foreach (ActionInfoGridBase grid : m_GridsArray)
{
grid.Cleanup();
}
}
}
class ConstructionActionInfoPanel: TargetActionInfoPanelBase
{
protected Widget m_Separator;
void ConstructionActionInfoPanel(LayoutHolder parent)
{
}
override protected void InitGridStructure()
{
super.InitGridStructure();
m_GridsArray.Insert(new ConstructionActionInfoToolsGrid(this, m_RootWidget.FindAnyWidget("SecondaryGrid0")));
m_GridsArray.Insert(new ConstructionActionInfoMaterialsGrid(this, m_RootWidget.FindAnyWidget("SecondaryGrid1")));
m_Separator = m_RootWidget.FindAnyWidget("Separator");
}
override void UpdateInterval()
{
super.UpdateInterval();
//now handle the grid separator visibility
bool separatorVisible = m_Separator.IsVisible();
if ((m_VisibleGridCount > 1) != separatorVisible)
m_Separator.Show(!separatorVisible);
}
}