comparison RatPageModel.lua @ 18:cccc7661a2e6

Simplified the Rat page model and controller object models.
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 01:30:11 +0000
parents 80192bc4a108
children b7074b47cfc7
comparison
equal deleted inserted replaced
17:e4dec2d465f5 18:cccc7661a2e6
25 SHIFT = 0, 25 SHIFT = 0,
26 } 26 }
27 27
28 local MIDDLEMOUSE = 1 28 local MIDDLEMOUSE = 1
29 29
30 CyborgMMO_RatPageModel = { 30 ------------------------------------------------------------------------------
31 new = function()
32 local self = {}
33 self.m_Mode = 1
34 self.ObserverCount = 0
35 self.ObserverList = {}
36 self.Data = {}
37 31
38 for i=1,RAT7.MODES do 32 local RatPageModel_methods = {}
39 self.Data[i] = {} 33 local RatPageModel_mt = {__index=RatPageModel_methods}
40 for j=1,RAT7.BUTTONS do 34
41 self.Data[i][j] = {} 35 local function RatPageModel()
36 local self = {}
37 self.mode = 1
38 self.observers = {}
39 self.data = {}
40
41 for i=1,RAT7.MODES do
42 self.data[i] = {}
43 for j=1,RAT7.BUTTONS do
44 self.data[i][j] = {}
45 end
46 end
47
48 setmetatable(self, RatPageModel_mt)
49
50 return self
51 end
52
53 function RatPageModel_methods:InitSaveData(data)
54 for i=1,RAT7.MODES do
55 if not data["Rat"][i] then
56 data["Rat"][i] = {}
57 end
58 for j=1,RAT7.BUTTONS do
59 if not data["Rat"][i][j] then
60 data["Rat"][i][j] = {}
42 end 61 end
43 end 62 end
63 end
64 end
44 65
45 self.InitSaveData = function(data) 66 function RatPageModel_methods:LoadData()
46 for i=1,RAT7.MODES do 67 CyborgMMO_DPrint("Loading...")
47 if not data["Rat"][i] then 68 local data = CyborgMMO_GetSaveData()
48 data["Rat"][i] = {} 69
49 end 70 if not data["Rat"] then
50 for j=1,RAT7.BUTTONS do 71 data["Rat"] = {}
51 if not data["Rat"][i][j] then 72 self:InitSaveData(data)
52 data["Rat"][i][j] = {} 73 end
53 end 74
75 self.data = data["Rat"]
76 if data then
77 for mode=1,RAT7.MODES do
78 for button=1,RAT7.BUTTONS do
79 if self.data[mode][button] then
80 local object = CyborgMMO_WowObject.Create(self.data[mode][button].Type, self.data[mode][button].Detail, self.data[mode][button].Subdetail)
81 self:SetObjectOnButtonNoUpdate(button, mode, object)
82 else
83 local object = CyborgMMO_WowObject.Create("", "", "")
84 self:SetObjectOnButtonNoUpdate(button, mode, object)
85 self.data[mode][button] = object
54 end 86 end
55 end 87 end
56 end 88 end
89 self:UpdateObservers()
90 end
91 end
57 92
58 self.LoadData = function() 93 function RatPageModel_methods:SaveData()
59 CyborgMMO_DPrint("Loading...") 94 CyborgMMO_DPrint("Saving...")
60 local data = CyborgMMO_GetSaveData() 95 CyborgMMO_SetSaveData(self.data, "Rat")
96 end
61 97
62 if not data["Rat"] then 98 function RatPageModel_methods:SetMode(mode)
63 data["Rat"] = {} 99 self.mode = mode
64 self.InitSaveData(data) 100 self:UpdateObservers()
65 end 101 end
66 102
67 self.Data = data["Rat"] 103 function RatPageModel_methods:GetMode()
68 if data then 104 return self.mode
69 for mode=1,RAT7.MODES do 105 end
70 for button=1,RAT7.BUTTONS do 106
71 if self.Data[mode][button] then 107 function RatPageModel_methods:GetData()
72 local object = CyborgMMO_WowObject.Create(self.Data[mode][button].Type, self.Data[mode][button].Detail, self.Data[mode][button].Subdetail) 108 return self.data,self.mode
73 self.SetObjectOnButtonNoUpdate(button, mode, object) 109 end
74 else 110
75 local object = CyborgMMO_WowObject.Create("", "", "") 111 function RatPageModel_methods:GetObjectOnButton(button)
76 self.SetObjectOnButtonNoUpdate(button, mode, object) 112 if not self.data[self.mode][button] then
77 self.Data[mode][button] = object 113 return nil
78 end 114 else
79 end 115 return self.data[self.mode][button]
80 end 116 end
81 self.UpdateObservers() 117 end
82 end 118
119 function RatPageModel_methods:SetObjectOnButtonNoUpdate(button, mode, object)
120 -- CyborgMMO_DPrint("button = "..tostring(button).." mode = "..tostring(mode))
121 self.data[mode][button] = object
122
123 if object then
124 object.SetBinding(CyborgMMO_WowCommands[((mode-1)*RAT7.BUTTONS)+button])
125 if("callback" == object.Type) then
126 CyborgMMO_DPrint("trying to set texture")
127 local slot = getglobal("CyborgMMO_MainPageSlotListSlot"..button)
128 slot:SetNormalTexture(object.Texture)
83 end 129 end
130 else
131 CyborgMMO_DPrint("clearing "..button)
132 CyborgMMO_WowObject.ClearBinding(CyborgMMO_WowCommands[((mode-1)*RAT7.BUTTONS)+button])
133 end
134 end
84 135
85 self.SaveData = function() 136 function RatPageModel_methods:SetObjectOnButton(button, mode, object)
86 CyborgMMO_DPrint("Saving...") 137 self:SetObjectOnButtonNoUpdate(button, mode, object)
87 CyborgMMO_SetSaveData(self.Data, "Rat") 138 self:UpdateObservers()
88 end 139 end
89 140
90 self.SetMode = function(mode) 141 function RatPageModel_methods:AddObserver(view)
91 self.m_Mode = mode 142 table.insert(self.observers, view)
92 self.UpdateObservers() 143 end
93 end
94 144
95 self.GetMode = function() 145 function RatPageModel_methods:GetAllObservers()
96 return self.m_Mode 146 return self.observers
97 end 147 end
98 148
99 self.GetData = function() 149 function RatPageModel_methods:UpdateObservers()
100 return self.Data,self.m_Mode 150 for i=1,#self.observers do
101 end 151 self.observers[i].Update(self.data, self.mode)
152 end
153 self:SaveData()
154 end
102 155
103 self.GetObjectOnButton = function(button) 156 ------------------------------------------------------------------------------
104 if not self.Data[self.m_Mode][button] then
105 return nil
106 else
107 return self.Data[self.m_Mode][button]
108 end
109 end
110 157
111 self.SetObjectOnButtonNoUpdate = function(button, mode, object) 158 CyborgMMO_RatPageModel = RatPageModel()
112 -- CyborgMMO_DPrint("button = "..tostring(button).." mode = "..tostring(mode))
113 self.Data[mode][button] = object
114 159
115 if object then
116 object.SetBinding(CyborgMMO_WowCommands[((mode-1)*RAT7.BUTTONS)+button])
117 if("callback" == object.Type) then
118 CyborgMMO_DPrint("trying to set texture")
119 local slot = getglobal("CyborgMMO_MainPageSlotListSlot"..button)
120 slot:SetNormalTexture(object.Texture)
121 end
122 else
123 CyborgMMO_DPrint("clearing "..button)
124 CyborgMMO_WowObject.ClearBinding(CyborgMMO_WowCommands[((mode-1)*RAT7.BUTTONS)+button])
125 end
126 end
127
128 self.SetObjectOnButton = function(button, mode, object)
129 self.SetObjectOnButtonNoUpdate(button, mode, object)
130 self.UpdateObservers()
131 end
132
133 self.AddObserver = function(view)
134 table.insert(self.ObserverList, view)
135 self.observerCount = #self.ObserverList
136 end
137
138 self.GetAllObservers = function()
139 return self.ObserverList
140 end
141
142 self.UpdateObservers = function()
143 for i=1,#self.ObserverList do
144 self.ObserverList[i].Update(self.Data, self.m_Mode)
145 end
146 self.SaveData()
147 end
148
149 return self
150 end,
151
152 m_Instance = nil,
153
154 Instance = function()
155 if not CyborgMMO_RatPageModel.m_Instance then
156 CyborgMMO_RatPageModel.m_Instance = CyborgMMO_RatPageModel.new()
157 end
158 return CyborgMMO_RatPageModel.m_Instance
159 end,
160 }
161