class CollapsibleContainer: Container { protected ref CollapsibleHeader m_CollapsibleHeader; protected bool m_Hidden; void CollapsibleContainer( LayoutHolder parent, int sort = -1 ) { m_MainWidget.Show( true ); if ( sort > -1 ) m_MainWidget.SetSort( sort + 2 ); m_MainWidget = m_MainWidget.FindAnyWidget( "header" ); m_Body = new array; m_CollapsibleHeader = new CollapsibleHeader( this, "CollapseButtonOnMouseButtonDown" ); } override void SetLayoutName() { m_LayoutName = WidgetLayoutName.CollapsibleContainer; } EntityAI GetEntity() { return m_Entity; } override void OnDropReceivedFromHeader( Widget w, int x, int y, Widget receiver ) { } override void Refresh() { super.Refresh(); } override void OnShow() { super.OnShow(); m_Hidden = false; for (int i = 0; i < m_Body.Count(); i++) { m_Body.Get( i ).OnShow(); Container c = Container.Cast(m_Body.Get(i)); if (c) { c.Open(); } } SetCollapsibleHeaderArrowState(m_Hidden); } override void OnHide() { m_Hidden = true; if (m_CollapsibleHeader) { SetCollapsibleHeaderArrowState(m_Hidden); } else { super.OnHide(); } } override void Insert( LayoutHolder container, int pos = -1, bool immedUpdate = true ) { super.Insert( container, pos, immedUpdate ); //if ( immedUpdate ) //{ RecomputeOpenedContainers(); UpdateCollapseButtons(); //} SetCollapsibleHeaderArrowState(m_Hidden); } override void Remove( LayoutHolder container ) { super.Remove( container ); RecomputeOpenedContainers(); UpdateCollapseButtons(); } bool CanDisplayAnyCategory() { return false; } void UpdateCollapseButtons() { #ifndef PLATFORM_CONSOLE if (m_Body.Count() < 2) { if (m_CollapsibleHeader) { m_CollapsibleHeader.ShowCollapseButton(false); } } else { if (m_CollapsibleHeader) { m_CollapsibleHeader.ShowCollapseButton(true); } } #endif } void LoadDefaultState() { m_Hidden = !ItemManager.GetInstance().GetDefaultHeaderOpenState( "VICINITY" ); //m_Closed = m_Hidden; if ( m_Hidden ) { OnHide(); } else { OnShow(); } } bool IsHidden() { return m_Hidden; } void CollapseButtonOnMouseButtonDown( Widget w ) { Toggle(); } override void Toggle() { if (!m_Hidden) { for (int i = 1; i < m_Body.Count(); i++) { m_Body.Get( i ).OnHide(); Container c = Container.Cast(m_Body.Get(i)); if (c) { c.Close(); } } OnHide(); } else { OnShow(); } m_Closed = m_Hidden; SetCollapsibleHeaderArrowState(m_Hidden); UpdateCollapseButtons(); } override bool OnChildRemove( Widget w, Widget child ) { if( w == GetMainWidget() ) GetMainWidget().Update(); return true; } override bool OnChildAdd( Widget w, Widget child ) { if( w == GetMainWidget() ) GetMainWidget().Update(); return true; } override Header GetHeader() { return m_CollapsibleHeader; } override void SetHeader(Header header) { m_CollapsibleHeader = CollapsibleHeader.Cast(header); } void SetCollapsibleHeaderArrowState(bool open) { if (m_CollapsibleHeader) { m_CollapsibleHeader.SetArrowButtonOpened(open); } } }