madcatzinc@0: --~ 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@0: local RAT7 = { BUTTONS = 13, MODES = 3, SHIFT = 0} madcatzinc@0: madcatzinc@0: local MIDDLEMOUSE = 1; madcatzinc@0: madcatzinc@0: RatPageModel = { madcatzinc@0: new = function() madcatzinc@0: local self = {} madcatzinc@0: self.m_Mode = 1; madcatzinc@0: self.ObserverCount = 0; madcatzinc@0: self.ObserverList = {} madcatzinc@0: self.Data = {} madcatzinc@0: madcatzinc@0: for i = 1,RAT7.MODES do madcatzinc@0: self.Data[i] = {} madcatzinc@0: for j = 1, RAT7.BUTTONS do madcatzinc@0: self.Data[i][j] = {}; madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.InitSaveData = function(data) madcatzinc@0: for i = 1,RAT7.MODES do madcatzinc@0: if (nil == data["Rat"][i]) then madcatzinc@0: data["Rat"][i] = {} madcatzinc@0: end madcatzinc@0: for j = 1, RAT7.BUTTONS do madcatzinc@0: if (nil == 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: madcatzinc@0: self.LoadData = function() madcatzinc@0: msg("Loading...") madcatzinc@0: local data = GetSaveData(); madcatzinc@0: madcatzinc@0: madcatzinc@0: if (nil == data["Rat"]) then madcatzinc@0: data["Rat"] = {} madcatzinc@0: self.InitSaveData(data); madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.Data = data["Rat"] madcatzinc@0: if(data ~= nil) then madcatzinc@0: for mode = 1,RAT7.MODES do madcatzinc@0: for button = 1, RAT7.BUTTONS do madcatzinc@0: if(self.Data[mode][button] ~= nil) then madcatzinc@0: object = WowObject.Create(self.Data[mode][button].Type, self.Data[mode][button].Detail, self.Data[mode][button].Subdetail); madcatzinc@0: self.SetObjectOnButtonNoUpdate(button, mode, object); madcatzinc@0: else madcatzinc@0: object = WowObject.Create("", "", ""); madcatzinc@0: self.SetObjectOnButtonNoUpdate(button, mode, object); madcatzinc@0: self.Data[mode][button] = object; madcatzinc@0: end madcatzinc@0: end madcatzinc@0: end madcatzinc@0: self.UpdateObservers(); madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SaveData = function() madcatzinc@0: msg("Saving...") madcatzinc@0: SetSaveData(self.Data, "Rat"); madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SetMode = function(mode) madcatzinc@0: self.m_Mode = mode; madcatzinc@0: self.UpdateObservers(); madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetMode = function() madcatzinc@0: return self.m_Mode; madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetData = function() madcatzinc@0: return self.Data, self.m_Mode; madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetObjectOnButton = function(button) madcatzinc@0: if(nil == self.Data[self.m_Mode][button]) then madcatzinc@0: 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@0: --msg("button = "..tostring(button).." mode = "..tostring(mode)) madcatzinc@0: self.Data[mode][button] = object; madcatzinc@0: madcatzinc@0: if(nil ~= object) then madcatzinc@1: object.SetBinding(WowCommands[((mode-1)*RAT7.BUTTONS)+button]); madcatzinc@0: if("callback" == object.Type) then madcatzinc@0: msg("trying to set texture") madcatzinc@0: local slot = getglobal("defaultPageSlot"..button); madcatzinc@0: slot:SetNormalTexture(object.Texture) madcatzinc@0: end madcatzinc@0: else madcatzinc@0: msg("clearing "..button) madcatzinc@1: WowObject.ClearBinding(WowCommands[((mode-1)*RAT7.BUTTONS)+button]) madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.SetObjectOnButton = function(button, mode, object) madcatzinc@0: self.SetObjectOnButtonNoUpdate(button, mode, object); madcatzinc@0: self.UpdateObservers() madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.AddObserver = function(view) madcatzinc@0: table.insert(self.ObserverList,view) madcatzinc@0: self.observerCount = # self.ObserverList madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.GetAllObservers = function() madcatzinc@0: return self.ObserverList; madcatzinc@0: end madcatzinc@0: madcatzinc@0: self.UpdateObservers = function() madcatzinc@0: 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@0: return self; madcatzinc@0: end, madcatzinc@0: madcatzinc@0: m_Instance = nil, madcatzinc@0: madcatzinc@0: Instance = function() madcatzinc@0: if(nil == RatPageModel.m_Instance) then madcatzinc@0: RatPageModel.m_Instance = RatPageModel.new(); madcatzinc@0: end madcatzinc@0: return RatPageModel.m_Instance; madcatzinc@0: end madcatzinc@0: }