123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- class ClosableContainer extends Container
- {
- protected ref ClosableHeader m_ClosableHeader;
- protected bool m_LockCargo;
- void ClosableContainer( LayoutHolder parent, int sort = -1 )
- {
- m_Body = new array<ref LayoutHolder>;
- 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 );
- }*/
- }
- }
- }
|