Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 1, 2010, 3:00:19 PM (14 years ago)
Author:
dafrick
Message:

Merging menu branch to trunk.

Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/data/gui/scripts/GUITools.lua

    r7163 r7689  
    5454    return height
    5555end
     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
     67function 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
     226end
     227
     228--write index and oldindex on the console
     229--works like buttonIteratorHelper
     230function 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
     330end
     331
     332
     333
     334
Note: See TracChangeset for help on using the changeset viewer.