\input hthelpct.tex
\input hthlpdat.tex
\input hthlpfrm.tex
+\input htlnkinf.tex
\input htparser.tex
\input htprint.tex
\input httag.tex
\membersection{wxHtmlCell::GetLink}\label{wxhtmlcellgetlink}
-\constfunc{virtual wxString}{GetLink}{\param{int }{x = 0}, \param{int }{y = 0}}
+\constfunc{virtual wxHtmlLinkInfo*}{GetLink}{\param{int }{x = 0}, \param{int }{y = 0}}
-Returns hypertext link if associated with this cell or empty string otherwise.
+Returns hypertext link if associated with this cell or NULL otherwise.
+See \helpref{wxHtmlLinkInfo}{wxhtmllinkinfo}.
(Note: this makes sense only for visible tags).
\wxheading{Parameters}
\membersection{wxHtmlCell::SetLink}\label{wxhtmlcellsetlink}
-\func{void}{SetLink}{\param{const wxString\& }{link}}
+\func{void}{SetLink}{\param{const wxHtmlLinkInfo\& }{link}}
Sets the hypertext link asocciated with this cell. (Default value
-is wxEmptyString (no link))
+is \helpref{wxHtmlLinkInfo}{wxhtmllinkinfo}("", "") (no link))
\membersection{wxHtmlCell::SetNext}\label{wxhtmlcellsetnext}
--- /dev/null
+%
+% automatically generated by HelpGen from
+% x.h at 23/Dec/99 21:30:20
+%
+
+
+\section{\class{wxHtmlLinkInfo}}\label{wxhtmllinkinfo}
+
+This class stores all neccessary information about hypertext
+links (as represented by {\tt <A>} tag in HTML documents). In
+current implementation it stores URL and target frame name.
+{\it Note that frames are not currently supported by wxHTML!}
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
+\membersection{wxHtmlLinkInfo::wxHtmlLinkInfo}\label{wxhtmllinkinfowxhtmllinkinfo}
+
+\func{}{wxHtmlLinkInfo}{\void}
+
+Default ctor.
+
+\membersection{wxHtmlLinkInfo::wxHtmlLinkInfo}\label{wxhtmllinkinfowxhtmllinkinfo}
+
+\func{}{wxHtmlLinkInfo}{\param{const wxString\& }{href}, \param{const wxString\& }{target = wxEmptyString}}
+
+Construct hypertext link from HREF (aka URL) and TARGET (name of target
+frame).
+
+
+\membersection{wxHtmlLinkInfo::GetHref}\label{wxhtmllinkinfogethref}
+
+\func{wxString}{GetHref}{\void}
+
+Returns {\it HREF} value of the {\tt <A>} tag.
+
+\membersection{wxHtmlLinkInfo::GetTarget}\label{wxhtmllinkinfogettarget}
+
+\func{wxString}{GetTarget}{\void}
+
+Returns {\it TARGET} value of the {\tt <A>} tag (this value
+is used to specify in which frame should be the page pointed
+by {\helpref{Href}{wxhtmllinkinfogethref} opened).
\membersection{wxHtmlWindow::OnLinkClicked}\label{wxhtmlwindowonlinkclicked}
-\func{virtual void}{OnLinkClicked}{\param{const wxString\& }{link}}
+\func{virtual void}{OnLinkClicked}{\param{wxHtmlLinkInfo* }{link}}
Called when user clicks on hypertext link. Default behaviour is to call
\helpref{LoadPage}{wxhtmlwindowloadpage} and do nothing else.
+Also see \helpref{wxHtmlLinkInfo}{wxhtmllinkinfo}.
+
\membersection{wxHtmlWindow::OnSetTitle}\label{wxhtmlwindowonsettitle}
\membersection{wxHtmlWinParser::GetLink}\label{wxhtmlwinparsergetlink}
-\constfunc{const wxString\&}{GetLink}{\void}
+\constfunc{const wxHtmlLinkInfo\&}{GetLink}{\void}
-Returns actual hypertext link. (This value is non-empty string
+Returns actual hypertext link. (This value has non-empty
+\helpref{Href}{wxhtmllinkinfogethref}} string
if the parser is between {\tt <A>} and {\tt </A>} tags,
wxEmptyString otherwise.
\func{void}{SetFontSize}{\param{int }{s}}
-Sets actual font size (HTML size varies from -2 to +4)
+Sets actual font size (HTML size varies from 1 to 7)
\membersection{wxHtmlWinParser::SetFontUnderlined}\label{wxhtmlwinparsersetfontunderlined}
\membersection{wxHtmlWinParser::SetLink}\label{wxhtmlwinparsersetlink}
-\func{void}{SetLink}{\param{const wxString\& }{link}}
+\func{void}{SetLink}{\param{const wxHtmlLinkInfo\& }{link}}
-Sets actual hypertext link. wxEmptyString means no link.
+Sets actual hypertext link. Empty link is represented
+by \helpref{wxHtmlLinkInfo}{wxhtmllinkinfo} with {\it Href} equal
+to wxEmptyString.
\membersection{wxHtmlWinParser::SetLinkColor}\label{wxhtmlwinparsersetlinkcolor}
#include "wx/html/htmldefs.h"
#include "wx/window.h"
+
+class wxHtmlLinkInfo;
class wxHtmlCell;
class wxHtmlContainerCell;
class WXDLLEXPORT wxHtmlCell : public wxObject
{
public:
- wxHtmlCell() : wxObject() {m_Next = NULL; m_Parent = NULL; m_Width = m_Height = m_Descent = 0; m_CanLiveOnPagebreak = TRUE;}
- virtual ~wxHtmlCell() {if (m_Next) delete m_Next;};
+ wxHtmlCell();
+ virtual ~wxHtmlCell();
void SetParent(wxHtmlContainerCell *p) {m_Parent = p;}
wxHtmlContainerCell *GetParent() const {return m_Parent;}
int GetWidth() const {return m_Width;}
int GetHeight() const {return m_Height;}
int GetDescent() const {return m_Descent;}
- virtual wxString GetLink(int WXUNUSED(x) = 0,
+ virtual wxHtmlLinkInfo* GetLink(int WXUNUSED(x) = 0,
int WXUNUSED(y) = 0) const
{ return m_Link; }
// returns the link associated with this cell. The position is position within
// members access methods
virtual void SetPos(int x, int y) {m_PosX = x, m_PosY = y;}
- void SetLink(const wxString& link) {m_Link = link;}
+ void SetLink(const wxHtmlLinkInfo& link);
void SetNext(wxHtmlCell *cell) {m_Next = cell;}
// members writin methods
// m_Descent is used to position text&images..
long m_PosX, m_PosY;
// position where the fragment is drawn
- wxString m_Link;
+ wxHtmlLinkInfo *m_Link;
// destination address if this fragment is hypertext link, "" otherwise
bool m_CanLiveOnPagebreak;
// true if this cell can be placed on pagebreak, false otherwise
// Layout()
void SetBackgroundColour(const wxColour& clr) {m_UseBkColour = TRUE; m_BkColour = clr;}
void SetBorder(const wxColour& clr1, const wxColour& clr2) {m_UseBorder = TRUE; m_BorderColour1 = clr1, m_BorderColour2 = clr2;}
- virtual wxString GetLink(int x = 0, int y = 0) const;
+ virtual wxHtmlLinkInfo* GetLink(int x = 0, int y = 0) const;
virtual const wxHtmlCell* Find(int condition, const void* param) const;
virtual void OnMouseClick(wxWindow *parent, int x, int y, bool left, bool middle, bool right);
-#endif
+//--------------------------------------------------------------------------------
+// wxHtmlLinkInfo
+// Internal data structure. It represents hypertext link
+//--------------------------------------------------------------------------------
+
+class wxHtmlLinkInfo : public wxObject
+{
+ public:
+ wxHtmlLinkInfo() : wxObject()
+ { m_Href = m_Target = wxEmptyString; }
+ wxHtmlLinkInfo(const wxString& href, const wxString& target = wxEmptyString) : wxObject()
+ { m_Href = href; m_Target = target; }
+ wxHtmlLinkInfo(const wxHtmlLinkInfo& l)
+ { m_Href = l.m_Href, m_Target = l.m_Target; }
+ wxHtmlLinkInfo& operator=(const wxHtmlLinkInfo& l)
+ { m_Href = l.m_Href, m_Target = l.m_Target; return *this; }
+
+ wxString GetHref() const { return m_Href; }
+ wxString GetTarget() const { return m_Target; }
+
+ private:
+ wxString m_Href, m_Target;
+};
+
+
+
+
+#endif // wxUSE_HTML
#endif // _WX_HTMLCELL_H_
static void AddFilter(wxHtmlFilter *filter);
// Adds input filter
- virtual void OnLinkClicked(const wxString& link);
+ virtual void OnLinkClicked(wxHtmlLinkInfo *link);
// called when users clicked on hypertext link. Default behavior is to
// call LoadPage(loc)
bool m_tmpMouseMoved;
// a flag indicated if mouse moved
// (if TRUE we will try to change cursor in last call to OnIdle)
- wxString m_tmpLastLink;
+ wxHtmlLinkInfo *m_tmpLastLink;
// contains last link name
int m_tmpCanDrawLocks;
// if >0 contents of the window is not redrawn
double GetPixelScale() {return m_PixelScale;}
int GetCharHeight() const {return m_CharHeight;}
int GetCharWidth() const {return m_CharWidth;}
- // NOTE : these functions do _not_ return _actual_
+ // NOTE : these functions do _not_ return _actual_
// height/width. They return h/w of default font
// for this DC. If you want actual values, call
// GetDC() -> GetChar...()
// container
int GetFontSize() const {return m_FontSize;}
- void SetFontSize(int s) {m_FontSize = s;}
+ void SetFontSize(int s);
int GetFontBold() const {return m_FontBold;}
void SetFontBold(int x) {m_FontBold = x;}
int GetFontItalic() const {return m_FontItalic;}
void SetLinkColor(const wxColour& clr) {m_LinkColor = clr;}
const wxColour& GetActualColor() const {return m_ActualColor;}
void SetActualColor(const wxColour& clr) {m_ActualColor = clr;}
- const wxString& GetLink() const {return m_Link;}
- void SetLink(const wxString& link) {m_Link = link; m_UseLink = link.Length() > 0;}
+ const wxHtmlLinkInfo& GetLink() const {return m_Link;}
+ void SetLink(const wxHtmlLinkInfo& link);
virtual wxFont* CreateCurrentFont();
// creates font depending on m_Font* members.
- // (note : it calls wxHtmlWindow's CreateCurrentFont...)
protected:
virtual void AddText(const char *txt);
wxColour m_LinkColor;
wxColour m_ActualColor;
// basic font parameters.
- wxString m_Link;
+ wxHtmlLinkInfo m_Link;
// actual hypertext link or empty string
bool m_UseLink;
// TRUE if m_Link is not empty
// table of loaded fonts. 1st four indexes are 0 or 1, depending on on/off
// state of these flags (from left to right):
// [bold][italic][underlined][fixed_size]
- // last index is font size : from 0 to 7 (remapped from html sizes -2 to +4)
+ // last index is font size : from 0 to 6 (remapped from html sizes 1 to 7)
// Note : this table covers all possible combinations of fonts, but not
// all of them are used, so many items in table are usually NULL.
int m_FontsSizes[7];
// wxHtmlCell
//-----------------------------------------------------------------------------
+wxHtmlCell::wxHtmlCell() : wxObject()
+{
+ m_Next = NULL;
+ m_Parent = NULL;
+ m_Width = m_Height = m_Descent = 0;
+ m_CanLiveOnPagebreak = TRUE;
+ m_Link = NULL;
+}
+
+wxHtmlCell::~wxHtmlCell()
+{
+ if (m_Link) delete m_Link;
+ if (m_Next) delete m_Next;
+}
+
void wxHtmlCell::OnMouseClick(wxWindow *parent, int x, int y,
bool WXUNUSED(left),
bool WXUNUSED(middle),
bool WXUNUSED(right))
{
- wxString lnk = GetLink(x, y);
- if (lnk != wxEmptyString)
+ wxHtmlLinkInfo *lnk = GetLink(x, y);
+ if (lnk != NULL)
((wxHtmlWindow*)parent) -> OnLinkClicked(lnk);
// note : this overcasting is legal because parent is *always* wxHtmlWindow
}
bool wxHtmlCell::AdjustPagebreak(int *pagebreak)
{
-
if ((!m_CanLiveOnPagebreak) &&
m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak) {
*pagebreak = m_PosY;
+void wxHtmlCell::SetLink(const wxHtmlLinkInfo& link)
+{
+ if (m_Link) delete m_Link;
+ m_Link = new wxHtmlLinkInfo(link);
+}
+
+
//-----------------------------------------------------------------------------
// wxHtmlWordCell
-wxString wxHtmlContainerCell::GetLink(int x, int y) const
+wxHtmlLinkInfo *wxHtmlContainerCell::GetLink(int x, int y) const
{
wxHtmlCell *c = m_Cells;
int cx, cy, cw, ch;
return c -> GetLink(x - cx, y - cy);
c = c -> GetNext();
}
- return wxEmptyString;
+ return NULL;
}
long style, const wxString& name) : wxScrolledWindow(parent, id, pos, size, wxVSCROLL, name)
{
m_tmpMouseMoved = FALSE;
- m_tmpLastLink = wxEmptyString;
+ m_tmpLastLink = NULL;
m_tmpCanDrawLocks = 0;
m_FS = new wxFileSystem();
m_RelatedStatusBar = -1;
-void wxHtmlWindow::OnLinkClicked(const wxString& link)
+void wxHtmlWindow::OnLinkClicked(wxHtmlLinkInfo *link)
{
- LoadPage(link);
+ LoadPage(link -> GetHref());
}
if (m_tmpMouseMoved && (m_Cell != NULL)) {
int sx, sy;
int x, y;
- wxString lnk;
+ wxHtmlLinkInfo *lnk;
ViewStart(&sx, &sy); sx *= wxHTML_SCROLL_STEP; sy *= wxHTML_SCROLL_STEP;
wxGetMousePosition(&x, &y);
lnk = m_Cell -> GetLink(sx + x, sy + y);
if (lnk != m_tmpLastLink) {
- if (lnk == wxEmptyString) {
+ if (lnk == NULL) {
SetCursor(cur_arrow);
if (m_RelatedStatusBar != -1) m_RelatedFrame -> SetStatusText(wxEmptyString, m_RelatedStatusBar);
}
else {
SetCursor(cur_hand);
- if (m_RelatedStatusBar != -1) m_RelatedFrame -> SetStatusText(lnk, m_RelatedStatusBar);
+ if (m_RelatedStatusBar != -1)
+ m_RelatedFrame -> SetStatusText(lnk -> GetHref(), m_RelatedStatusBar);
}
m_tmpLastLink = lnk;
}
int radius;
public:
wxHtmlImageMapAreaCell( celltype t, wxString &coords, double pixel_scale = 1.0);
- virtual wxString GetLink( int x = 0, int y = 0 ) const;
+ virtual wxHtmlLinkInfo *GetLink( int x = 0, int y = 0 ) const;
};
coords.Add( (int)(pixel_scale * (double)wxAtoi( x.c_str())) );
}
-wxString wxHtmlImageMapAreaCell::GetLink( int x, int y ) const
+wxHtmlLinkInfo *wxHtmlImageMapAreaCell::GetLink( int x, int y ) const
{
switch (type) {
case RECT:
wxHtmlImageMapAreaCell *a = (wxHtmlImageMapAreaCell*)m_Next;
return a->GetLink( x, y );
}
- return wxEmptyString;
+ return NULL;
}
protected:
wxString m_Name;
public:
- virtual wxString GetLink( int x = 0, int y = 0 ) const;
+ virtual wxHtmlLinkInfo *GetLink( int x = 0, int y = 0 ) const;
virtual const wxHtmlCell *Find( int cond, const void *param ) const;
};
m_Name = name ;
}
-wxString wxHtmlImageMapCell::GetLink( int x, int y ) const
+wxHtmlLinkInfo *wxHtmlImageMapCell::GetLink( int x, int y ) const
{
wxHtmlImageMapAreaCell *a = (wxHtmlImageMapAreaCell*)m_Next;
if (a)
wxHtmlImageCell(wxFSFile *input, int w = -1, int h = -1, int align = wxHTML_ALIGN_BOTTOM, wxString mapname = wxEmptyString);
~wxHtmlImageCell() {if (m_Image) delete m_Image; }
void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2);
- virtual wxString GetLink( int x = 0, int y = 0 ) const;
+ virtual wxHtmlLinkInfo *GetLink( int x = 0, int y = 0 ) const;
};
wxHtmlCell::Draw(dc, x, y, view_y1, view_y2);
}
-wxString wxHtmlImageCell::GetLink( int x, int y ) const
+wxHtmlLinkInfo *wxHtmlImageCell::GetLink( int x, int y ) const
{
if (m_MapName.IsEmpty())
return wxHtmlCell::GetLink( x, y );
}
if (cel != NULL && tag.HasParam("HREF")) {
wxString tmp = tag.GetParam("HREF");
- cel->SetLink( tmp );
+ wxString target = wxEmptyString;
+ if (tag.HasParam("TARGET")) target = tag.GetParam("TARGET");
+ cel->SetLink( wxHtmlLinkInfo(tmp, target));
}
if (cel != NULL) m_WParser->GetContainer()->InsertCell( cel );
}
}
if (tag.HasParam("HREF")) {
- wxString oldlnk = m_WParser -> GetLink();
+ wxHtmlLinkInfo oldlnk = m_WParser -> GetLink();
wxColour oldclr = m_WParser -> GetActualColor();
int oldund = m_WParser -> GetFontUnderlined();
+ wxString name(tag.GetParam("HREF")), target;
+ if (tag.HasParam("TARGET")) target = tag.GetParam("TARGET");
m_WParser -> SetActualColor(m_WParser -> GetLinkColor());
m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(m_WParser -> GetLinkColor()));
m_WParser -> SetFontUnderlined(TRUE);
m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
- m_WParser -> SetLink(tag.GetParam("HREF"));
+ m_WParser -> SetLink(wxHtmlLinkInfo(name, target));
ParseInner(tag);