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@51: self.objects = {} madcatzinc@18: madcatzinc@51: for mode=1,RAT7.MODES do madcatzinc@51: self.objects[mode] = {} madcatzinc@18: end madcatzinc@18: madcatzinc@18: setmetatable(self, RatPageModel_mt) madcatzinc@18: madcatzinc@18: return self madcatzinc@18: end madcatzinc@18: madcatzinc@51: function RatPageModel_methods:LoadData() madcatzinc@51: CyborgMMO_DPrint("Loading...") madcatzinc@51: local data = CyborgMMO_GetRatSaveData() madcatzinc@51: for mode=1,RAT7.MODES do madcatzinc@51: for button=1,RAT7.BUTTONS do madcatzinc@51: local buttonData = data and data[mode] and data[mode][button] madcatzinc@51: if buttonData and buttonData.type then madcatzinc@51: local object = CyborgMMO_CreateWowObject(buttonData.type, buttonData.detail, buttonData.subdetail) madcatzinc@51: self:SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@51: else madcatzinc@51: self:SetObjectOnButtonNoUpdate(button, mode, nil) madcatzinc@0: end madcatzinc@0: end madcatzinc@18: end madcatzinc@51: self:UpdateObservers() madcatzinc@18: end madcatzinc@0: madcatzinc@18: function RatPageModel_methods:SaveData() madcatzinc@18: CyborgMMO_DPrint("Saving...") madcatzinc@51: CyborgMMO_SetRatSaveData(self.objects) 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:GetObjectOnButton(button) madcatzinc@51: if not self.objects[self.mode][button] then madcatzinc@18: return nil madcatzinc@18: else madcatzinc@51: return self.objects[self.mode][button] madcatzinc@18: end madcatzinc@18: end madcatzinc@18: madcatzinc@18: function RatPageModel_methods:SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@51: self.objects[mode][button] = object madcatzinc@18: if object then madcatzinc@29: object:SetBinding(CyborgMMO_ProfileKeyBindings[((mode-1)*RAT7.BUTTONS)+button]) 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@51: self.observers[i].Update(self.objects, 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: