📄 basic.h
字号:
/////////////////////////////////////////////////////////////////////////////// Name: basic.h// Purpose: Basic OGL classes and definitions// Author: Julian Smart// Modified by:// Created: 12/07/98// RCS-ID: $Id: basic.h 38918 2006-04-26 02:24:42Z PC $// Copyright: (c) Julian Smart// Licence: wxWindows licence/////////////////////////////////////////////////////////////////////////////#ifndef _OGL_BASIC_H_#define _OGL_BASIC_H_#ifndef wxUSE_DEPRECATED#define wxUSE_DEPRECATED 0#endif#if wxUSE_DEPRECATED #include "wx/deprecated/setup.h"#endif#ifndef wxUSE_PROLOGIO #define wxUSE_PROLOGIO 0#endif#define OGL_VERSION 2.0#ifndef DEFAULT_MOUSE_TOLERANCE#define DEFAULT_MOUSE_TOLERANCE 3#endif// Key identifiers#define KEY_SHIFT 1#define KEY_CTRL 2// Arrow styles#define ARROW_NONE 0#define ARROW_END 1#define ARROW_BOTH 2#define ARROW_MIDDLE 3#define ARROW_START 4// Control point types// Rectangle and most other shapes#define CONTROL_POINT_VERTICAL 1#define CONTROL_POINT_HORIZONTAL 2#define CONTROL_POINT_DIAGONAL 3// Line#define CONTROL_POINT_ENDPOINT_TO 4#define CONTROL_POINT_ENDPOINT_FROM 5#define CONTROL_POINT_LINE 6// Types of formatting: can be combined in a bit list#define FORMAT_NONE 0 // Left justification#define FORMAT_CENTRE_HORIZ 1 // Centre horizontally#define FORMAT_CENTRE_VERT 2 // Centre vertically#define FORMAT_SIZE_TO_CONTENTS 4 // Resize shape to contents// Shadow mode#define SHADOW_NONE 0#define SHADOW_LEFT 1#define SHADOW_RIGHT 2/* * Declare types * */#define SHAPE_BASIC wxTYPE_USER + 1#define SHAPE_RECTANGLE wxTYPE_USER + 2#define SHAPE_ELLIPSE wxTYPE_USER + 3#define SHAPE_POLYGON wxTYPE_USER + 4#define SHAPE_CIRCLE wxTYPE_USER + 5#define SHAPE_LINE wxTYPE_USER + 6#define SHAPE_DIVIDED_RECTANGLE wxTYPE_USER + 8#define SHAPE_COMPOSITE wxTYPE_USER + 9#define SHAPE_CONTROL_POINT wxTYPE_USER + 10#define SHAPE_DRAWN wxTYPE_USER + 11#define SHAPE_DIVISION wxTYPE_USER + 12#define SHAPE_LABEL_OBJECT wxTYPE_USER + 13#define SHAPE_BITMAP wxTYPE_USER + 14#define SHAPE_DIVIDED_OBJECT_CONTROL_POINT wxTYPE_USER + 15#define OBJECT_REGION wxTYPE_USER + 20#define OP_CLICK_LEFT 1#define OP_CLICK_RIGHT 2#define OP_DRAG_LEFT 4#define OP_DRAG_RIGHT 8#define OP_ALL (OP_CLICK_LEFT | OP_CLICK_RIGHT | OP_DRAG_LEFT | OP_DRAG_RIGHT)// Attachment modes#define ATTACHMENT_MODE_NONE 0#define ATTACHMENT_MODE_EDGE 1#define ATTACHMENT_MODE_BRANCHING 2// Sub-modes for branching attachment mode#define BRANCHING_ATTACHMENT_NORMAL 1#define BRANCHING_ATTACHMENT_BLOB 2class wxShapeTextLine;class wxShapeCanvas;class wxLineShape;class wxControlPoint;class wxShapeRegion;class wxShape;#if wxUSE_PROLOGIOclass WXDLLEXPORT wxExpr;class WXDLLEXPORT wxExprDatabase;#endif// Round up#define WXROUND(x) ( (long) (x + 0.5) )// logical function to use when drawing rubberband boxes, etc.#define OGLRBLF wxINVERTclass WXDLLIMPEXP_OGL wxShapeEvtHandler: public wxObject, public wxClientDataContainer{ DECLARE_DYNAMIC_CLASS(wxShapeEvtHandler) public: wxShapeEvtHandler(wxShapeEvtHandler *prev = NULL, wxShape *shape = NULL); virtual ~wxShapeEvtHandler(); inline void SetShape(wxShape *sh) { m_handlerShape = sh; } inline wxShape *GetShape() const { return m_handlerShape; } inline void SetPreviousHandler(wxShapeEvtHandler* handler) { m_previousHandler = handler; } inline wxShapeEvtHandler* GetPreviousHandler() const { return m_previousHandler; } // This is called when the _shape_ is deleted. virtual void OnDelete(); virtual void OnDraw(wxDC& dc); virtual void OnDrawContents(wxDC& dc); virtual void OnDrawBranches(wxDC& dc, bool erase = false); virtual void OnMoveLinks(wxDC& dc); virtual void OnErase(wxDC& dc); virtual void OnEraseContents(wxDC& dc); virtual void OnHighlight(wxDC& dc); virtual void OnLeftClick(double x, double y, int keys = 0, int attachment = 0); virtual void OnLeftDoubleClick(double x, double y, int keys = 0, int attachment = 0); virtual void OnRightClick(double x, double y, int keys = 0, int attachment = 0); virtual void OnSize(double x, double y); virtual bool OnMovePre(wxDC& dc, double x, double y, double old_x, double old_y, bool display = true); virtual void OnMovePost(wxDC& dc, double x, double y, double old_x, double old_y, bool display = true); virtual void OnDragLeft(bool draw, double x, double y, int keys=0, int attachment = 0); // Erase if draw false virtual void OnBeginDragLeft(double x, double y, int keys=0, int attachment = 0); virtual void OnEndDragLeft(double x, double y, int keys=0, int attachment = 0); virtual void OnDragRight(bool draw, double x, double y, int keys=0, int attachment = 0); // Erase if draw false virtual void OnBeginDragRight(double x, double y, int keys=0, int attachment = 0); virtual void OnEndDragRight(double x, double y, int keys=0, int attachment = 0); virtual void OnDrawOutline(wxDC& dc, double x, double y, double w, double h); virtual void OnDrawControlPoints(wxDC& dc); virtual void OnEraseControlPoints(wxDC& dc); virtual void OnMoveLink(wxDC& dc, bool moveControlPoints = true); // Control points ('handles') redirect control to the actual shape, to make it easier // to override sizing behaviour. virtual void OnSizingDragLeft(wxControlPoint* pt, bool draw, double x, double y, int keys=0, int attachment = 0); // Erase if draw false virtual void OnSizingBeginDragLeft(wxControlPoint* pt, double x, double y, int keys=0, int attachment = 0); virtual void OnSizingEndDragLeft(wxControlPoint* pt, double x, double y, int keys=0, int attachment = 0); virtual void OnBeginSize(double WXUNUSED(w), double WXUNUSED(h)) { } virtual void OnEndSize(double WXUNUSED(w), double WXUNUSED(h)) { } // Can override this to prevent or intercept line reordering. virtual void OnChangeAttachment(int attachment, wxLineShape* line, wxList& ordering); // Creates a copy of this event handler. wxShapeEvtHandler *CreateNewCopy(); // Does the copy - override for new event handlers which might store // app-specific data. virtual void CopyData(wxShapeEvtHandler& WXUNUSED(copy)) {}; private: wxShapeEvtHandler* m_previousHandler; wxShape* m_handlerShape;};class WXDLLIMPEXP_OGL wxShape: public wxShapeEvtHandler{ DECLARE_ABSTRACT_CLASS(wxShape) public: wxShape(wxShapeCanvas *can = NULL); virtual ~wxShape(); virtual void GetBoundingBoxMax(double *width, double *height); virtual void GetBoundingBoxMin(double *width, double *height) = 0; virtual bool GetPerimeterPoint(double x1, double y1, double x2, double y2, double *x3, double *y3); inline wxShapeCanvas *GetCanvas() { return m_canvas; } void SetCanvas(wxShapeCanvas *the_canvas); virtual void AddToCanvas(wxShapeCanvas *the_canvas, wxShape *addAfter = NULL); virtual void InsertInCanvas(wxShapeCanvas *the_canvas); virtual void RemoveFromCanvas(wxShapeCanvas *the_canvas); inline double GetX() const { return m_xpos; } inline double GetY() const { return m_ypos; } inline void SetX(double x) { m_xpos = x; } inline void SetY(double y) { m_ypos = y; } inline wxShape *GetParent() const { return m_parent; } inline void SetParent(wxShape *p) { m_parent = p; } wxShape *GetTopAncestor(); inline wxList& GetChildren() { return m_children; } virtual void OnDraw(wxDC& dc); virtual void OnDrawContents(wxDC& dc); virtual void OnMoveLinks(wxDC& dc); virtual void Unlink() { }; void SetDrawHandles(bool drawH); inline bool GetDrawHandles() { return m_drawHandles; } virtual void OnErase(wxDC& dc); virtual void OnEraseContents(wxDC& dc); virtual void OnHighlight(wxDC& dc); virtual void OnLeftClick(double x, double y, int keys = 0, int attachment = 0); virtual void OnLeftDoubleClick(double WXUNUSED(x), double WXUNUSED(y), int WXUNUSED(keys) = 0, int WXUNUSED(attachment) = 0) {} virtual void OnRightClick(double x, double y, int keys = 0, int attachment = 0); virtual void OnSize(double x, double y); virtual bool OnMovePre(wxDC& dc, double x, double y, double old_x, double old_y, bool display = true); virtual void OnMovePost(wxDC& dc, double x, double y, double old_x, double old_y, bool display = true); virtual void OnDragLeft(bool draw, double x, double y, int keys=0, int attachment = 0); // Erase if draw false virtual void OnBeginDragLeft(double x, double y, int keys=0, int attachment = 0); virtual void OnEndDragLeft(double x, double y, int keys=0, int attachment = 0); virtual void OnDragRight(bool draw, double x, double y, int keys=0, int attachment = 0); // Erase if draw false virtual void OnBeginDragRight(double x, double y, int keys=0, int attachment = 0); virtual void OnEndDragRight(double x, double y, int keys=0, int attachment = 0); virtual void OnDrawOutline(wxDC& dc, double x, double y, double w, double h); virtual void OnDrawControlPoints(wxDC& dc); virtual void OnEraseControlPoints(wxDC& dc); virtual void OnBeginSize(double WXUNUSED(w), double WXUNUSED(h)) { } virtual void OnEndSize(double WXUNUSED(w), double WXUNUSED(h)) { } // Control points ('handles') redirect control to the actual shape, to make it easier // to override sizing behaviour. virtual void OnSizingDragLeft(wxControlPoint* pt, bool draw, double x, double y, int keys=0, int attachment = 0); // Erase if draw false virtual void OnSizingBeginDragLeft(wxControlPoint* pt, double x, double y, int keys=0, int attachment = 0); virtual void OnSizingEndDragLeft(wxControlPoint* pt, double x, double y, int keys=0, int attachment = 0); virtual void MakeControlPoints(); virtual void DeleteControlPoints(wxDC *dc = NULL); virtual void ResetControlPoints(); inline wxShapeEvtHandler *GetEventHandler() { return m_eventHandler; } inline void SetEventHandler(wxShapeEvtHandler *handler) { m_eventHandler = handler; } // Mandatory control points, e.g. the divided line moving handles // should appear even if a child of the 'selected' image virtual void MakeMandatoryControlPoints(); virtual void ResetMandatoryControlPoints(); inline virtual bool Recompute() { return true; }; // Calculate size recursively, if size changes. Size might depend on children. inline virtual void CalculateSize() { }; virtual void Select(bool select = true, wxDC* dc = NULL); virtual void SetHighlight(bool hi = true, bool recurse = false); inline virtual bool IsHighlighted() const { return m_highlighted; }; virtual bool Selected() const; virtual bool AncestorSelected() const; void SetSensitivityFilter(int sens = OP_ALL, bool recursive = false); int GetSensitivityFilter() const { return m_sensitivity; } void SetDraggable(bool drag, bool recursive = false); inline void SetFixedSize(bool x, bool y) { m_fixedWidth = x; m_fixedHeight = y; }; inline void GetFixedSize(bool *x, bool *y) const { *x = m_fixedWidth; *y = m_fixedHeight; }; inline bool GetFixedWidth() const { return m_fixedWidth; } inline bool GetFixedHeight() const { return m_fixedHeight; } inline void SetSpaceAttachments(bool sp) { m_spaceAttachments = sp; }; inline bool GetSpaceAttachments() const { return m_spaceAttachments; }; void SetShadowMode(int mode, bool redraw = false); inline int GetShadowMode() const { return m_shadowMode; } virtual bool HitTest(double x, double y, int *attachment, double *distance); inline void SetCentreResize(bool cr) { m_centreResize = cr; } inline bool GetCentreResize() const { return m_centreResize; } inline void SetMaintainAspectRatio(bool ar) { m_maintainAspectRatio = ar; } inline bool GetMaintainAspectRatio() const { return m_maintainAspectRatio; } inline wxList& GetLines() const { return (wxList&) m_lines; } inline void SetDisableLabel(bool flag) { m_disableLabel = flag; } inline bool GetDisableLabel() const { return m_disableLabel; } inline void SetAttachmentMode(int mode) { m_attachmentMode = mode; } inline int GetAttachmentMode() const { return m_attachmentMode; } inline void SetId(long i) { m_id = i; } inline long GetId() const { return m_id; } void SetPen(const wxPen *pen); void SetBrush(const wxBrush *brush); virtual void Show(bool show); virtual bool IsShown() const { return m_visible; } virtual void Move(wxDC& dc, double x1, double y1, bool display = true); virtual void Erase(wxDC& dc); virtual void EraseContents(wxDC& dc); virtual void Draw(wxDC& dc); virtual void Flash(); virtual void MoveLinks(wxDC& dc); virtual void DrawContents(wxDC& dc); // E.g. for drawing text label virtual void SetSize(double x, double y, bool recursive = true); virtual void SetAttachmentSize(double x, double y); void Attach(wxShapeCanvas *can); void Detach(); inline virtual bool Constrain() { return false; } ; void AddLine(wxLineShape *line, wxShape *other, int attachFrom = 0, int attachTo = 0, // The line ordering int positionFrom = -1, int positionTo = -1); // Return the zero-based position in m_lines of line. int GetLinePosition(wxLineShape* line); void AddText(const wxString& string); inline wxPen *GetPen() const { return wx_const_cast(wxPen*, m_pen); } inline wxBrush *GetBrush() const { return wx_const_cast(wxBrush*, m_brush); } /* * Region-specific functions (defaults to the default region * for simple objects */ // Set the default, single region size to be consistent // with the object size void SetDefaultRegionSize(); virtual void FormatText(wxDC& dc, const wxString& s, int regionId = 0); virtual void SetFormatMode(int mode, int regionId = 0); virtual int GetFormatMode(int regionId = 0) const; virtual void SetFont(wxFont *font, int regionId = 0); virtual wxFont *GetFont(int regionId = 0) const; virtual void SetTextColour(const wxString& colour, int regionId = 0); virtual wxString GetTextColour(int regionId = 0) const; virtual inline int GetNumberOfTextRegions() const { return m_regions.GetCount(); } virtual void SetRegionName(const wxString& name, int regionId = 0); // Get the name representing the region for this image alone. // I.e. this image's region ids go from 0 to N-1. // But the names might be "0.2.0", "0.2.1" etc. depending on position in composite. // So the last digit represents the region Id, the others represent positions // in composites. virtual wxString GetRegionName(int regionId); // Gets the region corresponding to the name, or -1 if not found. virtual int GetRegionId(const wxString& name); // Construct names for regions, unique even for children of a composite. virtual void NameRegions(const wxString& parentName = wxEmptyString); // Get list of regions inline wxList& GetRegions() const { return (wxList&) m_regions; } virtual void AddRegion(wxShapeRegion *region); virtual void ClearRegions(); // Assign new ids to this image and children (if composite) void AssignNewIds(); // Returns actual image (same as 'this' if non-composite) and region id // for given region name. virtual wxShape *FindRegion(const wxString& regionName, int *regionId);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -