Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 15, 2011, 9:47:11 PM (13 years ago)
Author:
landauf
Message:

merged usability branch back to trunk

incomplete summary of the changes in this branch:

  • enhanced keyboard navigation in GUIs
  • implemented new graphics menu and changeable window size at runtime
  • added developer mode
  • HUD shows if game is paused, game pauses if ingame menu is opened
  • removed a few obsolete commands and hid some that are more for internal use
  • numpad works in console and gui
  • faster loading of level info
  • enhanced usage of compositors (Shader class)
  • improved camera handling, configurable FOV and aspect ratio
Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

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

    r7801 r8079  
    33local P = createMenuSheet("GraphicsMenu")
    44
    5 P.buttonList = {}
     5P.resolutionList = {"custom", "640 x 480", "720 x 480", "720 x 576", "800 x 600", "1024 x 600", "1024 x 768", "1152 x 864", "1280 x 720", "1280 x 800", "1280 x 960", "1280 x 1024", "1360 x 768", "1440 x 900", "1600 x 900", "1600 x 1200", "1680 x 1050"}
    66P.schemeList = {"TaharezGreen", "Orxonox"}
    7 
    8 function P.onShow()
    9     --indices to iterate through buttonlist (trivial in this menu sheet)
    10     P.oldindex = -2
    11     P.index = -1
    12 end
    13 
    14 function P.onLoad()
    15     block = true
    16     file = orxonox.PathConfig:getConfigPathString() .. orxonox.getConfig("GraphicsManager", "ogreConfigFile_")
    17     search_mode = 0
    18     f = io.open(file, "r")
    19     firstline = f:read("*line")
    20     rendersystem = string.sub(firstline, 15)
    21     for line in f:lines() do
    22         if search_mode == 0 then
    23             if string.find(line, rendersystem) ~= nil then
    24                 search_mode = 1
    25             end
     7P.fsaaList = {"0", "2", "4", "8", "8 [Quality]"}
     8P.particleLodList = {"None", "Low", "Normal", "High"}
     9
     10function P:onLoad()
     11    -------------------
     12    -- Button matrix --
     13    -------------------
     14
     15    P:setButton(1, 1, {
     16            ["button"] = winMgr:getWindow("orxonox/GraphicsOkButton"),
     17            ["callback"]  = P.callback_Ok_Clicked
     18    })
     19
     20    P:setButton(1, 2, {
     21            ["button"] = winMgr:getWindow("orxonox/GraphicsCancelButton"),
     22            ["callback"]  = P.callback_Cancel_Clicked
     23    })
     24
     25    -- place apply button at the bottom in the matrix, even though it's in fact at the top, to make the OK button highlighted by default
     26    P:setButton(2, 1, {
     27            ["button"] = winMgr:getWindow("orxonox/Display/Resolution/Apply"),
     28            ["callback"]  = P.callback_Apply_Clicked
     29    })
     30
     31    -----------------
     32    -- Combo boxes --
     33    -----------------
     34
     35    -- resolution combobox
     36    local resolutionCombobox = winMgr:getWindow("orxonox/Display/Resolution/Combobox")
     37    CEGUI.toCombobox(resolutionCombobox):setReadOnly(true)
     38
     39    for k,v in pairs(P.resolutionList) do
     40        local item = CEGUI.createListboxTextItem(v)
     41        item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
     42        resolutionCombobox:addItem(item)
     43    end
     44
     45    -- themes combobox
     46    local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox")
     47    CEGUI.toCombobox(themeCombobox):setReadOnly(true)
     48
     49    for k,v in pairs(P.schemeList) do
     50        local item = CEGUI.createListboxTextItem(v)
     51        item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
     52        themeCombobox:addItem(item)
     53    end
     54
     55    -- fsaa combobox
     56    local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA")
     57    CEGUI.toCombobox(fsaaCombobox):setReadOnly(true)
     58
     59    for k,v in pairs(P.fsaaList) do
     60        local item = CEGUI.createListboxTextItem(v)
     61        item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
     62        fsaaCombobox:addItem(item)
     63    end
     64
     65    -- particle lod combobox
     66    local particleLodCombobox = winMgr:getWindow("orxonox/Settings/ParticleLodCombobox")
     67    CEGUI.toCombobox(particleLodCombobox):setReadOnly(true)
     68
     69    for k,v in pairs(P.particleLodList) do
     70        local item = CEGUI.createListboxTextItem(v)
     71        item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
     72        particleLodCombobox:addItem(item)
     73    end
     74end
     75
     76function P:onShow()
     77    -----------------
     78    -- Display tab --
     79    -----------------
     80
     81    -- fullscreen checkbox / resolution combobox / resolution editboxes
     82    self:onWindowResized()
     83
     84    -- apply button
     85    self.updateApplyButton()
     86
     87    -- aspect ratio editbox
     88    local aspectRatioEditbox = winMgr:getWindow("orxonox/Display/Resolution/AspectRatio")
     89    local currentAspectRatio = orxonox.CommandExecutor:query("getConfig Camera aspectRatio_")
     90    aspectRatioEditbox:setText(currentAspectRatio)
     91
     92    -- themes combobox
     93    local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox")
     94    local currentTheme = orxonox.CommandExecutor:query("getConfig GUIManager guiScheme_")
     95
     96    for i = 0, themeCombobox:getDropList():getItemCount() - 1 do
     97        local item = themeCombobox:getListboxItemFromIndex(i)
     98        themeCombobox:setItemSelectState(item, (item:getText() == currentTheme))
     99    end
     100
     101    -- vsync checkbox
     102    local vsyncCheckbox = winMgr:getWindow("orxonox/Display/More/VSync")
     103    local hasVSync = orxonox.GraphicsManager:getInstance():hasVSyncEnabled()
     104    CEGUI.toCheckbox(vsyncCheckbox):setSelected(hasVSync)
     105
     106    -- fsaa combobox
     107    local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA")
     108    local currentFSAAMode = orxonox.GraphicsManager:getInstance():getFSAAMode()
     109
     110    for i = 0, fsaaCombobox:getDropList():getItemCount() - 1 do
     111        local item = fsaaCombobox:getListboxItemFromIndex(i)
     112        fsaaCombobox:setItemSelectState(item, (item:getText() == currentFSAAMode))
     113    end
     114
     115    -- notice
     116    self:updateRedLabel()
     117
     118    ------------------
     119    -- Settings tab --
     120    ------------------
     121
     122    -- fov editbox
     123    local fovEditbox = winMgr:getWindow("orxonox/Settings/Fov")
     124    local currentFov = orxonox.CommandExecutor:query("getConfig Camera fov_")
     125    fovEditbox:setText(currentFov)
     126
     127    -- fps limit editbox
     128    local fpsEditbox = winMgr:getWindow("orxonox/Settings/FpsLimit")
     129    local currentFpsLimit = orxonox.CommandExecutor:query("getConfig GraphicsSettings fpsLimit")
     130    fpsEditbox:setText(currentFpsLimit)
     131
     132    -- particle lod combobox
     133    local particleLodCombobox = winMgr:getWindow("orxonox/Settings/ParticleLodCombobox")
     134    local currentParticleLod = orxonox.CommandExecutor:query("getConfig GraphicsSettings particlesDetailLevel")
     135
     136    if currentParticleLod == "" then
     137        particleLodCombobox:disable()
     138    else
     139        particleLodCombobox:enable()
     140
     141        for i = 0, particleLodCombobox:getDropList():getItemCount() - 1 do
     142            local item = particleLodCombobox:getListboxItemFromIndex(i)
     143            particleLodCombobox:setItemSelectState(item, (tostring(i) == currentParticleLod))
    26144        end
    27         if search_mode == 1 then
    28             if string.sub(line, 1, 11) == "Full Screen" then
    29                 if string.sub(line, 13) == "Yes" then
    30                     fullscreen = true
    31                 else
    32                     fullscreen = false
    33                 end
    34             end
    35             if string.sub(line, 1, 10) == "Video Mode" then
    36                 if string.match(line, "@") == "@" then
    37                     resolution = string.sub(line, 12, string.find(line, "@")-2)
    38                 else
    39                     resolution = string.sub(line, 12)
    40                 end
    41                 break
    42             end
     145    end
     146
     147    -- mesh lod checkbox
     148    local meshLodCheckbox = winMgr:getWindow("orxonox/Settings/MeshLodCheckbox")
     149    local hasMeshLod = orxonox.CommandExecutor:query("getConfig GraphicsSettings enableMeshLoD")
     150    if hasMeshLod == "true" then
     151        hasMeshLod = true
     152    elseif hasMeshLod == "false" then
     153        hasMeshLod = false
     154    end
     155    CEGUI.toCheckbox(meshLodCheckbox):setSelected(hasMeshLod)
     156
     157    -- motion blur checkbox
     158    local motionBlurCheckbox = winMgr:getWindow("orxonox/Settings/MotionBlurCheckbox")
     159    local hasMotionBlur = orxonox.CommandExecutor:query("getConfig GraphicsSettings enableMotionBlur")
     160    if hasMotionBlur == "true" then
     161        hasMotionBlur = true
     162    elseif hasMotionBlur == "false" then
     163        hasMotionBlur = false
     164    end
     165    CEGUI.toCheckbox(motionBlurCheckbox):setSelected(hasMotionBlur)
     166end
     167
     168function P:onWindowResized()
     169    -- fullscreen checkbox
     170    local fullscreenCheckbox = winMgr:getWindow("orxonox/Display/Resolution/Fullscreen")
     171    local isFullscreen = orxonox.GraphicsManager:getInstance():isFullScreen()
     172    CEGUI.toCheckbox(fullscreenCheckbox):setSelected(isFullscreen)
     173
     174    -- resolution combobox
     175    local resolutionCombobox = winMgr:getWindow("orxonox/Display/Resolution/Combobox")
     176
     177    local currentWidth = orxonox.GraphicsManager:getInstance():getWindowWidth()
     178    local currentHeight = orxonox.GraphicsManager:getInstance():getWindowHeight()
     179
     180    if P.forceResolutionEditboxes then
     181        currentWidth = P.newWidth
     182        currentHeight = P.newHeight
     183        P.forceResolutionEditboxes = false
     184    end
     185
     186    local currentResolution = currentWidth .. " x " .. currentHeight
     187
     188    for i = 0, resolutionCombobox:getDropList():getItemCount() - 1 do
     189        local item = resolutionCombobox:getListboxItemFromIndex(i)
     190        resolutionCombobox:setItemSelectState(item, item:getText() == currentResolution)
     191    end
     192
     193    -- resolution editboxes
     194    self.updateResolutionEditboxes()
     195end
     196
     197----------------------
     198-- Helper functions --
     199----------------------
     200
     201-- updates the text of the resolution checkboxes and checks if they should be enabled (only if the "custom" resolution was selected)
     202function P.updateResolutionEditboxes()
     203    -- resolution combobox
     204    local resolutionCombobox = winMgr:getWindow("orxonox/Display/Resolution/Combobox")
     205
     206    local currentWidth = orxonox.GraphicsManager:getInstance():getWindowWidth()
     207    local currentHeight = orxonox.GraphicsManager:getInstance():getWindowHeight()
     208
     209    -- resolution editboxes
     210    local widthEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxWidth")
     211    local heightEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxHeight")
     212    widthEditbox:disable()
     213    heightEditbox:disable()
     214
     215    -- selected combobox item
     216    local item = resolutionCombobox:getSelectedItem()
     217    if item then
     218        local itemText = item:getText()
     219        if itemText ~= "custom" then
     220            currentWidth = string.sub(itemText, 1, string.find(itemText, "x") - 2)
     221            currentHeight = string.sub(itemText, string.find(itemText, "x") + 2)
     222        else
     223            widthEditbox:enable()
     224            heightEditbox:enable()
    43225        end
    44226    end
    45     f:close()
    46     local fullscreenwindow = tolua.cast(winMgr:getWindow("orxonox/FullscreenCheckbox"),"CEGUI::Checkbox")
    47     fullscreenwindow:setSelected(fullscreen)
    48     listboxwindow = winMgr:getWindow("orxonox/ResolutionListbox")
    49     local resolutionList = {}
    50     table.insert(resolutionList, "640 x 480")
    51     table.insert(resolutionList, "720 x 480")
    52     table.insert(resolutionList, "720 x 576")
    53     table.insert(resolutionList, "800 x 480")
    54     table.insert(resolutionList, "800 x 600")
    55     table.insert(resolutionList, "1024 x 480")
    56     table.insert(resolutionList, "1024 x 600")
    57     table.insert(resolutionList, "1024 x 768")
    58     table.insert(resolutionList, "1152 x 864")
    59     table.insert(resolutionList, "1280 x 720")
    60     table.insert(resolutionList, "1280 x 768")
    61     table.insert(resolutionList, "1440 x 900")
    62     for k,v in pairs(resolutionList) do
    63         item = CEGUI.createListboxTextItem(v)
    64         item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
    65         CEGUI.toListbox(listboxwindow):addItem(item)
    66     end
    67     if resolution == "640 x 480" then
    68         listboxwindow:setItemSelectState(0,true)
    69     elseif resolution == "720 x 480" then
    70         listboxwindow:setItemSelectState(1,true)
    71     elseif resolution == "720 x 576" then
    72         listboxwindow:setItemSelectState(2,true)
    73     elseif resolution == "800 x 480" then
    74         listboxwindow:setItemSelectState(3,true)
    75     elseif resolution == "800 x 600" then
    76         listboxwindow:setItemSelectState(4,true)
    77     elseif resolution == "1024 x 480" then
    78         listboxwindow:setItemSelectState(5,true)
    79     elseif resolution == "1024 x 600" then
    80         listboxwindow:setItemSelectState(6,true)
    81     elseif resolution == "1024 x 768" then
    82         listboxwindow:setItemSelectState(7,true)
    83     elseif resolution == "1152 x 864" then
    84         listboxwindow:setItemSelectState(8,true)
    85     elseif resolution == "1280 x 720" then
    86         listboxwindow:setItemSelectState(9,true)
    87     elseif resolution == "1280 x 768" then
    88         listboxwindow:setItemSelectState(10,true)
    89     elseif resolution == "1440 x 900" then
    90         listboxwindow:setItemSelectState(11,true)
    91     end
    92     scrollbar_active = false
    93     block = false
    94 
    95     local item = {
    96             ["button"] = winMgr:getWindow("orxonox/GraphicsBackButton"),
    97             ["function"]  = P.GraphicsBackButton_clicked
    98     }
    99     P.buttonList[1] = item
    100 
    101     local dropbox = winMgr:getWindow("orxonox/ThemeDropBox")
    102     local scheme = orxonox.CommandExecutor:query("getConfig GUIManager guiScheme_")
    103     for k,v in pairs(P.schemeList) do
    104         local item = CEGUI.createListboxTextItem(P.schemeList[k])
    105         item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
    106         CEGUI.toListbox(dropbox):addItem(item)
    107         if v == scheme then
    108             dropbox:setItemSelectState(item, true)
    109         end
    110     end
    111 
    112 end
    113 
    114 function P.ThemeDropBox_changed(e)
    115     local dropbox = winMgr:getWindow("orxonox/ThemeDropBox")
    116     local listbox = CEGUI.toListbox(dropbox)
    117     local choice = listbox:getFirstSelectedItem()
    118     local index = 0
    119     if choice ~= nil then
    120         index = listbox:getItemIndex(choice)
    121     end
    122     orxonox.CommandExecutor:execute("config GUIManager guiScheme_ " .. P.schemeList[index+1])
    123 end
    124 
    125 function P.GraphicsResolutionListbox_changed(e)
    126     if listboxwindow:isItemSelected(0) then
    127         resolution = "640 x 480"
    128     elseif listboxwindow:isItemSelected(1) then
    129         resolution = "720 x 480"
    130     elseif listboxwindow:isItemSelected(2) then
    131         resolution = "720 x 576"
    132     elseif listboxwindow:isItemSelected(3) then
    133         resolution = "800 x 480"
    134     elseif listboxwindow:isItemSelected(4) then
    135         resolution = "800 x 600"
    136     elseif listboxwindow:isItemSelected(5) then
    137         resolution = "1024 x 480"
    138     elseif listboxwindow:isItemSelected(6) then
    139         resolution = "1024 x 600"
    140     elseif listboxwindow:isItemSelected(7) then
    141         resolution = "1024 x 768"
    142     elseif listboxwindow:isItemSelected(8) then
    143         resolution = "1152 x 864"
    144     elseif listboxwindow:isItemSelected(9) then
    145         resolution = "1280 x 720"
    146     elseif listboxwindow:isItemSelected(10) then
    147         resolution = "1280 x 768"
    148     elseif listboxwindow:isItemSelected(11) then
    149         resolution = "1440 x 900"
    150     end
    151     search_mode = 0
    152     f = io.open(file, "r")
    153     firstline = f:read("*line")
    154     text = firstline .. "\n"
    155     rendersystem = string.sub(firstline, 15)
    156     for line in f:lines() do
    157         if search_mode == 0 then
    158             if string.find(line, rendersystem) ~= nil then
    159                 search_mode = 1
    160             end
    161         end
    162         if search_mode == 1 then
    163             if string.sub(line, 1, 10) == "Video Mode" then
    164                 if string.match(line, "@") == "@" then
    165                     line = "Video Mode=" .. resolution .. string.sub(line, string.find(line, "@")-1)
    166                 else
    167                     line = "Video Mode=" .. resolution
    168                 end
    169                 search_mode = 2
    170             end
    171         end
    172         text = text .. line .. "\n"
    173     end
    174     f:close()
    175     f = io.open(file, "w")
    176     f:write(text)
    177     f:close()
    178 end
    179 
    180 function P.GraphicsBrightnessScrollbar_changed(e)
    181     if scrollbar_active == false then
    182         -- brightness
    183         logMessage(0, "event: brightness")
    184     end
    185 end
    186 
    187 function P.GraphicsBrightnessScrollbar_started(e)
    188     scrollbar_active = true
    189 end
    190 
    191 function P.GraphicsBrightnessScrollbar_ended(e)
    192     -- brightness
    193     logMessage(0, "event: brightness")
    194     scrollbar_active = false
    195 end
    196 
    197 function P.GraphicsFullscreenCheckbox_clicked(e)
    198     if block == false then
    199         search_mode = 0
    200         f = io.open(file, "r")
    201         firstline = f:read("*line")
    202         text = firstline .. "\n"
    203         rendersystem = string.sub(firstline, 15)
    204         for line in f:lines() do
    205             if search_mode == 0 then
    206                 if string.find(line, rendersystem) ~= nil then
    207                     search_mode = 1
    208                 end
    209             end
    210             if search_mode == 1 then
    211                 if string.sub(line, 1, 11) == "Full Screen" then
    212                     if fullscreen == true then
    213                         line = "Full Screen=No"
    214                         fullscreen = false
    215                     else
    216                         line = "Full Screen=Yes"
    217                         fullscreen = true
    218                     end
    219                     search_mode = 2
    220                 end
    221             end
    222             text = text .. line .. "\n"
    223         end
    224         f:close()
    225         f = io.open(file, "w")
    226         f:write(text)
    227         f:close()
    228     end
    229 end
    230 
    231 function P.GraphicsBackButton_clicked(e)
     227
     228    widthEditbox:setText(currentWidth)
     229    heightEditbox:setText(currentHeight)
     230end
     231
     232-- checks if the apply button should be enabled or disabled (only enabled if the current settings are different from the selected values)
     233function P.updateApplyButton()
     234    -- fullscreen checkbox
     235    local fullscreenCheckbox = winMgr:getWindow("orxonox/Display/Resolution/Fullscreen")
     236    local isFullscreen = orxonox.GraphicsManager:getInstance():isFullScreen()
     237    local fullscreenChanged = (isFullscreen ~= CEGUI.toCheckbox(fullscreenCheckbox):isSelected())
     238
     239    -- resolution editboxes
     240    local widthEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxWidth")
     241    local heightEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxHeight")
     242    local currentWidth = tostring(orxonox.GraphicsManager:getInstance():getWindowWidth())
     243    local currentHeight = tostring(orxonox.GraphicsManager:getInstance():getWindowHeight())
     244    local widthChanged = (currentWidth ~= widthEditbox:getText())
     245    local heightChanged = (currentHeight ~= heightEditbox:getText())
     246    local resolutionEditboxesEnabled = not widthEditbox:isDisabled()
     247
     248    -- apply button
     249    local applyButton = winMgr:getWindow("orxonox/Display/Resolution/Apply")
     250
     251    if fullscreenChanged or widthChanged or heightChanged or resolutionEditboxesEnabled then
     252        applyButton:enable()
     253    else
     254        applyButton:disable()
     255    end
     256end
     257
     258function P.updateRedLabel()
     259    -- theme
     260    local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox")
     261    local currentTheme = orxonox.CommandExecutor:query("getConfig GUIManager guiScheme_")
     262    local themeChanged = (currentTheme ~= themeCombobox:getText())
     263
     264    -- vsync
     265    local vsyncCheckbox = winMgr:getWindow("orxonox/Display/More/VSync")
     266    local hasVSync = orxonox.GraphicsManager:getInstance():hasVSyncEnabled()
     267    local vsyncChanged = (hasVSync ~= CEGUI.toCheckbox(vsyncCheckbox):isSelected())
     268
     269    -- fsaa
     270    local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA")
     271    local currentFSAAMode = orxonox.GraphicsManager:getInstance():getFSAAMode()
     272    local fsaaChanged = (currentFSAAMode ~= fsaaCombobox:getText())
     273
     274    local needRestart = themeChanged or vsyncChanged or fsaaChanged
     275
     276    local notice = winMgr:getWindow("orxonox/Display/Notice")
     277    notice:setVisible(not needRestart)
     278    local noticeRed = winMgr:getWindow("orxonox/Display/NoticeRed")
     279    noticeRed:setVisible(needRestart)
     280end
     281
     282---------------------
     283-- Event callbacks --
     284---------------------
     285
     286-- resolution
     287
     288function P.callback_FullscreenCheckbox_CheckStateChanged(e)
     289    P.updateApplyButton()
     290end
     291
     292function P.callback_ResolutionCombobox_ListSelectionAccepted(e)
     293    P.updateResolutionEditboxes()
     294end
     295
     296function P.callback_ResolutionEditboxWidth_TextChanged(e)
     297    P.updateApplyButton()
     298end
     299
     300function P.callback_ResolutionEditboxHeight_TextChanged(e)
     301    P.updateApplyButton()
     302end
     303
     304-- theme
     305
     306function P.callback_ThemeCombobox_ListSelectionAccepted(e)
     307    P.updateRedLabel()
     308end
     309
     310-- vsync
     311
     312function P.callback_VSyncCheckbox_CheckStateChanged(e)
     313    P.updateRedLabel()
     314end
     315
     316-- fsaa
     317
     318function P.callback_FSAACombobox_ListSelectionAccepted(e)
     319    P.updateRedLabel()
     320end
     321
     322-- buttons
     323
     324function P.callback_Apply_Clicked(e)
     325    -- resolution
     326    local fullscreenCheckbox = winMgr:getWindow("orxonox/Display/Resolution/Fullscreen")
     327    local checkedFullscreen = tostring(CEGUI.toCheckbox(fullscreenCheckbox):isSelected())
     328
     329    local widthEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxWidth")
     330    local heightEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxHeight")
     331
     332    P.newWidth = widthEditbox:getText()
     333    P.newHeight = heightEditbox:getText()
     334    P.forceResolutionEditboxes = true
     335
     336    -- start revert timer
     337    P.oldWidth = orxonox.GraphicsManager:getInstance():getWindowWidth()
     338    P.oldHeight = orxonox.GraphicsManager:getInstance():getWindowHeight()
     339    P.oldFullscreen = orxonox.GraphicsManager:getInstance():isFullScreen()
     340
     341    P.revertTimerHandle = orxonox.CommandExecutor:query("delayreal 10 {hideGUI DecisionPopup; GraphicsManager setScreenResolution " .. P.oldWidth .. " " .. P.oldHeight .. " " .. tostring(P.oldFullscreen) .. "; config Core lastLevelTimestamp_ [expr [getConfig Core ogreConfigTimestamp_] + 1]}")
     342
     343    -- change settings
     344    orxonox.CommandExecutor:execute("GraphicsManager setScreenResolution " .. P.newWidth .. " " .. P.newHeight .. " " .. checkedFullscreen)
     345
     346    P.updateApplyButton()
     347
     348    -- prompt for confirmation
     349    openDecisionPopup("Do you want to keep these settings? (Settings will be reverted in 10 seconds if not accepted)", GraphicsMenu.callback_ApplyDecisionPopup)
     350    if checkedFullscreen then
     351        showCursor()
     352    end
     353end
     354
     355function P.callback_ApplyDecisionPopup(pressedOK)
     356    orxonox.CommandExecutor:execute("killdelay " .. P.revertTimerHandle)
     357
     358    if not pressedOK then
     359        orxonox.CommandExecutor:execute("GraphicsManager setScreenResolution " .. P.oldWidth .. " " .. P.oldHeight .. " " .. tostring(P.oldFullscreen))
     360        P:onShow()
     361    end
     362
     363    -- update timestamp to avoid showing the ogre config dialog again after the user accepted or reverted the resolution
     364    orxonox.CommandExecutor:execute("config Core lastLevelTimestamp_ [expr [getConfig Core ogreConfigTimestamp_] + 1]")
     365end
     366
     367function P.callback_Ok_Clicked(e)
     368    -- aspect ratio
     369    local aspectRatioEditbox = winMgr:getWindow("orxonox/Display/Resolution/AspectRatio")
     370    orxonox.CommandExecutor:execute("config Camera aspectRatio_ " .. aspectRatioEditbox:getText())
     371
     372    -- theme
     373    local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox")
     374    orxonox.CommandExecutor:execute("config GUIManager guiScheme_ " .. themeCombobox:getText())
     375
     376    -- vsync
     377    local vsyncCheckbox = winMgr:getWindow("orxonox/Display/More/VSync")
     378    local hasVSync = orxonox.GraphicsManager:getInstance():hasVSyncEnabled()
     379    if hasVSync ~= CEGUI.toCheckbox(vsyncCheckbox):isSelected() then
     380        orxonox.CommandExecutor:execute("GraphicsManager setVSync " .. tostring(CEGUI.toCheckbox(vsyncCheckbox):isSelected()))
     381    end
     382
     383    -- fsaa
     384    local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA")
     385    local currentFSAAMode = orxonox.GraphicsManager:getInstance():getFSAAMode()
     386    if currentFSAAMode ~= fsaaCombobox:getText() then
     387        orxonox.CommandExecutor:execute("GraphicsManager setFSAA {" .. fsaaCombobox:getText() .. "}") -- enclose argument in { ... } because it can contain [brackets] (conflicts with tcl)
     388    end
     389
     390    -- fov
     391    local fovEditbox = winMgr:getWindow("orxonox/Settings/Fov")
     392    orxonox.CommandExecutor:execute("config Camera fov_ " .. fovEditbox:getText())
     393
     394    -- fps limit
     395    local fpsEditbox = winMgr:getWindow("orxonox/Settings/FpsLimit")
     396    orxonox.CommandExecutor:execute("config GraphicsSettings fpsLimit " .. fpsEditbox:getText())
     397
     398    -- particle lod
     399    local particleLodCombobox = winMgr:getWindow("orxonox/Settings/ParticleLodCombobox")
     400    local item = particleLodCombobox:getSelectedItem()
     401    if item then
     402        orxonox.CommandExecutor:execute("config GraphicsSettings particlesDetailLevel " .. particleLodCombobox:getItemIndex(item))
     403    end
     404
     405    -- mesh lod
     406    local meshLodCheckbox = winMgr:getWindow("orxonox/Settings/MeshLodCheckbox")
     407    orxonox.CommandExecutor:execute("config GraphicsSettings enableMeshLoD " .. tostring(CEGUI.toCheckbox(meshLodCheckbox):isSelected()))
     408
     409    -- motion blur
     410    local motionBlurCheckbox = winMgr:getWindow("orxonox/Settings/MotionBlurCheckbox")
     411    orxonox.CommandExecutor:execute("config GraphicsSettings enableMotionBlur " .. tostring(CEGUI.toCheckbox(motionBlurCheckbox):isSelected()))
     412
    232413    hideMenuSheet(P.name)
    233414end
    234415
    235 function P.onKeyPressed()
    236     buttonIteratorHelper(P.buttonList, code, P, 1, 1)
     416function P.callback_Cancel_Clicked(e)
     417    hideMenuSheet(P.name)
    237418end
    238419
Note: See TracChangeset for help on using the changeset viewer.