📄 controlbar.h
字号:
// Similar to wxWindow's "push/pop-event-handler" methods, execept // that the plugin is deleted upon "popping". virtual void PopPlugin(); // Pop all plugins. virtual void PopAllPlugins(); // Adds the default plugins. These are cbPaneDrawPlugin, cbRowLayoutPlugin, cbBarDragPlugin, // cbAntiflickerPlugin, cbSimpleCustomizePlugin. // // This method is automatically invoked if no plugins were found upon // firing of the first plugin-event, i.e. when wxFrameLayout configures itself. virtual void PushDefaultPlugins(); // An advanced methods for plugin configuration using their // dynamic class information, for example CLASSINFO(pluginClass). // First checks if the plugin of the given class is already "hooked up". // If not, adds it to the top of the plugins chain. virtual void AddPlugin( wxClassInfo* pPlInfo, int paneMask = wxALL_PANES ); // First checks if the plugin of the given class is already hooked. // If so, removes it, and then inserts it into the chain // before the plugin of the class given by pNextPlInfo. // // Note: this method is handy in some cases where the order // of the plugin-chain could be important, for example when one plugin overrides // some functionality of another already-hooked plugin, // so that the former plugin should be hooked before the one // whose functionality is being overridden. virtual void AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlInfo, int paneMask = wxALL_PANES ); // Checks if the plugin of the given class is hooked, and removes // it if found. virtual void RemovePlugin( wxClassInfo* pPlInfo ); // Finds a plugin with the given class, or returns NULL if a plugin of the given // class is not hooked. virtual cbPluginBase* FindPlugin( wxClassInfo* pPlInfo ); // Returns true if there is a top plugin. bool HasTopPlugin(); DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS( wxFrameLayout )public: /* protected really, acessed only by plugins and serializers */ friend class cbDockPane; friend class wxBarHandler; wxWindow* mpFrame; // parent frame wxWindow* mpFrameClient; // client window cbDockPane* mPanes[MAX_PANES]; // panes in the panel // misc. cursors wxCursor* mpHorizCursor; wxCursor* mpVertCursor; wxCursor* mpNormalCursor; wxCursor* mpDragCursor; wxCursor* mpNECursor; // no-entry cursor // pens for decoration and shades wxPen mDarkPen; // default wxSYS_COLOUR_3DSHADOW wxPen mLightPen; // default wxSYS_COLOUR_3DHILIGHT wxPen mGrayPen; // default wxSYS_COLOUR_3DFACE wxPen mBlackPen; // default wxColour( 0, 0, 0) wxPen mBorderPen; // default wxSYS_COLOUR_3DFACE wxPen mNullPen; // transparent pen // pane to which the all mouse input is currently directed (caputred) cbDockPane* mpPaneInFocus; // pane, from which mouse pointer had just left cbDockPane* mpLRUPane; // bounds of client window in parent frame's coordinates wxRect mClntWndBounds; wxRect mPrevClntWndBounds; bool mFloatingOn; wxPoint mNextFloatedWndPos; wxSize mFloatingPosStep; // current plugin (right-most) plugin which receives events first cbPluginBase* mpTopPlugin; // plugin, which currently has captured all input events, otherwise NULL cbPluginBase* mpCaputesInput; // list of event handlers which are "pushed" onto each bar, to catch // mouse events which are not handled by bars, and froward them to the , // frome-layout and further to plugins wxList mBarSpyList; // list of top-most frames which contain floated bars wxList mFloatedFrames; // linked list of references to all bars (docked/floated/hidden) BarArrayT mAllBars; // FOR NOW:: dirty stuff... bool mClientWndRefreshPending; bool mRecalcPending; bool mCheckFocusWhenIdle;public: /* protected really (accessed only by plugins) */ // refrence to custom updates manager cbUpdatesManagerBase* mpUpdatesMgr; // Called to apply the calculated layout to window objects. void PositionClientWindow(); // Called to apply the calculated layout to window objects. void PositionPanes(); // Creates the cursors. void CreateCursors(); // Applies the calculated layout to a floating bar. void RepositionFloatedBar( cbBarInfo* pBar ); // Applies the state to the window objects. void DoSetBarState( cbBarInfo* pBar ); // The purpose of this function is unknown. bool LocateBar( cbBarInfo* pBarInfo, cbRowInfo** ppRow, cbDockPane** ppPane ); // Returns true if the position is within the given pane. bool HitTestPane( cbDockPane* pPane, int x, int y ); // Returns the pane for which the rectangle hit test succeeds, giving // preference to the given pane if supplied. cbDockPane* HitTestPanes( const wxRect& rect, cbDockPane* pCurPane ); // Returns the pane to which the given bar belongs. cbDockPane* GetBarPane( cbBarInfo* pBar ); // Delegated from "bar-spy". void ForwardMouseEvent( wxMouseEvent& event, cbDockPane* pToPane, int eventType ); // Routes the mouse event to the appropriate pane. void RouteMouseEvent( wxMouseEvent& event, int pluginEvtType ); // Shows all floated windows. void ShowFloatedWindows( bool show ); // Unhooks the layout from the frame. void UnhookFromFrame(); // Hooks the layout up to the frame (pushes the layout onto the // frame's event handler stack). void HookUpToFrame(); // Returns true if the platform allows reparenting. This may not return true // for all platforms. Reparenting allows control bars to be floated. bool CanReparent(); // Reparents pChild to have parent pNewParent. void ReparentWindow( wxWindow* pChild, wxWindow* pNewParent ); // Returns the previous client window rectangle. wxRect& GetPrevClientRect() { return mPrevClntWndBounds; } // Handles paint events, calling PaintPane for each pane. void OnPaint( wxPaintEvent& event ); // Handles background erase events. Currently does nothing. void OnEraseBackground( wxEraseEvent& event ); // Handles focus kill events. Currently does nothing. void OnKillFocus( wxFocusEvent& event ); // Handles focus set events. Currently does nothing. void OnSetFocus( wxFocusEvent& event ); // Handles activation events. Currently does nothing. void OnActivate( wxActivateEvent& event ); // Handles idle events. void OnIdle( wxIdleEvent& event ); // Returns a new cbGCUpdatesMgr object. virtual cbUpdatesManagerBase* CreateUpdatesManager();};/*A structure that is present in each item of layout,used by any particular updates-manager to storeauxiliary information to be used by its updating algorithm.*/class WXDLLIMPEXP_FL cbUpdateMgrData : public wxObject{ DECLARE_DYNAMIC_CLASS( cbUpdateMgrData )public: wxRect mPrevBounds; // previous state of layout item (in parent frame's coordinates) bool mIsDirty; // overrides result of current-against-previous bounds comparison, // i.e. requires item to be updated, regardless of it's current area wxObject* mpCustomData; // any custom data stored by specific updates mgr. // Default constructor. Is-dirty flag is set true initially. cbUpdateMgrData(); // Store the item state. void StoreItemState( const wxRect& boundsInParent ); // Set the dirty flag. void SetDirty( bool isDirty = true ); // Set custom data. void SetCustomData( wxObject* pCustomData ); // Returns the is-dirty flag. inline bool IsDirty() { return mIsDirty; }};/*Abstract interface for bar-size handler classes.These objects receive notifications whenever the dockingstate of the bar is changed, thus they provide the possibilityto adjust the values in cbDimInfo::mSizes accordingly.Specific handlers can be hooked up to specific types of bar.*/class WXDLLIMPEXP_FL cbBarDimHandlerBase : public wxObject{ DECLARE_ABSTRACT_CLASS( cbBarDimHandlerBase )public: int mRefCount; // since one dim-handler can be assigned // to multiple bars, it's instance is // reference-countedpublic: // Default constructor. The initial reference count is 0, since // the handler is not used until the first invocation of AddRef(). cbBarDimHandlerBase(); // Increments the reference count. void AddRef(); // Decrements the reference count, and if the count is at zero, // delete 'this'. void RemoveRef(); // Responds to "bar-state-changes" notifications. virtual void OnChangeBarState(cbBarInfo* pBar, int newState ) = 0; // Responds to bar resize notifications. virtual void OnResizeBar( cbBarInfo* pBar, const wxSize& given, wxSize& preferred ) = 0;};/*Helper class used internally by the wxFrameLayout class.Holds and manages information about bar dimensions.*/class WXDLLIMPEXP_FL cbDimInfo : public wxObject{ DECLARE_DYNAMIC_CLASS( cbDimInfo )public: wxSize mSizes[MAX_BAR_STATES]; // preferred sizes for each possible bar state wxRect mBounds[MAX_BAR_STATES]; // saved positions and sizes for each // possible state, values contain (-1)s if // not initialized yet int mLRUPane; // pane to which this bar was docked before it was floated // (FL_ALIGN_TOP,FL_ALIGN_BOTTOM,..) // top/bottom gap, separates decorations // from the bar's actual window, filled // with frame's beckground color, default: 0 int mVertGap; // left/right gap, separates decorations // from the bar's actual wndow, filled // with frame's beckground colour, default: 0 int mHorizGap; // NOTE:: gaps are given in frame's coord. orientation // true, if vertical/horizontal dimensions cannot be mannualy adjusted // by user using resizing handles. If false, the frame-layout // *automatically* places resizing handles among not-fixed bars bool mIsFixed; cbBarDimHandlerBase* mpHandler; // NULL, if no handler presentpublic: // Default constructor. cbDimInfo(void); // Constructor. // isFixed is true if vertical/horizontal dimensions cannot be manually adjusted // by the user using resizing handles. If false, the frame-layout // automatically places resizing handles among bars that do are not fixed. cbDimInfo( cbBarDimHandlerBase* pDimHandler, bool isFixed // (see comments on mIsFixed member) ); // Constructor taking dimenstion information. // // dh_x, dh_y are the dimensions when docked horizontally. // // dv_x, dv_y are the dimensions when docked vertically. // // f_x, f_y are the dimensions when floating. // // For information on isFixed, see comments above. // // horizGap is the left/right gap, separating decorations // from the bar's actual wndow, filled with the frame's background colour. // The dimension is given in the frame's coordinates. // // vertGap is the top/bottom gap, separating decorations // from the bar's actual wndow, filled with the frame's background colour. // The dimension is given in the frame's coordinates. cbDimInfo( int dh_x, int dh_y, int dv_x, int dv_y, int f_x, int f_y, bool isFixed = true, int horizGap = 6, int vertGap = 6, cbBarDimHandlerBase* pDimHandler = NULL ); // Constructor. cbDimInfo( int x, int y, bool isFixed = true, int gap = 6, cbBarDimHandlerBase* pDimHandler = NULL ); // Destructor. Destroys handler automatically, if present. ~cbDimInfo();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -