void PHPCodeCompletion::OnFunctionCallTip(clCodeCompletionEvent& e) { e.Skip(); if(PHPWorkspace::Get()->IsOpen()) { if(!CanCodeComplete(e)) return; IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor) { // we handle only .php files if(IsPHPFile(editor)) { // this is our to complete e.Skip(false); // get the position PHPEntityBase::Ptr_t resolved = DoGetPHPEntryUnderTheAtPos(editor, editor->GetCurrentPosition(), true); if(resolved) { // In PHP there is no overloading, so there can be only one signature for a function // so we simply place our match into TagEntryPtrVector_t structure and pass it to the editor TagEntryPtrVector_t tags; tags.push_back(DoPHPEntityToTagEntry(resolved)); clCallTipPtr callTip(new clCallTip(tags)); editor->ShowCalltip(callTip); } } } } }
void PHPEditorContextMenu::OnMarginContextMenu(clContextMenuEvent& e) { e.Skip(); IEditor* editor = m_manager->GetActiveEditor(); if(editor && IsPHPFile(editor)) { wxMenu* menu = e.GetMenu(); // Remove non-PHP related entries from the menu if(menu->FindItem(XRCID("insert_temp_breakpoint"))) { menu->Remove(XRCID("insert_temp_breakpoint")); } if(menu->FindItem(XRCID("insert_disabled_breakpoint"))) { menu->Remove(XRCID("insert_disabled_breakpoint")); } if(menu->FindItem(XRCID("insert_cond_breakpoint"))) { menu->Remove(XRCID("insert_cond_breakpoint")); } if(menu->FindItem(XRCID("ignore_breakpoint"))) { menu->Remove(XRCID("ignore_breakpoint")); } if(menu->FindItem(XRCID("toggle_breakpoint_enabled_status"))) { menu->Remove(XRCID("toggle_breakpoint_enabled_status")); } if(menu->FindItem(XRCID("edit_breakpoint"))) { menu->Remove(XRCID("edit_breakpoint")); } } }
void PHPEditorContextMenu::OnCommentSelection(wxCommandEvent& event) { event.Skip(); IEditor* editor = m_manager->GetActiveEditor(); if(editor && IsPHPFile(editor)) { event.Skip(false); editor->CommentBlockSelection("/*", "*/"); } }
void PHPEditorContextMenu::OnCommentLine(wxCommandEvent& event) { event.Skip(); IEditor* editor = m_manager->GetActiveEditor(); if(editor && IsPHPFile(editor)) { event.Skip(false); editor->ToggleLineComment("//", wxSTC_HPHP_COMMENTLINE); } }
void PHPEditorContextMenu::OnContextMenu(clContextMenuEvent& e) { e.Skip(); IEditor* editor = m_manager->GetActiveEditor(); CHECK_PTR_RET(editor); if(editor && IsPHPFile(editor)) { DoBuildMenu(e.GetMenu(), editor); } }
void PHPCodeCompletion::OnCodeComplete(clCodeCompletionEvent& e) { e.Skip(true); if(PHPWorkspace::Get()->IsOpen()) { IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor && IsPHPFile(editor)) { e.Skip(false); // Update the settings TagsOptionsData d; clConfig ccConfig("code-completion.conf"); ccConfig.ReadItem(&d); m_lookupTable.SetSizeLimit(d.GetCcNumberOfDisplayItems()); // Check if the code completion was triggered due to user // typing '(', in this case, call OnFunctionCallTip() wxChar charAtPos = editor->GetCharAtPos(editor->GetCurrentPosition() - 1); if(charAtPos == '(') { OnFunctionCallTip(e); } else { // Perform the code completion here PHPExpression::Ptr_t expr(new PHPExpression(editor->GetTextRange(0, e.GetPosition()))); bool isExprStartsWithOpenTag = expr->IsExprStartsWithOpenTag(); PHPEntityBase::Ptr_t entity = expr->Resolve(m_lookupTable, editor->GetFileName().GetFullPath()); if(entity) { // Suggets members for the resolved entity PHPEntityBase::List_t matches; expr->Suggest(entity, m_lookupTable, matches); if(!expr->GetFilter().IsEmpty() && (expr->GetCount() == 0)) { // Word completion PHPEntityBase::List_t keywords = PhpKeywords(expr->GetFilter()); // Preprend the keywords matches.insert(matches.end(), keywords.begin(), keywords.end()); // Did user typed "<?ph" or "<?php" ?? // If so, clear the matches if(isExprStartsWithOpenTag && (expr->GetFilter() == "ph" || expr->GetFilter() == "php")) { matches.clear(); } } // Remove duplicates from the list if(!matches.empty()) { // Show the code completion box DoShowCompletionBox(matches, expr); } } } } } }
void PhpPlugin::OnShowQuickOutline(clCodeCompletionEvent& e) { IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor) { // we handle only .php files if(!IsPHPFile(editor)) { // get the position e.Skip(); return; } PHPQuickOutlineDlg dlg(m_mgr->GetTheApp()->GetTopWindow(), editor, m_mgr); dlg.ShowModal(); CallAfter(&PhpPlugin::SetEditorActive, editor); } }
PHPLocation::Ptr_t PHPCodeCompletion::FindDefinition(IEditor* editor, int pos) { CHECK_PHP_WORKSPACE_RET_NULL(); PHPLocation::Ptr_t loc; // Null if(IsPHPFile(editor)) { PHPEntityBase::Ptr_t resolved = GetPHPEntryUnderTheAtPos(editor, editor->GetCurrentPosition()); if(resolved) { loc = new PHPLocation; loc->filename = resolved->GetFilename().GetFullPath(); loc->linenumber = resolved->GetLine(); loc->what = resolved->GetShortName(); } } return loc; }
void PHPCodeCompletion::OnDismissTooltip(wxCommandEvent& e) { IEditor* editor = dynamic_cast<IEditor*>(e.GetEventObject()); if(editor) { // we handle only .php files if(IsPHPFile(editor)) { // get the position if(m_typeInfoTooltip) { m_typeInfoTooltip->Destroy(); m_typeInfoTooltip = NULL; } return; } } e.Skip(); }
void PHPCodeCompletion::OnTypeinfoTip(clCodeCompletionEvent& e) { if(PHPWorkspace::Get()->IsOpen()) { if(!CanCodeComplete(e)) return; IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor) { // we handle only .php files if(IsPHPFile(editor)) { // FIXME: implement this using the new method return; } } } else { e.Skip(); } }
PHPLocation::Ptr_t PHPCodeCompletion::FindDefinition(IEditor* editor, int pos) { CHECK_PHP_WORKSPACE_RET_NULL(); PHPLocation::Ptr_t loc; // Null if(IsPHPFile(editor)) { PHPEntityBase::Ptr_t resolved = GetPHPEntityAtPos(editor, editor->GetCurrentPosition()); if(resolved) { if(resolved->Is(kEntityTypeFunctionAlias)) { // use the internal function resolved = resolved->Cast<PHPEntityFunctionAlias>()->GetFunc(); } loc = new PHPLocation; loc->filename = resolved->GetFilename().GetFullPath(); loc->linenumber = resolved->GetLine(); loc->what = resolved->GetShortName(); } } return loc; }
void PHPCodeCompletion::OnTypeinfoTip(clCodeCompletionEvent& e) { if(PHPWorkspace::Get()->IsOpen()) { if(!CanCodeComplete(e)) return; IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor) { if(IsPHPFile(editor)) { PHPEntityBase::Ptr_t entity = GetPHPEntityAtPos(editor, e.GetPosition()); if(entity) { e.SetTooltip(entity->ToTooltip()); } return; } } } else { e.Skip(); } }
void PHPEditorContextMenu::OnPopupClicked(wxCommandEvent& event) { IEditor* editor = m_manager->GetActiveEditor(); if(editor && IsPHPFile(editor)) { switch(event.GetId()) { case wxID_OPEN_PHP_FILE: DoOpenPHPFile(); break; case wxID_GOTO_DEFINITION: DoGotoDefinition(); break; case wxID_FIND_REFERENCES: // DoFindReferences(); break; default: event.Skip(); break; } } else { event.Skip(); } }
void PHPCodeCompletion::OnCodeComplete(clCodeCompletionEvent& e) { if(PHPWorkspace::Get()->IsOpen()) { if(!CanCodeComplete(e)) return; IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor) { // we handle only .php files if(IsPHPFile(editor)) { // Check if the code completion was triggered due to user // typing '(', in this case, call OnFunctionCallTip() wxChar charAtPos = editor->GetCharAtPos(editor->GetCurrentPosition() - 1); if(charAtPos == '(') { OnFunctionCallTip(e); } else { // Perform the code completion here PHPExpression::Ptr_t expr(new PHPExpression(editor->GetTextRange(0, e.GetPosition()))); PHPEntityBase::Ptr_t entity = expr->Resolve(m_lookupTable, editor->GetFileName().GetFullPath()); if(entity) { // Suggets members for the resolved entity PHPEntityBase::List_t matches; expr->Suggest(entity, m_lookupTable, matches); // Remove duplicates from the list if(!matches.empty()) { // Show the code completion box DoShowCompletionBox(matches, expr); } } } } } } else { e.Skip(); } }
void PHPCodeCompletion::OnInsertDoxyBlock(clCodeCompletionEvent& e) { e.Skip(); // Do we have a workspace open? CHECK_COND_RET(PHPWorkspace::Get()->IsOpen()); // Sanity IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); CHECK_PTR_RET(editor); // Is this a PHP editor? CHECK_COND_RET(IsPHPFile(editor)); // Get the text from the caret current position // until the end of file wxString unsavedBuffer = editor->GetTextRange(editor->GetCurrentPosition(), editor->GetLength()); unsavedBuffer.Trim().Trim(false); PHPSourceFile source("<?php " + unsavedBuffer); source.SetParseFunctionBody(false); source.Parse(); PHPEntityBase::Ptr_t ns = source.Namespace(); if(ns) { const PHPEntityBase::List_t& children = ns->GetChildren(); for(PHPEntityBase::List_t::const_iterator iter = children.begin(); iter != children.end(); ++iter) { PHPEntityBase::Ptr_t match = *iter; if(match->GetLine() == 0 && match->Is(kEntityTypeFunction)) { e.Skip(false); // notify codelite to stop processing this event wxString phpdoc = match->FormatPhpDoc(); phpdoc.Trim(); e.SetTooltip(phpdoc); } } } }