#include "ExternalLexer.h"
#include "wx/stc/stc.h"
#include "PlatWX.h"
+#include <wx/textbuf.h>
//----------------------------------------------------------------------
// Helper classes
ScintillaWX::ScintillaWX(wxStyledTextCtrl* win) {
capturedMouse = false;
+ focusEvent = false;
wMain = win;
stc = win;
wheelRotation = 0;
}
+// This method is overloaded from ScintillaBase in order to prevent the
+// AutoComplete window from being destroyed when it gets the focus. There is
+// a side effect that the AutoComp will also not be destroyed when switching
+// to another window, but I think that is okay.
+void ScintillaWX::CancelModes() {
+ if (! focusEvent)
+ AutoCompleteCancel();
+ ct.CallTipCancel();
+ Editor::CancelModes();
+}
+
+
void ScintillaWX::Copy() {
if (currentPos != anchor) {
void ScintillaWX::CopyToClipboard(const SelectionText& st) {
if (wxTheClipboard->Open()) {
wxTheClipboard->UsePrimarySelection(FALSE);
- wxString text = stc2wx(st.s, st.len);
+ wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len));
wxTheClipboard->SetData(new wxTextDataObject(text));
wxTheClipboard->Close();
}
if (!label[0])
((wxMenu*)popup.GetID())->AppendSeparator();
else
- ((wxMenu*)popup.GetID())->Append(cmd, stc2wx(label));
+ ((wxMenu*)popup.GetID())->Append(cmd, wxGetTranslation(stc2wx(label)));
if (!enabled)
((wxMenu*)popup.GetID())->Enable(cmd, enabled);
delete surfaceWindow;
if (paintState == paintAbandoned) {
// Painting area was insufficient to cover new styling or brace highlight positions
- FullPaint();
+ FullPaint(dc);
}
paintState = notPainting;
}
}
void ScintillaWX::DoLoseFocus(){
+ focusEvent = true;
SetFocusState(false);
+ focusEvent = false;
}
void ScintillaWX::DoGainFocus(){
+ focusEvent = true;
SetFocusState(true);
+ focusEvent = false;
}
void ScintillaWX::DoSysColourChange() {
//----------------------------------------------------------------------
// Redraw all of text area. This paint will not be abandoned.
-void ScintillaWX::FullPaint() {
+void ScintillaWX::FullPaint(wxDC *dc) {
+ wxCHECK_RET(dc != NULL, wxT("Invalid wxDC in ScintillaWX::FillPaint"));
paintState = painting;
rcPaint = GetClientRectangle();
paintingAllText = true;
- wxClientDC dc(stc);
Surface* surfaceWindow = Surface::Allocate();
- surfaceWindow->Init(&dc, wMain.GetID());
+ surfaceWindow->Init(dc, wMain.GetID());
- dc.BeginDrawing();
- ClipChildren(dc, rcPaint);
+ dc->BeginDrawing();
+ ClipChildren(*dc, rcPaint);
Paint(surfaceWindow, rcPaint);
- dc.EndDrawing();
+ dc->EndDrawing();
delete surfaceWindow;
paintState = notPainting;