import ui
import player
import item
import wndMgr
import net

class SelectItemWindow(ui.ScriptWindow):

	def __init__(self):
		ui.ScriptWindow.__init__(self)

		self.tooltipItem = None
		self.inventorySlotPosDict = {}

		self.LoadWindow()

	def __del__(self):
		ui.ScriptWindow.__del__(self)

	def LoadWindow(self):
		try:
			PythonScriptLoader = ui.PythonScriptLoader()
			PythonScriptLoader.LoadScriptFile(self, "UIScript/selectitemwindow.py")
		except:
			import exception
			exception.Abort("ItemSelectWindow.LoadDialog.LoadObject")

		try:
			GetObject = self.GetChild
			self.board = GetObject("board")
			self.titleBar = GetObject("TitleBar")
			self.itemSlot = GetObject("ItemSlot")
			self.btnExit = GetObject("ExitButton")
		except:
			import exception
			exception.Abort("ItemSelectWindow.LoadDialog.BindObject")

		self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
		self.btnExit.SetEvent(ui.__mem_func__(self.Close))
		self.itemSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
		self.itemSlot.SAFE_SetButtonEvent("LEFT", "EXIST", self.SelectItemSlot)
		self.itemSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
		self.itemSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))

	def Open(self):
		self.RefreshSlot()
		self.Show()

	def Close(self):
		wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
		net.SendSelectItemPacket(0)
		self.Hide()

	def SetItemToolTip(self, tooltipItem):
		self.tooltipItem = tooltipItem

	def SelectItemSlot(self, slotPos):
		wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
		inventorySlotPos = self.inventorySlotPosDict[slotPos]
		net.SendSelectItemPacket(inventorySlotPos)
		self.Hide()

	def SetTableSize(self, size):

		SLOT_X_COUNT = 5
		self.itemSlot.ArrangeSlot(0, SLOT_X_COUNT, size, 32, 32, 0, 0)
		self.itemSlot.RefreshSlot()
		self.itemSlot.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)

		self.board.SetSize(self.board.GetWidth(), 76 + 32*size)
		self.SetSize(self.board.GetWidth(), 76 + 32*size)
		self.UpdateRect()

	def RefreshSlot(self):

		slotPos = 0
		self.inventorySlotPosDict = {}

		getItemVNum=player.GetItemIndex
		getItemCount=player.GetItemCount
		setItemVNum=self.itemSlot.SetItemSlot

		for i in xrange(player.INVENTORY_PAGE_SIZE*2):
			slotNumber = i

			itemVNum = getItemVNum(slotNumber)
			if 0 == itemVNum:
				continue

			if not item.IsMetin(itemVNum):
				continue

			itemGrade = player.GetItemGrade(slotNumber)
			if itemGrade > 2:
				continue

			self.inventorySlotPosDict[slotPos] = i

			slotPos += 1

			if slotPos > 54:
				break

		itemCount = len(self.inventorySlotPosDict)
		if itemCount < 15:
			self.SetTableSize(3)

		else:
			lineCount = 3
			lineCount += (itemCount - 15) / 5
			if itemCount % 5:
				lineCount += 1
			self.SetTableSize(lineCount)

		for selectWndPos, inventoryPos in self.inventorySlotPosDict.items():
			itemVNum = getItemVNum(inventoryPos)
			itemCount = getItemCount(inventoryPos)

			if itemCount <= 1:
				itemCount = 0

			setItemVNum(selectWndPos, itemVNum, itemCount)

		self.itemSlot.RefreshSlot()

	def OverOutItem(self):
		if None != self.tooltipItem:
			self.tooltipItem.HideToolTip()

	def OverInItem(self, slotIndex):
		if None != self.tooltipItem:
			inventorySlotPos = self.inventorySlotPosDict[slotIndex]
			self.tooltipItem.SetInventoryItem(inventorySlotPos)