86 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
| UIMiniWindowContainer = extends(UIWidget)
 | |
| 
 | |
| function UIMiniWindowContainer.create()
 | |
|   local container = UIMiniWindowContainer.internalCreate()
 | |
|   container.scheduledWidgets = {}
 | |
|   container:setFocusable(false)
 | |
|   container:setPhantom(true)
 | |
|   return container
 | |
| end
 | |
| 
 | |
| function UIMiniWindowContainer:onDrop(widget, mousePos)
 | |
|   if widget:getClassName() == 'UIMiniWindow' then
 | |
|   	local oldParent = widget:getParent()
 | |
|   	if oldParent == self then
 | |
|   		return true
 | |
|   	end
 | |
| 
 | |
|     if oldParent then
 | |
|   	  oldParent:removeChild(widget)
 | |
|     end
 | |
| 
 | |
|   	if widget.movedWidget then
 | |
|   		local index = self:getChildIndex(widget.movedWidget)
 | |
|   		self:insertChild(index + widget.movedIndex, widget)
 | |
|   	else
 | |
|   		self:addChild(widget)
 | |
|   	end
 | |
|     
 | |
|     return true
 | |
|   end
 | |
| end
 | |
| 
 | |
| function UIMiniWindowContainer:swapInsert(widget, index)
 | |
|   local oldParent = widget:getParent()
 | |
|   local oldIndex = self:getChildIndex(widget)
 | |
| 
 | |
|   if oldParent == self and oldIndex ~= index then
 | |
|     local oldWidget = self:getChildByIndex(index)
 | |
|     self:removeChild(oldWidget)
 | |
|     self:insertChild(oldIndex, oldWidget)
 | |
|     self:removeChild(widget)
 | |
|     self:insertChild(index, widget)
 | |
|   end
 | |
| end
 | |
| 
 | |
| function UIMiniWindowContainer:scheduleInsert(widget, index)
 | |
|   if index - 1 > self:getChildCount() then
 | |
|     if self.scheduledWidgets[index] then
 | |
|       warning('replacing scheduled widget id ' .. widget:getId())
 | |
|     end
 | |
|     self.scheduledWidgets[index] = widget
 | |
|   else
 | |
|     local oldParent = widget:getParent()
 | |
|     if oldParent ~= self then
 | |
|       oldParent:removeChild(widget)
 | |
|       self:insertChild(index, widget)
 | |
|     else
 | |
|       self:swapInsert(widget, index)
 | |
|     end
 | |
| 
 | |
|     while true do
 | |
|       local placed = false
 | |
|       for nIndex,nWidget in pairs(self.scheduledWidgets) do
 | |
|         if nIndex - 1 <= self:getChildCount() then
 | |
|           self:insertChild(nIndex, nWidget)
 | |
|           self.scheduledWidgets[nIndex] = nil
 | |
|           placed = true
 | |
|           break
 | |
|         end
 | |
|       end
 | |
|       if not placed then break end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| function UIMiniWindowContainer:saveChildren()
 | |
|   local children = self:getChildren()
 | |
|   for i=1,#children do
 | |
|     children[i]:saveParentIndex(self:getId(), i)
 | |
|   end
 | |
| end
 | |
| 
 | |
| function UIMiniWindowContainer:getClassName()
 | |
|   return 'UIMiniWindowContainer'
 | |
| end
 |