X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/62d249cb22b95c846afdce4d3a0cd1a63a1672b8..2b77c3fce750925bdd0cb33505439ddc5493a18e:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 0c7b85e417..adace08248 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -650,12 +650,10 @@ void wxGridCellTextEditor::DoCreate(wxWindow* parent, wxEvtHandler* evtHandler, long style) { -#if defined(__WXMSW__) style |= wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_AUTO_SCROLL | wxNO_BORDER; -#endif m_control = new wxTextCtrl(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, @@ -1522,10 +1520,12 @@ void wxGridCellChoiceEditor::Create(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler) { + int style = wxBORDER_NONE; + if (!m_allowOthers) + style |= wxCB_READONLY; m_control = new wxComboBox(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, - m_choices, - m_allowOthers ? 0 : wxCB_READONLY); + m_choices, style ); wxGridCellEditor::Create(parent, id, evtHandler); } @@ -1560,8 +1560,9 @@ void wxGridCellChoiceEditor::BeginEdit(int row, int col, wxGrid* grid) if (m_allowOthers) { Combo()->SetValue(m_startValue); + Combo()->SetInsertionPointEnd(); } - else + else // the combobox is read-only { // find the right position, or default to the first if not found int pos = Combo()->FindString(m_startValue); @@ -1570,7 +1571,6 @@ void wxGridCellChoiceEditor::BeginEdit(int row, int col, wxGrid* grid) Combo()->SetSelection(pos); } - Combo()->SetInsertionPointEnd(); Combo()->SetFocus(); if (evtHandler) @@ -2206,8 +2206,7 @@ wxSize wxGridCellBoolRenderer::GetBestSize(wxGrid& grid, wxSize size = checkbox->GetBestSize(); wxCoord checkSize = size.y + 2 * wxGRID_CHECKMARK_MARGIN; - // FIXME wxGTK::wxCheckBox::GetBestSize() gives "wrong" result -#if defined(__WXGTK__) || defined(__WXMOTIF__) +#if defined(__WXMOTIF__) checkSize -= size.y / 2; #endif @@ -2236,7 +2235,7 @@ void wxGridCellBoolRenderer::Draw(wxGrid& grid, if ( size.x >= minSize || size.y >= minSize ) { // and even leave (at least) 1 pixel margin - size.x = size.y = minSize - 2; + size.x = size.y = minSize; } // draw a border around checkmark @@ -2277,26 +2276,11 @@ void wxGridCellBoolRenderer::Draw(wxGrid& grid, value = wxGridCellBoolEditor::IsTrueValue(cellval); } - if ( value ) - { - wxRect rectMark = rectBorder; - -#ifdef __WXMSW__ - // MSW DrawCheckMark() is weird (and should probably be changed...) - rectMark.Inflate(-wxGRID_CHECKMARK_MARGIN / 2); - rectMark.x++; - rectMark.y++; -#else - rectMark.Inflate(-wxGRID_CHECKMARK_MARGIN); -#endif - - dc.SetTextForeground(attr.GetTextColour()); - dc.DrawCheckMark(rectMark); - } - - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.SetPen(wxPen(attr.GetTextColour(), 1, wxSOLID)); - dc.DrawRectangle(rectBorder); + int flags = 0; + if (value) + flags |= wxCONTROL_CHECKED; + + wxRendererNative::Get().DrawCheckBox( &grid, dc, rectBorder, flags ); } // ---------------------------------------------------------------------------- @@ -6298,7 +6282,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event ) if ( m_cursorMode == WXGRID_CURSOR_SELECT_CELL ) { if ( CanDragRowSize() && CanDragGridSize() ) - ChangeCursorMode(WXGRID_CURSOR_RESIZE_ROW); + ChangeCursorMode(WXGRID_CURSOR_RESIZE_ROW, NULL, false); } } else if ( dragCol >= 0 ) @@ -6308,7 +6292,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event ) if ( m_cursorMode == WXGRID_CURSOR_SELECT_CELL ) { if ( CanDragColSize() && CanDragGridSize() ) - ChangeCursorMode(WXGRID_CURSOR_RESIZE_COL); + ChangeCursorMode(WXGRID_CURSOR_RESIZE_COL, NULL, false); } } else // Neither on a row or col edge @@ -7218,7 +7202,7 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords ) return; } -#if !(defined(__WXMAC__) && wxMAC_USE_CORE_GRAPHICS) +#if !defined(__WXMAC__) wxClientDC dc( m_gridWin ); PrepareDC( dc ); #endif @@ -7244,7 +7228,7 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords ) // Otherwise refresh redraws the highlight! m_currentCellCoords = coords; -#if defined(__WXMAC__) && wxMAC_USE_CORE_GRAPHICS +#if defined(__WXMAC__) m_gridWin->Refresh(true /*, & r */); #else DrawGridCellArea( dc, cells ); @@ -7256,7 +7240,7 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords ) m_currentCellCoords = coords; wxGridCellAttr *attr = GetCellAttr( coords ); -#if !(defined(__WXMAC__) && wxMAC_USE_CORE_GRAPHICS) +#if !defined(__WXMAC__) DrawCellHighlight( dc, attr ); #endif attr->DecRef(); @@ -7829,7 +7813,6 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) int rightCol = GetColPos( internalXToCol(right) ); int bottomRow = internalYToRow(bottom); -#if !defined(__WXMAC__) || wxMAC_USE_CORE_GRAPHICS wxRegion clippedcells(0, 0, cw, ch); int i, j, cell_rows, cell_cols; @@ -7857,30 +7840,6 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) } } } -#else - wxRegion clippedcells( left, top, right - left, bottom - top ); - - int i, j, cell_rows, cell_cols; - wxRect rect; - - for (j=topRow; j<=bottomRow; j++) - { - for (i=leftCol; i<=rightCol; i++) - { - GetCellSize( j, i, &cell_rows, &cell_cols ); - if ((cell_rows > 1) || (cell_cols > 1)) - { - rect = CellToRect(j, i); - clippedcells.Subtract(rect); - } - else if ((cell_rows < 0) || (cell_cols < 0)) - { - rect = CellToRect(j + cell_rows, i + cell_cols); - clippedcells.Subtract(rect); - } - } - } -#endif dc.SetClippingRegion( clippedcells ); @@ -8475,7 +8434,7 @@ void wxGrid::ShowCellEditControl() if (rect.GetRight() > client_right) rect.SetRight( client_right - 1 ); } - + editor->SetCellAttr( attr ); editor->SetSize( rect ); if (nXMove != 0) @@ -10578,6 +10537,12 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction) if ( column ) { + // Ensure automatic width is not less than minimal width. See the + // comment in SetColSize() for explanation of why this isn't done + // in SetColSize(). + if ( !setAsMin ) + extentMax = wxMax(extentMax, GetColMinimalWidth(col)); + SetColSize( col, extentMax ); if ( !GetBatchCount() ) { @@ -10593,6 +10558,12 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction) } else { + // Ensure automatic width is not less than minimal height. See the + // comment in SetColSize() for explanation of why this isn't done + // in SetRowSize(). + if ( !setAsMin ) + extentMax = wxMax(extentMax, GetRowMinimalHeight(row)); + SetRowSize(row, extentMax); if ( !GetBatchCount() ) {