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@4: CyborgMMO_RatPageModel = { madcatzinc@0: new = function() madcatzinc@13: local self = {} madcatzinc@13: self.m_Mode = 1 madcatzinc@13: self.ObserverCount = 0 madcatzinc@0: self.ObserverList = {} madcatzinc@0: self.Data = {} madcatzinc@0: madcatzinc@13: for i=1,RAT7.MODES do madcatzinc@0: self.Data[i] = {} madcatzinc@13: for j=1,RAT7.BUTTONS do madcatzinc@13: self.Data[i][j] = {} madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.InitSaveData = function(data) madcatzinc@13: for i=1,RAT7.MODES do madcatzinc@13: if not data["Rat"][i] then madcatzinc@0: data["Rat"][i] = {} madcatzinc@0: end madcatzinc@13: for j=1,RAT7.BUTTONS do madcatzinc@13: if not data["Rat"][i][j] then madcatzinc@0: data["Rat"][i][j] = {} madcatzinc@0: end madcatzinc@0: end madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.LoadData = function() madcatzinc@15: CyborgMMO_DPrint("Loading...") madcatzinc@13: local data = CyborgMMO_GetSaveData() madcatzinc@0: madcatzinc@13: if not data["Rat"] then madcatzinc@0: data["Rat"] = {} madcatzinc@13: self.InitSaveData(data) madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.Data = data["Rat"] madcatzinc@13: if data then madcatzinc@13: for mode=1,RAT7.MODES do madcatzinc@13: for button=1,RAT7.BUTTONS do madcatzinc@13: if self.Data[mode][button] then madcatzinc@14: local object = CyborgMMO_WowObject.Create(self.Data[mode][button].Type, self.Data[mode][button].Detail, self.Data[mode][button].Subdetail) madcatzinc@13: self.SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@0: else madcatzinc@14: local object = CyborgMMO_WowObject.Create("", "", "") madcatzinc@13: self.SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@13: self.Data[mode][button] = object madcatzinc@0: end madcatzinc@0: end madcatzinc@0: end madcatzinc@13: self.UpdateObservers() madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SaveData = function() madcatzinc@15: CyborgMMO_DPrint("Saving...") madcatzinc@13: CyborgMMO_SetSaveData(self.Data, "Rat") madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SetMode = function(mode) madcatzinc@13: self.m_Mode = mode madcatzinc@13: self.UpdateObservers() madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetMode = function() madcatzinc@13: return self.m_Mode madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetData = function() madcatzinc@13: return self.Data,self.m_Mode madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetObjectOnButton = function(button) madcatzinc@13: if not self.Data[self.m_Mode][button] then madcatzinc@13: return nil madcatzinc@0: else madcatzinc@0: return self.Data[self.m_Mode][button] madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SetObjectOnButtonNoUpdate = function(button, mode, object) madcatzinc@15: -- CyborgMMO_DPrint("button = "..tostring(button).." mode = "..tostring(mode)) madcatzinc@13: self.Data[mode][button] = object madcatzinc@0: madcatzinc@13: if object then madcatzinc@13: object.SetBinding(CyborgMMO_WowCommands[((mode-1)*RAT7.BUTTONS)+button]) madcatzinc@0: if("callback" == object.Type) then madcatzinc@15: CyborgMMO_DPrint("trying to set texture") madcatzinc@13: local slot = getglobal("CyborgMMO_MainPageSlotListSlot"..button) madcatzinc@0: slot:SetNormalTexture(object.Texture) madcatzinc@0: end madcatzinc@0: else madcatzinc@15: CyborgMMO_DPrint("clearing "..button) madcatzinc@5: CyborgMMO_WowObject.ClearBinding(CyborgMMO_WowCommands[((mode-1)*RAT7.BUTTONS)+button]) madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SetObjectOnButton = function(button, mode, object) madcatzinc@13: self.SetObjectOnButtonNoUpdate(button, mode, object) madcatzinc@0: self.UpdateObservers() madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.AddObserver = function(view) madcatzinc@13: table.insert(self.ObserverList, view) madcatzinc@13: self.observerCount = #self.ObserverList madcatzinc@0: end madcatzinc@13: madcatzinc@0: self.GetAllObservers = function() madcatzinc@13: return self.ObserverList madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.UpdateObservers = function() madcatzinc@13: for i=1,#self.ObserverList do madcatzinc@0: self.ObserverList[i].Update(self.Data, self.m_Mode) madcatzinc@0: end madcatzinc@0: self.SaveData() madcatzinc@0: end madcatzinc@13: madcatzinc@13: return self madcatzinc@0: end, madcatzinc@0: madcatzinc@0: m_Instance = nil, madcatzinc@0: madcatzinc@0: Instance = function() madcatzinc@13: if not CyborgMMO_RatPageModel.m_Instance then madcatzinc@13: CyborgMMO_RatPageModel.m_Instance = CyborgMMO_RatPageModel.new() madcatzinc@0: end madcatzinc@13: return CyborgMMO_RatPageModel.m_Instance madcatzinc@13: end, madcatzinc@0: } madcatzinc@13: