2011-11-03 13:17:10 +01:00
|
|
|
VipList = {}
|
2011-09-02 06:29:00 +02:00
|
|
|
|
2011-11-03 13:17:10 +01:00
|
|
|
-- private variables
|
2012-01-23 14:47:15 +01:00
|
|
|
local vipWindow
|
|
|
|
local vipButton
|
|
|
|
local addVipWindow
|
2011-11-03 13:17:10 +01:00
|
|
|
|
|
|
|
-- public functions
|
|
|
|
function VipList.create()
|
2012-02-20 03:27:08 +01:00
|
|
|
vipWindow = displayUI('viplist.otui', g_game.gameRightPanel)
|
2012-01-23 14:47:15 +01:00
|
|
|
vipWindow:hide()
|
2012-01-24 19:39:16 +01:00
|
|
|
vipButton = TopMenu.addGameButton('vipListButton', 'VIP list', 'viplist.png', VipList.toggle)
|
2011-11-03 13:17:10 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
function VipList.destroy()
|
|
|
|
vipWindow:destroy()
|
|
|
|
vipWindow = nil
|
2012-01-23 14:47:15 +01:00
|
|
|
vipButton:destroy()
|
|
|
|
vipButton = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
function VipList.toggle()
|
|
|
|
local visible = not vipWindow:isExplicitlyVisible()
|
|
|
|
vipWindow:setVisible(visible)
|
|
|
|
vipButton:setOn(visible)
|
2011-09-02 06:29:00 +02:00
|
|
|
end
|
|
|
|
|
2012-01-04 19:11:11 +01:00
|
|
|
function VipList.createAddWindow()
|
|
|
|
addVipWindow = displayUI('addvip.otui')
|
|
|
|
end
|
|
|
|
|
|
|
|
function VipList.destroyAddWindow()
|
|
|
|
addVipWindow:destroy()
|
|
|
|
addVipWindow = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
function VipList.addVip()
|
2012-02-08 22:23:15 +01:00
|
|
|
g_game.addVip(addVipWindow:getChildById('name'):getText())
|
2012-01-04 19:11:11 +01:00
|
|
|
VipList.destroyAddWindow()
|
|
|
|
end
|
|
|
|
|
2011-11-03 13:17:10 +01:00
|
|
|
-- hooked events
|
2012-01-11 19:08:56 +01:00
|
|
|
function VipList.onAddVip(id, name, online)
|
2011-09-02 06:29:00 +02:00
|
|
|
local vipList = vipWindow:getChildById('vipList')
|
2011-11-03 10:59:11 +01:00
|
|
|
|
2012-01-11 19:08:56 +01:00
|
|
|
local label = createWidget('VipListLabel', nil)
|
2011-09-02 06:29:00 +02:00
|
|
|
label:setId('vip' .. id)
|
|
|
|
label:setText(name)
|
2011-11-03 10:59:11 +01:00
|
|
|
|
2011-09-02 06:29:00 +02:00
|
|
|
if online then
|
2012-01-09 19:45:28 +01:00
|
|
|
label:setColor('#00ff00')
|
2011-09-02 06:29:00 +02:00
|
|
|
else
|
2012-01-09 19:45:28 +01:00
|
|
|
label:setColor('#ff0000')
|
2011-09-02 06:29:00 +02:00
|
|
|
end
|
2011-11-03 10:59:11 +01:00
|
|
|
|
2011-09-02 06:29:00 +02:00
|
|
|
label.vipOnline = online
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-02-03 07:20:58 +01:00
|
|
|
label:setPhantom(false)
|
2012-02-08 22:23:15 +01:00
|
|
|
connect(label, { onDoubleClick = function () g_game.openPrivateChannel(label:getText()) return true end } )
|
2012-02-08 00:54:33 +01:00
|
|
|
|
2012-01-11 19:08:56 +01:00
|
|
|
local nameLower = name:lower()
|
|
|
|
local childrenCount = vipList:getChildCount()
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-11 23:31:23 +01:00
|
|
|
for i=1,childrenCount do
|
2012-01-11 19:08:56 +01:00
|
|
|
local child = vipList:getChildByIndex(i)
|
|
|
|
if online and not child.vipOnline then
|
|
|
|
vipList:insertChild(i, label)
|
|
|
|
return
|
|
|
|
end
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-11 23:31:23 +01:00
|
|
|
if (not online and not child.vipOnline) or (online and child.vipOnline) then
|
|
|
|
local childText = child:getText():lower()
|
|
|
|
local length = math.min(childText:len(), nameLower:len())
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-11 23:31:23 +01:00
|
|
|
for j=1,length do
|
|
|
|
if nameLower:byte(j) < childText:byte(j) then
|
|
|
|
vipList:insertChild(i, label)
|
|
|
|
return
|
|
|
|
elseif nameLower:byte(j) > childText:byte(j) then
|
|
|
|
break
|
|
|
|
end
|
2012-01-11 19:08:56 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-11 19:08:56 +01:00
|
|
|
vipList:insertChild(childrenCount+1, label)
|
2011-09-02 06:29:00 +02:00
|
|
|
end
|
|
|
|
|
2012-01-11 19:08:56 +01:00
|
|
|
function VipList.onVipStateChange(id, online)
|
2011-09-02 06:29:00 +02:00
|
|
|
local vipList = vipWindow:getChildById('vipList')
|
|
|
|
local label = vipList:getChildById('vip' .. id)
|
2012-01-11 19:08:56 +01:00
|
|
|
local text = label:getText()
|
|
|
|
vipList:removeChild(label)
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-11 19:08:56 +01:00
|
|
|
VipList.onAddVip(id, text, online)
|
2011-09-02 06:29:00 +02:00
|
|
|
end
|
2011-11-03 21:54:53 +01:00
|
|
|
|
2012-01-04 19:11:11 +01:00
|
|
|
function VipList.onVipListMousePress(widget, mousePos, mouseButton)
|
|
|
|
if mouseButton ~= MouseRightButton then return end
|
|
|
|
|
|
|
|
local vipList = vipWindow:getChildById('vipList')
|
|
|
|
|
|
|
|
local menu = createWidget('PopupMenu')
|
|
|
|
menu:addOption('Add new VIP', function() VipList.createAddWindow() end)
|
|
|
|
menu:display(mousePos)
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-04 19:11:11 +01:00
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2012-01-04 15:30:28 +01:00
|
|
|
function VipList.onVipListLabelMousePress(widget, mousePos, mouseButton)
|
|
|
|
if mouseButton ~= MouseRightButton then return end
|
|
|
|
|
|
|
|
local vipList = vipWindow:getChildById('vipList')
|
|
|
|
|
|
|
|
local menu = createWidget('PopupMenu')
|
2012-01-04 19:11:11 +01:00
|
|
|
menu:addOption('Add new VIP', function() VipList.createAddWindow() end)
|
2012-02-08 22:23:15 +01:00
|
|
|
menu:addOption('Remove ' .. widget:getText(), function() if widget then g_game.removeVip(widget:getId():sub(4)) vipList:removeChild(widget) end end)
|
2012-01-04 19:11:11 +01:00
|
|
|
menu:addSeparator()
|
2012-01-05 13:48:10 +01:00
|
|
|
menu:addOption('Copy Name', function() g_window.setClipboardText(widget:getText()) end)
|
2012-01-04 15:30:28 +01:00
|
|
|
menu:display(mousePos)
|
2012-01-15 16:13:22 +01:00
|
|
|
|
2012-01-04 19:11:11 +01:00
|
|
|
return true
|
2012-01-04 15:30:28 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2012-02-08 22:23:15 +01:00
|
|
|
connect(g_game, { onGameStart = VipList.create,
|
2012-02-08 00:54:33 +01:00
|
|
|
onGameEnd = VipList.destroy,
|
2012-01-11 19:08:56 +01:00
|
|
|
onAddVip = VipList.onAddVip,
|
|
|
|
onVipStateChange = VipList.onVipStateChange })
|