X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/73145b0ed18e99b66988c3caf6ad9119911913bb..c76b1a30faba8015cf9cb223cd0e01cb0d2f64d7:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 4d0b0fff74..2f12b4028e 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -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;