madcatzinc@13: --~ Warcraft Plugin for Cyborg MMO7 madcatzinc@0: --~ Filename: RatPageModel.lua madcatzinc@0: --~ Description: Code model of the MMO7 mouse madcatzinc@0: --~ Copyright (C) 2012 Mad Catz Inc. madcatzinc@0: --~ Author: Christopher Hooks madcatzinc@0: madcatzinc@0: --~ This program is free software; you can redistribute it and/or madcatzinc@0: --~ modify it under the terms of the GNU General Public License madcatzinc@0: --~ as published by the Free Software Foundation; either version 2 madcatzinc@0: --~ of the License, or (at your option) any later version. madcatzinc@0: madcatzinc@0: --~ This program is distributed in the hope that it will be useful, madcatzinc@0: --~ but WITHOUT ANY WARRANTY; without even the implied warranty of madcatzinc@0: --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the madcatzinc@0: --~ GNU General Public License for more details. madcatzinc@0: madcatzinc@0: --~ You should have received a copy of the GNU General Public License madcatzinc@0: --~ along with this program; if not, write to the Free Software madcatzinc@0: --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. madcatzinc@0: -- Constants -- madcatzinc@0: madcatzinc@13: local RAT7 = { madcatzinc@13: BUTTONS = 13, madcatzinc@13: MODES = 3, madcatzinc@13: SHIFT = 0, madcatzinc@13: } madcatzinc@0: madcatzinc@13: local MIDDLEMOUSE = 1 madcatzinc@0: madcatzinc@18: ------------------------------------------------------------------------------ madcatzinc@0: madcatzinc@18: local RatPageModel_methods = {} madcatzinc@18: local RatPageModel_mt = {__index=RatPageModel_methods} madcatzinc@18: madcatzinc@18: local function RatPageModel() madcatzinc@18: local self = {} madcatzinc@18: self.mode = 1 madcatzinc@18: self.observers = {} madcatzinc@18: self.data = {} madcatzinc@18: madcatzinc@18: for i=1,RAT7.MODES do madcatzinc@18: self.data[i] = {} madcatzinc@18: for j=1,RAT7.BUTTONS do madcatzinc@18: self.data[i][j] = {} madcatzinc@18: end madcatzinc@18: end madcatzinc@18: madcatzinc@18: setmetatable(self, RatPageModel_mt) madcatzinc@18: madcatzinc@18: return self madcatzinc@18: end madcatzinc@18: madcatzinc@18: function RatPageModel_methods:InitSaveData(data) madcatzinc@18: for i=1,RAT7.MODES do madcatzinc@18: if not data["Rat"][i] then madcatzinc@18: data["Rat"][i] = {} madcatzinc@18: end madcatzinc@18: for j=1,RAT7.BUTTONS do madcatzinc@18: if not data["Rat"][i][j] then madcatzinc@18: data["Rat"][i][j] = {} madcatzinc@0: end madcatzinc@0: end madcatzinc@18: end madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:LoadData() madcatzinc@18: CyborgMMO_DPrint("Loading...") madcatzinc@18: local data = CyborgMMO_GetSaveData() madcatzinc@18: madcatzinc@18: if not data["Rat"] then madcatzinc@18: data["Rat"] = {} madcatzinc@18: self:InitSaveData(data) madcatzinc@18: end madcatzinc@18: madcatzinc@18: self.data = data["Rat"] madcatzinc@18: if data then madcatzinc@18: for mode=1,RAT7.MODES do madcatzinc@18: for button=1,RAT7.BUTTONS do madcatzinc@39: local data = self.data[mode][button] madcatzinc@39: if data and data.type then madcatzinc@39: local object = CyborgMMO_CreateWowObject(data.type, data.detail, data.subdetail) madcatzinc@18: self:SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@18: else madcatzinc@39: self:SetObjectOnButtonNoUpdate(button, mode, nil) madcatzinc@0: end madcatzinc@0: end madcatzinc@0: end madcatzinc@18: self:UpdateObservers() madcatzinc@18: end madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:SaveData() madcatzinc@18: CyborgMMO_DPrint("Saving...") madcatzinc@34: CyborgMMO_SetRatSaveData(self.data) madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:SetMode(mode) madcatzinc@18: self.mode = mode madcatzinc@18: self:UpdateObservers() madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:GetMode() madcatzinc@18: return self.mode madcatzinc@18: end madcatzinc@18: madcatzinc@18: function RatPageModel_methods:GetData() madcatzinc@18: return self.data,self.mode madcatzinc@18: end madcatzinc@18: madcatzinc@18: function RatPageModel_methods:GetObjectOnButton(button) madcatzinc@18: if not self.data[self.mode][button] then madcatzinc@18: return nil madcatzinc@18: else madcatzinc@18: return self.data[self.mode][button] madcatzinc@18: end madcatzinc@18: end madcatzinc@18: madcatzinc@18: function RatPageModel_methods:SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@18: -- CyborgMMO_DPrint("button = "..tostring(button).." mode = "..tostring(mode)) madcatzinc@18: self.data[mode][button] = object madcatzinc@18: madcatzinc@18: if object then madcatzinc@29: object:SetBinding(CyborgMMO_ProfileKeyBindings[((mode-1)*RAT7.BUTTONS)+button]) madcatzinc@34: if "callback" == object.type then madcatzinc@18: CyborgMMO_DPrint("trying to set texture") madcatzinc@18: local slot = getglobal("CyborgMMO_MainPageSlotListSlot"..button) madcatzinc@34: slot:SetNormalTexture(object.texture) madcatzinc@0: end madcatzinc@18: else madcatzinc@29: CyborgMMO_ClearBinding(CyborgMMO_ProfileKeyBindings[((mode-1)*RAT7.BUTTONS)+button]) madcatzinc@18: end madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:SetObjectOnButton(button, mode, object) madcatzinc@39: if not object then madcatzinc@39: CyborgMMO_DPrint("clearing "..button) madcatzinc@39: end madcatzinc@18: self:SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@18: self:UpdateObservers() madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:AddObserver(view) madcatzinc@18: table.insert(self.observers, view) madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:GetAllObservers() madcatzinc@18: return self.observers madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:UpdateObservers() madcatzinc@18: for i=1,#self.observers do madcatzinc@18: self.observers[i].Update(self.data, self.mode) madcatzinc@18: end madcatzinc@18: self:SaveData() madcatzinc@18: end madcatzinc@0: madcatzinc@18: ------------------------------------------------------------------------------ madcatzinc@0: madcatzinc@18: CyborgMMO_RatPageModel = RatPageModel() madcatzinc@0: