From bad9e1f588f9439725ac93d519edb20869377e9a Mon Sep 17 00:00:00 2001 From: F16Gaming Date: Tue, 23 Oct 2012 03:04:50 +0200 Subject: [PATCH] Complete revamp of the Mob List GUI. --- Broker.lua | 2 +- Command.lua | 2 +- Dialogs.lua | 8 +- MobList.lua | 563 ++++++++++++++++++++++++++++++++--------------------------- 4 files changed, 313 insertions(+), 262 deletions(-) diff --git a/Broker.lua b/Broker.lua index b298fa4..404083d 100644 --- a/Broker.lua +++ b/Broker.lua @@ -51,7 +51,7 @@ local clickFunctions = { RightButton = function() KT:Announce("GUILD") end -- Announce to guild }, none = { - LeftButton = function() KT.MobList:ShowGUI() end, + LeftButton = function() KT.MobList:Toggle() end, MiddleButton = function() KTB:ToggleTextMode() end, RightButton = function() KT:ResetSession() end } diff --git a/Command.lua b/Command.lua index 82b8ba7..3a8bbd2 100644 --- a/Command.lua +++ b/Command.lua @@ -132,7 +132,7 @@ C:Register({"lookup", "lo", "check"}, function(args) end) C:Register({"list", "moblist", "mobs"}, function(args) - KT.MobList:ShowGUI() + KT.MobList:Show() end) C:Register({"time", "timer"}, function(args) diff --git a/Dialogs.lua b/Dialogs.lua index 9fe0a61..4649379 100644 --- a/Dialogs.lua +++ b/Dialogs.lua @@ -33,8 +33,8 @@ StaticPopupDialogs["KILLTRACK_DELETE"] = { button1 = "Delete all", button2 = "CANCEL", button3 = "Character Only", - OnAccept = function() KT:Delete(KT.Temp.DeleteId) end, - OnAlt = function() KT:Delete(KT.Temp.DeleteId, true) end, + OnAccept = function() KT:Delete(KT.Temp.DeleteId) KT.MobList:UpdateMobs() KT.MobList:UpdateEntries() end, + OnAlt = function() KT:Delete(KT.Temp.DeleteId, true) KT.MobList:UpdateMobs() KT.MobList:UpdateEntries() end, showAlert = true, timeout = 10, whileDead = true, @@ -46,7 +46,7 @@ StaticPopupDialogs["KILLTRACK_PURGE"] = { button1 = "Purge", button2 = "Cancel", hasEditBox = true, - OnAccept = function(self, data, data2) KT:Purge(tonumber(self.editBox:GetText())) end, + OnAccept = function(self, data, data2) KT:Purge(tonumber(self.editBox:GetText())) KT.MobList:UpdateMobs() KT.MobList:UpdateEntries() end, OnCancel = function() KT.Temp.Threshold = nil end, OnShow = function(self, data) if tonumber(KT.Temp.Threshold) then @@ -73,7 +73,7 @@ StaticPopupDialogs["KILLTRACK_RESET"] = { text = "Remove all mob entries from the database? THIS CANNOT BE REVERSED.", button1 = "Yes", button2 = "No", - OnAccept = function() KT:Reset() end, + OnAccept = function() KT:Reset() KT.MobList:UpdateMobs() KT.MobList:UpdateEntries() end, showAlert = true, enterClicksFirstButton = true, timeout = 0, diff --git a/MobList.lua b/MobList.lua index ec9d800..bec55f1 100644 --- a/MobList.lua +++ b/MobList.lua @@ -17,6 +17,8 @@ * along with KillTrack. If not, see . --]] +-- Beware of some possibly messy code in this file + local MAX_LOAD_INDEX = 200 KillTrack.MobList = { @@ -27,289 +29,338 @@ local KT = KillTrack local ML = KT.MobList local Sort = KT.Sort.Desc +local Mobs = nil +local LastOffset = 0 + +-- Frame Constants +local FRAME_WIDTH = 600 +local FRAME_HEIGHT = 534 +local HEADER_HEIGHT = 24 +local HEADER_LEFT = 3 +local HEADER_TOP = -60 +local ROW_HEIGHT = 15 +local ROW_COUNT = 28 +local ROW_TEXT_PADDING = 5 +local ROWS_HEIGHT = 450 +local ID_WIDTH = 100 +local NAME_WIDTH = 300 +local CHAR_WIDTH = 100 +local GLOBAL_WIDTH = 100 +local SCROLL_WIDTH = 27 -- Scrollbar width +local STATUS_TEXT = "Showing entries %d through %d out of %d total" + +local frame = nil +local created = false + +-- Frame helper functions + +local function CreateHeader(parent) + local h = CreateFrame("Button", nil, parent) + h:SetHeight(HEADER_HEIGHT) + h:SetNormalFontObject("GameFontHighlightSmall") + + local bgl = h:CreateTexture(nil, "BACKGROUND") + bgl:SetTexture("Interface\\FriendsFrame\\WhoFrame-ColumnTabs") + bgl:SetWidth(5) + bgl:SetHeight(HEADER_HEIGHT) + bgl:SetPoint("TOPLEFT") + bgl:SetTexCoord(0, 0.07815, 0, 0.75) + + local bgr = h:CreateTexture(nil, "BACKGROUND") + bgr:SetTexture("Interface\\FriendsFrame\\WhoFrame-ColumnTabs") + bgr:SetWidth(5) + bgr:SetHeight(HEADER_HEIGHT) + bgr:SetPoint("TOPRIGHT") + bgr:SetTexCoord(0.90625, 0.96875, 0, 0.75) + + local bgm = h:CreateTexture(nil, "BACKGROUND") + bgm:SetTexture("Interface\\FriendsFrame\\WhoFrame-ColumnTabs") + bgm:SetHeight(HEADER_HEIGHT) + bgm:SetPoint("LEFT", bgl, "RIGHT") + bgm:SetPoint("RIGHT", bgr, "LEFT") + bgm:SetTexCoord(0.07815, 0.90625, 0, 0.75) + + local hl = h:CreateTexture() + h:SetHighlightTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight", "ADD") + hl:SetPoint("TOPLEFT", bgl, "TOPLEFT", -2, 5) + hl:SetPoint("BOTTOMRIGHT", bgr, "BOTTOMRIGHT", 2, -7) + + return h +end + +local function CreateRow(container, previous) + local row = CreateFrame("Button", nil, container) + row:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight", "ADD") + row:SetHeight(ROW_HEIGHT) + row:SetPoint("LEFT") + row:SetPoint("RIGHT") + row:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 0, 0) -local GUI = LibStub("AceGUI-3.0") - -local frame, scrollHeader, idHeader, nameHeader, cKillsHeader, gKillsHeader, scrollContainer, scroll, loadButton - -local loadFrame = CreateFrame("Frame") - -local index = 0 -local count = 1 - -local function update(_, elapsed) - index = index + 1 - ML:AddItem(index) - local c = floor((index)/100) - if c == count and index ~= MAX_LOAD_INDEX then - count = count + 1 - --w = c/10 - loadButton:SetDisabled(false) - loadFrame:SetScript("OnUpdate", nil) - elseif index >= MAX_LOAD_INDEX and not ML.LoadWarning then - StaticPopup_Show("KILLTRACK_LOADWARNING") - ML.LoadWarning = true - loadFrame:SetScript("OnUpdate", nil) - elseif index >= #KT.Temp.MobEntries then - index = 0 - count = 1 - ML.LoadWarning = false - frame:SetStatusText(("%d/%d mob entries loaded."):format(#KT.Temp.MobEntries, #KT.Temp.MobEntries)) - loadButton:SetDisabled(true) - loadFrame:SetScript("OnUpdate", nil) + row.idField = row:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + row.idField:SetHeight(ROW_HEIGHT) + row.idField:SetWidth(ID_WIDTH - ROW_TEXT_PADDING * 2) + row.idField:SetPoint("LEFT", row, "LEFT", ROW_TEXT_PADDING, 0) + row.idField:SetJustifyH("RIGHT") + + row.nameField = row:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + row.nameField:SetHeight(ROW_HEIGHT) + row.nameField:SetWidth(NAME_WIDTH - SCROLL_WIDTH - ROW_TEXT_PADDING * 3) + row.nameField:SetPoint("LEFT", row.idField, "RIGHT", 2 * ROW_TEXT_PADDING, 0) + row.nameField:SetJustifyH("LEFT") + + row.charKillField = row:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + row.charKillField:SetHeight(ROW_HEIGHT) + row.charKillField:SetWidth(CHAR_WIDTH - ROW_TEXT_PADDING * 2) + row.charKillField:SetPoint("LEFT", row.nameField, "RIGHT", 2 * ROW_TEXT_PADDING, 0) + row.charKillField:SetJustifyH("RIGHT") + + row.globalKillField = row:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + row.globalKillField:SetHeight(ROW_HEIGHT) + row.globalKillField:SetWidth(GLOBAL_WIDTH - ROW_TEXT_PADDING * 2) + row.globalKillField:SetPoint("LEFT", row.charKillField, "RIGHT", 2 * ROW_TEXT_PADDING, 0) + row.globalKillField:SetJustifyH("RIGHT") + + row:SetScript("OnClick", function(s) + local id = tonumber(s.idField:GetText()) + if not id then return end + local name = s.nameField:GetText() + KT:ShowDelete(id, name) + end) + + return row +end + +function ML:Show() + if not created then + ML:Create() end + if frame:IsShowing() then return end + frame:Show() end -StaticPopupDialogs["KILLTRACK_LOADWARNING"] = { - text = "\124cffFF0000*** WARNING ***\124r\nLoading more than 200 entries may cause severe lag or client crashes.\nDo you want to continue?", - button1 = "Continue", - button2 = "Purge", - button3 = "Cancel", - OnAccept = function() count = count + 1 loadFrame:SetScript("OnUpdate", update) end, - OnCancel = function() index = 0 count = 1 ML.LoadWarning = false ML:HideGUI() KT:ShowPurge() end, -- This is actually button2, not 3 - OnAlt = function() index = 0 end, - showAlert = true, - timeout = 0, - hideOnEscape = false, - whileDead = true -} +function ML:Hide() + if not frame or not frame:IsShowing() then return end + frame:Hide() +end + +function ML:Toggle() + if frame and frame:IsShown() then + ML:Hide() + else + ML:Show() + end +end + +function ML:Create() + if frame then return end + frame = CreateFrame("Frame", nil, UIParent) + frame:Hide() + frame:SetToplevel(true) + frame:EnableMouse(true) + frame:SetMovable(true) + frame:SetPoint("CENTER") + frame:SetWidth(FRAME_WIDTH) + frame:SetHeight(FRAME_HEIGHT) + + local bd = { + bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, + edgeSize = 16, + tileSize = 32, + insets = { + left = 2.5, + right = 2.5, + top = 2.5, + bottom = 2.5 + } + } + + frame:SetBackdrop(bd) + + frame.titleLabel = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + frame.titleLabel:SetWidth(250) + frame.titleLabel:SetHeight(16) + frame.titleLabel:SetPoint("TOP", frame, "TOP", 0, -5) + frame.titleLabel:SetText("KillTrack Mob Database (" .. KT.Version .. ")") -function ML:ShowGUI() - index = 0 - count = 1 - - frame = GUI:Create("Frame") - frame:SetHeight(600) - frame:SetWidth(560) - frame:SetLayout("Flow") - frame:SetTitle("KillTrack - Mob List") - frame:SetCallback("OnRelease", function(frame) - index = 0 - count = 1 + frame:SetScript("OnMouseDown", function(s) s:StartMoving() end) + frame:SetScript("OnMouseUp", function(s) s:StopMovingOrSizing() end) + frame:SetScript("OnShow", function(s) ML:UpdateEntries() end) + + frame.closeButton = CreateFrame("Button", nil, frame, "UIPanelCloseButton") + frame.closeButton:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -1, -1) + frame.closeButton:SetScript("OnClick", function(s) ML:Hide() end) + + frame.purgeButton = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") + frame.purgeButton:SetHeight(24) + frame.purgeButton:SetWidth(100) + frame.purgeButton:SetPoint("TOPLEFT", frame, "TOPLEFT", 10, -5) + frame.purgeButton:SetText("Purge Data") + frame.purgeButton:SetScript("OnClick", function() + KT:ShowPurge() end) - frame:SetCallback("OnClose", function(frame) frame:Release() end) - - local loadHeader = GUI:Create("SimpleGroup") - loadHeader:SetFullWidth(true) - loadHeader:SetLayout("Flow") - loadButton = GUI:Create("Button") - loadButton:SetText("Load more entries") - loadButton:SetFullWidth(true) - loadButton:SetHeight(24) - loadButton:SetCallback("OnClick", function(button) - button:SetDisabled(true) - loadFrame:SetScript("OnUpdate", update) + + frame.resetButton = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") + frame.resetButton:SetHeight(24) + frame.resetButton:SetWidth(100) + frame.resetButton:SetPoint("TOPLEFT", frame.purgeButton, "BOTTOMLEFT", 0, -3) + frame.resetButton:SetText("Reset All") + frame.resetButton:SetScript("OnClick", function() + KT:ShowReset() end) - loadButton:SetDisabled(true) - loadHeader:AddChild(loadButton) - - scrollHeader = GUI:Create("SimpleGroup") - scrollHeader:SetFullWidth(true) - scrollHeader:SetLayout("Flow") - idHeader = GUI:Create("InteractiveLabel") - idHeader:SetWidth(100) - idHeader:SetFont("Fonts\\FRIZQT__.TTF", 12) - idHeader:SetText("NPC ID") - idHeader:SetColor(1, 1, 0) - idHeader:SetHighlight(0.1, 0.1, 0.1) - idHeader:SetCallback("OnClick", function() - loadButton:SetDisabled(true) - index = 0 - count = 1 - ML.LoadWarning = false - if Sort == KT.Sort.IdAsc then - Sort = KT.Sort.IdDesc - else - Sort = KT.Sort.IdAsc + + frame.helpLabel = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + frame.helpLabel:SetWidth(400) + frame.helpLabel:SetHeight(16) + frame.helpLabel:SetPoint("TOP", frame, "TOP", 0, -28) + frame.helpLabel:SetText("Click on an individual entry to delete it from the database") + + frame.idHeader = CreateHeader(frame) + frame.idHeader:SetPoint("TOPLEFT", frame, "TOPLEFT", HEADER_LEFT, HEADER_TOP) + frame.idHeader:SetWidth(ID_WIDTH) + frame.idHeader:SetText("NPC ID") + frame.idHeader:SetScript("OnClick", function() + local sort = KT.Sort.IdAsc + if Sort == sort then + sort = KT.Sort.IdDesc end - ML:UpdateList() + ML:UpdateMobs(sort) + ML:UpdateEntries(LastOffset) end) - nameHeader = GUI:Create("InteractiveLabel") - nameHeader:SetWidth(200) - nameHeader:SetFont("Fonts\\FRIZQT__.TTF", 12) - nameHeader:SetText("Name") - nameHeader:SetColor(1, 1, 0) - nameHeader:SetHighlight(0.1, 0.1, 0.1) - nameHeader:SetCallback("OnClick", function() - loadButton:SetDisabled(true) - index = 0 - count = 1 - ML.LoadWarning = false - if Sort == KT.Sort.AlphaA then - Sort = KT.Sort.AlphaD - else - Sort = KT.Sort.AlphaA + + frame.nameHeader = CreateHeader(frame) + frame.nameHeader:SetPoint("TOPLEFT", frame.idHeader, "TOPRIGHT", -2, 0) + frame.nameHeader:SetWidth(NAME_WIDTH - SCROLL_WIDTH) + frame.nameHeader:SetText("Name") + frame.nameHeader:SetScript("OnClick", function() + local sort = KT.Sort.AlphaA + if Sort == sort then + sort = KT.Sort.AlphaD end - ML:UpdateList() + ML:UpdateMobs(sort) + ML:UpdateEntries(LastOffset) end) - cKillsHeader = GUI:Create("InteractiveLabel") - cKillsHeader:SetWidth(100) - cKillsHeader:SetFont("Fonts\\FRIZQT__.TTF", 12) - cKillsHeader:SetText("Character") - cKillsHeader:SetColor(1, 1, 0) - cKillsHeader:SetHighlight(0.1, 0.1, 0.1) - cKillsHeader:SetCallback("OnClick", function() - loadButton:SetDisabled(true) - index = 0 - count = 1 - ML.LoadWarning = false - if Sort == KT.Sort.CharDesc then - Sort = KT.Sort.CharAsc - else - Sort = KT.Sort.CharDesc + + frame.charKillHeader = CreateHeader(frame) + frame.charKillHeader:SetPoint("TOPLEFT", frame.nameHeader, "TOPRIGHT", -2, 0) + frame.charKillHeader:SetWidth(CHAR_WIDTH) + frame.charKillHeader:SetText("Character Kills") + frame.charKillHeader:SetScript("OnClick", function() + local sort = KT.Sort.CharDesc + if Sort == sort then + sort = KT.Sort.CharAsc end - ML:UpdateList() + ML:UpdateMobs(sort) + ML:UpdateEntries(LastOffset) end) - gKillsHeader = GUI:Create("InteractiveLabel") - gKillsHeader:SetWidth(100) - gKillsHeader:SetFont("Fonts\\FRIZQT__.TTF", 12) - gKillsHeader:SetText("Global") - gKillsHeader:SetColor(1, 1, 0) - gKillsHeader:SetHighlight(0.1, 0.1, 0.1) - gKillsHeader:SetCallback("OnClick", function() - loadButton:SetDisabled(true) - index = 0 - count = 1 - ML.LoadWarning = false - if Sort == KT.Sort.Desc then - Sort = KT.Sort.Asc - else - Sort = KT.Sort.Desc + + frame.globalKillHeader = CreateHeader(frame) + frame.globalKillHeader:SetPoint("TOPLEFT", frame.charKillHeader, "TOPRIGHT", -2, 0) + frame.globalKillHeader:SetWidth(GLOBAL_WIDTH + HEADER_LEFT) + frame.globalKillHeader:SetText("Global Kills") + frame.globalKillHeader:SetScript("OnClick", function() + local sort = KT.Sort.Desc + if Sort == sort then + sort = KT.Sort.Asc end - ML:UpdateList() + ML:UpdateMobs(sort) + ML:UpdateEntries(LastOffset) end) - scrollHeader:AddChild(idHeader) - scrollHeader:AddChild(nameHeader) - scrollHeader:AddChild(cKillsHeader) - scrollHeader:AddChild(gKillsHeader) + frame.rows = CreateFrame("Frame", nil, frame) + frame.rows:SetPoint("LEFT") + frame.rows:SetPoint("RIGHT", frame, "RIGHT", -SCROLL_WIDTH, 0) + frame.rows:SetPoint("TOP", frame.idHeader, "BOTTOM", 0, 0) + frame.rows:SetPoint("BOTTOM", frame, "BOTTOM", 0, 0) + frame.rows:SetPoint("TOPLEFT", frame.idHeader, "BOTTOMLEFT", 0, 0) - scrollContainer = GUI:Create("SimpleGroup") - scrollContainer:SetFullWidth(true) - scrollContainer:SetFullHeight(true) - scrollContainer:SetLayout("Fill") - scroll = GUI:Create("ScrollFrame") - scroll:SetLayout("List") + local previous = frame.idHeader + for i = 1, ROW_COUNT do + frame.rows["row" .. i] = CreateRow(frame.rows, previous) + frame.rows["row" .. i].idField:SetText("") + frame.rows["row" .. i].nameField:SetText("") + frame.rows["row" .. i].charKillField:SetText("") + frame.rows["row" .. i].globalKillField:SetText("") + previous = frame.rows["row" .. i] + end - scrollContainer:AddChild(scroll) + frame.rows.scroller = CreateFrame("ScrollFrame", "KillTrackMobListScrollFrame", frame.rows, "FauxScrollFrameTemplateLight") + frame.rows.scroller:SetWidth(frame.rows:GetWidth()) + frame.rows.scroller:SetPoint("TOPRIGHT", frame.rows, "TOPRIGHT", -1, -2) + frame.rows.scroller:SetPoint("BOTTOMRIGHT", 0, 4) + frame.rows.scroller:SetScript( + "OnVerticalScroll", + function(s, val) + FauxScrollFrame_OnVerticalScroll( + s, val, ROW_HEIGHT, + function() + local offset = FauxScrollFrame_GetOffset(KillTrackMobListScrollFrame) + ML:UpdateEntries(offset) + end + ) + end + ) - frame:AddChild(loadHeader) - frame:AddChild(scrollHeader) - frame:AddChild(scrollContainer) + self:UpdateMobs(Sort) - self:UpdateList() -end + frame.statusLabel = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + frame.statusLabel:SetWidth(400) + frame.statusLabel:SetHeight(16) + frame.statusLabel:SetPoint("BOTTOM", frame, "BOTTOM", 0, 12) + frame.statusLabel:SetText(STATUS_TEXT:format(1, limit, #Mobs)) -function ML:HideGUI() - frame:Release() + self:UpdateEntries(LastOffset) end -function ML:AddItem(index) - local entry = KT.Temp.MobEntries[index] - local container = GUI:Create("SimpleGroup") - container:SetFullWidth(true) - container:SetLayout("Flow") - local id = GUI:Create("InteractiveLabel") - id:SetWidth(100) - id:SetFont("Fonts\\FRIZQT__.TTF", 12) - id:SetText(tostring(entry.Id)) - id:SetColor(1, 1, 1) - id:SetHighlight(0.1, 0.1, 0.1) - id:SetUserData("NPC_ID", entry.Id) - id:SetUserData("NPC_NAME", entry.Name) - id:SetCallback("OnClick", function(self) - KT:ShowDelete(self:GetUserData("NPC_ID"), self:GetUserData("NPC_NAME")) - end) - local name = GUI:Create("Label") - name:SetWidth(200) - name:SetFont("Fonts\\FRIZQT__.TTF", 12) - name:SetText(entry.Name) - name:SetColor(1, 1, 1) - local cKills = GUI:Create("Label") - cKills:SetWidth(100) - cKills:SetFont("Fonts\\FRIZQT__.TTF", 12) - cKills:SetText(entry.cKills) - cKills:SetColor(1, 1, 1) - local gKills = GUI:Create("Label") - gKills:SetWidth(100) - gKills:SetFont("Fonts\\FRIZQT__.TTF", 12) - gKills:SetText(entry.gKills) - gKills:SetColor(1, 1, 1) - container:AddChild(id) - container:AddChild(name) - container:AddChild(cKills) - container:AddChild(gKills) - scroll:AddChild(container) - frame:SetStatusText(("%d/%d mob entries loaded."):format(index, #KT.Temp.MobEntries)) +function ML:UpdateMobs(sort) + sort = (sort or Sort) or KT.Sort.Desc + if Mobs and sort == Sort then return end -- No update needed + Sort = sort + Mobs = KT:GetSortedMobTable(Sort) + FauxScrollFrame_Update(KillTrackMobListScrollFrame, #Mobs, ROW_COUNT, ROW_HEIGHT) end -function ML:UpdateList() - if Sort == KT.Sort.IdDesc or Sort == KT.Sort.IdAsc then - idHeader:SetColor(1, 0, 0) - nameHeader:SetColor(1, 1, 0) - cKillsHeader:SetColor(1, 1, 0) - gKillsHeader:SetColor(1, 1, 0) - elseif Sort == KT.Sort.AlphaD or Sort == KT.Sort.AlphaA then - idHeader:SetColor(1, 1, 0) - nameHeader:SetColor(1, 0, 0) - cKillsHeader:SetColor(1, 1, 0) - gKillsHeader:SetColor(1, 1, 0) - elseif Sort == KT.Sort.CharDesc or Sort == KT.Sort.CharAsc then - idHeader:SetColor(1, 1, 0) - nameHeader:SetColor(1, 1, 0) - cKillsHeader:SetColor(1, 0, 0) - gKillsHeader:SetColor(1, 1, 0) +function ML:UpdateEntries(offset) + if (#Mobs <= 0) then + for i = 1, ROW_COUNT do + local row = frame.rows["row" .. i] + row.idField:SetText("") + if i == 1 then + row.nameField:SetText("No entries in database!") + else + row.nameField:SetText("") + end + row.charKillField:SetText("") + row.globalKillField:SetText("") + end + return + end + offset = tonumber(offset) or 0 + LastOffset = offset + local limit = ROW_COUNT + if limit > #Mobs then + limit = #Mobs + end + for i = 1, limit do + local row = frame.rows["row" .. i] + local mob = Mobs[i + offset] + row.idField:SetText(mob.Id) + row.nameField:SetText(mob.Name) + row.charKillField:SetText(mob.cKills) + row.globalKillField:SetText(mob.gKills) + end + frame.statusLabel:SetText(STATUS_TEXT:format(1 + offset, offset + ROW_COUNT, #Mobs)) + + if offset == 0 then + KillTrackMobListScrollFrameScrollBarScrollUpButton:Disable() else - idHeader:SetColor(1, 1, 0) - nameHeader:SetColor(1, 1, 0) - cKillsHeader:SetColor(1, 1, 0) - gKillsHeader:SetColor(1, 0, 0) + KillTrackMobListScrollFrameScrollBarScrollUpButton:Enable() end - scroll:ReleaseChildren() - - KT.Temp.MobEntries = KT:GetSortedMobTable(Sort) - - loadFrame:SetScript("OnUpdate", update) - - --[[ - local entries = KT:GetSortedMobTable(Sort) - - for i,v in ipairs(entries) do - local container = GUI:Create("SimpleGroup") - container:SetFullWidth(true) - container:SetLayout("Flow") - local id = GUI:Create("InteractiveLabel") - id:SetWidth(100) - id:SetFont("Fonts\\FRIZQT__.TTF", 12) - id:SetText(tostring(v.Id)) - id:SetColor(1, 1, 1) - id:SetHighlight(0.1, 0.1, 0.1) - id:SetUserData("NPC_ID", v.Id) - id:SetUserData("NPC_NAME", v.Name) - id:SetCallback("OnClick", function(self) - KT:ShowDelete(self:GetUserData("NPC_ID"), self:GetUserData("NPC_NAME")) - end) - local name = GUI:Create("Label") - name:SetWidth(200) - name:SetFont("Fonts\\FRIZQT__.TTF", 12) - name:SetText(v.Name) - name:SetColor(1, 1, 1) - local cKills = GUI:Create("Label") - cKills:SetWidth(100) - cKills:SetFont("Fonts\\FRIZQT__.TTF", 12) - cKills:SetText(v.cKills) - cKills:SetColor(1, 1, 1) - local gKills = GUI:Create("Label") - gKills:SetWidth(100) - gKills:SetFont("FRIZQT__.TTF", 12) - gKills:SetText(v.gKills) - gKills:SetColor(1, 1, 1) - container:AddChild(id) - container:AddChild(name) - container:AddChild(cKills) - container:AddChild(gKills) - scroll:AddChild(container) + if offset + ROW_COUNT == #Mobs then + KillTrackMobListScrollFrameScrollBarScrollDownButton:Disable() + else + KillTrackMobListScrollFrameScrollBarScrollDownButton:Enable() end - --]] end -- 1.7.9.5