class LeftArea: Container { protected Widget m_UpIcon; protected Widget m_DownIcon; protected Widget m_ContentParent; protected ref VicinityContainer m_VicinityContainer; protected Widget m_SlotsHeader; protected Widget m_SlotsContent; protected ScrollWidget m_SlotsScrollWidget; protected ScrollWidget m_ScrollWidget; protected ref SizeToChild m_ContentResize; protected bool m_ShouldChangeSize = true; protected bool m_IsProcessing = false; // Prevents refreshing every time a child is added while it is still processing void LeftArea(LayoutHolder parent ) { m_MainWidget.Show(true, false); m_ContentParent = m_MainWidget.FindAnyWidget("ContentParent"); m_ContentParent.GetScript(m_ContentResize); #ifndef PLATFORM_CONSOLE m_SlotsHeader = m_MainWidget.FindAnyWidget("SlotsHeader"); m_SlotsContent = m_MainWidget.FindAnyWidget("SlotsContent"); m_SlotsScrollWidget = ScrollWidget.Cast(m_MainWidget.FindAnyWidget("ScrollerSlotsContent")); #endif m_ScrollWidget = ScrollWidget.Cast(m_MainWidget.FindAnyWidget("Scroller")); m_MainWidget = m_MainWidget.FindAnyWidget("Content"); m_UpIcon = m_RootWidget.FindAnyWidget("Up"); m_DownIcon = m_RootWidget.FindAnyWidget("Down"); m_VicinityContainer = new VicinityContainer(this, false); m_Body.Insert(m_VicinityContainer); m_ActiveIndex = 0; WidgetEventHandler.GetInstance().RegisterOnChildAdd(m_MainWidget, this, "OnChildAdd"); WidgetEventHandler.GetInstance().RegisterOnChildRemove(m_MainWidget, this, "OnChildRemove"); RecomputeOpenedContainers(); } override void UnfocusGrid() { Container active_container; for ( int i = 0; i < m_OpenedContainers.Count(); i++ ) { active_container = Container.Cast( m_OpenedContainers.Get( i ) ); active_container.UnfocusGrid(); } } override bool IsActive() { if( m_OpenedContainers.Count() <= m_ActiveIndex ) { m_ActiveIndex = 0; } Container active_container = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ); return active_container.IsActive( ); } override void SetActive( bool active ) { super.SetActive( active ); UpdateSelectionIcons(); } override ScrollWidget GetScrollWidget() { return m_ScrollWidget; } override void UpdateSelectionIcons() { #ifdef PLATFORM_CONSOLE ScrollToActiveContainer(); #endif m_UpIcon.Show( m_IsActive ); m_DownIcon.Show( m_IsActive ); if( m_IsActive ) { float x, y; m_UpIcon.GetScreenSize( x, y ); float top_y = GetCurrentContainerTopY(); m_UpIcon.SetPos( 0, Math.Clamp( top_y, 0, 99999 ) ); #ifndef PLATFORM_CONSOLE float x2, y2; m_DownIcon.GetScreenSize( x2, y2 ); float bottom_y = GetCurrentContainerBottomY() - y2; float diff = bottom_y - ( top_y + y ); if( diff < 0 ) { top_y += diff / 2; bottom_y -= diff / 2; } m_DownIcon.SetPos( 0, bottom_y ); #endif } } float GetCurrentContainerTopY() { float x, y, cont_screen_pos; m_MainWidget.GetScreenPos( x, y ); if ( m_OpenedContainers.IsValidIndex( m_ActiveIndex ) ) cont_screen_pos = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ).GetFocusedContainerYScreenPos(); return cont_screen_pos - y; } float GetCurrentContainerBottomY() { float x, y, cont_screen_pos, cont_screen_height; m_MainWidget.GetScreenPos( x, y ); if ( m_OpenedContainers.IsValidIndex( m_ActiveIndex ) ) { cont_screen_pos = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ).GetFocusedContainerYScreenPos(); cont_screen_height = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ).GetFocusedContainerHeight(); } return cont_screen_pos - y + cont_screen_height; } override void SetSameLevelNextActive() { super.SetSameLevelNextActive(); Refresh(); } override void SetSameLevelPreviousActive() { super.SetSameLevelPreviousActive(); Refresh(); } override void ExpandCollapseContainer() { Container c = GetFocusedContainer(); if (c) { c.ExpandCollapseContainer(); } Refresh(); } void OnLeftPanelDropReceived( Widget w, int x, int y, Widget receiver ) { m_VicinityContainer.OnLeftPanelDropReceived( w, x, y, receiver ); } override void DraggingOverHeader( Widget w, int x, int y, Widget receiver ) { m_VicinityContainer.DraggingOverHeader( w, x, y, receiver ); } override void SetLayoutName() { #ifdef PLATFORM_CONSOLE m_LayoutName = WidgetLayoutName.LeftAreaXbox; #else switch ( InventoryMenu.GetWidthType() ) { case ScreenWidthType.NARROW: { m_LayoutName = WidgetLayoutName.LeftAreaNarrow; break; } case ScreenWidthType.MEDIUM: { m_LayoutName = WidgetLayoutName.LeftAreaMedium; break; } case ScreenWidthType.WIDE: { m_LayoutName = WidgetLayoutName.LeftAreaWide; break; } } #endif } override EntityAI GetFocusedItem() { EntityAI item = GetFocusedContainer().GetFocusedItem(); return item; } VicinityContainer GetVicinityContainer() { return m_VicinityContainer; } override void SetParentWidget() { m_ParentWidget = m_Parent.GetMainWidget().FindAnyWidget( "LeftPanel" ); } override void OnShow() { super.OnShow(); Refresh(); } override void Refresh() { super.Refresh(); m_MainWidget.Update(); m_RootWidget.Update(); #ifndef PLATFORM_CONSOLE m_SlotsScrollWidget.Update(); #endif m_ScrollWidget.Update(); UpdateSelectionIcons(); m_ShouldChangeSize = true; } override void UpdateInterval() { m_IsProcessing = true; super.UpdateInterval(); m_IsProcessing = false; float x, y; float x2, y2; m_ContentParent.GetScreenSize( x, y ); m_MainWidget.GetScreenSize( x2, y2 ); if ( y2 != y ) m_ShouldChangeSize = true; bool changed_size; //if ( m_ShouldChangeSize ) m_ContentResize.ResizeParentToChild( changed_size ); if ( changed_size || m_ShouldChangeSize ) { m_MainWidget.Update(); m_RootWidget.Update(); #ifndef PLATFORM_CONSOLE m_SlotsScrollWidget.Update(); #endif m_ScrollWidget.Update(); m_ShouldChangeSize = false; } CheckScrollbarVisibility(); } override bool OnChildRemove( Widget w, Widget child ) { if (!m_IsProcessing) Refresh(); return true; } override bool OnChildAdd( Widget w, Widget child ) { if (!m_IsProcessing) Refresh(); return true; } #ifndef PLATFORM_CONSOLE override ScrollWidget GetSlotsScrollWidget() { return m_SlotsScrollWidget; } Widget GetSlotsHeader() { return m_SlotsHeader; } Widget GetSlotsArea() { return m_SlotsContent; } #endif }