X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2Fnew_gui.hxx;h=a0e4e69af6b963fddd6b03ff6f8074085bf6f8c8;hb=4befe0e6ea6b5f21119364f1175a0b6c8e97395c;hp=0797d53a66ac8551f4b8adc9e0362b00fd832297;hpb=02fb83c774020633cb62e3b8154337510bed1de3;p=flightgear.git diff --git a/src/GUI/new_gui.hxx b/src/GUI/new_gui.hxx index 0797d53a6..a0e4e69af 100644 --- a/src/GUI/new_gui.hxx +++ b/src/GUI/new_gui.hxx @@ -3,25 +3,20 @@ #ifndef __NEW_GUI_HXX #define __NEW_GUI_HXX 1 -#include - #include #include #include -#include #include #include - -#include
- -class SGBinding; +#include // for auto_ptr on some systems +#include // for strcmp in lstr() (in this header, alas) class FGMenuBar; class FGDialog; class FGColor; class FGFontCache; - +class puFont; /** * XML-configured GUI subsystem. @@ -51,6 +46,8 @@ public: */ virtual void init (); + virtual void shutdown (); + /** * Reinitialize the GUI subsystem. Reloads all XML dialogs. */ @@ -204,6 +201,8 @@ protected: virtual void reset (bool reload); private: + void createMenuBarImplementation(); + struct ltstr { bool operator()(const char* s1, const char* s2) const { @@ -212,132 +211,30 @@ private: }; puFont *_font; - map _colors; - typedef map::iterator _itt_t; - typedef map::const_iterator _citt_t; + typedef std::map ColourDict; + ColourDict _colors; + typedef ColourDict::iterator _itt_t; + typedef ColourDict::const_iterator _citt_t; void clear_colors(); // Read all the configuration files in a directory. void readDir (const SGPath& path); - FGMenuBar * _menubar; + std::auto_ptr _menubar; FGDialog * _active_dialog; - std::map _active_dialogs; - std::map _dialog_props; - -}; - - -class FGColor { -public: - FGColor() { clear(); } - FGColor(float r, float g, float b, float a = 1.0f) { set(r, g, b, a); } - FGColor(const SGPropertyNode *prop) { set(prop); } - FGColor(FGColor *c) { - if (c) set(c->_red, c->_green, c->_blue, c->_alpha); - } - - inline void clear() { _red = _green = _blue = _alpha = -1.0f; } - // merges in non-negative components from property with children etc. - bool merge(const SGPropertyNode *prop); - bool merge(const FGColor *color); - - bool set(const SGPropertyNode *prop) { clear(); return merge(prop); }; - bool set(const FGColor *color) { clear(); return merge(color); } - bool set(float r, float g, float b, float a = 1.0f) { - _red = r, _green = g, _blue = b, _alpha = a; - return true; - } - bool isValid() const { - return _red >= 0.0 && _green >= 0.0 && _blue >= 0.0; - } - void print() const; - - inline void setRed(float red) { _red = red; } - inline void setGreen(float green) { _green = green; } - inline void setBlue(float blue) { _blue = blue; } - inline void setAlpha(float alpha) { _alpha = alpha; } - - inline float red() const { return clamp(_red); } - inline float green() const { return clamp(_green); } - inline float blue() const { return clamp(_blue); } - inline float alpha() const { return _alpha < 0.0 ? 1.0 : clamp(_alpha); } - -protected: - float _red, _green, _blue, _alpha; - -private: - float clamp(float f) const { return f < 0.0 ? 0.0 : f > 1.0 ? 1.0 : f; } -}; + typedef std::map DialogDict; + DialogDict _active_dialogs; + + typedef std::map NamePathDict; + // mapping from dialog names to the corresponding XML property list + // which defines them + NamePathDict _dialog_names; + + // cache of loaded dialog proeprties + typedef std::map NameDialogDict; + NameDialogDict _dialog_props; - - -/** - * A class to keep all fonts available for future use. - * This also assures a font isn't resident more than once. - */ -class FGFontCache { -private: - // The parameters of a request to the cache. - struct FntParams - { - const std::string name; - const float size; - const float slant; - FntParams() : size(0.0f), slant(0.0f) {} - FntParams(const FntParams& rhs) - : name(rhs.name), size(rhs.size), slant(rhs.slant) - { - } - FntParams(const std::string& name_, float size_, float slant_) - : name(name_), size(size_), slant(slant_) - { - } - }; - struct FntParamsLess - : public std::binary_function - { - bool operator() (const FntParams& f1, const FntParams& f2) const; - }; - struct fnt { - fnt(puFont *pu = 0) : pufont(pu), texfont(0) {} - ~fnt() { if (texfont) { delete pufont; delete texfont; } } - // Font used by plib GUI code - puFont *pufont; - // TXF font - fntTexFont *texfont; - }; - // Path to the font directory - SGPath _path; - - typedef map TexFontMap; - typedef map PuFontMap; - TexFontMap _texFonts; - PuFontMap _puFonts; - - bool _initialized; - struct fnt *getfnt(const char *name, float size, float slant); - void init(); - -public: - FGFontCache(); - ~FGFontCache(); - - puFont *get(const char *name, float size=15.0, float slant=0.0); - puFont *get(SGPropertyNode *node); - - fntTexFont *getTexFont(const char *name, float size=15.0, float slant=0.0); - - SGPath getfntpath(const char *name); - /** - * Preload all the fonts in the FlightGear font directory. It is - * important to load the font textures early, with the proper - * graphics context current, so that no plib (or our own) code - * tries to load a font from disk when there's no current graphics - * context. - */ - bool initializeFonts(); };