#define VAR(x) cout << #x"=" << x << endl;
BEGIN_EVENT_TABLE(wxLayoutWindow,wxScrolledWindow)
- EVT_PAINT (wxLayoutWindow::OnPaint)
- EVT_CHAR (wxLayoutWindow::OnChar)
+ EVT_PAINT (wxLayoutWindow::OnPaint)
+ EVT_CHAR (wxLayoutWindow::OnChar)
EVT_LEFT_DOWN(wxLayoutWindow::OnMouse)
END_EVENT_TABLE()
wxLayoutWindow::wxLayoutWindow(wxWindow *parent)
- : wxScrolledWindow(parent)
+ : wxScrolledWindow(parent, -1, wxDefaultPosition, wxDefaultSize,
+ wxHSCROLL | wxVSCROLL | wxBORDER)
+
{
m_ScrollbarsSet = false;
- m_EventId = 0;
+ m_EventId = -1;
}
+#ifdef __WXMSW__
+long
+wxLayoutWindow::MSWGetDlgCode()
+{
+ // if we don't return this, we won't get OnChar() events
+ return DLGC_WANTCHARS | DLGC_WANTARROWS | DLGC_WANTMESSAGE;
+}
+#endif //MSW
+
+
void
wxLayoutWindow::OnMouse(wxMouseEvent& event)
{
- if(m_EventId == 0) // nothing to do
+ SetFocus();
+
+ if(m_EventId == -1) // nothing to do
return;
m_FindPos.x = event.GetX();
m_FindPos.y = event.GetY();
- m_FoundObject = NULL;
+ m_FoundObject = (wxLayoutObjectBase *) NULL;
#ifdef WXLAYOUT_DEBUG
- cerr << "OnMouse: " << m_FindPos.x << ',' << m_FindPos.y << endl;
+ //doesn't work, undefined functions
+ //wxLogTrace("OnMouse: (%d, %d)", m_FindPos.x, m_FindPos.y);
#endif
Refresh();
if(m_FoundObject)
{
- if(m_EventId)
+ if(m_EventId != -1)
{
wxCommandEvent commandEvent(wxEVENT_TYPE_MENU_COMMAND, m_EventId);
commandEvent.SetEventObject( this );
void
wxLayoutWindow::OnChar(wxKeyEvent& event)
{
+ if(! m_llist.IsEditable()) // do nothing
+ {
+ event.Skip();
+ return;
+ }
+
long keyCode = event.KeyCode();
-
+ wxPoint p;
+ CoordType help;
+
switch(event.KeyCode())
{
case WXK_RIGHT:
case WXK_NEXT:
m_llist.MoveCursor(0,20);
break;
+ case WXK_HOME:
+ p = m_llist.GetCursor();
+ p.x = 0;
+ m_llist.SetCursor(p);
+ break;
+ case WXK_END:
+ p = m_llist.GetCursor();
+ p.x = m_llist.GetLineLength(m_llist.FindCurrentObject((CoordType *) NULL));
+ m_llist.SetCursor(p);
+ break;
case WXK_DELETE :
- m_llist.Delete(1);
+ if(event.ControlDown()) // delete to end of line
+ {
+ help = m_llist.GetLineLength(
+ m_llist.FindCurrentObject((CoordType *) NULL))
+ - m_llist.GetCursor().x;
+ m_llist.Delete(help ? help : 1);
+ }
+ else
+ m_llist.Delete(1);
break;
case WXK_BACK: // backspace
- m_llist.MoveCursor(-1);
- m_llist.Delete(1);
+ if(m_llist.MoveCursor(-1))
+ m_llist.Delete(1);
break;
case WXK_RETURN:
m_llist.LineBreak();
wxPaintDC dc( this ); // only when used as OnPaint for OnDraw we
PrepareDC( dc ); // can skip the first two lines
- if(m_EventId) // look for keyclicks
+ if(m_EventId != -1) // look for keyclicks
m_FoundObject = m_llist.Draw(dc,true,m_FindPos);
else
m_llist.Draw(dc);