/////////////////////////////////////////////////////////////////////////////
-// Name: hyperlink.h
+// Name: wx/hyperlink.h
// Purpose: Hyperlink control
// Author: David Norris <danorris@gmail.com>, Otto Wyss
// Modified by: Ryan Norton, Francesco Montorsi
#ifndef _WX_HYPERLINK_H__
#define _WX_HYPERLINK_H__
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma interface "hyperlink.h"
-#endif
-
#include "wx/defs.h"
#if wxUSE_HYPERLINKCTRL
// ----------------------------------------------------------------------------
#define wxHL_CONTEXTMENU 0x0001
-#define wxHL_DEFAULT_STYLE wxHL_CONTEXTMENU|wxNO_BORDER
+#define wxHL_ALIGN_LEFT 0x0002
+#define wxHL_ALIGN_RIGHT 0x0004
+#define wxHL_ALIGN_CENTRE 0x0008
+#define wxHL_DEFAULT_STYLE (wxHL_CONTEXTMENU|wxNO_BORDER|wxHL_ALIGN_CENTRE)
-extern WXDLLEXPORT_DATA(const wxChar) wxHyperlinkCtrlNameStr[];
+extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxHyperlinkCtrlNameStr[];
// ----------------------------------------------------------------------------
// just like a wxCommandEvent.
//
// Use the EVT_HYPERLINK() to catch link events.
-class WXDLLIMPEXP_CORE wxHyperlinkCtrl : public wxControl
+class WXDLLIMPEXP_ADV wxHyperlinkCtrl : public wxControl
{
public:
// Default constructor (for two-step construction).
// Renders the hyperlink.
void OnPaint(wxPaintEvent& event);
+ // Returns the wxRect of the label of this hyperlink.
+ // This is different from the clientsize's rectangle when
+ // clientsize != bestsize and this rectangle is influenced
+ // by the alignment of the label (wxHL_ALIGN_*).
+ wxRect GetLabelRect() const;
+
// If the click originates inside the bounding box of the label,
// a flag is set so that an event will be fired when the left
// button is released.
// Changes the cursor to a hand, if the mouse is inside the label's
// bounding box.
- void OnEnterWindow(wxMouseEvent& event);
+ void OnMotion(wxMouseEvent& event);
// Changes the cursor back to the default, if necessary.
void OnLeaveWindow(wxMouseEvent& event);
// handles "Copy URL" menuitem
void OnPopUpCopy(wxCommandEvent& event);
+ // Refreshes the control to update label's position if necessary
+ void OnSize(wxSizeEvent& event);
+
// overridden base class virtuals
// Returns the best size for the window, which is the size needed
// to display the text label.
- virtual void DoGetSize(int *width, int *height) const;
virtual wxSize DoGetBestSize() const;
// creates a context menu with "Copy URL" menuitem
// Declare an event identifier.
BEGIN_DECLARE_EVENT_TYPES()
- DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_HYPERLINK, 3700)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_HYPERLINK, 3700)
END_DECLARE_EVENT_TYPES()
//
// An event fired when the user clicks on the label in a hyperlink control.
// See HyperlinkControl for details.
//
-class WXDLLIMPEXP_CORE wxHyperlinkEvent : public wxCommandEvent
+class WXDLLIMPEXP_ADV wxHyperlinkEvent : public wxCommandEvent
{
public:
-
wxHyperlinkEvent() {}
wxHyperlinkEvent(wxObject *generator, wxWindowID id, const wxString& url)
- : wxCommandEvent(wxEVT_COMMAND_HYPERLINK, id), m_url(url)
- { SetEventObject(generator); }
+ : wxCommandEvent(wxEVT_COMMAND_HYPERLINK, id),
+ m_url(url)
+ {
+ SetEventObject(generator);
+ }
// Returns the URL associated with the hyperlink control
// that the user clicked on.
wxString GetURL() const { return m_url; }
void SetURL(const wxString &url) { m_url=url; }
+ // default copy ctor, assignment operator and dtor are ok
+ virtual wxEvent *Clone() const { return new wxHyperlinkEvent(*this); }
+
private:
// URL associated with the hyperlink control that the used clicked on.
wxString m_url;
+
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHyperlinkEvent)
};
-// Define a typedef for event handler functions.
-typedef void (wxEvtHandler::*wxHyperlinkEventFunction)(wxHyperlinkEvent&);
-// Define an event table macro.
-#define EVT_HYPERLINK(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_COMMAND_HYPERLINK, \
- id, id, (wxObjectEventFunction) (wxEventFunction) \
- wxStaticCastEvent(wxHyperlinkEventFunction, &fn), (wxObject *) NULL),
+// ----------------------------------------------------------------------------
+// event types and macros
+// ----------------------------------------------------------------------------
+
+typedef void (wxEvtHandler::*wxHyperlinkEventFunction)(wxHyperlinkEvent&);
-// Newer event macro
#define wxHyperlinkEventHandler(func) \
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxHyperlinkEventFunction, &func)
+#define EVT_HYPERLINK(id, fn) \
+ wx__DECLARE_EVT1(wxEVT_COMMAND_HYPERLINK, id, wxHyperlinkEventHandler(fn))
+
+#ifdef _WX_DEFINE_DATE_EVENTS_
+ DEFINE_EVENT_TYPE(wxEVT_COMMAND_HYPERLINK)
+
+ IMPLEMENT_DYNAMIC_CLASS(wxHyperlinkEvent, wxCommandEvent)
+#endif
+
+
#endif // wxUSE_HYPERLINKCTRL
#endif // _WX_HYPERLINK_H__
-