diff Core.lua @ 1:21c58930f74e

Refactoring
author John@Yosemite-PC
date Fri, 02 Mar 2012 22:32:12 -0500
parents 47fac96968e1
children 431ddc8bdb4a
line wrap: on
line diff
--- a/Core.lua	Fri Mar 02 00:15:09 2012 -0500
+++ b/Core.lua	Fri Mar 02 22:32:12 2012 -0500
@@ -3,8 +3,9 @@
 
 
 -- order of implementation
--- ( ) lists fully functional (/script interface)
--- ( ) lists single-user functional via command line interface 
+-- (_) lists fully functional (/script interface)
+-- (_) lists single-user functional via command line interface 
+-- ( ) all actions should reference the player list
 -- ( ) single user + admin gui (manual suicides)
 -- ( ) single user + admin gui (master loot)
 -- ( ) communication and list trimming
@@ -15,7 +16,8 @@
 -- ( ) reserves
 
 -- important things to remember:
--- 1) ipairs iterates from 1 until the first missing int index -> no gaps
+-- 1) ipairs iterates from 1 until the first missing int index -> no gaps if int
+-- indexing
 -- 2) a.x === a["x"]
 -- 3) a["1"] =/= a[1]
 
@@ -33,10 +35,10 @@
     self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk")
 
     self:RegisterChatCommand("bsk", "HandleCommand")
-    bsk:CreateWorkingStateFromChanges()
 end
 
 function bsk:OnEnable()
+    bsk:CreateWorkingStateFromChanges()
     --self:HandleCommand()
 end
 
@@ -65,12 +67,12 @@
             return
         end
         if param[2] == "player" then
-            --if param[3] == "all" then
-            --    bsk:Pop
-            --else
+            if param[3] == "all" then
+                bsk:AddMissingPlayers()
+            else
                 local player = FixPlayerName(param[3])
                 bsk:AddPlayer(player)
-            --end
+            end
         elseif param[2] == "list" then
             bsk:CreateList(param[3])
         end
@@ -90,11 +92,6 @@
         bsk:PrintLists(param[2])
     end
 
-    -- TODO: add options
-    --
-    -- for now: launch GUI
-    --
-
     --if self.frame == nil then
         --self:CreateGUI()
         --self:ShowGUI()
@@ -103,76 +100,6 @@
     --end
 
 end
---MULTIBYTE_FIRST_CHAR = "^([\192-\255]?%a?[\128-\191]*)"
---function GetNamePattern(name)
---    local u = name:match(MULTIBYTE_FIRST_CHAR):upper()
- 
---    if not u or u:len() == 0 then Prat.Print("GetNamePattern: name error", name) return end
---    local l = u:lower()
---    local namepat 
---    if u == l then
---        namepat = name:lower()
---    elseif u:len() == 1 then
---        namepat = "["..u..l.."]"..name:sub(2):lower()
---    elseif u:len() > 1 then 
---        namepat = ""
---        for i=1,u:len() do
---            namepat = namepat .. "[" .. u:sub(i,i)..l:sub(i,i).."]"
---        end
---        namepat = namepat .. name:sub(u:len()+1)
---    end
---    return "%f[%a\192-\255]"..namepat.."%f[^%a\128-\255]"
---end
---AnyNamePattern = "%f[%a\192-\255]([%a\192-\255]+)%f[^%a\128-\255]"  
-
-
-function bsk:CreateGUI()
-
-    -- Create a container frame
-    self.frame = AceGUI:Create("Frame")
-    self.frame:SetCallback("OnClose",function(widget) AceGUI:Release(widget) end)
-    self.frame:SetTitle("BSK")
-    self.frame:SetLayout("Flow")
-    self.frame:SetHeight(700) 
-    self.frame:SetWidth(350)
-    local tab = AceGUI:Create("TabGroup")
-    tab:SetLayout("Flow")
-    tab:SetTabs(
-        {
-            {
-                text="Tab 1",
-                value="tab1"
-            },
-
-            {
-                text="Tab 2",
-                value="tab2"
-            },
-            {
-                text="Tab 3",
-                value="tab3"
-            },
-            {
-                text="Tab 4",
-                value="tab4"
-            }
-        }
-    )
-	tab.width = "fill"
-	tab.height = "fill"
-
-    tab:SetCallback("OnGroupSelected",ChangeTab)
-    tab:SelectTab("tab1")
-    self.frame:AddChild(tab)
-
-    -- Create a button
-    --local btn = AceGUI:Create("Button")
-    --btn:SetWidth(170)
-    --btn:SetText("Button !")
-    --btn:SetCallback("OnClick", function() print("Click!") end)
-    -- Add the button to the container
-    --self.frame:AddChild(btn)
-end
 
 bsk.defaults = {
     profile = {
@@ -182,367 +109,4 @@
     }
 }
 
-bsk.options = {
-    name= 'bsk',
-    type = 'group',
-    args = 
-    {
-        version =
-        {
-            type = "execute",
-            name = "Version query",
-            desc = "Check others' versions",
-            func = function(self) self:Print("TODO") end
-        }
-    }
-}
-function ChangeTab(container, event, group)
-    container:ReleaseChildren()
-    if group == "tab2" then
-        local desc = AceGUI:Create("Label")
-        desc:SetText("This is Tab 1")
-        desc:SetFullWidth(true)
-        container:AddChild(desc)
 
-        local button = AceGUI:Create("Button")
-        button:SetText("Tab 1 Button")
-        button:SetWidth(200)
-        container:AddChild(button)
-    elseif group == "tab1" then
-        local item2 = {string="item2!", color = {r=1,g=0,b=0.5} }
-        local itemList = {"Item1", item2, "Item3", "Item4"}
-
-        local myMultiSelect = AceGUI:Create("MultiSelect")
-        myMultiSelect:SetLabel("My Multi Select")
-        myMultiSelect:SetWidth(200)
-        myMultiSelect:SetHeight(400)
-        myMultiSelect:SetItemList(itemList)
-        myMultiSelect:SetMultiSelect(false)
-        container:AddChild(myMultiSelect)
-    end
-end
-
-
-
-
-
-
-
-
-
-
-
---[[----------------------------------
---  MultiSelect widget for AceGUI-3.0
---  Written by Shirokuma
---]]----------------------------------
-
-
---[[-----------------
--- AceGUI
---]]-----------------
---local AceGUI = LibStub("AceGUI-3.0")
-
---[[-----------------
--- Lua APIs
---]]-----------------
-local format, pairs, tostring = string.format, pairs, tostring
-
---[[-----------------
--- WoW APIs
---]]-----------------
-local CreateFrame, UIParent = CreateFrame, UIParent
-
---[[-----------------
--- Frame Elements
---]]-----------------
-local FrameBackdrop = {
-	bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
-	edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
-	tile = true, tileSize = 16, edgeSize = 16,
-	insets = { left = 3, right = 3, top = 3, bottom = 3 }
-}
-
-
---[[-----------------
--- Widget Info
---]]-----------------
-local widgetType = "MultiSelect"
-local widgetVersion = 1
-
-
---[[-----------------
--- Event Code
---]]-----------------
-local function Label_OnEnter(label)
-	local self = label.obj
-	local value = label
-	self:Fire("OnLabelEnter", value)
-end
-
-local function Label_OnLeave(label)
-	local self = label.obj
-	local value = label
-	self:Fire("OnLabelEnter", value)
-end
-
-local function Label_OnClick(label)
-	local self = label.obj
-	local value = label
-	self:Fire("OnLabelClick", value)
-	AceGUI:ClearFocus()
-end
-
-
---[[-----------------
--- MultiSelect Code
---]]-----------------
-do
-	local function OnAcquire(self)  -- set up the default size
-		self:SetWidth(200)
-		self:SetHeight(400)
-	end
-	
-	local function SetWidth(self, w)  -- override the SetWidth function to include the labelframe
-		self.frame:SetWidth(w)
-		self.labelframe:SetWidth(w-33)
-	end	
-	
-	local function SetLabel(self, text)  -- sets the multiselect label text
-		self.label:SetText(text)
-	end
-	
-	local function SetMultiSelect(self, value)  -- set if multiple values can be selected simultaneously
-		self.multiselect = value
-	end
-	
-	local function AddItem(self, str, color)  -- add an item (create a new item label object)
-	    local color = color
-		local label = CreateFrame("Button", nil, self.labelframe)
-		label.selected = false
-		label.obj = self
-		label:SetHeight(18)
-		label:SetPoint("TOPLEFT", self.labelframe, "TOPLEFT", 0, -(getn(self.labels) * 18))
-		label:SetPoint("TOPRIGHT", self.labelframe, "TOPRIGHT", 0, -(getn(self.labels) * 18))
-		self.labels[getn(self.labels) + 1] = label
-		self.labelframe:SetHeight(getn(self.labels) * 18)
-		
-		local text = label:CreateFontString(nil,"OVERLAY","GameFontNormalSmall")
-		text:SetJustifyH("LEFT")
-		text:SetPoint("TOPLEFT",label,"TOPLEFT",5,0)
-		text:SetPoint("BOTTOMRIGHT",label,"BOTTOMRIGHT",-5,0)
-		if color ~= nil then
-		    text:SetTextColor(color.r,color.g,color.b)
-		end
-		text:SetText(str)
-		label.text = text
-		
-		local highlight = label:CreateTexture(nil, "OVERLAY")
-		highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
-		highlight:SetBlendMode("ADD")
-		highlight:SetHeight(14)
-		highlight:ClearAllPoints()
-		highlight:SetPoint("RIGHT",label,"RIGHT",0,0)
-		highlight:SetPoint("LEFT",label,"LEFT",0,0)
-		highlight:Hide()
-		label.highlight = highlight
-		
-		label:SetScript("OnEnter", function(this)
-			this.highlight:Show()
-			Label_OnEnter(this)
-		end)
-		label:SetScript("OnLeave", function(this)
-			if not this.selected then
-				this.highlight:Hide()
-			end
-		end)
-		label:SetScript("OnClick", function(this)
-			if not this.selected then
-				this.selected = true
-				if not self.multiselect then
-					for index, items in pairs(self.labels) do
-						if self.labels[index] ~= this and self.labels[index].selected then
-							self.labels[index].selected = false
-							self.labels[index].highlight:Hide()
-						end
-					end
-				end
-			else
-				this.selected = false
-			end
-			Label_OnClick(this)
-		end)
-	end
-	
-	local function GetItem(self, text)  -- find an object based on the text parameter
-		for _, value in pairs(self.labels) do
-			if value.text:GetText() == text then
-				return value
-			end
-		end
-		return nil
-	end
-	
-	local function GetText(self, value)  -- get the text of a label object
-		for _,item in pairs(self.labels) do
-			if value == item then
-				return item.text:GetText()
-			end
-		end
-		return nil
-	end
-	
-	local function SetText(self, value, text)  -- set the text of a label object
-		for _, item in pairs(self.labels) do
-			if value == item then
-				value.text:SetText(text)
-			end
-		end
-	end
-	
-	local function IsSelected(self, value)  -- return if the label object is currently selected
-		for _, item in pairs(self.labels) do
-			if value == item then
-				return item.selected
-			end
-		end
-		return nil
-	end
-	
-	local function GetSelected(self)  -- return a table of the currently selected label objects
-		local selectedList = {}
-		for _, item in pairs(self.labels) do
-			if item.selected then
-				table.insert(selectedList, item)
-			end
-		end
-		return selectedList
-	end
-		
-	local function SetItemList(self, list)  -- create new labels from a list of strings
-		for _,item in pairs(self.labels) do
-			item:Hide()
-			item:ClearAllPoints()
-		end
-		
-		self.labels = {}
-		
-		if list then
-			for _,item in pairs(list) do
-			    if type(item) == "string" then
-				    self:AddItem(item)
-                elseif type(item) == "table" then
-                    if item.string ~= nil and type(item.string) == "string" then
-                        if item.color ~= nil then
-                            if type(item.color) == "table" and item.color.r ~= nil and item.color.g ~= nil and item.color.b ~= nil then
-                                self:AddItem(item.string, item.color)
-                            else
-                                assert(false and "setitemlist: item.color is set, but nonsense")
-                            end
-                        else
-                            self:AddItem(item.string)
-                        end
-                    else
-                        assert( false and "setitemlist: item is table without .string member")
-                    end
-                else
-                    assert(false and "SetItemList: nonsense list entry")
-                end
-			end
-		end
-	end
-
-	local function RemoveItem(self, item)  -- delete an item
-		local function RedrawFrame()
-			for index,value in pairs(self.labels) do
-				value:SetPoint("TOPLEFT", self.labelframe, "TOPLEFT", 0, (-(index-1) * 18))
-				value:SetPoint("TOPRIGHT", self.labelframe, "TOPRIGHT", 0,(-(index-1) * 18))
-			end
-		end
-		
-		for index, value in pairs(self.labels) do
-			if value == item then
-				table.remove(self.labels, index)
-				item:Hide()
-				item:ClearAllPoints()
-				RedrawFrame()
-			end
-		end
-	end
-	
-	local function SetSelected(self, item, value)
-		if value then
-			if not self.multiselect then  -- test
-				for _, value in pairs(self.labels) do
-					value.selected = false
-					value.highlight:Hide()
-				end
-			end
-			item.selected = true
-			item.highlight:Show()
-		else
-			item.selected = false
-			item.highlight:Hide()
-		end
-	end
-	
-	local function Constructor()  -- widget constructor
-		local frame = CreateFrame("Frame", nil, UIParent)
-		local backdrop = CreateFrame("Frame", nil, frame)
-		local self = {}
-		local labels = {}
-		
-		self.type = widgetType
-		self.frame = frame
-		self.backdrop = backdrop
-		self.labels = {}
-		self.multiselect = true
-		frame.obj = self
-		
-		local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall")
-		label:SetJustifyH("LEFT")
-		label:SetPoint("TOPLEFT", 5, 0)
-		label:SetPoint("TOPRIGHT", -5, 0)
-		label:SetHeight(14)
-		label:SetText("MultiSelect")
-		self.label = label
-		
-		backdrop:SetBackdrop(FrameBackdrop)
-		backdrop:SetBackdropColor(0, 0, 0)
-		backdrop:SetBackdropBorderColor(0.4, 0.4, 0.4)
-		backdrop:SetPoint("TOPLEFT", frame, "TOPLEFT", 5, -14)
-		backdrop:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -5, 0)
-		
-		local scrollframe = CreateFrame("ScrollFrame", format("%s@%s@%s", widgetType, "ScrollFrame", tostring(self)), frame, "UIPanelScrollFrameTemplate")
-		scrollframe:SetPoint("TOPLEFT", backdrop, "TOPLEFT", 5, -6)
-		scrollframe:SetPoint("BOTTOMRIGHT", backdrop, "BOTTOMRIGHT", -28, 6)
-		scrollframe.obj = self
-		self.scrollframe = scrollframe
-		
-		local labelframe = CreateFrame("Frame", nil, scrollframe)
-		labelframe:SetAllPoints()
-		labelframe.obj = self
-		scrollframe:SetScrollChild(labelframe)
-		self.labelframe = labelframe
-
-		-- method listing
-		self.OnAcquire = OnAcquire
-		self.SetLabel = SetLabel
-		self.AddItem = AddItem
-		self.SetWidth  = SetWidth
-		self.SetMultiSelect = SetMultiSelect
-		self.SetItemList = SetItemList
-		self.GetItem = GetItem
-		self.RemoveItem = RemoveItem
-		self.GetText = GetText
-		self.SetText = SetText
-		self.IsSelected = IsSelected
-		self.GetSelected = GetSelected
-		self.SetSelected = SetSelected
-		
-		AceGUI:RegisterAsWidget(self)
-		return self
-	end
-	AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
-end
-