diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2004-05-10 12:13:38 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2004-05-10 12:13:38 +0000 |
commit | cc7247bb0079ba044a47ebeea10b9d0fe4c22766 (patch) | |
tree | d195cb5ae84196d015432ac85952341e3bf95da0 /svx/source/fmcomp | |
parent | b3535e91871194cddf2b07fdecf5ac523ec04569 (diff) |
INTEGRATION: CWS dba09 (1.33.166); FILE MERGED
2004/04/27 07:07:53 fs 1.33.166.6: RESYNC: (1.33-1.34); FILE MERGED
2004/03/22 16:29:59 fs 1.33.166.5: #i13497# #i14649# also need a painter for combo box cells now
2004/03/22 16:12:55 fs 1.33.166.4: #i13497# #i14649# also respect line end setting of the model when retrieving text
2004/03/19 17:13:00 fs 1.33.166.3: corrected alignment
2004/03/19 16:48:23 fs 1.33.166.2: #i14649# proper coloring when painting cells the new way
2004/03/19 15:35:38 fs 1.33.166.1: #i13497# #i14649# enable multi line text column
Diffstat (limited to 'svx/source/fmcomp')
-rw-r--r-- | svx/source/fmcomp/gridcell.cxx | 503 |
1 files changed, 333 insertions, 170 deletions
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx index 9e2db44c3e71..186828ac25a0 100644 --- a/svx/source/fmcomp/gridcell.cxx +++ b/svx/source/fmcomp/gridcell.cxx @@ -2,9 +2,9 @@ * * $RCSfile: gridcell.cxx,v $ * - * $Revision: 1.34 $ + * $Revision: 1.35 $ * - * last change: $Author: hr $ $Date: 2004-04-13 10:56:16 $ + * last change: $Author: hr $ $Date: 2004-05-10 13:13:38 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -114,6 +114,9 @@ #ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_ #include <com/sun/star/container/XNamed.hpp> #endif +#ifndef _COM_SUN_STAR_AWT_LINEENDFORMAT_HPP_ +#include <com/sun/star/awt/LineEndFormat.hpp> +#endif #ifndef _FMTFIELD_HXX_ #include <svtools/fmtfield.hxx> @@ -161,6 +164,9 @@ #include <math.h> +#ifndef _SVEDIT_HXX +#include <svtools/svmedit.hxx> +#endif using namespace ::connectivity; using namespace ::connectivity::simple; @@ -175,6 +181,43 @@ using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::form; +//================================================================== +//= helper +//================================================================== +namespace +{ + static LineEnd getModelLineEndSetting( const Reference< XPropertySet >& _rxModel ) + { + LineEnd eFormat = LINEEND_LF; + + try + { + sal_Int16 nLineEndFormat = awt::LineEndFormat::LINE_FEED; + + OSL_ENSURE( _rxModel.is(), "getModelLineEndSetting: invalid column model!" ); + if ( _rxModel.is() ) + OSL_VERIFY( _rxModel->getPropertyValue( FM_PROP_LINEENDFORMAT ) >>= nLineEndFormat ); + + switch ( nLineEndFormat ) + { + case awt::LineEndFormat::CARRIAGE_RETURN: eFormat = LINEEND_CR; break; + case awt::LineEndFormat::LINE_FEED: eFormat = LINEEND_LF; break; + case awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED: eFormat = LINEEND_CRLF; break; + default: + OSL_ENSURE( sal_False, "getModelLineEndSetting: what's this?" ); + } + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "getModelLineEndSetting: caught an exception!" ); + } + return eFormat; + } +} + +//================================================================== +//= DbGridColumn +//================================================================== //------------------------------------------------------------------------------ CellControllerRef DbGridColumn::s_xEmptyController; @@ -510,8 +553,8 @@ void DbGridColumn::Paint(OutputDevice& rDev, rDev.DrawText(rRect, OBJECTTEXT, nStyle); } } - else if (m_pCell->ISA(FmXFilterCell)) - ((FmXFilterCell*)m_pCell)->Paint(rDev, rRect); + else if ( m_pCell->ISA( FmXFilterCell ) ) + static_cast< FmXFilterCell* >( m_pCell )->Paint( rDev, rRect ); } //------------------------------------------------------------------------------ @@ -521,6 +564,24 @@ void DbGridColumn::ImplInitSettings(Window* pParent, sal_Bool bFont, sal_Bool bF m_pCell->ImplInitSettings(pParent, bFont, bForeground, bBackground); } +//============================================================================== +//= cell controls +//============================================================================== +TYPEINIT0( DbCellControl ) +TYPEINIT1( DbLimitedLengthField, DbCellControl ) +TYPEINIT1( DbTextField, DbLimitedLengthField ) +TYPEINIT1( DbFormattedField, DbLimitedLengthField ) +TYPEINIT1( DbCheckBox, DbCellControl ) +TYPEINIT1( DbComboBox, DbCellControl ) +TYPEINIT1( DbListBox, DbCellControl ) +TYPEINIT1( DbPatternField, DbCellControl ) +TYPEINIT1( DbSpinField, DbCellControl ) +TYPEINIT1( DbDateField, DbSpinField ) +TYPEINIT1( DbTimeField, DbSpinField ) +TYPEINIT1( DbCurrencyField, DbSpinField ) +TYPEINIT1( DbNumericField, DbSpinField ) +TYPEINIT1( DbFilterField, DbCellControl ) + //------------------------------------------------------------------------------ DbCellControl::DbCellControl( DbGridColumn& _rColumn, sal_Bool _bText ) :OPropertyChangeListener(m_aMutex) @@ -830,46 +891,80 @@ void DbCellControl::SetTextLineColor(const Color& _rColor) m_pPainter->SetTextLineColor(_rColor); } +namespace +{ + static void lcl_implAlign( Window* _pWindow, WinBits _nAlignmentBit ) + { + WinBits nStyle = _pWindow->GetStyle(); + nStyle &= ~(WB_LEFT | WB_RIGHT | WB_CENTER); + _pWindow->SetStyle( nStyle | _nAlignmentBit ); + } +} + //------------------------------------------------------------------------------ void DbCellControl::AlignControl(sal_Int16 nAlignment) { - WinBits nStyle = m_pWindow->GetStyle(); - nStyle &= ~(WB_LEFT | WB_RIGHT | WB_CENTER); + WinBits nAlignmentBit = 0; switch (nAlignment) { case ::com::sun::star::awt::TextAlign::RIGHT: - nStyle |= WB_RIGHT; + nAlignmentBit = WB_RIGHT; break; case ::com::sun::star::awt::TextAlign::CENTER: - nStyle |= WB_CENTER; + nAlignmentBit = WB_CENTER; break; default: - nStyle |= WB_LEFT; + nAlignmentBit = WB_LEFT; break; } - m_pWindow->SetStyle(nStyle); + lcl_implAlign( m_pWindow, nAlignmentBit ); + if ( m_pPainter ) + lcl_implAlign( m_pPainter, nAlignmentBit ); } //------------------------------------------------------------------------------ -void DbCellControl::Paint(OutputDevice& rDev, const Rectangle& rRect) +void DbCellControl::Paint( OutputDevice& _rDev, const Rectangle& _rRect ) { - m_pPainter->SetPosSizePixel(rRect.TopLeft(), rRect.GetSize()); - m_pPainter->Show(); - m_pPainter->Update(); - m_pPainter->SetParentUpdateMode( sal_False ); - m_pPainter->Hide(); - m_pPainter->SetParentUpdateMode( sal_True ); + if ( m_pPainter->GetParent() == &_rDev ) + { + m_pPainter->SetPaintTransparent( sal_True ); + m_pPainter->SetBackground( ); + m_pPainter->SetControlBackground( _rDev.GetFillColor() ); + m_pPainter->SetControlForeground( _rDev.GetTextColor() ); + m_pPainter->SetTextColor( _rDev.GetTextColor() ); + m_pPainter->SetTextFillColor( _rDev.GetTextColor() ); + + Font aFont( _rDev.GetFont() ); + aFont.SetTransparent( TRUE ); + m_pPainter->SetFont( aFont ); + + m_pPainter->SetPosSizePixel( _rRect.TopLeft(), _rRect.GetSize() ); + m_pPainter->Show(); + m_pPainter->Update(); + m_pPainter->SetParentUpdateMode( sal_False ); + m_pPainter->Hide(); + m_pPainter->SetParentUpdateMode( sal_True ); + } + else + m_pPainter->Draw( &_rDev, _rRect.TopLeft(), _rRect.GetSize(), 0 ); +} + +//------------------------------------------------------------------------------ +void DbCellControl::Paint( OutputDevice& _rDev, const Rectangle& _rRect, const Reference< XColumn >& _rxField, const Reference< XNumberFormatter >& _rxFormatter ) +{ + m_pPainter->SetText( GetFormatText( _rxField, _rxFormatter ) ); + Paint( _rDev, _rRect ); } //------------------------------------------------------------------------------ -double DbCellControl::GetValue(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const +double DbCellControl::GetValue(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const { double fValue = 0; if (m_rColumn.IsNumeric()) { try { - fValue = _xVariant->getDouble(); + fValue = _rxField->getDouble(); } catch(const Exception&) { } } @@ -878,7 +973,7 @@ double DbCellControl::GetValue(const Reference< ::com::sun::star::sdb::XColumn > sal_Bool bSuccess = sal_False; try { - fValue = _xVariant->getDouble(); + fValue = _rxField->getDouble(); bSuccess = sal_True; } catch(const Exception&) { } @@ -886,7 +981,7 @@ double DbCellControl::GetValue(const Reference< ::com::sun::star::sdb::XColumn > { try { - fValue = xFormatter->convertStringToNumber(m_rColumn.GetKey(), _xVariant->getString()); + fValue = xFormatter->convertStringToNumber(m_rColumn.GetKey(), _rxField->getString()); } catch(const Exception&) { } } @@ -933,10 +1028,19 @@ void DbLimitedLengthField::implAdjustGenericFieldSetting( const Reference< XProp //============================================================================== //= DbTextField //============================================================================== +//------------------------------------------------------------------------------ DbTextField::DbTextField(DbGridColumn& _rColumn) :DbLimitedLengthField(_rColumn) ,m_nKeyType(::com::sun::star::util::NumberFormat::TEXT) + ,m_pEdit( NULL ) +{ +} + +//------------------------------------------------------------------------------ +DbTextField::~DbTextField( ) { + DELETEZ( m_pPainterImplementation ); + DELETEZ( m_pEdit ); } //------------------------------------------------------------------------------ @@ -944,27 +1048,60 @@ void DbTextField::Init(Window* pParent, const Reference< XRowSet >& xCursor) { sal_Int16 nAlignment = m_rColumn.SetAlignmentFromModel(-1); - Reference< ::com::sun::star::beans::XPropertySet > xModel(m_rColumn.getModel()); + Reference< XPropertySet > xModel( m_rColumn.getModel() ); + + WinBits nStyle = WB_LEFT; switch (nAlignment) { - case ::com::sun::star::awt::TextAlign::RIGHT: - m_pWindow = new Edit(pParent, WB_RIGHT); - break; + case awt::TextAlign::RIGHT: + nStyle = WB_RIGHT; + break; - case ::com::sun::star::awt::TextAlign::CENTER: - m_pWindow = new Edit(pParent, WB_CENTER); - break; + case awt::TextAlign::CENTER: + nStyle = WB_CENTER; + break; + } - default: - m_pWindow = new Edit(pParent, WB_LEFT); + // is this a multi-line field? + sal_Bool bIsMultiLine = sal_False; + try + { + if ( xModel.is() ) + { + OSL_VERIFY( xModel->getPropertyValue( FM_PROP_MULTILINE ) >>= bIsMultiLine ); + } + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "DbTextField::Init: caught an exception while determining the multi-line capabilities!" ); + } - // Alles nur damit die Selektion bei Focuserhalt von rechts nach links geht - AllSettings aSettings = m_pWindow->GetSettings(); - StyleSettings aStyleSettings = aSettings.GetStyleSettings(); - aStyleSettings.SetSelectionOptions( - aStyleSettings.GetSelectionOptions() | SELECTION_OPTION_SHOWFIRST); - aSettings.SetStyleSettings(aStyleSettings); - m_pWindow->SetSettings(aSettings); + if ( bIsMultiLine ) + { + m_pWindow = new MultiLineTextCell( pParent, nStyle ); + m_pEdit = new MultiLineEditImplementation( *static_cast< MultiLineTextCell* >( m_pWindow ) ); + + m_pPainter = new MultiLineTextCell( pParent, nStyle ); + m_pPainterImplementation = new MultiLineEditImplementation( *static_cast< MultiLineTextCell* >( m_pPainter ) ); + } + else + { + m_pWindow = new Edit( pParent, nStyle ); + m_pEdit = new EditImplementation( *static_cast< Edit* >( m_pWindow ) ); + + m_pPainter = new Edit( pParent, nStyle ); + m_pPainterImplementation = new EditImplementation( *static_cast< Edit* >( m_pPainter ) ); + } + + if ( WB_LEFT == nStyle ) + { + // this is so that when getting the focus, the selection is oriented left-to-right + AllSettings aSettings = m_pWindow->GetSettings(); + StyleSettings aStyleSettings = aSettings.GetStyleSettings(); + aStyleSettings.SetSelectionOptions( + aStyleSettings.GetSelectionOptions() | SELECTION_OPTION_SHOWFIRST); + aSettings.SetStyleSettings(aStyleSettings); + m_pWindow->SetSettings(aSettings); } implAdjustGenericFieldSetting( xModel ); @@ -978,23 +1115,36 @@ void DbTextField::Init(Window* pParent, const Reference< XRowSet >& xCursor) //------------------------------------------------------------------------------ CellControllerRef DbTextField::CreateController() const { - return new EditCellController((Edit*)m_pWindow); + return new EditCellController( m_pEdit ); +} + +//------------------------------------------------------------------------------ +void DbTextField::Paint( OutputDevice& _rDev, const Rectangle& _rRect, const Reference< XColumn >& _rxField, const Reference< XNumberFormatter >& _rxFormatter ) +{ + if ( m_pPainterImplementation ) + m_pPainterImplementation->SetText( GetFormatText( _rxField, _rxFormatter, NULL ) ); + + if ( m_pPainter->GetParent() != &_rDev ) + m_pPainter->Draw( &_rDev, _rRect.TopLeft(), _rRect.GetSize(), 0 ); + else + DbLimitedLengthField::Paint( _rDev, _rRect, _rxField, _rxFormatter ); } //------------------------------------------------------------------------------ -String DbTextField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbTextField::GetFormatText(const Reference< XColumn >& _rxField, const Reference< XNumberFormatter >& xFormatter, Color** ppColor) { ::rtl::OUString aString; - if ( _xVariant.is() ) - aString = getValue( _xVariant, xFormatter, m_rColumn.GetParent().getNullDate(), m_rColumn.GetKey(), m_nKeyType); + if ( _rxField.is() ) + aString = getValue( _rxField, xFormatter, m_rColumn.GetParent().getNullDate(), m_rColumn.GetKey(), m_nKeyType); + return aString; } //------------------------------------------------------------------------------ -void DbTextField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbTextField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - static_cast< Edit* >( m_pWindow )->SetText( GetFormatText( _xVariant, xFormatter ) ); - static_cast< Edit* >( m_pWindow )->SetSelection( Selection( SELECTION_MAX, SELECTION_MIN ) ); + m_pEdit->SetText( GetFormatText( _rxField, xFormatter ) ); + m_pEdit->SetSelection( Selection( SELECTION_MAX, SELECTION_MIN ) ); } //------------------------------------------------------------------------------ @@ -1004,9 +1154,8 @@ void DbTextField::updateFromModel( Reference< XPropertySet > _rxModel ) ::rtl::OUString sText; _rxModel->getPropertyValue( FM_PROP_TEXT ) >>= sText; - Edit* pEdit = static_cast< Edit* >( m_pWindow ); - xub_StrLen nMaxTextLen = pEdit->GetMaxTextLen(); + xub_StrLen nMaxTextLen = m_pEdit->GetMaxTextLen(); if ( EDIT_NOLIMIT != nMaxTextLen && sText.getLength() > nMaxTextLen ) { sal_Int32 nDiff = sText.getLength() - nMaxTextLen; @@ -1014,17 +1163,16 @@ void DbTextField::updateFromModel( Reference< XPropertySet > _rxModel ) } - pEdit->SetText( sText ); - pEdit->SetSelection( Selection( SELECTION_MAX, SELECTION_MIN ) ); + m_pEdit->SetText( sText ); + m_pEdit->SetSelection( Selection( SELECTION_MAX, SELECTION_MIN ) ); } //------------------------------------------------------------------------------ sal_Bool DbTextField::commitControl() { - Edit* pEdit = static_cast< Edit* >( m_pWindow ); - ::rtl::OUString aText( pEdit->GetText() ); + ::rtl::OUString aText( m_pEdit->GetText( getModelLineEndSetting( m_rColumn.getModel() ) ) ); // we have to check if the length before we can decide if the value was modified - xub_StrLen nMaxTextLen = pEdit->GetMaxTextLen(); + xub_StrLen nMaxTextLen = m_pEdit->GetMaxTextLen(); if ( EDIT_NOLIMIT != nMaxTextLen ) { ::rtl::OUString sOldValue; @@ -1292,14 +1440,14 @@ void DbFormattedField::_propertyChanged( const PropertyChangeEvent& _rEvent ) th } //------------------------------------------------------------------------------ -String DbFormattedField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbFormattedField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { // defaultmaessig keine Farb-Angabe if (ppColor != NULL) *ppColor = NULL; // NULL-Wert -> leerer Text - if (!_xVariant.is()) + if (!_rxField.is()) return String(); String aText; @@ -1310,8 +1458,8 @@ String DbFormattedField::GetFormatText(const Reference< ::com::sun::star::sdb::X // ein double-Feld bindet und als Text formatiert, liefert m_rColumn.IsNumeric() sal_True. Das heisst // also einfach, dass ich den Inhalt der Variant mittels getDouble abfragen kann, und dann kann // ich den Rest (die Formatierung) dem FormattedField ueberlassen. - double dValue = getValue(_xVariant, m_rColumn.GetParent().getNullDate(), m_nKeyType); - if (_xVariant->wasNull()) + double dValue = getValue(_rxField, m_rColumn.GetParent().getNullDate(), m_nKeyType); + if (_rxField->wasNull()) return aText; ((FormattedField*)m_pPainter)->SetValue(dValue); } @@ -1319,8 +1467,8 @@ String DbFormattedField::GetFormatText(const Reference< ::com::sun::star::sdb::X { // Hier kann ich nicht mit einem double arbeiten, da das Feld mir keines liefern kann. // Also einfach den Text vom ::com::sun::star::util::NumberFormatter in die richtige ::com::sun::star::form::component::Form brinden lassen. - aText = (const sal_Unicode*)_xVariant->getString(); - if (_xVariant->wasNull()) + aText = (const sal_Unicode*)_rxField->getString(); + if (_rxField->wasNull()) return aText; ((FormattedField*)m_pPainter)->SetTextFormatted(aText); } @@ -1333,10 +1481,10 @@ String DbFormattedField::GetFormatText(const Reference< ::com::sun::star::sdb::X } //------------------------------------------------------------------------------ -void DbFormattedField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbFormattedField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { FormattedField* pFormattedWindow = static_cast<FormattedField*>(m_pWindow); - if (!_xVariant.is()) + if (!_rxField.is()) { // NULL-Wert -> leerer Text m_pWindow->SetText(String()); } @@ -1347,8 +1495,8 @@ void DbFormattedField::UpdateFromField(const Reference< ::com::sun::star::sdb::X // ein double-Feld bindet und als Text formatiert, liefert m_rColumn.IsNumeric() sal_True. Das heisst // also einfach, dass ich den Inhalt der Variant mittels getDouble abfragen kann, und dann kann // ich den Rest (die Formatierung) dem FormattedField ueberlassen. - double dValue = getValue(_xVariant, m_rColumn.GetParent().getNullDate(), m_nKeyType); - if (_xVariant->wasNull()) + double dValue = getValue(_rxField, m_rColumn.GetParent().getNullDate(), m_nKeyType); + if (_rxField->wasNull()) m_pWindow->SetText(String()); else pFormattedWindow->SetValue(dValue); @@ -1357,7 +1505,7 @@ void DbFormattedField::UpdateFromField(const Reference< ::com::sun::star::sdb::X { // Hier kann ich nicht mit einem double arbeiten, da das Feld mir keines liefern kann. // Also einfach den Text vom ::com::sun::star::util::NumberFormatter in die richtige ::com::sun::star::form::component::Form brinden lassen. - String sText( _xVariant->getString()); + String sText( _rxField->getString()); pFormattedWindow->SetTextFormatted( sText ); pFormattedWindow->SetSelection( Selection( SELECTION_MAX, SELECTION_MIN ) ); @@ -1437,35 +1585,32 @@ CellControllerRef DbCheckBox::CreateController() const return new CheckBoxCellController((CheckBoxControl*)m_pWindow); } //------------------------------------------------------------------------------ -static void lcl_setCheckBoxState( const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, +static void lcl_setCheckBoxState( const Reference< ::com::sun::star::sdb::XColumn >& _rxField, CheckBoxControl* _pCheckBoxControl ) { TriState eState = STATE_DONTKNOW; - if (_xVariant.is()) + if (_rxField.is()) { - sal_Bool bValue = _xVariant->getBoolean(); - if (!_xVariant->wasNull()) + sal_Bool bValue = _rxField->getBoolean(); + if (!_rxField->wasNull()) eState = bValue ? STATE_CHECK : STATE_NOCHECK; } _pCheckBoxControl->GetBox().SetState(eState); } //------------------------------------------------------------------------------ -void DbCheckBox::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbCheckBox::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - lcl_setCheckBoxState( _xVariant, static_cast<CheckBoxControl*>(m_pWindow) ); + lcl_setCheckBoxState( _rxField, static_cast<CheckBoxControl*>(m_pWindow) ); } //------------------------------------------------------------------------------ void DbCheckBox::Paint(OutputDevice& rDev, const Rectangle& rRect, - const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, + const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - lcl_setCheckBoxState( _xVariant, static_cast<CheckBoxControl*>(m_pPainter) ); - if ( m_pPainter->GetParent() != &rDev ) - m_pPainter->Draw(&rDev,rRect.TopLeft(), rRect.GetSize(),0); - else - DbCellControl::Paint(rDev, rRect); + lcl_setCheckBoxState( _rxField, static_cast<CheckBoxControl*>(m_pPainter) ); + DbCellControl::Paint( rDev, rRect, _rxField, xFormatter ); } //------------------------------------------------------------------------------ @@ -1546,21 +1691,21 @@ CellControllerRef DbPatternField::CreateController() const } //------------------------------------------------------------------------------ -String DbPatternField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbPatternField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { ::rtl::OUString aString; - if (_xVariant.is()) - aString = _xVariant->getString(); + if (_rxField.is()) + aString = _rxField->getString(); m_pPainter->SetText(aString); return m_pPainter->GetText(); } //------------------------------------------------------------------------------ -void DbPatternField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbPatternField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { Edit* pEdit = (Edit*)m_pWindow; - pEdit->SetText(GetFormatText(_xVariant, xFormatter)); + pEdit->SetText(GetFormatText(_rxField, xFormatter)); pEdit->SetSelection(Selection(SELECTION_MAX,SELECTION_MIN)); } @@ -1585,7 +1730,7 @@ sal_Bool DbPatternField::commitControl() } //============================================================================== -//= DbNumericField +//= DbSpinField //============================================================================== //------------------------------------------------------------------------------ DbSpinField::DbSpinField( DbGridColumn& _rColumn, sal_Int16 _nStandardAlign ) @@ -1700,14 +1845,14 @@ SpinField* DbNumericField::createField( Window* _pParent, WinBits _nFieldStyle, } //------------------------------------------------------------------------------ -String DbNumericField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbNumericField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { - if (!_xVariant.is()) + if (!_rxField.is()) return String(); else { - double fValue = GetValue(_xVariant, xFormatter); - if (_xVariant->wasNull()) + double fValue = GetValue(_rxField, xFormatter); + if (_rxField->wasNull()) return String(); else { @@ -1718,14 +1863,14 @@ String DbNumericField::GetFormatText(const Reference< ::com::sun::star::sdb::XCo } //------------------------------------------------------------------------------ -void DbNumericField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbNumericField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - if (!_xVariant.is()) + if (!_rxField.is()) m_pWindow->SetText(String()); else { - double fValue = GetValue(_xVariant, xFormatter); - if (_xVariant->wasNull()) + double fValue = GetValue(_rxField, xFormatter); + if (_rxField->wasNull()) m_pWindow->SetText(String()); else ((DoubleNumericField*)m_pWindow)->SetValue(fValue); @@ -1819,23 +1964,23 @@ SpinField* DbCurrencyField::createField( Window* _pParent, WinBits _nFieldStyle, } //------------------------------------------------------------------------------ -double DbCurrencyField::GetCurrency(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const +double DbCurrencyField::GetCurrency(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const { - double fValue = GetValue(_xVariant, xFormatter); + double fValue = GetValue(_rxField, xFormatter); if (m_nScale) fValue *= pow(10.0, double(m_nScale)); return fValue; } //------------------------------------------------------------------------------ -String DbCurrencyField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbCurrencyField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { - if (!_xVariant.is()) + if (!_rxField.is()) return String(); else { - double fValue = GetCurrency(_xVariant, xFormatter); - if (_xVariant->wasNull()) + double fValue = GetCurrency(_rxField, xFormatter); + if (_rxField->wasNull()) return String(); else { @@ -1846,14 +1991,14 @@ String DbCurrencyField::GetFormatText(const Reference< ::com::sun::star::sdb::XC } //------------------------------------------------------------------------------ -void DbCurrencyField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbCurrencyField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - if (!_xVariant.is()) + if (!_rxField.is()) m_pWindow->SetText(String()); else { - double fValue = GetCurrency(_xVariant, xFormatter); - if (_xVariant->wasNull()) + double fValue = GetCurrency(_rxField, xFormatter); + if (_rxField->wasNull()) m_pWindow->SetText(String()); else ((LongCurrencyField*)m_pWindow)->SetValue(fValue); @@ -1958,14 +2103,14 @@ void DbDateField::implAdjustGenericFieldSetting( const Reference< XPropertySet > } //------------------------------------------------------------------------------ -String DbDateField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbDateField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { - if (!_xVariant.is()) + if (!_rxField.is()) return String(); else { - ::com::sun::star::util::Date aValue = _xVariant->getDate(); - if (_xVariant->wasNull()) + ::com::sun::star::util::Date aValue = _rxField->getDate(); + if (_rxField->wasNull()) return String(); else { @@ -1976,14 +2121,14 @@ String DbDateField::GetFormatText(const Reference< ::com::sun::star::sdb::XColum } //------------------------------------------------------------------------------ -void DbDateField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbDateField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - if (!_xVariant.is()) + if (!_rxField.is()) m_pWindow->SetText(String()); else { - ::com::sun::star::util::Date aValue = _xVariant->getDate(); - if (_xVariant->wasNull()) + ::com::sun::star::util::Date aValue = _rxField->getDate(); + if (_rxField->wasNull()) m_pWindow->SetText(String()); else { @@ -2062,14 +2207,14 @@ void DbTimeField::implAdjustGenericFieldSetting( const Reference< XPropertySet > } //------------------------------------------------------------------------------ -String DbTimeField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbTimeField::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { - if (!_xVariant.is()) + if (!_rxField.is()) return String(); else { - ::com::sun::star::util::Time aValue = _xVariant->getTime(); - if (_xVariant->wasNull()) + ::com::sun::star::util::Time aValue = _rxField->getTime(); + if (_rxField->wasNull()) return String(); else { @@ -2080,14 +2225,14 @@ String DbTimeField::GetFormatText(const Reference< ::com::sun::star::sdb::XColum } //------------------------------------------------------------------------------ -void DbTimeField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbTimeField::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - if (!_xVariant.is()) + if (!_rxField.is()) m_pWindow->SetText(String()); else { - ::com::sun::star::util::Time aValue = _xVariant->getTime(); - if (_xVariant->wasNull()) + ::com::sun::star::util::Time aValue = _rxField->getTime(); + if (_rxField->wasNull()) m_pWindow->SetText(String()); else { @@ -2186,6 +2331,7 @@ void DbComboBox::Init(Window* pParent, const Reference< XRowSet >& xCursor) m_rColumn.SetAlignmentFromModel(::com::sun::star::awt::TextAlign::LEFT); m_pWindow = new ComboBoxControl(pParent); + m_pPainter = new Edit( pParent, WB_NOBORDER ); // selection von rechts nach links AllSettings aSettings = m_pWindow->GetSettings(); @@ -2213,18 +2359,18 @@ CellControllerRef DbComboBox::CreateController() const } //------------------------------------------------------------------------------ -String DbComboBox::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbComboBox::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { ::rtl::OUString aString; - if (_xVariant.is()) - aString = getValue( _xVariant, xFormatter, m_rColumn.GetParent().getNullDate(), m_rColumn.GetKey(), m_nKeyType ); + if (_rxField.is()) + aString = getValue( _rxField, xFormatter, m_rColumn.GetParent().getNullDate(), m_rColumn.GetKey(), m_nKeyType ); return aString; } //------------------------------------------------------------------------------ -void DbComboBox::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbComboBox::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - m_pWindow->SetText(GetFormatText(_xVariant, xFormatter)); + m_pWindow->SetText(GetFormatText(_rxField, xFormatter)); } //------------------------------------------------------------------------------ @@ -2332,29 +2478,29 @@ CellControllerRef DbListBox::CreateController() const } //------------------------------------------------------------------------------ -String DbListBox::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) +String DbListBox::GetFormatText(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor) { - if (!_xVariant.is()) + if (!_rxField.is()) return String(); else { String aText; if (m_bBound) { - Sequence<sal_Int16> aPosSeq = ::comphelper::findValue(m_aValueList, _xVariant->getString(), sal_True); + Sequence<sal_Int16> aPosSeq = ::comphelper::findValue(m_aValueList, _rxField->getString(), sal_True); if (aPosSeq.getLength()) aText = static_cast<ListBox*>(m_pWindow)->GetEntry(aPosSeq.getConstArray()[0]); } else - aText = (const sal_Unicode*)_xVariant->getString(); + aText = (const sal_Unicode*)_rxField->getString(); return aText; } } //------------------------------------------------------------------------------ -void DbListBox::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) +void DbListBox::UpdateFromField(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - static_cast<ListBox*>(m_pWindow)->SelectEntry(GetFormatText(_xVariant, xFormatter)); + static_cast<ListBox*>(m_pWindow)->SelectEntry(GetFormatText(_rxField, xFormatter)); } //------------------------------------------------------------------------------ @@ -2423,10 +2569,10 @@ void DbFilterField::Paint(OutputDevice& rDev, const Rectangle& rRect) static sal_uInt16 nStyle = TEXT_DRAW_CLIP | TEXT_DRAW_VCENTER | TEXT_DRAW_LEFT; switch (m_nControlClass) { - case ::com::sun::star::form::FormComponentType::CHECKBOX: - DbCellControl::Paint(rDev, rRect); + case FormComponentType::CHECKBOX: + DbCellControl::Paint( rDev, rRect ); break; - case ::com::sun::star::form::FormComponentType::LISTBOX: + case FormComponentType::LISTBOX: rDev.DrawText(rRect, static_cast<ListBox*>(m_pWindow)->GetSelectEntry(), nStyle); break; default: @@ -2991,13 +3137,10 @@ void FmXGridCell::setLock(sal_Bool _bLock) throw( RuntimeException ) TYPEINIT1(FmXDataCell, FmXGridCell); //------------------------------------------------------------------------------ void FmXDataCell::Paint(OutputDevice& rDev, const Rectangle& rRect, - const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, + const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { - m_pCellControl->Paint(rDev, - rRect, - _xVariant, - xFormatter); + m_pCellControl->Paint( rDev, rRect, _rxField, xFormatter ); } //------------------------------------------------------------------------------ @@ -3014,7 +3157,7 @@ TYPEINIT1(FmXTextCell, FmXDataCell); //------------------------------------------------------------------------------ void FmXTextCell::Paint(OutputDevice& rDev, const Rectangle& rRect, - const Reference< ::com::sun::star::sdb::XColumn >& _xVariant, + const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) { sal_uInt16 nStyle = TEXT_DRAW_CLIP | TEXT_DRAW_VCENTER; @@ -3034,7 +3177,7 @@ void FmXTextCell::Paint(OutputDevice& rDev, } Color* pColor = NULL; - String aText = GetText(_xVariant, xFormatter, &pColor); + String aText = GetText(_rxField, xFormatter, &pColor); if (pColor != NULL) { Font aFont = rDev.GetFont(); @@ -3050,21 +3193,34 @@ void FmXTextCell::Paint(OutputDevice& rDev, /*************************************************************************/ -//SMART_UNO_IMPLEMENTATION(FmXEditCell, FmXTextCell); - DBG_NAME(FmXEditCell); //------------------------------------------------------------------------------ FmXEditCell::FmXEditCell(DbGridColumn* pColumn, DbCellControl* pControl) :FmXTextCell(pColumn, pControl) ,m_aTextListeners(m_aMutex) - ,m_pEdit((Edit*)pControl->GetControl()) + ,m_pEditImplementation( NULL ) + ,m_bOwnEditImplementation( false ) { DBG_CTOR(FmXEditCell,NULL); - // all Textfields must be drived from an Edit-Class, as we use a - // direct cast on Edit - m_pEdit->SetModifyHdl( LINK( this, FmXEditCell, OnTextChanged ) ); + if ( pControl->ISA( DbTextField ) ) + { + m_pEditImplementation = PTR_CAST( DbTextField, pControl )->GetEditImplementation(); + } + else + { + m_pEditImplementation = new EditImplementation( *static_cast< Edit* >( pControl->GetControl() ) ); + m_bOwnEditImplementation = true; + } + + m_pEditImplementation->SetModifyHdl( LINK( this, FmXEditCell, OnTextChanged ) ); +} + +//------------------------------------------------------------------ +void FmXEditCell::Paint( OutputDevice& _rDev, const Rectangle& _rRect, const Reference< XColumn >& _rxField, const Reference< XNumberFormatter >& _rxFormatter ) +{ + m_pCellControl->Paint( _rDev, _rRect, _rxField, _rxFormatter ); } //------------------------------------------------------------------ @@ -3076,6 +3232,7 @@ FmXEditCell::~FmXEditCell() dispose(); } + DBG_DTOR(FmXEditCell,NULL); } @@ -3086,8 +3243,10 @@ void FmXEditCell::disposing() ::com::sun::star::lang::EventObject aEvt(*this); m_aTextListeners.disposeAndClear(aEvt); - m_pEdit->SetModifyHdl( Link() ); - m_pEdit = NULL; + m_pEditImplementation->SetModifyHdl( Link() ); + if ( m_bOwnEditImplementation ) + delete m_pEditImplementation; + m_pEditImplementation = NULL; FmXDataCell::disposing(); } @@ -3134,9 +3293,9 @@ void SAL_CALL FmXEditCell::setText( const ::rtl::OUString& aText ) throw( Runtim { ::osl::MutexGuard aGuard( m_aMutex ); - if (m_pEdit) + if ( m_pEditImplementation ) { - m_pEdit->SetText(aText); + m_pEditImplementation->SetText( aText ); // In JAVA wird auch ein textChanged ausgeloest, in VCL nicht. // ::com::sun::star::awt::Toolkit soll JAVA-komform sein... @@ -3149,10 +3308,10 @@ void SAL_CALL FmXEditCell::insertText(const ::com::sun::star::awt::Selection& rS { ::osl::MutexGuard aGuard( m_aMutex ); - if (m_pEdit) + if ( m_pEditImplementation ) { - m_pEdit->SetSelection( Selection(rSel.Min, rSel.Max) ); - m_pEdit->ReplaceSelected( aText ); + m_pEditImplementation->SetSelection( Selection( rSel.Min, rSel.Max ) ); + m_pEditImplementation->ReplaceSelected( aText ); } } @@ -3162,11 +3321,14 @@ void SAL_CALL FmXEditCell::insertText(const ::com::sun::star::awt::Selection& rS ::osl::MutexGuard aGuard( m_aMutex ); ::rtl::OUString aText; - if (m_pEdit) + if ( m_pEditImplementation ) { - if (m_pEdit->IsVisible() && m_pColumn->GetParent().getDisplaySynchron()) + if ( m_pEditImplementation->GetControl().IsVisible() && m_pColumn->GetParent().getDisplaySynchron()) + { // if the display isn't sync with the cursor we can't ask the edit field - aText = m_pEdit->GetText(); + LineEnd eLineEndFormat = m_pColumn ? getModelLineEndSetting( m_pColumn->getModel() ) : LINEEND_LF; + aText = m_pEditImplementation->GetText( eLineEndFormat ); + } else { Reference< ::com::sun::star::sdb::XColumn > xField(m_pColumn->GetCurrentFieldValue()); @@ -3183,8 +3345,11 @@ void SAL_CALL FmXEditCell::insertText(const ::com::sun::star::awt::Selection& rS ::osl::MutexGuard aGuard( m_aMutex ); ::rtl::OUString aText; - if (m_pEdit) - aText = m_pEdit->GetSelected(); + if ( m_pEditImplementation ) + { + LineEnd eLineEndFormat = m_pColumn ? getModelLineEndSetting( m_pColumn->getModel() ) : LINEEND_LF; + aText = m_pEditImplementation->GetSelected( eLineEndFormat ); + } return aText; } @@ -3193,8 +3358,8 @@ void SAL_CALL FmXEditCell::setSelection( const ::com::sun::star::awt::Selection& { ::osl::MutexGuard aGuard( m_aMutex ); - if (m_pEdit) - m_pEdit->SetSelection( Selection(aSelection.Min, aSelection.Max) ); + if ( m_pEditImplementation ) + m_pEditImplementation->SetSelection( Selection( aSelection.Min, aSelection.Max ) ); } //------------------------------------------------------------------------------ @@ -3203,8 +3368,8 @@ void SAL_CALL FmXEditCell::setSelection( const ::com::sun::star::awt::Selection& ::osl::MutexGuard aGuard( m_aMutex ); Selection aSel; - if (m_pEdit) - aSel = m_pEdit->GetSelection(); + if ( m_pEditImplementation ) + aSel = m_pEditImplementation->GetSelection(); return ::com::sun::star::awt::Selection(aSel.Min(), aSel.Max()); } @@ -3214,7 +3379,7 @@ sal_Bool SAL_CALL FmXEditCell::isEditable( void ) throw( RuntimeException ) { ::osl::MutexGuard aGuard( m_aMutex ); - return ( m_pEdit && !m_pEdit->IsReadOnly() && m_pEdit->IsEnabled() ) ? sal_True : sal_False; + return ( m_pEditImplementation && !m_pEditImplementation->IsReadOnly() && m_pEditImplementation->GetControl().IsEnabled() ) ? sal_True : sal_False; } //------------------------------------------------------------------------------ @@ -3222,8 +3387,8 @@ void SAL_CALL FmXEditCell::setEditable( sal_Bool bEditable ) throw( RuntimeExcep { ::osl::MutexGuard aGuard( m_aMutex ); - if (m_pEdit) - m_pEdit->SetReadOnly( !bEditable ); + if ( m_pEditImplementation ) + m_pEditImplementation->SetReadOnly( !bEditable ); } //------------------------------------------------------------------------------ @@ -3231,7 +3396,7 @@ sal_Int16 SAL_CALL FmXEditCell::getMaxTextLen() throw( RuntimeException ) { ::osl::MutexGuard aGuard( m_aMutex ); - return m_pEdit ? m_pEdit->GetMaxTextLen() : 0; + return m_pEditImplementation ? m_pEditImplementation->GetMaxTextLen() : 0; } //------------------------------------------------------------------------------ @@ -3239,14 +3404,14 @@ void SAL_CALL FmXEditCell::setMaxTextLen( sal_Int16 nLen ) throw( RuntimeExcepti { ::osl::MutexGuard aGuard( m_aMutex ); - if (m_pEdit) - m_pEdit->SetMaxTextLen( nLen ); + if ( m_pEditImplementation ) + m_pEditImplementation->SetMaxTextLen( nLen ); } //------------------------------------------------------------------------------ IMPL_LINK( FmXEditCell, OnTextChanged, void*, EMPTYARG ) { - if (m_pEdit) + if ( m_pEditImplementation ) { ::cppu::OInterfaceIteratorHelper aIt( m_aTextListeners ); ::com::sun::star::awt::TextEvent aEvt; @@ -3404,8 +3569,6 @@ IMPL_LINK( FmXCheckBoxCell, OnClick, void*, EMPTYARG ) } /*************************************************************************/ -// SMART_UNO_IMPLEMENTATION(FmXListBoxCell, FmXTextCell); - DBG_NAME(FmXListBoxCell); //------------------------------------------------------------------------------ @@ -3766,7 +3929,8 @@ FmXFilterCell::FmXFilterCell(DbGridColumn* pColumn, DbCellControl* pControl) { DBG_CTOR(FmXFilterCell,NULL); - ((DbFilterField*)m_pCellControl)->SetCommitHdl(LINK( this, FmXFilterCell, OnCommit ) ); + DBG_ASSERT( m_pCellControl->ISA( DbFilterField ), "FmXFilterCell::FmXFilterCell: invalid cell control!" ); + static_cast< DbFilterField* >( m_pCellControl )->SetCommitHdl( LINK( this, FmXFilterCell, OnCommit ) ); } //------------------------------------------------------------------ @@ -3825,10 +3989,9 @@ FmXFilterCell* FmXFilterCell::getImplementation(const Reference< ::com::sun::sta } //------------------------------------------------------------------------------ -void FmXFilterCell::Paint(OutputDevice& rDev, - const Rectangle& rRect) +void FmXFilterCell::Paint( OutputDevice& rDev, const Rectangle& rRect ) { - m_pCellControl->Paint(rDev, rRect); + static_cast< DbFilterField* >( m_pCellControl )->Paint( rDev, rRect ); } // OComponentHelper |