summaryrefslogtreecommitdiff
path: root/basctl/source/dlged
diff options
context:
space:
mode:
authorNoel Power <noel.power@novell.com>2011-12-05 09:56:17 +0000
committerNoel Power <noel.power@novell.com>2011-12-05 09:57:12 +0000
commit9cff030fa15f89fa1009fbb3827ab11c43c20b04 (patch)
tree7a2cc323b2df30d253b8911d25aeaadd78c9d6cb /basctl/source/dlged
parentc2f62c8cb30975e3cd46c4800e738f3f010ecb3e (diff)
add some form control support for basic dialogs
Diffstat (limited to 'basctl/source/dlged')
-rw-r--r--basctl/source/dlged/dlged.cxx2
-rw-r--r--basctl/source/dlged/dlgedfac.cxx67
-rw-r--r--basctl/source/dlged/dlgedobj.cxx31
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;
+}
//----------------------------------------------------------------------------