Changeset 7689 for code/trunk/data/gui/scripts/GUITools.lua
- Timestamp:
- Dec 1, 2010, 3:00:19 PM (14 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/menu merged: 7587-7588,7594,7607-7608,7649,7663,7670-7671,7687
- Property svn:mergeinfo changed
-
code/trunk/data/gui/scripts/GUITools.lua
r7163 r7689 54 54 return height 55 55 end 56 57 --function to iterate through a menu sheet by using arrowkeys 58 59 --@arguments: 60 -- list: 2-dimensional table, arguments are items that contain a button and its function 61 -- !!note: each button can only be in the list once!! 62 -- code: code of any key on the keyboard 63 -- P: menusheet 64 -- n: number of rows of the buttontable 65 -- m: number of colums of the buttontable 66 67 function buttonIteratorHelper(list, code, P, n, m) 68 69 --after a key (down,up,left,right) is pressed the index of the current button has to be updated 70 71 --key down 72 if code == "208" then 73 if P.index < 0 then -- initial status 74 P.index = 0 75 P.oldindex = -1 76 else 77 P.oldindex = P.index 78 P.index = (P.index + m) % (m*n) --modulo operation works as a "wrap around" in the button menu 79 80 while list[P.index+1] == nil do 81 P.oldindex = P.index 82 P.index = (P.index + m) % (m*n) 83 end 84 end 85 86 --key up 87 elseif code == "200" then 88 if P.index < 0 then 89 P.index = 0 90 P.oldindex = -1 91 elseif(P.index == 0) then 92 P.oldindex = P.index 93 P.index = m*n-m 94 95 while list[P.index+1] == nil do 96 P.oldindex = P.index 97 P.index = (P.index-m)%(m*n) 98 end 99 else 100 P.oldindex = P.index 101 P.index = (P.index -m) % (m*n) 102 103 while list[P.index+1] == nil do 104 P.oldindex = P.index 105 P.index = (P.index-m)%(m*n) 106 end 107 end 108 109 --key right 110 elseif code == "205" then 111 if P.index < 0 then 112 P.index = 0 113 P.oldindex = -1 114 elseif (P.index+1) % m == 0 then -- we are at the right-end of a row 115 P.oldindex = P.index 116 P.index = P.index + 1 -m 117 118 while list[P.index+1] == nil do 119 P.oldindex = P.index 120 P.index = P.index + 1 121 end 122 else 123 P.oldindex = P.index 124 P.index = P.index + 1 125 126 while list[P.index+1] == nil do 127 if (P.index+1) % m == 0 then -- we are at the right-end of a row 128 P.oldindex = P.index 129 P.index = P.index + 1-m 130 131 else 132 P.oldindex = P.index 133 P.index = P.index + 1 134 end 135 end 136 end 137 138 --key left 139 elseif code == "203" then 140 if P.index < 0 then 141 P.index = 0 142 P.oldindex = -1 143 elseif P.index % m == 0 then -- we are at the left-end of a row 144 P.oldindex = P.index 145 P.index = P.index +m-1 146 147 while list[P.index+1] == nil do 148 P.oldindex = P.index 149 P.index = P.index -1 150 end 151 else 152 P.oldindex = P.index 153 P.index = P.index -1 154 155 while list[P.index+1] == nil do 156 if P.index % m == 0 then -- we are at the left-end of a row 157 P.oldindex = P.index 158 P.index = P.index -1 + m 159 else 160 P.oldindex = P.index 161 P.index = P.index -1 162 end 163 end 164 end 165 end 166 167 --to update the new current button 168 if (code == "208" or code == "200" or code == "203" or code == "205") and P.oldindex~= P.index then 169 170 local system = CEGUI.System:getSingleton() 171 local window = winMgr:getWindow("orxonox/MainMenuBackground") 172 173 local item = list[P.index+1] 174 local child = item["button"] 175 176 --teste ob der Button nicht schon gehighlightet ist 177 if child:getProperty("NormalImageRightEdge") == "set:TaharezGreenLook image:ButtonRightHighlight" then 178 --nop 179 else 180 child:setProperty("NormalImageRightEdge", string.sub(child:getProperty("NormalImageRightEdge"),1,-7) .. "Highlight") 181 child:setProperty("NormalImageLeftEdge", string.sub(child:getProperty("NormalImageLeftEdge"),1,-7) .. "Highlight") 182 child:setProperty("NormalImageBackground", string.sub(child:getProperty("NormalImageBackground"),1,-7) .. "Highlight") 183 if P.oldindex >= 0 then 184 if list[P.oldindex+1] ~= nil then 185 local item = list[P.oldindex+1] 186 local oldChild = item["button"] 187 oldChild:setProperty("NormalImageRightEdge", string.sub(oldChild:getProperty("NormalImageRightEdge"),1,-10) .. "Normal") 188 oldChild:setProperty("NormalImageLeftEdge", string.sub(oldChild:getProperty("NormalImageLeftEdge"),1,-10) .. "Normal") 189 oldChild:setProperty("NormalImageBackground", string.sub(oldChild:getProperty("NormalImageBackground"),1,-10) .. "Normal") 190 end 191 end 192 end 193 194 --for every highlighted button check if index is on its position. If not, set imageproperty on "normal" 195 local i = 1 196 while i < (n*m) do 197 if i == P.index +1 then 198 i = i+1 199 else 200 if list[i] ~= nil then 201 local item = list[i] 202 local child = item["button"] 203 if child:getProperty("NormalImageRightEdge") == "set:TaharezGreenLook image:ButtonRightHighlight" then 204 child:setProperty("NormalImageRightEdge", string.sub(child:getProperty("NormalImageRightEdge"),1,-10) .. "Normal") 205 child:setProperty("NormalImageLeftEdge", string.sub(child:getProperty("NormalImageLeftEdge"),1,-10) .. "Normal") 206 child:setProperty("NormalImageBackground", string.sub(child:getProperty("NormalImageBackground"),1,-10) .. "Normal") 207 end 208 end 209 end 210 i=i+1 211 end 212 end 213 214 --enter 215 if code == "28" then 216 local item = list[P.index+1] 217 local child = item["button"] 218 child:setProperty("NormalImageRightEdge", string.sub(child:getProperty("NormalImageRightEdge"),1,-10) .. "Normal") 219 child:setProperty("NormalImageLeftEdge", string.sub(child:getProperty("NormalImageLeftEdge"),1,-10) .. "Normal") 220 child:setProperty("NormalImageBackground", string.sub(child:getProperty("NormalImageBackground"),1,-10) .. "Normal") 221 222 local foo = item["function"] 223 foo() 224 end 225 226 end 227 228 --write index and oldindex on the console 229 --works like buttonIteratorHelper 230 function indexTester(list,code,P,n,m) 231 --key down 232 if code == "208" then 233 if P.index < 0 then -- initial status 234 P.index = 0 235 P.oldindex = -1 236 else 237 P.oldindex = P.index 238 P.index = (P.index + m) % (m*n) 239 240 while list[P.index+1] == nil do 241 P.oldindex = P.index 242 P.index = (P.index + m) % (m*n) 243 end 244 end 245 246 --key up 247 elseif code == "200" then 248 if P.index < 0 then 249 P.index = 0 250 P.oldindex = -1 251 elseif(P.index == 0) then 252 P.oldindex = P.index 253 P.index = m*n-m 254 255 while list[P.index+1] == nil do 256 P.oldindex = P.index 257 P.index = (P.index-m)%(m*n) 258 end 259 else 260 P.oldindex = P.index 261 P.index = (P.index -m) % (m*n) 262 263 while list[P.index+1] == nil do 264 P.oldindex = P.index 265 P.index = P.index -m 266 end 267 end 268 269 --key right 270 elseif code == "205" then 271 if P.index < 0 then 272 P.index = 0 273 P.oldindex = -1 274 elseif (P.index+1) % m == 0 then -- we are at the right-end of a row 275 P.oldindex = P.index 276 P.index = P.index + 1 -m 277 278 while list[P.index+1] == nil do 279 P.oldindex = P.index 280 P.index = P.index + 1 281 end 282 else 283 P.oldindex = P.index 284 P.index = P.index + 1 285 286 while list[P.index+1] == nil do 287 if (P.index+1) % m == 0 then -- we are at the right-end of a row 288 P.oldindex = P.index 289 P.index = P.index + 1-m 290 291 else 292 P.oldindex = P.index 293 P.index = P.index + 1 294 end 295 end 296 end 297 298 --key left 299 elseif code == "203" then 300 if P.index < 0 then 301 P.index = 0 302 P.oldindex = -1 303 elseif P.index % m == 0 then -- we are at the left-end of a row 304 P.oldindex = P.index 305 P.index = P.index +m-1 306 307 while list[P.index+1] == nil do 308 P.oldindex = P.index 309 P.index = P.index -1 310 end 311 else 312 P.oldindex = P.index 313 P.index = P.index -1 314 315 while list[P.index+1] == nil do 316 if P.index % m == 0 then -- we are at the left-end of a row 317 P.oldindex = P.index 318 P.index = P.index -1 + m 319 else 320 P.oldindex = P.index 321 P.index = P.index -1 322 end 323 end 324 end 325 end 326 327 cout(0, P.oldindex) 328 cout(0, P.index) 329 330 end 331 332 333 334
Note: See TracChangeset
for help on using the changeset viewer.