void CSimpleProjectCommandPopupButton::OnProjectDetach(wxCommandEvent& WXUNUSED(event)) { int projectIndex; wxInt32 iAnswer = 0; wxString strMessage = wxEmptyString; CMainDocument* pDoc = wxGetApp().GetDocument(); wxASSERT(pDoc); wxASSERT(wxDynamicCast(pDoc, CMainDocument)); if (!pDoc->IsUserAuthorized()) return; ProjectSelectionData* selData = ((CSimpleProjectPanel*)GetParent())->GetProjectSelectionData(); if (selData == NULL) return; char* ctrl_url = selData->project_url; PROJECT* project = FindProjectIndexFromURL(ctrl_url, &projectIndex); if (!project) return; wxString projname(project->project_name.c_str(), wxConvUTF8); strMessage.Printf( _("Are you sure you want to remove project '%s'?"), projname.c_str() ); iAnswer = wxGetApp().SafeMessageBox( strMessage, _("Remove Project"), wxYES_NO | wxICON_QUESTION, this ); if (wxYES == iAnswer) { pDoc->ProjectDetach(projectIndex); } }
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); } } } }