📄 htmlcell.h
字号:
/////////////////////////////////////////////////////////////////////////////// Name: htmlcell.h// Purpose: wxHtmlCell class is used by wxHtmlWindow/wxHtmlWinParser// as a basic visual element of HTML page// Author: Vaclav Slavik// RCS-ID: $Id: htmlcell.h,v 1.66 2006/09/05 20:45:45 VZ Exp $// Copyright: (c) 1999-2003 Vaclav Slavik// Licence: wxWindows licence/////////////////////////////////////////////////////////////////////////////#ifndef _WX_HTMLCELL_H_#define _WX_HTMLCELL_H_#include "wx/defs.h"#if wxUSE_HTML#include "wx/html/htmltag.h"#include "wx/html/htmldefs.h"#include "wx/window.h"class WXDLLIMPEXP_HTML wxHtmlWindowInterface;class WXDLLIMPEXP_HTML wxHtmlLinkInfo;class WXDLLIMPEXP_HTML wxHtmlCell;class WXDLLIMPEXP_HTML wxHtmlContainerCell;// wxHtmlSelection is data holder with information about text selection.// Selection is defined by two positions (beginning and end of the selection)// and two leaf(!) cells at these positions.class WXDLLIMPEXP_HTML wxHtmlSelection{public: wxHtmlSelection() : m_fromPos(wxDefaultPosition), m_toPos(wxDefaultPosition), m_fromPrivPos(wxDefaultPosition), m_toPrivPos(wxDefaultPosition), m_fromCell(NULL), m_toCell(NULL) {} void Set(const wxPoint& fromPos, const wxHtmlCell *fromCell, const wxPoint& toPos, const wxHtmlCell *toCell); void Set(const wxHtmlCell *fromCell, const wxHtmlCell *toCell); const wxHtmlCell *GetFromCell() const { return m_fromCell; } const wxHtmlCell *GetToCell() const { return m_toCell; } // these values are in absolute coordinates: const wxPoint& GetFromPos() const { return m_fromPos; } const wxPoint& GetToPos() const { return m_toPos; } // these are From/ToCell's private data const wxPoint& GetFromPrivPos() const { return m_fromPrivPos; } const wxPoint& GetToPrivPos() const { return m_toPrivPos; } void SetFromPrivPos(const wxPoint& pos) { m_fromPrivPos = pos; } void SetToPrivPos(const wxPoint& pos) { m_toPrivPos = pos; } void ClearPrivPos() { m_toPrivPos = m_fromPrivPos = wxDefaultPosition; } bool IsEmpty() const { return m_fromPos == wxDefaultPosition && m_toPos == wxDefaultPosition; }private: wxPoint m_fromPos, m_toPos; wxPoint m_fromPrivPos, m_toPrivPos; const wxHtmlCell *m_fromCell, *m_toCell;};enum wxHtmlSelectionState{ wxHTML_SEL_OUT, // currently rendered cell is outside the selection wxHTML_SEL_IN, // ... is inside selection wxHTML_SEL_CHANGING // ... is the cell on which selection state changes};// Selection state is passed to wxHtmlCell::Draw so that it can render itself// differently e.g. when inside text selection or outside it.class WXDLLIMPEXP_HTML wxHtmlRenderingState{public: wxHtmlRenderingState() : m_selState(wxHTML_SEL_OUT) {} void SetSelectionState(wxHtmlSelectionState s) { m_selState = s; } wxHtmlSelectionState GetSelectionState() const { return m_selState; } void SetFgColour(const wxColour& c) { m_fgColour = c; } const wxColour& GetFgColour() const { return m_fgColour; } void SetBgColour(const wxColour& c) { m_bgColour = c; } const wxColour& GetBgColour() const { return m_bgColour; }private: wxHtmlSelectionState m_selState; wxColour m_fgColour, m_bgColour;};// HTML rendering customization. This class is used when rendering wxHtmlCells// as a callback:class WXDLLIMPEXP_HTML wxHtmlRenderingStyle{public: virtual ~wxHtmlRenderingStyle() {} virtual wxColour GetSelectedTextColour(const wxColour& clr) = 0; virtual wxColour GetSelectedTextBgColour(const wxColour& clr) = 0;};// Standard style:class WXDLLIMPEXP_HTML wxDefaultHtmlRenderingStyle : public wxHtmlRenderingStyle{public: virtual wxColour GetSelectedTextColour(const wxColour& clr); virtual wxColour GetSelectedTextBgColour(const wxColour& clr);};// Information given to cells when drawing them. Contains rendering state,// selection information and rendering style object that can be used to// customize the output.class WXDLLIMPEXP_HTML wxHtmlRenderingInfo{public: wxHtmlRenderingInfo() : m_selection(NULL), m_style(NULL) {} void SetSelection(wxHtmlSelection *s) { m_selection = s; } wxHtmlSelection *GetSelection() const { return m_selection; } void SetStyle(wxHtmlRenderingStyle *style) { m_style = style; } wxHtmlRenderingStyle& GetStyle() { return *m_style; } wxHtmlRenderingState& GetState() { return m_state; }protected: wxHtmlSelection *m_selection; wxHtmlRenderingStyle *m_style; wxHtmlRenderingState m_state;};// Flags for wxHtmlCell::FindCellByPosenum{ wxHTML_FIND_EXACT = 1, wxHTML_FIND_NEAREST_BEFORE = 2, wxHTML_FIND_NEAREST_AFTER = 4};// Superscript/subscript/normal script mode of a cellenum wxHtmlScriptMode{ wxHTML_SCRIPT_NORMAL, wxHTML_SCRIPT_SUB, wxHTML_SCRIPT_SUP};// ---------------------------------------------------------------------------// wxHtmlCell// Internal data structure. It represents fragments of parsed// HTML page - a word, picture, table, horizontal line and so// on. It is used by wxHtmlWindow to represent HTML page in// memory.// ---------------------------------------------------------------------------class WXDLLIMPEXP_HTML wxHtmlCell : public wxObject{public: wxHtmlCell(); virtual ~wxHtmlCell(); void SetParent(wxHtmlContainerCell *p) {m_Parent = p;} wxHtmlContainerCell *GetParent() const {return m_Parent;} int GetPosX() const {return m_PosX;} int GetPosY() const {return m_PosY;} int GetWidth() const {return m_Width;} // Returns the maximum possible length of the cell. // Call Layout at least once before using GetMaxTotalWidth() virtual int GetMaxTotalWidth() const { return m_Width; } int GetHeight() const {return m_Height;} int GetDescent() const {return m_Descent;} void SetScriptMode(wxHtmlScriptMode mode, long previousBase); wxHtmlScriptMode GetScriptMode() const { return m_ScriptMode; } long GetScriptBaseline() { return m_ScriptBaseline; } // Formatting cells are not visible on the screen, they only alter // renderer's state. bool IsFormattingCell() const { return m_Width == 0 && m_Height == 0; } const wxString& GetId() const { return m_id; } void SetId(const wxString& id) { m_id = id; } // returns the link associated with this cell. The position is position // within the cell so it varies from 0 to m_Width, from 0 to m_Height virtual wxHtmlLinkInfo* GetLink(int WXUNUSED(x) = 0, int WXUNUSED(y) = 0) const { return m_Link; } // Returns cursor to be used when mouse is over the cell: virtual wxCursor GetMouseCursor(wxHtmlWindowInterface *window) const;#if WXWIN_COMPATIBILITY_2_6 // this was replaced by GetMouseCursor, don't use in new code! virtual wxCursor GetCursor() const;#endif // return next cell among parent's cells wxHtmlCell *GetNext() const {return m_Next;} // returns first child cell (if there are any, i.e. if this is container): virtual wxHtmlCell* GetFirstChild() const { return NULL; } // members writing methods virtual void SetPos(int x, int y) {m_PosX = x, m_PosY = y;} void SetLink(const wxHtmlLinkInfo& link); void SetNext(wxHtmlCell *cell) {m_Next = cell;} // 1. adjust cell's width according to the fact that maximal possible width // is w. (this has sense when working with horizontal lines, tables // etc.) // 2. prepare layout (=fill-in m_PosX, m_PosY (and sometime m_Height) // members) = place items to fit window, according to the width w virtual void Layout(int w); // renders the cell virtual void Draw(wxDC& WXUNUSED(dc), int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(view_y1), int WXUNUSED(view_y2), wxHtmlRenderingInfo& WXUNUSED(info)) {} // proceed drawing actions in case the cell is not visible (scrolled out of // screen). This is needed to change fonts, colors and so on. virtual void DrawInvisible(wxDC& WXUNUSED(dc), int WXUNUSED(x), int WXUNUSED(y), wxHtmlRenderingInfo& WXUNUSED(info)) {} // This method returns pointer to the FIRST cell for that // the condition // is true. It first checks if the condition is true for this // cell and then calls m_Next->Find(). (Note: it checks // all subcells if the cell is container) // Condition is unique condition identifier (see htmldefs.h) // (user-defined condition IDs should start from 10000) // and param is optional parameter // Example : m_Cell->Find(wxHTML_COND_ISANCHOR, "news"); // returns pointer to anchor news virtual const wxHtmlCell* Find(int condition, const void* param) const; // This function is called when mouse button is clicked over the cell. // Returns true if a link is clicked, false otherwise. // // 'window' is pointer to wxHtmlWindowInterface of the window which // generated the event. // HINT: if this handling is not enough for you you should use // wxHtmlWidgetCell virtual bool ProcessMouseClick(wxHtmlWindowInterface *window, const wxPoint& pos, const wxMouseEvent& event);#if WXWIN_COMPATIBILITY_2_6 // this was replaced by ProcessMouseClick, don't use in new code! virtual void OnMouseClick(wxWindow *window, int x, int y, const wxMouseEvent& event);#endif // This method used to adjust pagebreak position. The parameter is variable // that contains y-coordinate of page break (= horizontal line that should // not be crossed by words, images etc.). If this cell cannot be divided // into two pieces (each one on another page) then it moves the pagebreak // few pixels up. // // Returned value : true if pagebreak was modified, false otherwise // Usage : while (container->AdjustPagebreak(&p)) {} virtual bool AdjustPagebreak(int *pagebreak, wxArrayInt& known_pagebreaks) const; // Sets cell's behaviour on pagebreaks (see AdjustPagebreak). Default // is true - the cell can be split on two pages void SetCanLiveOnPagebreak(bool can) { m_CanLiveOnPagebreak = can; } // Can the line be broken before this cell? virtual bool IsLinebreakAllowed() const { return !IsFormattingCell(); } // Returns true for simple == terminal cells, i.e. not composite ones. // This if for internal usage only and may disappear in future versions! virtual bool IsTerminalCell() const { return true; } // Find a cell inside this cell positioned at the given coordinates // (relative to this's positions). Returns NULL if no such cell exists. // The flag can be used to specify whether to look for terminal or // nonterminal cells or both. In either case, returned cell is deepest // cell in cells tree that contains [x,y]. virtual wxHtmlCell *FindCellByPos(wxCoord x, wxCoord y, unsigned flags = wxHTML_FIND_EXACT) const; // Returns absolute position of the cell on HTML canvas. // If rootCell is provided, then it's considered to be the root of the // hierarchy and the returned value is relative to it. wxPoint GetAbsPos(wxHtmlCell *rootCell = NULL) const; // Returns root cell of the hierarchy (i.e. grand-grand-...-parent that // doesn't have a parent itself) wxHtmlCell *GetRootCell() const; // Returns first (last) terminal cell inside this cell. It may return NULL, // but it is rare -- only if there are no terminals in the tree. virtual wxHtmlCell *GetFirstTerminal() const { return wxConstCast(this, wxHtmlCell); } virtual wxHtmlCell *GetLastTerminal() const { return wxConstCast(this, wxHtmlCell); } // Returns cell's depth, i.e. how far under the root cell it is // (if it is the root, depth is 0) unsigned GetDepth() const; // Returns true if the cell appears before 'cell' in natural order of // cells (= as they are read). If cell A is (grand)parent of cell B, // then both A.IsBefore(B) and B.IsBefore(A) always return true. bool IsBefore(wxHtmlCell *cell) const; // Converts the cell into text representation. If sel != NULL then // only part of the cell inside the selection is converted. virtual wxString ConvertToText(wxHtmlSelection *WXUNUSED(sel)) const { return wxEmptyString; }protected: // pointer to the next cell wxHtmlCell *m_Next; // pointer to parent cell wxHtmlContainerCell *m_Parent;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -