int key = 0;
bool keyOk = true;
+#ifdef __WXGTK20__
+ // If it's a F-Key or other special key then it shouldn't start the
+ // editor.
+ if (event.GetKeyCode() >= WXK_START)
+ return false;
+#endif
#if wxUSE_UNICODE
// if the unicode key code is not really a unicode character (it may
// be a function key or etc., the platforms appear to always give us a
textOrientation );
}
-void wxGrid::DrawTextRectangle( wxDC& dc,
+// VZ: this should be replaced with wxDC::DrawLabel() to which we just have to
+// add textOrientation support
+void wxGrid::DrawTextRectangle(wxDC& dc,
const wxArrayString& lines,
const wxRect& rect,
int horizAlign,
int vertAlign,
- int textOrientation )
+ int textOrientation)
{
- long textWidth = 0, textHeight = 0;
- long lineWidth = 0, lineHeight = 0;
- int nLines;
+ if ( lines.empty() )
+ return;
- dc.SetClippingRegion( rect );
+ wxDCClipper clip(dc, rect);
- nLines = lines.GetCount();
- if ( nLines > 0 )
- {
- int l;
- float x = 0.0, y = 0.0;
+ long textWidth,
+ textHeight;
- if ( textOrientation == wxHORIZONTAL )
- GetTextBoxSize( dc, lines, &textWidth, &textHeight );
- else
- GetTextBoxSize( dc, lines, &textHeight, &textWidth );
+ if ( textOrientation == wxHORIZONTAL )
+ GetTextBoxSize( dc, lines, &textWidth, &textHeight );
+ else
+ GetTextBoxSize( dc, lines, &textHeight, &textWidth );
- switch ( vertAlign )
- {
+ int x = 0,
+ y = 0;
+ switch ( vertAlign )
+ {
case wxALIGN_BOTTOM:
if ( textOrientation == wxHORIZONTAL )
y = rect.y + (rect.height - textHeight - 1);
else
x = rect.x + 1;
break;
- }
+ }
- // Align each line of a multi-line label
- for ( l = 0; l < nLines; l++ )
+ // Align each line of a multi-line label
+ size_t nLines = lines.GetCount();
+ for ( size_t l = 0; l < nLines; l++ )
+ {
+ const wxString& line = lines[l];
+
+ if ( line.empty() )
{
- dc.GetTextExtent(lines[l], &lineWidth, &lineHeight);
+ *(textOrientation == wxHORIZONTAL ? &y : &x) += dc.GetCharHeight();
+ continue;
+ }
- switch ( horizAlign )
- {
+ long lineWidth,
+ lineHeight;
+ dc.GetTextExtent(line, &lineWidth, &lineHeight);
+
+ switch ( horizAlign )
+ {
case wxALIGN_RIGHT:
if ( textOrientation == wxHORIZONTAL )
x = rect.x + (rect.width - lineWidth - 1);
else
y = rect.y + rect.height - 1;
break;
- }
+ }
- if ( textOrientation == wxHORIZONTAL )
- {
- dc.DrawText( lines[l], (int)x, (int)y );
- y += lineHeight;
- }
- else
- {
- dc.DrawRotatedText( lines[l], (int)x, (int)y, 90.0 );
- x += lineHeight;
- }
+ if ( textOrientation == wxHORIZONTAL )
+ {
+ dc.DrawText( line, x, y );
+ y += lineHeight;
+ }
+ else
+ {
+ dc.DrawRotatedText( line, x, y, 90.0 );
+ x += lineHeight;
}
}
-
- dc.DestroyClippingRegion();
}
// Split multi-line text up into an array of strings.
editor->SetCellAttr( attr );
editor->SetSize( rect );
- editor->GetControl()->Move(
- editor->GetControl()->GetPosition().x + nXMove,
- editor->GetControl()->GetPosition().y );
+ if (nXMove != 0)
+ editor->GetControl()->Move(
+ editor->GetControl()->GetPosition().x + nXMove,
+ editor->GetControl()->GetPosition().y );
editor->Show( true, attr );
- int colXPos = 0;
- for (int i = 0; i < m_currentCellCoords.GetCol(); i++)
- {
- colXPos += GetColSize( i );
- }
-
- int xUnit = 1, yUnit = 1;
- GetScrollPixelsPerUnit( &xUnit, &yUnit );
- if (m_currentCellCoords.GetCol() != 0)
- Scroll( colXPos / xUnit - 1, GetScrollPos( wxVERTICAL ) );
- else
- Scroll( colXPos / xUnit, GetScrollPos( wxVERTICAL ) );
-
// recalc dimensions in case we need to
// expand the scrolled window to account for editor
CalcDimensions();