Mercurial > wow > cyborg-mmo7
diff RatPageModel.lua @ 0:bf9220814fb5
The first version of the Cyborg MMO7 addon for warcraft
author | madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09 |
---|---|
date | Tue, 24 Jan 2012 17:14:21 +0000 |
parents | |
children | a4e2eaf9cad9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RatPageModel.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,157 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: RatPageModel.lua +--~ Description: Code model of the MMO7 mouse +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +-- Constants -- + +local RAT7 = { BUTTONS = 13, MODES = 3, SHIFT = 0} + +local MIDDLEMOUSE = 1; + +RatPageModel = { + new = function() + local self = {} + self.m_Mode = 1; + self.ObserverCount = 0; + self.ObserverList = {} + self.Data = {} + + for i = 1,RAT7.MODES do + self.Data[i] = {} + for j = 1, RAT7.BUTTONS do + self.Data[i][j] = {}; + end + end + + self.InitSaveData = function(data) + for i = 1,RAT7.MODES do + if (nil == data["Rat"][i]) then + data["Rat"][i] = {} + end + for j = 1, RAT7.BUTTONS do + if (nil == data["Rat"][i][j]) then + data["Rat"][i][j] = {} + end + end + end + end + + + self.LoadData = function() + msg("Loading...") + local data = GetSaveData(); + + + if (nil == data["Rat"]) then + data["Rat"] = {} + self.InitSaveData(data); + end + + self.Data = data["Rat"] + if(data ~= nil) then + for mode = 1,RAT7.MODES do + for button = 1, RAT7.BUTTONS do + if(self.Data[mode][button] ~= nil) then + object = WowObject.Create(self.Data[mode][button].Type, self.Data[mode][button].Detail, self.Data[mode][button].Subdetail); + self.SetObjectOnButtonNoUpdate(button, mode, object); + else + object = WowObject.Create("", "", ""); + self.SetObjectOnButtonNoUpdate(button, mode, object); + self.Data[mode][button] = object; + end + end + end + self.UpdateObservers(); + end + end + + self.SaveData = function() + msg("Saving...") + SetSaveData(self.Data, "Rat"); + end + + self.SetMode = function(mode) + self.m_Mode = mode; + self.UpdateObservers(); + end + + self.GetMode = function() + return self.m_Mode; + end + + self.GetData = function() + return self.Data, self.m_Mode; + end + + self.GetObjectOnButton = function(button) + if(nil == self.Data[self.m_Mode][button]) then + return nil; + else + return self.Data[self.m_Mode][button] + end + end + + self.SetObjectOnButtonNoUpdate = function(button, mode, object) + --msg("button = "..tostring(button).." mode = "..tostring(mode)) + self.Data[mode][button] = object; + + if(nil ~= object) then + object.SetBinding(WowCommands[GetLocale()][((mode-1)*RAT7.BUTTONS)+button]); + if("callback" == object.Type) then + msg("trying to set texture") + local slot = getglobal("defaultPageSlot"..button); + slot:SetNormalTexture(object.Texture) + end + else + msg("clearing "..button) + WowObject.ClearBinding(WowCommands[GetLocale()][((mode-1)*RAT7.BUTTONS)+button]) + end + end + + self.SetObjectOnButton = function(button, mode, object) + self.SetObjectOnButtonNoUpdate(button, mode, object); + self.UpdateObservers() + end + + self.AddObserver = function(view) + table.insert(self.ObserverList,view) + self.observerCount = # self.ObserverList + end + + self.GetAllObservers = function() + return self.ObserverList; + end + + self.UpdateObservers = function() + for i = 1, (# self.ObserverList) do + self.ObserverList[i].Update(self.Data, self.m_Mode) + end + self.SaveData() + end + return self; + end, + + m_Instance = nil, + + Instance = function() + if(nil == RatPageModel.m_Instance) then + RatPageModel.m_Instance = RatPageModel.new(); + end + return RatPageModel.m_Instance; + end +}