Guest User

Untitled

a guest
Mar 22nd, 2015
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.50 KB | None | 0 0
  1.  
  2.  
  3. local ADDON_NAME    = "Click4Info"
  4.  
  5.  
  6. local DEBUG_MODE    = true
  7. local MAX_SEARCH_RESULTS = 250
  8. local SearchCounter = 0
  9. local VERSION_CODE  = 0.2
  10. local VERSION_SV    = 0.1
  11. local ROW_TYPE_ID   = 1
  12. local FREE_MOUSE    = false
  13. local CURRENT_PANEL = "favorites"
  14. local SEARCH_TYPE   = nil
  15. local CASE_SENS     = false
  16. local SEARCH_IN_PROGRESS = false
  17.  
  18. local colorRed          = "|cFF0000"    -- Red
  19. local colorDrkOrange    = "|cFFA500"    -- Dark Orange
  20. local colorTeal         = "|c00FFFF"    -- Addon Name color
  21. local colorYellow       = "|cFFFF00"    -- yellow
  22.  
  23. ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_BTN_FAVORITES", "Favorite Scripts")
  24. ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_BTN_ALL", "All Scripts")
  25. ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_BTN_FUNCTION", "Function Search")
  26. ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_BTN_CONSTANT", "Constant Search")
  27. ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_BTN_VALUE", "Value Search")
  28.  
  29.  
  30.  
  31. local DevelopIt = ZO_Object:New()
  32.  
  33.  
  34. local CLICK4INFO_FILTER_DATA = {
  35.     [1] = {
  36.         normal          = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  37.         pressed         = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  38.         highlight       = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  39.         disabled        = "/esoui/art/icons/poi/poi_wayshrine_incomplete.dds",
  40.         tooltip         = SI_BINDING_NAME_CLICK4INFO_BTN_FAVORITES,
  41.         descriptor      = 1,
  42.         panelType       = "favorites",
  43.         searchType      = "sdfdsf",
  44.         callback        = ChangePanel,
  45.     },
  46.     [2] = {
  47.         normal          = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  48.         pressed         = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  49.         highlight       = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  50.         disabled        = "/esoui/art/icons/poi/poi_wayshrine_incomplete.dds",
  51.         tooltip         = SI_BINDING_NAME_CLICK4INFO_BTN_ALL,
  52.         descriptor      = 2,
  53.         panelType       = "all",
  54.         callback        = ChangePanel,
  55.     },
  56.     [3] = {
  57.         normal          = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  58.         pressed         = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  59.         highlight       = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  60.         disabled        = "/esoui/art/icons/poi/poi_wayshrine_incomplete.dds",
  61.         tooltip         = SI_BINDING_NAME_CLICK4INFO_BTN_FUNCTION,
  62.         descriptor      = 3,
  63.         panelType       = "functions",
  64.         searchType      = "function",
  65.         callback        = ChangePanel,
  66.     },
  67.     [4] = {
  68.         normal          = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  69.         pressed         = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  70.         highlight       = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  71.         disabled        = "/esoui/art/icons/poi/poi_wayshrine_incomplete.dds",
  72.         tooltip         = SI_BINDING_NAME_CLICK4INFO_BTN_CONSTANT,
  73.         descriptor      = 4,
  74.         panelType       = "constants",
  75.         searchType      = "number",
  76.         callback        = ChangePanel,
  77.     },
  78.     [5] = {
  79.         normal          = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  80.         pressed         = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  81.         highlight       = "/esoui/art/icons/poi/poi_wayshrine_complete.dds",
  82.         disabled        = "/esoui/art/icons/poi/poi_wayshrine_incomplete.dds",
  83.         tooltip         = SI_BINDING_NAME_CLICK4INFO_BTN_VALUE,
  84.         descriptor      = 5,
  85.         panelType       = "value",
  86.         callback        = ChangePanel,
  87.     },
  88. }
  89.  
  90.  
  91. local function debugMsg(msg)
  92.     if not DEBUG_MODE then return end
  93.    
  94.     d(msg)
  95. end
  96.  
  97. local function CameraChanged()
  98.     if not IsPlayerActivated() then return end
  99.    
  100.     SetGameCameraUIMode(FREE_MOUSE)
  101. end
  102.  
  103.  
  104. local function SetupMenuBar()
  105.     local menuBar = CLICK4INFO.menuBar
  106.     ZO_MenuBar_ClearButtons(menuBar)
  107.    
  108.     for _, filterInfo in ipairs(CLICK4INFO_FILTER_DATA) do
  109.         local btn = ZO_MenuBar_AddButton(menuBar, filterInfo)
  110.     end
  111. end
  112.  
  113. -- RowControl callback
  114. local function setupDataRow(rowControl, data, scrollList)
  115.     local label = rowControl:GetNamedChild("Label")
  116.     local name, value
  117.    
  118.     if data.key then
  119.         name = data.key
  120.     elseif data.scriptName then
  121.         name = data.scriptName
  122.     end
  123.    
  124.     label:SetText(name)
  125. end
  126.    
  127.    
  128. Click4Info = ZO_Object:New()
  129.  
  130. -- Setup WAYPOINTIT, create all constants.
  131. function Click4Info:New()
  132.     local obj = ZO_Object.New(self)
  133.    
  134.     obj.name            = ADDON_NAME
  135.     obj.SavedVarVersion = VERSION_SV
  136.     obj.CodeVersion     = VERSION_CODE
  137.  
  138.     -----------------------------------------------------
  139.     -- Bind windows to obj
  140.     obj.mainWin         = Click4InfoWin
  141.     obj.scrollList      = Click4InfoWinScrollList
  142.     obj.menuBar         = Click4InfoWinMenuBar
  143.     obj.caseSens        = Click4InfoWinCaseSens
  144.     obj.scriptWin       = AddScriptWin
  145.    
  146.     obj.nameEditBox     = AddScriptWinNameEditBox
  147.     obj.scriptEditBox   = AddScriptWinScriptEditBox
  148.     -----------------------------------------------------
  149.    
  150.     return obj
  151. end
  152.  
  153. -- Initialize everything else
  154. function Click4Info:Initialize()
  155.     local defaultSavedVars = {
  156.         scripts = {}
  157.     }
  158.     local BUTTON_HEIGHT = 50
  159.     self.sv = ZO_SavedVars:NewAccountWide("Click4InfoSavedVars", self.SavedVarVersion, nil, defaultSavedVars)
  160.  
  161.     ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_FREE_MOUSE", "Free Mouse")
  162.     ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_ZGOO_MOUSE", "/zgoo Mouse")
  163.     ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_RELOADUI", "ReloadUI")
  164.     ZO_CreateStringId("SI_BINDING_NAME_CLICK4INFO_TOGGLE_WINDOW", "Toggle Window")
  165.    
  166.     SetupMenuBar()
  167.     ZO_ScrollList_AddDataType(self.scrollList, ROW_TYPE_ID, "Click4InfoRowControl", BUTTON_HEIGHT, setupDataRow)
  168.    
  169.     local menuBarObject = self.menuBar.m_object
  170.     local buttonObject = menuBarObject:ButtonObjectForDescriptor(1)
  171.     menuBarObject:SetClickedButton(buttonObject, true)
  172.  
  173.     self:SetAll()
  174.    
  175.     EVENT_MANAGER:RegisterForEvent(Click4Info.name, EVENT_GAME_CAMERA_DEACTIVATED, CameraChanged)
  176.     EVENT_MANAGER:RegisterForEvent(Click4Info.name, EVENT_GAME_CAMERA_UI_MODE_CHANGED, CameraChanged)
  177. end
  178.  
  179.  
  180. function Click4Info:UpdateScrollList(sourceTable)
  181.     --if self.mainWin:IsHidden() or not sourceTable then return end
  182.     local next = next
  183.     --if next(sourceTable) ~= nil then return end
  184.    
  185.     debugMsg("Passed return checks")
  186.     local scrollList    = self.scrollList
  187.     local dataList      = ZO_ScrollList_GetDataList(scrollList)
  188.     local dataTable     = sourceTable
  189.    
  190.     ZO_ScrollList_Clear(scrollList)
  191.    
  192.     -- Populate the new dataList
  193.     for key, rowData in zo_insecurePairs(dataTable) do
  194.         debugMsg("Adding Row Entry")
  195.         local entry = ZO_ScrollList_CreateDataEntry(ROW_TYPE_ID, rowData, 1)
  196.         table.insert(dataList, entry)
  197.     end
  198.    
  199.     --[[
  200.     table.sort(dataList, function(objA, objB)
  201.         if objA.data.key < objB.data.key then return true end
  202.         return false
  203.     end)
  204.     --]]
  205.     debugMsg("Committing")
  206.     ZO_ScrollList_Commit(scrollList)
  207. end
  208.  
  209.  
  210. function Click4Info:SetAll()
  211.     local allScripts = self.sv.scripts
  212.    
  213.     self:UpdateScrollList(allScripts)
  214. end
  215.  
  216. function Click4Info:GetFavorites()
  217.     local allScripts = self.sv.scripts
  218.     local favorites = {}
  219.    
  220.     for k,v in pairs(allScripts) do
  221.         if v.favorite then
  222.             table.insert(favorites, v)
  223.         end
  224.     end
  225.     return favorites
  226. end
  227.  
  228. function Click4Info:SetFavorites()
  229.     local favorites = self:GetFavorites()
  230.    
  231.     self:UpdateScrollList(favorites)
  232. end
  233.  
  234. function Click4Info:GetSearchTable()
  235.     if CURRENT_PANEL == "favorites" then
  236.         return self:GetFavorites()
  237.        
  238.     elseif CURRENT_PANEL == "all" then
  239.         return self.sv.scripts
  240.     else
  241.         return _G
  242.     end
  243. end
  244.  
  245. local function DoFavoritesSearch(text, searchType)
  246.  
  247. end
  248. local function DoAllSearch(text, searchType)
  249.  
  250. end
  251. local function GetCaseSens()
  252.     if CLICK4INFO.caseSens:GetState() == BSTATE_PRESSED then
  253.         return true
  254.     end
  255.     return false
  256. end
  257. local function DoLowerSearch(text, searchType)
  258.     local searchTable   = CLICK4INFO:GetSearchTable()
  259.     local searchResults = {}
  260.     local searchText = string.lower(text)
  261.    
  262.     for key, value in zo_insecurePairs(_G) do
  263.         if not searchType or type(value) == searchType then
  264.             if string.lower(key):find(searchText) then
  265.                 table.insert(searchResults, {["key"] = key, ["value"] = value})
  266.             end
  267.         end
  268.     end
  269.     return searchResults
  270. end
  271. local function DoCaseSearch(text, searchType)
  272.     local searchTable   = CLICK4INFO:GetSearchTable()
  273.     local searchResults = {}
  274.    
  275.     for key, value in zo_insecurePairs(searchTable) do
  276.         if not searchType or type(value) == searchType then
  277.             if key:find(text) then
  278.                 table.insert(searchResults, {["key"] = key, ["value"] = value})
  279.             end
  280.         end
  281.     end
  282.     return searchResults
  283. end
  284.  
  285. local function DoValueSearch(text)
  286.     local searchTable   = CLICK4INFO:GetSearchTable()
  287.     local searchResults = {}
  288.     local searchNumber = tonumber(text)
  289.    
  290.     for key, value in zo_insecurePairs(searchTable) do
  291.         if type(value) == "number" and value == searchNumber then
  292.             table.insert(searchResults, {["key"] = key, ["value"] = value})
  293.         end
  294.     end
  295.    
  296.     return searchResults
  297. end
  298.  
  299. function Click4Info:SetSearch(text, searchType)
  300.     local searchResults = {}
  301.     local panelType     = CURRENT_PANEL
  302.    
  303.     if self.caseSens:GetState() == BSTATE_PRESSED then
  304.         bCaseSens = true
  305.     end
  306.    
  307.     if CURRENT_PANEL == "value" then
  308.         searchResults = DoValueSearch(text)
  309.     elseif bCaseSens then
  310.         searchResults = DoCaseSearch(text, searchType)
  311.     else
  312.         searchResults = DoLowerSearch(text, searchType)
  313.     end
  314.  
  315.    
  316.     --[[
  317.         panelType       = "favorites",
  318.         panelType       = "all",
  319.         panelType       = "functions"
  320.         panelType       = "constants",
  321.         panelType       = "value",
  322.     --]]
  323.    
  324.    
  325.     self:UpdateScrollList(searchResults)
  326. end
  327.  
  328. function Click4Info_Search(self)
  329.     if SEARCH_IN_PROGRESS then return end
  330.     SEARCH_IN_PROGRESS = true
  331.     local text = self:GetText()
  332.     if not (text and type(text)=="string" and text ~= "") then return end
  333.    
  334.     CLICK4INFO:SetSearch(text, SEARCH_TYPE)
  335.     SEARCH_IN_PROGRESS = false
  336. end
  337.  
  338.  
  339.  
  340. -------------------------------------------------------------------
  341. --  OnAddOnLoaded  --
  342. -------------------------------------------------------------------
  343. local function OnAddOnLoaded(event, addonName)
  344.     if addonName == ADDON_NAME then
  345.         CLICK4INFO = Click4Info:New()
  346.         CLICK4INFO:Initialize()
  347.     end
  348. end
  349. -------------------------------------------------------------------
  350. -------------------------------------------------------------------
  351.  
  352. ---------------------------------------------------------------------
  353. --  Register Events --
  354. ---------------------------------------------------------------------
  355. EVENT_MANAGER:RegisterForEvent(ADDON_NAME, EVENT_ADD_ON_LOADED, OnAddOnLoaded)
  356.  
  357. function Click4Info_RowSelect(self, button, upInside)
  358.     if not upInside then return end
  359.    
  360.     if button == 2 then
  361.         debugMsg("btn 2")
  362.     elseif button == 1 then
  363.         debugMsg("btn 1")
  364.     end
  365. end
  366.  
  367. function Click4Info_Toggle_AddScriptWin(self)
  368.     local bHide = not CLICK4INFO.scriptWin:IsHidden()
  369.     CLICK4INFO.scriptWin:SetHidden(bHide)
  370. end
  371.  
  372. local function DoesScriptNameExist(scriptName)
  373.     local scripts = CLICK4INFO.sv.scripts
  374.     for name, script in pairs(scripts) do
  375.         if name == scriptName then
  376.             return true
  377.         end
  378.     end
  379.     return false
  380. end
  381.  
  382. function Click4Info_AddScript(self)
  383.     local scriptName = CLICK4INFO.nameEditBox:GetText()
  384.     local script = CLICK4INFO.scriptEditBox:GetText()
  385.    
  386.     if not scriptName or scriptName == "" then return end
  387.     if not script or script == "" then return end
  388.    
  389.     debugMsg("Adding Script")
  390.     -- Add a check to see if it already exists
  391.     if not DoesScriptNameExist(scriptName) then
  392.         table.insert(CLICK4INFO.sv.scripts, {["scriptName"] = scriptName, ["script"] = script})
  393.     end
  394. end
  395.  
  396. function Click4Info_ChangePanel(self, button)
  397.     local data = self.m_object.m_buttonData
  398.    
  399.     CURRENT_PANEL   = data.panelType
  400.     SEARCH_TYPE     = data.searchType
  401.    
  402.     if data.panelType == "all" then
  403.         CLICK4INFO:SetAll()
  404.     elseif data.panelType == "favorites" then
  405.         CLICK4INFO:SetFavorites()
  406.     end
  407. end
  408.  
  409. function Click4Info_FreeMouse()
  410.     FREE_MOUSE = not FREE_MOUSE
  411.     CameraChanged()
  412. end
  413. function Click4Info_Toggle_Window()
  414.     local bSetHidden = not CLICK4INFO.mainWin:IsHidden()
  415.     CLICK4INFO.mainWin:SetHidden(bSetHidden)
  416. end
Advertisement
Add Comment
Please, Sign In to add comment