1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/hyperlink.h 3 // Purpose: Hyperlink control 4 // Author: David Norris <danorris@gmail.com>, Otto Wyss 5 // Modified by: Ryan Norton, Francesco Montorsi 6 // Created: 04/02/2005 7 // Copyright: (c) 2005 David Norris 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_HYPERLINK_H_ 12 #define _WX_HYPERLINK_H_ 13 14 #include "wx/defs.h" 15 16 #if wxUSE_HYPERLINKCTRL 17 18 #include "wx/control.h" 19 20 // ---------------------------------------------------------------------------- 21 // constants 22 // ---------------------------------------------------------------------------- 23 24 #define wxHL_CONTEXTMENU 0x0001 25 #define wxHL_ALIGN_LEFT 0x0002 26 #define wxHL_ALIGN_RIGHT 0x0004 27 #define wxHL_ALIGN_CENTRE 0x0008 28 #define wxHL_DEFAULT_STYLE (wxHL_CONTEXTMENU|wxNO_BORDER|wxHL_ALIGN_CENTRE) 29 30 extern WXDLLIMPEXP_DATA_ADV(const char) wxHyperlinkCtrlNameStr[]; 31 32 33 // ---------------------------------------------------------------------------- 34 // wxHyperlinkCtrl 35 // ---------------------------------------------------------------------------- 36 37 // A static text control that emulates a hyperlink. The link is displayed 38 // in an appropriate text style, derived from the control's normal font. 39 // When the mouse rolls over the link, the cursor changes to a hand and the 40 // link's color changes to the active color. 41 // 42 // Clicking on the link does not launch a web browser; instead, a 43 // HyperlinkEvent is fired. The event propagates upward until it is caught, 44 // just like a wxCommandEvent. 45 // 46 // Use the EVT_HYPERLINK() to catch link events. 47 class WXDLLIMPEXP_ADV wxHyperlinkCtrlBase : public wxControl 48 { 49 public: 50 51 // get/set 52 virtual wxColour GetHoverColour() const = 0; 53 virtual void SetHoverColour(const wxColour &colour) = 0; 54 55 virtual wxColour GetNormalColour() const = 0; 56 virtual void SetNormalColour(const wxColour &colour) = 0; 57 58 virtual wxColour GetVisitedColour() const = 0; 59 virtual void SetVisitedColour(const wxColour &colour) = 0; 60 61 virtual wxString GetURL() const = 0; 62 virtual void SetURL (const wxString &url) = 0; 63 64 virtual void SetVisited(bool visited = true) = 0; 65 virtual bool GetVisited() const = 0; 66 67 // NOTE: also wxWindow::Set/GetLabel, wxWindow::Set/GetBackgroundColour, 68 // wxWindow::Get/SetFont, wxWindow::Get/SetCursor are important ! 69 HasTransparentBackground()70 virtual bool HasTransparentBackground() { return true; } 71 72 protected: GetDefaultBorder()73 virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } 74 75 // checks for validity some of the ctor/Create() function parameters 76 void CheckParams(const wxString& label, const wxString& url, long style); 77 78 public: 79 // not part of the public API but needs to be public as used by 80 // GTK+ callbacks: 81 void SendEvent(); 82 }; 83 84 // ---------------------------------------------------------------------------- 85 // wxHyperlinkEvent 86 // ---------------------------------------------------------------------------- 87 88 class WXDLLIMPEXP_FWD_ADV wxHyperlinkEvent; 89 90 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_HYPERLINK, wxHyperlinkEvent ); 91 92 // 93 // An event fired when the user clicks on the label in a hyperlink control. 94 // See HyperlinkControl for details. 95 // 96 class WXDLLIMPEXP_ADV wxHyperlinkEvent : public wxCommandEvent 97 { 98 public: wxHyperlinkEvent()99 wxHyperlinkEvent() {} wxHyperlinkEvent(wxObject * generator,wxWindowID id,const wxString & url)100 wxHyperlinkEvent(wxObject *generator, wxWindowID id, const wxString& url) 101 : wxCommandEvent(wxEVT_HYPERLINK, id), 102 m_url(url) 103 { 104 SetEventObject(generator); 105 } 106 107 // Returns the URL associated with the hyperlink control 108 // that the user clicked on. GetURL()109 wxString GetURL() const { return m_url; } SetURL(const wxString & url)110 void SetURL(const wxString &url) { m_url=url; } 111 112 // default copy ctor, assignment operator and dtor are ok Clone()113 virtual wxEvent *Clone() const { return new wxHyperlinkEvent(*this); } 114 115 private: 116 117 // URL associated with the hyperlink control that the used clicked on. 118 wxString m_url; 119 120 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHyperlinkEvent) 121 }; 122 123 124 // ---------------------------------------------------------------------------- 125 // event types and macros 126 // ---------------------------------------------------------------------------- 127 128 typedef void (wxEvtHandler::*wxHyperlinkEventFunction)(wxHyperlinkEvent&); 129 130 #define wxHyperlinkEventHandler(func) \ 131 wxEVENT_HANDLER_CAST(wxHyperlinkEventFunction, func) 132 133 #define EVT_HYPERLINK(id, fn) \ 134 wx__DECLARE_EVT1(wxEVT_HYPERLINK, id, wxHyperlinkEventHandler(fn)) 135 136 137 #if defined(__WXGTK210__) && !defined(__WXUNIVERSAL__) 138 #include "wx/gtk/hyperlink.h" 139 // Note that the native control is only available in Unicode version under MSW. 140 #elif defined(__WXMSW__) && wxUSE_UNICODE && !defined(__WXUNIVERSAL__) 141 #include "wx/msw/hyperlink.h" 142 #else 143 #include "wx/generic/hyperlink.h" 144 145 class WXDLLIMPEXP_ADV wxHyperlinkCtrl : public wxGenericHyperlinkCtrl 146 { 147 public: wxHyperlinkCtrl()148 wxHyperlinkCtrl() { } 149 150 wxHyperlinkCtrl(wxWindow *parent, 151 wxWindowID id, 152 const wxString& label, 153 const wxString& url, 154 const wxPoint& pos = wxDefaultPosition, 155 const wxSize& size = wxDefaultSize, 156 long style = wxHL_DEFAULT_STYLE, 157 const wxString& name = wxHyperlinkCtrlNameStr) wxGenericHyperlinkCtrl(parent,id,label,url,pos,size,style,name)158 : wxGenericHyperlinkCtrl(parent, id, label, url, pos, size, 159 style, name) 160 { 161 } 162 163 private: 164 wxDECLARE_DYNAMIC_CLASS_NO_COPY( wxHyperlinkCtrl ); 165 }; 166 #endif 167 168 // old wxEVT_COMMAND_* constants 169 #define wxEVT_COMMAND_HYPERLINK wxEVT_HYPERLINK 170 171 #endif // wxUSE_HYPERLINKCTRL 172 173 #endif // _WX_HYPERLINK_H_ 174