Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 6737


Ignore:
Timestamp:
Apr 16, 2010, 12:22:12 PM (15 years ago)
Author:
rgrieder
Message:

Background image of the GUI is now managed by GUIManager and kept in a very simple manner: Tell it about the image set and the image name and the it will display it in the root node.
Also split SheetManager.lua from InitialiseGUI.lua to have a separate initialisation, required by GUIManager now.
And modified GUISheet.cc/h accordingly.

Location:
code/branches/gamestates2
Files:
5 edited
1 copied

Legend:

Unmodified
Added
Removed
  • code/branches/gamestates2/data/gui/scripts/InitialiseGUI.lua

    r6722 r6737  
    1 winMgr   = CEGUI.WindowManager:getSingleton()
    2 guiMgr   = orxonox.GUIManager:getInstance()
    3 inputMgr = orxonox.InputManager:getInstance()
    4 
    5 local schemeMgr = CEGUI.SchemeManager:getSingleton()
    6 local system    = CEGUI.System:getSingleton()
    7 local cursor    = CEGUI.MouseCursor:getSingleton()
     1-- Define some global shortcuts for common Managers
     2guiMgr    = orxonox.GUIManager:getInstance()
     3inputMgr  = orxonox.InputManager:getInstance()
     4schemeMgr = CEGUI.SchemeManager:getSingleton()
     5winMgr    = CEGUI.WindowManager:getSingleton()
    86
    97-- Load all required skins
     
    2523schemeMgr:loadScheme("OrxonoxGUIScheme.scheme")
    2624
     25local system = CEGUI.System:getSingleton()
    2726system:setDefaultMouseCursor(menuImageSet, "MouseArrow")
    2827system:setDefaultFont("BlueHighway-12")
    2928system:setDefaultTooltip("MenuWidgets/Tooltip")
    3029
    31 local loadedSheets = {}
    32 local activeMenuSheets = {size = 0, topSheetTuple = nil}
    33 --activeHUDSheets  = {size = 0, topSheetTuple = nil}
    34 local root = nil
    35 
    36 -- Require all tools
     30-- Convenience function and additional tools
    3731require("GUITools")
    38 
    39 
    40 -----------------------
    41 --- Local functions ---
    42 -----------------------
    43 
    44 -- Loads the GUI with the specified name
    45 -- The name corresponds to the filename of the *.lua and *.layout files
    46 -- but without the extension
    47 local function loadSheet(name)
    48     -- Check if it has already been loaded
    49     local sheet = loadedSheets[name]
    50     if sheet == nil then
    51         -- Load the sheet
    52         sheet = require(name)
    53         sheet:load()
    54         loadedSheets[name] = sheet
    55     end
    56     return sheet
    57 end
    58 
    59 local function hideCursor()
    60     if cursor:isVisible() then
    61         cursor:hide()
    62     end
    63 end
    64 
    65 local function showCursor()
    66     if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then
    67         cursor:show()
    68     end
    69 end
    70 
    71 
    72 ------------------------
    73 --- Global functions ---
    74 ------------------------
    75 
    76 -- ?
    77 function showMenuSheet(name, bHidePrevious, ptr)
    78     local sheet = showMenuSheet(name, bHidePrevious)
    79     sheet.overlay = ptr
    80     return sheet
    81 end
    82 
    83 -- Shows the specified menu sheet and loads it if neccessary
    84 function showMenuSheet(name, bHidePrevious)
    85     -- Get sheet (or load it)
    86     local menuSheet = loadSheet(name)
    87     if not menuSheet then
    88         return nil
    89     end
    90 
    91     -- Use sheet's value if nil was provided
    92     if bHidePrevious == nil then
    93         bHidePrevious = menuSheet.bHidePrevious
    94         assert(bHidePrevious ~= nil)
    95     end
    96 
    97     -- Pause game control if this is the first menu to be displayed
    98     -- HUGE HACK?
    99     if activeMenuSheets.size == 0 then
    100         orxonox.HumanController:pauseControl()
    101     end
    102 
    103     -- Hide if already displayed (to make sure it is up front in the end)
    104     if activeMenuSheets[name] ~= nil then
    105         hideMenuSheet(name)
    106     end
    107 
    108     -- Add the sheet in a tuple of additional information
    109     local sheetTuple =
    110     {
    111         ["sheet"]          = menuSheet,
    112         ["bHidePrevious"]  = bHidePrevious
    113     }
    114     table.insert(activeMenuSheets, sheetTuple) -- indexed array access
    115     activeMenuSheets[name] = sheetTuple -- name access
    116     activeMenuSheets.size = activeMenuSheets.size + 1
    117     activeMenuSheets.topSheetTuple = sheetTuple
    118 
    119     if not root then
    120         setBackground("")
    121     end
    122 
    123     -- Add sheet to the root window
    124     root:addChildWindow(menuSheet.window)
    125 
    126     -- Handle input distribution
    127     orxonox.InputManager:getInstance():enterState(menuSheet.inputState)
    128 
    129     -- Only change cursor situation if menuSheet.tShowCursor ~= TriBool.Dontcare
    130     if menuSheet.tShowCursor == TriBool.True then
    131         showCursor()
    132     elseif menuSheet.tShowCursor == TriBool.False then
    133         hideCursor()
    134     end
    135 
    136     -- Hide all previous sheets if necessary
    137     if bHidePrevious then
    138         for i = 1, activeMenuSheets.size - 1 do
    139             activeMenuSheets[i].sheet:hide()
    140         end
    141     end
    142 
    143     menuSheet:show()
    144 
    145     return menuSheet
    146 end
    147 
    148 function hideMenuSheet(name)
    149     local sheetTuple = activeMenuSheets[name]
    150     if sheetTuple == nil then
    151         return
    152     end
    153 
    154     -- Hide the sheet
    155     sheetTuple.sheet:hide()
    156 
    157     -- Show sheets that were hidden by the sheet to be removed
    158     local i = activeMenuSheets.size
    159     -- Only do something if all sheets on top of sheetTuple
    160     -- have bHidePrevious == true and sheetTuple.bHidePrevious == true
    161     while i > 0 do
    162         if activeMenuSheets[i].bHidePrevious then
    163             if activeMenuSheets[i] == sheetTuple then
    164                 i = i - 1
    165                 while i > 0 do
    166                     activeMenuSheets[i].sheet:show()
    167                     if activeMenuSheets[i].bHidePrevious then
    168                         break
    169                     end
    170                     i = i - 1
    171                 end
    172             end
    173             break
    174         end
    175         i = i - 1
    176     end
    177 
    178     -- Remove sheet with its tuple from the table
    179     root:removeChildWindow(sheetTuple.sheet.window)
    180     table.remove(activeMenuSheets, table.findIndex(activeMenuSheets, sheetTuple))
    181     activeMenuSheets[name] = nil
    182     activeMenuSheets.size = activeMenuSheets.size - 1
    183     activeMenuSheets.topSheetTuple = activeMenuSheets[activeMenuSheets.size]
    184 
    185     -- Leave the input state
    186     orxonox.InputManager:getInstance():leaveState(sheetTuple.sheet.inputState)
    187    
    188     -- CURSOR SHOWING
    189     local i = activeMenuSheets.size
    190     -- Find top most sheet that doesn't have tShowCusor == TriBool.Dontcare
    191     while i > 0 and activeMenuSheets[i].sheet.tShowCursor == TriBool.Dontcare do
    192         i = i - 1
    193     end
    194     if i > 0 and activeMenuSheets[i].sheet.tShowCursor == TriBool.True then
    195         showCursor()
    196     else
    197         hideCursor()
    198     end
    199 
    200     -- Resume control if the last menu is hidden
    201     if activeMenuSheets.size == 0 then
    202         orxonox.HumanController:resumeControl()
    203         hideCursor()
    204     end
    205 end
    206 
    207 -- Hides all menu GUI sheets
    208 function hideAllMenuSheets()
    209     while activeMenuSheets.size ~= 0 do
    210         hideMenuSheet(activeMenuSheets.topSheetTuple.sheet.name)
    211     end
    212 end
    213 
    214 function keyESC()
    215     -- HUGE, very HUGE hacks!
    216     if activeMenuSheets.size == 1 and activeMenuSheets[1].sheet.name == "MainMenu" then
    217         orxonox.execute("exit")
    218     elseif activeMenuSheets.size > 0 then
    219         orxonox.execute("hideMenuSheet "..activeMenuSheets.topSheetTuple.sheet.name)
    220     else
    221         showMenuSheet("InGameMenu")
    222     end
    223 end
    224 
    225 function setBackground(name)
    226     local newroot
    227     if root ~= nil then
    228         root:rename("oldRootWindow")
    229     end
    230     if name ~= "" then
    231         newroot = winMgr:loadWindowLayout(name .. ".layout")
    232         newroot:rename("AbsoluteRootWindow")
    233         system:setGUISheet(newroot)
    234     else
    235         newroot = winMgr:createWindow("DefaultWindow", "AbsoluteRootWindow")
    236         newroot:setProperty("Alpha", "0.0")
    237         newroot:setSize(CEGUI.UVector2(CEGUI.UDim(1.0,0),CEGUI.UDim(1.0,0)))
    238         system:setGUISheet(newroot)
    239     end
    240     if root ~= nil then
    241         local child
    242         while root:getChildCount()~=0 do
    243             child = root:getChildAtIdx(0)
    244             root:removeChildWindow(child)
    245             newroot:addChildWindow(child)
    246         end
    247         winMgr:destroyWindow(root)
    248     end
    249     newroot:show()
    250     root = newroot
    251 end
  • code/branches/gamestates2/data/gui/scripts/SheetManager.lua

    r6722 r6737  
    1 winMgr   = CEGUI.WindowManager:getSingleton()
    2 guiMgr   = orxonox.GUIManager:getInstance()
    3 inputMgr = orxonox.InputManager:getInstance()
     1-- SheetManager.lua
    42
    5 local schemeMgr = CEGUI.SchemeManager:getSingleton()
    6 local system    = CEGUI.System:getSingleton()
    7 local cursor    = CEGUI.MouseCursor:getSingleton()
    8 
    9 -- Load all required skins
    10 schemeMgr:loadScheme("TaharezGreenLook.scheme")
    11 --schemeMgr:loadScheme("TaharezLook.scheme")
    12 --schemeMgr:loadScheme("WindowsLook.scheme")
    13 --schemeMgr:loadScheme("VanillaLook.scheme")
    14 --schemeMgr:loadScheme("SleekSpaceLook.scheme")
    15 
    16 -- Connect skin specific window types with our own window types
    17 -- By loading a different file (if there is) you can change the skin
    18 -- of the menus or the HUD independently
    19 schemeMgr:loadScheme("TaharezGreenMenuWidgets.scheme")
    20 menuImageSet = "TaharezGreenLook"
    21 schemeMgr:loadScheme("TaharezGreenHUDWidgets.scheme")
    22 hudImageSet = "TaharezGreenLook"
    23 
    24 -- Just a remaining test hack
    25 schemeMgr:loadScheme("OrxonoxGUIScheme.scheme")
    26 
    27 system:setDefaultMouseCursor(menuImageSet, "MouseArrow")
    28 system:setDefaultFont("BlueHighway-12")
    29 system:setDefaultTooltip("MenuWidgets/Tooltip")
    30 
     3local cursor = CEGUI.MouseCursor:getSingleton()
    314local loadedSheets = {}
    325local activeMenuSheets = {size = 0, topSheetTuple = nil}
    33 --activeHUDSheets  = {size = 0, topSheetTuple = nil}
    34 local root = nil
    35 
    36 -- Require all tools
    37 require("GUITools")
    38 
     6local menuSheetsRoot = guiMgr:getMenuRootWindow()
    397
    408-----------------------
     
    4210-----------------------
    4311
     12local function hideCursor()
     13    if cursor:isVisible() then
     14        cursor:hide()
     15    end
     16end
     17
     18local function showCursor()
     19    if not cursor:isVisible() and inputMgr:isMouseExclusive() then
     20        cursor:show()
     21    end
     22end
     23
     24
     25------------------------
     26--- Global functions ---
     27------------------------
     28
    4429-- Loads the GUI with the specified name
    4530-- The name corresponds to the filename of the *.lua and *.layout files
    4631-- but without the extension
    47 local function loadSheet(name)
     32function loadSheet(name)
    4833    -- Check if it has already been loaded
    4934    local sheet = loadedSheets[name]
     
    5742end
    5843
    59 local function hideCursor()
    60     if cursor:isVisible() then
    61         cursor:hide()
    62     end
    63 end
    64 
    65 local function showCursor()
    66     if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then
    67         cursor:show()
    68     end
    69 end
    70 
    71 
    72 ------------------------
    73 --- Global functions ---
    74 ------------------------
    75 
    7644-- ?
    7745function showMenuSheet(name, bHidePrevious, ptr)
     
    8351-- Shows the specified menu sheet and loads it if neccessary
    8452function showMenuSheet(name, bHidePrevious)
     53    if name == "" then
     54        return nil
     55    end
    8556    -- Get sheet (or load it)
    8657    local menuSheet = loadSheet(name)
    87     if not menuSheet then
    88         return nil
    89     end
    9058
    9159    -- Use sheet's value if nil was provided
     
    11785    activeMenuSheets.topSheetTuple = sheetTuple
    11886
    119     if not root then
    120         setBackground("")
    121     end
    122 
    12387    -- Add sheet to the root window
    124     root:addChildWindow(menuSheet.window)
     88    menuSheetsRoot:addChildWindow(menuSheet.window)
    12589
    12690    -- Handle input distribution
    127     orxonox.InputManager:getInstance():enterState(menuSheet.inputState)
     91    inputMgr:enterState(menuSheet.inputState)
    12892
    12993    -- Only change cursor situation if menuSheet.tShowCursor ~= TriBool.Dontcare
     
    177141
    178142    -- Remove sheet with its tuple from the table
    179     root:removeChildWindow(sheetTuple.sheet.window)
     143    menuSheetsRoot:removeChildWindow(sheetTuple.sheet.window)
    180144    table.remove(activeMenuSheets, table.findIndex(activeMenuSheets, sheetTuple))
    181145    activeMenuSheets[name] = nil
     
    184148
    185149    -- Leave the input state
    186     orxonox.InputManager:getInstance():leaveState(sheetTuple.sheet.inputState)
     150    inputMgr:leaveState(sheetTuple.sheet.inputState)
    187151   
    188152    -- CURSOR SHOWING
     
    223187end
    224188
    225 function setBackground(name)
    226     local newroot
    227     if root ~= nil then
    228         root:rename("oldRootWindow")
    229     end
    230     if name ~= "" then
    231         newroot = winMgr:loadWindowLayout(name .. ".layout")
    232         newroot:rename("AbsoluteRootWindow")
    233         system:setGUISheet(newroot)
    234     else
    235         newroot = winMgr:createWindow("DefaultWindow", "AbsoluteRootWindow")
    236         newroot:setProperty("Alpha", "0.0")
    237         newroot:setSize(CEGUI.UVector2(CEGUI.UDim(1.0,0),CEGUI.UDim(1.0,0)))
    238         system:setGUISheet(newroot)
    239     end
    240     if root ~= nil then
    241         local child
    242         while root:getChildCount()~=0 do
    243             child = root:getChildAtIdx(0)
    244             root:removeChildWindow(child)
    245             newroot:addChildWindow(child)
    246         end
    247         winMgr:destroyWindow(root)
    248     end
    249     newroot:show()
    250     root = newroot
     189function setBackgroundImage(imageSet, imageName)
     190    guiMgr:setBackgroundImage(imageSet, imageName)
    251191end
     192
     193----------------------
     194--- Initialisation ---
     195----------------------
     196
     197hideCursor()
  • code/branches/gamestates2/src/libraries/core/GUIManager.cc

    r6736 r6737  
    4242#include <CEGUISystem.h>
    4343#include <CEGUIWindow.h>
     44#include <CEGUIWindowManager.h>
    4445#include <ogreceguirenderer/OgreCEGUIRenderer.h>
    4546
     
    147148        guiSystem_->injectMousePosition((float)mousePosition.first, (float)mousePosition.second);
    148149
    149         // Hide the mouse cursor unless playing in full screen mode
    150         if (!GraphicsManager::getInstance().isFullScreen())
    151             CEGUI::MouseCursor::getSingleton().hide();
    152 
    153         // Initialise the basic Lua code
     150        // Initialise the Lua framework and load the schemes
    154151        this->luaState_->doFile("InitialiseGUI.lua");
     152
     153        // Create the root nodes
     154        this->rootWindow_ = CEGUI::WindowManager::getSingleton().createWindow("MenuWidgets/StaticImage", "AbsoluteRootWindow");
     155        this->rootWindow_->setProperty("FrameEnabled", "False");
     156        this->hudRootWindow_ = CEGUI::WindowManager::getSingleton().createWindow("DefaultWindow", "HUDRootWindow");
     157        this->menuRootWindow_ = CEGUI::WindowManager::getSingleton().createWindow("DefaultWindow", "MenuRootWindow");
     158        // And connect them
     159        CEGUI::System::getSingleton().setGUISheet(this->rootWindow_);
     160        this->rootWindow_->addChildWindow(this->hudRootWindow_);
     161        this->rootWindow_->addChildWindow(this->menuRootWindow_);
     162
     163        // Set up the sheet manager in the Lua framework
     164        this->luaState_->doFile("SheetManager.lua");
    155165    }
    156166
     
    203213    @param str
    204214        reference to string object holding the Lua code which is to be executed
    205 
    206         This function gives total access to the GUI. You can execute ANY Lua code here.
    207215    */
    208216    void GUIManager::executeCode(const std::string& str)
     
    217225    void GUIManager::loadGUI(const std::string& name)
    218226    {
    219         this->executeCode("loadGUI(\"" + name + "\")");
     227        this->executeCode("loadSheet(\"" + name + "\")");
    220228    }
    221229
     
    292300    }
    293301
    294     void GUIManager::setBackground(const std::string& name)
    295     {
    296         this->executeCode("setBackground(\"" + name + "\")");
     302    void GUIManager::setBackgroundImage(const std::string& imageSet, const std::string imageName)
     303    {
     304        if (imageSet.empty() || imageName.empty())
     305            this->setBackgroundImage("set: " + imageSet + " image: " + imageName);
     306        else
     307            this->setBackgroundImage("");
     308    }
     309
     310    void GUIManager::setBackgroundImage(const std::string& image)
     311    {
     312        if (image.empty())
     313            this->rootWindow_->setProperty("Alpha", "0.0");
     314        else
     315            this->rootWindow_->setProperty("Alpha", "1.0");
     316        this->rootWindow_->setProperty("Image", image);
    297317    }
    298318
  • code/branches/gamestates2/src/libraries/core/GUIManager.h

    r6736 r6737  
    7979        static void hideGUI(const std::string& name);
    8080        void keyESC();
    81         void setBackground(const std::string& name);
     81        void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export
     82        void setBackgroundImage(const std::string& image);
    8283
     84        //! Creates a new InputState to be used with a GUI Sheet
    8385        const std::string& createInputState(const std::string& name, TriBool::Value showCursor = TriBool::True, TriBool::Value useKeyboard = TriBool::True, bool bBlockJoyStick = false); // tolua_export
     86
     87        //! Returns the root window for all menu sheets
     88        CEGUI::Window* getMenuRootWindow() { return this->menuRootWindow_; } // tolua_export
     89        //! Returns the root window for all HUD sheets
     90        CEGUI::Window* getHUDRootWindow() { return this->hudRootWindow_; } // tolua_export
    8491
    8592        void setCamera(Ogre::Camera* camera);
     
    120127        CEGUI::ResourceProvider*             resourceProvider_; //!< CEGUI's resource provider
    121128        CEGUI::Logger*                       ceguiLogger_;      //!< CEGUI's logger to be able to log CEGUI errors in our log
     129        CEGUI::Window*                       rootWindow_;       //!< Root node for all windows
     130        CEGUI::Window*                       hudRootWindow_;    //!< Root node for the HUD sheets
     131        CEGUI::Window*                       menuRootWindow_;   //!< Root node for the menu sheets (used by Lua)
    122132        std::map<std::string, PlayerInfo*>   players_;          //!< Stores the player (owner) for each GUI
    123133        Ogre::Camera*                        camera_;           //!< Camera used to render the scene with the GUI
  • code/branches/gamestates2/src/orxonox/overlays/GUISheet.cc

    r6722 r6737  
    4040        : BaseObject(creator)
    4141        , bShowOnLoad_(false)
    42         , bShowCursor_(true)
    4342        , bHidePrevious_(false)
     43        , bHidePreviousSet_(false)
    4444    {
    4545        RegisterObject(GUISheet);
     
    5757        SUPER(GUISheet, XMLPort, xmlElement, mode);
    5858
    59         XMLPortParam(GUISheet, "showOnLoad",   setShowOnLoad,       getShowOnLoad,       xmlElement, mode);
    60         XMLPortParam(GUISheet, "showCursor",   setCursorVisibility, getCursorVisibility, xmlElement, mode);
    61         XMLPortParam(GUISheet, "hidePrevious", setPreviousHiding,   getPreviousHiding,   xmlElement, mode);
    62         XMLPortParam(GUISheet, "script",       setScript,           getScript,           xmlElement, mode);
     59        XMLPortParam(GUISheet, "showOnLoad",   setShowOnLoad,     getShowOnLoad,     xmlElement, mode);
     60        XMLPortParam(GUISheet, "hidePrevious", setPreviousHiding, getPreviousHiding, xmlElement, mode);
     61        XMLPortParam(GUISheet, "sheetName",    setSheetName,      getSheetName,      xmlElement, mode);
     62        XMLPortParam(GUISheet, "backgroundImage",  setBackgroundImage,  getBackgroundImage,  xmlElement, mode);
     63
     64        if (this->bShowOnLoad_)
     65            this->show();
    6366    }
    6467
    6568    void GUISheet::show()
    6669    {
    67         GUIManager::showGUI(this->script_, this->bHidePrevious_);
     70        GUIManager::getInstance().setBackgroundImage(this->backgroundImage_);
     71        if (this->bHidePreviousSet_)
     72            GUIManager::getInstance().showGUI(this->sheetName_, this->bHidePrevious_);
     73        else
     74            GUIManager::getInstance().showGUI(this->sheetName_);
    6875    }
    6976
    7077    void GUISheet::hide()
    7178    {
    72         GUIManager::hideGUI(this->script_);
     79        GUIManager::getInstance().hideGUI(this->sheetName_);
     80        if (!this->backgroundImage_.empty())
     81            GUIManager::getInstance().setBackgroundImage("");
    7382    }
    7483
    75     void GUISheet::setScript(const std::string& filename)
     84    void GUISheet::setSheetName(const std::string& name)
    7685    {
    77         this->script_ = filename;
    78         GUIManager::getInstance().loadGUI(this->script_);
    79         if (this->bShowOnLoad_)
    80             this->show();
    81     }
    82 
    83     void GUISheet::setCursorVisibility(bool bShow)
    84     {
    85         this->bShowCursor_ = bShow;
    86         // TODO: This call has no effect when already showing!
     86        this->sheetName_ = name;
     87        GUIManager::getInstance().loadGUI(this->sheetName_);
    8788    }
    8889
     
    9091    {
    9192        this->bHidePrevious_ = bHide;
    92         // TODO: This call has no effect when already showing!
     93        this->bHidePreviousSet_ = true;
     94        // Note: This call has no effect when already showing!
    9395    }
    9496}
  • code/branches/gamestates2/src/orxonox/overlays/GUISheet.h

    r6595 r6737  
    4949        void hide();
    5050
    51         void setScript(const std::string& filename);
    52         inline const std::string& getScript() const
    53             { return this->script_; }
     51        void setSheetName(const std::string& name);
     52        inline const std::string& getSheetName() const
     53            { return this->sheetName_; }
    5454
    5555        inline void setShowOnLoad(bool bShow)
     
    5858            { return this->bShowOnLoad_; }
    5959
    60         void setCursorVisibility(bool bShow);
    61         inline bool getCursorVisibility() const
    62             { return this->bShowCursor_; }
    63 
    6460        void setPreviousHiding(bool bHide);
    6561        inline bool getPreviousHiding() const
    6662            { return this->bHidePrevious_; }
    6763
     64        void setBackgroundImage(const std::string& image)
     65            { this->backgroundImage_ = image; }
     66        inline const std::string& getBackgroundImage() const
     67            { return this->backgroundImage_; }
     68
    6869    private:
    69         std::string script_;
     70        std::string sheetName_;
    7071        bool bShowOnLoad_;
    71         bool bShowCursor_;
    7272        bool bHidePrevious_;
     73        bool bHidePreviousSet_;
     74        std::string backgroundImage_;
    7375  };
    7476}
Note: See TracChangeset for help on using the changeset viewer.