2008-08-06 18:36:30 +00:00
// This file is part of BOINC.
2006-06-23 08:20:08 +00:00
// http://boinc.berkeley.edu
2008-08-06 18:36:30 +00:00
// Copyright (C) 2008 University of California
2006-06-23 08:20:08 +00:00
//
2008-08-06 18:36:30 +00:00
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
2006-06-23 08:20:08 +00:00
//
2008-08-06 18:36:30 +00:00
// BOINC is distributed in the hope that it will be useful,
2006-06-23 08:20:08 +00:00
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
2008-08-06 18:36:30 +00:00
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
2006-06-23 08:20:08 +00:00
# if defined(__GNUG__) && !defined(__APPLE__)
# pragma implementation "BOINCBaseFrame.h"
# endif
# include "stdwx.h"
2006-10-20 15:00:14 +00:00
# include "diagnostics.h"
# include "util.h"
# include "mfile.h"
# include "miofile.h"
# include "parse.h"
# include "error_numbers.h"
2006-06-23 08:20:08 +00:00
# include "hyperlink.h"
# include "BOINCGUIApp.h"
2006-10-20 15:00:14 +00:00
# include "SkinManager.h"
# include "MainDocument.h"
2008-01-30 06:09:34 +00:00
# include "BOINCClientManager.h"
2006-10-20 15:00:14 +00:00
# include "BOINCTaskBar.h"
2006-06-23 08:20:08 +00:00
# include "BOINCBaseFrame.h"
2006-06-23 22:30:47 +00:00
# include "BOINCDialupManager.h"
2006-06-23 08:20:08 +00:00
# include "Events.h"
DEFINE_EVENT_TYPE ( wxEVT_FRAME_ALERT )
DEFINE_EVENT_TYPE ( wxEVT_FRAME_CONNECT )
DEFINE_EVENT_TYPE ( wxEVT_FRAME_INITIALIZED )
DEFINE_EVENT_TYPE ( wxEVT_FRAME_REFRESHVIEW )
DEFINE_EVENT_TYPE ( wxEVT_FRAME_UPDATESTATUS )
2006-10-25 14:09:47 +00:00
DEFINE_EVENT_TYPE ( wxEVT_FRAME_RELOADSKIN )
2006-06-23 08:20:08 +00:00
IMPLEMENT_DYNAMIC_CLASS ( CBOINCBaseFrame , wxFrame )
BEGIN_EVENT_TABLE ( CBOINCBaseFrame , wxFrame )
2006-06-23 21:49:50 +00:00
EVT_TIMER ( ID_DOCUMENTPOLLTIMER , CBOINCBaseFrame : : OnDocumentPoll )
2006-06-23 22:30:47 +00:00
EVT_TIMER ( ID_ALERTPOLLTIMER , CBOINCBaseFrame : : OnAlertPoll )
2008-07-25 11:44:21 +00:00
EVT_TIMER ( ID_PERIODICRPCTIMER , CBOINCBaseFrame : : OnPeriodicRPC )
2006-06-23 21:49:50 +00:00
EVT_FRAME_INITIALIZED ( CBOINCBaseFrame : : OnInitialized )
2006-06-23 08:20:08 +00:00
EVT_FRAME_ALERT ( CBOINCBaseFrame : : OnAlert )
2008-07-29 13:06:28 +00:00
EVT_FRAME_REFRESH ( CBOINCBaseFrame : : OnRefreshView )
2006-06-23 08:20:08 +00:00
EVT_CLOSE ( CBOINCBaseFrame : : OnClose )
2006-12-12 01:08:16 +00:00
EVT_MENU ( ID_FILECLOSEWINDOW , CBOINCBaseFrame : : OnCloseWindow )
2006-06-23 08:20:08 +00:00
END_EVENT_TABLE ( )
CBOINCBaseFrame : : CBOINCBaseFrame ( )
{
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::CBOINCBaseFrame - Default Constructor Function Begin " ) ) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::CBOINCBaseFrame - Default Constructor Function End " ) ) ;
}
CBOINCBaseFrame : : CBOINCBaseFrame ( wxWindow * parent , const wxWindowID id , const wxString & title , const wxPoint & pos , const wxSize & size , const long style ) :
wxFrame ( parent , id , title , pos , size , style )
{
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::CBOINCBaseFrame - Function Begin " ) ) ;
2006-06-23 21:49:50 +00:00
// Configuration Settings
m_iSelectedLanguage = 0 ;
m_iReminderFrequency = 0 ;
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
m_strNetworkDialupConnectionName = wxEmptyString ;
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
m_aSelectedComputerMRU . Clear ( ) ;
2006-06-23 08:20:08 +00:00
2008-07-01 03:46:59 +00:00
m_bShowConnectionFailedAlert = false ;
2006-06-23 08:20:08 +00:00
2006-06-23 22:30:47 +00:00
m_pDialupManager = new CBOINCDialUpManager ( ) ;
wxASSERT ( m_pDialupManager - > IsOk ( ) ) ;
2006-06-23 21:49:50 +00:00
m_pDocumentPollTimer = new wxTimer ( this , ID_DOCUMENTPOLLTIMER ) ;
wxASSERT ( m_pDocumentPollTimer ) ;
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
m_pDocumentPollTimer - > Start ( 250 ) ; // Send event every 250 milliseconds
2006-06-23 08:20:08 +00:00
2006-06-23 22:30:47 +00:00
m_pAlertPollTimer = new wxTimer ( this , ID_ALERTPOLLTIMER ) ;
wxASSERT ( m_pAlertPollTimer ) ;
m_pAlertPollTimer - > Start ( 1000 ) ; // Send event every 1000 milliseconds
2008-07-25 11:44:21 +00:00
m_pPeriodicRPCTimer = new wxTimer ( this , ID_PERIODICRPCTIMER ) ;
wxASSERT ( m_pPeriodicRPCTimer ) ;
m_pPeriodicRPCTimer - > Start ( 1000 ) ; // Send event every 1000 milliseconds
2006-06-23 22:30:47 +00:00
2006-06-23 21:49:50 +00:00
// Limit the number of times the UI can update itself to two times a second
// NOTE: Linux and Mac were updating several times a second and eating
// CPU time
wxUpdateUIEvent : : SetUpdateInterval ( 500 ) ;
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
// The second half of the initialization process picks up in the OnFrameRender()
// routine since the menus' and status bars' are drawn in the frameworks
// on idle routines, on idle events are sent in between the end of the
// constructor and the first call to OnFrameRender
2006-06-23 08:20:08 +00:00
//
2006-06-23 21:49:50 +00:00
// Look for the 'if (!bAlreadyRunOnce) {' statement
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::CBOINCBaseFrame - Function End " ) ) ;
}
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
CBOINCBaseFrame : : ~ CBOINCBaseFrame ( ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::~CBOINCBaseFrame - Function Begin " ) ) ;
2006-06-23 08:20:08 +00:00
2008-07-25 11:44:21 +00:00
wxASSERT ( m_pPeriodicRPCTimer ) ;
2006-06-23 22:30:47 +00:00
wxASSERT ( m_pAlertPollTimer ) ;
2006-06-23 21:49:50 +00:00
wxASSERT ( m_pDocumentPollTimer ) ;
2006-06-23 08:20:08 +00:00
2008-07-25 11:44:21 +00:00
if ( m_pPeriodicRPCTimer ) {
m_pPeriodicRPCTimer - > Stop ( ) ;
delete m_pPeriodicRPCTimer ;
}
2006-06-23 22:30:47 +00:00
if ( m_pAlertPollTimer ) {
m_pAlertPollTimer - > Stop ( ) ;
delete m_pAlertPollTimer ;
}
2006-06-23 21:49:50 +00:00
if ( m_pDocumentPollTimer ) {
m_pDocumentPollTimer - > Stop ( ) ;
delete m_pDocumentPollTimer ;
2006-06-23 08:20:08 +00:00
}
2006-06-23 22:30:47 +00:00
if ( m_pDialupManager )
delete m_pDialupManager ;
2006-06-23 21:49:50 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::~CBOINCBaseFrame - Function End " ) ) ;
2006-06-23 08:20:08 +00:00
}
2008-07-25 11:44:21 +00:00
void CBOINCBaseFrame : : OnPeriodicRPC ( wxTimerEvent & WXUNUSED ( event ) ) {
static bool bAlreadyRunningLoop = false ;
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
if ( ! bAlreadyRunningLoop & & m_pPeriodicRPCTimer - > IsRunning ( ) ) {
bAlreadyRunningLoop = true ;
pDoc - > RunPeriodicRPCs ( ) ;
bAlreadyRunningLoop = false ;
}
}
2006-06-23 22:30:47 +00:00
void CBOINCBaseFrame : : OnDocumentPoll ( wxTimerEvent & WXUNUSED ( event ) ) {
2006-06-23 21:49:50 +00:00
static bool bAlreadyRunOnce = false ;
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
2006-06-23 08:20:08 +00:00
2006-06-23 21:49:50 +00:00
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
2006-06-23 08:20:08 +00:00
2008-09-19 06:50:25 +00:00
// Timer events are handled while the RPC Wait dialog is shown
// which may cause unintended recursion and repeatedly posting
// the same RPC requests from timer routines.
if ( pDoc - > WaitingForRPC ( ) ) return ;
2006-12-29 16:35:33 +00:00
if ( ! bAlreadyRunOnce & & m_pDocumentPollTimer - > IsRunning ( ) ) {
2006-06-23 21:49:50 +00:00
// Complete any remaining initialization that has to happen after we are up
// and running
FireInitialize ( ) ;
bAlreadyRunOnce = true ;
2006-06-23 08:20:08 +00:00
}
2006-06-23 21:49:50 +00:00
pDoc - > OnPoll ( ) ;
}
2006-06-23 08:20:08 +00:00
2006-06-23 22:30:47 +00:00
void CBOINCBaseFrame : : OnAlertPoll ( wxTimerEvent & WXUNUSED ( event ) ) {
static bool bAlreadyRunningLoop = false ;
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
2006-12-29 16:35:33 +00:00
if ( ! bAlreadyRunningLoop & & m_pAlertPollTimer - > IsRunning ( ) ) {
2006-06-23 22:30:47 +00:00
bAlreadyRunningLoop = true ;
// Update idle detection if needed.
wxGetApp ( ) . UpdateSystemIdleDetection ( ) ;
// Check to see if there is anything that we need to do from the
// dial up user perspective.
if ( pDoc & & m_pDialupManager ) {
2008-09-19 06:50:25 +00:00
// Timer events are handled while the RPC Wait dialog is shown
// which may cause unintended recursion and repeatedly posting
// the same RPC requests from timer routines.
if ( pDoc - > IsConnected ( ) & & ! pDoc - > WaitingForRPC ( ) ) {
2006-12-29 16:35:33 +00:00
m_pDialupManager - > OnPoll ( ) ;
2006-06-23 22:30:47 +00:00
}
}
2008-07-01 03:46:59 +00:00
if ( m_bShowConnectionFailedAlert & & IsShown ( ) ) {
m_bShowConnectionFailedAlert = false ;
ShowConnectionFailedAlert ( ) ;
}
2006-06-23 22:30:47 +00:00
bAlreadyRunningLoop = false ;
}
}
2006-06-23 21:49:50 +00:00
void CBOINCBaseFrame : : OnInitialized ( CFrameEvent & WXUNUSED ( event ) ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnInitialized - Function Begin " ) ) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnInitialized - Function End " ) ) ;
2006-06-23 08:20:08 +00:00
}
2008-08-20 18:24:08 +00:00
void CBOINCBaseFrame : : OnRefreshView ( CFrameEvent & ) {
2008-07-29 13:06:28 +00:00
}
2006-06-23 08:20:08 +00:00
void CBOINCBaseFrame : : OnAlert ( CFrameAlertEvent & event ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnAlert - Function Begin " ) ) ;
2006-09-18 05:29:33 +00:00
static bool bAlreadyRunningLoop = false ;
if ( ! bAlreadyRunningLoop ) {
bAlreadyRunningLoop = true ;
2006-06-23 08:20:08 +00:00
# ifdef __WXMSW__
2006-09-18 05:29:33 +00:00
CTaskBarIcon * pTaskbar = wxGetApp ( ) . GetTaskBarIcon ( ) ;
wxASSERT ( pTaskbar ) ;
2006-06-23 08:20:08 +00:00
2006-09-18 05:29:33 +00:00
if ( ( IsShown ( ) & & ! event . m_notification_only ) | | ( IsShown ( ) & & ! pTaskbar - > IsBalloonsSupported ( ) ) ) {
if ( ! event . m_notification_only ) {
int retval = 0 ;
2006-06-23 08:20:08 +00:00
2006-09-18 05:29:33 +00:00
if ( ! IsShown ( ) ) {
Show ( ) ;
}
2006-06-23 08:20:08 +00:00
2008-08-20 18:24:08 +00:00
retval = wxGetApp ( ) . SafeMessageBox ( event . m_message , event . m_title , event . m_style , this ) ;
2006-09-18 05:29:33 +00:00
if ( event . m_alert_event_type = = AlertProcessResponse ) {
event . ProcessResponse ( retval ) ;
}
2006-06-23 08:20:08 +00:00
}
} else {
2006-09-18 05:29:33 +00:00
// If the main window is hidden or minimzed use the system tray ballon
// to notify the user instead. This keeps dialogs from interfering
// with people typing email messages or any other activity where they
// do not want keyboard focus changed to another window while typing.
unsigned int icon_type ;
if ( wxICON_ERROR & event . m_style ) {
icon_type = NIIF_ERROR ;
} else if ( wxICON_WARNING & event . m_style ) {
icon_type = NIIF_WARNING ;
} else if ( wxICON_INFORMATION & event . m_style ) {
icon_type = NIIF_INFO ;
} else {
icon_type = NIIF_NONE ;
2006-06-23 08:20:08 +00:00
}
2006-09-18 05:29:33 +00:00
pTaskbar - > SetBalloon (
pTaskbar - > m_iconTaskBarNormal ,
event . m_title ,
event . m_message ,
5000 ,
icon_type
) ;
}
2008-02-05 12:00:06 +00:00
# elif defined (__WXMAC__)
2008-08-20 16:07:06 +00:00
// SafeMessageBox() / ProcessResponse() hangs the Manager if hidden.
2008-07-01 03:46:59 +00:00
// Currently, the only non-notification-only alert is Connection Failed,
// which is now has logic to be displayed when Manager is maximized.
// Notification only events on platforms other than Windows are
// currently discarded. Otherwise the application would be restored
// and input focus set on the notification which interrupts whatever
// the user was doing.
if ( IsShown ( ) & & ! event . m_notification_only ) {
2008-02-05 12:00:06 +00:00
int retval = 0 ;
2008-08-20 16:07:06 +00:00
retval = wxGetApp ( ) . SafeMessageBox ( event . m_message , event . m_title , event . m_style , this ) ;
2008-02-05 12:00:06 +00:00
if ( event . m_alert_event_type = = AlertProcessResponse ) {
event . ProcessResponse ( retval ) ;
2006-06-23 08:20:08 +00:00
}
}
# endif
2006-09-18 05:29:33 +00:00
bAlreadyRunningLoop = false ;
}
2006-06-23 08:20:08 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnAlert - Function End " ) ) ;
}
2006-06-23 21:49:50 +00:00
void CBOINCBaseFrame : : OnClose ( wxCloseEvent & event ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnClose - Function Begin " ) ) ;
2006-08-14 19:30:40 +00:00
# if defined(__WXMSW__) || defined(__WXMAC__)
2006-06-23 21:49:50 +00:00
if ( ! event . CanVeto ( ) ) {
2008-07-30 13:08:15 +00:00
wxGetApp ( ) . FrameClosed ( ) ;
2006-06-23 21:49:50 +00:00
Destroy ( ) ;
} else {
Hide ( ) ;
}
2006-08-14 19:30:40 +00:00
# else
2008-07-30 13:08:15 +00:00
wxGetApp ( ) . FrameClosed ( ) ;
2006-08-14 19:30:40 +00:00
Destroy ( ) ;
# endif
2006-06-23 21:49:50 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnClose - Function End " ) ) ;
}
2006-12-12 01:08:16 +00:00
void CBOINCBaseFrame : : OnCloseWindow ( wxCommandEvent & WXUNUSED ( event ) ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnCloseWindow - Function Begin " ) ) ;
Close ( ) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::OnCloseWindow - Function End " ) ) ;
}
2006-11-03 15:18:19 +00:00
void CBOINCBaseFrame : : OnExit ( wxCommandEvent & WXUNUSED ( event ) ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CAdvancedFrame::OnExit - Function Begin " ) ) ;
2008-11-04 16:51:31 +00:00
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
2007-01-19 14:30:18 +00:00
if ( wxGetApp ( ) . ConfirmExit ( ) ) {
2008-11-04 16:51:31 +00:00
if ( ! wxGetApp ( ) . ShouldShutdownCoreClient ( ) ) {
pDoc - > m_pClientManager - > DisableBOINCStartedByManager ( ) ;
}
2007-02-15 05:37:19 +00:00
// Under wxWidgets 2.8.0, the task bar icons must be deleted for app to exit its main loop
2007-01-19 14:30:18 +00:00
# ifdef __WXMAC__
CMacSystemMenu * pMSM = wxGetApp ( ) . GetMacSystemMenu ( ) ;
if ( pMSM )
delete pMSM ;
# endif
2007-01-19 17:32:16 +00:00
2007-02-15 05:37:19 +00:00
// TaskBarIcon isn't used in Linux
2007-01-19 17:32:16 +00:00
# if defined(__WXMSW__) || defined(__WXMAC__)
2007-01-19 14:30:18 +00:00
CTaskBarIcon * pTBI = wxGetApp ( ) . GetTaskBarIcon ( ) ;
2007-05-21 16:07:10 +00:00
if ( pTBI & & ! pTBI - > m_bTaskbarInitiatedShutdown ) {
2007-01-19 14:30:18 +00:00
delete pTBI ;
2007-05-21 16:07:10 +00:00
}
2007-01-19 17:32:16 +00:00
# endif
2007-01-21 19:03:52 +00:00
Close ( true ) ;
2007-01-19 14:30:18 +00:00
}
2008-11-04 16:51:31 +00:00
2006-11-03 15:18:19 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CAdvancedFrame::OnExit - Function End " ) ) ;
}
- client: include precompiled header in rr_sim.cpp so memory
leak detection will work.
- MGR: Have the BaseFrame call a function to determine if the
selection list should be saved instead of traversing
the application pointer. Each view just overrides the function
returning a true/false value. We don't have to worry about null
pointers and the like.
- MGR: BOINCGUIApp should never need to know how either the views
work or the document. Move the code that determines which
RPCs should be fired into each of the views. Have the document
look for it there.
- MGR: Reduce duplicate code for hiding and showing an application
- MGR: Move some Windows and Mac specific code into functions
and streamline the application startup and shutdown rountines.
- MGR: Move the event processing that was in BOINCGUIApp into the
BaseFrame.
- MGR: General cleanup.
- MGR: Doxygen comments.
- MGR: Cleanup some warnings.
client/
rr_sim.cpp
clientgui/
AdvancedFrame.cpp, .h
AsyncRPC.cpp, .h
BOINCBaseFrame.cpp, .h
BOINCBaseView.cpp, .h
BOINCClientManager.cpp
BOINCGUIApp.cpp, .h
BOINCTaskBar.cpp
MainDocument.cpp, .h
sg_BoincSimpleGUI.cpp, .h
ViewProjects.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
WelcomePage.cpp
win_build/installerv2/
BOINC.ism
BOINCx64.ism
win_build/
sim.vcproj
svn path=/trunk/boinc/; revision=16357
2008-10-29 22:44:55 +00:00
int CBOINCBaseFrame : : GetCurrentViewPage ( ) {
return _GetCurrentViewPage ( ) ;
}
2006-06-23 08:20:08 +00:00
void CBOINCBaseFrame : : FireInitialize ( ) {
CFrameEvent event ( wxEVT_FRAME_INITIALIZED , this ) ;
AddPendingEvent ( event ) ;
}
void CBOINCBaseFrame : : FireRefreshView ( ) {
2008-08-12 09:21:16 +00:00
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
2008-10-08 08:50:18 +00:00
pDoc - > RefreshRPCs ( ) ;
2008-08-12 09:21:16 +00:00
pDoc - > RunPeriodicRPCs ( ) ;
2006-06-23 08:20:08 +00:00
}
void CBOINCBaseFrame : : FireConnect ( ) {
CFrameEvent event ( wxEVT_FRAME_CONNECT , this ) ;
AddPendingEvent ( event ) ;
}
2006-10-25 14:09:47 +00:00
void CBOINCBaseFrame : : FireReloadSkin ( ) {
CFrameEvent event ( wxEVT_FRAME_RELOADSKIN , this ) ;
AddPendingEvent ( event ) ;
}
2008-01-11 17:56:21 +00:00
void CBOINCBaseFrame : : ShowConnectionBadPasswordAlert ( bool bUsedDefaultPassword , int m_iReadGUIRPCAuthFailure ) {
2006-10-20 15:00:14 +00:00
CSkinAdvanced * pSkinAdvanced = wxGetApp ( ) . GetSkinManager ( ) - > GetAdvanced ( ) ;
2006-06-23 08:20:08 +00:00
wxString strDialogTitle = wxEmptyString ;
2006-10-20 15:00:14 +00:00
wxASSERT ( pSkinAdvanced ) ;
wxASSERT ( wxDynamicCast ( pSkinAdvanced , CSkinAdvanced ) ) ;
2006-06-23 08:20:08 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowConnectionBadPasswordAlert - Function Begin " ) ) ;
// %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogTitle . Printf (
_ ( " %s - Connection Error " ) ,
2006-10-20 15:00:14 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( )
2006-06-23 08:20:08 +00:00
) ;
2007-01-30 15:50:16 +00:00
if ( bUsedDefaultPassword ) {
2008-01-12 01:45:29 +00:00
# ifdef __WXMSW__
2008-01-11 17:56:21 +00:00
if ( EACCES = = m_iReadGUIRPCAuthFailure | | ENOENT = = m_iReadGUIRPCAuthFailure ) {
ShowAlert (
strDialogTitle ,
_ ( " You currently are not authorized to manage the client. \n "
" Please contact your administrator to add you to the 'boinc_users' local user group. " ) ,
wxOK | wxICON_ERROR
) ;
2008-01-12 01:45:29 +00:00
} else
# endif
{
2008-01-11 17:56:21 +00:00
ShowAlert (
strDialogTitle ,
2008-02-05 12:00:06 +00:00
# ifndef __WXMAC__
2008-07-08 20:05:07 +00:00
_ ( " Authorization failed connecting to running client. \n Make sure you start this program in the same directory as the client. " ) ,
2008-02-06 00:42:59 +00:00
# else
_ ( " Authorization failed connecting to running client. " ) ,
# endif
2008-01-11 17:56:21 +00:00
wxOK | wxICON_ERROR
) ;
}
2007-01-30 15:50:16 +00:00
} else {
ShowAlert (
strDialogTitle ,
_ ( " The password you have provided is incorrect, please try again. " ) ,
wxOK | wxICON_ERROR
) ;
}
2006-06-23 08:20:08 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowConnectionBadPasswordAlert - Function End " ) ) ;
}
void CBOINCBaseFrame : : ShowConnectionFailedAlert ( ) {
2006-10-20 15:00:14 +00:00
CSkinAdvanced * pSkinAdvanced = wxGetApp ( ) . GetSkinManager ( ) - > GetAdvanced ( ) ;
2008-02-05 12:00:06 +00:00
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
wxString strConnectedCompter = wxEmptyString ;
2006-06-23 08:20:08 +00:00
wxString strDialogTitle = wxEmptyString ;
wxString strDialogMessage = wxEmptyString ;
2006-10-20 15:00:14 +00:00
wxASSERT ( pSkinAdvanced ) ;
wxASSERT ( wxDynamicCast ( pSkinAdvanced , CSkinAdvanced ) ) ;
2008-02-05 12:00:06 +00:00
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
2006-10-20 15:00:14 +00:00
2006-06-23 08:20:08 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowConnectionFailedAlert - Function Begin " ) ) ;
2008-02-05 12:00:06 +00:00
// Did BOINC crash on local computer? If so restart it and reconnect.
pDoc - > GetConnectedComputerName ( strConnectedCompter ) ;
if ( pDoc - > IsComputerNameLocal ( strConnectedCompter ) ) {
if ( pDoc - > m_pClientManager - > AutoRestart ( ) ) {
boinc_sleep ( 0.5 ) ; // Allow time for Client to restart
if ( pDoc - > m_pClientManager - > IsBOINCCoreRunning ( ) ) {
pDoc - > Reconnect ( ) ;
return ;
}
}
}
2007-01-19 23:45:19 +00:00
2006-06-23 08:20:08 +00:00
// %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogTitle . Printf (
_ ( " %s - Connection Failed " ) ,
2006-10-20 15:00:14 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( )
2006-06-23 08:20:08 +00:00
) ;
// 1st %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
// 2st %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage . Printf (
2008-07-08 20:05:07 +00:00
_ ( " %s is not able to connect to a %s client. \n Would you like to try to connect again? " ) ,
2006-10-20 15:00:14 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( ) ,
2007-08-16 18:53:42 +00:00
pSkinAdvanced - > GetApplicationShortName ( ) . c_str ( )
2006-06-23 08:20:08 +00:00
) ;
ShowAlert (
strDialogTitle ,
strDialogMessage ,
wxYES_NO | wxICON_QUESTION ,
false ,
AlertProcessResponse
) ;
2008-07-01 03:46:59 +00:00
// If we are minimized, set flag to show alert when maximized
2008-07-01 04:12:21 +00:00
m_bShowConnectionFailedAlert = ! IsShown ( ) ;
2008-07-01 03:46:59 +00:00
2006-06-23 08:20:08 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowConnectionFailedAlert - Function End " ) ) ;
}
2008-01-30 06:09:34 +00:00
void CBOINCBaseFrame : : ShowDaemonStartFailedAlert ( ) {
CSkinAdvanced * pSkinAdvanced = wxGetApp ( ) . GetSkinManager ( ) - > GetAdvanced ( ) ;
wxString strDialogTitle = wxEmptyString ;
wxString strDialogMessage = wxEmptyString ;
wxASSERT ( pSkinAdvanced ) ;
wxASSERT ( wxDynamicCast ( pSkinAdvanced , CSkinAdvanced ) ) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowDaemonStartFailedAlert - Function Begin " ) ) ;
// %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogTitle . Printf (
_ ( " %s - Daemon Start Failed " ) ,
pSkinAdvanced - > GetApplicationName ( ) . c_str ( )
) ;
// 1st %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
// 2st %s is the project name
// i.e. 'BOINC', 'GridRepublic'
# ifdef __WXMSW__
strDialogMessage . Printf (
2008-07-08 20:05:07 +00:00
_ ( " %s is not able to start a %s client. \n Please launch the Control Panel->Administative Tools->Services applet and start the BOINC service. " ) ,
2008-01-30 06:09:34 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( ) ,
pSkinAdvanced - > GetApplicationShortName ( ) . c_str ( )
) ;
# else
strDialogMessage . Printf (
2008-07-08 20:05:07 +00:00
_ ( " %s is not able to start a %s client. \n Please start the daemon and try again. " ) ,
2008-01-30 06:09:34 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( ) ,
pSkinAdvanced - > GetApplicationShortName ( ) . c_str ( )
) ;
# endif
ShowAlert (
strDialogTitle ,
strDialogMessage ,
wxOK | wxICON_ERROR
) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowDaemonStartFailedAlert - Function End " ) ) ;
}
2006-06-23 08:20:08 +00:00
void CBOINCBaseFrame : : ShowNotCurrentlyConnectedAlert ( ) {
2006-10-20 15:00:14 +00:00
CSkinAdvanced * pSkinAdvanced = wxGetApp ( ) . GetSkinManager ( ) - > GetAdvanced ( ) ;
2008-02-05 12:00:06 +00:00
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
wxString strConnectedCompter = wxEmptyString ;
2006-06-23 08:20:08 +00:00
wxString strDialogTitle = wxEmptyString ;
wxString strDialogMessage = wxEmptyString ;
2006-10-20 15:00:14 +00:00
wxASSERT ( pSkinAdvanced ) ;
wxASSERT ( wxDynamicCast ( pSkinAdvanced , CSkinAdvanced ) ) ;
2008-02-05 12:00:06 +00:00
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
2006-10-20 15:00:14 +00:00
2006-06-23 08:20:08 +00:00
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowNotCurrentlyConnectedAlert - Function Begin " ) ) ;
2008-02-05 12:00:06 +00:00
// Did BOINC crash on local computer? If so restart it and reconnect.
pDoc - > GetConnectedComputerName ( strConnectedCompter ) ;
if ( pDoc - > IsComputerNameLocal ( strConnectedCompter ) ) {
if ( pDoc - > m_pClientManager - > AutoRestart ( ) ) {
boinc_sleep ( 0.5 ) ; // Allow time for Client to restart
if ( pDoc - > m_pClientManager - > IsBOINCCoreRunning ( ) ) {
pDoc - > Reconnect ( ) ;
return ;
}
}
}
2006-06-23 08:20:08 +00:00
// %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogTitle . Printf (
_ ( " %s - Connection Status " ) ,
2006-10-20 15:00:14 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( )
2006-06-23 08:20:08 +00:00
) ;
// 1st %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
// 2nd %s is the project name
// i.e. 'BOINC', 'GridRepublic'
// 3nd %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage . Printf (
2008-07-08 20:05:07 +00:00
_ ( " %s is not currently connected to a %s client. \n Please use the 'Advanced \\ Select Computer...' menu option to connect up to a %s client. \n To connect up to your local computer please use 'localhost' as the host name. " ) ,
2006-10-20 15:00:14 +00:00
pSkinAdvanced - > GetApplicationName ( ) . c_str ( ) ,
2007-08-16 18:53:42 +00:00
pSkinAdvanced - > GetApplicationShortName ( ) . c_str ( ) ,
pSkinAdvanced - > GetApplicationShortName ( ) . c_str ( )
2006-06-23 08:20:08 +00:00
) ;
ShowAlert (
strDialogTitle ,
strDialogMessage ,
wxOK | wxICON_ERROR
) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::ShowNotCurrentlyConnectedAlert - Function End " ) ) ;
}
2006-12-29 16:35:33 +00:00
void CBOINCBaseFrame : : StartTimers ( ) {
wxASSERT ( m_pAlertPollTimer ) ;
2008-09-19 06:50:25 +00:00
wxASSERT ( m_pPeriodicRPCTimer ) ;
wxASSERT ( m_pDocumentPollTimer ) ;
2006-12-29 16:35:33 +00:00
m_pAlertPollTimer - > Start ( ) ;
2008-09-19 06:50:25 +00:00
m_pPeriodicRPCTimer - > Start ( ) ;
m_pDocumentPollTimer - > Start ( ) ;
2006-12-29 16:35:33 +00:00
}
void CBOINCBaseFrame : : StopTimers ( ) {
wxASSERT ( m_pAlertPollTimer ) ;
2008-09-19 06:50:25 +00:00
wxASSERT ( m_pPeriodicRPCTimer ) ;
wxASSERT ( m_pDocumentPollTimer ) ;
2006-12-29 16:35:33 +00:00
m_pAlertPollTimer - > Stop ( ) ;
2008-09-19 06:50:25 +00:00
m_pPeriodicRPCTimer - > Stop ( ) ;
m_pDocumentPollTimer - > Stop ( ) ;
2006-12-29 16:35:33 +00:00
}
2006-06-23 08:20:08 +00:00
void CBOINCBaseFrame : : UpdateStatusText ( const wxChar * szStatus ) {
CFrameEvent event ( wxEVT_FRAME_UPDATESTATUS , this , szStatus ) ;
ProcessEvent ( event ) ;
}
void CBOINCBaseFrame : : ShowAlert ( const wxString title , const wxString message , const int style , const bool notification_only , const FrameAlertEventType alert_event_type ) {
CFrameAlertEvent event ( wxEVT_FRAME_ALERT , this , title , message , style , notification_only , alert_event_type ) ;
AddPendingEvent ( event ) ;
}
void CBOINCBaseFrame : : ExecuteBrowserLink ( const wxString & strLink ) {
wxHyperLink : : ExecuteLink ( strLink ) ;
}
2006-06-23 21:49:50 +00:00
bool CBOINCBaseFrame : : SaveState ( ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::SaveState - Function Begin " ) ) ;
wxString strBaseConfigLocation = wxString ( wxT ( " / " ) ) ;
wxConfigBase * pConfig = wxConfigBase : : Get ( FALSE ) ;
wxString strConfigLocation ;
wxString strPreviousLocation ;
wxString strBuffer ;
int iIndex ;
int iItemCount ;
wxASSERT ( pConfig ) ;
// An odd case happens every once and awhile where wxWidgets looses
// the pointer to the config object, or it is cleaned up before
// the window has finished it's cleanup duty. If we detect a NULL
// pointer, return false.
if ( ! pConfig ) return false ;
//
// Save Frame State
//
pConfig - > SetPath ( strBaseConfigLocation ) ;
pConfig - > Write ( wxT ( " Language " ) , m_iSelectedLanguage ) ;
pConfig - > Write ( wxT ( " ReminderFrequency " ) , m_iReminderFrequency ) ;
pConfig - > Write ( wxT ( " NetworkDialupConnectionName " ) , m_strNetworkDialupConnectionName ) ;
//
// Save Computer MRU list
//
strPreviousLocation = pConfig - > GetPath ( ) ;
strConfigLocation = strPreviousLocation + wxT ( " ComputerMRU " ) ;
pConfig - > SetPath ( strConfigLocation ) ;
2006-07-21 08:23:26 +00:00
iItemCount = ( int ) m_aSelectedComputerMRU . GetCount ( ) - 1 ;
2006-06-23 21:49:50 +00:00
for ( iIndex = 0 ; iIndex < = iItemCount ; iIndex + + ) {
strBuffer . Printf ( wxT ( " %d " ) , iIndex ) ;
pConfig - > Write (
strBuffer ,
m_aSelectedComputerMRU . Item ( iIndex )
) ;
}
pConfig - > SetPath ( strPreviousLocation ) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::SaveState - Function End " ) ) ;
return true ;
}
bool CBOINCBaseFrame : : RestoreState ( ) {
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::RestoreState - Function Begin " ) ) ;
wxString strBaseConfigLocation = wxString ( wxT ( " / " ) ) ;
wxConfigBase * pConfig = wxConfigBase : : Get ( FALSE ) ;
wxString strConfigLocation ;
wxString strPreviousLocation ;
wxString strBuffer ;
wxString strValue ;
long iIndex ;
bool bKeepEnumerating = false ;
wxASSERT ( pConfig ) ;
// An odd case happens every once and awhile where wxWidgets looses
// the pointer to the config object, or it is cleaned up before
// the window has finished it's cleanup duty. If we detect a NULL
// pointer, return false.
if ( ! pConfig ) return false ;
//
// Restore Frame State
//
pConfig - > SetPath ( strBaseConfigLocation ) ;
pConfig - > Read ( wxT ( " Language " ) , & m_iSelectedLanguage , 0L ) ;
pConfig - > Read ( wxT ( " ReminderFrequency " ) , & m_iReminderFrequency , 60L ) ;
pConfig - > Read ( wxT ( " NetworkDialupConnectionName " ) , & m_strNetworkDialupConnectionName , wxEmptyString ) ;
//
// Restore Computer MRU list
//
strPreviousLocation = pConfig - > GetPath ( ) ;
strConfigLocation = strPreviousLocation + wxT ( " ComputerMRU " ) ;
pConfig - > SetPath ( strConfigLocation ) ;
m_aSelectedComputerMRU . Clear ( ) ;
bKeepEnumerating = pConfig - > GetFirstEntry ( strBuffer , iIndex ) ;
while ( bKeepEnumerating ) {
pConfig - > Read ( strBuffer , & strValue ) ;
m_aSelectedComputerMRU . Add ( strValue ) ;
bKeepEnumerating = pConfig - > GetNextEntry ( strBuffer , iIndex ) ;
}
pConfig - > SetPath ( strPreviousLocation ) ;
wxLogTrace ( wxT ( " Function Start/End " ) , wxT ( " CBOINCBaseFrame::RestoreState - Function End " ) ) ;
return true ;
}
2008-10-30 09:14:33 +00:00
- client: include precompiled header in rr_sim.cpp so memory
leak detection will work.
- MGR: Have the BaseFrame call a function to determine if the
selection list should be saved instead of traversing
the application pointer. Each view just overrides the function
returning a true/false value. We don't have to worry about null
pointers and the like.
- MGR: BOINCGUIApp should never need to know how either the views
work or the document. Move the code that determines which
RPCs should be fired into each of the views. Have the document
look for it there.
- MGR: Reduce duplicate code for hiding and showing an application
- MGR: Move some Windows and Mac specific code into functions
and streamline the application startup and shutdown rountines.
- MGR: Move the event processing that was in BOINCGUIApp into the
BaseFrame.
- MGR: General cleanup.
- MGR: Doxygen comments.
- MGR: Cleanup some warnings.
client/
rr_sim.cpp
clientgui/
AdvancedFrame.cpp, .h
AsyncRPC.cpp, .h
BOINCBaseFrame.cpp, .h
BOINCBaseView.cpp, .h
BOINCClientManager.cpp
BOINCGUIApp.cpp, .h
BOINCTaskBar.cpp
MainDocument.cpp, .h
sg_BoincSimpleGUI.cpp, .h
ViewProjects.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
WelcomePage.cpp
win_build/installerv2/
BOINC.ism
BOINCx64.ism
win_build/
sim.vcproj
svn path=/trunk/boinc/; revision=16357
2008-10-29 22:44:55 +00:00
bool CBOINCBaseFrame : : Show ( bool bShow ) {
if ( bShow ) {
wxGetApp ( ) . ShowApplication ( true ) ;
2006-10-30 04:07:41 +00:00
} else {
- client: include precompiled header in rr_sim.cpp so memory
leak detection will work.
- MGR: Have the BaseFrame call a function to determine if the
selection list should be saved instead of traversing
the application pointer. Each view just overrides the function
returning a true/false value. We don't have to worry about null
pointers and the like.
- MGR: BOINCGUIApp should never need to know how either the views
work or the document. Move the code that determines which
RPCs should be fired into each of the views. Have the document
look for it there.
- MGR: Reduce duplicate code for hiding and showing an application
- MGR: Move some Windows and Mac specific code into functions
and streamline the application startup and shutdown rountines.
- MGR: Move the event processing that was in BOINCGUIApp into the
BaseFrame.
- MGR: General cleanup.
- MGR: Doxygen comments.
- MGR: Cleanup some warnings.
client/
rr_sim.cpp
clientgui/
AdvancedFrame.cpp, .h
AsyncRPC.cpp, .h
BOINCBaseFrame.cpp, .h
BOINCBaseView.cpp, .h
BOINCClientManager.cpp
BOINCGUIApp.cpp, .h
BOINCTaskBar.cpp
MainDocument.cpp, .h
sg_BoincSimpleGUI.cpp, .h
ViewProjects.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
WelcomePage.cpp
win_build/installerv2/
BOINC.ism
BOINCx64.ism
win_build/
sim.vcproj
svn path=/trunk/boinc/; revision=16357
2008-10-29 22:44:55 +00:00
if ( this = = wxGetApp ( ) . GetFrame ( ) ) {
if ( wxGetApp ( ) . IsApplicationVisible ( ) ) {
wxGetApp ( ) . ShowApplication ( false ) ;
}
}
2006-10-30 04:07:41 +00:00
}
2008-10-30 09:14:33 +00:00
return wxFrame : : Show ( bShow ) ;
2006-10-30 04:07:41 +00:00
}
- client: include precompiled header in rr_sim.cpp so memory
leak detection will work.
- MGR: Have the BaseFrame call a function to determine if the
selection list should be saved instead of traversing
the application pointer. Each view just overrides the function
returning a true/false value. We don't have to worry about null
pointers and the like.
- MGR: BOINCGUIApp should never need to know how either the views
work or the document. Move the code that determines which
RPCs should be fired into each of the views. Have the document
look for it there.
- MGR: Reduce duplicate code for hiding and showing an application
- MGR: Move some Windows and Mac specific code into functions
and streamline the application startup and shutdown rountines.
- MGR: Move the event processing that was in BOINCGUIApp into the
BaseFrame.
- MGR: General cleanup.
- MGR: Doxygen comments.
- MGR: Cleanup some warnings.
client/
rr_sim.cpp
clientgui/
AdvancedFrame.cpp, .h
AsyncRPC.cpp, .h
BOINCBaseFrame.cpp, .h
BOINCBaseView.cpp, .h
BOINCClientManager.cpp
BOINCGUIApp.cpp, .h
BOINCTaskBar.cpp
MainDocument.cpp, .h
sg_BoincSimpleGUI.cpp, .h
ViewProjects.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
WelcomePage.cpp
win_build/installerv2/
BOINC.ism
BOINCx64.ism
win_build/
sim.vcproj
svn path=/trunk/boinc/; revision=16357
2008-10-29 22:44:55 +00:00
2006-10-30 04:07:41 +00:00
- client: include precompiled header in rr_sim.cpp so memory
leak detection will work.
- MGR: Have the BaseFrame call a function to determine if the
selection list should be saved instead of traversing
the application pointer. Each view just overrides the function
returning a true/false value. We don't have to worry about null
pointers and the like.
- MGR: BOINCGUIApp should never need to know how either the views
work or the document. Move the code that determines which
RPCs should be fired into each of the views. Have the document
look for it there.
- MGR: Reduce duplicate code for hiding and showing an application
- MGR: Move some Windows and Mac specific code into functions
and streamline the application startup and shutdown rountines.
- MGR: Move the event processing that was in BOINCGUIApp into the
BaseFrame.
- MGR: General cleanup.
- MGR: Doxygen comments.
- MGR: Cleanup some warnings.
client/
rr_sim.cpp
clientgui/
AdvancedFrame.cpp, .h
AsyncRPC.cpp, .h
BOINCBaseFrame.cpp, .h
BOINCBaseView.cpp, .h
BOINCClientManager.cpp
BOINCGUIApp.cpp, .h
BOINCTaskBar.cpp
MainDocument.cpp, .h
sg_BoincSimpleGUI.cpp, .h
ViewProjects.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
WelcomePage.cpp
win_build/installerv2/
BOINC.ism
BOINCx64.ism
win_build/
sim.vcproj
svn path=/trunk/boinc/; revision=16357
2008-10-29 22:44:55 +00:00
int CBOINCBaseFrame : : _GetCurrentViewPage ( ) {
wxASSERT ( false ) ;
return 0 ;
}
2006-10-30 04:07:41 +00:00
2006-06-23 08:20:08 +00:00
void CFrameAlertEvent : : ProcessResponse ( const int response ) const {
CMainDocument * pDoc = wxGetApp ( ) . GetDocument ( ) ;
wxASSERT ( pDoc ) ;
wxASSERT ( wxDynamicCast ( pDoc , CMainDocument ) ) ;
if ( ( AlertProcessResponse = = m_alert_event_type ) & & ( wxYES = = response ) ) {
pDoc - > Reconnect ( ) ;
}
}
const char * BOINC_RCSID_0a1bd38a5b = " $Id$ " ;