void ScrollWindow( int dx, int dy, const wxRect *rect );
+ wxGrid* GetOwner() { return m_owner; }
+
private:
wxGrid *m_owner;
wxGridRowLabelWindow *m_rowLabelWin;
wxGridCellEditor::wxGridCellEditor()
{
m_control = NULL;
+ m_attr = NULL;
}
{
// 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);
}
}
-// DJC MAPTEK
// return the value in the text control
wxString wxGridCellTextEditor::GetValue() const
{
}
}
-// DJC MAPTEK
// return the value in the spin control if it is there (the text control otherwise)
wxString wxGridCellNumberEditor::GetValue() const
{
if( HasRange() )
{
- int value = Spin()->GetValue();
+ long value = Spin()->GetValue();
s.Printf(wxT("%ld"), value);
}
else
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)
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
}
}
-// DJC MAPTEK
// return the value in the text control
wxString wxGridCellChoiceEditor::GetValue() const
{
return Combo()->GetValue();
}
+
#endif // wxUSE_COMBOBOX
// ----------------------------------------------------------------------------
{
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 )
// 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 )
}
// 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) )
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;
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() )
{
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);
}
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();
}
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);
InitColWidths();
}
- // DJC MAPTEK if < 0 calc new width from label
+ // if < 0 calc new width from label
if( width < 0 )
{
long w, h;