void CppCheckPlugin::OnCheckWorkspaceItem(wxCommandEvent& e) { if(m_cppcheckProcess) { clLogMessage(_("CppCheckPlugin: CppCheck is currently busy please wait for it to complete the current check")); return; } if(!m_mgr->GetWorkspace() || !m_mgr->IsWorkspaceOpen()) { return; } TreeItemInfo item = m_mgr->GetSelectedTreeItemInfo(TreeFileView); if(item.m_itemType == ProjectItem::TypeWorkspace) { // retrieve complete list of source files of the workspace wxArrayString projects; wxString err_msg; std::vector<wxFileName> tmpfiles; m_mgr->GetWorkspace()->GetProjectList(projects); for(size_t i = 0; i < projects.GetCount(); i++) { ProjectPtr proj = m_mgr->GetWorkspace()->FindProjectByName(projects.Item(i), err_msg); if(proj) { proj->GetFilesAsVectorOfFileName(tmpfiles); } } // only C/C++ files for(size_t i = 0; i < tmpfiles.size(); i++) { if(FileExtManager::GetType(tmpfiles.at(i).GetFullPath()) == FileExtManager::TypeSourceC || FileExtManager::GetType(tmpfiles.at(i).GetFullPath()) == FileExtManager::TypeSourceCpp) { m_filelist.Add(tmpfiles.at(i).GetFullPath()); } } } DoStartTest(); }
bool TerminalEmulator::ExecuteNoConsole(const wxString& commandToRun, const wxString& workingDirectory) { if(m_process) { // another process is running return false; } wxString command; #ifdef __WXMSW__ wxString shell = wxGetenv("COMSPEC"); if(shell.IsEmpty()) { shell = "CMD"; } command << shell << wxT(" /c \""); command << commandToRun << wxT("\""); #else wxString tmpCmd = commandToRun; command << "/bin/sh -c '"; // escape any single quoutes tmpCmd.Replace("'", "\\'"); command << tmpCmd << "'"; #endif clLogMessage("TerminalEmulator::ExecuteNoConsole: " + command); m_process = ::CreateAsyncProcess(this, command, IProcessCreateWithHiddenConsole, workingDirectory); return m_process != NULL; }
void Copyright::OnInsertCopyrights(wxCommandEvent& e) { wxUnusedVar(e); // read configuration CopyrightsConfigData data; m_mgr->GetConfigTool()->ReadObject(wxT("CopyrightsConfig"), &data); // make sure that the template file exists if(!wxFileName::FileExists(data.GetTemplateFilename())) { wxMessageBox( wxString::Format(_("Template file name '%s', does not exist!"), data.GetTemplateFilename().GetData()), _("CodeLite"), wxICON_WARNING | wxOK); return; } // read the copyrights file wxString content; if(!ReadFileWithConversion(data.GetTemplateFilename(), content)) { wxMessageBox(wxString::Format(_("Failed to read template file '%s'"), data.GetTemplateFilename().c_str()), _("CodeLite"), wxICON_WARNING | wxOK); return; } IEditor* editor = m_mgr->GetActiveEditor(); if(!editor) { wxMessageBox(wxString::Format(_("There is no active editor\n")), _("CodeLite"), wxICON_WARNING | wxOK); return; } // verify that the file consist only with comment code CppWordScanner scanner(data.GetTemplateFilename().mb_str().data()); CppTokensMap l; scanner.FindAll(l); if(!l.is_empty()) { if(wxMessageBox(_("Template file contains text which is not comment, continue anyway?"), _("CodeLite"), wxICON_QUESTION | wxYES_NO) == wxNO) { return; } } // expand constants wxString _content = ExpandAllVariables(content, m_mgr->GetWorkspace(), wxEmptyString, wxEmptyString, editor->GetFileName().GetFullPath()); // we are good to go :) wxString ignoreString = data.GetIgnoreString(); ignoreString = ignoreString.Trim().Trim(false); if(ignoreString.IsEmpty() == false) { if(editor->GetEditorText().Find(data.GetIgnoreString()) != wxNOT_FOUND) { clLogMessage(_("File contains ignore string, skipping it")); return; } } editor->InsertText(0, _content); }
void CppCheckPlugin::OnCheckFileEditorItem(wxCommandEvent& e) { if(m_cppcheckProcess) { clLogMessage(_("CppCheckPlugin: CppCheck is currently busy please wait for it to complete the current check")); return; } ProjectPtr proj; IEditor* editor = m_mgr->GetActiveEditor(); if(editor) { wxString projectName = editor->GetProjectName(); if(!projectName.IsEmpty()) { proj = clCxxWorkspaceST::Get()->GetProject(projectName); } m_filelist.Add(editor->GetFileName().GetFullPath()); } DoStartTest(); }
void CppCheckPlugin::OnCheckFileExplorerItem(wxCommandEvent& e) { if(m_cppcheckProcess) { clLogMessage(_("CppCheckPlugin: CppCheck is currently busy please wait for it to complete the current check")); return; } TreeItemInfo item = m_mgr->GetSelectedTreeItemInfo(TreeFileExplorer); for(size_t i = 0; i < item.m_paths.GetCount(); ++i) { if(wxDir::Exists(item.m_paths.Item(i))) { // directory GetFileListFromDir(item.m_paths.Item(i)); } else { // filename m_filelist.Add(item.m_paths.Item(i)); } } DoStartTest(); }
void CppCheckPlugin::OnCheckProjectItem(wxCommandEvent& e) { if(m_cppcheckProcess) { clLogMessage(_("CppCheckPlugin: CppCheck is currently busy please wait for it to complete the current check")); return; } ProjectPtr proj = FindSelectedProject(); if(!proj) { return; } // retrieve complete list of source files of the workspace std::vector<wxFileName> tmpfiles; proj->GetFilesAsVectorOfFileName(tmpfiles); // only C/C++ files for(size_t i = 0; i < tmpfiles.size(); i++) { if(FileExtManager::GetType(tmpfiles.at(i).GetFullPath()) == FileExtManager::TypeSourceC || FileExtManager::GetType(tmpfiles.at(i).GetFullPath()) == FileExtManager::TypeSourceCpp) { m_filelist.Add(tmpfiles.at(i).GetFullPath()); } } DoStartTest(proj); }
bool DebuggerMgr::LoadDebuggers() { wxString ext; #if defined(__WXMSW__) ext = wxT("dll"); #elif defined(__WXMAC__) ext = wxT("dylib"); #else ext = wxT("so"); #endif wxString fileSpec(wxT("*.") + ext); // get list of dlls wxArrayString files; #ifdef __WXGTK__ wxString debuggersPath(PLUGINS_DIR, wxConvUTF8); debuggersPath += wxT("/debuggers"); #elif defined(__WXMSW__) #ifdef USE_POSIX_LAYOUT wxString debuggersPath(clStandardPaths::Get().GetPluginsDirectory() + wxT("/debuggers")); #else wxString debuggersPath(m_baseDir + wxT("/debuggers")); #endif #else // OSX wxFileName debuggersFolder(clStandardPaths::Get().GetDataDir(), ""); debuggersFolder.AppendDir("debuggers"); wxString debuggersPath(debuggersFolder.GetPath()); #endif CL_DEBUG("Loading debuggers from: %s", debuggersPath); wxDir::GetAllFiles(debuggersPath, &files, fileSpec, wxDIR_FILES); for(size_t i = 0; i < files.GetCount(); i++) { clDynamicLibrary* dl = new clDynamicLibrary(); wxString fileName(files.Item(i)); CL_DEBUG("Attempting to load debugger: %s", fileName); #if defined(__WXMSW__) && !defined(NDEBUG) // Under MSW loading a release plugin while in debug mode will cause a crash if(!fileName.EndsWith("-dbg.dll")) { wxDELETE(dl); continue; } #elif defined(__WXMSW__) // filter debug plugins if(fileName.EndsWith("-dbg.dll")) { wxDELETE(dl); continue; } #endif if(!dl->Load(fileName)) { CL_WARNING("Failed to load debugger: %s", fileName); if(!dl->GetError().IsEmpty()) { CL_WARNING("%s", dl->GetError()); } wxDELETE(dl); continue; } bool success(false); GET_DBG_INFO_FUNC pfn = (GET_DBG_INFO_FUNC)dl->GetSymbol(wxT("GetDebuggerInfo"), &success); if(!success) { clLogMessage(wxT("Failed to find GetDebuggerInfo() in dll: ") + fileName); if(!dl->GetError().IsEmpty()) { clLogMessage(dl->GetError()); } // dl->Unload(); delete dl; continue; } DebuggerInfo info = pfn(); // Call the init method to create an instance of the debugger success = false; GET_DBG_CREATE_FUNC pfnInitDbg = (GET_DBG_CREATE_FUNC)dl->GetSymbol(info.initFuncName, &success); if(!success) { clLogMessage(wxT("Failed to find init function in dll: ") + fileName); if(!dl->GetError().IsEmpty()) { clLogMessage(dl->GetError()); } dl->Detach(); delete dl; continue; } clLogMessage(wxT("Loaded debugger: ") + info.name + wxT(", Version: ") + info.version); IDebugger* dbg = pfnInitDbg(); // set the environment dbg->SetEnvironment(m_env); m_debuggers[info.name] = dbg; // keep the dynamic load library m_dl.push_back(dl); } // Load all debuggers in the form of plugin (i.e. they dont implement the IDebugger interface) // and append them to a special list clDebugEvent queryPlugins(wxEVT_DBG_IS_PLUGIN_DEBUGGER); EventNotifier::Get()->ProcessEvent(queryPlugins); m_pluginsDebuggers.swap(queryPlugins.GetStrings()); return true; }