void ClangPlugin::OnAttach() { wxBitmap bmp; wxString prefix = ConfigManager::GetDataFolder() + wxT("/images/codecompletion/"); // bitmaps must be added by order of PARSER_IMG_* consts (which are also TokenCategory enums) const char* imgs[] = { "class_folder.png", // PARSER_IMG_CLASS_FOLDER "class.png", // PARSER_IMG_CLASS "class_private.png", // PARSER_IMG_CLASS_PRIVATE "class_protected.png", // PARSER_IMG_CLASS_PROTECTED "class_public.png", // PARSER_IMG_CLASS_PUBLIC "ctor_private.png", // PARSER_IMG_CTOR_PRIVATE "ctor_protected.png", // PARSER_IMG_CTOR_PROTECTED "ctor_public.png", // PARSER_IMG_CTOR_PUBLIC "dtor_private.png", // PARSER_IMG_DTOR_PRIVATE "dtor_protected.png", // PARSER_IMG_DTOR_PROTECTED "dtor_public.png", // PARSER_IMG_DTOR_PUBLIC "method_private.png", // PARSER_IMG_FUNC_PRIVATE "method_protected.png", // PARSER_IMG_FUNC_PRIVATE "method_public.png", // PARSER_IMG_FUNC_PUBLIC "var_private.png", // PARSER_IMG_VAR_PRIVATE "var_protected.png", // PARSER_IMG_VAR_PROTECTED "var_public.png", // PARSER_IMG_VAR_PUBLIC "macro_def.png", // PARSER_IMG_MACRO_DEF "enum.png", // PARSER_IMG_ENUM "enum_private.png", // PARSER_IMG_ENUM_PRIVATE "enum_protected.png", // PARSER_IMG_ENUM_PROTECTED "enum_public.png", // PARSER_IMG_ENUM_PUBLIC "enumerator.png", // PARSER_IMG_ENUMERATOR "namespace.png", // PARSER_IMG_NAMESPACE "typedef.png", // PARSER_IMG_TYPEDEF "typedef_private.png", // PARSER_IMG_TYPEDEF_PRIVATE "typedef_protected.png", // PARSER_IMG_TYPEDEF_PROTECTED "typedef_public.png", // PARSER_IMG_TYPEDEF_PUBLIC "symbols_folder.png", // PARSER_IMG_SYMBOLS_FOLDER "vars_folder.png", // PARSER_IMG_VARS_FOLDER "funcs_folder.png", // PARSER_IMG_FUNCS_FOLDER "enums_folder.png", // PARSER_IMG_ENUMS_FOLDER "macro_def_folder.png", // PARSER_IMG_MACRO_DEF_FOLDER "others_folder.png", // PARSER_IMG_OTHERS_FOLDER "typedefs_folder.png", // PARSER_IMG_TYPEDEF_FOLDER "macro_use.png", // PARSER_IMG_MACRO_USE "macro_use_private.png", // PARSER_IMG_MACRO_USE_PRIVATE "macro_use_protected.png", // PARSER_IMG_MACRO_USE_PROTECTED "macro_use_public.png", // PARSER_IMG_MACRO_USE_PUBLIC "macro_use_folder.png", // PARSER_IMG_MACRO_USE_FOLDER "cpp_lang.png", // tcLangKeyword nullptr }; for (const char** itr = imgs; *itr; ++itr) m_ImageList.Add(cbLoadBitmap(prefix + wxString::FromUTF8(*itr), wxBITMAP_TYPE_PNG)); EditorColourSet* theme = Manager::Get()->GetEditorManager()->GetColourSet(); wxStringTokenizer tokenizer(theme->GetKeywords(theme->GetHighlightLanguage(wxT("C/C++")), 0)); while (tokenizer.HasMoreTokens()) m_CppKeywords.push_back(tokenizer.GetNextToken()); std::sort(m_CppKeywords.begin(), m_CppKeywords.end()); wxStringVec(m_CppKeywords).swap(m_CppKeywords); typedef cbEventFunctor<ClangPlugin, CodeBlocksEvent> ClEvent; Manager::Get()->RegisterEventSink(cbEVT_EDITOR_OPEN, new ClEvent(this, &ClangPlugin::OnEditorOpen)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_ACTIVATED, new ClEvent(this, &ClangPlugin::OnEditorActivate)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_SAVE, new ClEvent(this, &ClangPlugin::OnEditorSave)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_CLOSE, new ClEvent(this, &ClangPlugin::OnEditorClose)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_ACTIVATE, new ClEvent(this, &ClangPlugin::OnProjectActivate)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_FILE_CHANGED, new ClEvent(this, &ClangPlugin::OnProjectFileChanged)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_OPTIONS_CHANGED, new ClEvent(this, &ClangPlugin::OnProjectOptionsChanged)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_CLOSE, new ClEvent(this, &ClangPlugin::OnProjectClose)); Connect(idReparseTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idGotoDeclaration, wxEVT_COMMAND_MENU_SELECTED, /*wxMenuEventHandler*/wxCommandEventHandler(ClangPlugin::OnGotoDeclaration), nullptr, this); //Connect(idReparse, cbEVT_COMMAND_REPARSE, wxCommandEventHandler(ClangPlugin::OnReparse), nullptr, this); Connect(idClangCreateTU, cbEVT_COMMAND_CREATETU, wxCommandEventHandler(ClangPlugin::OnCreateTranslationUnit), nullptr, this); Connect(idClangCreateTU, cbEVT_CLANG_ASYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangCreateTUFinished), nullptr, this); Connect(idClangReparse, cbEVT_CLANG_ASYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangReparseFinished), nullptr, this); Connect(idClangGetDiagnostics, cbEVT_CLANG_ASYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangGetDiagnosticsFinished), nullptr, this); Connect(idClangSyncTask, cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); Connect(idClangCodeCompleteTask, cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); Connect(idClangGetOccurrencesTask, cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); Connect(idClangGetCCDocumentationTask,cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); m_EditorHookId = EditorHooks::RegisterHook(new EditorHooks::HookFunctor<ClangPlugin>(this, &ClangPlugin::OnEditorHook)); for ( std::vector<ClangPluginComponent*>::iterator it = m_ComponentList.begin(); it != m_ComponentList.end(); ++it) { (*it)->OnAttach(this); } }
bool ThreadSearchView::UpdatePreview(const wxString& file, long line) { bool success(true); if ( line > 0 ) { // Line display begins at 1 but line index at 0 line--; } // Disable read only m_pSearchPreview->Enable(false); m_pSearchPreview->SetReadOnly(false); // Loads file if different from current loaded wxFileName filename(file); if ( (m_PreviewFilePath != file) || (m_PreviewFileDate != filename.GetModificationTime()) ) { ConfigManager* mgr = Manager::Get()->GetConfigManager(_T("editor")); // Remember current file path and modification time m_PreviewFilePath = file; m_PreviewFileDate = filename.GetModificationTime(); EncodingDetector enc(m_PreviewFilePath, false); success = enc.IsOK(); m_pSearchPreview->SetText(enc.GetWxStr()); // Colorize cbEditor::ApplyStyles(m_pSearchPreview); EditorColourSet EdColSet; EdColSet.Apply(EdColSet.GetLanguageForFilename(m_PreviewFilePath), m_pSearchPreview, false, true); SetFoldingIndicator(mgr->ReadInt(_T("/folding/indicator"), 2)); UnderlineFoldedLines(mgr->ReadBool(_T("/folding/underline_folded_line"), true)); } if ( success == true ) { // Display the selected line int onScreen = m_pSearchPreview->LinesOnScreen() >> 1; m_pSearchPreview->GotoLine(line - onScreen); m_pSearchPreview->GotoLine(line + onScreen); m_pSearchPreview->GotoLine(line); m_pSearchPreview->EnsureVisible(line); int startPos = m_pSearchPreview->PositionFromLine(line); int endPos = m_pSearchPreview->GetLineEndPosition(line); m_pSearchPreview->SetSelectionVoid(endPos, startPos); }
void MiniDocPanel::ChangeMiniStcDoc(cbEditor *ed) { if(ed) { miniStc_->SetDocPointer(ed->GetControl()->GetDocPointer()); EditorColourSet *ecs = Manager::Get()->GetEditorManager()->GetColourSet(); ecs->Apply(ed->GetLanguage(), miniStc_); // for (unsigned int style = 0 ; style <= wxSCI_STYLE_MAX ; ++style) // miniStc_->StyleSetSize(style, 3); miniStc_->UpdateMiniature(ed->GetControl(),true); } else { miniStc_->SetDocPointer(NULL); } }
void AbbreviationsConfigPanel::ApplyColours() { EditorColourSet* theme = Manager::Get()->GetEditorManager()->GetColourSet(); if (theme) { wxString FontString = Manager::Get()->GetConfigManager(_T("editor"))->Read(_T("/font"), wxEmptyString); wxFont tmpFont(10, wxMODERN, wxNORMAL, wxNORMAL); if (!FontString.IsEmpty()) { wxNativeFontInfo nfi; nfi.FromString(FontString); tmpFont.SetNativeFontInfo(nfi); } if (m_AutoCompTextControl) { m_AutoCompTextControl->StyleSetFont(wxSCI_STYLE_DEFAULT, tmpFont); theme->Apply(theme->GetHighlightLanguage(_T("C/C++")), m_AutoCompTextControl); } } }
FInfoWindow::FInfoWindow() :wxPanel(Manager::Get()->GetAppWindow()) { //ctor m_pView = new cbStyledTextCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(1,1)); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(m_pView, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 0); SetSizer(sizer); sizer->Fit(this); sizer->SetSizeHints(this); m_pView->SetReadOnly(true); // Colorize cbEditor::ApplyStyles(m_pView); EditorColourSet edColSet; edColSet.Apply(edColSet.GetLanguageForFilename(_T("name.f90")), m_pView); SetFoldingIndicator(); CodeBlocksLogEvent evtAdd(cbEVT_ADD_LOG_WINDOW, this, _("Fortran info")); Manager::Get()->ProcessEvent(evtAdd); }
size_t CodeRefactoring::VerifyResult(const TokenIdxSet& targetResult, const wxString& targetText, bool isLocalVariable) { EditorManager* edMan = Manager::Get()->GetEditorManager(); cbEditor* editor = edMan->GetBuiltinActiveEditor(); if (!editor) return 0; const Token* parentOfLocalVariable = nullptr; if (isLocalVariable) { TokenTree* tree = m_NativeParser.GetParser().GetTokenTree(); CC_LOCKER_TRACK_TT_MTX_LOCK(s_TokenTreeMutex) const Token* token = tree->at(*targetResult.begin()); parentOfLocalVariable = tree->at(token->m_ParentIndex); CC_LOCKER_TRACK_TT_MTX_UNLOCK(s_TokenTreeMutex) } // now that list is filled, we'll search cbStyledTextCtrl* control = new cbStyledTextCtrl(editor->GetParent(), wxID_ANY, wxDefaultPosition, wxSize(0, 0)); control->Show(false); // styled the text to support control->GetStyleAt() cbEditor::ApplyStyles(control); EditorColourSet edColSet; size_t totalCount = 0; for (SearchDataMap::const_iterator it = m_SearchDataMap.begin(); it != m_SearchDataMap.end(); ++it) totalCount += it->second.size(); // let's create a progress dialog because it might take some time depending on the files count wxProgressDialog* progress = new wxProgressDialog(_("Code Refactoring"), _("Please wait while verifying result..."), totalCount, Manager::Get()->GetAppWindow(), wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_CAN_ABORT); PlaceWindow(progress); size_t task = totalCount; TokenIdxSet result; bool userBreak = false; for (SearchDataMap::iterator it = m_SearchDataMap.begin(); it != m_SearchDataMap.end();) { // check if the file is already opened in built-in editor and do search in it cbEditor* ed = edMan->IsBuiltinOpen(it->first); if (ed) control->SetText(ed->GetControl()->GetText()); else // else load the file in the control { EncodingDetector detector(it->first); if (!detector.IsOK()) { task -= it->second.size(); m_SearchDataMap.erase(it++); continue; // failed } control->SetText(detector.GetWxStr()); } // apply the corlor setting edColSet.Apply(editor->GetLanguage(), control); ccSearchData searchData = { control, it->first }; for (SearchDataList::iterator itList = it->second.begin(); itList != it->second.end();) { // update the progress bar if (!progress->Update(totalCount - (--task))) { userBreak = true; break; // user pressed "Cancel" } // skip string or comment const int style = control->GetStyleAt(itList->pos); if (control->IsString(style) || control->IsComment(style)) { it->second.erase(itList++); continue; } // do cc search const int endOfWord = itList->pos + targetText.Len(); control->GotoPos(endOfWord); m_NativeParser.MarkItemsByAI(&searchData, result, true, false, true, endOfWord); if (result.empty()) { it->second.erase(itList++); continue; } // verify result TokenIdxSet::const_iterator findIter = targetResult.begin(); for (; findIter != targetResult.end(); ++findIter) { if (result.find(*findIter) != result.end()) break; } if (findIter == targetResult.end()) // not found it->second.erase(itList++); else { // handle for local variable if (isLocalVariable) { bool do_continue = false; TokenTree* tree = m_NativeParser.GetParser().GetTokenTree(); CC_LOCKER_TRACK_TT_MTX_LOCK(s_TokenTreeMutex) const Token* token = tree->at(*findIter); if (token) { const Token* parent = tree->at(token->m_ParentIndex); if (parent != parentOfLocalVariable) { it->second.erase(itList++); do_continue = true; } } CC_LOCKER_TRACK_TT_MTX_UNLOCK(s_TokenTreeMutex) if (do_continue) continue; } ++itList; } } if (it->second.empty()) m_SearchDataMap.erase(it++); else ++it; if (userBreak) break; } delete control; // done with it delete progress; // done here too return m_SearchDataMap.size(); }
void ClangPlugin::OnAttach() { wxBitmap bmp; wxString prefix = ConfigManager::GetDataFolder() + wxT("/images/codecompletion/"); // bitmaps must be added by order of PARSER_IMG_* consts (which are also TokenCategory enums) bmp = cbLoadBitmap(prefix + wxT("class_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_FOLDER bmp = cbLoadBitmap(prefix + wxT("class.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS bmp = cbLoadBitmap(prefix + wxT("class_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_PRIVATE bmp = cbLoadBitmap(prefix + wxT("class_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_PROTECTED bmp = cbLoadBitmap(prefix + wxT("class_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_PUBLIC bmp = cbLoadBitmap(prefix + wxT("ctor_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CTOR_PRIVATE bmp = cbLoadBitmap(prefix + wxT("ctor_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CTOR_PROTECTED bmp = cbLoadBitmap(prefix + wxT("ctor_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CTOR_PUBLIC bmp = cbLoadBitmap(prefix + wxT("dtor_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_DTOR_PRIVATE bmp = cbLoadBitmap(prefix + wxT("dtor_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_DTOR_PROTECTED bmp = cbLoadBitmap(prefix + wxT("dtor_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_DTOR_PUBLIC bmp = cbLoadBitmap(prefix + wxT("method_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNC_PRIVATE bmp = cbLoadBitmap(prefix + wxT("method_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNC_PRIVATE bmp = cbLoadBitmap(prefix + wxT("method_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNC_PUBLIC bmp = cbLoadBitmap(prefix + wxT("var_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VAR_PRIVATE bmp = cbLoadBitmap(prefix + wxT("var_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VAR_PROTECTED bmp = cbLoadBitmap(prefix + wxT("var_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VAR_PUBLIC bmp = cbLoadBitmap(prefix + wxT("macro_def.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_DEF bmp = cbLoadBitmap(prefix + wxT("enum.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM bmp = cbLoadBitmap(prefix + wxT("enum_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM_PRIVATE bmp = cbLoadBitmap(prefix + wxT("enum_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM_PROTECTED bmp = cbLoadBitmap(prefix + wxT("enum_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM_PUBLIC bmp = cbLoadBitmap(prefix + wxT("enumerator.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUMERATOR bmp = cbLoadBitmap(prefix + wxT("namespace.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_NAMESPACE bmp = cbLoadBitmap(prefix + wxT("typedef.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF bmp = cbLoadBitmap(prefix + wxT("typedef_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_PRIVATE bmp = cbLoadBitmap(prefix + wxT("typedef_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_PROTECTED bmp = cbLoadBitmap(prefix + wxT("typedef_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_PUBLIC bmp = cbLoadBitmap(prefix + wxT("symbols_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_SYMBOLS_FOLDER bmp = cbLoadBitmap(prefix + wxT("vars_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VARS_FOLDER bmp = cbLoadBitmap(prefix + wxT("funcs_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNCS_FOLDER bmp = cbLoadBitmap(prefix + wxT("enums_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUMS_FOLDER bmp = cbLoadBitmap(prefix + wxT("macro_def_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_DEF_FOLDER bmp = cbLoadBitmap(prefix + wxT("others_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_OTHERS_FOLDER bmp = cbLoadBitmap(prefix + wxT("typedefs_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_FOLDER bmp = cbLoadBitmap(prefix + wxT("macro_use.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE bmp = cbLoadBitmap(prefix + wxT("macro_use_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_PRIVATE bmp = cbLoadBitmap(prefix + wxT("macro_use_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_PROTECTED bmp = cbLoadBitmap(prefix + wxT("macro_use_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_PUBLIC bmp = cbLoadBitmap(prefix + wxT("macro_use_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_FOLDER bmp = cbLoadBitmap(prefix + wxT("cpp_lang.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // tcLangKeyword EditorColourSet* theme = Manager::Get()->GetEditorManager()->GetColourSet(); wxStringTokenizer tokenizer(theme->GetKeywords(theme->GetHighlightLanguage(wxT("C/C++")), 0)); while (tokenizer.HasMoreTokens()) m_CppKeywords.push_back(tokenizer.GetNextToken()); std::sort(m_CppKeywords.begin(), m_CppKeywords.end()); wxStringVec(m_CppKeywords).swap(m_CppKeywords); typedef cbEventFunctor<ClangPlugin, CodeBlocksEvent> ClEvent; Manager::Get()->RegisterEventSink(cbEVT_EDITOR_OPEN, new ClEvent(this, &ClangPlugin::OnEditorOpen)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_ACTIVATED, new ClEvent(this, &ClangPlugin::OnEditorActivate)); Connect(idEdOpenTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idReparseTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idDiagnosticTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idGotoDeclaration, wxEVT_COMMAND_MENU_SELECTED, /*wxMenuEventHandler*/wxCommandEventHandler(ClangPlugin::OnGotoDeclaration), nullptr, this); m_EditorHookId = EditorHooks::RegisterHook(new EditorHooks::HookFunctor<ClangPlugin>(this, &ClangPlugin::OnEditorHook)); }