mirror of https://github.com/BOINC/boinc.git
212 lines
6.2 KiB
C++
212 lines
6.2 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
// File: hyperlink.cpp
|
|
// Purpose: wxHyperLink control
|
|
// Maintainer: Wyo
|
|
// Created: 2003-04-07
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2004 wxCode
|
|
// Licence: wxWindows
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//----------------------------------------------------------------------------
|
|
// information
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// headers
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "stdwx.h"
|
|
#include "diagnostics.h"
|
|
#include "util.h"
|
|
#include "mfile.h"
|
|
#include "miofile.h"
|
|
#include "parse.h"
|
|
#include "error_numbers.h"
|
|
#include "Events.h"
|
|
#include "BOINCGUIApp.h"
|
|
#include "SkinManager.h"
|
|
#include "hyperlink.h" // wxHyperLink control
|
|
|
|
//----------------------------------------------------------------------------
|
|
// resources
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
//============================================================================
|
|
// declarations
|
|
//============================================================================
|
|
|
|
|
|
//============================================================================
|
|
// implementation
|
|
//============================================================================
|
|
|
|
//----------------------------------------------------------------------------
|
|
// wxHyperLink
|
|
//----------------------------------------------------------------------------
|
|
|
|
IMPLEMENT_DYNAMIC_CLASS (wxHyperLink, wxStaticText)
|
|
|
|
BEGIN_EVENT_TABLE (wxHyperLink, wxStaticText)
|
|
EVT_ENTER_WINDOW (wxHyperLink::OnWindowEnter)
|
|
EVT_LEAVE_WINDOW (wxHyperLink::OnWindowLeave)
|
|
EVT_LEFT_DCLICK (wxHyperLink::OnLinkActivate)
|
|
EVT_LEFT_DOWN (wxHyperLink::OnLinkActivate)
|
|
END_EVENT_TABLE()
|
|
|
|
bool wxHyperLink::Create (wxWindow *parent,
|
|
wxWindowID id,
|
|
const wxString &label,
|
|
const wxPoint &pos,
|
|
const wxSize &size,
|
|
long style,
|
|
const wxString &name) {
|
|
bool okay = FALSE;
|
|
|
|
// create static text
|
|
okay = wxStaticText::Create (parent, id, label, pos, size, style, name);
|
|
wxASSERT_MSG (okay, wxT("Failed to create wxStaticText, needed by wxHyperLink!"));
|
|
|
|
// initialize variables
|
|
m_URL = wxEmptyString;
|
|
m_Marked = false;
|
|
m_Visited = false;
|
|
m_MarkedColour = wxColour (wxT("DARK GREY"));
|
|
m_NormalColour = wxColour (wxT("BLUE"));
|
|
m_VisitedColour = wxColour (wxT("PURPLE"));
|
|
m_HoverCursor = wxCursor (wxCURSOR_HAND);
|
|
|
|
// set foreground colour
|
|
SetForegroundColour (m_NormalColour);
|
|
wxFont font = GetFont();
|
|
font.SetUnderlined (true);
|
|
SetFont (font);
|
|
|
|
// get background colour
|
|
m_BackgroundColour = GetBackgroundColour ();
|
|
|
|
return okay;
|
|
} // Create
|
|
|
|
//----------------------------------------------------------------------------
|
|
// event handlers
|
|
|
|
void wxHyperLink::OnWindowEnter (wxMouseEvent &WXUNUSED(event)) {
|
|
SetCursor (m_HoverCursor);
|
|
Refresh();
|
|
}
|
|
|
|
void wxHyperLink::OnWindowLeave (wxMouseEvent &WXUNUSED(event)) {
|
|
SetCursor (wxNullCursor);
|
|
Refresh();
|
|
}
|
|
|
|
void wxHyperLink::OnLinkActivate (wxMouseEvent &WXUNUSED(event)) {
|
|
m_Visited = TRUE;
|
|
SetForegroundColour (m_VisitedColour);
|
|
SetBackgroundColour (m_BackgroundColour);
|
|
Refresh();
|
|
if (m_URL.IsEmpty()) {
|
|
ExecuteLink (GetLabel());
|
|
}else{
|
|
ExecuteLink (m_URL);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// settings functions
|
|
|
|
wxCursor wxHyperLink::GetHoverCursor () {
|
|
return m_HoverCursor;
|
|
}
|
|
|
|
void wxHyperLink::SetHoverCursor (wxCursor cursor) {
|
|
m_HoverCursor = cursor;
|
|
}
|
|
|
|
wxColour wxHyperLink::GetMarkedColour () {
|
|
return m_MarkedColour;
|
|
}
|
|
|
|
void wxHyperLink::SetMarkedColour (wxColour colour) {
|
|
m_MarkedColour = colour;
|
|
}
|
|
|
|
wxColour wxHyperLink::GetNormalColour () {
|
|
return m_NormalColour;
|
|
}
|
|
|
|
void wxHyperLink::SetNormalColour (wxColour colour) {
|
|
m_NormalColour = colour;
|
|
if (!m_Visited) {
|
|
SetForegroundColour (m_NormalColour);
|
|
}else{
|
|
SetForegroundColour (m_VisitedColour);
|
|
}
|
|
Refresh();
|
|
}
|
|
|
|
wxColour wxHyperLink::GetVisitedColour () {
|
|
return m_VisitedColour;
|
|
}
|
|
|
|
void wxHyperLink::SetVisitedColour (wxColour colour) {
|
|
m_VisitedColour = colour;
|
|
if (!m_Visited) {
|
|
SetForegroundColour (m_NormalColour);
|
|
}else{
|
|
SetForegroundColour (m_VisitedColour);
|
|
}
|
|
Refresh();
|
|
}
|
|
|
|
wxString wxHyperLink::GetURL () {
|
|
return m_URL;
|
|
}
|
|
|
|
void wxHyperLink::SetURL (const wxString &url) {
|
|
m_URL = url;
|
|
}
|
|
|
|
void wxHyperLink::ExecuteLink (const wxString &strLink) {
|
|
if (!wxLaunchDefaultBrowser(strLink)) {
|
|
wxString strDialogTitle = wxEmptyString;
|
|
wxString strDialogMessage = wxEmptyString;
|
|
|
|
// %s is the application name
|
|
// i.e. 'BOINC Manager', 'GridRepublic Manager'
|
|
strDialogTitle.Printf(
|
|
_("%s - Can't find web browser"),
|
|
wxGetApp().GetSkinManager()->GetAdvanced()->GetApplicationName().c_str()
|
|
);
|
|
|
|
// 1st %s is the application name
|
|
// i.e. 'BOINC Manager', 'GridRepublic Manager'
|
|
// 2nd %s is the URL that the browser is supposed to
|
|
// open.
|
|
// 3rd %s is the application name
|
|
// i.e. 'BOINC Manager', 'GridRepublic Manager'
|
|
strDialogMessage.Printf(
|
|
_("%s tried to display the web page\n"
|
|
"\t%s\n"
|
|
"but couldn't find a web browser.\n"
|
|
"To fix this, set the environment variable\n"
|
|
"BROWSER to the path of your web browser,\n"
|
|
"then restart the %s."),
|
|
wxGetApp().GetSkinManager()->GetAdvanced()->GetApplicationName().c_str(),
|
|
strLink.c_str(),
|
|
wxGetApp().GetSkinManager()->GetAdvanced()->GetApplicationName().c_str()
|
|
);
|
|
|
|
::wxMessageBox(
|
|
strDialogMessage,
|
|
strDialogTitle,
|
|
wxOK | wxICON_INFORMATION
|
|
);
|
|
}
|
|
}
|
|
|
|
const char *BOINC_RCSID_d587835b7e="$Id$";
|