112
191
void CProjectInfoPage::CreateControls()
114
193
////@begin CProjectInfoPage content construction
195
#define LISTBOXWIDTH 225
196
#define DESCRIPTIONSWIDTH 350
198
#define LISTBOXWIDTH 150
199
#define DESCRIPTIONSWIDTH 200
115
202
CProjectInfoPage* itemWizardPage23 = this;
117
204
wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL);
118
205
itemWizardPage23->SetSizer(itemBoxSizer24);
120
207
m_pTitleStaticCtrl = new wxStaticText;
121
m_pTitleStaticCtrl->Create( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
208
m_pTitleStaticCtrl->Create( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
122
209
m_pTitleStaticCtrl->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, FALSE, _T("Verdana")));
123
210
itemBoxSizer24->Add(m_pTitleStaticCtrl, 0, wxALIGN_LEFT|wxALL, 5);
125
212
m_pDescriptionStaticCtrl = new wxStaticText;
126
m_pDescriptionStaticCtrl->Create( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
213
m_pDescriptionStaticCtrl->Create( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
127
214
itemBoxSizer24->Add(m_pDescriptionStaticCtrl, 0, wxALIGN_LEFT|wxALL, 5);
129
wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(2, 1, 0, 0);
130
itemFlexGridSizer3->AddGrowableRow(0);
131
itemFlexGridSizer3->AddGrowableCol(0);
132
itemBoxSizer24->Add(itemFlexGridSizer3, 1, wxGROW|wxALL, 5);
134
m_pProjectListCtrl = new CProjectListCtrl;
135
m_pProjectListCtrl->Create( itemWizardPage23 );
136
itemFlexGridSizer3->Add(m_pProjectListCtrl, 0, wxGROW|wxRIGHT, 10);
138
wxFlexGridSizer* itemFlexGridSizer11 = new wxFlexGridSizer(2, 1, 0, 0);
216
itemBoxSizer24->Add(5, 5, 0, wxALIGN_LEFT|wxALL, 5);
218
wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(1, 1, 0, 0);
219
itemFlexGridSizer4->AddGrowableRow(0);
220
itemFlexGridSizer4->AddGrowableCol(0);
221
itemBoxSizer24->Add(itemFlexGridSizer4, 0, wxGROW|wxALL, 0);
223
wxFlexGridSizer* itemFlexGridSizer6 = new wxFlexGridSizer(0, 2, 0, 0);
224
itemFlexGridSizer6->AddGrowableRow(1);
225
itemFlexGridSizer6->AddGrowableCol(1);
226
itemFlexGridSizer4->Add(itemFlexGridSizer6, 0, wxGROW|wxGROW|wxALL, 0);
228
wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxVERTICAL);
229
itemFlexGridSizer6->Add(itemBoxSizer7, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
231
m_pProjectCategoriesStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
232
itemBoxSizer7->Add(m_pProjectCategoriesStaticCtrl, 0, wxALIGN_LEFT|wxRIGHT|wxBOTTOM, 5);
234
wxArrayString m_pProjectCategoriesCtrlStrings;
235
m_pProjectCategoriesCtrl = new wxComboBox( itemWizardPage23, ID_CATEGORIES, wxT(""), wxDefaultPosition, wxSize(LISTBOXWIDTH, -1), m_pProjectCategoriesCtrlStrings, wxCB_READONLY|wxCB_SORT );
236
itemBoxSizer7->Add(m_pProjectCategoriesCtrl, 0, wxGROW|wxLEFT|wxRIGHT, 5);
238
m_pProjectsStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
239
itemBoxSizer7->Add(m_pProjectsStaticCtrl, 0, wxALIGN_LEFT|wxTOP|wxRIGHT|wxBOTTOM, 5);
241
wxFlexGridSizer* itemFlexGridSizer11 = new wxFlexGridSizer(0, 1, 0, 0);
139
242
itemFlexGridSizer11->AddGrowableRow(0);
140
243
itemFlexGridSizer11->AddGrowableCol(0);
141
itemBoxSizer24->Add(itemFlexGridSizer11, 0, wxGROW|wxALL, 0);
143
wxBoxSizer* itemBoxSizer22 = new wxBoxSizer(wxVERTICAL);
144
itemFlexGridSizer11->Add(itemBoxSizer22, 0, wxGROW|wxALL, 0);
146
wxFlexGridSizer* itemFlexGridSizer14 = new wxFlexGridSizer(1, 2, 0, 0);
147
itemFlexGridSizer14->AddGrowableCol(1);
148
itemBoxSizer24->Add(itemFlexGridSizer14, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxRIGHT, 10);
150
m_pProjectUrlStaticCtrl = new wxStaticText;
151
m_pProjectUrlStaticCtrl->Create( itemWizardPage23, ID_PROJECTURLSTATICCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
152
itemFlexGridSizer14->Add(m_pProjectUrlStaticCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
154
m_pProjectUrlCtrl = new wxTextCtrl;
155
m_pProjectUrlCtrl->Create( itemWizardPage23, ID_PROJECTURLCTRL, wxEmptyString, wxDefaultPosition, wxSize(200, -1), 0 );
156
itemFlexGridSizer14->Add(m_pProjectUrlCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
244
itemBoxSizer7->Add(itemFlexGridSizer11, 0, wxGROW|wxALL, 0);
246
wxArrayString m_pProjectsCtrlStrings;
247
m_pProjectsCtrl = new wxListBox( itemWizardPage23, ID_PROJECTS, wxDefaultPosition, wxSize(LISTBOXWIDTH, 175), m_pProjectsCtrlStrings, wxLB_SINGLE|wxLB_SORT );
248
itemFlexGridSizer11->Add(m_pProjectsCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 0);
250
m_pProjectDetailsStaticCtrl = new wxStaticBox(itemWizardPage23, wxID_ANY, wxT(""));
251
wxStaticBoxSizer* itemStaticBoxSizer13 = new wxStaticBoxSizer(m_pProjectDetailsStaticCtrl, wxVERTICAL);
252
itemFlexGridSizer6->Add(itemStaticBoxSizer13, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
254
m_pProjectDetailsDescriptionCtrl = new wxHtmlWindow( itemWizardPage23, ID_PROJECTDESCRIPTION, wxDefaultPosition, wxSize(DESCRIPTIONSWIDTH, 100), wxHW_SCROLLBAR_AUTO|wxHW_NO_SELECTION );
255
itemStaticBoxSizer13->Add(m_pProjectDetailsDescriptionCtrl, 0, wxGROW|wxLEFT|wxTOP|wxBOTTOM, 5);
257
wxFlexGridSizer* itemFlexGridSizer16 = new wxFlexGridSizer(0, 2, 0, 0);
258
itemFlexGridSizer16->AddGrowableCol(1);
259
itemStaticBoxSizer13->Add(itemFlexGridSizer16, 0, wxGROW|wxALL, 0);
261
m_pProjectDetailsResearchAreaStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
262
itemFlexGridSizer16->Add(m_pProjectDetailsResearchAreaStaticCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxBOTTOM, 2);
264
m_pProjectDetailsResearchAreaCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
265
itemFlexGridSizer16->Add(m_pProjectDetailsResearchAreaCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
267
wxFlexGridSizer* itemFlexGridSizer19 = new wxFlexGridSizer(0, 2, 0, 0);
268
itemFlexGridSizer19->AddGrowableCol(1);
269
itemStaticBoxSizer13->Add(itemFlexGridSizer19, 0, wxGROW|wxALL, 0);
271
m_pProjectDetailsOrganizationStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
272
itemFlexGridSizer19->Add(m_pProjectDetailsOrganizationStaticCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxBOTTOM, 2);
274
m_pProjectDetailsOrganizationCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
275
itemFlexGridSizer19->Add(m_pProjectDetailsOrganizationCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
277
wxFlexGridSizer* itemFlexGridSizer20 = new wxFlexGridSizer(0, 2, 0, 0);
278
itemFlexGridSizer20->AddGrowableCol(1);
279
itemStaticBoxSizer13->Add(itemFlexGridSizer20, 0, wxGROW|wxALL, 0);
281
m_pProjectDetailsURLStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
282
itemFlexGridSizer20->Add(m_pProjectDetailsURLStaticCtrl, 0, wxALIGN_LEFT|wxRIGHT|wxBOTTOM, 2);
284
m_pProjectDetailsURLCtrl = new wxHyperlinkCtrl( itemWizardPage23, wxID_STATIC, wxT("BOINC"), wxT("http://boinc.berkeley.edu/"), wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxHL_CONTEXTMENU|wxHL_ALIGN_LEFT);
285
itemFlexGridSizer20->Add(m_pProjectDetailsURLCtrl, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxBOTTOM, 5);
287
wxFlexGridSizer* itemFlexGridSizer24 = new wxFlexGridSizer(2, 1, 0, 0);
288
itemFlexGridSizer24->AddGrowableRow(1);
289
itemFlexGridSizer24->AddGrowableCol(0);
290
itemStaticBoxSizer13->Add(itemFlexGridSizer24, 0, wxGROW|wxALL, 0);
292
m_pProjectDetailsSupportedPlatformsStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
293
itemFlexGridSizer24->Add(m_pProjectDetailsSupportedPlatformsStaticCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxBOTTOM, 5);
295
wxBoxSizer* itemBoxSizer26 = new wxBoxSizer(wxHORIZONTAL);
296
itemFlexGridSizer24->Add(itemBoxSizer26, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 0);
298
m_pProjectDetailsSupportedPlatformWindowsCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("windowsicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
299
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformWindowsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
301
m_pProjectDetailsSupportedPlatformMacCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("macosicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
302
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformMacCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
304
m_pProjectDetailsSupportedPlatformLinuxCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("linuxicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
305
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformLinuxCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
307
m_pProjectDetailsSupportedPlatformATICtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("atiicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
308
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformATICtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
310
m_pProjectDetailsSupportedPlatformNvidiaCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("nvidiaicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
311
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformNvidiaCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
313
m_pProjectDetailsSupportedPlatformMultiCoreCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("multicore.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
314
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformMultiCoreCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
316
m_pProjectDetailsSupportedPlatformBlankCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("blankicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
317
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformBlankCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
319
wxFlexGridSizer* itemFlexGridSizer33 = new wxFlexGridSizer(0, 2, 0, 0);
320
itemFlexGridSizer33->AddGrowableCol(1);
321
itemFlexGridSizer4->Add(itemFlexGridSizer33, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 0);
323
m_pProjectURLStaticCtrl = new wxStaticText( itemWizardPage23, ID_PROJECTURLSTATICCTRL, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
324
itemFlexGridSizer33->Add(m_pProjectURLStaticCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
326
m_pProjectURLCtrl = new wxTextCtrl( itemWizardPage23, ID_PROJECTURLCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
327
itemFlexGridSizer33->Add(m_pProjectURLCtrl, 1, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
330
itemFlexGridSizer33->Add(0, 20, 0);
158
333
// Set validators
159
m_pProjectUrlCtrl->SetValidator( CValidateURL( & m_strProjectURL ) );
334
m_pProjectURLCtrl->SetValidator( CValidateURL( & m_strProjectURL ) );
163
HIViewRef listView = (HIViewRef)m_pProjectListCtrl->GetHandle();
164
HIObjectRef theObject = (HIObjectRef)HIViewGetSuperview(listView);
165
HIObjectSetAccessibilityIgnored(theObject, true);
167
336
////@end CProjectInfoPage content construction
438
* wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_CATEGORIES
441
void CProjectInfoPage::OnProjectCategorySelected( wxCommandEvent& WXUNUSED(event) ) {
442
wxLogTrace(wxT("Function Start/End"), wxT("CProjectInfoPage::OnProjectCategorySelected - Function Begin"));
444
wxLogTrace(wxT("Function Status"), wxT("CProjectInfoPage::OnProjectCategorySelected - Clearing list box"));
445
m_pProjectsCtrl->Clear();
447
// Populate the list box with the list of project names that belong to eith the specific
448
// category or all of them.
449
wxLogTrace(wxT("Function Status"), wxT("CProjectInfoPage::OnProjectCategorySelected - Adding desired projects"));
450
for (unsigned int i=0; i<m_Projects.size(); i++) {
451
if ((m_pProjectCategoriesCtrl->GetValue() == _("All")) ||
452
(m_pProjectCategoriesCtrl->GetValue() == m_Projects[i]->m_strGeneralArea)
455
wxT("Function Status"),
456
wxT("CProjectInfoPage::OnProjectCategorySelected - Adding '%s'"),
457
m_Projects[i]->m_strName.c_str()
459
m_pProjectsCtrl->Append(m_Projects[i]->m_strName, m_Projects[i]);
463
// Set the first item to be the selected item and then pop the next event.
464
m_pProjectsCtrl->SetSelection(0);
465
wxCommandEvent evtEvent(wxEVT_COMMAND_LISTBOX_SELECTED, ID_PROJECTS);
466
ProcessEvent(evtEvent);
468
wxLogTrace(wxT("Function Start/End"), wxT("CProjectInfoPage::OnProjectCategorySelected - Function End"));
473
* wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_PROJECTS
476
void CProjectInfoPage::OnProjectSelected( wxCommandEvent& WXUNUSED(event) ) {
477
wxLogTrace(wxT("Function Start/End"), wxT("CProjectInfoPage::OnProjectSelected - Function Begin"));
479
CProjectInfo* pProjectInfo = (CProjectInfo*)m_pProjectsCtrl->GetClientData(m_pProjectsCtrl->GetSelection());
481
wxString strURL = pProjectInfo->m_strURL;
482
EllipseStringIfNeeded(strURL, m_pProjectDetailsURLCtrl);
484
// Populate the project details area
486
wxString desc = wxT("<font size=-1>") + pProjectInfo->m_strDescription + wxT("</font>");
488
wxString desc = pProjectInfo->m_strDescription;
490
m_pProjectDetailsDescriptionCtrl->SetPage(desc);
491
m_pProjectDetailsURLCtrl->SetLabel(strURL);
492
m_pProjectDetailsURLCtrl->SetURL(pProjectInfo->m_strURL);
493
// Set tooltip to full text in case ellipsed
494
m_pProjectDetailsURLCtrl->SetToolTip(pProjectInfo->m_strURL);
496
m_pProjectDetailsSupportedPlatformWindowsCtrl->Hide();
497
m_pProjectDetailsSupportedPlatformMacCtrl->Hide();
498
m_pProjectDetailsSupportedPlatformLinuxCtrl->Hide();
499
m_pProjectDetailsSupportedPlatformATICtrl->Hide();
500
m_pProjectDetailsSupportedPlatformNvidiaCtrl->Hide();
501
m_pProjectDetailsSupportedPlatformMultiCoreCtrl->Hide();
502
if (pProjectInfo->m_bProjectSupportsWindows) m_pProjectDetailsSupportedPlatformWindowsCtrl->Show();
503
if (pProjectInfo->m_bProjectSupportsMac) m_pProjectDetailsSupportedPlatformMacCtrl->Show();
504
if (pProjectInfo->m_bProjectSupportsLinux) m_pProjectDetailsSupportedPlatformLinuxCtrl->Show();
505
if (pProjectInfo->m_bProjectSupportsCAL) m_pProjectDetailsSupportedPlatformATICtrl->Show();
506
if (pProjectInfo->m_bProjectSupportsCUDA) m_pProjectDetailsSupportedPlatformNvidiaCtrl->Show();
507
if (pProjectInfo->m_bProjectSupportsMulticore) m_pProjectDetailsSupportedPlatformMultiCoreCtrl->Show();
509
// Populate non-control data for use in other places of the wizard
510
SetProjectURL( pProjectInfo->m_strURL );
511
SetProjectSupported( pProjectInfo->m_bSupportedPlatformFound );
513
TransferDataToWindow();
516
wxString strResearchArea = pProjectInfo->m_strSpecificArea;
517
EllipseStringIfNeeded(strResearchArea, m_pProjectDetailsResearchAreaCtrl);
518
m_pProjectDetailsResearchAreaCtrl->SetLabel(strResearchArea);
519
// Set tooltip to full text in case ellipsed
520
m_pProjectDetailsResearchAreaCtrl->SetToolTip(pProjectInfo->m_strSpecificArea);
522
wxString strOrganization = pProjectInfo->m_strOrganization;
523
EllipseStringIfNeeded(strOrganization, m_pProjectDetailsOrganizationCtrl);
524
m_pProjectDetailsOrganizationCtrl->SetLabel(strOrganization);
525
// Set tooltip to full text in case ellipsed
526
m_pProjectDetailsOrganizationCtrl->SetToolTip(pProjectInfo->m_strOrganization);
528
wxLogTrace(wxT("Function Start/End"), wxT("CProjectInfoPage::OnProjectSelected - Function End"));
233
533
* wxEVT_WIZARD_PAGE_CHANGED event handler for ID_PROJECTINFOPAGE
237
537
if (event.GetDirection() == false) return;
238
538
wxLogTrace(wxT("Function Start/End"), wxT("CProjectInfoPage::OnPageChanged - Function Begin"));
240
unsigned int i, j, k;
241
bool bSupportedPlatformFound = false;
242
bool bProjectSupportsNvidiaGPU = false;
243
bool bProjectSupportsATIGPU = false;
244
bool bProjectSupportsMulticore = false;
540
CMainDocument* pDoc = wxGetApp().GetDocument();
541
unsigned int i = 0, j = 0, k = 0;
245
542
ALL_PROJECTS_LIST pl;
246
CMainDocument* pDoc = wxGetApp().GetDocument();
543
wxArrayString aClientPlatforms;
544
wxArrayString aProjectPlatforms;
545
wxArrayString aCategories;
546
bool bCategoryFound = false;
547
CProjectInfo* pProjectInfo = NULL;
249
550
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
250
551
wxASSERT(m_pTitleStaticCtrl);
251
552
wxASSERT(m_pDescriptionStaticCtrl);
252
wxASSERT(m_pProjectListCtrl);
253
wxASSERT(m_pProjectUrlStaticCtrl);
254
wxASSERT(m_pProjectUrlCtrl);
553
wxASSERT(m_pProjectCategoriesStaticCtrl);
554
wxASSERT(m_pProjectCategoriesCtrl);
555
wxASSERT(m_pProjectsStaticCtrl);
556
wxASSERT(m_pProjectsCtrl);
557
wxASSERT(m_pProjectDetailsStaticCtrl);
558
wxASSERT(m_pProjectDetailsDescriptionCtrl);
559
wxASSERT(m_pProjectDetailsResearchAreaStaticCtrl);
560
wxASSERT(m_pProjectDetailsResearchAreaCtrl);
561
wxASSERT(m_pProjectDetailsOrganizationStaticCtrl);
562
wxASSERT(m_pProjectDetailsOrganizationStaticCtrl);
563
wxASSERT(m_pProjectDetailsURLStaticCtrl);
564
wxASSERT(m_pProjectDetailsURLCtrl);
565
wxASSERT(m_pProjectDetailsSupportedPlatformsStaticCtrl);
566
wxASSERT(m_pProjectDetailsSupportedPlatformWindowsCtrl);
567
wxASSERT(m_pProjectDetailsSupportedPlatformMacCtrl);
568
wxASSERT(m_pProjectDetailsSupportedPlatformLinuxCtrl);
569
wxASSERT(m_pProjectDetailsSupportedPlatformATICtrl);
570
wxASSERT(m_pProjectDetailsSupportedPlatformNvidiaCtrl);
571
wxASSERT(m_pProjectDetailsSupportedPlatformMultiCoreCtrl);
572
wxASSERT(m_pProjectURLStaticCtrl);
573
wxASSERT(m_pProjectURLCtrl);
256
575
m_pTitleStaticCtrl->SetLabel(
257
576
_("Choose a project")
259
579
m_pDescriptionStaticCtrl->SetLabel(
260
580
_("To choose a project, click its name or type its URL below.")
262
m_pProjectUrlStaticCtrl->SetLabel(
267
// Populate the virtual list control with project information
583
m_pProjectCategoriesStaticCtrl->SetLabel(
587
m_pProjectsStaticCtrl->SetLabel(
591
m_pProjectDetailsStaticCtrl->SetLabel(
595
m_pProjectDetailsResearchAreaStaticCtrl->SetLabel(
599
m_pProjectDetailsOrganizationStaticCtrl->SetLabel(
603
m_pProjectDetailsURLStaticCtrl->SetLabel(
607
m_pProjectDetailsSupportedPlatformsStaticCtrl->SetLabel(
608
_("Supported systems:")
611
m_pProjectURLStaticCtrl->SetLabel(
616
// Populate the ProjectInfo data structure with the list of projects we want to show and
617
// any other activity we need to prep the page.
269
618
if (!m_bProjectListPopulated) {
270
std::vector<std::string> &client_platforms = pDoc->state.platforms;
620
// Get the project list
271
621
pDoc->rpc.get_all_projects_list(pl);
623
// Convert the supported client platforms into something useful
624
for (i=0; i<pDoc->state.platforms.size(); i++) {
625
aClientPlatforms.Add(wxString(pDoc->state.platforms[i].c_str(), wxConvUTF8));
628
// Iterate through the project list and add them to the ProjectInfo data structure
273
629
for (i=0; i<pl.projects.size(); i++) {
274
bSupportedPlatformFound = false;
275
bProjectSupportsNvidiaGPU = false;
276
bProjectSupportsATIGPU = false;
277
bProjectSupportsMulticore = false;
630
pProjectInfo = new CProjectInfo();
631
m_Projects.push_back(pProjectInfo);
280
634
wxT("Function Status"),
283
637
wxString(pl.projects[i]->url.c_str(), wxConvUTF8).c_str()
286
std::vector<std::string> &project_platforms = pl.projects[i]->platforms;
288
// Can the core client support a platform that this project
290
for (j = 0;j < client_platforms.size(); j++) {
291
for (k = 0;k < project_platforms.size(); k++) {
292
wxString strClientPlatform = wxString(client_platforms[j].c_str(), wxConvUTF8);
293
wxString strProjectPlatform = wxString(project_platforms[k].c_str(), wxConvUTF8);
640
// Convert the easy stuff
641
pProjectInfo->m_strURL = wxString(pl.projects[i]->url.c_str(), wxConvUTF8);
642
pProjectInfo->m_strName = wxString(pl.projects[i]->name.c_str(), wxConvUTF8);
643
pProjectInfo->m_strDescription = wxString(pl.projects[i]->description.c_str(), wxConvUTF8);
644
pProjectInfo->m_strGeneralArea = wxString(pl.projects[i]->general_area.c_str(), wxConvUTF8);
645
pProjectInfo->m_strSpecificArea = wxString(pl.projects[i]->specific_area.c_str(), wxConvUTF8);
646
pProjectInfo->m_strOrganization = wxString(pl.projects[i]->home.c_str(), wxConvUTF8);
648
// Add the category if it isn't already in the category list
649
bCategoryFound = false;
650
for (j=0; j<aCategories.size(); j++) {
651
if (aCategories[j] == pProjectInfo->m_strGeneralArea) {
652
bCategoryFound = true;
655
if (!bCategoryFound) {
656
aCategories.Add(pProjectInfo->m_strGeneralArea);
659
// Convert the supported project platforms into something useful
660
aProjectPlatforms.Clear();
661
for (j=0; j<pl.projects[i]->platforms.size(); j++) {
662
aProjectPlatforms.Add(wxString(pl.projects[i]->platforms[j].c_str(), wxConvUTF8));
665
// Can the core client support a platform that this project supports?
667
// NOTE: if the platform entry contains a modifier such as [cuda] or [ati],
668
// that capability is required. If a project offers both a cuda application
669
// and a CPU-only application for an operating system, it must have two
670
// separate platform entries for that OS, one with [cuda] and one without.
671
// Likewise for ati and mt.
673
for (j = 0;j < aClientPlatforms.size(); j++) {
674
wxString strClientPlatform = aClientPlatforms[j];
675
for (k = 0;k < aProjectPlatforms.size(); k++) {
676
wxString strProjectPlatform = aProjectPlatforms[k];
294
677
wxString strRootProjectPlatform = strProjectPlatform.SubString(0, strProjectPlatform.Find(_T("[")) - 1);
679
if (strProjectPlatform.Find(_T("windows")) != wxNOT_FOUND) {
680
pProjectInfo->m_bProjectSupportsWindows = true;
683
if (strProjectPlatform.Find(_T("apple")) != wxNOT_FOUND) {
684
pProjectInfo->m_bProjectSupportsMac = true;
687
if (strProjectPlatform.Find(_T("linux")) != wxNOT_FOUND) {
688
pProjectInfo->m_bProjectSupportsLinux = true;
296
691
if (strProjectPlatform.Find(_T("[cuda")) != wxNOT_FOUND) {
297
if ((pDoc->state.have_cuda) && (strClientPlatform == strRootProjectPlatform)) {
298
bProjectSupportsNvidiaGPU = true;
299
bSupportedPlatformFound = true;
692
pProjectInfo->m_bProjectSupportsCUDA = true;
693
if (!pDoc->state.have_nvidia) continue;
303
696
if (strProjectPlatform.Find(_T("[ati")) != wxNOT_FOUND) {
304
if ((pDoc->state.have_ati) && (strClientPlatform == strRootProjectPlatform)) {
305
bProjectSupportsATIGPU = true;
306
bSupportedPlatformFound = true;
697
pProjectInfo->m_bProjectSupportsCAL = true;
698
if (!pDoc->state.have_ati) continue;
310
701
if (strProjectPlatform.Find(_T("[mt")) != wxNOT_FOUND) {
311
if ((pDoc->host.p_ncpus >= 4) && (strClientPlatform == strRootProjectPlatform)) {
312
bProjectSupportsMulticore = true;
313
bSupportedPlatformFound = true;
702
pProjectInfo->m_bProjectSupportsMulticore = true;
703
if (pDoc->state.host_info.p_ncpus < 4) continue;
317
706
if (strClientPlatform == strRootProjectPlatform) {
318
bSupportedPlatformFound = true;
707
pProjectInfo->m_bSupportedPlatformFound = true;
712
// If project doesn't export its platforms, assume we're supported
714
if (aProjectPlatforms.size() == 0) {
715
pProjectInfo->m_bSupportedPlatformFound = true;
324
719
wxT("Function Status"),
325
wxT("CProjectInfoPage::OnPageChanged - Nvidia: '%d', ATI: '%d', Multicore: '%d', Platform: '%d'"),
326
bProjectSupportsNvidiaGPU,
327
bProjectSupportsATIGPU,
328
bProjectSupportsMulticore,
329
bSupportedPlatformFound
332
m_pProjectListCtrl->Append(
333
wxString(pl.projects[i]->url.c_str(), wxConvUTF8),
334
wxString(pl.projects[i]->name.c_str(), wxConvUTF8),
335
wxString(pl.projects[i]->image.c_str(), wxConvUTF8),
336
wxString(pl.projects[i]->description.c_str(), wxConvUTF8),
337
bProjectSupportsNvidiaGPU,
338
bProjectSupportsATIGPU,
339
bProjectSupportsMulticore,
340
bSupportedPlatformFound
344
// Pre select the first element
345
if (m_pProjectListCtrl->GetItemCount()) {
346
m_pProjectListCtrl->SetSelection(0);
347
m_strProjectURL = m_pProjectListCtrl->GetItem(0)->GetURL();
348
m_bProjectSupported = m_pProjectListCtrl->GetItem(0)->IsPlatformSupported();
351
TransferDataToWindow();
720
wxT("CProjectInfoPage::OnPageChanged - Windows: '%d', Mac: '%d', Linux: '%d', Nvidia: '%d', ATI: '%d', Multicore: '%d', Platform: '%d'"),
721
pProjectInfo->m_bProjectSupportsWindows,
722
pProjectInfo->m_bProjectSupportsMac,
723
pProjectInfo->m_bProjectSupportsLinux,
724
pProjectInfo->m_bProjectSupportsCUDA,
725
pProjectInfo->m_bProjectSupportsCAL,
726
pProjectInfo->m_bProjectSupportsMulticore,
727
pProjectInfo->m_bSupportedPlatformFound
732
// Populate the category combo box
733
m_pProjectCategoriesCtrl->Clear();
734
m_pProjectCategoriesCtrl->Append(_("All"));
735
for (i=0; i<aCategories.size(); i++) {
736
m_pProjectCategoriesCtrl->Append(aCategories[i]);
738
m_pProjectCategoriesCtrl->SetValue(_("All"));
740
// Trigger initial event to populate the list control
741
wxCommandEvent evtEvent(wxEVT_COMMAND_COMBOBOX_SELECTED, ID_CATEGORIES);
742
ProcessEvent(evtEvent);
353
744
m_bProjectListPopulated = true;
358
m_pProjectListCtrl->SetFocus();
747
m_pProjectsCtrl->SetFocus();
360
749
wxLogTrace(wxT("Function Start/End"), wxT("CProjectInfoPage::OnPageChanged - Function End"));