annotate RatPageModel.lua @ 34:6ce173840e68

Reworked the whole "wow object" system: - Only save what is strictly necessary. - Save appropriate persistent information for all objects (like spellIDs instead of spellBook+spellIndex). - Fixed Battle Pets objects (non-combat pets in pre-MoP). - Fixed item objects. - Cleaned and simplified most objects implementation. - Moved the settings and button profile to the root of the saved data, rather than in a per-character sub-table (that data is already tagged as saved per character). This should fix most issues with objects changing without user interaction on diverse occasions. Old profiles are not converted to the new system. This will come soon. Some issues persist due to the asynchronous loading of some informations: - Pet icons are never properly loaded from saved data. - Items are not properly loaded the first time the UI is started (a "/reload ui" or disconnect/connect cycle fixes this problem).
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 01:31:31 +0000
parents e8a004a4177b
children ce4ddefb68c2
rev   line source
madcatzinc@13 1 --~ Warcraft Plugin for Cyborg MMO7
madcatzinc@0 2 --~ Filename: RatPageModel.lua
madcatzinc@0 3 --~ Description: Code model of the MMO7 mouse
madcatzinc@0 4 --~ Copyright (C) 2012 Mad Catz Inc.
madcatzinc@0 5 --~ Author: Christopher Hooks
madcatzinc@0 6
madcatzinc@0 7 --~ This program is free software; you can redistribute it and/or
madcatzinc@0 8 --~ modify it under the terms of the GNU General Public License
madcatzinc@0 9 --~ as published by the Free Software Foundation; either version 2
madcatzinc@0 10 --~ of the License, or (at your option) any later version.
madcatzinc@0 11
madcatzinc@0 12 --~ This program is distributed in the hope that it will be useful,
madcatzinc@0 13 --~ but WITHOUT ANY WARRANTY; without even the implied warranty of
madcatzinc@0 14 --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
madcatzinc@0 15 --~ GNU General Public License for more details.
madcatzinc@0 16
madcatzinc@0 17 --~ You should have received a copy of the GNU General Public License
madcatzinc@0 18 --~ along with this program; if not, write to the Free Software
madcatzinc@0 19 --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
madcatzinc@0 20 -- Constants --
madcatzinc@0 21
madcatzinc@13 22 local RAT7 = {
madcatzinc@13 23 BUTTONS = 13,
madcatzinc@13 24 MODES = 3,
madcatzinc@13 25 SHIFT = 0,
madcatzinc@13 26 }
madcatzinc@0 27
madcatzinc@13 28 local MIDDLEMOUSE = 1
madcatzinc@0 29
madcatzinc@18 30 ------------------------------------------------------------------------------
madcatzinc@0 31
madcatzinc@18 32 local RatPageModel_methods = {}
madcatzinc@18 33 local RatPageModel_mt = {__index=RatPageModel_methods}
madcatzinc@18 34
madcatzinc@18 35 local function RatPageModel()
madcatzinc@18 36 local self = {}
madcatzinc@18 37 self.mode = 1
madcatzinc@18 38 self.observers = {}
madcatzinc@18 39 self.data = {}
madcatzinc@18 40
madcatzinc@18 41 for i=1,RAT7.MODES do
madcatzinc@18 42 self.data[i] = {}
madcatzinc@18 43 for j=1,RAT7.BUTTONS do
madcatzinc@18 44 self.data[i][j] = {}
madcatzinc@18 45 end
madcatzinc@18 46 end
madcatzinc@18 47
madcatzinc@18 48 setmetatable(self, RatPageModel_mt)
madcatzinc@18 49
madcatzinc@18 50 return self
madcatzinc@18 51 end
madcatzinc@18 52
madcatzinc@18 53 function RatPageModel_methods:InitSaveData(data)
madcatzinc@18 54 for i=1,RAT7.MODES do
madcatzinc@18 55 if not data["Rat"][i] then
madcatzinc@18 56 data["Rat"][i] = {}
madcatzinc@18 57 end
madcatzinc@18 58 for j=1,RAT7.BUTTONS do
madcatzinc@18 59 if not data["Rat"][i][j] then
madcatzinc@18 60 data["Rat"][i][j] = {}
madcatzinc@0 61 end
madcatzinc@0 62 end
madcatzinc@18 63 end
madcatzinc@18 64 end
madcatzinc@0 65
madcatzinc@18 66 function RatPageModel_methods:LoadData()
madcatzinc@18 67 CyborgMMO_DPrint("Loading...")
madcatzinc@18 68 local data = CyborgMMO_GetSaveData()
madcatzinc@18 69
madcatzinc@18 70 if not data["Rat"] then
madcatzinc@18 71 data["Rat"] = {}
madcatzinc@18 72 self:InitSaveData(data)
madcatzinc@18 73 end
madcatzinc@18 74
madcatzinc@18 75 self.data = data["Rat"]
madcatzinc@18 76 if data then
madcatzinc@18 77 for mode=1,RAT7.MODES do
madcatzinc@18 78 for button=1,RAT7.BUTTONS do
madcatzinc@18 79 if self.data[mode][button] then
madcatzinc@34 80 local object = CyborgMMO_CreateWowObject(self.data[mode][button].type, self.data[mode][button].detail, self.data[mode][button].subdetail)
madcatzinc@18 81 self:SetObjectOnButtonNoUpdate(button, mode, object)
madcatzinc@18 82 else
madcatzinc@34 83 local object = CyborgMMO_CreateWowObject()
madcatzinc@18 84 self:SetObjectOnButtonNoUpdate(button, mode, object)
madcatzinc@18 85 self.data[mode][button] = object
madcatzinc@0 86 end
madcatzinc@0 87 end
madcatzinc@0 88 end
madcatzinc@18 89 self:UpdateObservers()
madcatzinc@18 90 end
madcatzinc@18 91 end
madcatzinc@0 92
madcatzinc@18 93 function RatPageModel_methods:SaveData()
madcatzinc@18 94 CyborgMMO_DPrint("Saving...")
madcatzinc@34 95 CyborgMMO_SetRatSaveData(self.data)
madcatzinc@18 96 end
madcatzinc@0 97
madcatzinc@18 98 function RatPageModel_methods:SetMode(mode)
madcatzinc@18 99 self.mode = mode
madcatzinc@18 100 self:UpdateObservers()
madcatzinc@18 101 end
madcatzinc@0 102
madcatzinc@18 103 function RatPageModel_methods:GetMode()
madcatzinc@18 104 return self.mode
madcatzinc@18 105 end
madcatzinc@18 106
madcatzinc@18 107 function RatPageModel_methods:GetData()
madcatzinc@18 108 return self.data,self.mode
madcatzinc@18 109 end
madcatzinc@18 110
madcatzinc@18 111 function RatPageModel_methods:GetObjectOnButton(button)
madcatzinc@18 112 if not self.data[self.mode][button] then
madcatzinc@18 113 return nil
madcatzinc@18 114 else
madcatzinc@18 115 return self.data[self.mode][button]
madcatzinc@18 116 end
madcatzinc@18 117 end
madcatzinc@18 118
madcatzinc@18 119 function RatPageModel_methods:SetObjectOnButtonNoUpdate(button, mode, object)
madcatzinc@18 120 -- CyborgMMO_DPrint("button = "..tostring(button).." mode = "..tostring(mode))
madcatzinc@18 121 self.data[mode][button] = object
madcatzinc@18 122
madcatzinc@18 123 if object then
madcatzinc@29 124 object:SetBinding(CyborgMMO_ProfileKeyBindings[((mode-1)*RAT7.BUTTONS)+button])
madcatzinc@34 125 if "callback" == object.type then
madcatzinc@18 126 CyborgMMO_DPrint("trying to set texture")
madcatzinc@18 127 local slot = getglobal("CyborgMMO_MainPageSlotListSlot"..button)
madcatzinc@34 128 slot:SetNormalTexture(object.texture)
madcatzinc@0 129 end
madcatzinc@18 130 else
madcatzinc@18 131 CyborgMMO_DPrint("clearing "..button)
madcatzinc@29 132 CyborgMMO_ClearBinding(CyborgMMO_ProfileKeyBindings[((mode-1)*RAT7.BUTTONS)+button])
madcatzinc@18 133 end
madcatzinc@18 134 end
madcatzinc@0 135
madcatzinc@18 136 function RatPageModel_methods:SetObjectOnButton(button, mode, object)
madcatzinc@18 137 self:SetObjectOnButtonNoUpdate(button, mode, object)
madcatzinc@18 138 self:UpdateObservers()
madcatzinc@18 139 end
madcatzinc@0 140
madcatzinc@18 141 function RatPageModel_methods:AddObserver(view)
madcatzinc@18 142 table.insert(self.observers, view)
madcatzinc@18 143 end
madcatzinc@0 144
madcatzinc@18 145 function RatPageModel_methods:GetAllObservers()
madcatzinc@18 146 return self.observers
madcatzinc@18 147 end
madcatzinc@0 148
madcatzinc@18 149 function RatPageModel_methods:UpdateObservers()
madcatzinc@18 150 for i=1,#self.observers do
madcatzinc@18 151 self.observers[i].Update(self.data, self.mode)
madcatzinc@18 152 end
madcatzinc@18 153 self:SaveData()
madcatzinc@18 154 end
madcatzinc@0 155
madcatzinc@18 156 ------------------------------------------------------------------------------
madcatzinc@0 157
madcatzinc@18 158 CyborgMMO_RatPageModel = RatPageModel()
madcatzinc@0 159