closableheader.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. class ClosableHeader: Header
  2. {
  3. protected float m_SquareSize;
  4. protected int m_DefaultSort;
  5. protected Widget m_MovePanel;
  6. protected Widget m_PanelWidget;
  7. protected Widget m_DragRender;
  8. protected ButtonWidget m_MoveUp;
  9. protected ButtonWidget m_MoveDown;
  10. protected bool m_IsInLocalEquipment;
  11. void ClosableHeader( LayoutHolder parent, string function_name )
  12. {
  13. m_MovePanel = GetMainWidget().FindAnyWidget( "MovePanel" );
  14. m_PanelWidget = GetMainWidget().FindAnyWidget( "PanelWidget" );
  15. m_DragRender = GetMainWidget().FindAnyWidget( "Drag_Render" );
  16. m_MoveUp = ButtonWidget.Cast( GetMainWidget().FindAnyWidget( "MoveUp" ) );
  17. m_MoveDown = ButtonWidget.Cast( GetMainWidget().FindAnyWidget( "MoveDown" ) );
  18. WidgetEventHandler.GetInstance().RegisterOnClick( m_MoveUp, m_Parent, "MoveContainerUp" );
  19. WidgetEventHandler.GetInstance().RegisterOnClick( m_MoveDown, m_Parent, "MoveContainerDown" );
  20. WidgetEventHandler.GetInstance().RegisterOnMouseLeave( m_MoveUp, this, "MouseLeave" );
  21. WidgetEventHandler.GetInstance().RegisterOnMouseLeave( m_MoveDown, this, "MouseLeave" );
  22. WidgetEventHandler.GetInstance().RegisterOnDrag( GetMainWidget() , this, "OnDragHeader" );
  23. WidgetEventHandler.GetInstance().RegisterOnDrop( GetMainWidget() , this, "OnDropHeader" );
  24. WidgetEventHandler.GetInstance().RegisterOnMouseEnter( GetMainWidget(), this, "MouseEnter" );
  25. WidgetEventHandler.GetInstance().RegisterOnMouseLeave( GetMainWidget(), this, "MouseLeave" );
  26. float temp;
  27. GetMainWidget().GetScreenSize( temp, m_SquareSize );
  28. m_DefaultColor = m_PanelWidget.GetColor();
  29. m_DefaultFontSize = 20;
  30. if( GetParent() && GetParent().GetParent() && GetParent().GetParent().GetParent() )
  31. m_IsInLocalEquipment = GetParent().GetParent().GetParent().IsInherited( RightArea );
  32. }
  33. void ~ClosableHeader()
  34. {
  35. if( InventoryItem.Cast( m_Entity ) )
  36. InventoryItem.Cast( m_Entity ).GetOnItemFlipped().Remove( UpdateFlip );
  37. }
  38. override void SetLayoutName()
  39. {
  40. m_LayoutName = WidgetLayoutName.ClosableHeader;
  41. }
  42. override void SetName( string name )
  43. {
  44. name.ToUpper();
  45. m_HeaderText.SetText( name );
  46. m_HeaderText.Update();
  47. float x, y;
  48. m_HeaderText.GetScreenSize( x, y );
  49. m_PanelWidget.SetSize( 1, y + InventoryMenu.GetHeightMultiplied( 10 ) );
  50. }
  51. void OnDragHeader( Widget w, int x, int y )
  52. {
  53. ClosableContainer parent = ClosableContainer.Cast( m_Parent );
  54. if( parent && GetMainWidget() && m_Entity )
  55. {
  56. ItemPreviewWidget item_preview_drag = ItemPreviewWidget.Cast( m_DragRender );
  57. item_preview_drag.SetFlags(WidgetFlags.EXACTPOS );
  58. m_DefaultSort = GetRootWidget().GetSort();
  59. item_preview_drag.GetParent().GetParent().GetParent().GetParent().GetParent().GetParent().GetParent().GetParent().AddChild( GetRootWidget() );
  60. if( item_preview_drag && m_Entity )
  61. {
  62. item_preview_drag.SetItem( m_Entity );
  63. item_preview_drag.SetView( m_Entity.GetViewIndex() );
  64. }
  65. ItemManager.GetInstance().SetIsDragging( true );
  66. parent.HideContent( true );
  67. m_PanelWidget.Show( false );
  68. if( item_preview_drag )
  69. item_preview_drag.Show( true );
  70. int ww, hh;
  71. GetGame().GetInventoryItemSize( InventoryItem.Cast( m_Entity ), ww, hh );
  72. if( item_preview_drag )
  73. {
  74. m_Entity.GetOnItemFlipped().Insert( UpdateFlip );
  75. if( m_Entity.GetInventory().GetFlipCargo() )
  76. {
  77. item_preview_drag.SetSize( hh * m_SquareSize, ww * m_SquareSize );
  78. }
  79. else
  80. {
  81. item_preview_drag.SetSize( ww * m_SquareSize, hh * m_SquareSize );
  82. }
  83. }
  84. }
  85. }
  86. void UpdateFlip( bool flipped )
  87. {
  88. ItemPreviewWidget item_preview_drag = ItemPreviewWidget.Cast( m_DragRender );
  89. if( InventoryItem.Cast( m_Entity ) && item_preview_drag )
  90. {
  91. int ww, hh;
  92. GetGame().GetInventoryItemSize( InventoryItem.Cast( m_Entity ), ww, hh );
  93. if( flipped )
  94. {
  95. item_preview_drag.SetSize( hh * m_SquareSize, ww * m_SquareSize );
  96. }
  97. else
  98. {
  99. item_preview_drag.SetSize( ww * m_SquareSize, hh * m_SquareSize );
  100. }
  101. }
  102. }
  103. void OnDropHeader( Widget w )
  104. {
  105. ClosableContainer parent = ClosableContainer.Cast( m_Parent );
  106. parent.GetMainWidget().AddChild( GetRootWidget() );
  107. GetRootWidget().SetSort( 0 );
  108. if( parent )
  109. {
  110. //
  111. ItemPreviewWidget item_preview_drag = ItemPreviewWidget.Cast( m_DragRender );
  112. if( item_preview_drag )
  113. {
  114. item_preview_drag.SetItem( null );//TODO: is this safe?
  115. }
  116. //
  117. m_PanelWidget.Show( true );
  118. m_DragRender.Show( false );
  119. parent.ShowContent( true );
  120. ItemManager.GetInstance().HideDropzones();
  121. ItemManager.GetInstance().SetIsDragging( false );
  122. }
  123. if( InventoryItem.Cast( m_Entity ) )
  124. InventoryItem.Cast( m_Entity ).GetOnItemFlipped().Remove( UpdateFlip );
  125. }
  126. bool MouseEnter(Widget w, int x, int y)
  127. {
  128. if( m_IsInLocalEquipment && !GetDragWidget() )
  129. {
  130. #ifdef PLATFORM_CONSOLE
  131. m_MovePanel.Show( GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer() );
  132. #else
  133. m_MovePanel.Show( true );
  134. #endif
  135. }
  136. PrepareOwnedTooltip( m_Entity, x, y );
  137. return true;
  138. }
  139. bool MouseLeave( Widget w, Widget enter_w, int x, int y )
  140. {
  141. if( enter_w != m_MoveUp && enter_w != m_MoveDown && enter_w != m_CollapseButton )
  142. {
  143. if( m_IsInLocalEquipment )
  144. {
  145. m_MovePanel.Show( false );
  146. }
  147. }
  148. HideOwnedTooltip();
  149. return true;
  150. }
  151. override void SetActive( bool active )
  152. {
  153. super.SetActive( active );
  154. if( active )
  155. {
  156. m_PanelWidget.SetColor( ARGBF( 1, 1, 0, 0 ) );
  157. }
  158. else
  159. {
  160. m_PanelWidget.SetColor( m_DefaultColor );
  161. }
  162. }
  163. }