class ClosableContainer extends Container { protected ref ClosableHeader m_ClosableHeader; protected bool m_LockCargo; void ClosableContainer( LayoutHolder parent, int sort = -1 ) { m_Body = new array; m_ClosableHeader = new ClosableHeader( this, "CloseButtonOnMouseButtonDown" ); if( sort > -1 ) m_RootWidget.SetSort( sort + 2 ); m_MainWidget = m_MainWidget.FindWidget( "body" ); } override bool IsDisplayable() { for(int i = 0; i < m_Body.Count(); i++) { LayoutHolder c = m_Body[i]; if( c && c.IsDisplayable()) return true; } return false; } override void UpdateRadialIcon() { if ( m_SlotIcon ) { bool show_radial_icon; show_radial_icon = IsOpened(); show_radial_icon = show_radial_icon && ( ( m_Entity.GetInventory().GetCargo() && m_Entity.CanDisplayCargo()) || m_Entity.GetSlotsCountCorrect() > 0 ); show_radial_icon = show_radial_icon && !m_Entity.GetInventory().IsInventoryLockedForLockType( HIDE_INV_FROM_SCRIPT ); if ( IsDisplayable() ) { m_SlotIcon.GetRadialIconPanel().Show( true ); SetOpenForSlotIcon(show_radial_icon); } else { m_SlotIcon.GetRadialIconPanel().Show( false ); } } } void SetOpenState( bool state ) { ItemManager.GetInstance().SetDefaultOpenState( m_Entity.GetType(), state ); m_Closed = !state; if( !m_Closed ) { OnShow(); } else { OnHide(); } } override Header GetHeader() { return m_ClosableHeader; } override void Open() { if( IsDisplayable() ) { super.Open(); ItemManager.GetInstance().SetDefaultOpenState( m_Entity.GetType(), true ); SetOpenForSlotIcon(true); OnShow(); m_Parent.m_Parent.Refresh(); } } override void Close() { ItemManager.GetInstance().SetDefaultOpenState( m_Entity.GetType(), false ); super.Close(); SetOpenForSlotIcon(false); OnHide(); m_Parent.m_Parent.Refresh(); //TODO: ??? } override void SetLayoutName() { m_LayoutName = WidgetLayoutName.ClosableContainer; } override void OnShow() { if( IsOpened() ) { super.OnShow(); } } override LayoutHolder Get( int x ) { if( m_Body && x < m_Body.Count() && x >= 0 ) return m_Body.Get( x ); return null; } override void Refresh() { if( !m_Closed ) { super.Refresh(); } } void CloseButtonOnMouseButtonDown() { Close(); } override float GetFocusedContainerHeight( bool contents = false ) { float x, y; if( contents && GetFocusedContainer() ) y = GetFocusedContainer().GetFocusedContainerHeight( contents ); else if( GetRootWidget() ) GetRootWidget().GetScreenSize( x, y ); return y; } override float GetFocusedContainerYPos( bool contents = false ) { float x, y; if( contents && GetFocusedContainer() ) y = GetFocusedContainer().GetFocusedContainerYPos( contents ); else if( GetRootWidget() ) GetRootWidget().GetPos( x, y ); return y; } override float GetFocusedContainerYScreenPos( bool contents = false ) { float x, y; if( contents && GetFocusedContainer() ) y = GetFocusedContainer().GetFocusedContainerYScreenPos( contents ); else if( GetRootWidget() ) GetRootWidget().GetScreenPos( x, y ); return y; } void MoveContainerUp( Widget cont ) { if( m_Entity ) { InventoryLocation loc = new InventoryLocation; m_Entity.GetInventory().GetCurrentInventoryLocation( loc ); if( loc.IsValid() ) { int slot = loc.GetSlot(); Inventory.MoveAttachmentUp( slot ); UpdateSelectionIcons(); } } } void MoveContainerDown( Widget cont ) { if( m_Entity ) { InventoryLocation loc = new InventoryLocation; m_Entity.GetInventory().GetCurrentInventoryLocation( loc ); if( loc.IsValid() ) { int slot = loc.GetSlot(); Inventory.MoveAttachmentDown( slot ); UpdateSelectionIcons(); } } } override void CheckHeaderDragability() { super.CheckHeaderDragability(); if (m_ClosableHeader && m_Entity) //TODO: do the entity check here? { int flag = m_ClosableHeader.GetMainWidget().GetFlags(); bool old = flag & WidgetFlags.DRAGGABLE; bool current = ItemBase.Cast(m_Entity) && m_Entity.IsTakeable(); //bool changed = false; if (old && !current) { m_ClosableHeader.GetMainWidget().ClearFlags( WidgetFlags.DRAGGABLE ); Widget drag = GetDragWidget(); if (drag && drag == m_ClosableHeader.GetMainWidget()) { CancelWidgetDragging(); m_ClosableHeader.OnDropHeader(null); } //changed = true; } else if (!old && current) { m_ClosableHeader.GetMainWidget().SetFlags( WidgetFlags.DRAGGABLE ); //changed = true; } /*if (old != current) { flag &= ~WidgetFlags.DRAGGABLE; m_ClosableHeader.GetMainWidget().SetFlags( flag ); }*/ } } }