]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/grid.cpp
return values of overloaded virtuals should match the base class version
[wxWidgets.git] / src / generic / grid.cpp
index 90b76b3679513827c5df60b69ca70bdb2eadbdd5..661470456b0ae3078dc14e6b5c2df473302b4340 100644 (file)
@@ -18,6 +18,8 @@
 
 #if wxUSE_GRID
 
+#include "wx/grid.h"
+
 #ifndef WX_PRECOMP
     #include "wx/utils.h"
     #include "wx/dcclient.h"
 #include "wx/tokenzr.h"
 #include "wx/renderer.h"
 
-#include "wx/grid.h"
 #include "wx/generic/gridsel.h"
 
+const wxChar wxGridNameStr[] = wxT("grid");
+
 #if defined(__WXMOTIF__)
     #define WXUNUSED_MOTIF(identifier)  WXUNUSED(identifier)
 #else
@@ -199,7 +202,7 @@ public:
                   wxGridRowLabelWindow *rowLblWin,
                   wxGridColLabelWindow *colLblWin,
                   wxWindowID id, const wxPoint &pos, const wxSize &size );
-    ~wxGridWindow() {}
+    virtual ~wxGridWindow() {}
 
     void ScrollWindow( int dx, int dy, const wxRect *rect );
 
@@ -3736,7 +3739,8 @@ void wxGridRowLabelWindow::OnPaint( wxPaintEvent& WXUNUSED(event) )
 
     int x, y;
     m_owner->CalcUnscrolledPosition( 0, 0, &x, &y );
-    dc.SetDeviceOrigin( 0, -y );
+    wxPoint pt = dc.GetDeviceOrigin();
+    dc.SetDeviceOrigin( pt.x, pt.y-y );
 
     wxArrayInt rows = m_owner->CalcRowLabelsExposed( GetUpdateRegion() );
     m_owner->DrawRowLabels( dc, rows );
@@ -3806,7 +3810,11 @@ void wxGridColLabelWindow::OnPaint( wxPaintEvent& WXUNUSED(event) )
 
     int x, y;
     m_owner->CalcUnscrolledPosition( 0, 0, &x, &y );
-    dc.SetDeviceOrigin( -x, 0 );
+    wxPoint pt = dc.GetDeviceOrigin();
+    if (GetLayoutDirection() == wxLayout_RightToLeft)
+        dc.SetDeviceOrigin( pt.x+x, pt.y );
+    else
+        dc.SetDeviceOrigin( pt.x-x, pt.y );
 
     wxArrayInt cols = m_owner->CalcColLabelsExposed( GetUpdateRegion() );
     m_owner->DrawColLabels( dc, cols );
@@ -6826,6 +6834,14 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
 
     if ( !parent->GetEventHandler()->ProcessEvent( keyEvt ) )
     {
+        if (GetLayoutDirection() == wxLayout_RightToLeft)
+        {
+            if (event.GetKeyCode() == WXK_RIGHT)
+                event.m_keyCode = WXK_LEFT;
+            else if (event.GetKeyCode() == WXK_LEFT)
+                event.m_keyCode = WXK_RIGHT;
+        }
+    
         // try local handlers
         switch ( event.GetKeyCode() )
         {
@@ -7739,7 +7755,12 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) )
     {
         i = GetColAt( colPos );
 
-        int colRight = GetColRight(i) - 1;
+        int colRight = GetColRight(i);
+#ifdef __WXGTK__
+        if (GetLayoutDirection() != wxLayout_RightToLeft)
+#endif
+            colRight--;
+
         if ( colRight > right )
         {
             break;
@@ -8532,15 +8553,23 @@ int wxGrid::XToCol( int x, bool clipToMinMax )
     return GetColAt( maxPos );
 }
 
-// return the row number that that the y coord is near the edge of, or
-// -1 if not near an edge
+// return the row number that that the y coord is near
+//  the edge of, or -1 if not near an edge.
+// coords can only possibly be near an edge if
+//    (a) the row/column is large enough to still allow for an "inner" area
+//        that is _not_ nead the edge (i.e., if the height/width is smaller
+//        than WXGRID_LABEL_EDGE_ZONE, coords are _never_ considered to be
+//        near the edge).
+//   and
+//    (b) resizing rows/columns (the thing for which edge detection is
+//        relevant at all) is enabled.
 //
 int wxGrid::YToEdgeOfRow( int y )
 {
     int i;
     i = internalYToRow(y);
 
-    if ( GetRowHeight(i) > WXGRID_LABEL_EDGE_ZONE )
+    if ( GetRowHeight(i) > WXGRID_LABEL_EDGE_ZONE && CanDragRowSize() )
     {
         // We know that we are in row i, test whether we are
         // close enough to lower or upper border, respectively.
@@ -8555,13 +8584,14 @@ int wxGrid::YToEdgeOfRow( int y )
 
 // return the col number that that the x coord is near the edge of, or
 // -1 if not near an edge
+// See comment at YToEdgeOfRow for conditions on edge detection.
 //
 int wxGrid::XToEdgeOfCol( int x )
 {
     int i;
     i = internalXToCol(x);
 
-    if ( GetColWidth(i) > WXGRID_LABEL_EDGE_ZONE )
+    if ( GetColWidth(i) > WXGRID_LABEL_EDGE_ZONE && CanDragColSize() )
     {
         // We know that we are in column i; test whether we are
         // close enough to right or left border, respectively.
@@ -10357,12 +10387,12 @@ void wxGrid::AutoSizeColOrRow( int colOrRow, bool setAsMin, bool column )
 
     if ( column )
     {
-        dc.GetTextExtent( GetColLabelValue(col), &w, &h );
+        dc.GetMultiLineTextExtent( GetColLabelValue(col), &w, &h );
         if ( GetColLabelTextOrientation() == wxVERTICAL )
             w = h;
     }
     else
-        dc.GetTextExtent( GetRowLabelValue(row), &w, &h );
+        dc.GetMultiLineTextExtent( GetRowLabelValue(row), &w, &h );
 
     extent = column ? w : h;
     if ( extent > extentMax )