// Check to see if a project update is scheduled or in progress bool ClientStateIndicator::ProjectUpdateScheduled() { CMainDocument* pDoc = wxGetApp().GetDocument(); PROJECT* project; int prjCount = pDoc->GetSimpleProjectCount(); for(int i=0; i<prjCount; i++) { project = pDoc->state.projects[i]; if ( project->sched_rpc_pending || project->master_url_fetch_pending || project->scheduler_rpc_in_progress ) { return true; } } return false; }
// Check to see if the # of projects void CProjectsComponent::UpdateProjectArray() { CMainDocument* pDoc = wxGetApp().GetDocument(); if ( pDoc->IsConnected() ) { int m_projCnt = pDoc->GetSimpleProjectCount(); // If a new project has been added, figure out which one and then add it; if ( m_projCnt > (int) m_statProjects.size() ) { PROJECT* project; for(int i=0; i < m_projCnt; i++) { project = pDoc->state.projects[i]; bool found = false; std::vector<StatImageLoader*>::iterator j; for(j=m_statProjects.begin(); j < m_statProjects.end(); j++) { if (!strcmp(project->master_url, (*j)->project_url)) { found = true; break; } } if ( !found ) { StatImageLoader *i_statW = new StatImageLoader(this, project->master_url); i_statW->LoadImage(); m_statProjects.push_back(i_statW); // recurse in case there is more then one change UpdateProjectArray(); } } } else if ( m_projCnt < (int) m_statProjects.size() ) { PROJECT* project = NULL; std::vector<StatImageLoader*>::iterator i; for(i=m_statProjects.begin(); i < m_statProjects.end(); i++) { project = pDoc->state.lookup_project((*i)->project_url); if ( project == NULL ) { (*i)->Show(false); delete (*i); m_statProjects.erase(i); break; } } } else { return; } UpdateDisplayedProjects(); } else { std::vector<StatImageLoader*>::iterator i; for(i=m_statProjects.end(); i >= m_statProjects.begin(); i--) { (*i)->Show(false); delete (*i); } m_statProjects.clear(); } }
PROJECT* CSimpleProjectCommandPopupButton::FindProjectIndexFromURL(char *project_url, int *index) { CMainDocument* pDoc = wxGetApp().GetDocument(); wxASSERT(pDoc); wxASSERT(wxDynamicCast(pDoc, CMainDocument)); int prjCount = pDoc->GetSimpleProjectCount(); for(int i = 0; i < prjCount; i++) { PROJECT* project = pDoc->project(i); if(!strcmp(project->master_url, project_url)) { *index = i; return project; } } *index = -1; return NULL; }
void CSimpleProjectPanel::UpdateProjectList() { CMainDocument* pDoc = wxGetApp().GetDocument(); ProjectSelectionData* selData; PROJECT* project; char* ctrl_url; int i, j, oldProjectSelection, newProjectSelection; if ( pDoc->IsConnected() ) { int projCnt = pDoc->GetSimpleProjectCount(); int ctrlCount = m_ProjectSelectionCtrl->GetCount(); oldProjectSelection = m_ProjectSelectionCtrl->GetSelection(); // If a new project has been added, figure out which one for(i=0; i<projCnt; i++) { project = pDoc->state.projects[i]; bool found = false; for(j=0; j<ctrlCount; j++) { ctrl_url = ((ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j))->project_url; if (!strcmp(project->master_url, ctrl_url)) { found = true; break; } } // if it isn't currently in the list then we have a new one! lets add it if ( !found ) { wxString projname(project->project_name.c_str(), wxConvUTF8); #if SORTPROJECTLIST int alphaOrder; for(j = 0; j < ctrlCount; ++j) { alphaOrder = (m_ProjectSelectionCtrl->GetString(j)).CmpNoCase(projname); if (alphaOrder > 0) { break; // Insert the new item here (sorted by item label) } } #endif selData = new ProjectSelectionData; strncpy(selData->project_url, project->master_url, sizeof(selData->project_url)); selData->project_files_downloaded_time = project->project_files_downloaded_time; wxBitmap* projectBM = GetProjectSpecificBitmap(selData->project_url); #if SORTPROJECTLIST if (j < ctrlCount) { m_ProjectSelectionCtrl->Insert(projname, *projectBM, j, (void*)selData); if (j <= oldProjectSelection) { ++oldProjectSelection; m_ProjectSelectionCtrl->SetSelection(oldProjectSelection); } } else #endif { m_ProjectSelectionCtrl->Append(projname, *projectBM, (void*)selData); } ctrlCount = m_ProjectSelectionCtrl->GetCount(); } } newProjectSelection = oldProjectSelection; if ( projCnt < ctrlCount ) { project = NULL; // Check items in descending order so deletion won't change indexes of items yet to be checked for(j=ctrlCount-1; j>=0; --j) { ctrl_url = ((ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j))->project_url; project = pDoc->state.lookup_project(ctrl_url); if ( project == NULL ) { selData = (ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j); delete selData; // Indicate to Delete() we have cleaned up the Selection Data m_ProjectSelectionCtrl->SetClientData(j, NULL); m_ProjectSelectionCtrl->Delete(j); if (j == oldProjectSelection) { int newCount = m_ProjectSelectionCtrl->GetCount(); if (newProjectSelection < newCount) { // Select the next item if one exists m_ProjectSelectionCtrl->SetSelection(newProjectSelection); } else if (newCount > 0) { // Select the previous item if one exists newProjectSelection = newCount-1; m_ProjectSelectionCtrl->SetSelection(newProjectSelection); } else { newProjectSelection = -1; m_ProjectSelectionCtrl->SetSelection(wxNOT_FOUND); } } } } } // Check to see if we need to reload the project icon ctrlCount = m_ProjectSelectionCtrl->GetCount(); for(j=0; j<ctrlCount; j++) { selData = (ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j); ctrl_url = selData->project_url; project = pDoc->state.lookup_project(ctrl_url); if ( project->project_files_downloaded_time > selData->project_files_downloaded_time ) { wxBitmap* projectBM = GetProjectSpecificBitmap(ctrl_url); selData->project_files_downloaded_time = project->project_files_downloaded_time; m_ProjectSelectionCtrl->SetItemBitmap(j, *projectBM); } } } }
void CSimpleProjectPanel::UpdateProjectList() { CMainDocument* pDoc = wxGetApp().GetDocument(); ProjectSelectionData* selData; PROJECT* project; char* ctrl_url; int i, j; if ( pDoc->IsConnected() ) { int projCnt = pDoc->GetSimpleProjectCount(); int ctrlCount = m_ProjectSelectionCtrl->GetCount(); // If a new project has been added, figure out which one and then add it; while ( projCnt > ctrlCount ) { for(i=0; i<projCnt; i++) { project = pDoc->state.projects[i]; bool found = false; for(j=0; j<ctrlCount; j++) { ctrl_url = ((ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j))->project_url; if (!strcmp(project->master_url, ctrl_url)) { found = true; break; } } if ( !found ) { selData = new ProjectSelectionData; strncpy(selData->project_url, project->master_url, sizeof(selData->project_url)); selData->project_files_downloaded_time = 0.0; wxBitmap* projectBM = GetProjectSpecificBitmap(selData->project_url); wxString projname(project->project_name.c_str(), wxConvUTF8); m_ProjectSelectionCtrl->Append(projname, *projectBM, (void*)selData); ctrlCount = m_ProjectSelectionCtrl->GetCount(); } } } if ( projCnt < ctrlCount ) { project = NULL; // Check items in descending order so deletion won't change indexes of items yet to be checked for(j=ctrlCount-1; j>=0; --j) { char* ctrl_url = ((ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j))->project_url; project = pDoc->state.lookup_project(ctrl_url); if ( project == NULL ) { selData = (ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j); delete selData; m_ProjectSelectionCtrl->Delete(j); } } } // Check to see if we need to reload the project icon ctrlCount = m_ProjectSelectionCtrl->GetCount(); for(j=0; j<ctrlCount; j++) { selData = (ProjectSelectionData*)m_ProjectSelectionCtrl->GetClientData(j); ctrl_url = selData->project_url; project = pDoc->state.lookup_project(ctrl_url); if ( project->project_files_downloaded_time > selData->project_files_downloaded_time ) { wxBitmap* projectBM = GetProjectSpecificBitmap(ctrl_url); selData->project_files_downloaded_time = project->project_files_downloaded_time; m_ProjectSelectionCtrl->SetItemBitmap(j, *projectBM); } } } }
void CSimpleFrame::OnConnect(CFrameEvent& WXUNUSED(event)) { wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnConnect - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); CWizardAttach* pWizard = NULL; wxString strComputer = wxEmptyString; wxString strName = wxEmptyString; wxString strURL = wxEmptyString; wxString strTeamName = wxEmptyString; std::string strProjectName; std::string strProjectURL; std::string strProjectAuthenticator; std::string strProjectInstitution; std::string strProjectDescription; std::string strProjectKnown; bool bCachedCredentials = false; ACCT_MGR_INFO ami; PROJECT_INIT_STATUS pis; CC_STATUS status; int wasShown = 0; int wasVisible = 0; wxASSERT(pDoc); wxASSERT(wxDynamicCast(pDoc, CMainDocument)); pDoc->ForceCacheUpdate(); pDoc->GetCoreClientStatus(status, true); // If we are connected to the localhost, run a really quick screensaver // test to trigger a firewall popup. pDoc->GetConnectedComputerName(strComputer); if (pDoc->IsComputerNameLocal(strComputer)) { wxGetApp().StartBOINCScreensaverTest(); wxGetApp().StartBOINCDefaultScreensaverTest(); } pDoc->rpc.get_project_init_status(pis); pDoc->rpc.acct_mgr_info(ami); if (detect_simple_account_credentials( strProjectName, strProjectURL, strProjectAuthenticator, strProjectInstitution, strProjectDescription, strProjectKnown ) ){ if (!pDoc->project((char*)strProjectURL.c_str())) { wasShown = IsShown(); Show(); wasVisible = wxGetApp().IsApplicationVisible(); if (!wasVisible) { wxGetApp().ShowApplication(true); } pWizard = new CWizardAttach(this); pWizard->RunSimpleProjectAttach( wxURI::Unescape(strProjectName), wxURI::Unescape(strProjectURL), wxURI::Unescape(strProjectAuthenticator), wxURI::Unescape(strProjectInstitution), wxURI::Unescape(strProjectDescription), wxURI::Unescape(strProjectKnown) ); } } else if (ami.acct_mgr_url.size() && ami.have_credentials) { // Fall through // // There isn't a need to bring up the attach wizard, the account manager will // take care of ataching to projects when it completes the RPCs // } else if (ami.acct_mgr_url.size() && !ami.have_credentials) { wasShown = IsShown(); Show(); wasVisible = wxGetApp().IsApplicationVisible(); if (!wasVisible) { wxGetApp().ShowApplication(true); } pWizard = new CWizardAttach(this); if (pWizard->SyncToAccountManager()) { // _GRIDREPUBLIC, _PROGRESSTHRUPROCESSORS and _CHARITYENGINE // are defined for those branded builds on Windows only #if defined(_GRIDREPUBLIC) || defined(_PROGRESSTHRUPROCESSORS) || defined(_CHARITYENGINE) || defined(__WXMAC__) #ifdef __WXMAC__ // For GridRepublic, Charity Engine or ProgressThruProcessors, // the Mac installer put a branding file in our data directory long iBrandID = 0; // 0 is unbranded (default) BOINC FILE *f = boinc_fopen("/Library/Application Support/BOINC Data/Branding", "r"); if (f) { fscanf(f, "BrandId=%ld\n", &iBrandID); fclose(f); } if ((iBrandID > 0) && (iBrandID < 4)) #endif { // If successful, hide the main window if we showed it if (!wasVisible) { wxGetApp().ShowApplication(false); } #ifndef __WXMAC__ // See comment in CBOINCGUIApp::OnFinishInit() if (!wasShown) { Hide(); } #endif } #endif } } else if ((pis.url.size() || (0 >= pDoc->GetSimpleProjectCount())) && !status.disallow_attach) { Show(); wxGetApp().ShowApplication(true); strURL = wxString(pis.url.c_str(), wxConvUTF8); bCachedCredentials = pis.url.length() && pis.has_account_key; pWizard = new CWizardAttach(this); pWizard->Run(strURL, bCachedCredentials); } if (pWizard) { pWizard->Destroy(); m_pBackgroundPanel->UpdateProjectView(); } wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnConnect - Function End")); }