本文整理汇总了C++中IEditor::GetCurrentPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ IEditor::GetCurrentPosition方法的具体用法?C++ IEditor::GetCurrentPosition怎么用?C++ IEditor::GetCurrentPosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IEditor
的用法示例。
在下文中一共展示了IEditor::GetCurrentPosition方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnCodeCompleted
void XMLCodeCompletion::OnCodeCompleted(clCodeCompletionEvent& event)
{
event.Skip();
if(event.GetEventObject() != this) {
return;
}
// sanity
IEditor* editor = clGetManager()->GetActiveEditor();
if(!editor) return;
// HTML triggered the code complete?
if(m_completeReason == kHtmlOpenSequence) {
event.Skip(false);
const wxString& selection = event.GetWord();
if(XMLBuffer::IsEmptyHtmlTag(selection) && !HasSpecialInsertPattern(selection)) {
// an empty html tag, just complete it
wxString textToInsert = selection;
textToInsert << ">";
int selStart = GetWordStartPos(editor);
int selEnd = editor->GetCurrentPosition();
if((selEnd - selStart) >= 0) {
editor->SelectText(selStart, selEnd - selStart);
editor->ReplaceSelection(textToInsert);
editor->SetCaretAt(selStart + textToInsert.length());
}
} else {
wxString completePattern = GetCompletePattern(selection);
int caretPos = completePattern.Find("|");
completePattern.Replace("|", "");
int selStart = GetWordStartPos(editor);
int selEnd = editor->GetCurrentPosition();
if((selEnd - selStart) >= 0) {
editor->SelectText(selStart, selEnd - selStart);
editor->ReplaceSelection(completePattern);
editor->SetCaretAt(selStart + caretPos);
}
}
} else if(m_completeReason == kCloseSequence) {
// User typed "</"
event.Skip(false);
const wxString& selection = event.GetWord();
int selStart = GetWordStartPos(editor);
int selEnd = editor->GetCurrentPosition();
if((selEnd - selStart) >= 0) {
editor->SelectText(selStart, selEnd - selStart);
editor->ReplaceSelection(selection);
editor->SetCaretAt(selStart + selection.length());
}
} else {
event.Skip();
}
}
示例2: OnFunctionCallTip
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);
}
}
}
}
}
示例3: OnMenuExpandSwitch
//------------------------------------------------------------
void SnipWiz::OnMenuExpandSwitch(wxCommandEvent& e)
{
IEditor* editor = GetEditor();
if(!editor) return;
bool isSelection = false;
wxString var = editor->GetSelection();
if(!var.IsEmpty()) isSelection = true;
var = ::wxGetTextFromUser(_("Enter identifier name"), _("switch(...)"), var);
if(var.IsEmpty()) return;
long count = ::wxGetNumberFromUser(_("Enter number of cases"), _("Cases:"), _("switch(...)"), 1, 1, 20);
if(count < 1) return;
int curEol = editor->GetEOL();
int curPos = editor->GetCurrentPosition();
wxString tabs = GetTabs(editor, curPos);
wxString output = wxString::Format(wxT("switch( %s )%s%s{%s"), var.c_str(), eol[curEol].c_str(), tabs.c_str(),
eol[curEol].c_str());
for(long i = 0; i < count; i++)
output += wxString::Format(wxT("%scase :%s%sbreak;%s"), tabs.c_str(), eol[curEol].c_str(), tabs.c_str(),
eol[curEol].c_str());
output += tabs.c_str();
output += wxT("}");
if(isSelection)
editor->ReplaceSelection(output);
else
editor->InsertText(curPos, output);
}
示例4: OnInsertDoxyComment
void PHPEditorContextMenu::OnInsertDoxyComment(wxCommandEvent& e)
{
IEditor* editor = m_manager->GetActiveEditor();
if(editor) {
PHPEntityBase::Ptr_t entry =
PHPCodeCompletion::Instance()->GetPHPEntityAtPos(editor, editor->GetCurrentPosition());
if(entry) {
wxStyledTextCtrl* ctrl = editor->GetCtrl();
ctrl->BeginUndoAction();
wxString comment = entry->FormatPhpDoc();
// Create the whitespace buffer
int lineStartPos = ctrl->PositionFromLine(ctrl->GetCurrentLine());
int lineEndPos = lineStartPos + ctrl->LineLength(ctrl->GetCurrentLine());
// Collect all whitespace from the begining of the line until the first non whitespace
// character we find
wxString whitespace;
for(int i = lineStartPos; lineStartPos < lineEndPos; ++i) {
if(ctrl->GetCharAt(i) == ' ' || ctrl->GetCharAt(i) == '\t') {
whitespace << (wxChar)ctrl->GetCharAt(i);
} else {
break;
}
}
// Prepare the comment block
wxArrayString lines = ::wxStringTokenize(comment, "\n", wxTOKEN_STRTOK);
for(size_t i = 0; i < lines.size(); ++i) {
lines.Item(i).Prepend(whitespace);
}
// Glue the lines back together
wxString doxyBlock = ::wxJoin(lines, '\n');
doxyBlock << "\n";
// Insert the text
ctrl->InsertText(lineStartPos, doxyBlock);
// Try to place the caret after the @brief
wxRegEx reBrief("[@\\]brief[ \t]*");
if(reBrief.IsValid() && reBrief.Matches(doxyBlock)) {
wxString match = reBrief.GetMatch(doxyBlock);
// Get the index
int where = doxyBlock.Find(match);
if(where != wxNOT_FOUND) {
where += match.length();
int caretPos = lineStartPos + where;
editor->SetCaretAt(caretPos);
// Remove the @brief as its non standard in the PHP world
editor->GetCtrl()->DeleteRange(caretPos - match.length(), match.length());
}
}
editor->GetCtrl()->EndUndoAction();
}
}
}
示例5: OnCodeComplete
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);
}
}
}
}
}
}
示例6: OnInsert
void CMakeHelpTab::OnInsert(wxCommandEvent& event)
{
IManager* manager = m_plugin->GetManager();
wxASSERT(manager);
IEditor* editor = manager->GetActiveEditor();
// No active editor
if(!editor) return;
// Insert value
editor->InsertText(editor->GetCurrentPosition(), m_listBoxList->GetString(event.GetInt()));
}
示例7: OnFindSymbol
void PHPCodeCompletion::OnFindSymbol(clCodeCompletionEvent& e)
{
if(PHPWorkspace::Get()->IsOpen()) {
if(!CanCodeComplete(e)) return;
IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor());
if(editor) {
PHPEntityBase::Ptr_t resolved = GetPHPEntryUnderTheAtPos(editor, editor->GetCurrentPosition());
if(resolved) {
m_manager->OpenFile(resolved->GetFilename().GetFullPath(), "", resolved->GetLine());
}
}
} else {
e.Skip();
}
}
示例8: OnGenerateSettersGetters
void PHPEditorContextMenu::OnGenerateSettersGetters(wxCommandEvent& e)
{
// CHeck the current context
IEditor* editor = m_manager->GetActiveEditor();
if(editor) {
// determine the scope name at the current position
// Parse until the current position
wxString text = editor->GetTextRange(0, editor->GetCurrentPosition());
PHPSourceFile sourceFile(text);
sourceFile.SetParseFunctionBody(true);
sourceFile.SetFilename(editor->GetFileName());
sourceFile.Parse();
const PHPEntityClass* scopeAtPoint = sourceFile.Class()->Cast<PHPEntityClass>();
if(!scopeAtPoint) {
// Could not determine the scope at the give location
return;
}
// get the class name
wxString className = scopeAtPoint->GetShortName();
// generate the code to generate
wxString textToAdd;
PHPSettersGettersDialog dlg(EventNotifier::Get()->TopFrame(), editor, m_manager);
if(dlg.ShowModal() == wxID_OK) {
PHPSetterGetterEntry::Vec_t members = dlg.GetMembers();
for(size_t i = 0; i < members.size(); ++i) {
textToAdd << members.at(i).GetSetter(dlg.GetScope(), dlg.GetFlags()) << "\n";
textToAdd << members.at(i).GetGetter(dlg.GetFlags()) << "\n";
}
if(!textToAdd.IsEmpty()) {
int line = PHPCodeCompletion::Instance()->GetLocationForSettersGetters(
editor->GetTextRange(0, editor->GetLength()), className);
if(!textToAdd.IsEmpty() && line != wxNOT_FOUND) {
editor->GetCtrl()->InsertText(editor->PosFromLine(line), textToAdd);
}
}
}
}
}
示例9: OnMenuPaste
//------------------------------------------------------------
void SnipWiz::OnMenuPaste(wxCommandEvent& e)
{
wxUnusedVar(e);
IEditor* editor = GetEditor();
if(!editor) return;
if(m_clipboard.IsEmpty()) return;
// otherwise insert text
wxString output = FormatOutput(editor, m_clipboard);
wxString selection = editor->GetSelection();
int curPos = editor->GetCurrentPosition() - selection.Len();
// get caret position
long cursorPos = output.Find(REAL_CARET_STR);
if(cursorPos != wxNOT_FOUND) output.Remove(cursorPos, wxStrlen(REAL_CARET_STR));
editor->ReplaceSelection(output);
// set caret
if(cursorPos != wxNOT_FOUND)
editor->SetCaretAt(curPos + cursorPos);
else
editor->SetCaretAt(curPos + output.Len());
}
示例10: OnCodeComplete
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();
}
}
示例11: OnInsertDoxyBlock
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);
}
}
}
}
示例12: OnMenuSnippets
//------------------------------------------------------------
void SnipWiz::OnMenuSnippets(wxCommandEvent& e)
{
IEditor* editor = GetEditor();
if(!editor) return;
bool crtl = ::wxGetKeyState(WXK_CONTROL);
bool sourceIsMenu(false);
wxMenu* m = dynamic_cast<wxMenu*>(e.GetEventObject());
if(m) { sourceIsMenu = true; }
if(e.GetId() >= IDM_ADDSTART && e.GetId() < (IDM_ADDSTART + (int)m_snippets.GetCount())) {
wxString key = m_snippets.Item(e.GetId() - IDM_ADDSTART);
wxString srText = m_StringDb.GetSnippetString(key);
wxString selection = editor->GetSelection();
// replace template eols with current
int curEol = editor->GetEOL();
if(srText.Find(eol[2]) != wxNOT_FOUND) srText.Replace(eol[2], eol[curEol].c_str());
// Replace any escaped carets/selection strings
srText.Replace(USER_ESC_CARET, TMP_ESC_CARET_STR);
srText.Replace(USER_ESC_SELECTION, TMP_ESC_SELECTION_STR);
srText.Replace(CARET, REAL_CARET_STR);
srText.Replace(SELECTION, REAL_SELECTION_STR);
// selection ?
if(srText.Find(REAL_SELECTION_STR) != wxNOT_FOUND) srText.Replace(REAL_SELECTION_STR, selection.c_str());
// restore the escaped selection, this time without the escaping backslash
srText.Replace(TMP_ESC_SELECTION_STR, SELECTION);
// restore the escaped caret, this time without the escaping backslash
srText.Replace(TMP_ESC_CARET_STR, CARET);
// if the user pressed control while clicking
if(crtl && sourceIsMenu) {
m_clipboard = srText;
// remove caret mark if there
srText.Replace(REAL_CARET_STR, wxT(""));
// copy text to clipboard
if(wxTheClipboard->Open()) {
wxTheClipboard->SetData(new wxTextDataObject(srText));
wxTheClipboard->Close();
}
} else {
// otherwise insert text
// format the text for insertion
wxString output = FormatOutput(editor, srText);
int curPos = editor->GetCurrentPosition();
if(selection.Len() != 0) { curPos = editor->GetSelectionStart(); }
// get caret position
long cursorPos = output.Find(REAL_CARET_STR);
if(cursorPos != wxNOT_FOUND) output.Remove(cursorPos, wxStrlen(REAL_CARET_STR));
editor->ReplaceSelection(output);
// set caret
if(cursorPos != wxNOT_FOUND)
editor->SetCaretAt(curPos + cursorPos);
else
editor->SetCaretAt(curPos + output.Len());
}
}
}
示例13: InsertExpansion
bool AbbreviationPlugin::InsertExpansion(const wxString& abbreviation)
{
// get the active editor
IEditor *editor = m_mgr->GetActiveEditor();
if (!editor || !abbreviation)
return false;
// hide the completion box
if (editor->IsCompletionBoxShown()) {
editor->HideCompletionBox();
}
// search for abbreviation that matches str
// prepate list of abbreviations
AbbreviationJSONEntry jsonData;
if ( !m_config.ReadItem(&jsonData) ) {
// merge the data from the old configuration
AbbreviationEntry data;
m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data);
jsonData.SetAutoInsert( data.GetAutoInsert() );
jsonData.SetEntries( data.GetEntries() );
m_config.WriteItem( &jsonData );
}
// search for the old item
const JSONElement::wxStringMap_t& entries = jsonData.GetEntries();
JSONElement::wxStringMap_t::const_iterator iter = entries.find(abbreviation);
if (iter != entries.end()) {
wxString text = iter->second;
int selStart = editor->WordStartPos(editor->GetCurrentPosition(), true);
int selEnd = editor->WordEndPos(editor->GetCurrentPosition(), true);
int curPos = editor->GetCurrentPosition();
int typedWordLen = curPos - selStart;
if (typedWordLen < 0) {
typedWordLen = 0;
}
// format the text to insert
bool appendEol(false);
if (text.EndsWith(wxT("\r")) || text.EndsWith(wxT("\n"))) {
appendEol = true;
}
text = editor->FormatTextKeepIndent(text, selStart, Format_Text_Save_Empty_Lines);
// remove the first line indenation that might have been placed by CL
text.Trim(false).Trim();
if (appendEol) {
wxString eol;
switch (editor->GetEOL()) {
case 1:
eol = wxT("\r");
break;
case 0:
eol = wxT("\r\n");
break;
case 2:
eol = wxT("\n");
break;
}
text << eol;
}
//--------------------------------------------
// replace any place holders
//--------------------------------------------
wxString project;
text = MacroManager::Instance()->Expand(text, m_mgr, editor->GetProjectName());
// locate the caret
int where = text.Find(wxT("|"));
if (where == wxNOT_FOUND) {
where = text.length();
}
// remove the pipe (|) character
text.Replace(wxT("|"), wxT(""));
if (selEnd - selStart >= 0) {
editor->SelectText(selStart, selEnd - selStart);
editor->ReplaceSelection(text);
editor->SetCaretAt(curPos + where - typedWordLen);
}
return true;
} else
return false;
}