X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2Fnew_gui.hxx;h=a0e4e69af6b963fddd6b03ff6f8074085bf6f8c8;hb=4befe0e6ea6b5f21119364f1175a0b6c8e97395c;hp=49d4fe94c6b7f017ad3e95dd2fe15e8c49a4bee6;hpb=7ceb85d454363d5490383874c7918875871308a1;p=flightgear.git diff --git a/src/GUI/new_gui.hxx b/src/GUI/new_gui.hxx index 49d4fe94c..a0e4e69af 100644 --- a/src/GUI/new_gui.hxx +++ b/src/GUI/new_gui.hxx @@ -3,33 +3,20 @@ #ifndef __NEW_GUI_HXX #define __NEW_GUI_HXX 1 -#ifndef __cplusplus -# error This library requires C++ -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include
-#include - -#include // for SG_USING_STD #include #include +#include #include -SG_USING_STD(vector); - #include -SG_USING_STD(map); - -#include
+#include // for auto_ptr on some systems +#include // for strcmp in lstr() (in this header, alas) class FGMenuBar; class FGDialog; -class FGBinding; - +class FGColor; +class FGFontCache; +class puFont; /** * XML-configured GUI subsystem. @@ -59,8 +46,10 @@ public: */ virtual void init (); + virtual void shutdown (); + /** - * Reinitialize the GUI subsystem. + * Reinitialize the GUI subsystem. Reloads all XML dialogs. */ virtual void reinit (); @@ -85,6 +74,11 @@ public: */ virtual void update (double delta_time_sec); + /** + * Redraw the GUI picking up new GUI colors. + */ + virtual void redraw (); + /** * Creates a new dialog box, using the same property format as the * gui/dialogs configuration files. Does not display the @@ -109,7 +103,7 @@ public: * @param name The name of the dialog box. * @return true if the dialog exists, false otherwise. */ - virtual bool showDialog (const string &name); + virtual bool showDialog (const std::string &name); /** @@ -128,14 +122,20 @@ public: * @param name The name of the dialog box. * @return true if the dialog was active, false otherwise. */ - virtual bool closeDialog (const string &name); + virtual bool closeDialog (const std::string &name); + + /** + * Get dialog property tree's root node. + * @param name The name of the dialog box. + * @return node pointer if the dialog was found, zero otherwise. + */ + virtual SGPropertyNode_ptr getDialogProperties (const std::string &name); /** * Return a pointer to the current menubar. */ virtual FGMenuBar * getMenuBar (); - /** * Ignore this method. * @@ -151,6 +151,27 @@ public: */ virtual FGDialog * getActiveDialog (); + + /** + * Get the named dialog if active. + * + * @return The named dialog, or 0 if it isn't active. + */ + virtual FGDialog * getDialog (const std::string &name); + + + virtual FGColor *getColor (const char * name) const { + _citt_t it = _colors.find(name); + return (it != _colors.end()) ? it->second : NULL; + } + virtual FGColor *getColor (const std::string &name) const { + _citt_t it = _colors.find(name.c_str()); + return (it != _colors.end()) ? it->second : NULL; + } + + virtual puFont *getDefaultFont() { return _font; } + + protected: /** @@ -167,19 +188,52 @@ protected: */ virtual void setMenuBarVisible (bool visible); + virtual void setStyle (); + virtual void setupFont (SGPropertyNode *); -private: + /** + * Used by reinit() and redraw() to close all dialogs and to apply + * current GUI colors. If "reload" is false, reopens all dialogs. + * Otherwise reloads all XML dialog files from disk and reopens all + * but Nasal * generated dialogs, omitting dynamic widgets. (This + * is only useful for GUI development.) + */ + virtual void reset (bool reload); - // Free all allocated memory. - void clear (); +private: + void createMenuBarImplementation(); + + struct ltstr + { + bool operator()(const char* s1, const char* s2) const { + return strcmp(s1, s2) < 0; + } + }; + + puFont *_font; + 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 char * path); + void readDir (const SGPath& path); - FGMenuBar * _menubar; + std::auto_ptr _menubar; FGDialog * _active_dialog; - map _active_dialogs; - map _dialog_props; + 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; };