// private classes
// ----------------------------------------------------------------------------
-class WXDLLIMPEXP_ADV wxGridRowLabelWindow : public wxWindow
+// common base class for various grid subwindows
+class WXDLLIMPEXP_ADV wxGridSubwindow : public wxWindow
{
public:
- wxGridRowLabelWindow() { m_owner = (wxGrid *)NULL; }
+ wxGridSubwindow() { m_owner = NULL; }
+ wxGridSubwindow(wxGrid *owner,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ int additionalStyle = 0,
+ const wxString& name = wxPanelNameStr)
+ : wxWindow(owner, id, pos, size,
+ wxWANTS_CHARS | wxBORDER_NONE | additionalStyle,
+ name)
+ {
+ m_owner = owner;
+ }
+
+ wxGrid *GetOwner() { return m_owner; }
+
+protected:
+ void OnMouseCaptureLost(wxMouseCaptureLostEvent& event);
+
+ wxGrid *m_owner;
+
+ DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS(wxGridSubwindow)
+};
+
+class WXDLLIMPEXP_ADV wxGridRowLabelWindow : public wxGridSubwindow
+{
+public:
+ wxGridRowLabelWindow() { }
wxGridRowLabelWindow( wxGrid *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size );
private:
- wxGrid *m_owner;
-
void OnPaint( wxPaintEvent& event );
void OnMouseEvent( wxMouseEvent& event );
void OnMouseWheel( wxMouseEvent& event );
};
-class WXDLLIMPEXP_ADV wxGridColLabelWindow : public wxWindow
+class WXDLLIMPEXP_ADV wxGridColLabelWindow : public wxGridSubwindow
{
public:
- wxGridColLabelWindow() { m_owner = (wxGrid *)NULL; }
+ wxGridColLabelWindow() { }
wxGridColLabelWindow( wxGrid *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size );
private:
- wxGrid *m_owner;
-
void OnPaint( wxPaintEvent& event );
void OnMouseEvent( wxMouseEvent& event );
void OnMouseWheel( wxMouseEvent& event );
};
-class WXDLLIMPEXP_ADV wxGridCornerLabelWindow : public wxWindow
+class WXDLLIMPEXP_ADV wxGridCornerLabelWindow : public wxGridSubwindow
{
public:
- wxGridCornerLabelWindow() { m_owner = (wxGrid *)NULL; }
+ wxGridCornerLabelWindow() { }
wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size );
private:
- wxGrid *m_owner;
-
void OnMouseEvent( wxMouseEvent& event );
void OnMouseWheel( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event );
DECLARE_NO_COPY_CLASS(wxGridCornerLabelWindow)
};
-class WXDLLIMPEXP_ADV wxGridWindow : public wxWindow
+class WXDLLIMPEXP_ADV wxGridWindow : public wxGridSubwindow
{
public:
wxGridWindow()
{
- m_owner = NULL;
m_rowLabelWin = NULL;
m_colLabelWin = NULL;
}
wxGridRowLabelWindow *rowLblWin,
wxGridColLabelWindow *colLblWin,
wxWindowID id, const wxPoint &pos, const wxSize &size );
- virtual ~wxGridWindow() {}
void ScrollWindow( int dx, int dy, const wxRect *rect );
- wxGrid* GetOwner() { return m_owner; }
-
private:
- wxGrid *m_owner;
wxGridRowLabelWindow *m_rowLabelWin;
wxGridColLabelWindow *m_colLabelWin;
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
+BEGIN_EVENT_TABLE(wxGridSubwindow, wxWindow)
+ EVT_MOUSE_CAPTURE_LOST(wxGridSubwindow::OnMouseCaptureLost)
+END_EVENT_TABLE()
+
+void wxGridSubwindow::OnMouseCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event))
+{
+ m_owner->CancelMouseCapture();
+}
+
IMPLEMENT_DYNAMIC_CLASS( wxGridRowLabelWindow, wxWindow )
-BEGIN_EVENT_TABLE( wxGridRowLabelWindow, wxWindow )
+BEGIN_EVENT_TABLE( wxGridRowLabelWindow, wxGridSubwindow )
EVT_PAINT( wxGridRowLabelWindow::OnPaint )
EVT_MOUSEWHEEL( wxGridRowLabelWindow::OnMouseWheel )
EVT_MOUSE_EVENTS( wxGridRowLabelWindow::OnMouseEvent )
wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent,
wxWindowID id,
const wxPoint &pos, const wxSize &size )
- : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxFULL_REPAINT_ON_RESIZE )
+ : wxGridSubwindow(parent, id, pos, size)
{
m_owner = parent;
}
IMPLEMENT_DYNAMIC_CLASS( wxGridColLabelWindow, wxWindow )
-BEGIN_EVENT_TABLE( wxGridColLabelWindow, wxWindow )
+BEGIN_EVENT_TABLE( wxGridColLabelWindow, wxGridSubwindow )
EVT_PAINT( wxGridColLabelWindow::OnPaint )
EVT_MOUSEWHEEL( wxGridColLabelWindow::OnMouseWheel )
EVT_MOUSE_EVENTS( wxGridColLabelWindow::OnMouseEvent )
wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent,
wxWindowID id,
const wxPoint &pos, const wxSize &size )
- : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxFULL_REPAINT_ON_RESIZE )
+ : wxGridSubwindow(parent, id, pos, size)
{
m_owner = parent;
}
IMPLEMENT_DYNAMIC_CLASS( wxGridCornerLabelWindow, wxWindow )
-BEGIN_EVENT_TABLE( wxGridCornerLabelWindow, wxWindow )
+BEGIN_EVENT_TABLE( wxGridCornerLabelWindow, wxGridSubwindow )
EVT_MOUSEWHEEL( wxGridCornerLabelWindow::OnMouseWheel )
EVT_MOUSE_EVENTS( wxGridCornerLabelWindow::OnMouseEvent )
EVT_PAINT( wxGridCornerLabelWindow::OnPaint )
wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent,
wxWindowID id,
const wxPoint &pos, const wxSize &size )
- : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxFULL_REPAINT_ON_RESIZE )
+ : wxGridSubwindow(parent, id, pos, size)
{
m_owner = parent;
}
IMPLEMENT_DYNAMIC_CLASS( wxGridWindow, wxWindow )
-BEGIN_EVENT_TABLE( wxGridWindow, wxWindow )
+BEGIN_EVENT_TABLE( wxGridWindow, wxGridSubwindow )
EVT_PAINT( wxGridWindow::OnPaint )
EVT_MOUSEWHEEL( wxGridWindow::OnMouseWheel )
EVT_MOUSE_EVENTS( wxGridWindow::OnMouseEvent )
wxWindowID id,
const wxPoint &pos,
const wxSize &size )
- : wxWindow(
- parent, id, pos, size,
- wxWANTS_CHARS | wxBORDER_NONE | wxCLIP_CHILDREN | wxFULL_REPAINT_ON_RESIZE,
- wxT("grid window") )
+ : wxGridSubwindow(parent, id, pos, size,
+ wxCLIP_CHILDREN, wxT("grid window") )
{
m_owner = parent;
m_rowLabelWin = rowLblWin;
}
}
+void wxGrid::CancelMouseCapture()
+{
+ // cancel operation currently in progress, whatever it is
+ if ( m_winCapture )
+ {
+ m_isDragging = false;
+ m_cursorMode = WXGRID_CURSOR_SELECT_CELL;
+ m_winCapture->SetCursor( *wxSTANDARD_CURSOR );
+ m_winCapture = NULL;
+
+ // remove traces of whatever we drew on screen
+ Refresh();
+ }
+}
+
void wxGrid::ChangeCursorMode(CursorMode mode,
wxWindow *win,
bool captureMouse)