diff options
author | Noel Power <noel.power@novell.com> | 2011-12-05 09:56:17 +0000 |
---|---|---|
committer | Noel Power <noel.power@novell.com> | 2011-12-05 09:57:12 +0000 |
commit | 9cff030fa15f89fa1009fbb3827ab11c43c20b04 (patch) | |
tree | 7a2cc323b2df30d253b8911d25aeaadd78c9d6cb /basctl/source/dlged | |
parent | c2f62c8cb30975e3cd46c4800e738f3f010ecb3e (diff) |
add some form control support for basic dialogs
Diffstat (limited to 'basctl/source/dlged')
-rw-r--r-- | basctl/source/dlged/dlged.cxx | 2 | ||||
-rw-r--r-- | basctl/source/dlged/dlgedfac.cxx | 67 | ||||
-rw-r--r-- | basctl/source/dlged/dlgedobj.cxx | 31 |
3 files changed, 89 insertions, 11 deletions
diff --git a/basctl/source/dlged/dlged.cxx b/basctl/source/dlged/dlged.cxx index 6d3c5bf69d6b..2769145074cb 100644 --- a/basctl/source/dlged/dlged.cxx +++ b/basctl/source/dlged/dlged.cxx @@ -218,7 +218,7 @@ DlgEditor::DlgEditor( const ::com::sun::star::uno::Reference< ::com::sun::star:: pDlgEdPage = new DlgEdPage( *pDlgEdModel ); pDlgEdModel->InsertPage( pDlgEdPage ); - pObjFac = new DlgEdFactory(); + pObjFac = new DlgEdFactory(xModel); pFunc = new DlgEdFuncSelect( this ); diff --git a/basctl/source/dlged/dlgedfac.cxx b/basctl/source/dlged/dlgedfac.cxx index 92c0da48ff13..ecbb9bda00ab 100644 --- a/basctl/source/dlged/dlgedfac.cxx +++ b/basctl/source/dlged/dlgedfac.cxx @@ -39,7 +39,7 @@ using namespace ::com::sun::star; -DlgEdFactory::DlgEdFactory() +DlgEdFactory::DlgEdFactory( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel ) : mxModel( xModel ) { SdrObjFactory::InsertMakeObjectHdl( LINK(this, DlgEdFactory, MakeObject) ); } @@ -70,25 +70,52 @@ IMPL_LINK( DlgEdFactory, MakeObject, SdrObjFactory *, pObjFactory ) if( (pObjFactory->nInventor == DlgInventor) && (pObjFactory->nIdentifier >= OBJ_DLG_PUSHBUTTON) && - (pObjFactory->nIdentifier <= OBJ_DLG_SPINBUTTON) ) + (pObjFactory->nIdentifier <= OBJ_DLG_FORMHSCROLL) ) { switch( pObjFactory->nIdentifier ) { case OBJ_DLG_PUSHBUTTON: pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlButtonModel" )) , xDialogSFact ); break; + case OBJ_DLG_FORMRADIO: case OBJ_DLG_RADIOBUTTON: - pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlRadioButtonModel" )) , xDialogSFact ); + if ( pObjFactory->nIdentifier == OBJ_DLG_RADIOBUTTON ) + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlRadioButtonModel" )) , xDialogSFact ); + else + { + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.RadioButton" )) , xDialogSFact ); + static_cast< DlgEdObj* >( pObjFactory->pNewObj )->MakeDataAware( mxModel ); + } break; + case OBJ_DLG_FORMCHECK: case OBJ_DLG_CHECKBOX: - pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlCheckBoxModel" )) , xDialogSFact ); + if ( pObjFactory->nIdentifier == OBJ_DLG_CHECKBOX ) + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlCheckBoxModel" )) , xDialogSFact ); + else + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.CheckBox" )) , xDialogSFact ); + static_cast< DlgEdObj* >( pObjFactory->pNewObj )->MakeDataAware( mxModel ); break; + case OBJ_DLG_FORMLIST: case OBJ_DLG_LISTBOX: - pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlListBoxModel" )) , xDialogSFact ); + if ( pObjFactory->nIdentifier == OBJ_DLG_LISTBOX ) + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlListBoxModel" )) , xDialogSFact ); + else + { + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.ListBox" )) , xDialogSFact ); + static_cast< DlgEdObj* >( pObjFactory->pNewObj )->MakeDataAware( mxModel ); + } break; + case OBJ_DLG_FORMCOMBO: case OBJ_DLG_COMBOBOX: { - DlgEdObj* pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlComboBoxModel" )) , xDialogSFact ); + DlgEdObj* pNew = NULL; + if ( pObjFactory->nIdentifier == OBJ_DLG_COMBOBOX ) + pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlComboBoxModel" )) , xDialogSFact ); + else + { + pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.ComboBox" )) , xDialogSFact ); + static_cast< DlgEdObj* >( pNew )->MakeDataAware( mxModel ); + } pObjFactory->pNewObj = pNew; try { @@ -118,12 +145,27 @@ IMPL_LINK( DlgEdFactory, MakeObject, SdrObjFactory *, pObjFactory ) case OBJ_DLG_PROGRESSBAR: pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlProgressBarModel" )) , xDialogSFact ); break; + case OBJ_DLG_FORMHSCROLL: case OBJ_DLG_HSCROLLBAR: - pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlScrollBarModel" )) , xDialogSFact ); + if ( pObjFactory->nIdentifier == OBJ_DLG_HSCROLLBAR ) + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlScrollBarModel" )) , xDialogSFact ); + else + { + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.ScrollBar" )) , xDialogSFact ); + static_cast< DlgEdObj* >( pObjFactory->pNewObj )->MakeDataAware( mxModel ); + } break; + case OBJ_DLG_FORMVSCROLL: case OBJ_DLG_VSCROLLBAR: { - DlgEdObj* pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlScrollBarModel" )) , xDialogSFact ); + DlgEdObj* pNew = NULL; + if ( pObjFactory->nIdentifier == OBJ_DLG_VSCROLLBAR ) + pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlScrollBarModel" )) , xDialogSFact ); + else + { + pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.ScrollBar" )) , xDialogSFact ); + static_cast< DlgEdObj* >( pNew )->MakeDataAware( mxModel ); + } pObjFactory->pNewObj = pNew; // set vertical orientation try @@ -183,8 +225,15 @@ IMPL_LINK( DlgEdFactory, MakeObject, SdrObjFactory *, pObjFactory ) case OBJ_DLG_FILECONTROL: pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlFileControlModel" )) , xDialogSFact ); break; + case OBJ_DLG_FORMSPIN: case OBJ_DLG_SPINBUTTON: - pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlSpinButtonModel") , xDialogSFact ); + if ( pObjFactory->nIdentifier == OBJ_DLG_SPINBUTTON ) + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlSpinButtonModel") , xDialogSFact ); + else + { + pObjFactory->pNewObj = new DlgEdObj( ::rtl::OUString::createFromAscii("com.sun.star.form.component.SpinButton") , xDialogSFact ); + static_cast< DlgEdObj* >( pObjFactory->pNewObj )->MakeDataAware( mxModel ); + } break; case OBJ_DLG_TREECONTROL: DlgEdObj* pNew = new DlgEdObj( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.tree.TreeControlModel" )) , xDialogSFact ); diff --git a/basctl/source/dlged/dlgedobj.cxx b/basctl/source/dlged/dlgedobj.cxx index 2e2d8dfaba1c..aa79ef1f5de8 100644 --- a/basctl/source/dlged/dlgedobj.cxx +++ b/basctl/source/dlged/dlgedobj.cxx @@ -38,6 +38,9 @@ #include "dlgresid.hrc" +#include <com/sun/star/form/binding/XBindableValue.hpp> +#include <com/sun/star/form/binding/XValueBinding.hpp> +#include <com/sun/star/form/binding/XListEntrySink.hpp> #include <com/sun/star/awt/XUnoControlContainer.hpp> #include <com/sun/star/awt/XVclContainerPeer.hpp> #include <com/sun/star/container/XContainer.hpp> @@ -1856,7 +1859,33 @@ awt::DeviceInfo DlgEdForm::getDeviceInfo() const return aDeviceInfo; } - +bool DlgEdObj::MakeDataAware( const Reference< frame::XModel >& xModel ) +{ + bool bRes = false; + // Need to flesh this out, currently we will only support data-aware controls for calc + // and only handle a subset of functionality e.g. linked-cell and cell range data source. Of course later + // we need to disambiguate for writer ( and others ? ) and also support the generic form (db) bindings + // we need some more work in xmlscript to be able to handle that + Reference< lang::XMultiServiceFactory > xFac( xModel, UNO_QUERY ); + Reference< form::binding::XBindableValue > xBindable( GetUnoControlModel(), UNO_QUERY ); + Reference< form::binding::XListEntrySink > xListEntrySink( GetUnoControlModel(), UNO_QUERY ); + if ( xFac.is() ) + { + if ( xBindable.is() ) + { + Reference< form::binding::XValueBinding > xBinding( xFac->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.table.CellValueBinding" ) ) ), UNO_QUERY ); + xBindable->setValueBinding( xBinding ); + } + if ( xListEntrySink.is() ) + { + Reference< form::binding::XListEntrySource > xSource( xFac->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.table.CellRangeListSource" ) ) ), UNO_QUERY ); + xListEntrySink->setListEntrySource( xSource ); + } + if ( xListEntrySink.is() || xBindable.is() ) + bRes = true; + } + return bRes; +} //---------------------------------------------------------------------------- |