blob: 0c15a9fa10cf1bda18e3bd5167915f1dea4a2f76 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SVX_GRIDCELL_HXX
#define _SVX_GRIDCELL_HXX
#include <svx/gridctrl.hxx>
#include "sqlparserclient.hxx"
#include "typeconversionclient.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/sdb/XColumn.hpp>
#include <com/sun/star/form/XBoundControl.hpp>
#include <com/sun/star/awt/XTextComponent.hpp>
#include <com/sun/star/awt/XListBox.hpp>
#include <com/sun/star/awt/XComboBox.hpp>
#include <com/sun/star/awt/TextAlign.hpp>
#include <com/sun/star/awt/XControlModel.hpp>
#include <com/sun/star/awt/XControl.hpp>
#include <com/sun/star/awt/XCheckBox.hpp>
#include <com/sun/star/awt/XButton.hpp>
#include <com/sun/star/beans/XFastPropertySet.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/form/XChangeBroadcaster.hpp>
#include <com/sun/star/awt/XWindow.hpp>
/** === end UNO includes === **/
#include <comphelper/propmultiplex.hxx>
#include <comphelper/componentcontext.hxx>
#include <cppuhelper/component.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implbase2.hxx>
#include <tools/diagnose_ex.h>
#include <tools/rtti.hxx>
class DbCellControl;
class Edit;
class FmXGridCell;
//==================================================================
// FmMutexHelper
//==================================================================
class FmMutexHelper
{
protected:
::osl::Mutex m_aMutex;
};
//==================================================================
// DbGridColumn, Spaltenbeschreibung
//==================================================================
class DbGridColumn
{
friend class DbGridControl;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xModel;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xField; // Verbindung zum Datenbankfeld
::svt::CellControllerRef m_xController; // Struktur zum Verwalten der Controls fuer eine Spalte
// diese wird von der DbBrowseBox auf die jeweiligen Zellen
// einer Spalte positioniert
FmXGridCell* m_pCell;
protected:
DbGridControl& m_rParent;
private:
sal_Int32 m_nLastVisibleWidth; // nur gueltig, wenn m_bHidden == sal_True
sal_Int32 m_nFormatKey;
sal_Int16 m_nFieldType;
sal_Int16 m_nTypeId;
sal_uInt16 m_nId;
sal_Int16 m_nFieldPos;
sal_Int16 m_nAlign; // wird mit TXT_ALIGN_LEFT .... angegeben
sal_Bool m_bReadOnly : 1;
sal_Bool m_bAutoValue : 1;
sal_Bool m_bInSave : 1;
sal_Bool m_bNumeric : 1;
sal_Bool m_bObject : 1; // Verweist die Column auf ein Object Datentyp?
sal_Bool m_bHidden : 1;
sal_Bool m_bLocked : 1;
sal_Bool m_bDateTime : 1;
static ::svt::CellControllerRef s_xEmptyController;
// used by locked columns
public:
DbGridColumn(sal_uInt16 _nId, DbGridControl& rParent)
:m_pCell(NULL)
,m_rParent(rParent)
,m_nLastVisibleWidth(-1)
,m_nFormatKey(0)
,m_nFieldType(0)
,m_nTypeId(0)
,m_nId(_nId)
,m_nFieldPos(-1)
,m_nAlign(::com::sun::star::awt::TextAlign::LEFT)
,m_bReadOnly(sal_False)
,m_bAutoValue(sal_False)
,m_bInSave(sal_False)
,m_bNumeric(sal_False)
,m_bObject(sal_False)
,m_bHidden(sal_False)
,m_bLocked(sal_False)
,m_bDateTime(sal_False)
{
}
~DbGridColumn();
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& getModel() const { return m_xModel; }
void setModel(::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _xModel);
sal_uInt16 GetId() const {return m_nId;}
sal_Bool IsReadOnly() const {return m_bReadOnly;}
sal_Bool IsAutoValue() const {return m_bAutoValue;}
sal_Bool IsUpdating() const {return m_bInSave;}
sal_Int16 GetAlignment() const {return m_nAlign;}
sal_Int16 GetType() const {return m_nFieldType;}
sal_Int16 GetFieldPos() const {return m_nFieldPos; }
sal_Bool IsNumeric() const {return m_bNumeric;}
sal_Bool IsDateTime() const {return m_bDateTime;}
sal_Bool IsObject() const {return m_bObject;}
sal_Bool IsHidden() const {return m_bHidden;}
sal_Int32 GetKey() const {return m_nFormatKey;}
const ::svt::CellControllerRef& GetController() const {return m_bLocked ? s_xEmptyController : m_xController;}
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& GetField() const {return m_xField;}
DbGridControl& GetParent() const {return m_rParent;}
FmXGridCell* GetCell() const {return m_pCell;}
::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn > GetCurrentFieldValue() const;
// Zeichnen eines Feldes an einer Position, ist ein ::com::sun::star::sdbcx::View gesetzt
// uebernimmt dieser das Zeichnen, z.B. fuer CheckBoxen
void Paint(OutputDevice& rDev,
const Rectangle& rRect,
const DbGridRow* pRow,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
// Inititialierung im alive mode
// Ist kein ColumnController gesetzt, wird eine DefaultInitialisierung
// vorgenommen
void CreateControl(sal_Int32 _nFieldPos, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xField, sal_Int32 nTypeId);
void UpdateControl()
{
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xField(m_xField);
CreateControl(m_nFieldPos, xField, m_nTypeId);
}
// Editieren einer Zelle
void UpdateFromField(const DbGridRow* pRow, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
sal_Bool Commit();
// freigeben aller Daten, die fuer den AliveMode noetig sind
void Clear();
XubString GetCellText(const DbGridRow* pRow, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const;
XubString GetCellText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& xField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const;
void SetReadOnly(sal_Bool bRead){m_bReadOnly = bRead;}
void SetObject(sal_Int16 nPos) {m_bObject = m_bReadOnly = sal_True; m_nFieldPos = nPos;}
void ImplInitWindow( Window& rParent, const InitWindowFacet _eInitWhat );
// Properties, die auf den ::com::sun::star::frame::Controller durchschlagen koennen
sal_Int16 SetAlignment(sal_Int16 _nAlign);
// if _nAlign is -1, the alignment is calculated from the type of the field we are bound to
// the value really set is returned
sal_Int16 SetAlignmentFromModel(sal_Int16 nStandardAlign);
// set the alignment according to the "Align"-property of m_xModel, use the given standard
// alignment if the property if void, return the really set alignment
// column locking
sal_Bool isLocked() const { return m_bLocked; }
void setLock(sal_Bool _bLock);
private:
/** attaches or detaches our cell object to the SctriptEventAttacherManager implemented
by our model's parent
*/
void impl_toggleScriptManager_nothrow( bool _bAttach );
};
//==================================================================
// DbCellControl, liefert die Daten fuer einen CellController
// wird in der Regel nur für komplexe Controls wie z.B ComboBoxen
// benoetigt
//==================================================================
class DbCellControl
:public ::svxform::OTypeConversionClient
,public ::svxform::OStaticDataAccessTools
,public FmMutexHelper // _before_ the listener, so the listener is to be destroyed first!
,public ::comphelper::OPropertyChangeListener
{
private:
::comphelper::OPropertyChangeMultiplexer* m_pModelChangeBroadcaster;
::comphelper::OPropertyChangeMultiplexer* m_pFieldChangeBroadcaster;
private:
sal_Bool m_bTransparent : 1;
sal_Bool m_bAlignedController : 1;
sal_Bool m_bAccessingValueProperty : 1;
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >
m_xCursor;
protected:
DbGridColumn& m_rColumn;
Window* m_pPainter;
Window* m_pWindow;
protected:
// attribute access
const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& getCursor() const { return m_xCursor; }
// control transparency
inline sal_Bool isTransparent( ) const { return m_bTransparent; }
inline void setTransparent( sal_Bool _bSet ) { m_bTransparent = _bSet; }
// control alignment
inline void setAlignedController( sal_Bool _bAlign = sal_True ) { m_bAlignedController = _bAlign; }
/** determined whether or not the value property is locked
@see lockValueProperty
*/
inline sal_Bool isValuePropertyLocked() const;
/** locks the listening at the value property.
<p>This means that every subsequent change now done on the value property of the model ("Text", or "Value",
or whatever) is then ignored.<br/>
This base class uses this setting in <method>Commit</method>.</p>
@precond
Value locking can't be nested
@see unlockValueProperty
*/
inline void lockValueProperty();
/** unlocks the listening at the value property
@see lockValueProperty
*/
inline void unlockValueProperty();
protected:
// adds the given property to the list of properties which we listen for
void doPropertyListening( const ::rtl::OUString& _rPropertyName );
// called whenever a property which affects field settings in general is called
// you should overwrite this method for every property you add yourself as listener to
// with doPropertyListening
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
// called by _propertyChanged if a property which denotes the column value has changed
void implValuePropertyChanged( );
public:
TYPEINFO();
DbCellControl(DbGridColumn& _rColumn, sal_Bool _bText = sal_True);
virtual ~DbCellControl();
Window& GetWindow() const
{
ENSURE_OR_THROW( m_pWindow, "no window" );
return *m_pWindow;
}
// control alignment
inline sal_Bool isAlignedController() const { return m_bAlignedController; }
void AlignControl(sal_Int16 nAlignment);
void SetTextLineColor();
void SetTextLineColor(const Color& _rColor);
// Initialisieren bevor ein Control angezeigt wird
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual ::svt::CellControllerRef CreateController() const = 0;
// Schreiben des Wertes in das Model
sal_Bool Commit();
// Formatting the field data to output text
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL) = 0;
virtual void Update(){}
// Refresh the control by the field data
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) = 0;
// Painten eines Zellinhalts im vorgegeben Rechteck
virtual void PaintFieldToCell( OutputDevice& rDev, const Rectangle& rRect, const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual void PaintCell( OutputDevice& _rDev, const Rectangle& _rRect );
void ImplInitWindow( Window& rParent, const InitWindowFacet _eInitWhat );
double GetValue(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const;
protected:
void invalidatedController();
/** commits the content of the control (e.g. the text of an edit field) into the column model
(e.g. the "Text" property of the model).
<p>To be overwritten in derived classes.</p>
@see updateFromModel
*/
virtual sal_Bool commitControl( ) = 0;
/** updates the current content of the control (e.g. the text of an edit field) from the column model
(e.g. the "Text" property of the model).
<p>To be overwritten in derived classes.</p>
@precond
NULL != _rxModel
@precond
NULL != m_pWindow
@see commitControl
*/
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel ) = 0;
protected:
// OPropertyChangeListener
virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException);
private:
void implDoPropertyListening( const ::rtl::OUString& _rPropertyName, sal_Bool _bWarnIfNotExistent = sal_True );
/// updates the "readonly" setting on m_pWindow, according to the respective property value in the given model
void implAdjustReadOnly( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel,bool i_bReadOnly );
/// updates the "enabled" setting on m_pWindow, according to the respective property value in the given model
void implAdjustEnabled( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
};
//==================================================================
//------------------------------------------------------------------
inline sal_Bool DbCellControl::isValuePropertyLocked() const
{
return m_bAccessingValueProperty;
}
//------------------------------------------------------------------
inline void DbCellControl::lockValueProperty()
{
OSL_ENSURE( !isValuePropertyLocked(), "DbCellControl::lockValueProperty: not to be nested!" );
m_bAccessingValueProperty = sal_True;
}
//------------------------------------------------------------------
inline void DbCellControl::unlockValueProperty()
{
OSL_ENSURE( isValuePropertyLocked(), "DbCellControl::lockValueProperty: not locked so far!" );
m_bAccessingValueProperty = sal_False;
}
//==================================================================
/** a field which is bound to a column which supports the MaxTextLen property
*/
class DbLimitedLengthField : public DbCellControl
{
public:
TYPEINFO();
protected:
DbLimitedLengthField( DbGridColumn& _rColumn );
protected:
// DbCellControl
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
protected:
inline void implSetMaxTextLen( sal_Int16 _nMaxLen )
{
implSetEffectiveMaxTextLen( _nMaxLen ? _nMaxLen : EDIT_NOLIMIT );
}
virtual void implSetEffectiveMaxTextLen( sal_Int16 _nMaxLen );
};
//==================================================================
class DbTextField : public DbLimitedLengthField
{
::svt::IEditImplementation* m_pEdit;
::svt::IEditImplementation* m_pPainterImplementation;
sal_Int16 m_nKeyType;
sal_Bool m_bIsSimpleEdit;
protected:
~DbTextField( );
public:
TYPEINFO();
DbTextField(DbGridColumn& _rColumn);
::svt::IEditImplementation* GetEditImplementation() { return m_pEdit; }
sal_Bool IsSimpleEdit() const { return m_bIsSimpleEdit; }
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual ::svt::CellControllerRef CreateController() const;
virtual void PaintFieldToCell( OutputDevice& _rDev, const Rectangle& _rRect,
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxFormatter );
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
// DbLimitedLengthField
virtual void implSetEffectiveMaxTextLen( sal_Int16 _nMaxLen );
};
//==================================================================
class DbFormattedField : public DbLimitedLengthField
{
protected:
::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > m_xSupplier;
sal_Int16 m_nKeyType;
public:
TYPEINFO();
DbFormattedField(DbGridColumn& _rColumn);
virtual ~DbFormattedField();
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual ::svt::CellControllerRef CreateController() const;
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
// OPropertyChangeListener
virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException);
};
//==================================================================
class DbCheckBox : public DbCellControl
{
public:
TYPEINFO();
DbCheckBox(DbGridColumn& _rColumn);
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual ::svt::CellControllerRef CreateController() const;
virtual void PaintFieldToCell(OutputDevice& rDev, const Rectangle& rRect,
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
};
//==================================================================
class DbComboBox : public DbCellControl
{
sal_Int16 m_nKeyType;
public:
TYPEINFO();
DbComboBox(DbGridColumn& _rColumn);
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual ::svt::CellControllerRef CreateController() const;
void SetList(const ::com::sun::star::uno::Any& rItems);
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
// OPropertyChangeListener
virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException);
};
//==================================================================
class DbListBox :public DbCellControl
{
sal_Bool m_bBound : 1;
::com::sun::star::uno::Sequence< ::rtl::OUString > m_aValueList;
public:
TYPEINFO();
DbListBox(DbGridColumn& _rColumn);
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual ::svt::CellControllerRef CreateController() const;
void SetList(const ::com::sun::star::uno::Any& rItems);
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
// OPropertyChangeListener
virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException);
};
//==================================================================
class DbPatternField : public DbCellControl
{
public:
TYPEINFO();
DbPatternField( DbGridColumn& _rColumn, const ::comphelper::ComponentContext& _rContext );
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
virtual ::svt::CellControllerRef CreateController() const;
protected:
/// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
private:
String impl_formatText( const String& _rText );
private:
::std::auto_ptr< ::dbtools::FormattedColumnValue > m_pValueFormatter;
::std::auto_ptr< ::dbtools::FormattedColumnValue > m_pPaintFormatter;
::comphelper::ComponentContext m_aContext;
};
//==================================================================
class DbSpinField : public DbCellControl
{
private:
sal_Int16 m_nStandardAlign;
public:
TYPEINFO();
protected:
DbSpinField( DbGridColumn& _rColumn, sal_Int16 _nStandardAlign = com::sun::star::awt::TextAlign::RIGHT );
public:
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& _rxCursor );
virtual ::svt::CellControllerRef CreateController() const;
protected:
virtual SpinField* createField(
Window* _pParent,
WinBits _nFieldStyle,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel
) = 0;
};
//==================================================================
class DbDateField : public DbSpinField
{
public:
TYPEINFO();
DbDateField(DbGridColumn& _rColumn);
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
// DbSpinField
virtual SpinField* createField(
Window* _pParent,
WinBits _nFieldStyle,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel
);
/// initializes everything which relates to the properties describing the numeric behaviour
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
};
//==================================================================
class DbTimeField : public DbSpinField
{
public:
TYPEINFO();
DbTimeField(DbGridColumn& _rColumn);
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
// DbSpinField
virtual SpinField* createField(
Window* _pParent,
WinBits _nFieldStyle,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel
);
/// initializes everything which relates to the properties describing the numeric behaviour
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
};
//==================================================================
class DbCurrencyField : public DbSpinField
{
sal_Int16 m_nScale;
public:
TYPEINFO();
DbCurrencyField(DbGridColumn& _rColumn);
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
double GetCurrency(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter) const;
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
// DbSpinField
virtual SpinField* createField(
Window* _pParent,
WinBits _nFieldStyle,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel
);
/// initializes everything which relates to the properties describing the numeric behaviour
virtual void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
};
//==================================================================
class DbNumericField : public DbSpinField
{
public:
TYPEINFO();
DbNumericField(DbGridColumn& _rColumn);
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
// DbSpinField
virtual SpinField* createField(
Window* _pParent,
WinBits _nFieldStyle,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel
);
/// initializes everything which relates to the properties describing the numeric behaviour
void implAdjustGenericFieldSetting( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxModel );
};
//==================================================================
class DbFilterField
:public DbCellControl
,public ::svxform::OSQLParserClient
{
::com::sun::star::uno::Sequence< ::rtl::OUString > m_aValueList;
XubString m_aText;
Link m_aCommitLink;
sal_Int16 m_nControlClass;
sal_Bool m_bFilterList : 1;
sal_Bool m_bFilterListFilled : 1;
sal_Bool m_bBound : 1;
public:
TYPEINFO();
DbFilterField(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,DbGridColumn& _rColumn);
virtual ~DbFilterField();
virtual void Init( Window& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xCursor );
virtual ::svt::CellControllerRef CreateController() const;
virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect);
virtual void Update();
virtual XubString GetFormatText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter, Color** ppColor = NULL);
virtual void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
const XubString& GetText() const {return m_aText;}
void SetText(const XubString& rText);
void SetCommitHdl( const Link& rLink ) { m_aCommitLink = rLink; }
const Link& GetCommitHdl() const { return m_aCommitLink; }
protected:
// DbCellControl
virtual sal_Bool commitControl( );
virtual void updateFromModel( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxModel );
protected:
void SetList(const ::com::sun::star::uno::Any& rItems, sal_Bool bComboBox);
void CreateControl(Window* pParent, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xModel);
DECL_LINK( OnClick, void* );
};
//==================================================================
// Base class providing the access to a grid cell
//==================================================================
typedef ::cppu::ImplHelper2 < ::com::sun::star::awt::XControl
, ::com::sun::star::form::XBoundControl
> FmXGridCell_Base;
typedef ::cppu::ImplHelper1 < ::com::sun::star::awt::XWindow
> FmXGridCell_WindowBase;
class FmXGridCell :public ::cppu::OComponentHelper
,public FmXGridCell_Base
,public FmXGridCell_WindowBase
{
protected:
::osl::Mutex m_aMutex;
DbGridColumn* m_pColumn;
DbCellControl* m_pCellControl;
private:
::cppu::OInterfaceContainerHelper m_aWindowListeners;
::cppu::OInterfaceContainerHelper m_aFocusListeners;
::cppu::OInterfaceContainerHelper m_aKeyListeners;
::cppu::OInterfaceContainerHelper m_aMouseListeners;
::cppu::OInterfaceContainerHelper m_aMouseMotionListeners;
protected:
virtual ~FmXGridCell();
public:
TYPEINFO();
FmXGridCell( DbGridColumn* pColumn, DbCellControl* pControl );
void init();
DECLARE_UNO3_AGG_DEFAULTS(FmXGridCell, OComponentHelper);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
void SetTextLineColor();
void SetTextLineColor(const Color& _rColor);
// XTypeProvider
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// ::com::sun::star::lang::XComponent
virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException){OComponentHelper::dispose();}
virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener)throw(::com::sun::star::uno::RuntimeException) { OComponentHelper::addEventListener(aListener);}
virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener)throw(::com::sun::star::uno::RuntimeException) { OComponentHelper::removeEventListener(aListener);}
// ::com::sun::star::awt::XControl
virtual void SAL_CALL setContext(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& /*Context*/) throw(::com::sun::star::uno::RuntimeException){}
virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getContext() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL createPeer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& /*Toolkit*/, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& /*Parent*/) throw(::com::sun::star::uno::RuntimeException){}
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > SAL_CALL getPeer() throw (::com::sun::star::uno::RuntimeException) {return ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > ();}
virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& /*Model*/) throw (::com::sun::star::uno::RuntimeException) {return sal_False;}
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > SAL_CALL getModel() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XView > SAL_CALL getView() throw (::com::sun::star::uno::RuntimeException) {return ::com::sun::star::uno::Reference< ::com::sun::star::awt::XView > ();}
virtual void SAL_CALL setDesignMode(sal_Bool /*bOn*/) throw (::com::sun::star::uno::RuntimeException) {}
virtual sal_Bool SAL_CALL isDesignMode() throw (::com::sun::star::uno::RuntimeException) {return sal_False;}
virtual sal_Bool SAL_CALL isTransparent() throw (::com::sun::star::uno::RuntimeException) {return sal_False;}
// ::com::sun::star::form::XBoundControl
virtual sal_Bool SAL_CALL getLock() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setLock(sal_Bool _bLock) throw(::com::sun::star::uno::RuntimeException);
// XWindow
virtual void SAL_CALL setPosSize( ::sal_Int32 X, ::sal_Int32 Y, ::sal_Int32 Width, ::sal_Int32 Height, ::sal_Int16 Flags ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Rectangle SAL_CALL getPosSize( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setVisible( ::sal_Bool Visible ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setEnable( ::sal_Bool Enable ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setFocus( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
sal_Bool Commit() {return m_pCellControl->Commit();}
void ImplInitWindow( Window& rParent, const InitWindowFacet _eInitWhat )
{ m_pCellControl->ImplInitWindow( rParent, _eInitWhat ); }
sal_Bool isAlignedController() const { return m_pCellControl->isAlignedController(); }
void AlignControl(sal_Int16 nAlignment)
{ m_pCellControl->AlignControl(nAlignment);}
protected:
virtual Window* getEventWindow() const;
virtual void onWindowEvent( const sal_uLong _nEventId, const Window& _rWindow, const void* _pEventData );
// default implementations call our focus listeners, don't forget to call them if you override this
virtual void onFocusGained( const ::com::sun::star::awt::FocusEvent& _rEvent );
virtual void onFocusLost( const ::com::sun::star::awt::FocusEvent& _rEvent );
private:
DECL_LINK( OnWindowEvent, VclWindowEvent* );
};
//==================================================================
class FmXDataCell : public FmXGridCell
{
public:
TYPEINFO();
FmXDataCell( DbGridColumn* pColumn, DbCellControl& _rControl )
:FmXGridCell( pColumn, &_rControl )
{
}
virtual void PaintFieldToCell(OutputDevice& rDev,
const Rectangle& rRect,
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& xField,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
void UpdateFromField(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& xField,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter)
{ m_pCellControl->UpdateFromField(xField, xFormatter); }
protected:
void UpdateFromColumn();
};
//==================================================================
class FmXTextCell : public FmXDataCell
{
protected:
/** determines whether the text of this cell can be painted directly, without
using the painter control
If this is <TRUE/>, the <member>PaintCell</member> method will simply use the text as returned
by <member>GetText</member>, and draw it onto the device passed to <member>PaintFieldToCell</member>,
while respecting the current alignment settings.
If this is <FALSE/>, the <member>PaintFieldToCell</member> request will be forwarded to the painter
control (<member>m_pPainter</member>). This is more expensive, but the only option
if your painting involves more that a simple DrawText.
This member is <TRUE/> by default, and can be modified by derived classes.
*/
sal_Bool m_bFastPaint;
public:
TYPEINFO();
FmXTextCell( DbGridColumn* pColumn, DbCellControl& _rControl );
virtual void PaintFieldToCell(OutputDevice& rDev,
const Rectangle& rRect,
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& xField,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter);
XubString GetText(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxField,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& xFormatter,
Color** ppColor = NULL)
{return m_pCellControl->GetFormatText(_rxField, xFormatter, ppColor);}
};
//==================================================================
typedef ::cppu::ImplHelper2 < ::com::sun::star::awt::XTextComponent
, ::com::sun::star::form::XChangeBroadcaster
> FmXEditCell_Base;
class FmXEditCell : public FmXTextCell,
public FmXEditCell_Base
{
private:
::rtl::OUString m_sValueOnEnter;
protected:
::cppu::OInterfaceContainerHelper m_aTextListeners;
::cppu::OInterfaceContainerHelper m_aChangeListeners;
::svt::IEditImplementation* m_pEditImplementation;
bool m_bOwnEditImplementation;
virtual ~FmXEditCell();
public:
FmXEditCell( DbGridColumn* pColumn, DbCellControl& _rControl );
DECLARE_UNO3_AGG_DEFAULTS(FmXEditCell, FmXTextCell);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
// XTypeProvider
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// ::com::sun::star::awt::XTextComponent
virtual void SAL_CALL addTextListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeTextListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setText(const ::rtl::OUString& aText) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL insertText(const ::com::sun::star::awt::Selection& Sel, const ::rtl::OUString& Text) throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getText() throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getSelectedText() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setSelection(const ::com::sun::star::awt::Selection& aSelection) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Selection SAL_CALL getSelection() throw(::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isEditable() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setEditable(sal_Bool bEditable) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setMaxTextLen(sal_Int16 nLen) throw(::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getMaxTextLen() throw(::com::sun::star::uno::RuntimeException);
// XChangeBroadcaster
virtual void SAL_CALL addChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
protected:
virtual void onWindowEvent( const sal_uLong _nEventId, const Window& _rWindow, const void* _pEventData );
virtual void onFocusGained( const ::com::sun::star::awt::FocusEvent& _rEvent );
virtual void onFocusLost( const ::com::sun::star::awt::FocusEvent& _rEvent );
private:
void onTextChanged();
};
//==================================================================
typedef ::cppu::ImplHelper2 < ::com::sun::star::awt::XCheckBox
, ::com::sun::star::awt::XButton
> FmXCheckBoxCell_Base;
class FmXCheckBoxCell : public FmXDataCell,
public FmXCheckBoxCell_Base
{
::cppu::OInterfaceContainerHelper m_aItemListeners;
::cppu::OInterfaceContainerHelper m_aActionListeners;
::rtl::OUString m_aActionCommand;
CheckBox* m_pBox;
protected:
virtual ~FmXCheckBoxCell();
public:
FmXCheckBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl );
// UNO
DECLARE_UNO3_AGG_DEFAULTS(FmXCheckBoxCell, FmXDataCell);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// ::com::sun::star::awt::XCheckBox
virtual void SAL_CALL addItemListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeItemListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getState() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setState(sal_Int16 n) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setLabel(const ::rtl::OUString& Label) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL enableTriState(sal_Bool b) throw(::com::sun::star::uno::RuntimeException);
// XButton
virtual void SAL_CALL addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l ) throw (::com::sun::star::uno::RuntimeException);
//virtual void SAL_CALL setLabel( const ::rtl::OUString& Label ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setActionCommand( const ::rtl::OUString& Command ) throw (::com::sun::star::uno::RuntimeException);
protected:
virtual Window* getEventWindow() const;
virtual void onWindowEvent( const sal_uLong _nEventId, const Window& _rWindow, const void* _pEventData );
};
//==================================================================
typedef ::cppu::ImplHelper1 < ::com::sun::star::awt::XListBox
> FmXListBoxCell_Base;
class FmXListBoxCell :public FmXTextCell
,public FmXListBoxCell_Base
{
::cppu::OInterfaceContainerHelper m_aItemListeners,
m_aActionListeners;
ListBox* m_pBox;
protected:
virtual ~FmXListBoxCell();
public:
FmXListBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl );
DECLARE_UNO3_AGG_DEFAULTS(FmXListBoxCell, FmXTextCell);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// ::com::sun::star::awt::XListBox
virtual void SAL_CALL addItemListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeItemListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addItem(const ::rtl::OUString& aItem, sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addItems(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aItems, sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeItems(sal_Int16 nPos, sal_Int16 nCount) throw(::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getItemCount() throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getItem(sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getItems() throw(::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getSelectedItemPos() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSelectedItemsPos() throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getSelectedItem() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSelectedItems() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SAL_CALL selectItemPos(sal_Int16 nPos, sal_Bool bSelect) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SAL_CALL selectItemsPos(const ::com::sun::star::uno::Sequence< sal_Int16 >& aPositions, sal_Bool bSelect) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SAL_CALL selectItem(const ::rtl::OUString& aItem, sal_Bool bSelect) throw(::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isMutipleMode() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SAL_CALL setMultipleMode(sal_Bool bMulti) throw(::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getDropDownLineCount() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SAL_CALL setDropDownLineCount(sal_Int16 nLines) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SAL_CALL makeVisible(sal_Int16 nEntry) throw(::com::sun::star::uno::RuntimeException);
protected:
virtual void onWindowEvent( const sal_uLong _nEventId, const Window& _rWindow, const void* _pEventData );
DECL_LINK( OnDoubleClick, void* );
};
//==================================================================
typedef ::cppu::ImplHelper1 < ::com::sun::star::awt::XComboBox
> FmXComboBoxCell_Base;
class FmXComboBoxCell :public FmXTextCell
,public FmXComboBoxCell_Base
{
private:
::cppu::OInterfaceContainerHelper m_aItemListeners,
m_aActionListeners;
ComboBox* m_pComboBox;
protected:
virtual ~FmXComboBoxCell();
public:
FmXComboBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl );
DECLARE_UNO3_AGG_DEFAULTS(FmXListBoxCell, FmXTextCell);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// XComboBox
virtual void SAL_CALL addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addItem( const ::rtl::OUString& _Item, ::sal_Int16 _Pos ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _Items, ::sal_Int16 _Pos ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeItems( ::sal_Int16 nPos, ::sal_Int16 nCount ) throw (::com::sun::star::uno::RuntimeException);
virtual ::sal_Int16 SAL_CALL getItemCount( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getItem( ::sal_Int16 _Pos ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getItems( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::sal_Int16 SAL_CALL getDropDownLineCount( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setDropDownLineCount( ::sal_Int16 _Lines ) throw (::com::sun::star::uno::RuntimeException);
protected:
virtual void onWindowEvent( const sal_uLong _nEventId, const Window& _rWindow, const void* _pEventData );
};
//==================================================================
typedef ::cppu::ImplHelper2 < ::com::sun::star::awt::XTextComponent
, ::com::sun::star::lang::XUnoTunnel
> FmXFilterCell_Base;
class FmXFilterCell :public FmXGridCell
,public FmXFilterCell_Base
{
::cppu::OInterfaceContainerHelper m_aTextListeners;
protected:
virtual ~FmXFilterCell();
public:
TYPEINFO();
FmXFilterCell(DbGridColumn* pColumn = NULL, DbCellControl* pControl = NULL);
DECLARE_UNO3_AGG_DEFAULTS(FmXFilterCell, FmXGridCell);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// XUnoTunnel
virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
// helpers for XUnoTunnel
static const ::com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
static FmXFilterCell* getImplementation(
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxObject);
// painting the filter text
virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect);
void Update(){m_pCellControl->Update();}
// OComponentHelper
virtual void SAL_CALL disposing();
// ::com::sun::star::awt::XTextComponent
virtual void SAL_CALL addTextListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeTextListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener >& l) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setText(const ::rtl::OUString& aText) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL insertText(const ::com::sun::star::awt::Selection& Sel, const ::rtl::OUString& Text) throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getText() throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getSelectedText() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setSelection(const ::com::sun::star::awt::Selection& aSelection) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Selection SAL_CALL getSelection() throw(::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isEditable() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setEditable(sal_Bool bEditable) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setMaxTextLen(sal_Int16 nLen) throw(::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getMaxTextLen() throw(::com::sun::star::uno::RuntimeException);
protected:
DECL_LINK( OnCommit, void* );
};
#endif // _SVX_GRIDCELL_HXX