vatam

Untitled

Jul 6th, 2014
396
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 18.89 KB | None | 0 0
  1. --[[ $Id: AceGUIWidget-DropDown.lua 1101 2013-10-25 12:46:47Z nevcairiel $ ]]--
  2. local AceGUI = LibStub("AceGUI-3.0")
  3.  
  4. -- Lua APIs
  5. local min, max, floor = math.min, math.max, math.floor
  6. local select, pairs, ipairs, type = select, pairs, ipairs, type
  7. local tsort = table.sort
  8.  
  9. -- WoW APIs
  10. local PlaySound = PlaySound
  11. local UIParent, CreateFrame = UIParent, CreateFrame
  12. local _G = _G
  13.  
  14. -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
  15. -- List them here for Mikk's FindGlobals script
  16. -- GLOBALS: CLOSE
  17.  
  18. local function fixlevels(parent,...)
  19.     local i = 1
  20.     local child = select(i, ...)
  21.     while child do
  22.         child:SetFrameLevel(parent:GetFrameLevel()+1)
  23.         fixlevels(child, child:GetChildren())
  24.         i = i + 1
  25.         child = select(i, ...)
  26.     end
  27. end
  28.  
  29. local function fixstrata(strata, parent, ...)
  30.     local i = 1
  31.     local child = select(i, ...)
  32.     parent:SetFrameStrata(strata)
  33.     while child do
  34.         fixstrata(strata, child, child:GetChildren())
  35.         i = i + 1
  36.         child = select(i, ...)
  37.     end
  38. end
  39.  
  40. do
  41.     local widgetType = "Dropdown-Pullout"
  42.     local widgetVersion = 3
  43.    
  44.     --[[ Static data ]]--
  45.    
  46.     local backdrop = {
  47.         bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
  48.         edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
  49.         edgeSize = 32,
  50.         tileSize = 32,
  51.         tile = true,
  52.         insets = { left = 11, right = 12, top = 12, bottom = 11 },
  53.     }
  54.     local sliderBackdrop  = {
  55.         bgFile = "Interface\\Buttons\\UI-SliderBar-Background",
  56.         edgeFile = "Interface\\Buttons\\UI-SliderBar-Border",
  57.         tile = true, tileSize = 8, edgeSize = 8,
  58.         insets = { left = 3, right = 3, top = 3, bottom = 3 }
  59.     }
  60.  
  61.     local defaultWidth = 200
  62.     local defaultMaxHeight = 600
  63.    
  64.     --[[ UI Event Handlers ]]--
  65.    
  66.     -- HACK: This should be no part of the pullout, but there
  67.     --       is no other 'clean' way to response to any item-OnEnter
  68.     --       Used to close Submenus when an other item is entered
  69.     local function OnEnter(item)
  70.         local self = item.pullout
  71.         for k, v in ipairs(self.items) do
  72.             if v.CloseMenu and v ~= item then
  73.                 v:CloseMenu()
  74.             end
  75.         end
  76.     end
  77.    
  78.     -- See the note in Constructor() for each scroll related function
  79.     local function OnMouseWheel(this, value)
  80.         this.obj:MoveScroll(value)
  81.     end
  82.    
  83.     local function OnScrollValueChanged(this, value)
  84.         this.obj:SetScroll(value)
  85.     end
  86.    
  87.     local function OnSizeChanged(this)
  88.         this.obj:FixScroll()
  89.     end
  90.    
  91.     --[[ Exported methods ]]--
  92.    
  93.     -- exported
  94.     local function SetScroll(self, value)
  95.         local status = self.scrollStatus
  96.         local frame, child = self.scrollFrame, self.itemFrame
  97.         local height, viewheight = frame:GetHeight(), child:GetHeight()
  98.  
  99.         local offset
  100.         if height > viewheight then
  101.             offset = 0
  102.         else
  103.             offset = floor((viewheight - height) / 1000 * value)
  104.         end
  105.         child:ClearAllPoints()
  106.         child:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, offset)
  107.         child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", self.slider:IsShown() and -12 or 0, offset)
  108.         status.offset = offset
  109.         status.scrollvalue = value     
  110.     end
  111.    
  112.     -- exported
  113.     local function MoveScroll(self, value)
  114.         local status = self.scrollStatus
  115.         local frame, child = self.scrollFrame, self.itemFrame
  116.         local height, viewheight = frame:GetHeight(), child:GetHeight()
  117.  
  118.         if height > viewheight then
  119.             self.slider:Hide()
  120.         else
  121.             self.slider:Show()
  122.             local diff = height - viewheight
  123.             local delta = 1
  124.             if value < 0 then
  125.                 delta = -1
  126.             end
  127.             self.slider:SetValue(min(max(status.scrollvalue + delta*(1000/(diff/45)),0), 1000))
  128.         end
  129.     end
  130.    
  131.     -- exported
  132.     local function FixScroll(self)
  133.         local status = self.scrollStatus
  134.         local frame, child = self.scrollFrame, self.itemFrame
  135.         local height, viewheight = frame:GetHeight(), child:GetHeight()
  136.         local offset = status.offset or 0
  137.  
  138.         if viewheight < height then
  139.             self.slider:Hide()
  140.             child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, offset)
  141.             self.slider:SetValue(0)
  142.         else
  143.             self.slider:Show()         
  144.             local value = (offset / (viewheight - height) * 1000)
  145.             if value > 1000 then value = 1000 end
  146.             self.slider:SetValue(value)
  147.             self:SetScroll(value)
  148.             if value < 1000 then
  149.                 child:ClearAllPoints()
  150.                 child:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, offset)
  151.                 child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -12, offset)
  152.                 status.offset = offset
  153.             end
  154.         end
  155.     end
  156.    
  157.     -- exported, AceGUI callback
  158.     local function OnAcquire(self)
  159.         self.frame:SetParent(UIParent)
  160.         --self.itemFrame:SetToplevel(true)
  161.     end
  162.    
  163.     -- exported, AceGUI callback
  164.     local function OnRelease(self)
  165.         self:Clear()
  166.         self.frame:ClearAllPoints()
  167.         self.frame:Hide()
  168.     end
  169.    
  170.     -- exported
  171.     local function AddItem(self, item)
  172.         self.items[#self.items + 1] = item
  173.        
  174.         local h = #self.items * 16
  175.         self.itemFrame:SetHeight(h)
  176.         self.frame:SetHeight(min(h + 34, self.maxHeight)) -- +34: 20 for scrollFrame placement (10 offset) and +14 for item placement
  177.        
  178.         item.frame:SetPoint("LEFT", self.itemFrame, "LEFT")
  179.         item.frame:SetPoint("RIGHT", self.itemFrame, "RIGHT")
  180.        
  181.         item:SetPullout(self)
  182.         item:SetOnEnter(OnEnter)
  183.     end
  184.        
  185.     -- exported
  186.     local function Open(self, point, relFrame, relPoint, x, y)     
  187.         local items = self.items
  188.         local frame = self.frame
  189.         local itemFrame = self.itemFrame
  190.        
  191.         frame:SetPoint(point, relFrame, relPoint, x, y)
  192.  
  193.                
  194.         local height = 8
  195.         for i, item in pairs(items) do
  196.             if i == 1 then
  197.                 item:SetPoint("TOP", itemFrame, "TOP", 0, -2)
  198.             else
  199.                 item:SetPoint("TOP", items[i-1].frame, "BOTTOM", 0, 1)
  200.             end
  201.            
  202.             item:Show()
  203.            
  204.             height = height + 16
  205.         end
  206.         itemFrame:SetHeight(height)
  207.         fixstrata("TOOLTIP", frame, frame:GetChildren())
  208.         frame:Show()
  209.         self:Fire("OnOpen")
  210.     end
  211.    
  212.     -- exported
  213.     local function Close(self)
  214.         self.frame:Hide()
  215.         self:Fire("OnClose")
  216.     end
  217.    
  218.     -- exported
  219.     local function Clear(self)
  220.         local items = self.items
  221.         for i, item in pairs(items) do
  222.             AceGUI:Release(item)
  223.             items[i] = nil
  224.         end
  225.     end
  226.    
  227.     -- exported
  228.     local function IterateItems(self)
  229.         return ipairs(self.items)
  230.     end
  231.    
  232.     -- exported
  233.     local function SetHideOnLeave(self, val)
  234.         self.hideOnLeave = val
  235.     end
  236.    
  237.     -- exported
  238.     local function SetMaxHeight(self, height)
  239.         self.maxHeight = height or defaultMaxHeight
  240.         if self.frame:GetHeight() > height then
  241.             self.frame:SetHeight(height)
  242.         elseif (self.itemFrame:GetHeight() + 34) < height then
  243.             self.frame:SetHeight(self.itemFrame:GetHeight() + 34) -- see :AddItem
  244.         end
  245.     end
  246.        
  247.     -- exported
  248.     local function GetRightBorderWidth(self)
  249.         return 6 + (self.slider:IsShown() and 12 or 0)
  250.     end
  251.    
  252.     -- exported
  253.     local function GetLeftBorderWidth(self)
  254.         return 6
  255.     end
  256.    
  257.     --[[ Constructor ]]--
  258.    
  259.     local function Constructor()
  260.         local count = AceGUI:GetNextWidgetNum(widgetType)
  261.         local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent)
  262.         local self = {}
  263.         self.count = count
  264.         self.type = widgetType
  265.         self.frame = frame
  266.         frame.obj = self
  267.        
  268.         self.OnAcquire = OnAcquire
  269.         self.OnRelease = OnRelease
  270.  
  271.         self.AddItem = AddItem
  272.         self.Open    = Open
  273.         self.Close   = Close
  274.         self.Clear   = Clear
  275.         self.IterateItems = IterateItems
  276.         self.SetHideOnLeave = SetHideOnLeave
  277.  
  278.         self.SetScroll  = SetScroll
  279.         self.MoveScroll = MoveScroll
  280.         self.FixScroll  = FixScroll
  281.        
  282.         self.SetMaxHeight = SetMaxHeight
  283.         self.GetRightBorderWidth = GetRightBorderWidth
  284.         self.GetLeftBorderWidth = GetLeftBorderWidth
  285.        
  286.         self.items = {}
  287.        
  288.         self.scrollStatus = {
  289.             scrollvalue = 0,
  290.         }
  291.        
  292.         self.maxHeight = defaultMaxHeight
  293.            
  294.         frame:SetBackdrop(backdrop)
  295.         frame:SetBackdropColor(0, 0, 0)
  296.         frame:SetFrameStrata("FULLSCREEN_DIALOG")
  297.         frame:SetClampedToScreen(true)
  298.         frame:SetWidth(defaultWidth)
  299.         frame:SetHeight(self.maxHeight)
  300.         --frame:SetToplevel(true)
  301.    
  302.         -- NOTE: The whole scroll frame code is copied from the AceGUI-3.0 widget ScrollFrame
  303.         local scrollFrame = CreateFrame("ScrollFrame", nil, frame)
  304.         local itemFrame = CreateFrame("Frame", nil, scrollFrame)
  305.        
  306.         self.scrollFrame = scrollFrame
  307.         self.itemFrame = itemFrame
  308.        
  309.         scrollFrame.obj = self
  310.         itemFrame.obj = self
  311.        
  312.         local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame)
  313.         slider:SetOrientation("VERTICAL")
  314.         slider:SetHitRectInsets(0, 0, -10, 0)
  315.         slider:SetBackdrop(sliderBackdrop)
  316.         slider:SetWidth(8)
  317.         slider:SetThumbTexture("Interface\\Buttons\\UI-SliderBar-Button-Vertical")
  318.         slider:SetFrameStrata("FULLSCREEN_DIALOG")
  319.         self.slider = slider
  320.         slider.obj = self
  321.                    
  322.         scrollFrame:SetScrollChild(itemFrame)
  323.         scrollFrame:SetPoint("TOPLEFT", frame, "TOPLEFT", 6, -12)
  324.         scrollFrame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -6, 12)
  325.         scrollFrame:EnableMouseWheel(true)
  326.         scrollFrame:SetScript("OnMouseWheel", OnMouseWheel)
  327.         scrollFrame:SetScript("OnSizeChanged", OnSizeChanged)
  328.         scrollFrame:SetToplevel(true)
  329.         scrollFrame:SetFrameStrata("FULLSCREEN_DIALOG")
  330.        
  331.         itemFrame:SetPoint("TOPLEFT", scrollFrame, "TOPLEFT", 0, 0)
  332.         itemFrame:SetPoint("TOPRIGHT", scrollFrame, "TOPRIGHT", -12, 0)
  333.         itemFrame:SetHeight(400)
  334.         itemFrame:SetToplevel(true)
  335.         itemFrame:SetFrameStrata("FULLSCREEN_DIALOG")
  336.        
  337.         slider:SetPoint("TOPLEFT", scrollFrame, "TOPRIGHT", -16, 0)
  338.         slider:SetPoint("BOTTOMLEFT", scrollFrame, "BOTTOMRIGHT", -16, 0)
  339.         slider:SetScript("OnValueChanged", OnScrollValueChanged)
  340.         slider:SetMinMaxValues(0, 1000)
  341.         slider:SetValueStep(1)
  342.         slider:SetValue(0)
  343.        
  344.         scrollFrame:Show()
  345.         itemFrame:Show()
  346.         slider:Hide()
  347.                        
  348.         self:FixScroll()
  349.        
  350.         AceGUI:RegisterAsWidget(self)
  351.         return self
  352.     end
  353.    
  354.     AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
  355. end
  356.  
  357. do
  358.     local widgetType = "Dropdown"
  359.     local widgetVersion = 29
  360.    
  361.     --[[ Static data ]]--
  362.    
  363.     --[[ UI event handler ]]--
  364.    
  365.     local function Control_OnEnter(this)
  366.         this.obj.button:LockHighlight()
  367.         this.obj:Fire("OnEnter")
  368.     end
  369.    
  370.     local function Control_OnLeave(this)
  371.         this.obj.button:UnlockHighlight()
  372.         this.obj:Fire("OnLeave")
  373.     end
  374.  
  375.     local function Dropdown_OnHide(this)
  376.         local self = this.obj
  377.         if self.open then
  378.             self.pullout:Close()
  379.         end
  380.     end
  381.    
  382.     local function Dropdown_TogglePullout(this)
  383.         local self = this.obj
  384.         PlaySound("igMainMenuOptionCheckBoxOn") -- missleading name, but the Blizzard code uses this sound
  385.         if self.open then
  386.             self.open = nil
  387.             self.pullout:Close()
  388.             AceGUI:ClearFocus()
  389.         else
  390.             self.open = true
  391.             self.pullout:SetWidth(self.pulloutWidth or self.frame:GetWidth())
  392.             self.pullout:Open("TOPLEFT", self.frame, "BOTTOMLEFT", 0, self.label:IsShown() and -2 or 0)
  393.             AceGUI:SetFocus(self)
  394.         end
  395.     end
  396.    
  397.     local function OnPulloutOpen(this)
  398.         local self = this.userdata.obj
  399.         local value = self.value
  400.        
  401.         if not self.multiselect then
  402.             for i, item in this:IterateItems() do
  403.                 item:SetValue(item.userdata.value == value)
  404.             end
  405.         end
  406.        
  407.         self.open = true
  408.         self:Fire("OnOpened")
  409.     end
  410.  
  411.     local function OnPulloutClose(this)
  412.         local self = this.userdata.obj
  413.         self.open = nil
  414.         self:Fire("OnClosed")
  415.     end
  416.    
  417.     local function ShowMultiText(self)
  418.         local text
  419.         for i, widget in self.pullout:IterateItems() do
  420.             if widget.type == "Dropdown-Item-Toggle" then
  421.                 if widget:GetValue() then
  422.                     if text then
  423.                         text = text..", "..widget:GetText()
  424.                     else
  425.                         text = widget:GetText()
  426.                     end
  427.                 end
  428.             end
  429.         end
  430.         self:SetText(text)
  431.     end
  432.    
  433.     local function OnItemValueChanged(this, event, checked)
  434.         local self = this.userdata.obj
  435.        
  436.         if self.multiselect then
  437.             self:Fire("OnValueChanged", this.userdata.value, checked)
  438.             ShowMultiText(self)
  439.         else
  440.             if checked then
  441.                 self:SetValue(this.userdata.value)
  442.                 self:Fire("OnValueChanged", this.userdata.value)
  443.             else
  444.                 this:SetValue(true)
  445.             end
  446.             if self.open then  
  447.                 self.pullout:Close()
  448.             end
  449.         end
  450.     end
  451.    
  452.     --[[ Exported methods ]]--
  453.    
  454.     -- exported, AceGUI callback
  455.     local function OnAcquire(self)
  456.         local pullout = AceGUI:Create("Dropdown-Pullout")
  457.         self.pullout = pullout
  458.         pullout.userdata.obj = self
  459.         pullout:SetCallback("OnClose", OnPulloutClose)
  460.         pullout:SetCallback("OnOpen", OnPulloutOpen)
  461.         self.pullout.frame:SetFrameLevel(self.frame:GetFrameLevel() + 1)
  462.         fixlevels(self.pullout.frame, self.pullout.frame:GetChildren())
  463.        
  464.         self:SetHeight(44)
  465.         self:SetWidth(200)
  466.         self:SetLabel()
  467.         self:SetPulloutWidth(nil)
  468.     end
  469.    
  470.     -- exported, AceGUI callback
  471.     local function OnRelease(self)
  472.         if self.open then
  473.             self.pullout:Close()
  474.         end
  475.         AceGUI:Release(self.pullout)
  476.         self.pullout = nil
  477.        
  478.         self:SetText("")
  479.         self:SetDisabled(false)
  480.         self:SetMultiselect(false)
  481.        
  482.         self.value = nil
  483.         self.list = nil
  484.         self.open = nil
  485.         self.hasClose = nil
  486.        
  487.         self.frame:ClearAllPoints()
  488.         self.frame:Hide()
  489.     end
  490.    
  491.     -- exported
  492.     local function SetDisabled(self, disabled)
  493.         self.disabled = disabled
  494.         if disabled then
  495.             self.text:SetTextColor(0.5,0.5,0.5)
  496.             self.button:Disable()
  497.             self.label:SetTextColor(0.5,0.5,0.5)
  498.         else
  499.             self.button:Enable()
  500.             self.label:SetTextColor(1,.82,0)
  501.             self.text:SetTextColor(1,1,1)
  502.         end
  503.     end
  504.    
  505.     -- exported
  506.     local function ClearFocus(self)
  507.         if self.open then
  508.             self.pullout:Close()
  509.         end
  510.     end
  511.    
  512.     -- exported
  513.     local function SetText(self, text)
  514.         self.text:SetText(text or "")
  515.     end
  516.    
  517.     -- exported
  518.     local function SetLabel(self, text)
  519.         if text and text ~= "" then
  520.             self.label:SetText(text)
  521.             self.label:Show()
  522.             self.dropdown:SetPoint("TOPLEFT",self.frame,"TOPLEFT",-15,-14)
  523.             self:SetHeight(40)
  524.             self.alignoffset = 26
  525.         else
  526.             self.label:SetText("")
  527.             self.label:Hide()
  528.             self.dropdown:SetPoint("TOPLEFT",self.frame,"TOPLEFT",-15,0)
  529.             self:SetHeight(26)
  530.             self.alignoffset = 12
  531.         end
  532.     end
  533.    
  534.     -- exported
  535.     local function SetValue(self, value)
  536.         if self.list then
  537.             self:SetText(self.list[value] or "")
  538.         end
  539.         self.value = value
  540.     end
  541.    
  542.     -- exported
  543.     local function GetValue(self)
  544.         return self.value
  545.     end
  546.    
  547.     -- exported
  548.     local function SetItemValue(self, item, value)
  549.         if not self.multiselect then return end
  550.         for i, widget in self.pullout:IterateItems() do
  551.             if widget.userdata.value == item then
  552.                 if widget.SetValue then
  553.                     widget:SetValue(value)
  554.                 end
  555.             end
  556.         end
  557.         ShowMultiText(self)
  558.     end
  559.    
  560.     -- exported
  561.     local function SetItemDisabled(self, item, disabled)
  562.         for i, widget in self.pullout:IterateItems() do
  563.             if widget.userdata.value == item then
  564.                 widget:SetDisabled(disabled)
  565.             end
  566.         end
  567.     end
  568.    
  569.     local function AddListItem(self, value, text, itemType)
  570.         if not itemType then itemType = "Dropdown-Item-Toggle" end
  571.         local exists = AceGUI:GetWidgetVersion(itemType)
  572.         if not exists then error(("The given item type, %q, does not exist within AceGUI-3.0"):format(tostring(itemType)), 2) end
  573.  
  574.         local item = AceGUI:Create(itemType)
  575.         item:SetText(text)
  576.         item.userdata.obj = self
  577.         item.userdata.value = value
  578.         item:SetCallback("OnValueChanged", OnItemValueChanged)
  579.         self.pullout:AddItem(item)
  580.     end
  581.    
  582.     local function AddCloseButton(self)
  583.         if not self.hasClose then
  584.             local close = AceGUI:Create("Dropdown-Item-Execute")
  585.             close:SetText(CLOSE)
  586.             self.pullout:AddItem(close)
  587.             self.hasClose = true
  588.         end
  589.     end
  590.    
  591.     -- exported
  592.     local sortlist = {}
  593.     local function SetList(self, list, order, itemType)
  594.         self.list = list
  595.         self.pullout:Clear()
  596.         self.hasClose = nil
  597.         if not list then return end
  598.        
  599.         if type(order) ~= "table" then
  600.             for v in pairs(list) do
  601.                 sortlist[#sortlist + 1] = v
  602.             end
  603.             tsort(sortlist)
  604.            
  605.             for i, key in ipairs(sortlist) do
  606.                 AddListItem(self, key, list[key], itemType)
  607.                 sortlist[i] = nil
  608.             end
  609.         else
  610.             for i, key in ipairs(order) do
  611.                 AddListItem(self, key, list[key], itemType)
  612.             end
  613.         end
  614.         if self.multiselect then
  615.             ShowMultiText(self)
  616.             AddCloseButton(self)
  617.         end
  618.     end
  619.    
  620.     -- exported
  621.     local function AddItem(self, value, text, itemType)
  622.         if self.list then
  623.             self.list[value] = text
  624.             AddListItem(self, value, text, itemType)
  625.         end
  626.     end
  627.    
  628.     -- exported
  629.     local function SetMultiselect(self, multi)
  630.         self.multiselect = multi
  631.         if multi then
  632.             ShowMultiText(self)
  633.             AddCloseButton(self)
  634.         end
  635.     end
  636.    
  637.     -- exported
  638.     local function GetMultiselect(self)
  639.         return self.multiselect
  640.     end
  641.    
  642.     local function SetPulloutWidth(self, width)
  643.         self.pulloutWidth = width
  644.     end
  645.    
  646.     --[[ Constructor ]]--
  647.    
  648.     local function Constructor()
  649.         local count = AceGUI:GetNextWidgetNum(widgetType)
  650.         local frame = CreateFrame("Frame", nil, UIParent)
  651.         local dropdown = CreateFrame("Frame", "AceGUI30DropDown"..count, frame, "UIDropDownMenuTemplate")
  652.        
  653.         local self = {}
  654.         self.type = widgetType
  655.         self.frame = frame
  656.         self.dropdown = dropdown
  657.         self.count = count
  658.         frame.obj = self
  659.         dropdown.obj = self
  660.        
  661.         self.OnRelease   = OnRelease
  662.         self.OnAcquire   = OnAcquire
  663.        
  664.         self.ClearFocus  = ClearFocus
  665.  
  666.         self.SetText     = SetText
  667.         self.SetValue    = SetValue
  668.         self.GetValue    = GetValue
  669.         self.SetList     = SetList
  670.         self.SetLabel    = SetLabel
  671.         self.SetDisabled = SetDisabled
  672.         self.AddItem     = AddItem
  673.         self.SetMultiselect = SetMultiselect
  674.         self.GetMultiselect = GetMultiselect
  675.         self.SetItemValue = SetItemValue
  676.         self.SetItemDisabled = SetItemDisabled
  677.         self.SetPulloutWidth = SetPulloutWidth
  678.        
  679.         self.alignoffset = 26
  680.        
  681.         frame:SetScript("OnHide",Dropdown_OnHide)
  682.  
  683.         dropdown:ClearAllPoints()
  684.         dropdown:SetPoint("TOPLEFT",frame,"TOPLEFT",-15,0)
  685.         dropdown:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",17,0)
  686.         dropdown:SetScript("OnHide", nil)
  687.  
  688.         local left = _G[dropdown:GetName() .. "Left"]
  689.         local middle = _G[dropdown:GetName() .. "Middle"]
  690.         local right = _G[dropdown:GetName() .. "Right"]
  691.        
  692.         middle:ClearAllPoints()
  693.         right:ClearAllPoints()
  694.        
  695.         middle:SetPoint("LEFT", left, "RIGHT", 0, 0)
  696.         middle:SetPoint("RIGHT", right, "LEFT", 0, 0)
  697.         right:SetPoint("TOPRIGHT", dropdown, "TOPRIGHT", 0, 17)
  698.  
  699.         local button = _G[dropdown:GetName() .. "Button"]
  700.         self.button = button
  701.         button.obj = self
  702.         button:SetScript("OnEnter",Control_OnEnter)
  703.         button:SetScript("OnLeave",Control_OnLeave)
  704.         button:SetScript("OnClick",Dropdown_TogglePullout)
  705.        
  706.         local button_cover = CreateFrame("BUTTON",nil,self.frame)
  707.         button_cover.obj = self
  708.         button_cover:SetPoint("TOPLEFT",self.frame,"BOTTOMLEFT",0,25)
  709.         button_cover:SetPoint("BOTTOMRIGHT",self.frame,"BOTTOMRIGHT")
  710.         button_cover:SetScript("OnEnter",Control_OnEnter)
  711.         button_cover:SetScript("OnLeave",Control_OnLeave)
  712.         button_cover:SetScript("OnClick",Dropdown_TogglePullout)
  713.        
  714.         local text = _G[dropdown:GetName() .. "Text"]
  715.         self.text = text
  716.         text.obj = self
  717.         text:ClearAllPoints()
  718.         text:SetPoint("RIGHT", right, "RIGHT" ,-43, 2)
  719.         text:SetPoint("LEFT", left, "LEFT", 25, 2)
  720.        
  721.         local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall")
  722.         label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0)
  723.         label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0)
  724.         label:SetJustifyH("LEFT")
  725.         label:SetHeight(18)
  726.         label:Hide()
  727.         self.label = label
  728.  
  729.         AceGUI:RegisterAsWidget(self)
  730.         return self
  731.     end
  732.    
  733.     AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
  734. end
Advertisement
Comments
  • Cuiznxcn
    167 days
    # text 0.19 KB | 0 0
    1. Best t33n active cpx link daily updates!
    2.  
    3. Copy and paste the link in a new browser tab and then hit enter!
    4.  
    5. https://crazyporn.xxx/members/157354/?asgtbndr=1&play=true&spon=adworld&zone=400
    6.  
Add Comment
Please, Sign In to add comment