2005-06-28 22:22:29 +00:00
//////////////////////////////////////////////////////////////////////////////
// File: hyperlink.cpp
// Purpose: wxHyperLink control
// Maintainer: Wyo
// Created: 2003-04-07
// RCS-ID: $Id$
// Copyright: (c) 2004 wxCode
// Licence: wxWindows
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// information
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// headers
//----------------------------------------------------------------------------
2005-12-28 12:33:18 +00:00
# include "stdwx.h"
2006-10-27 10:26:56 +00:00
# include "diagnostics.h"
# include "util.h"
# include "mfile.h"
# include "miofile.h"
# include "parse.h"
# include "error_numbers.h"
# include "Events.h"
2005-12-28 12:33:18 +00:00
# include "BOINCGUIApp.h"
2006-10-27 10:26:56 +00:00
# include "SkinManager.h"
2005-06-28 22:22:29 +00:00
# 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 ) ;
2006-03-09 10:21:07 +00:00
wxASSERT_MSG ( okay , wxT ( " Failed to create wxStaticText, needed by wxHyperLink! " ) ) ;
2005-06-28 22:22:29 +00:00
// initialize variables
m_URL = wxEmptyString ;
m_Marked = false ;
m_Visited = false ;
2006-03-09 10:21:07 +00:00
m_MarkedColour = wxColour ( wxT ( " DARK GREY " ) ) ;
m_NormalColour = wxColour ( wxT ( " BLUE " ) ) ;
m_VisitedColour = wxColour ( wxT ( " PURPLE " ) ) ;
2005-06-28 22:22:29 +00:00
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 ) {
2006-10-27 10:26:56 +00:00
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 (
2008-07-08 20:05:07 +00:00
_ ( " %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. " ) ,
2006-10-27 10:26:56 +00:00
wxGetApp ( ) . GetSkinManager ( ) - > GetAdvanced ( ) - > GetApplicationName ( ) . c_str ( ) ,
strLink . c_str ( ) ,
wxGetApp ( ) . GetSkinManager ( ) - > GetAdvanced ( ) - > GetApplicationName ( ) . c_str ( )
) ;
2008-08-20 16:07:06 +00:00
: : wxGetApp ( ) . SafeMessageBox (
2006-10-27 10:26:56 +00:00
strDialogMessage ,
strDialogTitle ,
wxOK | wxICON_INFORMATION
) ;
2005-10-09 22:31:14 +00:00
}
2005-06-28 22:22:29 +00:00
}
2005-09-13 09:01:56 +00:00
const char * BOINC_RCSID_d587835b7e = " $Id$ " ;