#include "wx/grid.h"
 #include "wx/generic/gridsel.h"
 
+#if defined(__WXMOTIF__)
+    #define WXUNUSED_MOTIF(identifier)  WXUNUSED(identifier)
+#else
+    #define WXUNUSED_MOTIF(identifier)  identifier
+#endif
+
+#if defined(__WXGTK__)
+    #define WXUNUSED_GTK(identifier)    WXUNUSED(identifier)
+#else
+    #define WXUNUSED_GTK(identifier)    identifier
+#endif
+
 // Required for wxIs... functions
 #include <ctype.h>
 
 class WXDLLEXPORT wxGridTypeRegistry
 {
 public:
+  wxGridTypeRegistry() {}
     ~wxGridTypeRegistry();
 
     void RegisterDataType(const wxString& typeName,
     if ( !event.AltDown() && !event.MetaDown() && !event.ControlDown() )
     {
         // insert the key in the control
-        long keycode = event.KeyCode();
+        int keycode = (int)event.KeyCode();
         if ( isprint(keycode) )
         {
             // FIXME this is not going to work for non letters...
     event.Skip();
 }
 
-void wxGridCellTextEditor::HandleReturn(wxKeyEvent& event)
+void wxGridCellTextEditor::HandleReturn( wxKeyEvent&
+                                         WXUNUSED_GTK(WXUNUSED_MOTIF(event)) )
 {
 #if defined(__WXMOTIF__) || defined(__WXGTK__)
     // wxMotif needs a little extra help...
-    int pos = Text()->GetInsertionPoint();
+    size_t pos = (size_t)( Text()->GetInsertionPoint() );
     wxString s( Text()->GetValue() );
     s = s.Left(pos) + "\n" + s.Mid(pos);
     Text()->SetValue(s);
 
     if ( HasRange() )
     {
-        Spin()->SetValue(m_valueOld);
+        Spin()->SetValue((int)m_valueOld);
     }
     else
     {
 {
     if ( HasRange() )
     {
-        Spin()->SetValue(m_valueOld);
+        Spin()->SetValue((int)m_valueOld);
     }
     else
     {
 {
     if ( !HasRange() )
     {
-        long keycode = event.KeyCode();
+        int keycode = (int) event.KeyCode();
         if ( isdigit(keycode) || keycode == '+' || keycode == '-' )
         {
             wxGridCellTextEditor::StartingKey(event);
 
 void wxGridCellFloatEditor::StartingKey(wxKeyEvent& event)
 {
-    long keycode = event.KeyCode();
+    int keycode = (int)event.KeyCode();
     if ( isdigit(keycode) ||
          keycode == '+' || keycode == '-' || keycode == '.' )
     {
                               wxGridCellAttr& attr,
                               wxDC& dc,
                               const wxRect& rect,
-                              int row, int col,
+                              int WXUNUSED(row), int WXUNUSED(col),
                               bool isSelected)
 {
     dc.SetBackgroundMode( wxSOLID );
     }
 }
 
-bool wxGridTableBase::InsertRows( size_t pos, size_t numRows )
+bool wxGridTableBase::InsertRows( size_t WXUNUSED(pos),
+                                  size_t WXUNUSED(numRows) )
 {
     wxFAIL_MSG( wxT("Called grid table class function InsertRows\n"
                     "but your derived table class does not override this function") );
     return FALSE;
 }
 
-bool wxGridTableBase::AppendRows( size_t numRows )
+bool wxGridTableBase::AppendRows( size_t WXUNUSED(numRows) )
 {
     wxFAIL_MSG( wxT("Called grid table class function AppendRows\n"
                     "but your derived table class does not override this function"));
     return FALSE;
 }
 
-bool wxGridTableBase::DeleteRows( size_t pos, size_t numRows )
+bool wxGridTableBase::DeleteRows( size_t WXUNUSED(pos),
+                                  size_t WXUNUSED(numRows) )
 {
     wxFAIL_MSG( wxT("Called grid table class function DeleteRows\n"
                     "but your derived table class does not override this function"));
     return FALSE;
 }
 
-bool wxGridTableBase::InsertCols( size_t pos, size_t numCols )
+bool wxGridTableBase::InsertCols( size_t WXUNUSED(pos),
+                                  size_t WXUNUSED(numCols) )
 {
     wxFAIL_MSG( wxT("Called grid table class function InsertCols\n"
                   "but your derived table class does not override this function"));
     return FALSE;
 }
 
-bool wxGridTableBase::AppendCols( size_t numCols )
+bool wxGridTableBase::AppendCols( size_t WXUNUSED(numCols) )
 {
     wxFAIL_MSG(wxT("Called grid table class function AppendCols\n"
                    "but your derived table class does not override this function"));
     return FALSE;
 }
 
-bool wxGridTableBase::DeleteCols( size_t pos, size_t numCols )
+bool wxGridTableBase::DeleteCols( size_t WXUNUSED(pos),
+                                  size_t WXUNUSED(numCols) )
 {
     wxFAIL_MSG( wxT("Called grid table class function DeleteCols\n"
                     "but your derived table class does not override this function"));
     m_owner = parent;
 }
 
-void wxGridRowLabelWindow::OnPaint( wxPaintEvent &event )
+void wxGridRowLabelWindow::OnPaint( wxPaintEvent& WXUNUSED(event) )
 {
     wxPaintDC dc(this);
 
     m_owner = parent;
 }
 
-void wxGridColLabelWindow::OnPaint( wxPaintEvent &event )
+void wxGridColLabelWindow::OnPaint( wxPaintEvent& WXUNUSED(event) )
 {
     wxPaintDC dc(this);
 
 }
 
 
-void wxGridWindow::OnEraseBackground(wxEraseEvent& event)
+void wxGridWindow::OnEraseBackground( wxEraseEvent& WXUNUSED(event) )
 {
 }
 
 
                 case WXGRID_CURSOR_SELECT_ROW:
                     if ( (row = YToRow( y )) >= 0 )
-                   {
-                       m_selection->SelectRow( row,
-                                               event.ControlDown(),
-                                               event.ShiftDown(),
-                                               event.AltDown(),
-                                               event.MetaDown() );
+                    {
+                        m_selection->SelectRow( row,
+                                                event.ControlDown(),
+                                                event.ShiftDown(),
+                                                event.AltDown(),
+                                                event.MetaDown() );
                     }
 
                 // default label to suppress warnings about "enumeration value
             if ( row >= 0  &&
                  !SendEvent( wxEVT_GRID_LABEL_LEFT_CLICK, row, -1, event ) )
             {
-               if ( !event.ShiftDown() && !event.ControlDown() )
-                   ClearSelection();
-               if ( event.ShiftDown() )
-                   m_selection->SelectBlock( m_currentCellCoords.GetRow(),
-                                             0,
-                                             row,
-                                             GetNumberCols() - 1,
-                                             event.ControlDown(),
-                                             event.ShiftDown(),
-                                             event.AltDown(),
-                                             event.MetaDown() );
-               else
-                   m_selection->SelectRow( row,
-                                           event.ControlDown(),
-                                           event.ShiftDown(),
-                                           event.AltDown(),
-                                           event.MetaDown() );
+                if ( !event.ShiftDown() && !event.ControlDown() )
+                    ClearSelection();
+                if ( event.ShiftDown() )
+                    m_selection->SelectBlock( m_currentCellCoords.GetRow(),
+                                              0,
+                                              row,
+                                              GetNumberCols() - 1,
+                                              event.ControlDown(),
+                                              event.ShiftDown(),
+                                              event.AltDown(),
+                                              event.MetaDown() );
+                else
+                    m_selection->SelectRow( row,
+                                            event.ControlDown(),
+                                            event.ShiftDown(),
+                                            event.AltDown(),
+                                            event.MetaDown() );
                 ChangeCursorMode(WXGRID_CURSOR_SELECT_ROW, m_rowLabelWin);
             }
         }
 
                 case WXGRID_CURSOR_SELECT_COL:
                     if ( (col = XToCol( x )) >= 0 )
-                   {
-                       m_selection->SelectCol( col,
-                                               event.ControlDown(),
-                                               event.ShiftDown(),
-                                               event.AltDown(),
-                                               event.MetaDown() );
+                    {
+                        m_selection->SelectCol( col,
+                                                event.ControlDown(),
+                                                event.ShiftDown(),
+                                                event.AltDown(),
+                                                event.MetaDown() );
                     }
 
                 // default label to suppress warnings about "enumeration value
             if ( col >= 0  &&
                  !SendEvent( wxEVT_GRID_LABEL_LEFT_CLICK, -1, col, event ) )
             {
-               if ( !event.ShiftDown() && !event.ControlDown() )
-                   ClearSelection();
-               if ( event.ShiftDown() )
-                   m_selection->SelectBlock( 0,
-                                             m_currentCellCoords.GetCol(),
-                                             GetNumberRows() - 1, col,
-                                             event.ControlDown(),
-                                             event.ShiftDown(),
-                                             event.AltDown(),
-                                             event.MetaDown() );
-               else
-                   m_selection->SelectCol( col,
-                                           event.ControlDown(),
-                                           event.ShiftDown(),
-                                           event.AltDown(),
-                                           event.MetaDown() );
+                if ( !event.ShiftDown() && !event.ControlDown() )
+                    ClearSelection();
+                if ( event.ShiftDown() )
+                    m_selection->SelectBlock( 0,
+                                              m_currentCellCoords.GetCol(),
+                                              GetNumberRows() - 1, col,
+                                              event.ControlDown(),
+                                              event.ShiftDown(),
+                                              event.AltDown(),
+                                              event.MetaDown() );
+                else
+                    m_selection->SelectCol( col,
+                                            event.ControlDown(),
+                                            event.ShiftDown(),
+                                            event.AltDown(),
+                                            event.MetaDown() );
                 ChangeCursorMode(WXGRID_CURSOR_SELECT_COL, m_colLabelWin);
             }
         }
 
             if ( coords != wxGridNoCellCoords )
             {
-               if ( event.ControlDown() )
-               {
-                   if ( m_selectingKeyboard == wxGridNoCellCoords)
-                       m_selectingKeyboard = coords;
-                   SelectBlock ( m_selectingKeyboard, coords );
-               }
-               else
-               {
-                   if ( !IsSelection() )
-                   {
-                       SelectBlock( coords, coords );
-                   }
-                   else
-                   {
-                       SelectBlock( m_currentCellCoords, coords );
-                   }
+                if ( event.ControlDown() )
+                {
+                    if ( m_selectingKeyboard == wxGridNoCellCoords)
+                        m_selectingKeyboard = coords;
+                    SelectBlock ( m_selectingKeyboard, coords );
+                }
+                else
+                {
+                    if ( !IsSelection() )
+                    {
+                        SelectBlock( coords, coords );
+                    }
+                    else
+                    {
+                        SelectBlock( m_currentCellCoords, coords );
+                    }
                 }
 
                 if (! IsVisible(coords))
                 }
                 else
                 {
-                   if ( event.ControlDown() )
-                   {
-                       m_selection->ToggleCellSelection( coords.GetRow(),
-                                                         coords.GetCol(),
-                                                         event.ControlDown(),
-                                                         event.ShiftDown(),
-                                                         event.AltDown(),
-                                                         event.MetaDown() );
-                       m_selectingTopLeft = wxGridNoCellCoords;
-                       m_selectingBottomRight = wxGridNoCellCoords;
-                       m_selectingKeyboard = coords;
-                   }
-                   else
-                       SetCurrentCell( coords );
+                    if ( event.ControlDown() )
+                    {
+                        m_selection->ToggleCellSelection( coords.GetRow(),
+                                                          coords.GetCol(),
+                                                          event.ControlDown(),
+                                                          event.ShiftDown(),
+                                                          event.AltDown(),
+                                                          event.MetaDown() );
+                        m_selectingTopLeft = wxGridNoCellCoords;
+                        m_selectingBottomRight = wxGridNoCellCoords;
+                        m_selectingKeyboard = coords;
+                    }
+                    else
+                        SetCurrentCell( coords );
                     m_waitForSlowClick = TRUE;
                 }
             }
 // the grid view is resized... then the size event is skipped to allow
 // the box sizers to handle everything
 //
-void wxGrid::OnSize( wxSizeEvent& event )
+void wxGrid::OnSize( wxSizeEvent& WXUNUSED(event) )
 {
     CalcWindowSizes();
     CalcDimensions();
         if ( !event.ShiftDown() && 
              m_selectingKeyboard != wxGridNoCellCoords )
         {
-           if ( m_selectingTopLeft != wxGridNoCellCoords &&
-                m_selectingBottomRight != wxGridNoCellCoords )
-               m_selection->SelectBlock( m_selectingTopLeft.GetRow(),
-                                         m_selectingTopLeft.GetCol(),
-                                         m_selectingBottomRight.GetRow(),
-                                         m_selectingBottomRight.GetCol(),
-                                         event.ControlDown(),
-                                         event.ShiftDown(),
-                                         event.AltDown(),
-                                         event.MetaDown() );
+            if ( m_selectingTopLeft != wxGridNoCellCoords &&
+                 m_selectingBottomRight != wxGridNoCellCoords )
+                m_selection->SelectBlock( m_selectingTopLeft.GetRow(),
+                                          m_selectingTopLeft.GetCol(),
+                                          m_selectingBottomRight.GetRow(),
+                                          m_selectingBottomRight.GetCol(),
+                                          event.ControlDown(),
+                                          event.ShiftDown(),
+                                          event.AltDown(),
+                                          event.MetaDown() );
             m_selectingTopLeft = wxGridNoCellCoords;
             m_selectingBottomRight = wxGridNoCellCoords;
             m_selectingKeyboard = wxGridNoCellCoords;
                 break;
 
             case WXK_SPACE:
-               if ( event.ControlDown() )
-               {
-                   m_selection->ToggleCellSelection( m_currentCellCoords.GetRow(),
-                                                     m_currentCellCoords.GetCol(),
-                                                     event.ControlDown(),
-                                                     event.ShiftDown(),
-                                                     event.AltDown(),
-                                                     event.MetaDown() );
-                   break;
-               }
+                if ( event.ControlDown() )
+                {
+                    m_selection->ToggleCellSelection( m_currentCellCoords.GetRow(),
+                                                      m_currentCellCoords.GetCol(),
+                                                      event.ControlDown(),
+                                                      event.ShiftDown(),
+                                                      event.AltDown(),
+                                                      event.MetaDown() );
+                    break;
+                }
                 if ( !IsEditable() )
                 {
                     MoveCursorRight( FALSE );
                 if ( !(event.AltDown() ||
                        event.MetaDown() ||
                        event.ControlDown()) &&
-                     ((isalnum(event.KeyCode()) &&
+                     ((isalnum((int)event.KeyCode()) &&
                        (event.KeyCode() < 256 && event.KeyCode() >= 0)) ||
                       event.KeyCode() == WXK_F2) &&
                      !IsCellEditControlEnabled() &&
 // This is used to redraw all grid lines e.g. when the grid line colour
 // has been changed
 //
-void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
+void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED_GTK(reg) )
 {
     if ( !m_gridLinesEnabled ||
          !m_numRows ||
 
         for ( size_t i = 0;  i < lines.GetCount();  i++ )
         {
-            dc.DrawText( lines[i], (long)x, (long)y );
+            dc.DrawText( lines[i], (int)x, (int)y );
             y += lineHeight;
         }
     }
             if ( m_selectingKeyboard == wxGridNoCellCoords )
                 m_selectingKeyboard = m_currentCellCoords;
             m_selectingKeyboard.SetRow( m_selectingKeyboard.GetRow() - 1 );
-           MakeCellVisible( m_selectingKeyboard.GetRow(),
-                            m_selectingKeyboard.GetCol() );
+            MakeCellVisible( m_selectingKeyboard.GetRow(),
+                             m_selectingKeyboard.GetCol() );
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           MakeCellVisible( m_currentCellCoords.GetRow() - 1,
-                            m_currentCellCoords.GetCol() );
+        {
+            ClearSelection();
+            MakeCellVisible( m_currentCellCoords.GetRow() - 1,
+                             m_currentCellCoords.GetCol() );
             SetCurrentCell( m_currentCellCoords.GetRow() - 1,
                             m_currentCellCoords.GetCol() );
-       }
+        }
         return TRUE;
     }
 
             if ( m_selectingKeyboard == wxGridNoCellCoords )
                 m_selectingKeyboard = m_currentCellCoords;
             m_selectingKeyboard.SetRow( m_selectingKeyboard.GetRow() + 1 );
-           MakeCellVisible( m_selectingKeyboard.GetRow(),
-                            m_selectingKeyboard.GetCol() );
+            MakeCellVisible( m_selectingKeyboard.GetRow(),
+                             m_selectingKeyboard.GetCol() );
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           MakeCellVisible( m_currentCellCoords.GetRow() + 1,
-                            m_currentCellCoords.GetCol() );
+        {
+            ClearSelection();
+            MakeCellVisible( m_currentCellCoords.GetRow() + 1,
+                             m_currentCellCoords.GetCol() );
             SetCurrentCell( m_currentCellCoords.GetRow() + 1,
                             m_currentCellCoords.GetCol() );
-       }
+        }
         return TRUE;
     }
 
             if ( m_selectingKeyboard == wxGridNoCellCoords )
                 m_selectingKeyboard = m_currentCellCoords;
             m_selectingKeyboard.SetCol( m_selectingKeyboard.GetCol() - 1 );
-           MakeCellVisible( m_selectingKeyboard.GetRow(),
-                            m_selectingKeyboard.GetCol() );
+            MakeCellVisible( m_selectingKeyboard.GetRow(),
+                             m_selectingKeyboard.GetCol() );
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           MakeCellVisible( m_currentCellCoords.GetRow(),
-                            m_currentCellCoords.GetCol() - 1 );
+        {
+            ClearSelection();
+            MakeCellVisible( m_currentCellCoords.GetRow(),
+                             m_currentCellCoords.GetCol() - 1 );
             SetCurrentCell( m_currentCellCoords.GetRow(),
                             m_currentCellCoords.GetCol() - 1 );
-       }
+        }
         return TRUE;
     }
 
             if ( m_selectingKeyboard == wxGridNoCellCoords )
                 m_selectingKeyboard = m_currentCellCoords;
             m_selectingKeyboard.SetCol( m_selectingKeyboard.GetCol() + 1 );
-           MakeCellVisible( m_selectingKeyboard.GetRow(),
-                            m_selectingKeyboard.GetCol() );
+            MakeCellVisible( m_selectingKeyboard.GetRow(),
+                             m_selectingKeyboard.GetCol() );
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           MakeCellVisible( m_currentCellCoords.GetRow(),
-                            m_currentCellCoords.GetCol() + 1 );
-           SetCurrentCell( m_currentCellCoords.GetRow(),
+        {
+            ClearSelection();
+            MakeCellVisible( m_currentCellCoords.GetRow(),
+                             m_currentCellCoords.GetCol() + 1 );
+            SetCurrentCell( m_currentCellCoords.GetRow(),
                             m_currentCellCoords.GetCol() + 1 );
-       }
+        }
         return TRUE;
     }
 
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           SetCurrentCell( row, col );
-       }
+        {
+            ClearSelection();
+            SetCurrentCell( row, col );
+        }
         return TRUE;
     }
 
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           SetCurrentCell( row, col );
-       }
+        {
+            ClearSelection();
+            SetCurrentCell( row, col );
+        }
 
         return TRUE;
     }
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           SetCurrentCell( row, col );
-       }
+        {
+            ClearSelection();
+            SetCurrentCell( row, col );
+        }
 
         return TRUE;
     }
             SelectBlock( m_currentCellCoords, m_selectingKeyboard );
         }
         else
-       {
-           ClearSelection();
-           SetCurrentCell( row, col );
-       }
+        {
+            ClearSelection();
+            SetCurrentCell( row, col );
+        }
 
         return TRUE;
     }
     AutoSize();
 }
 
+
+wxPen& wxGrid::GetDividerPen() const
+{
+    return wxNullPen;
+}
+
 // ----------------------------------------------------------------------------
 // cell value accessor functions
 // ----------------------------------------------------------------------------
 {
     int temp;
     wxGridCellCoords updateTopLeft, updateBottomRight;
-
+    
+    if ( m_selection->GetSelectionMode() == wxGrid::wxGridSelectRows )
+    {
+        leftCol = 0;
+        rightCol = GetNumberCols() - 1;
+    }
+    else if ( m_selection->GetSelectionMode() == wxGrid::wxGridSelectColumns )
+    {
+        topRow = 0;
+        bottomRow = GetNumberRows() - 1;
+    }
     if ( topRow > bottomRow )
     {
         temp = topRow;