wxWindowID id,
wxEvtHandler* evtHandler)
{
+ DoCreate(parent, id, evtHandler);
+}
+
+void wxGridCellTextEditor::DoCreate(wxWindow* parent,
+ wxWindowID id,
+ wxEvtHandler* evtHandler,
+ long style)
+{
+ style |= wxTE_PROCESS_ENTER |
+ wxTE_PROCESS_TAB |
+ wxTE_AUTO_SCROLL |
+ wxNO_BORDER;
+
m_control = new wxTextCtrl(parent, id, wxEmptyString,
- wxDefaultPosition, wxDefaultSize
-#if defined(__WXMSW__)
- ,
- wxTE_PROCESS_ENTER |
- wxTE_PROCESS_TAB |
- wxTE_AUTO_SCROLL |
- wxNO_BORDER
-#endif
- );
+ wxDefaultPosition, wxDefaultSize,
+ style);
// set max length allowed in the textctrl, if the parameter was set
- if (m_maxChars != 0)
+ if ( m_maxChars != 0 )
{
- ((wxTextCtrl*)m_control)->SetMaxLength(m_maxChars);
+ Text()->SetMaxLength(m_maxChars);
}
wxGridCellEditor::Create(parent, id, evtHandler);
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);
}
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);
Combo()->SetSelection(pos);
}
- Combo()->SetInsertionPointEnd();
Combo()->SetFocus();
if (evtHandler)
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
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
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 );
}
// ----------------------------------------------------------------------------
wxGridRowOrColAttrData::~wxGridRowOrColAttrData()
{
- size_t count = m_attrs.Count();
+ size_t count = m_attrs.GetCount();
for ( size_t n = 0; n < count; n++ )
{
m_attrs[n]->DecRef();
int i = m_rowsOrCols.Index(rowOrCol);
if ( i == wxNOT_FOUND )
{
- // add the attribute
- m_rowsOrCols.Add(rowOrCol);
- m_attrs.Add(attr);
+ if ( attr )
+ {
+ // add the attribute
+ m_rowsOrCols.Add(rowOrCol);
+ m_attrs.Add(attr);
+ }
+ // nothing to remove
}
else
{
wxGridTypeRegistry::~wxGridTypeRegistry()
{
- size_t count = m_typeinfo.Count();
+ size_t count = m_typeinfo.GetCount();
for ( size_t i = 0; i < count; i++ )
delete m_typeinfo[i];
}
Create();
SetInitialSize(size);
+ CalcDimensions();
return true;
}
m_dragRowOrCol = -1;
m_isDragging = false;
m_startDragPos = wxDefaultPosition;
+ m_nativeColumnLabels = false;
m_waitForSlowClick = false;
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 )
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
void wxGrid::OnSize(wxSizeEvent& WXUNUSED(event))
{
- // update our children window positions and scrollbars
- CalcDimensions();
+ if (m_targetWindow != this) // check whether initialisation has been done
+ {
+ // update our children window positions and scrollbars
+ CalcDimensions();
+ }
}
void wxGrid::OnKeyDown( wxKeyEvent& event )
return;
}
-#if !(defined(__WXMAC__) && wxMAC_USE_CORE_GRAPHICS)
+#if !defined(__WXMAC__)
wxClientDC dc( m_gridWin );
PrepareDC( dc );
#endif
// 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 );
m_currentCellCoords = coords;
wxGridCellAttr *attr = GetCellAttr( coords );
-#if !(defined(__WXMAC__) && wxMAC_USE_CORE_GRAPHICS)
+#if !defined(__WXMAC__)
DrawCellHighlight( dc, attr );
#endif
attr->DecRef();
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;
}
}
}
-#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 );
wxRect rect;
-#if 0
-def __WXGTK20__
- rect.SetX( 1 );
- rect.SetY( GetRowTop(row) + 1 );
- rect.SetWidth( m_rowLabelWidth - 2 );
- rect.SetHeight( GetRowHeight(row) - 2 );
-
- CalcScrolledPosition( 0, rect.y, NULL, &rect.y );
-
- wxWindowDC *win_dc = (wxWindowDC*) &dc;
-
- wxRendererNative::Get().DrawHeaderButton( win_dc->m_owner, dc, rect, 0 );
-#else
int rowTop = GetRowTop(row),
rowBottom = GetRowBottom(row) - 1;
dc.SetPen( *wxWHITE_PEN );
dc.DrawLine( 1, rowTop, 1, rowBottom );
dc.DrawLine( 1, rowTop, m_rowLabelWidth - 1, rowTop );
-#endif
dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( GetLabelTextColour() );
DrawTextRectangle( dc, GetRowLabelValue( row ), rect, hAlign, vAlign );
}
+void wxGrid::SetUseNativeColLabels( bool native )
+{
+ m_nativeColumnLabels = native;
+ if (native)
+ {
+ int height = wxRendererNative::Get().GetHeaderButtonHeight( this );
+ SetColLabelSize( height );
+ }
+
+ m_colLabelWin->Refresh();
+}
+
void wxGrid::DrawColLabels( wxDC& dc,const wxArrayInt& cols )
{
if ( !m_numCols )
wxRect rect;
-#if 0
-def __WXGTK20__
- rect.SetX( colLeft + 1 );
- rect.SetY( 1 );
- rect.SetWidth( GetColWidth(col) - 2 );
- rect.SetHeight( m_colLabelHeight - 2 );
-
- wxWindowDC *win_dc = (wxWindowDC*) &dc;
+ if (m_nativeColumnLabels)
+ {
+ rect.SetX( colLeft);
+ rect.SetY( 0 );
+ rect.SetWidth( GetColWidth(col));
+ rect.SetHeight( m_colLabelHeight );
- wxRendererNative::Get().DrawHeaderButton( win_dc->m_owner, dc, rect, 0 );
-#else
- int colRight = GetColRight(col) - 1;
+ wxWindowDC *win_dc = (wxWindowDC*) &dc;
+ wxRendererNative::Get().DrawHeaderButton( win_dc->GetWindow(), dc, rect, 0 );
+ }
+ else
+ {
+ int colRight = GetColRight(col) - 1;
- dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID) );
- dc.DrawLine( colRight, 0, colRight, m_colLabelHeight - 1 );
- dc.DrawLine( colLeft, 0, colRight, 0 );
- dc.DrawLine( colLeft, m_colLabelHeight - 1,
+ dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID) );
+ dc.DrawLine( colRight, 0, colRight, m_colLabelHeight - 1 );
+ dc.DrawLine( colLeft, 0, colRight, 0 );
+ dc.DrawLine( colLeft, m_colLabelHeight - 1,
colRight + 1, m_colLabelHeight - 1 );
- dc.SetPen( *wxWHITE_PEN );
- dc.DrawLine( colLeft, 1, colLeft, m_colLabelHeight - 1 );
- dc.DrawLine( colLeft, 1, colRight, 1 );
-#endif
+ dc.SetPen( *wxWHITE_PEN );
+ dc.DrawLine( colLeft, 1, colLeft, m_colLabelHeight - 1 );
+ dc.DrawLine( colLeft, 1, colRight, 1 );
+ }
dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( GetLabelTextColour() );
continue;
}
- long lineWidth = 0,
+ wxCoord lineWidth = 0,
lineHeight = 0;
dc.GetTextExtent(line, &lineWidth, &lineHeight);
const wxArrayString& lines,
long *width, long *height ) const
{
- long w = 0;
- long h = 0;
- long lineW = 0, lineH = 0;
+ wxCoord w = 0;
+ wxCoord h = 0;
+ wxCoord lineW = 0, lineH = 0;
size_t i;
for ( i = 0; i < lines.GetCount(); i++ )
if (rect.GetRight() > client_right)
rect.SetRight( client_right - 1 );
}
-
+
editor->SetCellAttr( attr );
editor->SetSize( rect );
if (nXMove != 0)
// make any visible change if the the thickness is getting smaller.
int row = m_currentCellCoords.GetRow();
int col = m_currentCellCoords.GetCol();
- if ( GetColWidth(col) <= 0 || GetRowHeight(row) <= 0 )
+ if ( row == -1 || col == -1 || GetColWidth(col) <= 0 || GetRowHeight(row) <= 0 )
return;
wxRect rect = CellToRect(row, col);
int index = m_typeRegistry->FindOrCloneDataType(typeName);
if ( index == wxNOT_FOUND )
{
- wxString errStr;
-
- errStr.Printf(wxT("Unknown data type name [%s]"), typeName.c_str());
- wxFAIL_MSG(errStr.c_str());
+ wxFAIL_MSG(wxString::Format(wxT("Unknown data type name [%s]"), typeName.c_str()));
return NULL;
}
int index = m_typeRegistry->FindOrCloneDataType(typeName);
if ( index == wxNOT_FOUND )
{
- wxString errStr;
-
- errStr.Printf(wxT("Unknown data type name [%s]"), typeName.c_str());
- wxFAIL_MSG(errStr.c_str());
+ wxFAIL_MSG(wxString::Format(wxT("Unknown data type name [%s]"), typeName.c_str()));
return NULL;
}
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() )
{
}
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() )
{
for ( int rowOrCol = 0; rowOrCol < numRowsOrCols; rowOrCol++ )
{
lines.Clear();
- StringToLines(calcRows ? GetRowLabelValue(rowOrCol)
- : GetColLabelValue(rowOrCol),
- lines);
+
+ wxString label = calcRows ? GetRowLabelValue(rowOrCol)
+ : GetColLabelValue(rowOrCol);
+ StringToLines(label, lines);
long w, h;
GetTextBoxSize(dc, lines, &w, &h);