/* TextEditor::onUpdateUI * Called when anything is modified in the text editor (cursor * position, styling, text, etc) *******************************************************************/ void TextEditor::onUpdateUI(wxStyledTextEvent& e) { // Check for brace match if (txed_brace_match) checkBraceMatch(); // If a calltip is open, update it if (call_tip->IsShown()) updateCalltip(); // Do word matching if appropriate if (txed_match_cursor_word && language) { int word_start = WordStartPosition(GetCurrentPos(), true); int word_end = WordEndPosition(GetCurrentPos(), true); string current_word = GetTextRange(word_start, word_end); if (!current_word.IsEmpty() && HasFocus()) { if (current_word != prev_word_match) { prev_word_match = current_word; SetIndicatorCurrent(8); IndicatorClearRange(0, GetTextLength()); SetTargetStart(0); SetTargetEnd(GetTextLength()); SetSearchFlags(0); while (SearchInTarget(current_word) != -1) { IndicatorFillRange(GetTargetStart(), GetTargetEnd() - GetTargetStart()); SetTargetStart(GetTargetEnd()); SetTargetEnd(GetTextLength()); } } } else { SetIndicatorCurrent(8); IndicatorClearRange(0, GetTextLength()); prev_word_match = ""; } } // Hilight current line MarkerDeleteAll(1); MarkerDeleteAll(2); if (txed_hilight_current_line > 0 && HasFocus()) { int line = LineFromPosition(GetCurrentPos()); MarkerAdd(line, 1); if (txed_hilight_current_line > 1) MarkerAdd(line, 2); } e.Skip(); }
void StyledTextCtrl::OnMarginClick(wxStyledTextEvent& event) { int lineClick = LineFromPosition(event.GetPosition()); int levelClick = GetFoldLevel(lineClick); switch (event.GetMargin()) { case MARGIN_FOLD: if ((levelClick & wxSTC_FOLDLEVELHEADERFLAG) > 0) { ToggleFold(lineClick); } break; case MARGIN_LINE_BREAKS: if (MarkerGet(lineClick) == 0) { MarkerAdd(lineClick, 0); } else { MarkerDelete(lineClick, 0); } break; case MARGIN_LINE_EDITS: break; case MARGIN_LINE_NUMBERS: break; default: break; } }
/// Refresh the breakpoint marks. void OnChangedBreakpoints(wxDebugEvent &/*event*/) { MarkerDeleteAll(MARKNUM_BREAKPOINT); BreakpointList &bps = Mediator::Get()->GetBreakpoints(); Breakpoint bp; for (bp = bps.First(GetKey()); bp.IsOk(); bp = bps.Next(bp)) { MarkerAdd(bp.GetLine(), MARKNUM_BREAKPOINT); } }
void MiniStyledTextCtrl::SetMarker() { Freeze(); MarkerDeleteAll(GetOurMarkerNumber()); MarkerSetBackground(GetOurMarkerNumber(), backgroundColour_); if (inverseMarker_) { for (int l = visibleFrom; l < visibleFrom+visibleLength ; ++l) MarkerAdd(l, GetOurMarkerNumber()); } else { for (int l = 0; l < visibleFrom ; ++l) MarkerAdd(l, GetOurMarkerNumber()); for (int l = visibleFrom+visibleLength; l < GetLineCount() ; ++l) MarkerAdd(l, GetOurMarkerNumber()); } Thaw(); }
void DisassemblyTextCtrl::OnDclick(wxMouseEvent& event) { if(GetStatus()) { SetStatus(0); PluginsArray plugins = Manager::Get()->GetPluginManager()->GetDebuggerOffers(); if (plugins.GetCount()) { cbDebuggerPlugin* dbg = (cbDebuggerPlugin*)plugins[0]; if (dbg) { // is the debugger running? if (dbg->IsRunning()) { dbg->StepByStep(); } } } } int LineNum = GetCurrentLine(); int L2 = GetCurrentLine(); wxString LineText,SourceFile; unsigned long SourceLine=0; while(LineNum > 0) { LineText = GetLine(LineNum--); if(reRelativePath.Matches(LineText)) break; } if(LineText.IsEmpty()) return ; LineText.AfterLast(_T(':')).ToULong(&SourceLine,10); SourceFile = Manager::Get()->GetProjectManager()->GetActiveProject()->GetBasePath(); SourceFile << LineText.Before(_T(':')); SyncEditor(LineText.Before(_T(':')),SourceLine,true); SetReadOnly(false); MarkerDeleteAll(DEBUG_MARKER); MarkerAdd(SourceLine,DEBUG_MARKER); SetReadOnly(true); //wxMessageBox(wxString::Format(_T("%s:%d"),SourceFile.c_str(),SourceLine)); event.Skip(); }
void MiniStyledTextCtrl::SetMarker() { ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("editor")); bool inverse = cfg->ReadBool(_T("/mini_doc/inverse_designator"), false); Freeze(); wxColor color = Manager::Get()->GetColourManager()->GetColour(wxT("minidoc_background")); MarkerDeleteAll(GetOurMarkerNumber()); MarkerSetBackground(GetOurMarkerNumber(), color); if (inverse) { for (int l = visibleFrom; l < visibleFrom+visibleLength ; ++l) MarkerAdd(l, GetOurMarkerNumber()); } else { for (int l = 0; l < visibleFrom ; ++l) MarkerAdd(l, GetOurMarkerNumber()); for (int l = visibleFrom+visibleLength; l < GetLineCount() ; ++l) MarkerAdd(l, GetOurMarkerNumber()); } Thaw(); }
bool wxSTEditorShell::CheckPrompt(bool set) { int total_lines = GetLineCount(); total_lines = wxMax(0, total_lines-1); bool has_prompt = (MarkerGet(total_lines) & (1<<markerPrompt)) != 0; if (set && !has_prompt) { MarkerAdd(total_lines, markerPrompt); return true; } return has_prompt; }
void ZoomText::HighlightLines(int start, int end) { int nLineCount = end - start; int lastLine = LineFromPosition(GetLength()); if(lastLine < end) { end = lastLine; start = end - nLineCount; if(start < 0) start = 0; } MarkerDeleteAll(1); for(int i = start; i <= end; ++i) { MarkerAdd(i, 1); } }
bool wxExEx::Substitute( const wxString& begin_address, const wxString& end_address, const wxString& patt, const wxString& repl) { if (m_STC->GetReadOnly()) { return false; } if (m_STC->HexMode()) { wxLogStatus(_("Not allowed in hex mode")); return false; } const int begin_line = ToLineNumber(begin_address); const int end_line = ToLineNumber(end_address); if (begin_line == 0 || end_line == 0 || end_line < begin_line) { return false; } if (!MarkerAdd('$', end_line - 1)) { return false; } const wxString pattern = (patt == "~" ? m_Replacement: patt); wxString replacement(repl); m_Replacement = replacement; m_STC->SetSearchFlags(m_SearchFlags); int nr_replacements = 0; m_STC->BeginUndoAction(); m_STC->SetTargetStart(m_STC->PositionFromLine(begin_line - 1)); m_STC->SetTargetEnd(m_STC->GetLineEndPosition(MarkerLine('$'))); while (m_STC->SearchInTarget(pattern) > 0) { const int target_start = m_STC->GetTargetStart(); if (target_start >= m_STC->GetTargetEnd()) { break; } if (replacement.Contains("&")) { wxString target = m_STC->GetTextRange( m_STC->GetTargetStart(), m_STC->GetTargetEnd()); if (replacement.StartsWith("\\L")) { target.MakeLower(); replacement.Replace("\\L", wxEmptyString); } else if (replacement.StartsWith("\\U")) { target.MakeUpper(); replacement.Replace("\\U", wxEmptyString); } replacement.Replace("&", target); } m_STC->MarkTargetChange(); const int length = m_STC->ReplaceTargetRE(replacement); // always RE! m_STC->SetTargetStart(target_start + length); m_STC->SetTargetEnd(m_STC->GetLineEndPosition(MarkerLine('$'))); nr_replacements++; } m_STC->EndUndoAction(); MarkerDelete('$'); m_Frame->ShowExMessage(wxString::Format(_("Replaced: %d occurrences of: %s"), nr_replacements, pattern.c_str())); return true; }
void SourceView::showFile(std::wstring path, int proclinenum, const std::vector<double> &linecounts) { currentfile = path; // Don't show error messages with CPP highlighting setPlainMode(); if (path == "[hint KiFastSystemCallRet]") { updateText( " Hint: KiFastSystemCallRet often means the thread was waiting for something else to finish.\n" " \n" " Possible causes might be disk I/O, waiting for an event, or maybe just calling Sleep().\n" ); return; } if (path == "" || path == "[unknown]") { updateText("[ No source file available for this location. ]"); return; } FILE *file = _wfopen(path.c_str(),L"r, ccs=UNICODE"); if(!file) { wchar_t *crtSub = L"\\crt\\src\\"; wchar_t *crt = wcsstr((wchar_t *)path.c_str(), crtSub); if(crt) { for(size_t i=0;i<msDevPaths.size();i++) { std::wstring newPath(msDevPaths[i]); newPath += crt+wcslen(crtSub); path = newPath; file = _wfopen(path.c_str(),L"r"); if(file) break; } } } if(!file) { updateText(std::wstring("[ Could not open file '" + path + "'. ]").c_str()); return; } std::wstring displaytext; wchar_t line[1024]; while(fgetws(line,countof(line),file)) { displaytext += line; } fclose(file); setCppMode(); updateText(displaytext); // Show line counts in margin for (int line=1,lineCount=linecounts.size(); line<lineCount; ++line) { if (linecounts[line]) { wchar_t currCount[32]; swprintf(currCount, countof(currCount), L"%0.2fs ", linecounts[line]); MarginSetText (line-1, currCount); MarginSetStyle(line-1, MARGIN_TEXT_STYLE); } } SetYCaretPolicy(wxSTC_CARET_STRICT|wxSTC_CARET_EVEN, 0); GotoLine(proclinenum); SetYCaretPolicy(wxSTC_CARET_EVEN, 0); MarkerDefine(1, wxSTC_MARK_BACKGROUND, wxNullColour, *wxYELLOW); MarkerAdd(proclinenum-1, 1); }