X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fpanel.hxx;h=ca1eefbe6aaeafbeff36b02dace81309158b7554;hb=68c71d5787f2a0309e35c3e05939950113618cb7;hp=81f7bc3a83c59dfe7171671db5cf9cda2e17e35c;hpb=b0f9d24f9dbab9eb2de07c48e8bfe48f3851d7e4;p=flightgear.git diff --git a/src/Cockpit/panel.hxx b/src/Cockpit/panel.hxx index 81f7bc3a8..ca1eefbe6 100644 --- a/src/Cockpit/panel.hxx +++ b/src/Cockpit/panel.hxx @@ -21,28 +21,15 @@ #ifndef __PANEL_HXX #define __PANEL_HXX -#ifndef __cplusplus -# error This library requires C++ -#endif - - -#ifdef HAVE_CONFIG_H -# include -#endif - -#ifdef HAVE_WINDOWS_H -# include -#endif - #include #include #include -#include - #include #include -#include +#include + +#include #include #include @@ -51,17 +38,12 @@ #include #include
-#include -#include - -SG_USING_STD(vector); -SG_USING_STD(map); - class FGPanelInstrument; +class fntFont; +class DCLGPS; +class IntRect; - - //////////////////////////////////////////////////////////////////////// // Texture management. //////////////////////////////////////////////////////////////////////// @@ -75,9 +57,11 @@ class FGPanelInstrument; class FGTextureManager { public: - static osg::Texture2D* createTexture(const string &relativePath); + static osg::Texture2D* createTexture(const std::string &relativePath, + bool staticTexture = true); + static void addTexture(const std::string &relativePath, osg::Texture2D* texture); private: - static map > _textureMap; + static std::map > _textureMap; }; @@ -91,14 +75,14 @@ class FGCroppedTexture public: FGCroppedTexture (); - FGCroppedTexture (const string &path, + FGCroppedTexture (const std::string &path, float _minX = 0.0, float _minY = 0.0, float _maxX = 1.0, float _maxY = 1.0); virtual ~FGCroppedTexture (); - virtual void setPath (const string &path) { _path = path; } + virtual void setPath (const std::string &path) { _path = path; } - virtual const string &getPath () const { return _path; } + virtual const std::string &getPath () const { return _path; } virtual osg::StateSet* getTexture (); @@ -113,7 +97,7 @@ public: private: - string _path; + std::string _path; osg::ref_ptr _texture; float _minX, _minY, _maxX, _maxY; }; @@ -133,23 +117,16 @@ private: * redraw themselves when necessary, and will pass mouse clicks on to * the appropriate instruments for processing. */ -class FGPanel : public SGSubsystem +class FGPanel : public SGReferenced { public: FGPanel (); virtual ~FGPanel (); - // Update the panel (every frame). - virtual void init (); - virtual void bind (); - virtual void unbind (); virtual void draw (osg::State& state); - virtual void update (double); - void update (osg::State& state); - virtual void update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GLfloat winh); - - virtual void updateMouseDelay(); + + virtual void updateMouseDelay(double dt); // transfer pointer ownership!!! virtual void addInstrument (FGPanelInstrument * instrument); @@ -160,11 +137,6 @@ public: // Background multiple textures. virtual void setMultiBackground (osg::Texture2D* texture, int idx); - // Make the panel visible or invisible. - virtual bool getVisibility () const; - virtual void setVisibility (bool visibility); - - // Full width of panel. virtual void setWidth (int width) { _width = width; } virtual int getWidth () const { return _width; } @@ -181,29 +153,40 @@ public: virtual int getYOffset () const { return _y_offset->getIntValue(); } // View height. - virtual void setViewHeight (int height) { _view_height = height; } - virtual int getViewHeight () const { return _view_height; } - + // virtual void setViewHeight (int height) { _view_height = height; } + // virtual int getViewHeight () const { return _view_height; } + + /** + * find the actual logical extend of the panel, including all instruments + * and actions. + */ + void getLogicalExtent(int &x0, int& y0, int& x1, int &y1); + // Handle a mouse click. virtual bool doMouseAction (int button, int updown, int x, int y); virtual bool doLocalMouseAction(int button, int updown, int x, int y); virtual void setDepthTest (bool enable); + bool getAutohide(void) const { return _autohide; }; + void setAutohide(bool enable) { _autohide = enable; }; + + double getAspectScale() const; + private: void setupVirtualCockpit(); void cleanupVirtualCockpit(); mutable bool _mouseDown; mutable int _mouseButton, _mouseX, _mouseY; - mutable int _mouseDelay; + double _mouseActionRepeat; + mutable FGPanelInstrument * _mouseInstrument; - typedef vector instrument_list_type; + typedef std::vector instrument_list_type; int _width; int _height; - int _view_height; + // int _view_height; - SGPropertyNode_ptr _visibility; SGPropertyNode_ptr _x_offset; SGPropertyNode_ptr _y_offset; SGPropertyNode_ptr _jitter; @@ -217,6 +200,9 @@ private: // List of instruments in panel. instrument_list_type _instruments; bool _enable_depth_test; + bool _autohide; + + SGPropObjBool _drawPanelHotspots; }; @@ -250,7 +236,7 @@ public: // Setters. // transfer pointer ownership - virtual void addBinding (FGBinding * binding, int updown); + virtual void addBinding (SGBinding * binding, int updown); virtual void setButton (int button) { _button = button; } virtual void setX (int x) { _x = x; } virtual void setY (int y) { _y = y; } @@ -271,7 +257,7 @@ public: virtual bool doAction (int updown); private: - typedef vector binding_list_t; + typedef std::vector binding_list_t; int _button; int _x; @@ -354,7 +340,7 @@ public: protected: int _w, _h; - typedef vector transformation_list; + typedef std::vector transformation_list; transformation_list _transformations; }; @@ -399,9 +385,10 @@ public: // Coordinates relative to centre. virtual bool doMouseAction (int button, int updown, int x, int y); + void extendRect(IntRect& r) const; protected: int _x, _y, _w, _h; - typedef vector action_list_type; + typedef std::vector action_list_type; action_list_type _actions; }; @@ -428,7 +415,7 @@ public: virtual void addTransformation (FGPanelTransformation * transformation); protected: - typedef vector layer_list; + typedef std::vector layer_list; layer_list _layers; }; @@ -471,7 +458,7 @@ public: // transfer pointer ownership virtual void addLayer (FGInstrumentLayer * layer); protected: - vector _layers; + std::vector _layers; }; @@ -524,17 +511,17 @@ public: class Chunk : public SGConditional { public: - Chunk (const string &text, const string &fmt = "%s"); + Chunk (const std::string &text, const std::string &fmt = "%s"); Chunk (ChunkType type, const SGPropertyNode * node, - const string &fmt = "", float mult = 1.0, float offs = 0.0, + const std::string &fmt = "", float mult = 1.0, float offs = 0.0, bool truncation = false); const char * getValue () const; private: ChunkType _type; - string _text; + std::string _text; SGConstPropertyNode_ptr _node; - string _fmt; + std::string _fmt; float _mult; float _offs; bool _trunc; @@ -550,20 +537,20 @@ public: virtual void addChunk (Chunk * chunk); virtual void setColor (float r, float g, float b); virtual void setPointSize (float size); - virtual void setFontName ( const string &name ); + virtual void setFontName ( const std::string &name ); virtual void setFont (fntFont * font); private: void recalc_value () const; - typedef vector chunk_list; + typedef std::vector chunk_list; chunk_list _chunks; float _color[4]; float _pointSize; - mutable string _font_name; - mutable string _value; + mutable std::string _font_name; + mutable std::string _value; mutable SGTimeStamp _then; mutable SGTimeStamp _now; }; @@ -582,22 +569,7 @@ public: FGSwitchLayer (); virtual void draw (osg::State& state); -}; - - - - -//////////////////////////////////////////////////////////////////////// -// Functions. -//////////////////////////////////////////////////////////////////////// - -/** - * Test whether the panel should be visible. - */ -bool fgPanelVisible (); - - - +}; #endif // __PANEL_HXX // end of panel.hxx