// implementation
// ============================================================================
-IMPLEMENT_DYNAMIC_CLASS(wxGenericHyperlinkCtrl, wxControl)
-
// reserved for internal use only
#define wxHYPERLINK_POPUP_COPY_ID 16384
// do validation checks:
CheckParams(label, url, style);
+ if ((style & wxHL_ALIGN_LEFT) == 0)
+ style |= wxFULL_REPAINT_ON_RESIZE;
+
if (!wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name))
return false;
SetURL(url.empty() ? label : url);
SetLabel(label.empty() ? url : label);
- m_rollover = false;
- m_clicking = false;
- m_visited = false;
-
- // colours
- m_normalColour = *wxBLUE;
- m_hoverColour = *wxRED;
+ Init();
SetForegroundColour(m_normalColour);
// by default the font of an hyperlink control is underlined
// with GTK+'s native handling):
Connect( wxEVT_PAINT, wxPaintEventHandler(wxGenericHyperlinkCtrl::OnPaint) );
- Connect( wxEVT_SIZE, wxSizeEventHandler(wxGenericHyperlinkCtrl::OnSize) );
Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnLeaveWindow) );
Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnLeftDown) );
Connect( wxEVT_LEFT_UP, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnLeftUp) );
- Connect( wxEVT_RIGHT_UP, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnRightUp) );
Connect( wxEVT_MOTION, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnMotion) );
- Connect( wxHYPERLINK_POPUP_COPY_ID, wxEVT_COMMAND_MENU_SELECTED,
- wxCommandEventHandler(wxGenericHyperlinkCtrl::OnPopUpCopy) );
+ ConnectMenuHandlers();
return true;
}
-wxSize wxGenericHyperlinkCtrl::DoGetBestSize() const
+void wxGenericHyperlinkCtrl::Init()
{
- int w, h;
+ m_rollover = false;
+ m_clicking = false;
+ m_visited = false;
- wxClientDC dc((wxWindow *)this);
- dc.SetFont(GetFont());
- dc.GetTextExtent(GetLabel(), &w, &h);
+ // colours
+ m_normalColour = *wxBLUE;
+ m_hoverColour = *wxRED;
+ m_visitedColour = wxColour("#551a8b");
+}
+
+void wxGenericHyperlinkCtrl::ConnectMenuHandlers()
+{
+ // Connect the event handlers for the context menu.
+ Connect( wxEVT_RIGHT_UP, wxMouseEventHandler(wxGenericHyperlinkCtrl::OnRightUp) );
+ Connect( wxHYPERLINK_POPUP_COPY_ID, wxEVT_COMMAND_MENU_SELECTED,
+ wxCommandEventHandler(wxGenericHyperlinkCtrl::OnPopUpCopy) );
+}
- wxSize best(w, h);
- CacheBestSize(best);
- return best;
+wxSize wxGenericHyperlinkCtrl::DoGetBestClientSize() const
+{
+ wxClientDC dc((wxWindow *)this);
+ return dc.GetTextExtent(GetLabel());
}
void wxGenericHyperlinkCtrl::DoContextMenu(const wxPoint &pos)
{
wxMenu *menuPopUp = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
- menuPopUp->Append(wxHYPERLINK_POPUP_COPY_ID, wxT("Copy URL"));
+ menuPopUp->Append(wxHYPERLINK_POPUP_COPY_ID, _("&Copy URL"));
PopupMenu( menuPopUp, pos );
delete menuPopUp;
}
void wxGenericHyperlinkCtrl::OnLeftUp(wxMouseEvent& event)
{
// the click must be started and ended in the hyperlink rect
- if (!m_clicking || !GetLabelRect().Contains(event.GetPosition()))
+ if (!m_clicking || !GetLabelRect().Contains(event.GetPosition()))
return;
SetForegroundColour(m_visitedColour);
#endif // wxUSE_CLIPBOARD
}
-void wxGenericHyperlinkCtrl::OnSize(wxSizeEvent& WXUNUSED(event))
-{
- // update the position of the label in the screen respecting
- // the selected align flag
- Refresh();
-}
-
#endif // wxUSE_HYPERLINKCTRL