]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/grid.cpp
Fixed a problem with borders being set wrong sometimes on wxMSW, XP, VC++ 7
[wxWidgets.git] / src / generic / grid.cpp
index 4d0b0fff74bd877bdb8dd7a787d222549235bfbe..2f12b4028e4fa2befab24167fec0a82e3aff4b55 100644 (file)
@@ -203,6 +203,8 @@ public:
 
     void ScrollWindow( int dx, int dy, const wxRect *rect );
 
+    wxGrid* GetOwner() { return m_owner; }
+
 private:
     wxGrid                   *m_owner;
     wxGridRowLabelWindow     *m_rowLabelWin;
@@ -424,6 +426,7 @@ static inline int GetScrollY(int y)
 wxGridCellEditor::wxGridCellEditor()
 {
     m_control = NULL;
+    m_attr = NULL;
 }
 
 
@@ -445,6 +448,10 @@ void wxGridCellEditor::PaintBackground(const wxRect& rectCell,
 {
     // erase the background because we might not fill the cell
     wxClientDC dc(m_control->GetParent());
+    wxGridWindow* gridWindow = wxDynamicCast(m_control->GetParent(), wxGridWindow);
+    if (gridWindow)
+        gridWindow->GetOwner()->PrepareDC(dc);
+    
     dc.SetPen(*wxTRANSPARENT_PEN);
     dc.SetBrush(wxBrush(attr->GetBackgroundColour(), wxSOLID));
     dc.DrawRectangle(rectCell);
@@ -753,7 +760,6 @@ void wxGridCellTextEditor::SetParameters(const wxString& params)
     }
 }
 
-// DJC MAPTEK
 // return the value in the text control
 wxString wxGridCellTextEditor::GetValue() const
 {
@@ -961,7 +967,6 @@ void wxGridCellNumberEditor::SetParameters(const wxString& params)
     }
 }
 
-// DJC MAPTEK
 // return the value in the spin control if it is there (the text control otherwise)
 wxString wxGridCellNumberEditor::GetValue() const
 {
@@ -969,7 +974,7 @@ wxString wxGridCellNumberEditor::GetValue() const
 
   if( HasRange() )
   {
-    int value = Spin()->GetValue();
+    long value = Spin()->GetValue();
     s.Printf(wxT("%ld"), value);
   }
   else
@@ -1218,7 +1223,32 @@ void wxGridCellBoolEditor::SetSize(const wxRect& r)
     size.y -= 2;
 #endif
 
-    m_control->Move(r.x + r.width/2 - size.x/2, r.y + r.height/2 - size.y/2);
+    int hAlign = wxALIGN_CENTRE;
+    int vAlign = wxALIGN_CENTRE;
+    if (GetCellAttr())
+        GetCellAttr()->GetAlignment(& hAlign, & vAlign);
+    
+    int x = 0, y = 0;
+    if (hAlign == wxALIGN_LEFT)
+    {
+        x = r.x + 2;
+#ifdef __WXMSW__
+        x += 2;
+#endif        
+        y = r.y + r.height/2 - size.y/2;
+    }
+    else if (hAlign == wxALIGN_RIGHT)
+    {
+        x = r.x + r.width - size.x - 2;
+        y = r.y + r.height/2 - size.y/2;
+    }
+    else if (hAlign == wxALIGN_CENTRE)
+    {
+        x = r.x + r.width/2 - size.x/2;
+        y = r.y + r.height/2 - size.y/2;
+    }
+    
+    m_control->Move(x, y);
 }
 
 void wxGridCellBoolEditor::Show(bool show, wxGridCellAttr *attr)
@@ -1305,12 +1335,12 @@ bool wxGridCellBoolEditor::IsAcceptedKey(wxKeyEvent& event)
 
     return FALSE;
 }
-// DJC MAPTEK
+
 // return the value as "1" for true and the empty string for false
 wxString wxGridCellBoolEditor::GetValue() const
 {
   bool bSet = CBox()->GetValue();
-  return bSet ? "1" : wxEmptyString;
+  return bSet ? _T("1") : wxEmptyString;
 }
 
 #endif // wxUSE_CHECKBOX
@@ -1440,12 +1470,12 @@ void wxGridCellChoiceEditor::SetParameters(const wxString& params)
     }
 }
 
-// DJC MAPTEK
 // return the value in the text control
 wxString wxGridCellChoiceEditor::GetValue() const
 {
   return Combo()->GetValue();
 }
+
 #endif // wxUSE_COMBOBOX
 
 // ----------------------------------------------------------------------------
@@ -1523,7 +1553,7 @@ void wxGridCellRenderer::Draw(wxGrid& grid,
 {
     dc.SetBackgroundMode( wxSOLID );
 
-// DJC (MAPTEK) grey out fields if the grid is disabled
+    // grey out fields if the grid is disabled
     if( grid.IsEnabled() )
     {
       if ( isSelected )
@@ -1557,7 +1587,7 @@ void wxGridCellStringRenderer::SetTextColoursAndFont(wxGrid& grid,
 
     // TODO some special colours for attr.IsReadOnly() case?
 
-    // DJC (MAPTEK) different coloured text when the grid is disabled
+    // different coloured text when the grid is disabled
     if( grid.IsEnabled() )
     {
       if ( isSelected )
@@ -1952,11 +1982,31 @@ void wxGridCellBoolRenderer::Draw(wxGrid& grid,
     }
 
     // draw a border around checkmark
+    int vAlign, hAlign;
+    attr.GetAlignment(& hAlign, &vAlign);
+    
     wxRect rectBorder;
-    rectBorder.x = rect.x + rect.width/2 - size.x/2;
-    rectBorder.y = rect.y + rect.height/2 - size.y/2;
-    rectBorder.width = size.x;
-    rectBorder.height = size.y;
+    if (hAlign == wxALIGN_CENTRE)
+    {
+        rectBorder.x = rect.x + rect.width/2 - size.x/2;
+        rectBorder.y = rect.y + rect.height/2 - size.y/2;
+        rectBorder.width = size.x;
+        rectBorder.height = size.y;
+    }
+    else if (hAlign == wxALIGN_LEFT)
+    {
+        rectBorder.x = rect.x + 2;
+        rectBorder.y = rect.y + rect.height/2 - size.y/2;
+        rectBorder.width = size.x;
+        rectBorder.height = size.y;        
+    }
+    else if (hAlign == wxALIGN_RIGHT)
+    {
+        rectBorder.x = rect.x + rect.width - size.x - 2;
+        rectBorder.y = rect.y + rect.height/2 - size.y/2;
+        rectBorder.width = size.x;
+        rectBorder.height = size.y;        
+    }
 
     bool value;
     if ( grid.GetTable()->CanGetValueAs(row, col, wxGRID_VALUE_BOOL) )
@@ -3597,12 +3647,14 @@ BEGIN_EVENT_TABLE( wxGridWindow, wxWindow )
     EVT_ERASE_BACKGROUND( wxGridWindow::OnEraseBackground )
 END_EVENT_TABLE()
 
-// DJC (MAPTEK) 19-Jun-2001 use wxCLIP_CHILDREN as well
 wxGridWindow::wxGridWindow( wxGrid *parent,
                             wxGridRowLabelWindow *rowLblWin,
                             wxGridColLabelWindow *colLblWin,
-                            wxWindowID id, const wxPoint &pos, const wxSize &size )
-        : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxCLIP_CHILDREN, wxT("grid window") )
+                            wxWindowID id,
+                            const wxPoint &pos,
+                            const wxSize &size )
+            : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxCLIP_CHILDREN,
+                        wxT("grid window") )
 
 {
     m_owner = parent;
@@ -4052,8 +4104,6 @@ void wxGrid::CalcDimensions()
     int w = m_numCols > 0 ? GetColRight(m_numCols - 1) + m_extraWidth + 1 : 0;
     int h = m_numRows > 0 ? GetRowBottom(m_numRows - 1) + m_extraHeight + 1 : 0;
 
-// DJC (MAPTEK) 19-Jun-2001 account for editor since it could possibly
-// be larger than the cell
     // take into account editor if shown
     if( IsCellEditControlShown() )
     {
@@ -6190,12 +6240,13 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
                     if ( (event.KeyCode() == WXK_F2 && !event.HasModifiers())
                          || editor->IsAcceptedKey(event) )
                     {
-                        // DJC MAPTEK - ensure cell is visble
+                        // ensure cell is visble
                         MakeCellVisible(row, col);
                         EnableCellEditControl();
-                        // DJC MAPTEK - a problem can arise if the cell is not
-                        // completely visible (even after calling MakeCellVisible
-                        // the control is not created and calling StartingKey will
+
+                        // a problem can arise if the cell is not completely
+                        // visible (even after calling MakeCellVisible the
+                        // control is not created and calling StartingKey will
                         // crash the app
                         if( editor->IsCreated() && m_cellEditCtrlEnabled ) editor->StartingKey(event);
                     }
@@ -7389,14 +7440,16 @@ void wxGrid::ShowCellEditControl()
                     rect.SetRight(client_right-1);
             }
 
-// DJC (MAPTEK) 19-Feb-2001 do set size prior to showing the control
+            editor->SetCellAttr(attr);
             editor->SetSize( rect );
             editor->Show( TRUE, attr );
-// DJC (MAPTEK) 19-Jun-2001 recalc dimensions in case we need to
-// expand the scrolled window to account for editor
+
+            // recalc dimensions in case we need to
+            // expand the scrolled window to account for editor
             CalcDimensions();
 
             editor->BeginEdit(row, col, this);
+            editor->SetCellAttr(NULL);
 
             editor->DecRef();
             attr->DecRef();
@@ -7717,7 +7770,6 @@ void wxGrid::MakeCellVisible( int row, int col )
         }
         else if ( right > cw )
         {
-            // DJC MAPTEK
             // position the view so that the cell is on the right
             int x0, y0;
             CalcUnscrolledPosition(0, 0, &x0, &y0);
@@ -9172,7 +9224,7 @@ void wxGrid::SetColSize( int col, int width )
         InitColWidths();
     }
 
-    // DJC MAPTEK if < 0 calc new width from label
+    // if < 0 calc new width from label
     if( width < 0 )
     {
       long w, h;