/* static */ bool PHPCodeCompletion::CanCodeComplete(clCodeCompletionEvent& e) { int pos = e.GetPosition(); if(pos) pos -= 1; IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(!editor) return false; // we can get style 0 if we added chars and they were not styled just yet // sd we use the first style near our position (backward) int lineNumber = editor->LineFromPos(pos); int lineStartPos = editor->PosFromLine(lineNumber); if(lineStartPos > pos) return false; int styleAt(0); int retryLeft(pos - lineStartPos + 2); while((styleAt == 0) && retryLeft && pos > 0) { styleAt = editor->GetStyleAtPos(pos); if(styleAt == 0) { --pos; } --retryLeft; } return (editor && !e.IsInsideCommentOrString() && IsPHPSection(styleAt) && !IsPHPCommentOrString(styleAt)); }
void PHPEditorContextMenu::DoBuildMenu(wxMenu* menu, IEditor* editor) { // Add the default actions: // If we are placed over an include/include_once/require/require_once statement, // add an option in the menu to open it wxString includeWhat; // if this is not a PHP section than the above menu items are all we can offer int styleAtPos = editor->GetStyleAtPos(editor->GetSelectionStart()); if(!IsPHPSection(styleAtPos)) return; menu->PrependSeparator(); menu->Prepend(wxID_GOTO_DEFINITION, _("Goto definition")); wxMenu* refactoringMenu = new wxMenu; refactoringMenu->Append(wxID_ADD_DOXY_COMMENT, _("Insert Doxygen Comment")); refactoringMenu->Append(wxID_GENERATE_GETTERS_SETTERS, _("Generate Setters / Getters")); menu->AppendSeparator(); menu->Append(wxID_ANY, _("Code Generation"), refactoringMenu); if(IsIncludeOrRequireStatement(includeWhat)) { menu->PrependSeparator(); menu->Prepend(wxID_OPEN_PHP_FILE, wxString::Format(_("Open '%s'"), includeWhat.c_str())); } }