Some performance fixes, added UITable widget for easy tables (needs more work still), Worked on Market order displaying.

This commit is contained in:
BeniS 2012-07-22 00:15:29 +12:00
parent 3461761739
commit 9c8134c8a6
6 changed files with 158 additions and 32 deletions

View File

@ -28,7 +28,8 @@ local skin = {
'splitters.otui', 'splitters.otui',
'miniwindow.otui', 'miniwindow.otui',
'items.otui', 'items.otui',
'creatures.otui' 'creatures.otui',
'tables.otui'
}, },
particles = { particles = {

View File

@ -0,0 +1,9 @@
Table < UITable
layout: verticalBox
TableRow < UIScrollArea
layout: horizontalBox
height: 10
TableColumn < UIScrollArea
width: 30

View File

@ -0,0 +1,86 @@
-- @docclass
UITable = extends(UIScrollArea)
function UITable.create()
local table = UITable.internalCreate()
table.rows = {}
table.rows.columns = {}
table.rowStyle = {}
table.columStyle = {}
return table
end
function UITable:destroy()
for k,row in pairs(self.rows) do
row.onClick = nil
end
self.rows = {}
end
function UITable:onStyleApply(styleName, styleNode)
UIScrollArea.onStyleApply(self, styleName, styleNode)
for name, value in pairs(styleNode) do
if name == 'column-style' then
addEvent(function()
self:setRowStyle(self:getParent():getChildById(value))
end)
elseif name == 'row-style' then
addEvent(function()
self:setRowStyle(self:getParent():getChildById(value))
end)
end
end
end
function UITable:addRow(columns, rowStyle, columStyle)
local row = g_ui.createWidget(rowStyle, self)
row.columns = {}
for k, data in pairs(columns) do
local col = g_ui.createWidget(columStyle, row)
col:setText(data)
table.insert(row.columns, col)
end
row.onClick = function(row) self:selectRow(row) end
table.insert(self.rows, row)
return row
end
function UITable:removeRow(row)
if self.selectedRow == row then
self:selectRow(nil)
end
row.onClick = nil
table.removevalue(self.rows, row)
end
function UITable:selectRow(selectedRow)
if selectedRow == self.selectedRow then return end
local previousSelectedRow = self.selectedRow
self.selectedRow = selectedRow
if previousSelectedRow then
previousSelectedRow:setChecked(false)
end
if selectedRow then
selectedRow:setChecked(true)
end
signalcall(self.onSelectionChange, self, selectedRow, previousSelectedRow)
end
function UITable:setRowStyle(style)
self.rowStyle = style
for k, row in pairs(self.rows) do
row:setStyle(style)
end
end
function UITable:setColumnStyle(style)
self.columStyle = style
for k, col in pairs(self.rows.columns) do
col:setStyle(style)
end
end

View File

@ -62,15 +62,15 @@ local function initMarketItems()
-- populate all market items -- populate all market items
marketItems = {} marketItems = {}
local types = g_things.findThingTypeByAttr(ThingAttrMarket) local types = g_things.findThingTypeByAttr(ThingAttrMarket)
for idx = 1, #types do for i = 1, #types do
local t = types[idx] local t = types[i]
local newItem = Item.create(t:getId()) local newItem = Item.create(t:getId())
if newItem then if newItem then
local item = { local item = {
ptr = newItem, ptr = newItem,
marketData = t:getMarketData() marketData = t:getMarketData()
} }
table.insert(marketItems, item) marketItems[#marketItems+1] = item
end end
end end
end end
@ -92,7 +92,8 @@ local function updateItemsWidget()
end end
radioItemSet = UIRadioGroup.create() radioItemSet = UIRadioGroup.create()
for _, item in pairs(currentItems) do for i = 1, #currentItems do
local item = currentItems[i]
local itemBox = g_ui.createWidget('MarketItemBox', itemsPanel) local itemBox = g_ui.createWidget('MarketItemBox', itemsPanel)
local itemWidget = itemBox:getChildById('item') local itemWidget = itemBox:getChildById('item')
@ -108,7 +109,8 @@ end
local function loadDepotItems(depotItems) local function loadDepotItems(depotItems)
information.depotItems = {} information.depotItems = {}
for _, data in pairs(depotItems) do for i = 1, #depotItems do
local data = depotItems[i]
local item = Item.create(data[1]) local item = Item.create(data[1])
if not item then if not item then
break break
@ -229,8 +231,9 @@ function Market.loadMarketItems(_category)
end end
currentItems = {} currentItems = {}
for _, item in pairs(marketItems) do for i = 1, #marketItems do
-- filter items here -- filter items here
local item = marketItems[i]
local category = item.marketData.category local category = item.marketData.category
if category == _category or _category == MarketCategory[0] then if category == _category or _category == MarketCategory[0] then
table.insert(currentItems, item) table.insert(currentItems, item)
@ -244,20 +247,32 @@ function Market.updateOffers(offers)
marketOffers[MarketAction.Buy] = {} marketOffers[MarketAction.Buy] = {}
marketOffers[MarketAction.Sell] = {} marketOffers[MarketAction.Sell] = {}
local buyOfferList = marketWindow:recursiveGetChildById('buyingList') local buyOfferTable = marketWindow:recursiveGetChildById('buyingTable')
buyOfferList:destroyChildren() buyOfferTable:destroyChildren()
local sellOfferList = marketWindow:recursiveGetChildById('sellingList') local sellOfferTable = marketWindow:recursiveGetChildById('sellingTable')
sellOfferList:destroyChildren() sellOfferTable:destroyChildren()
for k, offer in pairs(offers) do for k, offer in pairs(offers) do
if offer and offer:getAction() == MarketAction.Buy then if offer and offer:getAction() == MarketAction.Buy then
local label = g_ui.createWidget('OfferListLabel', buyOfferList) local data = {
label:setText(offer:getPlayer()..' '..offer:getAmount()..' '..(offer:getPrice()*offer:getAmount())..' '..offer:getPrice()..' '..offer:getTimeStamp()) offer:getPlayer(),
offer:getAmount(),
offer:getPrice()*offer:getAmount(),
offer:getPrice(),
offer:getTimeStamp()
}
local row = buyOfferTable:addRow(data, 'OfferTableRow', 'OfferTableColumn')
table.insert(marketOffers[MarketAction.Buy], offer) table.insert(marketOffers[MarketAction.Buy], offer)
else else
local label = g_ui.createWidget('OfferListLabel', sellOfferList) local data = {
label:setText(offer:getPlayer()..' '..offer:getAmount()..' '..(offer:getPrice()*offer:getAmount())..' '..offer:getPrice()..' '..offer:getTimeStamp()) offer:getPlayer(),
offer:getAmount(),
offer:getPrice()*offer:getAmount(),
offer:getPrice(),
offer:getTimeStamp()
}
local row = sellOfferTable:addRow(data, 'OfferTableRow', 'OfferTableColumn')
table.insert(marketOffers[MarketAction.Sell], offer) table.insert(marketOffers[MarketAction.Sell], offer)
end end
end end

View File

@ -1,14 +1,22 @@
OfferListLabel < Label OfferTableRow < TableRow
font: verdana-11px-monochrome font: verdana-11px-monochrome
background-color: alpha background-color: alpha
text-offset: 2 0 text-offset: 2 0
focusable: true focusable: true
color: #cccccc color: #cccccc
height: 25
$focus: $focus:
background-color: #294f6d background-color: #294f6d
color: #ffffff color: #ffffff
OfferTableColumn < TableColumn
font: verdana-11px-monochrome
background-color: alpha
text-offset: 2 0
color: #cccccc
width: 80
Panel Panel
background-color: #22283399 background-color: #22283399
margin: 1 margin: 1
@ -28,8 +36,8 @@ Panel
margin-top: 44 margin-top: 44
margin-left: 6 margin-left: 6
TextList Table
id: sellingList id: sellingTable
anchors.top: prev.bottom anchors.top: prev.bottom
anchors.left: prev.left anchors.left: prev.left
anchors.right: parent.right anchors.right: parent.right
@ -39,10 +47,13 @@ Panel
margin-right: 6 margin-right: 6
padding: 1 padding: 1
focusable: false focusable: false
vertical-scrollbar: sellingListScrollBar background-color: #222833
border-width: 1
border-color: #191f27
vertical-scrollbar: sellingTableScrollBar
VerticalScrollBar VerticalScrollBar
id: sellingListScrollBar id: sellingTableScrollBar
anchors.top: prev.top anchors.top: prev.top
anchors.bottom: prev.bottom anchors.bottom: prev.bottom
anchors.right: prev.right anchors.right: prev.right
@ -65,8 +76,8 @@ Panel
margin-top: 9 margin-top: 9
margin-left: 6 margin-left: 6
TextList Table
id: buyingList id: buyingTable
anchors.top: prev.bottom anchors.top: prev.bottom
anchors.left: prev.left anchors.left: prev.left
anchors.right: parent.right anchors.right: parent.right
@ -76,10 +87,13 @@ Panel
height: 120 height: 120
padding: 1 padding: 1
focusable: false focusable: false
vertical-scrollbar: buyingListScrollBar background-color: #222833
border-width: 1
border-color: #191f27
vertical-scrollbar: buyingTableScrollBar
VerticalScrollBar VerticalScrollBar
id: buyingListScrollBar id: buyingTableScrollBar
anchors.top: prev.top anchors.top: prev.top
anchors.bottom: prev.bottom anchors.bottom: prev.bottom
anchors.right: prev.right anchors.right: prev.right

View File

@ -111,9 +111,10 @@ local function updateOutfit()
end end
outfit.addons = 0 outfit.addons = 0
for k, addon in pairs(prevAddons) do for i = 1, #prevAddons do
if addon and addons[k].widget:isEnabled() then local addon = prevAddons[i]
addons[k].widget:setChecked(true) if addon and addons[i].widget:isEnabled() then
addons[i].widget:setChecked(true)
end end
end end
@ -185,7 +186,7 @@ function Outfit.create(creatureOutfit, outfitList, creatureMount, mountList)
[3] = {widget = outfitWindow:getChildById('addon3'), value = 4} [3] = {widget = outfitWindow:getChildById('addon3'), value = 4}
} }
for k, addon in pairs(addons) do for _, addon in pairs(addons) do
addon.widget.onCheckChange = function(self) onAddonCheckChange(self, addon.value) end addon.widget.onCheckChange = function(self) onAddonCheckChange(self, addon.value) end
end end
@ -216,7 +217,7 @@ function Outfit.create(creatureOutfit, outfitList, creatureMount, mountList)
colorBox:setChecked(true) colorBox:setChecked(true)
end end
colorBox.onCheckChange = onColorCheckChange colorBox.onCheckChange = onColorCheckChange
table.insert(colorBoxes, colorBox) colorBoxes[#colorBoxes+1] = colorBox
end end
end end
@ -260,10 +261,10 @@ function Outfit.randomize()
outfitWindow:getChildById('detail') outfitWindow:getChildById('detail')
} }
for k, section in pairs(outfitTemplate) do for i = 1, #outfitTemplate do
section:setChecked(true) outfitTemplate[i]:setChecked(true)
colorBoxes[math.random(1, #colorBoxes)]:setChecked(true) colorBoxes[math.random(1, #colorBoxes)]:setChecked(true)
section:setChecked(false) outfitTemplate[i]:setChecked(false)
end end
outfitTemplate[1]:setChecked(true) outfitTemplate[1]:setChecked(true)
end end