Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/menue/data/gui/scripts/SingleplayerConfigMenu.lua @ 8938

Last change on this file since 8938 was 8938, checked in by baermatt, 14 years ago

Added some basic but yet static level configuration support.

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1-- SingleplayerMenu.lua
2
3local P = createMenuSheet("SingleplayerConfigMenu")
4
5P.commandList = {}
6P.nameList = {}
7P.linesList = {}
8
9P.sampleWindow = nil
10
11P.lineHeight = 0
12P.commandWidth = 0
13P.editboxWidth = 0
14P.resetWidth = 0
15P.spaceWidth = 0
16
17function P.onLoad()
18    P.sampleWindow = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/SingleplayerConfigMenu/MiscConfigPane/SampleWindow")
19    P.sampleWindow:setText("SampleText")
20
21    P:setButton(1, 1, {
22            ["button"] = winMgr:getWindow("orxonox/SingleplayerConfigMenu/CancelButton"),
23            ["callback"]  = P.SingleplayerConfigCancelButton_clicked
24    })
25   
26    P:setButton(1, 2, {
27            ["button"] = winMgr:getWindow("orxonox/SingleplayerConfigMenu/OKButton"),
28            ["callback"]  = P.SingleplayerConfigOKButton_clicked
29    })
30end
31
32function P.onHide()
33   
34end
35
36function P.loadConfig(level)
37    P.commandList = {}
38    table.insert(P.commandList, "Gametype initialStartCountdown_")
39    table.insert(P.commandList, "Gametype bAutoStart_")
40    table.insert(P.commandList, "Gametype numberOfBots_")
41    table.insert(P.commandList, "UnderAttack gameTime_")
42    table.insert(P.commandList, "TeamDeathmatch teams_")
43
44    P.nameList = {}
45    table.insert(P.nameList, "Start countdown")
46    table.insert(P.nameList, "Autostart")
47    table.insert(P.nameList, "Number of Bots")
48    table.insert(P.nameList, "UnderAttack: game time")
49    table.insert(P.nameList, "TeamDeathmatch: Number of teams")
50
51    P.linesList = {}
52   
53    --Calculate design parameters:
54    local size = getMinTextSize(P.sampleWindow)
55    P.lineHeight = size[1]
56
57    P.commandWidth = 0
58    for k,v in pairs(P.commandList) do
59        P.sampleWindow:setText(P.nameList[k])
60        size = getMinTextSize(P.sampleWindow)
61        if size[2] > P.commandWidth then
62            P.commandWidth = size[2]
63        end
64    end
65
66    P.sampleWindow:setText("reset")
67    size = getMinTextSize(P.sampleWindow)
68    P.resetWidth = size[2]+20
69
70    P.spaceWidth = 10
71   
72    local pane = tolua.cast(winMgr:getWindow("orxonox/SingleplayerConfigMenu/MiscConfigPane"), "CEGUI::ScrollablePane")
73    size = pane:getViewableArea()
74    P.editboxWidth = size:getWidth() - P.commandWidth - P.resetWidth - 5*P.spaceWidth
75
76    P.createLines()
77end
78
79function P.createLine(k)
80    local offset = 0
81    local line = winMgr:createWindow("DefaultWindow", "orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. k)
82    line:setHeight(CEGUI.UDim(0, P.lineHeight))
83    line:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, P.lineHeight*(k-1))))
84
85    local command = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. k .. "/Command")
86    command:setText(P.nameList[k])
87    command:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.commandWidth), CEGUI.UDim(1, 0)))
88    command:setPosition(CEGUI.UVector2(CEGUI.UDim(0, offset), CEGUI.UDim(0, 0)))
89    line:addChildWindow(command)
90    offset = offset + P.commandWidth + P.spaceWidth
91
92    local configvalue = winMgr:createWindow("MenuWidgets/Editbox", "orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. k .. "/Configvalue")
93    configvalue:setProperty("ReadOnly", "set:False")
94    local value = orxonox.CommandExecutor:query("getConfig " .. P.commandList[k])
95    configvalue:setText(value)
96    configvalue:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.editboxWidth), CEGUI.UDim(0.9, 0)))
97    configvalue:setPosition(CEGUI.UVector2(CEGUI.UDim(0, offset), CEGUI.UDim(0.05, 0)))
98    orxonox.GUIManager:subscribeEventHelper(configvalue, "TextAccepted", P.name .. ".SingleplayerConfigEditbox_textAccepted")
99    line:addChildWindow(configvalue)
100    offset = offset + P.editboxWidth + P.spaceWidth
101
102    local reset = winMgr:createWindow("MenuWidgets/Button", "orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. k .. "/Reset")
103    reset:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.resetWidth), CEGUI.UDim(0.9, 0)))
104    reset:setPosition(CEGUI.UVector2(CEGUI.UDim(0, offset), CEGUI.UDim(0.05, 0)))
105    reset:setText("reset")
106    orxonox.GUIManager:subscribeEventHelper(reset, "Clicked", P.name .. ".SingleplayerConfigResetButton_clicked")
107    line:addChildWindow(reset)
108    reset:setEnabled(false)
109    offset = offset + P.resetWidth + P.spaceWidth
110
111    line:setWidth(CEGUI.UDim(0, offset))
112
113    return line
114end
115
116function P.createLines()
117    local window = winMgr:getWindow("orxonox/SingleplayerConfigMenu/MiscConfigPane")
118
119    for k,v in pairs(P.commandList) do
120        local line = P.createLine(k)
121        table.insert(P.linesList, line)
122        window:addChildWindow(line)
123    end
124
125    local pane = tolua.cast(window, "CEGUI::ScrollablePane")
126    pane:setVerticalStepSize(getScrollingStepSize(window))
127end
128
129function P.SingleplayerConfigOKButton_clicked(e)
130    for k,v in pairs(P.commandList) do
131        local editbox = winMgr:getWindow("orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. k .. "/Configvalue")
132        orxonox.CommandExecutor:execute("config " .. P.commandList[k] .. " " .. editbox:getText())
133        local resetButton = winMgr:getWindow("orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. k .. "/Reset")
134        resetButton:setEnabled(false)
135    end
136   
137    hideMenuSheet("SingleplayerConfigMenu")
138end
139
140function P.SingleplayerConfigCancelButton_clicked(e)
141    hideMenuSheet("SingleplayerConfigMenu")
142end
143
144function P.SingleplayerConfigEditbox_textAccepted(e)
145    local we = CEGUI.toWindowEventArgs(e)
146    local name = we.window:getName()
147
148    local match = string.gmatch(name, "%d+")
149    local commandNr = tonumber(match())
150
151    local resetButton = winMgr:getWindow("orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. commandNr .. "/Reset")
152    resetButton:setEnabled(true)
153end
154
155function P.SingleplayerConfigResetButton_clicked(e)
156    local we = CEGUI.toWindowEventArgs(e)
157    local name = we.window:getName()
158
159    local match = string.gmatch(name, "%d+")
160    local commandNr = tonumber(match())
161
162    local editbox = winMgr:getWindow("orxonox/SingleplayerConfigMenu/MiscConfigPane/ConfigCommand" .. commandNr .. "/Configvalue")
163    local value = orxonox.CommandExecutor:query("getConfig " .. P.commandList[commandNr])
164    editbox:setText(value)
165   
166    we.window:setEnabled(false)
167end
168
169return P
Note: See TracBrowser for help on using the repository browser.