Changed how EVT_CHAR and EVT_KEY_DOWN are sent to Scintilla

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11831 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2001-10-04 17:00:26 +00:00
parent 243d4b3603
commit d6582821b6
12 changed files with 104 additions and 106 deletions

View File

@@ -1593,6 +1593,7 @@ private:
ScintillaWX* m_swx; ScintillaWX* m_swx;
wxStopWatch m_stopWatch; wxStopWatch m_stopWatch;
bool m_lastKeyDownConsumed;
friend class ScintillaWX; friend class ScintillaWX;
friend class Platform; friend class Platform;

View File

@@ -49,7 +49,6 @@ public:
void OnQuit(wxCommandEvent& event); void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event); void OnAbout(wxCommandEvent& event);
void OnStyleNeeded(wxStyledTextEvent& event);
private: private:
wxStyledTextCtrl* ed; wxStyledTextCtrl* ed;
@@ -70,7 +69,6 @@ enum
BEGIN_EVENT_TABLE(MyFrame, wxFrame) BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU (ID_Quit, MyFrame::OnQuit) EVT_MENU (ID_Quit, MyFrame::OnQuit)
EVT_MENU (ID_About, MyFrame::OnAbout) EVT_MENU (ID_About, MyFrame::OnAbout)
EVT_STC_STYLENEEDED (ID_ED, MyFrame::OnStyleNeeded)
END_EVENT_TABLE() END_EVENT_TABLE()
IMPLEMENT_APP(MyApp) IMPLEMENT_APP(MyApp)
@@ -181,14 +179,6 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
// event handlers // event handlers
void MyFrame::OnStyleNeeded(wxStyledTextEvent& event) {
int currEndStyled = ed->GetEndStyled();
ed->Colourise(currEndStyled, event.GetPosition());
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{ {
// TRUE is to force the frame to close // TRUE is to force the frame to close

View File

@@ -443,15 +443,26 @@ int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons
case WXK_BACK: key = SCK_BACK; break; case WXK_BACK: key = SCK_BACK; break;
case WXK_TAB: key = SCK_TAB; break; case WXK_TAB: key = SCK_TAB; break;
case WXK_RETURN: key = SCK_RETURN; break; case WXK_RETURN: key = SCK_RETURN; break;
case WXK_ADD: key = SCK_ADD; break; case WXK_ADD:
case WXK_SUBTRACT: key = SCK_SUBTRACT; break; case WXK_NUMPAD_ADD:
case WXK_DIVIDE: key = SCK_DIVIDE; break; key = SCK_ADD; break;
case WXK_SUBTRACT:
case WXK_NUMPAD_SUBTRACT:
key = SCK_SUBTRACT; break;
case WXK_DIVIDE:
case WXK_NUMPAD_DIVIDE:
key = SCK_DIVIDE; break;
case WXK_CONTROL: key = 0; break; case WXK_CONTROL: key = 0; break;
case WXK_ALT: key = 0; break; case WXK_ALT: key = 0; break;
case WXK_SHIFT: key = 0; break; case WXK_SHIFT: key = 0; break;
case WXK_MENU: key = 0; break;
} }
return KeyDown(key, shift, ctrl, alt, consumed); int rv = KeyDown(key, shift, ctrl, alt, consumed);
if (key)
return rv;
else
return 1;
} }

View File

@@ -137,6 +137,7 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
{ {
m_swx = new ScintillaWX(this); m_swx = new ScintillaWX(this);
m_stopWatch.Start(); m_stopWatch.Start();
m_lastKeyDownConsumed = FALSE;
} }
@@ -1833,42 +1834,39 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
if ((key > WXK_ESCAPE) && if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) {
(key != WXK_DELETE) && (key < 255) &&
!evt.ControlDown() && !evt.AltDown()) {
m_swx->DoAddChar(key); m_swx->DoAddChar(key);
} }
else {
evt.Skip();
}
} }
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
//key = toupper(key); //**** ????
bool consumed = FALSE;
int processed = m_swx->DoKeyDown(key, int processed = m_swx->DoKeyDown(key,
evt.ShiftDown(), evt.ShiftDown(),
evt.ControlDown(), evt.ControlDown(),
evt.AltDown(), evt.AltDown(),
&consumed); &m_lastKeyDownConsumed);
if (!processed && !consumed) if (!processed && !m_lastKeyDownConsumed)
evt.Skip(); evt.Skip();
} }
void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
m_swx->DoLoseFocus(); m_swx->DoLoseFocus();
} }
void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
m_swx->DoGainFocus(); m_swx->DoGainFocus();
} }
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) { void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
m_swx->DoSysColourChange(); m_swx->DoSysColourChange();
} }
void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) { void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
// do nothing to help avoid flashing // do nothing to help avoid flashing
} }

View File

@@ -137,6 +137,7 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
{ {
m_swx = new ScintillaWX(this); m_swx = new ScintillaWX(this);
m_stopWatch.Start(); m_stopWatch.Start();
m_lastKeyDownConsumed = FALSE;
} }
@@ -379,42 +380,39 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
if ((key > WXK_ESCAPE) && if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) {
(key != WXK_DELETE) && (key < 255) &&
!evt.ControlDown() && !evt.AltDown()) {
m_swx->DoAddChar(key); m_swx->DoAddChar(key);
} }
else {
evt.Skip();
}
} }
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
//key = toupper(key); //**** ????
bool consumed = FALSE;
int processed = m_swx->DoKeyDown(key, int processed = m_swx->DoKeyDown(key,
evt.ShiftDown(), evt.ShiftDown(),
evt.ControlDown(), evt.ControlDown(),
evt.AltDown(), evt.AltDown(),
&consumed); &m_lastKeyDownConsumed);
if (!processed && !consumed) if (!processed && !m_lastKeyDownConsumed)
evt.Skip(); evt.Skip();
} }
void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
m_swx->DoLoseFocus(); m_swx->DoLoseFocus();
} }
void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
m_swx->DoGainFocus(); m_swx->DoGainFocus();
} }
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) { void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
m_swx->DoSysColourChange(); m_swx->DoSysColourChange();
} }
void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) { void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
// do nothing to help avoid flashing // do nothing to help avoid flashing
} }

View File

@@ -180,6 +180,7 @@ private:
ScintillaWX* m_swx; ScintillaWX* m_swx;
wxStopWatch m_stopWatch; wxStopWatch m_stopWatch;
bool m_lastKeyDownConsumed;
friend class ScintillaWX; friend class ScintillaWX;
friend class Platform; friend class Platform;

View File

@@ -1593,6 +1593,7 @@ private:
ScintillaWX* m_swx; ScintillaWX* m_swx;
wxStopWatch m_stopWatch; wxStopWatch m_stopWatch;
bool m_lastKeyDownConsumed;
friend class ScintillaWX; friend class ScintillaWX;
friend class Platform; friend class Platform;

View File

@@ -49,7 +49,6 @@ public:
void OnQuit(wxCommandEvent& event); void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event); void OnAbout(wxCommandEvent& event);
void OnStyleNeeded(wxStyledTextEvent& event);
private: private:
wxStyledTextCtrl* ed; wxStyledTextCtrl* ed;
@@ -70,7 +69,6 @@ enum
BEGIN_EVENT_TABLE(MyFrame, wxFrame) BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU (ID_Quit, MyFrame::OnQuit) EVT_MENU (ID_Quit, MyFrame::OnQuit)
EVT_MENU (ID_About, MyFrame::OnAbout) EVT_MENU (ID_About, MyFrame::OnAbout)
EVT_STC_STYLENEEDED (ID_ED, MyFrame::OnStyleNeeded)
END_EVENT_TABLE() END_EVENT_TABLE()
IMPLEMENT_APP(MyApp) IMPLEMENT_APP(MyApp)
@@ -181,14 +179,6 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
// event handlers // event handlers
void MyFrame::OnStyleNeeded(wxStyledTextEvent& event) {
int currEndStyled = ed->GetEndStyled();
ed->Colourise(currEndStyled, event.GetPosition());
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{ {
// TRUE is to force the frame to close // TRUE is to force the frame to close

View File

@@ -443,15 +443,26 @@ int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons
case WXK_BACK: key = SCK_BACK; break; case WXK_BACK: key = SCK_BACK; break;
case WXK_TAB: key = SCK_TAB; break; case WXK_TAB: key = SCK_TAB; break;
case WXK_RETURN: key = SCK_RETURN; break; case WXK_RETURN: key = SCK_RETURN; break;
case WXK_ADD: key = SCK_ADD; break; case WXK_ADD:
case WXK_SUBTRACT: key = SCK_SUBTRACT; break; case WXK_NUMPAD_ADD:
case WXK_DIVIDE: key = SCK_DIVIDE; break; key = SCK_ADD; break;
case WXK_SUBTRACT:
case WXK_NUMPAD_SUBTRACT:
key = SCK_SUBTRACT; break;
case WXK_DIVIDE:
case WXK_NUMPAD_DIVIDE:
key = SCK_DIVIDE; break;
case WXK_CONTROL: key = 0; break; case WXK_CONTROL: key = 0; break;
case WXK_ALT: key = 0; break; case WXK_ALT: key = 0; break;
case WXK_SHIFT: key = 0; break; case WXK_SHIFT: key = 0; break;
case WXK_MENU: key = 0; break;
} }
return KeyDown(key, shift, ctrl, alt, consumed); int rv = KeyDown(key, shift, ctrl, alt, consumed);
if (key)
return rv;
else
return 1;
} }

View File

@@ -137,6 +137,7 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
{ {
m_swx = new ScintillaWX(this); m_swx = new ScintillaWX(this);
m_stopWatch.Start(); m_stopWatch.Start();
m_lastKeyDownConsumed = FALSE;
} }
@@ -1833,42 +1834,39 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
if ((key > WXK_ESCAPE) && if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) {
(key != WXK_DELETE) && (key < 255) &&
!evt.ControlDown() && !evt.AltDown()) {
m_swx->DoAddChar(key); m_swx->DoAddChar(key);
} }
else {
evt.Skip();
}
} }
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
//key = toupper(key); //**** ????
bool consumed = FALSE;
int processed = m_swx->DoKeyDown(key, int processed = m_swx->DoKeyDown(key,
evt.ShiftDown(), evt.ShiftDown(),
evt.ControlDown(), evt.ControlDown(),
evt.AltDown(), evt.AltDown(),
&consumed); &m_lastKeyDownConsumed);
if (!processed && !consumed) if (!processed && !m_lastKeyDownConsumed)
evt.Skip(); evt.Skip();
} }
void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
m_swx->DoLoseFocus(); m_swx->DoLoseFocus();
} }
void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
m_swx->DoGainFocus(); m_swx->DoGainFocus();
} }
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) { void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
m_swx->DoSysColourChange(); m_swx->DoSysColourChange();
} }
void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) { void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
// do nothing to help avoid flashing // do nothing to help avoid flashing
} }

View File

@@ -137,6 +137,7 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
{ {
m_swx = new ScintillaWX(this); m_swx = new ScintillaWX(this);
m_stopWatch.Start(); m_stopWatch.Start();
m_lastKeyDownConsumed = FALSE;
} }
@@ -379,42 +380,39 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
if ((key > WXK_ESCAPE) && if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed) {
(key != WXK_DELETE) && (key < 255) &&
!evt.ControlDown() && !evt.AltDown()) {
m_swx->DoAddChar(key); m_swx->DoAddChar(key);
} }
else {
evt.Skip();
}
} }
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
long key = evt.KeyCode(); long key = evt.KeyCode();
//key = toupper(key); //**** ????
bool consumed = FALSE;
int processed = m_swx->DoKeyDown(key, int processed = m_swx->DoKeyDown(key,
evt.ShiftDown(), evt.ShiftDown(),
evt.ControlDown(), evt.ControlDown(),
evt.AltDown(), evt.AltDown(),
&consumed); &m_lastKeyDownConsumed);
if (!processed && !consumed) if (!processed && !m_lastKeyDownConsumed)
evt.Skip(); evt.Skip();
} }
void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
m_swx->DoLoseFocus(); m_swx->DoLoseFocus();
} }
void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) { void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
m_swx->DoGainFocus(); m_swx->DoGainFocus();
} }
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) { void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
m_swx->DoSysColourChange(); m_swx->DoSysColourChange();
} }
void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) { void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
// do nothing to help avoid flashing // do nothing to help avoid flashing
} }

View File

@@ -180,6 +180,7 @@ private:
ScintillaWX* m_swx; ScintillaWX* m_swx;
wxStopWatch m_stopWatch; wxStopWatch m_stopWatch;
bool m_lastKeyDownConsumed;
friend class ScintillaWX; friend class ScintillaWX;
friend class Platform; friend class Platform;