NewProjectWizard::NewProjectWizard(wxWindow* parent, const clNewProjectEvent::Template::Vec_t& additionalTemplates) : NewProjectWizardBase(parent) { m_additionalTemplates = additionalTemplates; NewProjectDlgData info; EditorConfigST::Get()->ReadObject(wxT("NewProjectDlgData"), &info); NewProjImgList images; // Get list of project templates wxImageList *lstImages (NULL); GetProjectTemplateList(PluginManager::Get(), m_list, &m_mapImages, &lstImages); wxDELETE(lstImages); // Populate the dataview model m_dataviewTemplatesModel->Clear(); std::map<wxString, wxDataViewItem> categoryMap; // list of compilers wxArrayString compilerChoices; // list of debuggers wxArrayString debuggerChoices; // Place the plugins on top for ( size_t i=0; i<m_additionalTemplates.size(); ++i ) { // Add the category if not exists const clNewProjectEvent::Template& newTemplate = m_additionalTemplates.at(i); if ( !newTemplate.m_toolchain.IsEmpty() ) { compilerChoices.Add( newTemplate.m_toolchain ); } if ( !newTemplate.m_debugger.IsEmpty() ) { debuggerChoices.Add( newTemplate.m_debugger ); } wxString category = newTemplate.m_category; if ( categoryMap.count( category ) == 0 ) { wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap( newTemplate.m_categoryPng ); if ( !bmp.IsOk() ) { bmp = images.Bitmap("gear16"); } cols.push_back( DVTemplatesModel::CreateIconTextVariant(category, bmp) ); categoryMap[category] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); } { wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap( newTemplate.m_templatePng ); if ( !bmp.IsOk() ) { bmp = images.Bitmap("gear16"); } cols.push_back( DVTemplatesModel::CreateIconTextVariant(newTemplate.m_template, bmp) ); m_dataviewTemplatesModel->AppendItem(categoryMap[category], cols, new NewProjectClientData(NULL, newTemplate.m_template)); } } wxDataViewItem selection; std::list<ProjectPtr>::iterator iter = m_list.begin(); for (; iter != m_list.end(); ++iter) { wxVector<wxVariant> cols; wxString internalType = (*iter)->GetProjectInternalType(); if (internalType.IsEmpty()) internalType = _("Others"); if ( categoryMap.count( internalType ) == 0 ) { cols.clear(); wxIcon icn; icn.CopyFromBitmap( images.Bitmap("gear16") ); wxDataViewIconText ict(internalType, icn); wxVariant v; v << ict; cols.push_back( v ); categoryMap[internalType] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); } wxString imgId = (*iter)->GetProjectIconName(); cols.clear(); wxIcon icn; icn.CopyFromBitmap( images.Bitmap(imgId) ); wxDataViewIconText ict((*iter)->GetName(), icn); wxVariant v; v << ict; cols.push_back( v ); wxDataViewItem item = m_dataviewTemplatesModel->AppendItem(categoryMap[internalType], cols, new NewProjectClientData( *iter ) ); if ( (*iter)->GetName() == info.GetLastSelection() ) { selection = item; } } // Aet list of compilers from configuration file BuildSettingsConfigCookie cookie; CompilerPtr cmp = BuildSettingsConfigST::Get()->GetFirstCompiler(cookie); while (cmp) { compilerChoices.Add(cmp->GetName()); cmp = BuildSettingsConfigST::Get()->GetNextCompiler(cookie); } m_choiceCompiler->Append( compilerChoices ); if (compilerChoices.IsEmpty() == false) { m_choiceCompiler->SetSelection(0); } m_textCtrlProjectPath->SetValue( WorkspaceST::Get()->GetWorkspaceFileName().GetPath()); // Get list of debuggers wxArrayString knownDebuggers = DebuggerMgr::Get().GetAvailableDebuggers(); debuggerChoices.insert( debuggerChoices.end(), knownDebuggers.begin(), knownDebuggers.end()); m_choiceDebugger->Append( debuggerChoices ); if ( !m_choiceDebugger->IsEmpty() ) { m_choiceDebugger->SetSelection( 0 ); } m_cbSeparateDir->SetValue( info.GetFlags() & NewProjectDlgData::NpSeparateDirectory ); // Make sure the old selection is restored if ( selection.IsOk() ) { m_dataviewTemplates->Select(selection); m_dataviewTemplates->EnsureVisible(selection); NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>( m_dataviewTemplatesModel->GetClientObject(selection) ); if ( cd ) { m_projectData.m_srcProject = cd->getProject(); } } UpdateProjectPage(); }
NewProjectWizard::NewProjectWizard(wxWindow* parent, const clNewProjectEvent::Template::Vec_t& additionalTemplates) : NewProjectWizardBase(parent) , m_selectionMade(false) { m_additionalTemplates = additionalTemplates; NewProjectDlgData info; EditorConfigST::Get()->ReadObject(wxT("NewProjectDlgData"), &info); NewProjImgList images; // Get list of project templates (bot the installed ones + user) GetProjectTemplateList(m_list); // Populate the dataview model m_dataviewTemplatesModel->Clear(); std::map<wxString, wxDataViewItem> categoryMap; std::map<wxString, wxStringSet_t> projectsPerCategory; // list of compilers wxArrayString compilerChoices; // list of debuggers wxArrayString debuggerChoices; // Place the plugins on top for(size_t i = 0; i < m_additionalTemplates.size(); ++i) { // Add the category if not exists const clNewProjectEvent::Template& newTemplate = m_additionalTemplates.at(i); if(!newTemplate.m_toolchain.IsEmpty()) { compilerChoices.Add(newTemplate.m_toolchain); } if(!newTemplate.m_debugger.IsEmpty()) { debuggerChoices.Add(newTemplate.m_debugger); } wxString category = newTemplate.m_category; if(categoryMap.count(category) == 0) { wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap(newTemplate.m_categoryPng); if(!bmp.IsOk()) { bmp = images.Bitmap("gear16"); } cols.push_back(DVTemplatesModel::CreateIconTextVariant(category, bmp)); categoryMap[category] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); projectsPerCategory.insert(std::make_pair(category, wxStringSet_t())); } { wxString name = newTemplate.m_template; if(projectsPerCategory[category].count(name)) { // already exists continue; } projectsPerCategory[category].insert(name); // add it to the unique list wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap(newTemplate.m_templatePng); if(!bmp.IsOk()) { bmp = images.Bitmap("gear16"); } cols.push_back(DVTemplatesModel::CreateIconTextVariant(newTemplate.m_template, bmp)); m_dataviewTemplatesModel->AppendItem(categoryMap[category], cols, new NewProjectClientData(NULL, newTemplate.m_template, true, newTemplate.m_allowSeparateFolder)); } } wxDataViewItem selection; std::list<ProjectPtr>::iterator iter = m_list.begin(); for(; iter != m_list.end(); ++iter) { wxVector<wxVariant> cols; wxString internalType = (*iter)->GetProjectInternalType(); if(internalType.IsEmpty()) internalType = "Others"; // Add the category node if needed if(categoryMap.count(internalType) == 0) { cols.clear(); wxIcon icn; icn.CopyFromBitmap(images.Bitmap("gear16")); wxDataViewIconText ict(internalType, icn); wxVariant v; v << ict; cols.push_back(v); categoryMap[internalType] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); projectsPerCategory.insert(std::make_pair(internalType, wxStringSet_t())); } wxString imgId = (*iter)->GetProjectIconName(); wxBitmap bmp = images.Bitmap(imgId); // Allow the user to override it // Remove the entry if(projectsPerCategory[internalType].count((*iter)->GetName())) { // already exists continue; } projectsPerCategory[internalType].insert((*iter)->GetName()); // add it to the unique list cols.clear(); wxIcon icn; icn.CopyFromBitmap(bmp); wxDataViewIconText ict((*iter)->GetName(), icn); wxVariant v; v << ict; cols.push_back(v); wxDataViewItem item = m_dataviewTemplatesModel->AppendItem(categoryMap[internalType], cols, new NewProjectClientData(*iter)); if((*iter)->GetName() == info.GetLastSelection()) { selection = item; } } // Get list of compilers from configuration file BuildSettingsConfigCookie cookie; CompilerPtr cmp = BuildSettingsConfigST::Get()->GetFirstCompiler(cookie); while(cmp) { compilerChoices.Add(cmp->GetName()); cmp = BuildSettingsConfigST::Get()->GetNextCompiler(cookie); } m_choiceCompiler->Append(compilerChoices); if(compilerChoices.IsEmpty() == false) { m_choiceCompiler->SetSelection(0); } m_textCtrlProjectPath->SetValue(clCxxWorkspaceST::Get()->GetWorkspaceFileName().GetPath()); // Get list of debuggers wxArrayString knownDebuggers = DebuggerMgr::Get().GetAvailableDebuggers(); debuggerChoices.insert(debuggerChoices.end(), knownDebuggers.begin(), knownDebuggers.end()); m_choiceDebugger->Append(debuggerChoices); if(!m_choiceDebugger->IsEmpty()) { m_choiceDebugger->SetSelection(0); } { // build system std::list<wxString> builders; wxArrayString knownBuilders; BuildManagerST::Get()->GetBuilders(builders); std::for_each( builders.begin(), builders.end(), [&](const wxString& builderName) { knownBuilders.Add(builderName); }); m_choiceBuildSystem->Append(knownBuilders); if(!m_choiceBuildSystem->IsEmpty()) { m_choiceBuildSystem->SetSelection(0); } } m_cbSeparateDir->SetValue(info.GetFlags() & NewProjectDlgData::NpSeparateDirectory); // Make sure the old selection is restored if(selection.IsOk()) { m_dataviewTemplates->Select(selection); m_dataviewTemplates->EnsureVisible(selection); NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>(m_dataviewTemplatesModel->GetClientObject(selection)); if(cd) { m_projectData.m_srcProject = cd->getProject(); } } UpdateProjectPage(); }
void OutputPane::CreateGUIControls() { wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL); SetSizer(mainSizer); SetMinClientSize(wxSize(-1, 250)); long style = (kNotebook_Default | kNotebook_AllowDnD); if(EditorConfigST::Get()->GetOptions()->GetWorkspaceTabsDirection() == wxBOTTOM) { style |= kNotebook_BottomTabs; } else if(EditorConfigST::Get()->GetOptions()->GetWorkspaceTabsDirection() == wxLEFT) { #ifdef __WXOSX__ style &= ~(kNotebook_BottomTabs | kNotebook_LeftTabs | kNotebook_RightTabs); #else style |= kNotebook_LeftTabs; #endif } else if(EditorConfigST::Get()->GetOptions()->GetWorkspaceTabsDirection() == wxRIGHT) { #ifdef __WXOSX__ style |= kNotebook_BottomTabs; #else style |= kNotebook_RightTabs; #endif } //style |= kNotebook_UnderlineActiveTab; m_book = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style); BitmapLoader* bmpLoader = PluginManager::Get()->GetStdIcons(); // Calculate the widest tab (the one with the 'Workspace' label) TODO: What happens with translations? int xx, yy; wxFont fnt = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); wxWindow::GetTextExtent(wxGetTranslation(REPLACE_IN_FILES), &xx, &yy, NULL, NULL, &fnt); mainSizer->Add(m_book, 1, wxEXPAND | wxALL | wxGROW, 0); // the IManager instance IManager* mgr = PluginManager::Get(); // Build tab m_buildWin = new NewBuildTab(m_book); m_book->AddPage(m_buildWin, wxGetTranslation(BUILD_WIN), true, bmpLoader->LoadBitmap(wxT("build"))); m_tabs.insert(std::make_pair(wxGetTranslation(BUILD_WIN), Tab(wxGetTranslation(BUILD_WIN), m_buildWin, bmpLoader->LoadBitmap(wxT("build"))))); mgr->AddOutputTab(wxGetTranslation(BUILD_WIN)); // Find in files m_findResultsTab = new FindResultsTab(m_book, wxID_ANY, wxGetTranslation(FIND_IN_FILES_WIN)); m_book->AddPage(m_findResultsTab, wxGetTranslation(FIND_IN_FILES_WIN), false, bmpLoader->LoadBitmap(wxT("find"))); m_tabs.insert( std::make_pair(wxGetTranslation(FIND_IN_FILES_WIN), Tab(wxGetTranslation(FIND_IN_FILES_WIN), m_findResultsTab, bmpLoader->LoadBitmap(wxT("find"))))); mgr->AddOutputTab(wxGetTranslation(FIND_IN_FILES_WIN)); // Replace In Files m_replaceResultsTab = new ReplaceInFilesPanel(m_book, wxID_ANY, wxGetTranslation(REPLACE_IN_FILES)); m_book->AddPage( m_replaceResultsTab, wxGetTranslation(REPLACE_IN_FILES), false, bmpLoader->LoadBitmap(wxT("find_and_replace"))); m_tabs.insert(std::make_pair( REPLACE_IN_FILES, Tab(REPLACE_IN_FILES, m_replaceResultsTab, bmpLoader->LoadBitmap(wxT("find_and_replace"))))); mgr->AddOutputTab(REPLACE_IN_FILES); // Show Usage ("References") m_showUsageTab = new FindUsageTab(m_book, wxGetTranslation(SHOW_USAGE)); m_book->AddPage(m_showUsageTab, wxGetTranslation(SHOW_USAGE), false, bmpLoader->LoadBitmap(wxT("find"))); m_tabs.insert( std::make_pair(wxGetTranslation(SHOW_USAGE), Tab(wxGetTranslation(SHOW_USAGE), m_showUsageTab, bmpLoader->LoadBitmap(wxT("find"))))); mgr->AddOutputTab(wxGetTranslation(SHOW_USAGE)); // Output tab m_outputWind = new OutputTab(m_book, wxID_ANY, wxGetTranslation(OUTPUT_WIN)); m_book->AddPage(m_outputWind, wxGetTranslation(OUTPUT_WIN), false, bmpLoader->LoadBitmap(wxT("console"))); m_tabs.insert( std::make_pair(wxGetTranslation(OUTPUT_WIN), Tab(wxGetTranslation(OUTPUT_WIN), m_outputWind, bmpLoader->LoadBitmap(wxT("console"))))); mgr->AddOutputTab(wxGetTranslation(OUTPUT_WIN)); #if HAS_LIBCLANG // Clang tab NewProjImgList images; m_clangOutputTab = new ClangOutputTab(m_book); m_book->AddPage(m_clangOutputTab, wxGetTranslation(CLANG_TAB), false, images.Bitmap("clang16")); m_tabs.insert(std::make_pair(wxGetTranslation(CLANG_TAB), Tab(wxGetTranslation(CLANG_TAB), m_clangOutputTab, images.Bitmap("clang16")))); mgr->AddOutputTab(wxGetTranslation(CLANG_TAB)); #endif wxTextCtrl* text = new wxTextCtrl(m_book, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_RICH2 | wxTE_MULTILINE | wxTE_READONLY | wxHSCROLL); ///////////////////////////////////// // Set the trace's font & colors ///////////////////////////////////// m_book->AddPage(text, wxGetTranslation(TRACE_TAB), false, bmpLoader->LoadBitmap("log")); m_logTargetOld = wxLog::SetActiveTarget(new wxclTextCtrl(text)); m_tabs.insert(std::make_pair(wxGetTranslation(TRACE_TAB), Tab(wxGetTranslation(TRACE_TAB), text, bmpLoader->LoadBitmap("log")))); mgr->AddOutputTab(wxGetTranslation(TRACE_TAB)); // Now that we set up our own log target, re-enable the logging wxLog::EnableLogging(true); // Tasks panel m_taskPanel = new TaskPanel(m_book, wxID_ANY, wxGetTranslation(TASKS)); m_book->AddPage(m_taskPanel, wxGetTranslation(TASKS), false, bmpLoader->LoadBitmap("tasks")); m_tabs.insert(std::make_pair(wxGetTranslation(TASKS), Tab(wxGetTranslation(TASKS), m_taskPanel, bmpLoader->LoadBitmap("tasks")))); mgr->AddOutputTab(wxGetTranslation(TASKS)); SetMinSize(wxSize(200, 100)); mainSizer->Layout(); }
void OutputPane::CreateGUIControls() { wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL); SetSizer(mainSizer); long style = (kNotebook_Default | kNotebook_AllowDnD); if(!EditorConfigST::Get()->GetOptions()->IsNonEditorTabsAtTop()) { style |= kNotebook_BottomTabs; } m_book = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style); BitmapLoader* bmpLoader = PluginManager::Get()->GetStdIcons(); // Calculate the widest tab (the one with the 'Workspace' label) TODO: What happens with translations? int xx, yy; wxFont fnt = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); wxWindow::GetTextExtent(wxGetTranslation(REPLACE_IN_FILES), &xx, &yy, NULL, NULL, &fnt); mainSizer->Add(m_book, 1, wxEXPAND | wxALL | wxGROW, 0); #if CL_USE_NEW_BUILD_TAB m_buildWin = new NewBuildTab(m_book); #else m_buildWin = new BuildTab(m_book, wxID_ANY, wxGetTranslation(BUILD_WIN)); #endif m_book->AddPage( m_buildWin, wxGetTranslation(BUILD_WIN), true, bmpLoader->LoadBitmap(wxT("toolbars/16/build/build"))); #ifdef __WXMAC__ m_findResultsTab = new FindResultsTab(m_book, wxID_ANY, wxGetTranslation(FIND_IN_FILES_WIN), false); #else m_findResultsTab = new FindResultsTab(m_book, wxID_ANY, wxGetTranslation(FIND_IN_FILES_WIN), true); #endif m_book->AddPage(m_findResultsTab, wxGetTranslation(FIND_IN_FILES_WIN), false, bmpLoader->LoadBitmap(wxT("toolbars/16/search/find"))); m_replaceResultsTab = new ReplaceInFilesPanel(m_book, wxID_ANY, wxGetTranslation(REPLACE_IN_FILES)); m_book->AddPage(m_replaceResultsTab, wxGetTranslation(REPLACE_IN_FILES), false, bmpLoader->LoadBitmap(wxT("toolbars/16/search/find_and_replace"))); m_showUsageTab = new FindUsageTab(m_book, wxGetTranslation(SHOW_USAGE)); m_book->AddPage( m_showUsageTab, wxGetTranslation(SHOW_USAGE), false, bmpLoader->LoadBitmap(wxT("toolbars/16/search/find"))); m_outputWind = new ShellTab(m_book, wxID_ANY, wxGetTranslation(OUTPUT_WIN)); m_book->AddPage( m_outputWind, wxGetTranslation(OUTPUT_WIN), false, bmpLoader->LoadBitmap(wxT("output-pane/16/terminal"))); #if HAS_LIBCLANG NewProjImgList images; m_clangOutputTab = new ClangOutputTab(m_book); m_book->AddPage(m_clangOutputTab, wxGetTranslation(CLANG_TAB), false, images.Bitmap("clang16")); #endif wxTextCtrl* text = new wxTextCtrl(m_book, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_RICH2 | wxTE_MULTILINE | wxTE_READONLY | wxHSCROLL); ///////////////////////////////////// // Set the trace's font & colors ///////////////////////////////////// m_book->AddPage(text, wxGetTranslation(TRACE_TAB), false, wxXmlResource::Get()->LoadBitmap(wxT("debug_window"))); m_logTargetOld = wxLog::SetActiveTarget(new wxclTextCtrl(text)); // Now that we set up our own log target, re-enable the logging wxLog::EnableLogging(true); m_taskPanel = new TaskPanel(m_book, wxID_ANY, wxGetTranslation(TASKS)); m_book->AddPage(m_taskPanel, wxGetTranslation(TASKS), false, bmpLoader->LoadBitmap(wxT("output-pane/16/tasks"))); SetMinSize(wxSize(200, 100)); mainSizer->Layout(); }