1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/////////////////////////////////////////////////////////////////////////////
// Name: src/common/hyperlnkcmn.cpp
// Purpose: Hyperlink control
// Author: David Norris <danorris@gmail.com>, Otto Wyss
// Modified by: Ryan Norton, Francesco Montorsi
// Created: 04/02/2005
// Copyright: (c) 2005 David Norris
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
//---------------------------------------------------------------------------
// Pre-compiled header stuff
//---------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_HYPERLINKCTRL
//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include "wx/hyperlink.h"
#ifndef WX_PRECOMP
#include "wx/menu.h"
#include "wx/log.h"
#include "wx/dataobj.h"
#endif
// ============================================================================
// implementation
// ============================================================================
wxDEFINE_FLAGS( wxHyperlinkStyle )
wxBEGIN_FLAGS( wxHyperlinkStyle )
// new style border flags, we put them first to
// use them for streaming out
wxFLAGS_MEMBER(wxBORDER_SIMPLE)
wxFLAGS_MEMBER(wxBORDER_SUNKEN)
wxFLAGS_MEMBER(wxBORDER_DOUBLE)
wxFLAGS_MEMBER(wxBORDER_RAISED)
wxFLAGS_MEMBER(wxBORDER_STATIC)
wxFLAGS_MEMBER(wxBORDER_NONE)
// old style border flags
wxFLAGS_MEMBER(wxSIMPLE_BORDER)
wxFLAGS_MEMBER(wxSUNKEN_BORDER)
wxFLAGS_MEMBER(wxDOUBLE_BORDER)
wxFLAGS_MEMBER(wxRAISED_BORDER)
wxFLAGS_MEMBER(wxSTATIC_BORDER)
wxFLAGS_MEMBER(wxBORDER)
// standard window styles
wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
wxFLAGS_MEMBER(wxCLIP_CHILDREN)
wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
wxFLAGS_MEMBER(wxWANTS_CHARS)
wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)
wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
wxFLAGS_MEMBER(wxVSCROLL)
wxFLAGS_MEMBER(wxHSCROLL)
wxFLAGS_MEMBER(wxHL_CONTEXTMENU)
wxFLAGS_MEMBER(wxHL_ALIGN_LEFT)
wxFLAGS_MEMBER(wxHL_ALIGN_RIGHT)
wxFLAGS_MEMBER(wxHL_ALIGN_CENTRE)
wxEND_FLAGS( wxHyperlinkStyle )
wxIMPLEMENT_DYNAMIC_CLASS_XTI( wxHyperlinkCtrl, wxControl, "wx/hyperlink.h")
IMPLEMENT_DYNAMIC_CLASS(wxHyperlinkEvent, wxCommandEvent)
wxDEFINE_EVENT( wxEVT_HYPERLINK, wxHyperlinkEvent );
wxBEGIN_PROPERTIES_TABLE(wxHyperlinkCtrl)
wxPROPERTY( Label, wxString, SetLabel, GetLabel, wxString(), \
0 /*flags*/, wxT("The link label"), wxT("group") )
wxPROPERTY( URL, wxString, SetURL, GetURL, wxString(), \
0 /*flags*/, wxT("The link URL"), wxT("group") )
wxPROPERTY_FLAGS( WindowStyle, wxHyperlinkStyle, long, SetWindowStyleFlag, \
GetWindowStyleFlag, wxEMPTY_PARAMETER_VALUE, 0 /*flags*/, \
wxT("The link style"), wxT("group")) // style
wxEND_PROPERTIES_TABLE()
wxEMPTY_HANDLERS_TABLE(wxHyperlinkCtrl)
wxCONSTRUCTOR_7( wxHyperlinkCtrl, wxWindow*, Parent, wxWindowID, Id, wxString, \
Label, wxString, URL, wxPoint, Position, wxSize, Size, long, WindowStyle )
const char wxHyperlinkCtrlNameStr[] = "hyperlink";
// ----------------------------------------------------------------------------
// wxHyperlinkCtrlBase
// ----------------------------------------------------------------------------
void
wxHyperlinkCtrlBase::CheckParams(const wxString& label,
const wxString& url,
long style)
{
#if wxDEBUG_LEVEL
wxASSERT_MSG(!url.empty() || !label.empty(),
wxT("Both URL and label are empty ?"));
int alignment = (int)((style & wxHL_ALIGN_LEFT) != 0) +
(int)((style & wxHL_ALIGN_CENTRE) != 0) +
(int)((style & wxHL_ALIGN_RIGHT) != 0);
wxASSERT_MSG(alignment == 1,
wxT("Specify exactly one align flag!"));
#else // !wxDEBUG_LEVEL
wxUnusedVar(label);
wxUnusedVar(url);
wxUnusedVar(style);
#endif // wxDEBUG_LEVEL/!wxDEBUG_LEVEL
}
void wxHyperlinkCtrlBase::SendEvent()
{
wxString url = GetURL();
wxHyperlinkEvent linkEvent(this, GetId(), url);
if (!GetEventHandler()->ProcessEvent(linkEvent)) // was the event skipped ?
{
if (!wxLaunchDefaultBrowser(url))
{
wxLogWarning(wxT("Could not launch the default browser with url '%s' !"), url.c_str());
}
}
}
#endif // wxUSE_HYPERLINKCTRL
|