summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOcke Janssen [oj] <Ocke.Janssen@sun.com>2009-11-16 09:59:12 +0100
committerOcke Janssen [oj] <Ocke.Janssen@sun.com>2009-11-16 09:59:12 +0100
commitf448a7b94dafd3e80e7cfdc405e2dbccbfdef1d6 (patch)
treeb3d5bcb2ef2cb939f231d95d5c146fb8aa349a08
parentcc423d4be4338cbd81eed9f96f7c7a277da0ee88 (diff)
parent1e0bc426a966d9920714d0d3404ae32bdda9bdd7 (diff)
dba33d: pull from dba33b
-rw-r--r--connectivity/inc/connectivity/dbmetadata.hxx11
-rw-r--r--connectivity/source/commontools/dbmetadata.cxx21
-rwxr-xr-xconnectivity/source/drivers/ado/ado.xcu5
-rwxr-xr-xconnectivity/source/drivers/jdbc/jdbc.xcu5
-rwxr-xr-xconnectivity/source/drivers/odbc/odbc.xcu5
-rw-r--r--connectivity/source/drivers/odbcbase/OPreparedStatement.cxx15
-rw-r--r--connectivity/source/drivers/odbcbase/OTools.cxx5
-rw-r--r--connectivity/source/inc/odbc/OBoundParam.hxx6
-rw-r--r--svx/inc/pch/precompiled_svx.hxx4
-rw-r--r--svx/inc/svx/fmdpage.hxx5
-rw-r--r--svx/inc/svx/fmshell.hxx6
-rw-r--r--svx/inc/svx/fmview.hxx6
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx9
-rw-r--r--svx/source/fmcomp/fmgridcl.cxx1
-rw-r--r--svx/source/fmcomp/fmgridif.cxx13
-rw-r--r--svx/source/fmcomp/gridcell.cxx10
-rw-r--r--svx/source/fmcomp/gridcols.cxx35
-rw-r--r--svx/source/form/confirmdelete.cxx138
-rw-r--r--svx/source/form/delayedevent.cxx4
-rw-r--r--svx/source/form/filtnav.cxx1114
-rw-r--r--svx/source/form/fmcontrolbordermanager.cxx3
-rw-r--r--svx/source/form/fmcontrollayout.cxx3
-rw-r--r--svx/source/form/fmobj.cxx72
-rw-r--r--svx/source/form/fmobjfac.cxx1
-rw-r--r--svx/source/form/fmpage.cxx1
-rw-r--r--svx/source/form/fmservs.cxx9
-rw-r--r--svx/source/form/fmshell.cxx20
-rw-r--r--svx/source/form/fmshimp.cxx464
-rw-r--r--svx/source/form/fmsrcimp.cxx1
-rw-r--r--svx/source/form/fmstring.src2
-rw-r--r--svx/source/form/fmtextcontrolshell.cxx1
-rw-r--r--svx/source/form/fmtools.cxx734
-rw-r--r--svx/source/form/fmundo.cxx69
-rw-r--r--svx/source/form/fmview.cxx3
-rw-r--r--svx/source/form/fmvwimp.cxx220
-rw-r--r--svx/source/form/formcontroller.cxx (renamed from svx/source/form/fmctrler.cxx)1763
-rw-r--r--svx/source/form/formcontrolling.cxx4
-rw-r--r--svx/source/form/formdispatchinterceptor.cxx213
-rw-r--r--svx/source/form/formfeaturedispatcher.cxx (renamed from svx/source/form/fmdispatch.cxx)48
-rw-r--r--svx/source/form/legacyformcontroller.cxx225
-rw-r--r--svx/source/form/makefile.mk9
-rw-r--r--svx/source/form/tabwin.cxx1
-rw-r--r--svx/source/inc/confirmdelete.hxx62
-rw-r--r--svx/source/inc/delayedevent.hxx4
-rw-r--r--svx/source/inc/filtnav.hxx85
-rw-r--r--svx/source/inc/fmPropBrw.hxx4
-rw-r--r--svx/source/inc/fmcontrolbordermanager.hxx5
-rw-r--r--svx/source/inc/fmcontrollayout.hxx3
-rw-r--r--svx/source/inc/fmctrler.hxx617
-rw-r--r--svx/source/inc/fmexpl.hxx6
-rw-r--r--svx/source/inc/fmservs.hxx2
-rw-r--r--svx/source/inc/fmshimp.hxx28
-rw-r--r--svx/source/inc/fmsrcimp.hxx17
-rw-r--r--svx/source/inc/fmtextcontrolshell.hxx16
-rw-r--r--svx/source/inc/fmtools.hxx159
-rw-r--r--svx/source/inc/fmvwimp.hxx44
-rw-r--r--svx/source/inc/formcontroller.hxx592
-rw-r--r--svx/source/inc/formcontrolling.hxx15
-rw-r--r--svx/source/inc/formdispatchinterceptor.hxx118
-rw-r--r--svx/source/inc/formfeaturedispatcher.hxx (renamed from svx/source/inc/fmdispatch.hxx)23
-rw-r--r--svx/source/inc/gridcell.hxx2
-rw-r--r--svx/source/inc/tabwin.hxx3
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx90
63 files changed, 3710 insertions, 3469 deletions
diff --git a/connectivity/inc/connectivity/dbmetadata.hxx b/connectivity/inc/connectivity/dbmetadata.hxx
index 1ee1718247ae..4cfab247c10f 100644
--- a/connectivity/inc/connectivity/dbmetadata.hxx
+++ b/connectivity/inc/connectivity/dbmetadata.hxx
@@ -121,6 +121,17 @@ namespace dbtools
*/
bool supportsSubqueriesInFrom() const;
+ /** checks whether the database supports primary keys
+
+ Since there's no dedicated API to ask a database for this, a heuristics needs to be applied.
+ First, the <code>PrimaryKeySupport<code> settings of the data source is examined. If it is <TRUE/>
+ or <FALSE/>, then value is returned. If it is <NULL/>, then the database meta data are examined
+ for support of core SQL grammar, and the result is returned. The assumption is that a database/driver
+ which supports core SQL grammar usually also supports primary keys, and vice versa. At least, experience
+ shows this is true most of the time.
+ */
+ bool supportsPrimaryKeys() const;
+
/** determines whether names in the database should be restricted to SQL-92 identifiers
Effectively, this method checks the EnableSQL92Check property of the data source settings,
diff --git a/connectivity/source/commontools/dbmetadata.cxx b/connectivity/source/commontools/dbmetadata.cxx
index c5b65a9d113b..d30161da497c 100644
--- a/connectivity/source/commontools/dbmetadata.cxx
+++ b/connectivity/source/commontools/dbmetadata.cxx
@@ -257,6 +257,27 @@ namespace dbtools
}
//--------------------------------------------------------------------
+ bool DatabaseMetaData::supportsPrimaryKeys() const
+ {
+ lcl_checkConnected( *m_pImpl );
+
+ bool doesSupportPrimaryKeys = false;
+ try
+ {
+ Any setting;
+ if ( !( lcl_getConnectionSetting( "PrimaryKeySupport", *m_pImpl, setting ) )
+ || !( setting >>= doesSupportPrimaryKeys )
+ )
+ doesSupportPrimaryKeys = m_pImpl->xConnectionMetaData->supportsCoreSQLGrammar();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return doesSupportPrimaryKeys;
+ }
+
+ //--------------------------------------------------------------------
const ::rtl::OUString& DatabaseMetaData::getIdentifierQuoteString() const
{
return lcl_getConnectionStringSetting( *m_pImpl, m_pImpl->sCachedIdentifierQuoteString, &XDatabaseMetaData::getIdentifierQuoteString );
diff --git a/connectivity/source/drivers/ado/ado.xcu b/connectivity/source/drivers/ado/ado.xcu
index 236d38bd7ff7..8a106c70283f 100755
--- a/connectivity/source/drivers/ado/ado.xcu
+++ b/connectivity/source/drivers/ado/ado.xcu
@@ -115,6 +115,11 @@
<value>true</value>
</prop>
</node>
+ <node oor:name="PrimaryKeySupport" oor:op="replace">
+ <prop oor:name="Value" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ </node>
</node>
<node oor:name="MetaData">
<node oor:name="SupportsTableCreation" oor:op="replace">
diff --git a/connectivity/source/drivers/jdbc/jdbc.xcu b/connectivity/source/drivers/jdbc/jdbc.xcu
index ae1bbad227e7..f5ac8f20db5c 100755
--- a/connectivity/source/drivers/jdbc/jdbc.xcu
+++ b/connectivity/source/drivers/jdbc/jdbc.xcu
@@ -145,6 +145,11 @@
<value>true</value>
</prop>
</node>
+ <node oor:name="PrimaryKeySupport" oor:op="replace">
+ <prop oor:name="Value" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ </node>
</node>
<node oor:name="MetaData">
<node oor:name="SupportsTableCreation" oor:op="replace">
diff --git a/connectivity/source/drivers/odbc/odbc.xcu b/connectivity/source/drivers/odbc/odbc.xcu
index cf306f10d57f..b3a9d7149650 100755
--- a/connectivity/source/drivers/odbc/odbc.xcu
+++ b/connectivity/source/drivers/odbc/odbc.xcu
@@ -150,6 +150,11 @@
<value>true</value>
</prop>
</node>
+ <node oor:name="PrimaryKeySupport" oor:op="replace">
+ <prop oor:name="Value" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ </node>
</node>
<node oor:name="MetaData">
<node oor:name="SupportsTableCreation" oor:op="replace">
diff --git a/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx b/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx
index 8d72c3271b82..6e9d87e933ca 100644
--- a/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx
+++ b/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx
@@ -321,16 +321,6 @@ void SAL_CALL OPreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool
setInt (parameterIndex, value);
}
// -------------------------------------------------------------------------
-#define PREP_BIND_PARAM(_ty,_jt) \
- OTools::bindParameter(m_pConnection, \
- m_aStatementHandle, \
- parameterIndex, \
- bindBuf, \
- getLengthBuf(parameterIndex), \
- (SWORD)_jt, \
- sal_False,m_pConnection->useOldDateFormat(),_pData,(Reference <XInterface>)*this,getOwnConnection()->getTextEncoding())
-
-
void OPreparedStatement::setParameter(sal_Int32 parameterIndex,sal_Int32 _nType,sal_Int32 _nSize,void* _pData)
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -353,6 +343,10 @@ void OPreparedStatement::setParameter(sal_Int32 parameterIndex,sal_Int32 _nType,
case SQL_NUMERIC:
++nRealSize;
break;
+ case SQL_BINARY:
+ case SQL_VARBINARY:
+ nRealSize=1; //dummy buffer, binary data isn't copied
+ break;
default:
break;
}
@@ -568,6 +562,7 @@ void SAL_CALL OPreparedStatement::setShort( sal_Int32 parameterIndex, sal_Int16
void SAL_CALL OPreparedStatement::setBytes( sal_Int32 parameterIndex, const Sequence< sal_Int8 >& x ) throw(SQLException, RuntimeException)
{
setParameter(parameterIndex,DataType::BINARY,x.getLength(),(void*)&x);
+ boundParams[parameterIndex-1].setSequence(x); // this assures that the sequence stays alive
}
// -------------------------------------------------------------------------
diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx
index 39c848f34eaf..3cadb33cf188 100644
--- a/connectivity/source/drivers/odbcbase/OTools.cxx
+++ b/connectivity/source/drivers/odbcbase/OTools.cxx
@@ -210,12 +210,9 @@ void OTools::bindData( SQLSMALLINT _nOdbcType,
if(pSeq)
{
- // memcpy(_pData,pSeq->getConstArray(),pSeq->getLength());
- _pData = (sal_Int8*)((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getConstArray();
+ _pData = (sal_Int8*)pSeq->getConstArray();
*pLen = pSeq->getLength();
}
- // _pData = (sal_Int8*)((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getConstArray();
- // *pLen = ((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getLength();
}
break;
case SQL_LONGVARBINARY:
diff --git a/connectivity/source/inc/odbc/OBoundParam.hxx b/connectivity/source/inc/odbc/OBoundParam.hxx
index c71977a94910..bc896c2361d8 100644
--- a/connectivity/source/inc/odbc/OBoundParam.hxx
+++ b/connectivity/source/inc/odbc/OBoundParam.hxx
@@ -119,6 +119,11 @@ namespace connectivity
paramInputStreamLen = len;
}
+ void setSequence(const ::com::sun::star::uno::Sequence< sal_Int8 >& _aSequence)
+ {
+ aSequence = _aSequence;
+ }
+
//--------------------------------------------------------------------
// getInputStream
// Gets the input stream for the bound parameter
@@ -191,6 +196,7 @@ namespace connectivity
// data is in native format.
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream> paramInputStream;
+ ::com::sun::star::uno::Sequence< sal_Int8 > aSequence;
// When an input stream is
// bound to a parameter, the
// input stream is saved
diff --git a/svx/inc/pch/precompiled_svx.hxx b/svx/inc/pch/precompiled_svx.hxx
index 8e9bc4d17930..b5a092b87eee 100644
--- a/svx/inc/pch/precompiled_svx.hxx
+++ b/svx/inc/pch/precompiled_svx.hxx
@@ -57,7 +57,7 @@
#include "basic/sbxvar.hxx"
#include "boost/scoped_ptr.hpp"
#include "boost/shared_ptr.hpp"
-#include "boost/spirit/core.hpp"
+#include "boost/spirit/include/classic_core.hpp"
#include "bootstrp/sstring.hxx"
#include "com/sun/star/accessibility/AccessibleEventId.hpp"
#include "com/sun/star/accessibility/AccessibleEventObject.hpp"
@@ -263,7 +263,7 @@
#include "com/sun/star/form/XDatabaseParameterListener.hpp"
#include "com/sun/star/form/XForm.hpp"
#include "com/sun/star/form/XFormComponent.hpp"
-#include "com/sun/star/form/XFormController.hpp"
+#include "com/sun/star/form/runtime/XFormController.hpp"
#include "com/sun/star/form/XFormControllerListener.hpp"
#include "com/sun/star/form/XFormsSupplier.hpp"
#include "com/sun/star/form/XFormsSupplier2.hpp"
diff --git a/svx/inc/svx/fmdpage.hxx b/svx/inc/svx/fmdpage.hxx
index f71cc4751a63..a9f2783d643a 100644
--- a/svx/inc/svx/fmdpage.hxx
+++ b/svx/inc/svx/fmdpage.hxx
@@ -31,11 +31,6 @@
#define _SVX_FMDPAGE_HXX
#include <com/sun/star/form/XFormsSupplier2.hpp>
-#include <com/sun/star/form/XForm.hpp>
-#include <com/sun/star/form/XImageProducerSupplier.hpp>
-#include <com/sun/star/form/XFormController.hpp>
-#include <com/sun/star/form/XFormComponent.hpp>
-#include <com/sun/star/form/XFormControllerListener.hpp>
#include <svx/unopage.hxx>
#include <comphelper/uno3.hxx>
#include "svx/svxdllapi.h"
diff --git a/svx/inc/svx/fmshell.hxx b/svx/inc/svx/fmshell.hxx
index f5d1c7b0c615..9f180156367f 100644
--- a/svx/inc/svx/fmshell.hxx
+++ b/svx/inc/svx/fmshell.hxx
@@ -58,7 +58,9 @@ class SdrUnoObj;
namespace com { namespace sun { namespace star { namespace form {
class XForm;
- class XFormController;
+ namespace runtime {
+ class XFormController;
+ }
} } } }
//========================================================================
@@ -147,7 +149,7 @@ public:
const OutputDevice& _rDevice,
::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _out_rxControl
) const;
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > GetFormController(
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > GetFormController(
const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm,
const SdrView& _rView,
const OutputDevice& _rDevice
diff --git a/svx/inc/svx/fmview.hxx b/svx/inc/svx/fmview.hxx
index c79748ddb94f..3b965967ed42 100644
--- a/svx/inc/svx/fmview.hxx
+++ b/svx/inc/svx/fmview.hxx
@@ -54,7 +54,9 @@ namespace svx {
class SdrUnoObj;
namespace com { namespace sun { namespace star { namespace form {
class XForm;
- class XFormController;
+ namespace runtime {
+ class XFormController;
+ }
} } } }
class SVX_DLLPUBLIC FmFormView : public E3dView
@@ -125,7 +127,7 @@ public:
/** returns the form controller for a given form and a given device
*/
- SVX_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >
+ SVX_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >
GetFormController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, const OutputDevice& _rDevice ) const;
// SdrView
diff --git a/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx b/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx
index 87a1de55ec0a..c8fa03d4e88c 100644
--- a/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx
+++ b/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx
@@ -99,12 +99,21 @@ namespace sdr { namespace contact {
*/
virtual void ActionChanged();
+ /** to be called when any aspect of the control which requires view updates changed
+ */
+ struct ImplAccess { friend class ViewObjectContactOfUnoControl_Impl; friend class ViewObjectContactOfUnoControl; private: ImplAccess() { } };
+ void onControlChangedOrModified( ImplAccess ) { impl_onControlChangedOrModified(); }
+
protected:
+ ViewObjectContactOfUnoControl( ObjectContact& _rObjectContact, ViewContactOfUnoControl& _rViewContact );
~ViewObjectContactOfUnoControl();
// support for Primitive2D
virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const;
+ /// to be called when any aspect of the control which requires view updates changed
+ void impl_onControlChangedOrModified();
+
private:
ViewObjectContactOfUnoControl(); // never implemented
ViewObjectContactOfUnoControl( const ViewObjectContactOfUnoControl& ); // never implemented
diff --git a/svx/source/fmcomp/fmgridcl.cxx b/svx/source/fmcomp/fmgridcl.cxx
index c210919bd09d..92f46cf4ad69 100644
--- a/svx/source/fmcomp/fmgridcl.cxx
+++ b/svx/source/fmcomp/fmgridcl.cxx
@@ -35,6 +35,7 @@
#include "fmgridif.hxx"
#include "fmitems.hxx"
#include "fmprop.hrc"
+#include "fmtools.hxx"
#include "fmresids.hrc"
#include "fmservs.hxx"
#include "fmurl.hxx"
diff --git a/svx/source/fmcomp/fmgridif.cxx b/svx/source/fmcomp/fmgridif.cxx
index 0bfc7c768973..c7e19499e70a 100644
--- a/svx/source/fmcomp/fmgridif.cxx
+++ b/svx/source/fmcomp/fmgridif.cxx
@@ -34,14 +34,15 @@
#include "fmgridif.hxx"
#include "fmprop.hrc"
#include "fmservs.hxx"
-#include "fmtools.hxx"
#include "fmurl.hxx"
+#include "fmtools.hxx"
#include "formcontrolfactory.hxx"
#include "gridcell.hxx"
#include "sdbdatacolumn.hxx"
#include "svx/fmgridcl.hxx"
#include "svx/svxids.hrc"
+/** === begin UNO includes === **/
#include <com/sun/star/awt/PosSize.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/form/FormComponentType.hpp>
@@ -52,6 +53,8 @@
#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
#include <com/sun/star/view/XSelectionSupplier.hpp>
+#include <com/sun/star/sdbcx/XRowLocate.hpp>
+/** === end UNO includes === **/
#include <comphelper/container.hxx>
#include <comphelper/enumhelper.hxx>
@@ -1118,7 +1121,7 @@ namespace fmgridif
{
const ::rtl::OUString getDataModeIdentifier()
{
- static ::rtl::OUString s_sDataModeIdentifier = DATA_MODE;
+ static ::rtl::OUString s_sDataModeIdentifier = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) );
return s_sDataModeIdentifier;
}
}
@@ -2457,7 +2460,7 @@ void FmXGridPeer::setMode(const ::rtl::OUString& Mode) throw( NoSupportException
m_aMode = Mode;
FmGridControl* pGrid = (FmGridControl*) GetWindow();
- if (Mode == FILTER_MODE)
+ if ( Mode == ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterMode" ) ) )
pGrid->SetFilterMode(sal_True);
else
{
@@ -2480,8 +2483,8 @@ void FmXGridPeer::setMode(const ::rtl::OUString& Mode) throw( NoSupportException
{
aModes.realloc(2);
::rtl::OUString* pModes = aModes.getArray();
- pModes[0] = DATA_MODE;
- pModes[1] = FILTER_MODE;
+ pModes[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) );
+ pModes[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterMode" ) );
}
return aModes;
}
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx
index ff7cfd422eb8..5f6f56ac075c 100644
--- a/svx/source/fmcomp/gridcell.cxx
+++ b/svx/source/fmcomp/gridcell.cxx
@@ -679,7 +679,15 @@ sal_Bool DbCellControl::Commit()
// lock the listening for value property changes
lockValueProperty();
// commit the content of the control into the model's value property
- sal_Bool bReturn = commitControl();
+ sal_Bool bReturn = sal_False;
+ try
+ {
+ bReturn = commitControl();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
// unlock the listening for value property changes
unlockValueProperty();
// outta here
diff --git a/svx/source/fmcomp/gridcols.cxx b/svx/source/fmcomp/gridcols.cxx
index da7fe3447b0a..1fb7c69c9835 100644
--- a/svx/source/fmcomp/gridcols.cxx
+++ b/svx/source/fmcomp/gridcols.cxx
@@ -34,7 +34,8 @@
#include <tools/debug.hxx>
#include <comphelper/types.hxx>
#include "fmservs.hxx"
-#include "fmtools.hxx"
+
+using namespace ::com::sun::star::uno;
//------------------------------------------------------------------------------
const ::comphelper::StringSequence& getColumnTypes()
@@ -57,6 +58,36 @@ const ::comphelper::StringSequence& getColumnTypes()
return aColumnTypes;
}
+//------------------------------------------------------------------
+// Vergleichen von PropertyInfo
+extern "C" int
+#if defined( WNT )
+ __cdecl
+#endif
+#if defined( ICC ) && defined( OS2 )
+_Optlink
+#endif
+ NameCompare(const void* pFirst, const void* pSecond)
+{
+ return ((::rtl::OUString*)pFirst)->compareTo(*(::rtl::OUString*)pSecond);
+}
+
+namespace
+{
+ //------------------------------------------------------------------------------
+ sal_Int32 lcl_findPos(const ::rtl::OUString& aStr, const Sequence< ::rtl::OUString>& rList)
+ {
+ const ::rtl::OUString* pStrList = rList.getConstArray();
+ ::rtl::OUString* pResult = (::rtl::OUString*) bsearch(&aStr, (void*)pStrList, rList.getLength(), sizeof(::rtl::OUString),
+ &NameCompare);
+
+ if (pResult)
+ return (pResult - pStrList);
+ else
+ return -1;
+ }
+}
+
//------------------------------------------------------------------------------
sal_Int32 getColumnTypeByModelName(const ::rtl::OUString& aModelName)
{
@@ -79,7 +110,7 @@ sal_Int32 getColumnTypeByModelName(const ::rtl::OUString& aModelName)
: aModelName.copy(aCompatibleModelPrefix.getLength());
const ::comphelper::StringSequence& rColumnTypes = getColumnTypes();
- nTypeId = findPos(aColumnType, rColumnTypes);
+ nTypeId = lcl_findPos(aColumnType, rColumnTypes);
}
return nTypeId;
}
diff --git a/svx/source/form/confirmdelete.cxx b/svx/source/form/confirmdelete.cxx
deleted file mode 100644
index 819677c3f495..000000000000
--- a/svx/source/form/confirmdelete.cxx
+++ /dev/null
@@ -1,138 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: confirmdelete.cxx,v $
- * $Revision: 1.10 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svx.hxx"
-#include "confirmdelete.hxx"
-#include <svx/dialmgr.hxx>
-#ifndef _SVX_FMHELP_HRC
-#include "fmhelp.hrc"
-#endif
-#ifndef _SVX_FMRESIDS_HRC
-#include "fmresids.hrc"
-#endif
-#include <unotools/configmgr.hxx>
-#include <vcl/msgbox.hxx>
-
-//........................................................................
-namespace svxform
-{
-//........................................................................
-
-#define BORDER_HEIGHT 6 // default distance control-dialog
-#define BORDER_WIDTH 6 // default distance control-dialog
-
- using namespace ::com::sun::star::uno;
-
- //====================================================================
- //= class ConfirmDeleteDialog
- //====================================================================
- //------------------------------------------------------------------------------
- ConfirmDeleteDialog::ConfirmDeleteDialog(Window* pParent, const String& _rTitle)
- :ButtonDialog(pParent, WB_HORZ | WB_STDDIALOG)
- ,m_aInfoImage (this)
- ,m_aTitle (this, WB_WORDBREAK | WB_LEFT)
- ,m_aMessage (this, WB_WORDBREAK | WB_LEFT)
- {
- String sMessage(SVX_RES(RID_STR_DELETECONFIRM));
-
- // Changed as per BugID 79541 Branding/Configuration
- Any aProductName = ::utl::ConfigManager::GetDirectConfigProperty(::utl::ConfigManager::PRODUCTNAME);
- ::rtl::OUString sProductName;
- aProductName >>= sProductName;
-
- String aTitle = sProductName;
- aProductName = ::utl::ConfigManager::GetDirectConfigProperty(::utl::ConfigManager::PRODUCTVERSION);
- aProductName >>= sProductName;
- aTitle.AppendAscii(" ");
- aTitle += String(sProductName);
- SetText(aTitle);
-
- SetHelpId(HID_DLG_DBMSG);
- SetSizePixel(LogicToPixel(Size(220, 30),MAP_APPFONT));
-
- m_aInfoImage.SetPosSizePixel(LogicToPixel(Point(6, 6),MAP_APPFONT),
- LogicToPixel(Size(20, 20),MAP_APPFONT));
- m_aInfoImage.Show();
-
- m_aTitle.SetPosSizePixel(LogicToPixel(Point(45, 6),MAP_APPFONT),
- LogicToPixel(Size(169, 20),MAP_APPFONT));
-
- Font aFont = m_aTitle.GetFont();
- aFont.SetWeight(WEIGHT_SEMIBOLD);
- m_aTitle.SetFont(aFont);
- m_aTitle.Show();
-
- m_aMessage.SetPosSizePixel(LogicToPixel(Point(45, 29),MAP_APPFONT),
- LogicToPixel(Size(169, 1),MAP_APPFONT));
- m_aMessage.Show();
-
- // Image festlegen
- m_aInfoImage.SetImage(WarningBox::GetStandardImage());
-
- // Title setzen
- m_aTitle.SetText(_rTitle);
-
- // Ermitteln der Hoehe des Textfeldes und des Dialogs
- Size aBorderSize = LogicToPixel(Size(BORDER_WIDTH, BORDER_HEIGHT),MAP_APPFONT);
- Rectangle aDlgRect(GetPosPixel(),GetSizePixel());
- Rectangle aMessageRect(m_aMessage.GetPosPixel(),m_aMessage.GetSizePixel());
- Rectangle aTextRect =
- GetTextRect(aMessageRect, sMessage, TEXT_DRAW_WORDBREAK | TEXT_DRAW_MULTILINE | TEXT_DRAW_LEFT);
-
- long nHText = aTextRect.Bottom() > aMessageRect.Bottom() ? aTextRect.Bottom() - aMessageRect.Bottom() : 0;
-
- aDlgRect.Bottom() += nHText + 2 * aBorderSize.Height();
- aMessageRect.Bottom() += nHText;
-
- // Dialog anpassen
- SetSizePixel(aDlgRect.GetSize());
- SetPageSizePixel(aDlgRect.GetSize());
-
- // Message Text anpassen und setzen
- m_aMessage.SetSizePixel(aMessageRect.GetSize());
- m_aMessage.SetText(sMessage);
-
- // Buttons anlegen
- AddButton(BUTTON_YES, BUTTONID_YES, 0);
- AddButton(BUTTON_NO, BUTTONID_NO, BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON);
- }
-
- //------------------------------------------------------------------------------
- ConfirmDeleteDialog::~ConfirmDeleteDialog()
- {
- }
-
-//........................................................................
-} // namespace svxform
-//........................................................................
-
-
-
diff --git a/svx/source/form/delayedevent.cxx b/svx/source/form/delayedevent.cxx
index c6bce8efec98..a185ef04d389 100644
--- a/svx/source/form/delayedevent.cxx
+++ b/svx/source/form/delayedevent.cxx
@@ -5,10 +5,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
-* $RCSfile: delayedevent.cxx,v $
-*
-* $Revision: 1.1.2.1 $
-*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/svx/source/form/filtnav.cxx b/svx/source/form/filtnav.cxx
index 7ac8f8afbe29..dec2f4c0d5a6 100644
--- a/svx/source/form/filtnav.cxx
+++ b/svx/source/form/filtnav.cxx
@@ -30,50 +30,40 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#ifndef _SVX_FMRESIDS_HRC
-#include "fmresids.hrc"
-#endif
-#include "fmctrler.hxx"
-#include "filtnav.hxx"
-#include <com/sun/star/util/XNumberFormatter.hpp>
-#include <com/sun/star/form/XFormController.hpp>
-#include <fmexch.hxx>
-#include "fmitems.hxx"
-#ifndef _SVX_SVXIDS_HRC
-#include <svx/svxids.hrc>
-#endif
-#ifndef _SVX_FMPROP_HRC
+#include "filtnav.hxx"
+#include "fmexch.hxx"
+#include "fmhelp.hrc"
+#include "fmitems.hxx"
#include "fmprop.hrc"
-#endif
+#include "fmresids.hrc"
+#include "gridcell.hxx"
-#ifndef _SVX_FMHELP_HRC
-#include "fmhelp.hrc"
-#endif
-#include <svx/dialmgr.hxx>
-#include <sfx2/dispatch.hxx>
-#include <sfx2/objsh.hxx>
-#include <sfx2/objitem.hxx>
-#include <sfx2/request.hxx>
-#include <tools/shl.hxx>
+/** === begin UNO includes === **/
+#include <com/sun/star/form/runtime/XFormController.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <com/sun/star/util/XNumberFormatter.hpp>
+/** === end UNO includes === **/
-#ifndef _WRKWIN_HXX //autogen
-#include <vcl/wrkwin.hxx>
-#endif
-#include <svx/fmshell.hxx>
-#include <fmshimp.hxx>
-#include <fmservs.hxx>
-#include <fmtools.hxx>
-#include <cppuhelper/implbase1.hxx>
+#include <comphelper/processfactory.hxx>
#include <comphelper/property.hxx>
+#include <comphelper/sequence.hxx>
#include <comphelper/uno3.hxx>
#include <connectivity/dbtools.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/lang/XUnoTunnel.hpp>
-#include <comphelper/sequence.hxx>
-#include "gridcell.hxx"
+#include <cppuhelper/implbase1.hxx>
+#include <fmservs.hxx>
+#include <fmshimp.hxx>
#include <rtl/logfile.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/objitem.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/request.hxx>
+#include <svx/dialmgr.hxx>
+#include <svx/fmshell.hxx>
+#include <svx/svxids.hrc>
+#include <tools/shl.hxx>
+#include <vcl/wrkwin.hxx>
#include <functional>
@@ -85,11 +75,6 @@
#define DROP_ACTION_TIMER_TICK_BASE 10
// das ist die Basis, mit der beide Angaben multipliziert werden (in ms)
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::sdb;
-using namespace ::com::sun::star::beans;
using namespace ::svxform;
using namespace ::connectivity::simple;
using namespace ::connectivity;
@@ -100,6 +85,37 @@ namespace svxform
{
//........................................................................
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::lang::XMultiServiceFactory;
+ using ::com::sun::star::awt::TextEvent;
+ using ::com::sun::star::container::XIndexAccess;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::beans::XPropertySet;
+ using ::com::sun::star::form::runtime::XFormController;
+ using ::com::sun::star::form::runtime::XFilterController;
+ using ::com::sun::star::form::runtime::XFilterControllerListener;
+ using ::com::sun::star::form::runtime::FilterEvent;
+ using ::com::sun::star::lang::EventObject;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::form::XForm;
+ using ::com::sun::star::container::XChild;
+ using ::com::sun::star::awt::XControl;
+ using ::com::sun::star::sdbc::XConnection;
+ using ::com::sun::star::util::XNumberFormatsSupplier;
+ using ::com::sun::star::beans::XPropertySet;
+ using ::com::sun::star::util::XNumberFormatter;
+ using ::com::sun::star::sdbc::XRowSet;
+ using ::com::sun::star::lang::Locale;
+ using ::com::sun::star::sdb::SQLContext;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::awt::XTextComponent;
+ using ::com::sun::star::uno::Sequence;
+ /** === end UNO using === **/
+
//========================================================================
OFilterItemExchange::OFilterItemExchange()
{
@@ -141,8 +157,8 @@ TYPEINIT1(FmParentData, FmFilterData);
//------------------------------------------------------------------------
FmParentData::~FmParentData()
{
- for (::std::vector<FmFilterData*>::const_iterator i = m_aChilds.begin();
- i != m_aChilds.end(); i++)
+ for (::std::vector<FmFilterData*>::const_iterator i = m_aChildren.begin();
+ i != m_aChildren.end(); i++)
delete (*i);
}
@@ -168,16 +184,17 @@ Image FmFormItem::GetImage( BmpColorMode _eMode ) const
//========================================================================
TYPEINIT1(FmFilterItems, FmParentData);
//------------------------------------------------------------------------
-FmFilterItem* FmFilterItems::Find(const Reference< ::com::sun::star::awt::XTextComponent > & _xText) const
+FmFilterItem* FmFilterItems::Find( const ::sal_Int32 _nFilterComponentIndex ) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterItems::Find" );
- for (::std::vector<FmFilterData*>::const_iterator i = m_aChilds.begin();
- i != m_aChilds.end(); ++i)
+ for ( ::std::vector< FmFilterData* >::const_iterator i = m_aChildren.begin();
+ i != m_aChildren.end();
+ ++i
+ )
{
- FmFilterItem* pCond = PTR_CAST(FmFilterItem, *i);
- DBG_ASSERT(pCond, "Wrong element in container");
- if (_xText == pCond->GetTextComponent())
- return pCond;
+ FmFilterItem* pCondition = PTR_CAST( FmFilterItem, *i );
+ DBG_ASSERT( pCondition, "FmFilterItems::Find: Wrong element in container!" );
+ if ( _nFilterComponentIndex == pCondition->GetComponentIndex() )
+ return pCondition;
}
return NULL;
}
@@ -185,7 +202,6 @@ FmFilterItem* FmFilterItems::Find(const Reference< ::com::sun::star::awt::XTextC
//------------------------------------------------------------------------
Image FmFilterItems::GetImage( BmpColorMode _eMode ) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterItems::GetImage" );
static Image aImage;
static Image aImage_HC;
@@ -203,16 +219,15 @@ Image FmFilterItems::GetImage( BmpColorMode _eMode ) const
//========================================================================
TYPEINIT1(FmFilterItem, FmFilterData);
//------------------------------------------------------------------------
-FmFilterItem::FmFilterItem(const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,
- FmFilterItems* pParent,
- const ::rtl::OUString& aFieldName,
- const ::rtl::OUString& aText,
- const Reference< ::com::sun::star::awt::XTextComponent > & _xText)
+FmFilterItem::FmFilterItem( const Reference< XMultiServiceFactory >& _rxFactory,
+ FmFilterItems* pParent,
+ const ::rtl::OUString& aFieldName,
+ const ::rtl::OUString& aText,
+ const sal_Int32 _nComponentIndex )
:FmFilterData(_rxFactory,pParent, aText)
,m_aFieldName(aFieldName)
- ,m_xText(_xText)
+ ,m_nComponentIndex( _nComponentIndex )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterItems::FmFilterItem" );
}
//------------------------------------------------------------------------
@@ -262,17 +277,6 @@ public:
TYPEINIT1( FmFilterInsertedHint, FmFilterHint );
//========================================================================
-class FmFilterReplacedHint : public FmFilterHint
-{
-public:
- TYPEINFO();
- FmFilterReplacedHint(FmFilterData* pData)
- :FmFilterHint(pData){}
-
-};
-TYPEINIT1( FmFilterReplacedHint, FmFilterHint );
-
-//========================================================================
class FmFilterRemovedHint : public FmFilterHint
{
public:
@@ -315,243 +319,240 @@ TYPEINIT1( FmFilterCurrentChangedHint, SfxHint );
//========================================================================
// class FmFilterAdapter, Listener an den FilterControls
//========================================================================
-class FmFilterAdapter : public ::cppu::WeakImplHelper1< ::com::sun::star::awt::XTextListener >
+class FmFilterAdapter : public ::cppu::WeakImplHelper1< XFilterControllerListener >
{
- FmFilterControls m_aFilterControls;
- FmFilterModel* m_pModel;
+ FmFilterModel* m_pModel;
+ Reference< XIndexAccess > m_xControllers;
public:
- FmFilterAdapter(FmFilterModel* pModel, const Reference< ::com::sun::star::container::XIndexAccess >& xControllers);
+ FmFilterAdapter(FmFilterModel* pModel, const Reference< XIndexAccess >& xControllers);
-// ::com::sun::star::lang::XEventListener
- virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( RuntimeException );
+// XEventListener
+ virtual void SAL_CALL disposing(const EventObject& Source) throw( RuntimeException );
-// ::com::sun::star::awt::XTextListener
- virtual void SAL_CALL textChanged(const ::com::sun::star::awt::TextEvent& e) throw( ::com::sun::star::uno::RuntimeException );
+// XFilterControllerListener
+ virtual void SAL_CALL predicateExpressionChanged( const FilterEvent& _Event ) throw (RuntimeException);
+ virtual void SAL_CALL disjunctiveTermRemoved( const FilterEvent& _Event ) throw (RuntimeException);
+ virtual void SAL_CALL disjunctiveTermAdded( const FilterEvent& _Event ) throw (RuntimeException);
// helpers
void dispose() throw( RuntimeException );
- void InsertElements(const Reference< ::com::sun::star::container::XIndexAccess >& xControllers);
- void RemoveElement(const Reference< ::com::sun::star::awt::XTextComponent > & xText);
+ void AddOrRemoveListener( const Reference< XIndexAccess >& _rxControllers, const bool _bAdd );
- Reference< ::com::sun::star::beans::XPropertySet > getField(const Reference< ::com::sun::star::awt::XTextComponent > & xText) const;
void setText(sal_Int32 nPos,
const FmFilterItem* pFilterItem,
const ::rtl::OUString& rText);
- void DeleteItemsByText(::std::vector<FmFilterData*>& rItems, const Reference< ::com::sun::star::awt::XTextComponent > & xText);
- Reference< ::com::sun::star::form::XForm > findForm(const Reference< ::com::sun::star::container::XChild >& xChild);
};
//------------------------------------------------------------------------
-FmFilterAdapter::FmFilterAdapter(FmFilterModel* pModel, const Reference< ::com::sun::star::container::XIndexAccess >& xControllers)
- :m_pModel(pModel)
+FmFilterAdapter::FmFilterAdapter(FmFilterModel* pModel, const Reference< XIndexAccess >& xControllers)
+ :m_pModel( pModel )
+ ,m_xControllers( xControllers )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::FmFilterAdapter" );
- InsertElements(xControllers);
-
- // listen on all controls as text listener
- for (FmFilterControls::const_iterator iter = m_aFilterControls.begin();
- iter != m_aFilterControls.end(); iter++)
- (*iter).first->addTextListener(this);
+ AddOrRemoveListener( m_xControllers, true );
}
//------------------------------------------------------------------------
void FmFilterAdapter::dispose() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::dispose" );
- // clear the filter control map
- for (FmFilterControls::const_iterator iter = m_aFilterControls.begin();
- iter != m_aFilterControls.end(); iter++)
- (*iter).first->removeTextListener(this);
-
- m_aFilterControls.clear();
+ AddOrRemoveListener( m_xControllers, false );
}
-//------------------------------------------------------------------------------
-// delete all items relate to the control
-void FmFilterAdapter::DeleteItemsByText(::std::vector<FmFilterData*>& _rItems,
- const Reference< ::com::sun::star::awt::XTextComponent > & xText)
+//------------------------------------------------------------------------
+void FmFilterAdapter::AddOrRemoveListener( const Reference< XIndexAccess >& _rxControllers, const bool _bAdd )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::DeleteItemsByText" );
- for (::std::vector<FmFilterData*>::reverse_iterator i = _rItems.rbegin();
- // link problems with operator ==
- i.base() != _rItems.rend().base(); i++)
+ for (sal_Int32 i = 0, nLen = _rxControllers->getCount(); i < nLen; ++i)
{
- FmFilterItems* pFilterItems = PTR_CAST(FmFilterItems, *i);
- if (pFilterItems)
- {
- FmFilterItem* pFilterItem = pFilterItems->Find(xText);
- if (pFilterItem)
- {
- // remove the condition
- ::std::vector<FmFilterData*>& rItems = pFilterItems->GetChilds();
- ::std::vector<FmFilterData*>::iterator j = ::std::find(rItems.begin(), rItems.end(), pFilterItem);
- if (j != rItems.end())
- m_pModel->Remove(j, pFilterItem);
- }
- continue;
- }
- FmFormItem* pFormItem = PTR_CAST(FmFormItem, *i);
- if (pFormItem)
- DeleteItemsByText(pFormItem->GetChilds(), xText);
+ Reference< XIndexAccess > xElement( _rxControllers->getByIndex(i), UNO_QUERY );
+
+ // step down
+ AddOrRemoveListener( xElement, _bAdd );
+
+ // handle this particular controller
+ Reference< XFilterController > xController( xElement, UNO_QUERY );
+ OSL_ENSURE( xController.is(), "FmFilterAdapter::InsertElements: no XFilterController, cannot sync data!" );
+ if ( xController.is() )
+ if ( _bAdd )
+ xController->addFilterControllerListener( this );
+ else
+ xController->removeFilterControllerListener( this );
}
}
//------------------------------------------------------------------------
-void FmFilterAdapter::InsertElements(const Reference< ::com::sun::star::container::XIndexAccess >& xControllers)
+void FmFilterAdapter::setText(sal_Int32 nRowPos,
+ const FmFilterItem* pFilterItem,
+ const ::rtl::OUString& rText)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::InsertElements" );
- for (sal_Int32 i = 0, nLen = xControllers->getCount(); i < nLen; ++i)
- {
- Reference< ::com::sun::star::container::XIndexAccess > xElement;
- xControllers->getByIndex(i) >>= xElement;
+ FmFormItem* pFormItem = PTR_CAST( FmFormItem, pFilterItem->GetParent()->GetParent() );
- // Insert the Elements of the controller
- InsertElements(xElement);
+ try
+ {
+ Reference< XFilterController > xController( pFormItem->GetController(), UNO_QUERY_THROW );
+ xController->setPredicateExpression( pFilterItem->GetComponentIndex(), nRowPos, rText );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+}
- // store the filter controls
- FmXFormController* pController = FmXFormController::getImplementation( xElement.get() );
- DBG_ASSERT( pController, "FmFilterAdapter::InsertElements: no controller!" );
- const FmFilterControls& rControls = pController->getFilterControls();
- for (FmFilterControls::const_iterator iter = rControls.begin(); iter != rControls.end(); ++iter )
- m_aFilterControls.insert(*iter);
- }
+// XEventListener
+//------------------------------------------------------------------------
+void SAL_CALL FmFilterAdapter::disposing(const EventObject& /*e*/) throw( RuntimeException )
+{
}
-//------------------------------------------------------------------------------
-void FmFilterAdapter::RemoveElement(const Reference< ::com::sun::star::awt::XTextComponent > & xText)
+//------------------------------------------------------------------------
+namespace
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::RemoveElement" );
- if (xText.is())
+ ::rtl::OUString lcl_getLabelName_nothrow( const Reference< XControl >& _rxControl )
{
- // alle Level durchlaufen und eintraege entfernen
- if (m_pModel)
- DeleteItemsByText(m_pModel->GetChilds(), xText);
+ ::rtl::OUString sLabelName;
+ try
+ {
+ Reference< XControl > xControl( _rxControl, UNO_SET_THROW );
+ Reference< XPropertySet > xModel( xControl->getModel(), UNO_QUERY_THROW );
+ sLabelName = getLabelName( xModel );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return sLabelName;
+ }
- FmFilterControls::iterator iter = m_aFilterControls.find(xText);
- if (iter != m_aFilterControls.end())
- m_aFilterControls.erase(iter);
+ Reference< XPropertySet > lcl_getBoundField_nothrow( const Reference< XControl >& _rxControl )
+ {
+ Reference< XPropertySet > xField;
+ try
+ {
+ Reference< XControl > xControl( _rxControl, UNO_SET_THROW );
+ Reference< XPropertySet > xModelProps( xControl->getModel(), UNO_QUERY_THROW );
+ xField.set( xModelProps->getPropertyValue( FM_PROP_BOUNDFIELD ), UNO_QUERY_THROW );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return xField;
}
}
+// XFilterControllerListener
//------------------------------------------------------------------------
-Reference< ::com::sun::star::beans::XPropertySet > FmFilterAdapter::getField(const Reference< ::com::sun::star::awt::XTextComponent > & xText) const
+void FmFilterAdapter::predicateExpressionChanged( const FilterEvent& _Event ) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::getField" );
- Reference< ::com::sun::star::beans::XPropertySet > xField;
- FmFilterControls::const_iterator i = m_aFilterControls.find(xText);
- if (i != m_aFilterControls.end())
- xField = (*i).second;
+ ::vos::OGuard aGuard( Application::GetSolarMutex() );
- return xField;
-}
+ if ( !m_pModel )
+ return;
-//------------------------------------------------------------------------
-void FmFilterAdapter::setText(sal_Int32 nRowPos,
- const FmFilterItem* pFilterItem,
- const ::rtl::OUString& rText)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::setText" );
- // set the text for the text component
- Reference< ::com::sun::star::awt::XTextComponent > xText(pFilterItem->GetTextComponent());
- xText->setText(rText);
+ // the controller which sent the event
+ Reference< XFormController > xController( _Event.Source, UNO_QUERY_THROW );
+ Reference< XFilterController > xFilterController( _Event.Source, UNO_QUERY_THROW );
+ Reference< XForm > xForm( xController->getModel(), UNO_QUERY_THROW );
- // get the controller of the text component and its filter rows
- FmFormItem* pFormItem = PTR_CAST(FmFormItem,pFilterItem->GetParent()->GetParent());
- FmXFormController* pController = FmXFormController::getImplementation( pFormItem->GetController().get() );
- DBG_ASSERT( pController, "FmFilterAdapter::setText: no controller!" );
- FmFilterRows& rRows = pController->getFilterRows();
+ FmFormItem* pFormItem = m_pModel->Find( m_pModel->m_aChildren, xForm );
+ OSL_ENSURE( pFormItem, "FmFilterAdapter::predicateExpressionChanged: don't know this form!" );
+ if ( !pFormItem )
+ return;
- DBG_ASSERT(nRowPos < (sal_Int32)rRows.size(), "wrong row pos");
- // Suchen der aktuellen Row
- FmFilterRow& rRow = rRows[nRowPos];
+ const sal_Int32 nActiveTerm( xFilterController->getActiveTerm() );
- // do we have a new filter
- if (rText.getLength())
- rRow[xText] = rText;
- else
+ FmFilterItems* pFilter = PTR_CAST( FmFilterItems, pFormItem->GetChildren()[ nActiveTerm ] );
+ FmFilterItem* pFilterItem = pFilter->Find( _Event.FilterComponent );
+ if ( pFilterItem )
{
- // do we have the control in the row
- FmFilterRow::iterator iter = rRow.find(xText);
- // erase the entry out of the row
- if (iter != rRow.end())
- rRow.erase(iter);
+ if ( _Event.PredicateExpression.getLength())
+ {
+ pFilterItem->SetText( _Event.PredicateExpression );
+ // UI benachrichtigen
+ FmFilterTextChangedHint aChangeHint(pFilterItem);
+ m_pModel->Broadcast( aChangeHint );
+ }
+ else
+ {
+ // no text anymore so remove the condition
+ m_pModel->Remove(pFilterItem);
+ }
}
-}
+ else
+ {
+ // searching the component by field name
+ ::rtl::OUString aFieldName( lcl_getLabelName_nothrow( xFilterController->getFilterComponent( _Event.FilterComponent ) ) );
+ pFilterItem = new FmFilterItem( m_pModel->getORB(), pFilter, aFieldName, _Event.PredicateExpression, _Event.FilterComponent );
+ m_pModel->Insert(pFilter->GetChildren().end(), pFilterItem);
+ }
-// ::com::sun::star::lang::XEventListener
-//------------------------------------------------------------------------
-void SAL_CALL FmFilterAdapter::disposing(const ::com::sun::star::lang::EventObject& e) throw( RuntimeException )
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::disposing" );
- Reference< ::com::sun::star::awt::XTextComponent > xText(e.Source,UNO_QUERY);
- if (xText.is())
- RemoveElement(xText);
+ // ensure there's one empty term in the filter, just in case the active term was previously empty
+ m_pModel->EnsureEmptyFilterRows( *pFormItem );
}
-// XTextListener
//------------------------------------------------------------------------
-Reference< ::com::sun::star::form::XForm > FmFilterAdapter::findForm(const Reference< ::com::sun::star::container::XChild >& xChild)
+void SAL_CALL FmFilterAdapter::disjunctiveTermRemoved( const FilterEvent& _Event ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::findForm" );
- Reference< ::com::sun::star::form::XForm > xForm;
- if (xChild.is())
+ ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ Reference< XFormController > xController( _Event.Source, UNO_QUERY_THROW );
+ Reference< XFilterController > xFilterController( _Event.Source, UNO_QUERY_THROW );
+ Reference< XForm > xForm( xController->getModel(), UNO_QUERY_THROW );
+
+ FmFormItem* pFormItem = m_pModel->Find( m_pModel->m_aChildren, xForm );
+ OSL_ENSURE( pFormItem, "FmFilterAdapter::disjunctiveTermRemoved: don't know this form!" );
+ if ( !pFormItem )
+ return;
+
+ ::std::vector< FmFilterData* >& rTermItems = pFormItem->GetChildren();
+ const bool bValidIndex = ( _Event.DisjunctiveTerm >= 0 ) && ( (size_t)_Event.DisjunctiveTerm < rTermItems.size() );
+ OSL_ENSURE( bValidIndex, "FmFilterAdapter::disjunctiveTermRemoved: invalid term index!" );
+ if ( !bValidIndex )
+ return;
+
+ // if the first term was removed, then the to-be first term needs its text updated
+ if ( _Event.DisjunctiveTerm == 0 )
{
- xForm = Reference< ::com::sun::star::form::XForm >(xChild->getParent(), UNO_QUERY);
- if (!xForm.is())
- xForm = findForm(Reference< ::com::sun::star::container::XChild >(xChild->getParent(), UNO_QUERY));
+ rTermItems[1]->SetText( String( SVX_RES( RID_STR_FILTER_FILTER_FOR ) ) );
+ FmFilterTextChangedHint aChangeHint( rTermItems[1] );
+ m_pModel->Broadcast( aChangeHint );
}
- return xForm;
+
+ // finally remove the entry from the model
+ m_pModel->Remove( rTermItems.begin() + _Event.DisjunctiveTerm );
+
+ // ensure there's one empty term in the filter, just in case the currently removed one was the last empty one
+ m_pModel->EnsureEmptyFilterRows( *pFormItem );
}
-// XTextListener
//------------------------------------------------------------------------
-void FmFilterAdapter::textChanged(const ::com::sun::star::awt::TextEvent& e) throw( ::com::sun::star::uno::RuntimeException )
+void SAL_CALL FmFilterAdapter::disjunctiveTermAdded( const FilterEvent& _Event ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterAdapter::textChanged" );
- // Find the according formitem in the
- Reference< ::com::sun::star::awt::XControl > xControl(e.Source, UNO_QUERY);
- if (!m_pModel || !xControl.is())
- return;
+ ::vos::OGuard aGuard( Application::GetSolarMutex() );
- Reference< ::com::sun::star::form::XForm > xForm(findForm(Reference< ::com::sun::star::container::XChild >(xControl->getModel(), UNO_QUERY)));
- if (!xForm.is())
+ Reference< XFormController > xController( _Event.Source, UNO_QUERY_THROW );
+ Reference< XFilterController > xFilterController( _Event.Source, UNO_QUERY_THROW );
+ Reference< XForm > xForm( xController->getModel(), UNO_QUERY_THROW );
+
+ FmFormItem* pFormItem = m_pModel->Find( m_pModel->m_aChildren, xForm );
+ OSL_ENSURE( pFormItem, "FmFilterAdapter::disjunctiveTermAdded: don't know this form!" );
+ if ( !pFormItem )
return;
- FmFormItem* pFormItem = m_pModel->Find(m_pModel->m_aChilds, xForm);
- if (pFormItem)
+ const sal_Int32 nInsertPos = _Event.DisjunctiveTerm;
+ bool bValidIndex = ( nInsertPos >= 0 ) && ( (size_t)nInsertPos <= pFormItem->GetChildren().size() );
+ if ( !bValidIndex )
{
- Reference< ::com::sun::star::awt::XTextComponent > xText(e.Source, UNO_QUERY);
- FmFilterItems* pFilter = PTR_CAST(FmFilterItems, pFormItem->GetChilds()[pFormItem->GetCurrentPosition()]);
- FmFilterItem* pFilterItem = pFilter->Find(xText);
- if (pFilterItem)
- {
- if (xText->getText().getLength())
- {
- pFilterItem->SetText(xText->getText());
- // UI benachrichtigen
- FmFilterTextChangedHint aChangeHint(pFilterItem);
- m_pModel->Broadcast( aChangeHint );
- }
- else
- {
- // no text anymore so remove the condition
- m_pModel->Remove(pFilterItem);
- }
- }
- else
- {
- // searching the component by field name
- ::rtl::OUString aFieldName = getLabelName(Reference< ::com::sun::star::beans::XPropertySet > (Reference< ::com::sun::star::awt::XControl > (xText, UNO_QUERY)->getModel(),UNO_QUERY));
-
- pFilterItem = new FmFilterItem(m_pModel->getORB(),pFilter, aFieldName, xText->getText(), xText);
- m_pModel->Insert(pFilter->GetChilds().end(), pFilterItem);
- }
- m_pModel->CheckIntegrity(pFormItem);
+ OSL_ENSURE( false, "FmFilterAdapter::disjunctiveTermAdded: invalid index!" );
+ return;
}
+
+ const ::std::vector< FmFilterData* >::iterator insertPos = pFormItem->GetChildren().begin() + nInsertPos;
+
+ FmFilterItems* pFilterItems = new FmFilterItems( m_pModel->getORB(), pFormItem, String( SVX_RES( RID_STR_FILTER_FILTER_OR ) ) );
+ m_pModel->Insert( insertPos, pFilterItems );
}
//========================================================================
@@ -559,14 +560,13 @@ void FmFilterAdapter::textChanged(const ::com::sun::star::awt::TextEvent& e) thr
//========================================================================
TYPEINIT1(FmFilterModel, FmParentData);
//------------------------------------------------------------------------
-FmFilterModel::FmFilterModel(const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory)
+FmFilterModel::FmFilterModel(const Reference< XMultiServiceFactory >& _rxFactory)
:FmParentData(_rxFactory,NULL, ::rtl::OUString())
,OSQLParserClient(_rxFactory)
,m_xORB(_rxFactory)
,m_pAdapter(NULL)
,m_pCurrentItems(NULL)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::FmFilterModel" );
}
//------------------------------------------------------------------------
@@ -578,7 +578,6 @@ FmFilterModel::~FmFilterModel()
//------------------------------------------------------------------------
void FmFilterModel::Clear()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Clear" );
// notify
FilterClearingHint aClearedHint;
Broadcast( aClearedHint );
@@ -595,18 +594,17 @@ void FmFilterModel::Clear()
m_xController = NULL;
m_xControllers = NULL;
- for (::std::vector<FmFilterData*>::const_iterator i = m_aChilds.begin();
- i != m_aChilds.end(); i++)
+ for (::std::vector<FmFilterData*>::const_iterator i = m_aChildren.begin();
+ i != m_aChildren.end(); i++)
delete (*i);
- m_aChilds.clear();
+ m_aChildren.clear();
}
//------------------------------------------------------------------------
-void FmFilterModel::Update(const Reference< ::com::sun::star::container::XIndexAccess > & xControllers, const Reference< ::com::sun::star::form::XFormController > & xCurrent)
+void FmFilterModel::Update(const Reference< XIndexAccess > & xControllers, const Reference< XFormController > & xCurrent)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Update" );
- if ((::com::sun::star::form::XFormController*) xCurrent.get() == (::com::sun::star::form::XFormController*) m_xController.get())
+ if ( xCurrent == m_xController )
return;
if (!xControllers.is())
@@ -616,7 +614,7 @@ void FmFilterModel::Update(const Reference< ::com::sun::star::container::XIndexA
}
// there is only a new current controller
- if ((::com::sun::star::container::XIndexAccess*)m_xControllers.get() != (::com::sun::star::container::XIndexAccess*)xControllers.get())
+ if ( m_xControllers != xControllers )
{
Clear();
@@ -630,77 +628,95 @@ void FmFilterModel::Update(const Reference< ::com::sun::star::container::XIndexA
m_pAdapter->acquire();
SetCurrentController(xCurrent);
- CheckIntegrity(this);
+ EnsureEmptyFilterRows( *this );
}
else
SetCurrentController(xCurrent);
}
//------------------------------------------------------------------------
-void FmFilterModel::Update(const Reference< ::com::sun::star::container::XIndexAccess > & xControllers, FmParentData* pParent)
+void FmFilterModel::Update(const Reference< XIndexAccess > & xControllers, FmParentData* pParent)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Update" );
- sal_Int32 nCount = xControllers->getCount();
- for (sal_Int32 i = 0; i < nCount; i++)
+ try
{
- Reference< ::com::sun::star::form::XFormController > xController;
- xControllers->getByIndex(i) >>= xController;
- Reference< ::com::sun::star::beans::XPropertySet > xModelAsSet(xController->getModel(), UNO_QUERY);
- ::rtl::OUString aName = ::comphelper::getString(xModelAsSet->getPropertyValue(FM_PROP_NAME));
+ sal_Int32 nCount = xControllers->getCount();
+ for ( sal_Int32 i = 0; i < nCount; ++i )
+ {
+ Reference< XFormController > xController( xControllers->getByIndex(i), UNO_QUERY_THROW );
- // Insert a new ::com::sun::star::form
- FmFormItem* pFormItem = new FmFormItem(m_xORB,pParent, xController, aName);
- Insert(pParent->GetChilds().end(), pFormItem);
+ Reference< XPropertySet > xFormProperties( xController->getModel(), UNO_QUERY_THROW );
+ ::rtl::OUString aName;
+ OSL_VERIFY( xFormProperties->getPropertyValue( FM_PROP_NAME ) >>= aName );
- // And now insert the filters for the form
- FmXFormController* pController = FmXFormController::getImplementation( pFormItem->GetController().get() );
- DBG_ASSERT( pController, "FmFilterAdapter::Update: no controller!" );
+ // Insert a new item for the form
+ FmFormItem* pFormItem = new FmFormItem( m_xORB, pParent, xController, aName );
+ Insert( pParent->GetChildren().end(), pFormItem );
- INT32 nPos = pController->getCurrentFilterPosition();
- pFormItem->SetCurrentPosition(nPos);
+ Reference< XFilterController > xFilterController( pFormItem->GetFilterController(), UNO_SET_THROW );
- String aTitle(SVX_RES(RID_STR_FILTER_FILTER_FOR));
- const FmFilterRows& rRows = pController->getFilterRows();
- for (FmFilterRows::const_iterator iter = rRows.begin(); iter != rRows.end(); ++iter)
- {
- const FmFilterRow& rRow = *iter;
- // now add the filter rows
- // One Row always exists
+ // insert the existing filters for the form
+ String aTitle( SVX_RES( RID_STR_FILTER_FILTER_FOR ) );
- FmFilterItems* pFilterItems = new FmFilterItems(m_xORB,pFormItem, aTitle);
- Insert(pFormItem->GetChilds().end(), pFilterItems);
- for (FmFilterRow::const_iterator iter1 = rRow.begin(); iter1 != rRow.end(); ++iter1)
+ Sequence< Sequence< ::rtl::OUString > > aExpressions = xFilterController->getPredicateExpressions();
+ for ( const Sequence< ::rtl::OUString >* pConjunctionTerm = aExpressions.getConstArray();
+ pConjunctionTerm != aExpressions.getConstArray() + aExpressions.getLength();
+ ++pConjunctionTerm
+ )
{
- // insert new and conditons
- ::rtl::OUString aFieldName = getLabelName(Reference< ::com::sun::star::beans::XPropertySet > (Reference< ::com::sun::star::awt::XControl > ((*iter1).first, UNO_QUERY)->getModel(),UNO_QUERY));
- FmFilterItem* pANDCondition = new FmFilterItem(m_xORB,pFilterItems, aFieldName, (*iter1).second, (*iter1).first);
- Insert(pFilterItems->GetChilds().end(), pANDCondition);
+ // we always display one row, even if there's no term to be displayed
+ FmFilterItems* pFilterItems = new FmFilterItems( m_xORB, pFormItem, aTitle );
+ Insert( pFormItem->GetChildren().end(), pFilterItems );
+
+ const Sequence< ::rtl::OUString >& rDisjunction( *pConjunctionTerm );
+ for ( const ::rtl::OUString* pDisjunctiveTerm = rDisjunction.getConstArray();
+ pDisjunctiveTerm != rDisjunction.getConstArray() + rDisjunction.getLength();
+ ++pDisjunctiveTerm
+ )
+ {
+ if ( pDisjunctiveTerm->getLength() == 0 )
+ // no condition for this particular component in this particular conjunction term
+ continue;
+
+ const sal_Int32 nComponentIndex = pDisjunctiveTerm - rDisjunction.getConstArray();
+
+ // determine the display name of the control
+ const Reference< XControl > xFilterControl( xFilterController->getFilterComponent( nComponentIndex ) );
+ const ::rtl::OUString sDisplayName( lcl_getLabelName_nothrow( xFilterControl ) );
+
+ // insert a new entry
+ FmFilterItem* pANDCondition = new FmFilterItem( m_xORB, pFilterItems, sDisplayName, *pDisjunctiveTerm, nComponentIndex );
+ Insert( pFilterItems->GetChildren().end(), pANDCondition );
+ }
+
+ // title for the next conditions
+ aTitle = SVX_RES( RID_STR_FILTER_FILTER_OR );
}
- // title for the next conditions
- aTitle = SVX_RES(RID_STR_FILTER_FILTER_OR);
- }
- // now add dependent controllers
- Reference< ::com::sun::star::container::XIndexAccess > xControllerAsIndex(xController, UNO_QUERY);
- Update(xControllerAsIndex, pFormItem);
+ // now add dependent controllers
+ Reference< XIndexAccess > xControllerAsIndex( xController, UNO_QUERY );
+ Update( xControllerAsIndex, pFormItem );
+ }
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
}
}
//------------------------------------------------------------------------
-FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, const Reference< ::com::sun::star::form::XFormController > & xController) const
+FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, const Reference< XFormController > & xController) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Find" );
for (::std::vector<FmFilterData*>::const_iterator i = rItems.begin();
i != rItems.end(); i++)
{
FmFormItem* pForm = PTR_CAST(FmFormItem,*i);
if (pForm)
{
- if ((::com::sun::star::form::XFormController*)xController.get() == (::com::sun::star::form::XFormController*)pForm->GetController().get())
+ if ( xController == pForm->GetController() )
return pForm;
else
{
- pForm = Find(pForm->GetChilds(), xController);
+ pForm = Find(pForm->GetChildren(), xController);
if (pForm)
return pForm;
}
@@ -710,9 +726,8 @@ FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, cons
}
//------------------------------------------------------------------------
-FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, const Reference< ::com::sun::star::form::XForm >& xForm) const
+FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, const Reference< XForm >& xForm) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Find" );
for (::std::vector<FmFilterData*>::const_iterator i = rItems.begin();
i != rItems.end(); i++)
{
@@ -723,7 +738,7 @@ FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, cons
return pForm;
else
{
- pForm = Find(pForm->GetChilds(), xForm);
+ pForm = Find(pForm->GetChildren(), xForm);
if (pForm)
return pForm;
}
@@ -733,58 +748,64 @@ FmFormItem* FmFilterModel::Find(const ::std::vector<FmFilterData*>& rItems, cons
}
//------------------------------------------------------------------------
-void FmFilterModel::SetCurrentController(const Reference< ::com::sun::star::form::XFormController > & xCurrent)
+void FmFilterModel::SetCurrentController(const Reference< XFormController > & xCurrent)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::SetCurrentController" );
- if ((::com::sun::star::form::XFormController*) xCurrent.get() == (::com::sun::star::form::XFormController*) m_xController.get())
+ if ( xCurrent == m_xController )
return;
m_xController = xCurrent;
- FmFormItem* pItem = Find(m_aChilds, xCurrent);
- if (pItem)
+ FmFormItem* pItem = Find( m_aChildren, xCurrent );
+ if ( !pItem )
+ return;
+
+ try
+ {
+ Reference< XFilterController > xFilterController( m_xController, UNO_QUERY_THROW );
+ const sal_Int32 nActiveTerm( xFilterController->getActiveTerm() );
+ if ( pItem->GetChildren().size() > (size_t)nActiveTerm )
+ {
+ SetCurrentItems( static_cast< FmFilterItems* >( pItem->GetChildren()[ nActiveTerm ] ) );
+ }
+ }
+ catch( const Exception& )
{
- if ( (USHORT)pItem->GetChilds().size() > pItem->GetCurrentPosition() )
- SetCurrentItems( static_cast< FmFilterItems* >( pItem->GetChilds()[ pItem->GetCurrentPosition() ] ) );
+ DBG_UNHANDLED_EXCEPTION();
}
}
//------------------------------------------------------------------------
-void FmFilterModel::AppendFilterItems(FmFormItem* pFormItem)
+void FmFilterModel::AppendFilterItems( FmFormItem& _rFormItem )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::AppendFilterItems" );
- DBG_ASSERT(pFormItem, "AppendFilterItems(): no form item present");
-
- FmFilterItems* pFilterItems = new FmFilterItems(m_xORB,pFormItem, ::rtl::OUString(String(SVX_RES(RID_STR_FILTER_FILTER_OR))));
// insert the condition behind the last filter items
::std::vector<FmFilterData*>::reverse_iterator iter;
- for (iter = pFormItem->GetChilds().rbegin();
- // link problems with operator ==
- iter.base() != pFormItem->GetChilds().rend().base(); iter++)
+ for ( iter = _rFormItem.GetChildren().rbegin();
+ iter != _rFormItem.GetChildren().rend();
+ ++iter
+ )
{
if ((*iter)->ISA(FmFilterItems))
break;
}
- sal_Int32 nInsertPos = iter.base() - pFormItem->GetChilds().rend().base();
- ::std::vector<FmFilterData*>::iterator i = pFormItem->GetChilds().begin() + nInsertPos;
- Insert(i, pFilterItems);
-
- // do we need a new row
- FmXFormController* pController = FmXFormController::getImplementation( pFormItem->GetController().get() );
- DBG_ASSERT( pController, "FmFilterAdapter::AppendFilterItems: no controller!" );
- FmFilterRows& rRows = pController->getFilterRows();
-
- // determine the filter position
- if (nInsertPos >= (sal_Int32)rRows.size())
- rRows.push_back(FmFilterRow());
+ sal_Int32 nInsertPos = iter.base() - _rFormItem.GetChildren().begin();
+ // delegate this to the FilterController, it will notify us, which will let us update our model
+ try
+ {
+ Reference< XFilterController > xFilterController( _rFormItem.GetFilterController(), UNO_SET_THROW );
+ if ( nInsertPos >= xFilterController->getDisjunctiveTerms() )
+ xFilterController->appendEmptyDisjunctiveTerm();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
}
//------------------------------------------------------------------------
void FmFilterModel::Insert(const ::std::vector<FmFilterData*>::iterator& rPos, FmFilterData* pData)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Insert" );
- ::std::vector<FmFilterData*>& rItems = pData->GetParent()->GetChilds();
+ ::std::vector<FmFilterData*>& rItems = pData->GetParent()->GetChildren();
sal_Int32 nPos = rPos == rItems.end() ? LIST_APPEND : rPos - rItems.begin();
rItems.insert(rPos, pData);
@@ -796,9 +817,8 @@ void FmFilterModel::Insert(const ::std::vector<FmFilterData*>::iterator& rPos, F
//------------------------------------------------------------------------
void FmFilterModel::Remove(FmFilterData* pData)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Remove" );
FmParentData* pParent = pData->GetParent();
- ::std::vector<FmFilterData*>& rItems = pParent->GetChilds();
+ ::std::vector<FmFilterData*>& rItems = pParent->GetChildren();
// erase the item from the model
::std::vector<FmFilterData*>::iterator i = ::std::find(rItems.begin(), rItems.end(), pData);
@@ -808,80 +828,32 @@ void FmFilterModel::Remove(FmFilterData* pData)
if (pData->ISA(FmFilterItems))
{
FmFormItem* pFormItem = (FmFormItem*)pParent;
- FmXFormController* pController = FmXFormController::getImplementation( pFormItem->GetController().get() );
- DBG_ASSERT( pController, "FmFilterAdapter::Remove: no controller!" );
- FmFilterRows& rRows = pController->getFilterRows();
- // how many entries do we have
- // it's the last row than we just empty it
- if (nPos == (sal_Int32)(rRows.size() - 1))
- {
- // remove all childs and stay current
- ::std::vector<FmFilterData*>& rChilds = ((FmFilterItems*)pData)->GetChilds();
- while (!rChilds.empty())
- {
- ::std::vector<FmFilterData*>::iterator j = rChilds.end();
- j--;
-
- // we stay on the level so delete each item explizit to clean the controls
- sal_Int32 nParentPos = j - rChilds.begin();
- // EmptyText removes the filter
- FmFilterItem* pFilterItem = PTR_CAST(FmFilterItem, *j);
- m_pAdapter->setText(nParentPos, pFilterItem, ::rtl::OUString());
- Remove(j, pFilterItem);
- }
- }
- else // delete the row
+ try
{
- // if the row is on the current position we have to away from that position.
- // than we can delete it
- if (nPos == pFormItem->GetCurrentPosition())
- {
- ::std::vector<FmFilterData*>::iterator j = i;
-
- // give a new current postion
- if (nPos < (sal_Int32)(rRows.size() - 1))
- // set it to the next row
- ++j;
- else
- // set it to the previous row
- --j;
-
- // if necessary we have the formItem for the current controller
- // than we have to adjust the data displayed in the form
- pFormItem->SetCurrentPosition(j - rItems.begin());
- pController->setCurrentFilterPosition(j - rItems.begin());
-
- // Keep the view consistent and force and new painting
- FmFilterTextChangedHint aChangeHint(*j);
- Broadcast( aChangeHint );
- }
+ Reference< XFilterController > xFilterController( pFormItem->GetFilterController(), UNO_SET_THROW );
- // now delete the entry
- // before deleting we have to shift the current position of the form if necessary
- if (nPos < pFormItem->GetCurrentPosition())
+ bool bEmptyLastTerm = ( ( nPos == 0 ) && xFilterController->getDisjunctiveTerms() == 1 );
+ if ( bEmptyLastTerm )
{
- pFormItem->SetCurrentPosition(pFormItem->GetCurrentPosition() - 1);
- pController->decrementCurrentFilterPosition();
-
- // is it the first row, than the nex row has to recieve a different name
- if (nPos == 0)
+ // remove all children (by setting an empty predicate expression)
+ ::std::vector< FmFilterData* >& rChildren = ((FmFilterItems*)pData)->GetChildren();
+ while ( !rChildren.empty() )
{
- // ensure that the text labels are consistent
- rItems[1]->SetText(String(SVX_RES(RID_STR_FILTER_FILTER_FOR)));
- FmFilterTextChangedHint aChangeHint(rItems[1]);
- Broadcast( aChangeHint );
+ ::std::vector< FmFilterData* >::iterator removePos = rChildren.end() - 1;
+ FmFilterItem* pFilterItem = PTR_CAST( FmFilterItem, *removePos );
+ m_pAdapter->setText( nPos, pFilterItem, ::rtl::OUString() );
+ Remove( removePos );
}
}
-
- // delete it
- rRows.erase(rRows.begin() + nPos);
-
- // and keep the controller consistent
- DBG_ASSERT(rRows.size() != 0, "wrong row size");
-
- // and remove it from the model
- Remove(i, pData);
+ else
+ {
+ xFilterController->removeDisjunctiveTerm( nPos );
+ }
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
}
}
else // FormItems can not be deleted
@@ -894,26 +866,26 @@ void FmFilterModel::Remove(FmFilterData* pData)
else
{
// find the position of the father within his father
- ::std::vector<FmFilterData*>& rParentParentItems = pData->GetParent()->GetParent()->GetChilds();
+ ::std::vector<FmFilterData*>& rParentParentItems = pData->GetParent()->GetParent()->GetChildren();
::std::vector<FmFilterData*>::iterator j = ::std::find(rParentParentItems.begin(), rParentParentItems.end(), pFilterItem->GetParent());
DBG_ASSERT(j != rParentParentItems.end(), "FmFilterModel::Remove(): unknown Item");
sal_Int32 nParentPos = j - rParentParentItems.begin();
// EmptyText removes the filter
m_pAdapter->setText(nParentPos, pFilterItem, ::rtl::OUString());
- Remove(i, pData);
+ Remove( i );
}
}
}
//------------------------------------------------------------------------
-void FmFilterModel::Remove(const ::std::vector<FmFilterData*>::iterator& rPos, FmFilterData* pData)
+void FmFilterModel::Remove( const ::std::vector<FmFilterData*>::iterator& rPos )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Remove" );
- ::std::vector<FmFilterData*>& rItems = pData->GetParent()->GetChilds();
- rItems.erase(rPos);
+ // remove from parent's child list
+ FmFilterData* pData = *rPos;
+ pData->GetParent()->GetChildren().erase( rPos );
- // UI benachrichtigen
+ // notify the view, this will remove the actual SvLBoxEntry
FmFilterRemovedHint aRemoveHint( pData );
Broadcast( aRemoveHint );
@@ -923,46 +895,58 @@ void FmFilterModel::Remove(const ::std::vector<FmFilterData*>::iterator& rPos, F
//------------------------------------------------------------------------
sal_Bool FmFilterModel::ValidateText(FmFilterItem* pItem, UniString& rText, UniString& rErrorMsg) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::ValidateText" );
- // check the input
- Reference< XPropertySet > xField(m_pAdapter->getField(pItem->GetTextComponent()));
-
- OStaticDataAccessTools aStaticTools;
- Reference< XConnection > xConnection(aStaticTools.getRowSetConnection(Reference< XRowSet > (m_xController->getModel(), UNO_QUERY)));
- Reference< ::com::sun::star::util::XNumberFormatsSupplier > xFormatSupplier = aStaticTools.getNumberFormats(xConnection, sal_True);
-
- Reference< ::com::sun::star::util::XNumberFormatter > xFormatter(m_xORB->createInstance(FM_NUMBER_FORMATTER), UNO_QUERY);
- xFormatter->attachNumberFormatsSupplier(xFormatSupplier);
-
- ::rtl::OUString aErr, aTxt(rText);
- ::rtl::Reference< ISQLParseNode > xParseNode = predicateTree(aErr, aTxt, xFormatter, xField);
- rErrorMsg = aErr;
- rText = aTxt;
- if (xParseNode.is())
+ FmFormItem* pFormItem = PTR_CAST( FmFormItem, pItem->GetParent()->GetParent() );
+ try
{
- ::rtl::OUString aPreparedText;
- ::com::sun::star::lang::Locale aAppLocale = Application::GetSettings().GetUILocale();
- xParseNode->parseNodeToPredicateStr(
- aPreparedText, xConnection, xFormatter, xField, aAppLocale, '.', getParseContext() );
- rText = aPreparedText;
- return sal_True;
+ Reference< XFormController > xFormController( pFormItem->GetController() );
+ // obtain the connection of the form belonging to the controller
+ OStaticDataAccessTools aStaticTools;
+ Reference< XRowSet > xRowSet( xFormController->getModel(), UNO_QUERY_THROW );
+ Reference< XConnection > xConnection( aStaticTools.getRowSetConnection( xRowSet ) );
+
+ // obtain a number formatter for this connection
+ // TODO: shouldn't this be cached?
+ Reference< XNumberFormatsSupplier > xFormatSupplier = aStaticTools.getNumberFormats( xConnection, sal_True );
+ Reference< XNumberFormatter > xFormatter( m_xORB->createInstance( FM_NUMBER_FORMATTER ), UNO_QUERY );
+ xFormatter->attachNumberFormatsSupplier( xFormatSupplier );
+
+ // get the field (database column) which the item is responsible for
+ Reference< XFilterController > xFilterController( xFormController, UNO_QUERY_THROW );
+ Reference< XPropertySet > xField( lcl_getBoundField_nothrow( xFilterController->getFilterComponent( pItem->GetComponentIndex() ) ), UNO_SET_THROW );
+
+ // parse the given text as filter predicate
+ ::rtl::OUString aErr, aTxt( rText );
+ ::rtl::Reference< ISQLParseNode > xParseNode = predicateTree( aErr, aTxt, xFormatter, xField );
+ rErrorMsg = aErr;
+ rText = aTxt;
+ if ( xParseNode.is() )
+ {
+ ::rtl::OUString aPreparedText;
+ Locale aAppLocale = Application::GetSettings().GetUILocale();
+ xParseNode->parseNodeToPredicateStr(
+ aPreparedText, xConnection, xFormatter, xField, aAppLocale, '.', getParseContext() );
+ rText = aPreparedText;
+ return sal_True;
+ }
}
- else
- return sal_False;
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+
+ return sal_False;
}
//------------------------------------------------------------------------
void FmFilterModel::Append(FmFilterItems* pItems, FmFilterItem* pFilterItem)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::Append" );
- Insert(pItems->GetChilds().end(), pFilterItem);
+ Insert(pItems->GetChildren().end(), pFilterItem);
}
//------------------------------------------------------------------------
void FmFilterModel::SetTextForItem(FmFilterItem* pItem, const ::rtl::OUString& rText)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::SetTextForItem" );
- ::std::vector<FmFilterData*>& rItems = pItem->GetParent()->GetParent()->GetChilds();
+ ::std::vector<FmFilterData*>& rItems = pItem->GetParent()->GetParent()->GetChildren();
::std::vector<FmFilterData*>::iterator i = ::std::find(rItems.begin(), rItems.end(), pItem->GetParent());
sal_Int32 nParentPos = i - rItems.begin();
@@ -982,7 +966,6 @@ void FmFilterModel::SetTextForItem(FmFilterItem* pItem, const ::rtl::OUString& r
//------------------------------------------------------------------------
void FmFilterModel::SetCurrentItems(FmFilterItems* pCurrent)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::SetCurrentItems" );
if (m_pCurrentItems == pCurrent)
return;
@@ -990,21 +973,26 @@ void FmFilterModel::SetCurrentItems(FmFilterItems* pCurrent)
if (pCurrent)
{
FmFormItem* pFormItem = (FmFormItem*)pCurrent->GetParent();
- ::std::vector<FmFilterData*>& rItems = pFormItem->GetChilds();
+ ::std::vector<FmFilterData*>& rItems = pFormItem->GetChildren();
::std::vector<FmFilterData*>::const_iterator i = ::std::find(rItems.begin(), rItems.end(), pCurrent);
if (i != rItems.end())
{
// determine the filter position
sal_Int32 nPos = i - rItems.begin();
- FmXFormController* pController = FmXFormController::getImplementation( pFormItem->GetController().get() );
- DBG_ASSERT( pController, "FmFilterAdapter::SetCurrentItems: no controller!" );
- pController->setCurrentFilterPosition(nPos);
- pFormItem->SetCurrentPosition(nPos);
+ try
+ {
+ Reference< XFilterController > xFilterController( pFormItem->GetFilterController(), UNO_SET_THROW );
+ xFilterController->setActiveTerm( nPos );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
- if ((::com::sun::star::form::XFormController*)m_xController.get() != (::com::sun::star::form::XFormController*)pFormItem->GetController().get())
+ if ( m_xController != pFormItem->GetController() )
// calls SetCurrentItems again
- SetCurrentController(pFormItem->GetController());
+ SetCurrentController( pFormItem->GetController() );
else
m_pCurrentItems = pCurrent;
}
@@ -1021,33 +1009,39 @@ void FmFilterModel::SetCurrentItems(FmFilterItems* pCurrent)
}
//------------------------------------------------------------------------
-void FmFilterModel::CheckIntegrity(FmParentData* pItem)
+void FmFilterModel::EnsureEmptyFilterRows( FmParentData& _rItem )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterModel::CheckIntegrity" );
// checks whether for each form there's one free level for input
+ ::std::vector< FmFilterData* >& rChildren = _rItem.GetChildren();
+ sal_Bool bAppendLevel = _rItem.ISA( FmFormItem );
- ::std::vector<FmFilterData*>& rItems = pItem->GetChilds();
- sal_Bool bAppendLevel = sal_False;
-
- for (::std::vector<FmFilterData*>::iterator i = rItems.begin();
- i != rItems.end(); i++)
+ for ( ::std::vector<FmFilterData*>::iterator i = rChildren.begin();
+ i != rChildren.end();
+ ++i
+ )
{
FmFilterItems* pItems = PTR_CAST(FmFilterItems, *i);
- if (pItems)
+ if ( pItems && pItems->GetChildren().empty() )
{
- bAppendLevel = !pItems->GetChilds().empty();
- continue;
+ bAppendLevel = sal_False;
+ break;
}
FmFormItem* pFormItem = PTR_CAST(FmFormItem, *i);
if (pFormItem)
{
- CheckIntegrity(pFormItem);
+ EnsureEmptyFilterRows( *pFormItem );
continue;
}
}
- if (bAppendLevel)
- AppendFilterItems((FmFormItem*)pItem);
+
+ if ( bAppendLevel )
+ {
+ FmFormItem* pFormItem = PTR_CAST( FmFormItem, &_rItem );
+ OSL_ENSURE( pFormItem, "FmFilterModel::EnsureEmptyFilterRows: no FmFormItem, but a FmFilterItems child?" );
+ if ( pFormItem )
+ AppendFilterItems( *pFormItem );
+ }
}
//========================================================================
@@ -1069,25 +1063,31 @@ void FmFilterItemsString::Paint(const Point& rPos, SvLBox& rDev, sal_uInt16 /*nF
{
FmFilterItems* pRow = (FmFilterItems*)pEntry->GetUserData();
FmFormItem* pForm = (FmFormItem*)pRow->GetParent();
+
// current filter is significant painted
- if (pForm->GetChilds()[pForm->GetCurrentPosition()] == pRow)
+ const bool bIsCurrentFilter = pForm->GetChildren()[ pForm->GetFilterController()->getActiveTerm() ] == pRow;
+ if ( bIsCurrentFilter )
{
- Color aLineColor(rDev.GetLineColor());
- Rectangle aRect(rPos, GetSize(&rDev, pEntry ));
- Point aFirst(rPos.X(), aRect.Bottom() - 6);
- Point aSecond(aFirst.X() + 2, aFirst.Y() + 3);
+ rDev.Push( PUSH_LINECOLOR );
+
+ rDev.SetLineColor( rDev.GetTextColor() );
- rDev.SetLineColor(rDev.GetTextColor());
- rDev.DrawLine(aFirst, aSecond);
+ Rectangle aRect( rPos, GetSize( &rDev, pEntry ) );
+ Point aFirst( rPos.X(), aRect.Bottom() - 6 );
+ Point aSecond(aFirst .X() + 2, aFirst.Y() + 3 );
+
+ rDev.DrawLine( aFirst, aSecond );
aFirst = aSecond;
aFirst.X() += 1;
aSecond.X() += 6;
aSecond.Y() -= 5;
- rDev.DrawLine(aFirst, aSecond);
- rDev.SetLineColor( aLineColor );
+ rDev.DrawLine( aFirst, aSecond );
+
+ rDev.Pop();
}
+
rDev.DrawText( Point(rPos.X() + nxDBmp, rPos.Y()), GetText() );
}
@@ -1168,7 +1168,6 @@ FmFilterNavigator::FmFilterNavigator( Window* pParent )
,m_aTimerCounter( 0 )
,m_aDropActionType( DA_SCROLLUP )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::FmFilterNavigator" );
SetHelpId( HID_FILTER_NAVIGATOR );
{
@@ -1211,14 +1210,12 @@ FmFilterNavigator::~FmFilterNavigator()
//------------------------------------------------------------------------
void FmFilterNavigator::Clear()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::Clear" );
m_pModel->Clear();
}
//------------------------------------------------------------------------
-void FmFilterNavigator::UpdateContent(const Reference< ::com::sun::star::container::XIndexAccess > & xControllers, const Reference< ::com::sun::star::form::XFormController > & xCurrent)
+void FmFilterNavigator::UpdateContent(const Reference< XIndexAccess > & xControllers, const Reference< XFormController > & xCurrent)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::UpdateContent" );
if (xCurrent == m_pModel->GetCurrentController())
return;
@@ -1246,7 +1243,6 @@ void FmFilterNavigator::UpdateContent(const Reference< ::com::sun::star::contain
//------------------------------------------------------------------------
sal_Bool FmFilterNavigator::EditingEntry( SvLBoxEntry* pEntry, Selection& rSelection )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::EditingEntry" );
m_pEditingCurrently = pEntry;
if (!SvTreeListBox::EditingEntry( pEntry, rSelection ))
return sal_False;
@@ -1257,7 +1253,6 @@ sal_Bool FmFilterNavigator::EditingEntry( SvLBoxEntry* pEntry, Selection& rSelec
//------------------------------------------------------------------------
sal_Bool FmFilterNavigator::EditedEntry( SvLBoxEntry* pEntry, const XubString& rNewText )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::EditedEntry" );
DBG_ASSERT(pEntry == m_pEditingCurrently, "FmFilterNavigator::EditedEntry: suspicious entry!");
m_pEditingCurrently = NULL;
@@ -1293,7 +1288,6 @@ sal_Bool FmFilterNavigator::EditedEntry( SvLBoxEntry* pEntry, const XubString& r
else
{
// display the error and return sal_False
-
SQLContext aError;
aError.Message = String(SVX_RES(RID_STR_SYNTAXERROR));
aError.Details = aErrorMsg;
@@ -1350,7 +1344,6 @@ IMPL_LINK( FmFilterNavigator, OnDropActionTimer, void*, EMPTYARG )
//------------------------------------------------------------------------
sal_Int8 FmFilterNavigator::AcceptDrop( const AcceptDropEvent& rEvt )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::AcceptDrop" );
Point aDropPos = rEvt.maPosPixel;
// kuemmern wir uns erst mal um moeglich DropActions (Scrollen und Aufklappen)
@@ -1378,7 +1371,7 @@ sal_Int8 FmFilterNavigator::AcceptDrop( const AcceptDropEvent& rEvt )
bNeedTrigger = sal_True;
}
else
- { // auf einem Entry mit Childs, der nicht aufgeklappt ist ?
+ { // is it an entry whith children, and not yet expanded?
SvLBoxEntry* pDropppedOn = GetEntry(aDropPos);
if (pDropppedOn && (GetChildCount(pDropppedOn) > 0) && !IsExpanded(pDropppedOn))
{
@@ -1457,7 +1450,6 @@ namespace
//------------------------------------------------------------------------
sal_Int8 FmFilterNavigator::ExecuteDrop( const ExecuteDropEvent& rEvt )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::ExecuteDrop" );
// ware schlecht, wenn nach dem Droppen noch gescrollt wird ...
if (m_aDropActionTimer.IsActive())
m_aDropActionTimer.Stop();
@@ -1491,7 +1483,6 @@ void FmFilterNavigator::InitEntry(SvLBoxEntry* pEntry,
const Image& rImg2,
SvLBoxButtonKind eButtonKind)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::InitEntry" );
SvTreeListBox::InitEntry( pEntry, rStr, rImg1, rImg2, eButtonKind );
SvLBoxString* pString = NULL;
@@ -1507,7 +1498,6 @@ void FmFilterNavigator::InitEntry(SvLBoxEntry* pEntry,
//------------------------------------------------------------------------
sal_Bool FmFilterNavigator::Select( SvLBoxEntry* pEntry, sal_Bool bSelect )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::Select" );
if (bSelect == IsSelected(pEntry)) // das passiert manchmal, ich glaube, die Basisklasse geht zu sehr auf Nummer sicher ;)
return sal_True;
@@ -1543,7 +1533,6 @@ sal_Bool FmFilterNavigator::Select( SvLBoxEntry* pEntry, sal_Bool bSelect )
//------------------------------------------------------------------------
void FmFilterNavigator::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::Notify" );
if (rHint.ISA(FmFilterInsertedHint))
{
FmFilterInsertedHint* pHint = (FmFilterInsertedHint*)&rHint;
@@ -1577,7 +1566,6 @@ void FmFilterNavigator::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
//------------------------------------------------------------------------
SvLBoxEntry* FmFilterNavigator::FindEntry(const FmFilterData* pItem) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::FindEntry" );
SvLBoxEntry* pEntry = NULL;
if (pItem)
{
@@ -1594,23 +1582,23 @@ SvLBoxEntry* FmFilterNavigator::FindEntry(const FmFilterData* pItem) const
//------------------------------------------------------------------------
void FmFilterNavigator::Insert(FmFilterData* pItem, sal_Int32 nPos)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::Insert" );
const FmParentData* pParent = pItem->GetParent() ? pItem->GetParent() : GetFilterModel();
// insert the item
- SvLBoxEntry* pParentEntry = FindEntry(pParent);
+ SvLBoxEntry* pParentEntry = FindEntry( pParent );
SvLBoxEntry* pNewEntry = InsertEntry(pItem->GetText(), pItem->GetImage(), pItem->GetImage(), pParentEntry, sal_False, nPos, pItem );
if ( pNewEntry )
{
SetExpandedEntryBmp( pNewEntry, pItem->GetImage( BMP_COLOR_HIGHCONTRAST ), BMP_COLOR_HIGHCONTRAST );
SetCollapsedEntryBmp( pNewEntry, pItem->GetImage( BMP_COLOR_HIGHCONTRAST ), BMP_COLOR_HIGHCONTRAST );
}
+ if ( pParentEntry )
+ Expand( pParentEntry );
}
//------------------------------------------------------------------------
void FmFilterNavigator::Remove(FmFilterData* pItem)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::Remove" );
// der Entry zu den Daten
SvLBoxEntry* pEntry = FindEntry(pItem);
@@ -1624,7 +1612,6 @@ void FmFilterNavigator::Remove(FmFilterData* pItem)
// -----------------------------------------------------------------------------
FmFormItem* FmFilterNavigator::getSelectedFilterItems(::std::vector<FmFilterItem*>& _rItemList)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::getSelectedFilterItems" );
// be sure that the data is only used within only one form!
FmFormItem* pFirstItem = NULL;
@@ -1659,35 +1646,37 @@ FmFormItem* FmFilterNavigator::getSelectedFilterItems(::std::vector<FmFilterItem
// -----------------------------------------------------------------------------
void FmFilterNavigator::insertFilterItem(const ::std::vector<FmFilterItem*>& _rFilterList,FmFilterItems* _pTargetItems,sal_Bool _bCopy)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::insertFilterItem" );
::std::vector<FmFilterItem*>::const_iterator aEnd = _rFilterList.end();
- for (::std::vector<FmFilterItem*>::const_iterator i = _rFilterList.begin(); i != aEnd; ++i)
+ for ( ::std::vector< FmFilterItem* >::const_iterator i = _rFilterList.begin();
+ i != aEnd;
+ ++i
+ )
{
- if ((*i)->GetParent() == _pTargetItems)
+ FmFilterItem* pLookupItem( *i );
+ if ( pLookupItem->GetParent() == _pTargetItems )
continue;
- else
+
+ FmFilterItem* pFilterItem = _pTargetItems->Find( pLookupItem->GetComponentIndex() );
+ String aText = pLookupItem->GetText();
+ if ( !pFilterItem )
{
- FmFilterItem* pFilterItem = _pTargetItems->Find((*i)->GetTextComponent());
- String aText = (*i)->GetText();
- if ( !pFilterItem )
- {
- pFilterItem = new FmFilterItem(m_pModel->getORB(),_pTargetItems, (*i)->GetFieldName(), aText, (*i)->GetTextComponent());
- m_pModel->Append(_pTargetItems, pFilterItem);
- }
+ pFilterItem = new FmFilterItem( m_pModel->getORB(), _pTargetItems, pLookupItem->GetFieldName(), aText, pLookupItem->GetComponentIndex() );
+ m_pModel->Append( _pTargetItems, pFilterItem );
+ }
- if ( !_bCopy )
- m_pModel->Remove(*i);
+ if ( !_bCopy )
+ m_pModel->Remove( pLookupItem );
- // now set the text for the new dragged item
- m_pModel->SetTextForItem(pFilterItem, aText);
- }
+ // now set the text for the new dragged item
+ m_pModel->SetTextForItem( pFilterItem, aText );
}
- m_pModel->CheckIntegrity((FmFormItem*)_pTargetItems->GetParent());
+
+ m_pModel->EnsureEmptyFilterRows( *_pTargetItems->GetParent() );
}
+
//------------------------------------------------------------------------------
void FmFilterNavigator::StartDrag( sal_Int8 /*_nAction*/, const Point& /*_rPosPixel*/ )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::StartDrag" );
EndSelection();
// be sure that the data is only used within a only one form!
@@ -1705,7 +1694,6 @@ void FmFilterNavigator::StartDrag( sal_Int8 /*_nAction*/, const Point& /*_rPosPi
//------------------------------------------------------------------------------
void FmFilterNavigator::Command( const CommandEvent& rEvt )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::Command" );
sal_Bool bHandled = sal_False;
switch (rEvt.GetCommand())
{
@@ -1750,8 +1738,8 @@ void FmFilterNavigator::Command( const CommandEvent& rEvt )
{
// don't delete the only empty row of a form
FmFilterItems* pFilterItems = PTR_CAST(FmFilterItems, aSelectList[0]);
- if (pFilterItems && pFilterItems->GetChilds().empty()
- && pFilterItems->GetParent()->GetChilds().size() == 1)
+ if (pFilterItems && pFilterItems->GetChildren().empty()
+ && pFilterItems->GetParent()->GetChildren().size() == 1)
aSelectList.clear();
}
@@ -1808,7 +1796,6 @@ void FmFilterNavigator::Command( const CommandEvent& rEvt )
// -----------------------------------------------------------------------------
SvLBoxEntry* FmFilterNavigator::getNextEntry(SvLBoxEntry* _pStartWith)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::getNextEntry" );
SvLBoxEntry* pEntry = _pStartWith ? _pStartWith : LastSelected();
pEntry = Next(pEntry);
// we need the next filter entry
@@ -1819,7 +1806,6 @@ SvLBoxEntry* FmFilterNavigator::getNextEntry(SvLBoxEntry* _pStartWith)
// -----------------------------------------------------------------------------
SvLBoxEntry* FmFilterNavigator::getPrevEntry(SvLBoxEntry* _pStartWith)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::getPrevEntry" );
SvLBoxEntry* pEntry = _pStartWith ? _pStartWith : FirstSelected();
pEntry = Prev(pEntry);
// check if the previous entry is a filter, if so get the next prev
@@ -1835,81 +1821,91 @@ SvLBoxEntry* FmFilterNavigator::getPrevEntry(SvLBoxEntry* _pStartWith)
//------------------------------------------------------------------------
void FmFilterNavigator::KeyInput(const KeyEvent& rKEvt)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::KeyInput" );
const KeyCode& rKeyCode = rKEvt.GetKeyCode();
- if ( rKeyCode.IsMod1()
- && rKeyCode.IsMod2()
- && !rKeyCode.IsShift()
- && ( rKeyCode.GetCode() == KEY_UP || rKeyCode.GetCode() == KEY_DOWN )
- )
+
+ switch ( rKeyCode.GetCode() )
+ {
+ case KEY_UP:
+ case KEY_DOWN:
{
+ if ( !rKeyCode.IsMod1() || !rKeyCode.IsMod2() || rKeyCode.IsShift() )
+ break;
+
::std::vector<FmFilterItem*> aItemList;
- if ( getSelectedFilterItems(aItemList) )
- {
- ::std::mem_fun1_t<SvLBoxEntry*,FmFilterNavigator,SvLBoxEntry*> aGetEntry = ::std::mem_fun(&FmFilterNavigator::getNextEntry);
- if ( rKeyCode.GetCode() == KEY_UP )
- aGetEntry = ::std::mem_fun(&FmFilterNavigator::getPrevEntry);
+ if ( !getSelectedFilterItems( aItemList ) )
+ break;
- SvLBoxEntry* pTarget = aGetEntry(this,NULL);
+ ::std::mem_fun1_t<SvLBoxEntry*,FmFilterNavigator,SvLBoxEntry*> getter = ::std::mem_fun(&FmFilterNavigator::getNextEntry);
+ if ( rKeyCode.GetCode() == KEY_UP )
+ getter = ::std::mem_fun(&FmFilterNavigator::getPrevEntry);
- if ( pTarget )
+ SvLBoxEntry* pTarget = getter( this, NULL );
+ if ( !pTarget )
+ break;
+
+ FmFilterItems* pTargetItems = getTargetItems( pTarget );
+ if ( !pTargetItems )
+ break;
+
+ ::std::vector<FmFilterItem*>::const_iterator aEnd = aItemList.end();
+ sal_Bool bNextTargetItem = sal_True;
+ while ( bNextTargetItem )
+ {
+ ::std::vector<FmFilterItem*>::const_iterator i = aItemList.begin();
+ for (; i != aEnd; ++i)
{
- FmFilterItems* pTargetItems = getTargetItems(pTarget);
- if ( pTargetItems )
+ if ( (*i)->GetParent() == pTargetItems )
{
- ::std::vector<FmFilterItem*>::const_iterator aEnd = aItemList.end();
- sal_Bool bNextTargetItem = sal_True;
- while ( bNextTargetItem )
- {
- ::std::vector<FmFilterItem*>::const_iterator i = aItemList.begin();
- for (; i != aEnd; ++i)
- {
- if ( (*i)->GetParent() == pTargetItems )
- {
- pTarget = aGetEntry(this,pTarget);
- if ( !pTarget )
- return;
- pTargetItems = getTargetItems(pTarget);
- break;
- }
- else
- {
- FmFilterItem* pFilterItem = pTargetItems->Find((*i)->GetTextComponent());
- // we found the text component so jump above
- if ( pFilterItem )
- {
- pTarget = aGetEntry(this,pTarget);
- if ( !pTarget )
- return;
- pTargetItems = getTargetItems(pTarget);
- break;
- }
- }
- }
- bNextTargetItem = i != aEnd && pTargetItems;
- }
- if ( pTargetItems )
- {
- insertFilterItem(aItemList,pTargetItems);
+ pTarget = getter(this,pTarget);
+ if ( !pTarget )
return;
+ pTargetItems = getTargetItems( pTarget );
+ break;
+ }
+ else
+ {
+ FmFilterItem* pFilterItem = pTargetItems->Find( (*i)->GetComponentIndex() );
+ // we found the text component so jump above
+ if ( pFilterItem )
+ {
+ pTarget = getter( this, pTarget );
+ if ( !pTarget )
+ return;
+
+ pTargetItems = getTargetItems( pTarget );
+ break;
}
}
}
+ bNextTargetItem = i != aEnd && pTargetItems;
+ }
+
+ if ( pTargetItems )
+ {
+ insertFilterItem( aItemList, pTargetItems );
+ return;
}
}
- else if (rKeyCode.GetCode() == KEY_DELETE && !rKeyCode.GetModifier())
+ break;
+
+ case KEY_DELETE:
{
- if (!IsSelected(First()) || GetEntryCount() > 1)
+ if ( rKeyCode.GetModifier() )
+ break;
+
+ if ( !IsSelected( First() ) || GetEntryCount() > 1 )
DeleteSelection();
return;
}
+ break;
+ }
+
SvTreeListBox::KeyInput(rKEvt);
}
//------------------------------------------------------------------------------
void FmFilterNavigator::DeleteSelection()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigator::DeleteSelection" );
// to avoid the deletion of an entry twice (e.g. deletion of a parent and afterward
// the deletion of it's child, i have to shrink the selecton list
::std::vector<SvLBoxEntry*> aEntryList;
@@ -1935,9 +1931,6 @@ void FmFilterNavigator::DeleteSelection()
{
m_pModel->Remove((FmFilterData*)(*i)->GetUserData());
}
-
- // now check if we need to insert new items
- m_pModel->CheckIntegrity(m_pModel);
}
// -----------------------------------------------------------------------------
@@ -1949,7 +1942,6 @@ FmFilterNavigatorWin::FmFilterNavigatorWin( SfxBindings* _pBindings, SfxChildWin
:SfxDockingWindow( _pBindings, _pMgr, _pParent, WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_ROLLABLE|WB_3DLOOK|WB_DOCKABLE) )
,SfxControllerItem( SID_FM_FILTER_NAVIGATOR_CONTROL, *_pBindings )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::FmFilterNavigatorWin" );
SetHelpId( HID_FILTER_NAVIGATOR_WIN );
m_pNavigator = new FmFilterNavigator( this );
@@ -1967,22 +1959,21 @@ FmFilterNavigatorWin::~FmFilterNavigatorWin()
//-----------------------------------------------------------------------
void FmFilterNavigatorWin::UpdateContent(FmFormShell* pFormShell)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::UpdateContent" );
if (!pFormShell)
m_pNavigator->UpdateContent( NULL, NULL );
else
{
- Reference< ::com::sun::star::form::XFormController > xController(pFormShell->GetImpl()->getActiveInternalController());
- Reference< ::com::sun::star::container::XIndexAccess > xContainer;
+ Reference< XFormController > xController(pFormShell->GetImpl()->getActiveInternalController());
+ Reference< XIndexAccess > xContainer;
if (xController.is())
{
- Reference< ::com::sun::star::container::XChild > xChild(xController, UNO_QUERY);
+ Reference< XChild > xChild(xController, UNO_QUERY);
for (Reference< XInterface > xParent(xChild->getParent());
xParent.is();
xParent = xChild.is() ? xChild->getParent() : Reference< XInterface > ())
{
- xContainer = Reference< ::com::sun::star::container::XIndexAccess > (xParent, UNO_QUERY);
- xChild = Reference< ::com::sun::star::container::XChild > (xParent, UNO_QUERY);
+ xContainer = Reference< XIndexAccess > (xParent, UNO_QUERY);
+ xChild = Reference< XChild > (xParent, UNO_QUERY);
}
}
m_pNavigator->UpdateContent(xContainer, xController);
@@ -1992,7 +1983,6 @@ void FmFilterNavigatorWin::UpdateContent(FmFormShell* pFormShell)
//-----------------------------------------------------------------------
void FmFilterNavigatorWin::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::StateChanged" );
if( !pState || SID_FM_FILTER_NAVIGATOR_CONTROL != nSID )
return;
@@ -2008,7 +1998,6 @@ void FmFilterNavigatorWin::StateChanged( sal_uInt16 nSID, SfxItemState eState, c
//-----------------------------------------------------------------------
sal_Bool FmFilterNavigatorWin::Close()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::Close" );
if ( m_pNavigator && m_pNavigator->IsEditingActive() )
m_pNavigator->EndEditing();
@@ -2023,7 +2012,6 @@ sal_Bool FmFilterNavigatorWin::Close()
//-----------------------------------------------------------------------
void FmFilterNavigatorWin::FillInfo( SfxChildWinInfo& rInfo ) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::FillInfo" );
SfxDockingWindow::FillInfo( rInfo );
rInfo.bVisible = sal_False;
}
@@ -2031,7 +2019,6 @@ void FmFilterNavigatorWin::FillInfo( SfxChildWinInfo& rInfo ) const
//-----------------------------------------------------------------------
Size FmFilterNavigatorWin::CalcDockingSize( SfxChildAlignment eAlign )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::CalcDockingSize" );
if ( ( eAlign == SFX_ALIGN_TOP ) || ( eAlign == SFX_ALIGN_BOTTOM ) )
return Size();
@@ -2041,7 +2028,6 @@ Size FmFilterNavigatorWin::CalcDockingSize( SfxChildAlignment eAlign )
//-----------------------------------------------------------------------
SfxChildAlignment FmFilterNavigatorWin::CheckAlignment( SfxChildAlignment eActAlign, SfxChildAlignment eAlign )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::CheckAlignment" );
switch (eAlign)
{
case SFX_ALIGN_LEFT:
@@ -2058,7 +2044,6 @@ SfxChildAlignment FmFilterNavigatorWin::CheckAlignment( SfxChildAlignment eActAl
//------------------------------------------------------------------------
void FmFilterNavigatorWin::Resize()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::Resize" );
SfxDockingWindow::Resize();
Size aLogOutputSize = PixelToLogic( GetOutputSizePixel(), MAP_APPFONT );
@@ -2074,7 +2059,6 @@ void FmFilterNavigatorWin::Resize()
// -----------------------------------------------------------------------------
void FmFilterNavigatorWin::GetFocus()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmFilterNavigatorWin::GetFocus" );
// oj #97405#
if ( m_pNavigator )
m_pNavigator->GrabFocus();
diff --git a/svx/source/form/fmcontrolbordermanager.cxx b/svx/source/form/fmcontrolbordermanager.cxx
index 17bd10346302..5c6397662844 100644
--- a/svx/source/form/fmcontrolbordermanager.cxx
+++ b/svx/source/form/fmcontrolbordermanager.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmcontrolbordermanager.cxx,v $
- * $Revision: 1.8 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/svx/source/form/fmcontrollayout.cxx b/svx/source/form/fmcontrollayout.cxx
index 92e987db796c..bc0e15cd9647 100644
--- a/svx/source/form/fmcontrollayout.cxx
+++ b/svx/source/form/fmcontrollayout.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmcontrollayout.cxx,v $
- * $Revision: 1.8 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/svx/source/form/fmobj.cxx b/svx/source/form/fmobj.cxx
index f2773b7350fa..e6ec36515e87 100644
--- a/svx/source/form/fmobj.cxx
+++ b/svx/source/form/fmobj.cxx
@@ -30,35 +30,35 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#include <tools/resmgr.hxx>
-#include <tools/diagnose_ex.h>
#include "fmobj.hxx"
#include "fmprop.hrc"
#include "fmvwimp.hxx"
-#include <svx/editeng.hxx>
-#include <svx/svdovirt.hxx>
+#include "fmtools.hxx"
+#include "fmpgeimp.hxx"
+#include "fmresids.hrc"
+#include "svx/fmview.hxx"
+#include "svx/fmglob.hxx"
+#include "svx/fmpage.hxx"
+#include "svx/editeng.hxx"
+#include "svx/svdovirt.hxx"
+#include "svx/fmmodel.hxx"
+#include "svx/dialmgr.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/awt/XDevice.hpp>
#include <com/sun/star/script/XEventAttacherManager.hpp>
#include <com/sun/star/io/XPersistObject.hpp>
#include <com/sun/star/awt/XControlContainer.hpp>
+#include <com/sun/star/util/XCloneable.hpp>
/** === end UNO includes === **/
-#include <svx/fmmodel.hxx>
-#include "fmtools.hxx"
-#include <tools/shl.hxx>
-#include <svx/dialmgr.hxx>
-#include "fmresids.hrc"
-#include <svx/fmview.hxx>
-#include <svx/fmglob.hxx>
-
-#include "fmpgeimp.hxx"
-#include <svx/fmpage.hxx>
+#include <tools/shl.hxx>
#include <comphelper/property.hxx>
#include <comphelper/processfactory.hxx>
#include <toolkit/awt/vclxdevice.hxx>
#include <vcl/svapp.hxx>
+#include <tools/resmgr.hxx>
+#include <tools/diagnose_ex.h>
using namespace ::com::sun::star::io;
using namespace ::com::sun::star::uno;
@@ -422,10 +422,48 @@ void FmFormObj::operator= (const SdrObject& rObj)
}
//------------------------------------------------------------------
+namespace
+{
+ String lcl_getFormComponentAccessPath(const Reference< XInterface >& _xElement, Reference< XInterface >& _rTopLevelElement)
+ {
+ Reference< ::com::sun::star::form::XFormComponent> xChild(_xElement, UNO_QUERY);
+ Reference< ::com::sun::star::container::XIndexAccess> xParent;
+ if (xChild.is())
+ xParent = Reference< ::com::sun::star::container::XIndexAccess>(xChild->getParent(), UNO_QUERY);
+
+ // while the current content is a form
+ String sReturn;
+ String sCurrentIndex;
+ while (xChild.is())
+ {
+ // get the content's relative pos within it's parent container
+ sal_Int32 nPos = getElementPos(xParent, xChild);
+
+ // prepend this current relaive pos
+ sCurrentIndex = String::CreateFromInt32(nPos);
+ if (sReturn.Len() != 0)
+ {
+ sCurrentIndex += '\\';
+ sCurrentIndex += sReturn;
+ }
+
+ sReturn = sCurrentIndex;
+
+ // travel up
+ if (::comphelper::query_interface((Reference< XInterface >)xParent,xChild))
+ xParent = Reference< ::com::sun::star::container::XIndexAccess>(xChild->getParent(), UNO_QUERY);
+ }
+
+ _rTopLevelElement = xParent;
+ return sReturn;
+ }
+}
+
+//------------------------------------------------------------------
Reference< XInterface > FmFormObj::ensureModelEnv(const Reference< XInterface > & _rSourceContainer, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > _rTopLevelDestContainer)
{
Reference< XInterface > xTopLevelSouce;
- String sAccessPath = getFormComponentAccessPath(_rSourceContainer, xTopLevelSouce);
+ String sAccessPath = lcl_getFormComponentAccessPath(_rSourceContainer, xTopLevelSouce);
if (!xTopLevelSouce.is())
// somthing went wrong, maybe _rSourceContainer isn't part of a valid forms hierarchy
return Reference< XInterface > ();
@@ -532,8 +570,8 @@ Reference< XInterface > FmFormObj::ensureModelEnv(const Reference< XInterface >
DBG_ASSERT(xSourcePersist.is(), "FmFormObj::ensureModelEnv : invalid form (no persist object) !");
// create and insert (into the destination) a clone of the form
- xCurrentDestForm = Reference< XPropertySet > (cloneUsingProperties(xSourcePersist), UNO_QUERY);
- DBG_ASSERT(xCurrentDestForm.is(), "FmFormObj::ensureModelEnv : invalid cloned form !");
+ Reference< XCloneable > xCloneable( xSourcePersist, UNO_QUERY_THROW );
+ xCurrentDestForm.set( xCloneable->createClone(), UNO_QUERY_THROW );
DBG_ASSERT(nCurrentDestIndex == xDestContainer->getCount(), "FmFormObj::ensureModelEnv : something went wrong with the numbers !");
xDestContainer->insertByIndex(nCurrentDestIndex, makeAny(xCurrentDestForm));
diff --git a/svx/source/form/fmobjfac.cxx b/svx/source/form/fmobjfac.cxx
index e2c9101b718c..0a8bfe1c7885 100644
--- a/svx/source/form/fmobjfac.cxx
+++ b/svx/source/form/fmobjfac.cxx
@@ -32,7 +32,6 @@
#include "precompiled_svx.hxx"
#include <comphelper/stl_types.hxx>
#include <svx/svdobj.hxx>
-#include "fmtools.hxx"
#include "fmservs.hxx"
#ifndef _FM_FMOBJFAC_HXX
diff --git a/svx/source/form/fmpage.cxx b/svx/source/form/fmpage.cxx
index 0ead41eb87bc..69c04ff862bf 100644
--- a/svx/source/form/fmpage.cxx
+++ b/svx/source/form/fmpage.cxx
@@ -78,7 +78,6 @@
#include "fmprop.hrc"
#endif
#include "fmundo.hxx"
-#include "fmtools.hxx"
using namespace ::svxform;
#endif
#include <comphelper/property.hxx>
diff --git a/svx/source/form/fmservs.cxx b/svx/source/form/fmservs.cxx
index b9f40b6ddda2..feef02baa555 100644
--- a/svx/source/form/fmservs.cxx
+++ b/svx/source/form/fmservs.cxx
@@ -49,7 +49,8 @@
DECL_SERVICE( FmXGridControl )
- DECL_SERVICE( FmXFormController )
+ DECL_SERVICE( FormController )
+ DECL_SERVICE( LegacyFormController );
// ------------------------------------------------------------------------
@@ -91,7 +92,8 @@ namespace svxform
// ------------------------------------------------------------------------
// FormController
- REGISTER_SERVICE(FmXFormController, FM_FORM_CONTROLLER);
+ REGISTER_SERVICE( FormController, FM_FORM_CONTROLLER );
+ REGISTER_SERVICE( LegacyFormController, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.FormController" ) ) );
// ------------------------------------------------------------------------
// FormController
@@ -102,9 +104,6 @@ namespace svxform
REGISTER_SERVICE(FmXGridControl, FM_CONTROL_GRID); // compatibility
REGISTER_SERVICE(FmXGridControl, FM_CONTROL_GRIDCONTROL);
REGISTER_SERVICE(FmXGridControl, FM_SUN_CONTROL_GRIDCONTROL);
-
-
};
-
} // namespace svxform
diff --git a/svx/source/form/fmshell.cxx b/svx/source/form/fmshell.cxx
index ccdfb2b1af39..4820cf44978b 100644
--- a/svx/source/form/fmshell.cxx
+++ b/svx/source/form/fmshell.cxx
@@ -32,7 +32,6 @@
#include "precompiled_svx.hxx"
#include "fmvwimp.hxx"
#include <svx/fmshell.hxx>
-#include "fmtools.hxx"
#include "fmservs.hxx"
#ifndef _SVX_FMPROP_HRC
#include "fmprop.hrc"
@@ -685,7 +684,15 @@ void FmFormShell::Execute(SfxRequest &rReq)
case SID_FM_FILTER_NAVIGATOR:
case SID_FM_SHOW_DATANAVIGATOR :
{
- GetViewShell()->GetViewFrame()->ChildWindowExecute(rReq);
+ SFX_REQUEST_ARG( rReq, pShowItem, SfxBoolItem, nSlot, sal_False );
+ if ( !pShowItem )
+ GetViewShell()->GetViewFrame()->ChildWindowExecute( rReq );
+ else
+ {
+ const sal_Bool bShow = pShowItem->GetValue();
+ GetViewShell()->GetViewFrame()->ShowChildWindow( nSlot, bShow );
+ }
+
rReq.Done();
} break;
case SID_FM_SHOW_FMEXPLORER:
@@ -827,7 +834,7 @@ void FmFormShell::Execute(SfxRequest &rReq)
bReopenNavigator = sal_True;
}
- Reference< XFormController > xController( GetImpl()->getActiveController() );
+ Reference< runtime::XFormController > xController( GetImpl()->getActiveController() );
if ( GetViewShell()->GetViewFrame()->HasChildWindow( SID_FM_FILTER_NAVIGATOR )
// closing the window was denied, for instance because of a invalid criterion
@@ -857,6 +864,11 @@ void FmFormShell::Execute(SfxRequest &rReq)
{
GetImpl()->startFiltering();
rReq.Done();
+
+ // initially open the filter navigator, the whole form based filter is pretty useless without it
+ SfxBoolItem aIdentifierItem( SID_FM_FILTER_NAVIGATOR, TRUE );
+ GetViewShell()->GetViewFrame()->GetDispatcher()->Execute( SID_FM_FILTER_NAVIGATOR, SFX_CALLMODE_ASYNCHRON,
+ &aIdentifierItem, NULL );
} break;
}
}
@@ -1400,7 +1412,7 @@ SdrUnoObj* FmFormShell::GetFormControl( const Reference< XControlModel >& _rxMod
}
//------------------------------------------------------------------------
-Reference< XFormController > FmFormShell::GetFormController( const Reference< XForm >& _rxForm, const SdrView& _rView, const OutputDevice& _rDevice ) const
+Reference< runtime::XFormController > FmFormShell::GetFormController( const Reference< XForm >& _rxForm, const SdrView& _rView, const OutputDevice& _rDevice ) const
{
const FmFormView* pFormView = dynamic_cast< const FmFormView* >( &_rView );
if ( !pFormView )
diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index 8c5ca61f6691..228f99ace265 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -30,89 +30,87 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#include "gridcols.hxx"
-#include <svx/obj3d.hxx>
-#include "fmvwimp.hxx"
-#include "fmshimp.hxx"
-#include "fmtextcontrolshell.hxx"
-#include <svx/svdpagv.hxx>
-#include <svx/fmpage.hxx>
-#include <svx/dialmgr.hxx>
-#ifndef _SVX_FMRESIDS_HRC
-#include "fmresids.hrc"
-#endif
+
#include "fmitems.hxx"
#include "fmobj.hxx"
-#include "formtoolbars.hxx"
-#include <svx/fmglob.hxx>
-#include "svditer.hxx"
-#include "fmservs.hxx"
#include "fmpgeimp.hxx"
-#include "fmtools.hxx"
-#ifndef _SVX_FMPROP_HRC
#include "fmprop.hrc"
-#endif
-#include <svx/fmshell.hxx>
-#ifndef _SVX_SVXIDS_HRC
-#include <svx/svxids.hrc>
-#endif
-#include <svx/fmmodel.hxx>
+#include "fmresids.hrc"
+#include "fmservs.hxx"
+#include "fmshimp.hxx"
+#include "fmtextcontrolshell.hxx"
#include "fmundo.hxx"
#include "fmurl.hxx"
-#include "formcontrolling.hxx"
-#include <svx/svxdlg.hxx>
-#include <svx/dialogs.hrc>
-#include <com/sun/star/frame/FrameSearchFlag.hpp>
-#include <com/sun/star/form/XLoadable.hpp>
-#include <com/sun/star/container/XNamed.hpp>
+#include "fmvwimp.hxx"
+#include "formtoolbars.hxx"
+#include "gridcols.hxx"
+#include "svditer.hxx"
+#include "svx/dialmgr.hxx"
+#include "svx/dialogs.hrc"
+#include "svx/fmglob.hxx"
+#include "svx/fmmodel.hxx"
+#include "svx/fmpage.hxx"
+#include "svx/fmshell.hxx"
+#include "svx/obj3d.hxx"
+#include "svx/sdrpagewindow.hxx"
+#include "svx/svdpagv.hxx"
+#include "svx/svxdlg.hxx"
+#include "svx/svxids.hrc"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/awt/XCheckBox.hpp>
+#include <com/sun/star/awt/XListBox.hpp>
+#include <com/sun/star/awt/XTextComponent.hpp>
+#include <com/sun/star/beans/NamedValue.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
#include <com/sun/star/container/XContainer.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
-#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/frame/FrameSearchFlag.hpp>
-#include <com/sun/star/awt/XTextComponent.hpp>
-#include <com/sun/star/awt/XListBox.hpp>
-#include <com/sun/star/awt/XCheckBox.hpp>
-#include <com/sun/star/form/XBoundComponent.hpp>
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/form/ListSourceType.hpp>
-#include <com/sun/star/view/XSelectionSupplier.hpp>
-#include <com/sun/star/script/XEventAttacherManager.hpp>
+#include <com/sun/star/form/XBoundComponent.hpp>
#include <com/sun/star/form/XBoundControl.hpp>
-#include <com/sun/star/form/XReset.hpp>
#include <com/sun/star/form/XGrid.hpp>
#include <com/sun/star/form/XGridPeer.hpp>
-#include <com/sun/star/util/XNumberFormatter.hpp>
-#include <com/sun/star/util/XModeSelector.hpp>
-#include <com/sun/star/util/XModifyBroadcaster.hpp>
-#include <com/sun/star/util/XCancellable.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/form/XLoadable.hpp>
+#include <com/sun/star/form/XReset.hpp>
#include <com/sun/star/form/binding/XBindableValue.hpp>
-#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/form/binding/XListEntrySink.hpp>
+#include <com/sun/star/frame/FrameSearchFlag.hpp>
+#include <com/sun/star/script/XEventAttacherManager.hpp>
#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+#include <com/sun/star/util/XCancellable.hpp>
+#include <com/sun/star/util/XModeSelector.hpp>
+#include <com/sun/star/util/XModifyBroadcaster.hpp>
+#include <com/sun/star/util/XNumberFormatter.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
+#include <com/sun/star/beans/XIntrospection.hpp>
+/** === end UNO includes === **/
+
+#include <comphelper/extract.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/property.hxx>
+#include <comphelper/stl_types.hxx>
+#include <connectivity/dbtools.hxx>
+#include <cppuhelper/servicefactory.hxx>
#include <osl/mutex.hxx>
-#include <sfx2/viewsh.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/frame.hxx>
-#include <vcl/waitobj.hxx>
-#include <tools/shl.hxx>
-#include <tools/diagnose_ex.h>
-#include <vcl/msgbox.hxx>
+#include <rtl/logfile.hxx>
#include <sfx2/dispatch.hxx>
-#include <sfx2/objsh.hxx>
#include <sfx2/docfile.hxx>
+#include <sfx2/frame.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <sfx2/viewsh.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
#include <tools/color.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/shl.hxx>
#include <tools/urlobj.hxx>
-#include <comphelper/property.hxx>
-#include <connectivity/dbtools.hxx>
-#include <comphelper/stl_types.hxx>
-#include <comphelper/processfactory.hxx>
-#include <cppuhelper/servicefactory.hxx>
-#include <comphelper/extract.hxx>
-#include <toolkit/helper/vclunohelper.hxx>
-#include <svx/sdrpagewindow.hxx>
-#include <rtl/logfile.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/waitobj.hxx>
+#include <vos/mutex.hxx>
#include <algorithm>
#include <functional>
@@ -281,6 +279,7 @@ using namespace ::com::sun::star::view;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::util;
using namespace ::com::sun::star::frame;
+using namespace ::com::sun::star::script;
using namespace ::svxform;
using namespace ::svx;
@@ -289,7 +288,7 @@ using namespace ::svx;
//==============================================================================
namespace
{
- //....................................................................
+ //..........................................................................
void collectInterfacesFromMarkList( const SdrMarkList& _rMarkList, InterfaceBag& /* [out] */ _rInterfaces )
{
_rInterfaces.clear();
@@ -327,6 +326,198 @@ namespace
}
}
+ //..........................................................................
+ sal_Int16 GridView2ModelPos(const Reference< XIndexAccess>& rColumns, sal_Int16 nViewPos)
+ {
+ try
+ {
+ if (rColumns.is())
+ {
+ // loop through all columns
+ sal_Int16 i;
+ Reference< XPropertySet> xCur;
+ for (i=0; i<rColumns->getCount(); ++i)
+ {
+ rColumns->getByIndex(i) >>= xCur;
+ if (!::comphelper::getBOOL(xCur->getPropertyValue(FM_PROP_HIDDEN)))
+ {
+ // for every visible col : if nViewPos is greater zero, decrement it, else we
+ // have found the model position
+ if (!nViewPos)
+ break;
+ else
+ --nViewPos;
+ }
+ }
+ if (i<rColumns->getCount())
+ return i;
+ }
+ }
+ catch(const Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return (sal_Int16)-1;
+ }
+
+ //..........................................................................
+ Sequence< ::rtl::OUString> getEventMethods(const Type& type)
+ {
+ typelib_InterfaceTypeDescription *pType=0;
+ type.getDescription( (typelib_TypeDescription**)&pType);
+
+ if(!pType)
+ return Sequence< ::rtl::OUString>();
+
+ Sequence< ::rtl::OUString> aNames(pType->nMembers);
+ ::rtl::OUString* pNames = aNames.getArray();
+ for(sal_Int32 i=0;i<pType->nMembers;i++,++pNames)
+ {
+ // the decription reference
+ typelib_TypeDescriptionReference* pMemberDescriptionReference = pType->ppMembers[i];
+ // the description for the reference
+ typelib_TypeDescription* pMemberDescription = NULL;
+ typelib_typedescriptionreference_getDescription(&pMemberDescription, pMemberDescriptionReference);
+ if (pMemberDescription)
+ {
+ typelib_InterfaceMemberTypeDescription* pRealMemberDescription =
+ reinterpret_cast<typelib_InterfaceMemberTypeDescription*>(pMemberDescription);
+ *pNames = pRealMemberDescription->pMemberName;
+ }
+ }
+ typelib_typedescription_release( (typelib_TypeDescription *)pType );
+ return aNames;
+ }
+
+ //..........................................................................
+ void TransferEventScripts(const Reference< XControlModel>& xModel, const Reference< XControl>& xControl,
+ const Sequence< ScriptEventDescriptor>& rTransferIfAvailable)
+ {
+ // first check if we have a XEventAttacherManager for the model
+ Reference< XChild> xModelChild(xModel, UNO_QUERY);
+ if (!xModelChild.is())
+ return; // nothing to do
+
+ Reference< XEventAttacherManager> xEventManager(xModelChild->getParent(), UNO_QUERY);
+ if (!xEventManager.is())
+ return; // nothing to do
+
+ if (!rTransferIfAvailable.getLength())
+ return; // nothing to do
+
+ // check for the index of the model within it's parent
+ Reference< XIndexAccess> xParentIndex(xModelChild->getParent(), UNO_QUERY);
+ if (!xParentIndex.is())
+ return; // nothing to do
+ sal_Int32 nIndex = getElementPos(xParentIndex, xModel);
+ if (nIndex<0 || nIndex>=xParentIndex->getCount())
+ return; // nothing to do
+
+ // then we need informations about the listeners supported by the control and the model
+ Sequence< Type> aModelListeners;
+ Sequence< Type> aControlListeners;
+
+ Reference< XIntrospection> xModelIntrospection(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.beans.Introspection")), UNO_QUERY);
+ Reference< XIntrospection> xControlIntrospection(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.beans.Introspection")), UNO_QUERY);
+
+ if (xModelIntrospection.is() && xModel.is())
+ {
+ Any aModel(makeAny(xModel));
+ aModelListeners = xModelIntrospection->inspect(aModel)->getSupportedListeners();
+ }
+
+ if (xControlIntrospection.is() && xControl.is())
+ {
+ Any aControl(makeAny(xControl));
+ aControlListeners = xControlIntrospection->inspect(aControl)->getSupportedListeners();
+ }
+
+ sal_Int32 nMaxNewLen = aModelListeners.getLength() + aControlListeners.getLength();
+ if (!nMaxNewLen)
+ return; // the model and the listener don't support any listeners (or we were unable to retrieve these infos)
+
+ Sequence< ScriptEventDescriptor> aTransferable(nMaxNewLen);
+ ScriptEventDescriptor* pTransferable = aTransferable.getArray();
+
+ const ScriptEventDescriptor* pCurrent = rTransferIfAvailable.getConstArray();
+ sal_Int32 i,j,k;
+ for (i=0; i<rTransferIfAvailable.getLength(); ++i, ++pCurrent)
+ {
+ // search the model/control idl classes for the event described by pCurrent
+ for ( Sequence< Type>* pCurrentArray = &aModelListeners;
+ pCurrentArray;
+ pCurrentArray = (pCurrentArray == &aModelListeners) ? &aControlListeners : NULL
+ )
+ {
+ const Type* pCurrentListeners = pCurrentArray->getConstArray();
+ for (j=0; j<pCurrentArray->getLength(); ++j, ++pCurrentListeners)
+ {
+ UniString aListener = (*pCurrentListeners).getTypeName();
+ xub_StrLen nTokens = aListener.GetTokenCount('.');
+ if (nTokens)
+ aListener = aListener.GetToken(nTokens - 1, '.');
+
+ if (aListener == pCurrent->ListenerType.getStr())
+ // the current ScriptEventDescriptor doesn't match the current listeners class
+ continue;
+
+ // now check the methods
+ Sequence< ::rtl::OUString> aMethodsNames = getEventMethods(*pCurrentListeners);
+ const ::rtl::OUString* pMethodsNames = aMethodsNames.getConstArray();
+ for (k=0; k<aMethodsNames.getLength(); ++k, ++pMethodsNames)
+ {
+ if ((*pMethodsNames).compareTo(pCurrent->EventMethod) != COMPARE_EQUAL)
+ // the current ScriptEventDescriptor doesn't match the current listeners current method
+ continue;
+
+ // we can transfer the script event : the model (control) supports it
+ *pTransferable = *pCurrent;
+ ++pTransferable;
+ break;
+ }
+ if (k<aMethodsNames.getLength())
+ break;
+ }
+ }
+ }
+
+ sal_Int32 nRealNewLen = pTransferable - aTransferable.getArray();
+ aTransferable.realloc(nRealNewLen);
+
+ xEventManager->registerScriptEvents(nIndex, aTransferable);
+ }
+
+ //------------------------------------------------------------------------------
+ ::rtl::OUString getServiceNameByControlType(sal_Int16 nType)
+ {
+ switch (nType)
+ {
+ case OBJ_FM_EDIT : return FM_COMPONENT_TEXTFIELD;
+ case OBJ_FM_BUTTON : return FM_COMPONENT_COMMANDBUTTON;
+ case OBJ_FM_FIXEDTEXT : return FM_COMPONENT_FIXEDTEXT;
+ case OBJ_FM_LISTBOX : return FM_COMPONENT_LISTBOX;
+ case OBJ_FM_CHECKBOX : return FM_COMPONENT_CHECKBOX;
+ case OBJ_FM_RADIOBUTTON : return FM_COMPONENT_RADIOBUTTON;
+ case OBJ_FM_GROUPBOX : return FM_COMPONENT_GROUPBOX;
+ case OBJ_FM_COMBOBOX : return FM_COMPONENT_COMBOBOX;
+ case OBJ_FM_GRID : return FM_COMPONENT_GRIDCONTROL;
+ case OBJ_FM_IMAGEBUTTON : return FM_COMPONENT_IMAGEBUTTON;
+ case OBJ_FM_FILECONTROL : return FM_COMPONENT_FILECONTROL;
+ case OBJ_FM_DATEFIELD : return FM_COMPONENT_DATEFIELD;
+ case OBJ_FM_TIMEFIELD : return FM_COMPONENT_TIMEFIELD;
+ case OBJ_FM_NUMERICFIELD : return FM_COMPONENT_NUMERICFIELD;
+ case OBJ_FM_CURRENCYFIELD : return FM_COMPONENT_CURRENCYFIELD;
+ case OBJ_FM_PATTERNFIELD : return FM_COMPONENT_PATTERNFIELD;
+ case OBJ_FM_HIDDEN : return FM_COMPONENT_HIDDENCONTROL;
+ case OBJ_FM_IMAGECONTROL : return FM_COMPONENT_IMAGECONTROL;
+ case OBJ_FM_FORMATTEDFIELD : return FM_COMPONENT_FORMATTEDFIELD;
+ case OBJ_FM_SCROLLBAR : return FM_SUN_COMPONENT_SCROLLBAR;
+ case OBJ_FM_SPINBUTTON : return FM_SUN_COMPONENT_SPINBUTTON;
+ case OBJ_FM_NAVIGATIONBAR : return FM_SUN_COMPONENT_NAVIGATIONBAR;
+ }
+ return ::rtl::OUString();
+ }
+
}
//------------------------------------------------------------------------------
@@ -504,7 +695,6 @@ FmXFormShell::FmXFormShell( FmFormShell& _rShell, SfxViewFrame* _pViewFrame )
,m_pTextShell( new ::svx::FmTextControlShell( _pViewFrame ) )
,m_aActiveControllerFeatures( ::comphelper::getProcessServiceFactory(), this )
,m_aNavControllerFeatures( ::comphelper::getProcessServiceFactory(), this )
- ,m_pExternalViewInterceptor( NULL )
,m_eDocumentType( eUnknownDocumentType )
,m_nLockSlotInvalidation( 0 )
,m_bHadPropertyBrowserInDesignMode( sal_False )
@@ -675,7 +865,8 @@ void SAL_CALL FmXFormShell::disposing(const EventObject& e) throw( RuntimeExcept
if (e.Source == m_xExternalViewController)
{
- Reference< XFormController> xFormController(m_xExternalViewController, UNO_QUERY);
+ Reference< runtime::XFormController > xFormController( m_xExternalViewController, UNO_QUERY );
+ OSL_ENSURE( xFormController.is(), "FmXFormShell::disposing: invalid external view controller!" );
if (xFormController.is())
xFormController->removeActivateListener((XFormControllerListener*)this);
@@ -765,7 +956,7 @@ void SAL_CALL FmXFormShell::formActivated(const EventObject& rEvent) throw( Runt
if ( impl_checkDisposed() )
return;
- Reference< XFormController > xController( rEvent.Source, UNO_QUERY_THROW );
+ Reference< runtime::XFormController > xController( rEvent.Source, UNO_QUERY_THROW );
m_pTextShell->formActivated( xController );
setActiveController( xController );
}
@@ -777,7 +968,7 @@ void SAL_CALL FmXFormShell::formDeactivated(const EventObject& rEvent) throw( Ru
if ( impl_checkDisposed() )
return;
- Reference< XFormController > xController( rEvent.Source, UNO_QUERY_THROW );
+ Reference< runtime::XFormController > xController( rEvent.Source, UNO_QUERY_THROW );
m_pTextShell->formDeactivated( xController );
}
@@ -798,14 +989,6 @@ void FmXFormShell::disposing()
// are still uncommitted changes, the user explicitly wanted this.
// 2002-11-11 - 104702 - fs@openoffice.org
- // dispose our interceptor helpers
- if (m_pExternalViewInterceptor)
- {
- m_pExternalViewInterceptor->dispose();
- m_pExternalViewInterceptor->release();
- m_pExternalViewInterceptor = NULL;
- }
-
m_pTextShell->dispose();
m_xAttachedFrame = NULL;
@@ -1703,7 +1886,7 @@ Reference< XResultSet> FmXFormShell::getInternalForm(const Reference< XResultSet
if ( impl_checkDisposed() )
return NULL;
- Reference< XFormController> xExternalCtrlr(m_xExternalViewController, UNO_QUERY);
+ Reference< runtime::XFormController> xExternalCtrlr(m_xExternalViewController, UNO_QUERY);
if (xExternalCtrlr.is() && (_xForm == xExternalCtrlr->getModel()))
{
DBG_ASSERT(m_xExternalDisplayedForm.is(), "FmXFormShell::getInternalForm : invalid external form !");
@@ -1719,7 +1902,7 @@ Reference< XForm> FmXFormShell::getInternalForm(const Reference< XForm>& _xForm)
if ( impl_checkDisposed() )
return NULL;
- Reference< XFormController> xExternalCtrlr(m_xExternalViewController, UNO_QUERY);
+ Reference< runtime::XFormController > xExternalCtrlr(m_xExternalViewController, UNO_QUERY);
if (xExternalCtrlr.is() && (_xForm == xExternalCtrlr->getModel()))
{
DBG_ASSERT(m_xExternalDisplayedForm.is(), "FmXFormShell::getInternalForm : invalid external form !");
@@ -1808,7 +1991,7 @@ void FmXFormShell::impl_switchActiveControllerListening( const bool _bListen )
}
//------------------------------------------------------------------------------
-void FmXFormShell::setActiveController( const Reference< XFormController>& xController, sal_Bool _bNoSaveOldContent )
+void FmXFormShell::setActiveController( const Reference< runtime::XFormController >& xController, sal_Bool _bNoSaveOldContent )
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormShell::setActiveController" );
if ( impl_checkDisposed() )
@@ -2103,11 +2286,11 @@ void FmXFormShell::startListening()
{
// suchen des Controllers, ueber den eine Navigation moeglich ist
Reference< XChild> xChild(m_xActiveController, UNO_QUERY);
- Reference< XFormController> xParent;
+ Reference< runtime::XFormController > xParent;
while (xChild.is())
{
xChild = Reference< XChild>(xChild->getParent(), UNO_QUERY);
- xParent = Reference< XFormController>(xChild, UNO_QUERY);
+ xParent = Reference< runtime::XFormController >(xChild, UNO_QUERY);
Reference< XPropertySet> xParentSet;
if (xParent.is())
xParentSet = Reference< XPropertySet>(xParent->getModel(), UNO_QUERY);
@@ -2936,31 +3119,39 @@ void FmXFormShell::startFiltering()
FmWinRecList::iterator i = pXView->findWindow(xContainer);
if (i != pXView->getWindowList().end())
{
- const ::std::vector< Reference< XFormController> >& rControllerList = (*i)->GetList();
- for (::std::vector< Reference< XFormController> >::const_iterator j = rControllerList.begin();
+ const ::std::vector< Reference< runtime::XFormController> >& rControllerList = (*i)->GetList();
+ for (::std::vector< Reference< runtime::XFormController> >::const_iterator j = rControllerList.begin();
j != rControllerList.end(); ++j)
{
Reference< XModeSelector> xModeSelector(*j, UNO_QUERY);
if (xModeSelector.is())
- xModeSelector->setMode(FILTER_MODE);
+ xModeSelector->setMode( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterMode" ) ) );
}
}
m_bFilterMode = sal_True;
m_pShell->UIFeatureChanged();
- m_pShell->GetViewShell()->GetViewFrame()->GetBindings().InvalidateShell(*m_pShell);
+ SfxViewFrame* pViewFrame = m_pShell->GetViewShell()->GetViewFrame();
+ pViewFrame->GetBindings().InvalidateShell( *m_pShell );
+
+ if ( pViewFrame->KnowsChildWindow( SID_FM_FILTER_NAVIGATOR )
+ && !pViewFrame->HasChildWindow( SID_FM_FILTER_NAVIGATOR )
+ )
+ {
+ pViewFrame->ToggleChildWindow( SID_FM_FILTER_NAVIGATOR );
+ }
}
//------------------------------------------------------------------------------
-void saveFilter(const Reference< XFormController>& _rxController)
+void saveFilter(const Reference< runtime::XFormController >& _rxController)
{
Reference< XPropertySet> xFormAsSet(_rxController->getModel(), UNO_QUERY);
Reference< XPropertySet> xControllerAsSet(_rxController, UNO_QUERY);
Reference< XIndexAccess> xControllerAsIndex(_rxController, UNO_QUERY);
// call the subcontroller
- Reference< XFormController> xController;
+ Reference< runtime::XFormController > xController;
for (sal_Int32 i = 0, nCount = xControllerAsIndex->getCount(); i < nCount; ++i)
{
xControllerAsIndex->getByIndex(i) >>= xController;
@@ -2995,7 +3186,7 @@ void FmXFormShell::stopFiltering(sal_Bool bSave)
Reference< XControlContainer> xContainer;
if (getActiveController() == m_xExternalViewController)
{
- DBG_ASSERT(m_xExtViewTriggerController.is(), "FmXFormShell::startFiltering : inconsistent : active external controller, but noone triggered this !");
+ DBG_ASSERT(m_xExtViewTriggerController.is(), "FmXFormShell::stopFiltering : inconsistent : active external controller, but noone triggered this !");
xContainer = m_xExtViewTriggerController->getContainer();
}
else
@@ -3004,13 +3195,13 @@ void FmXFormShell::stopFiltering(sal_Bool bSave)
FmWinRecList::iterator i = pXView->findWindow(xContainer);
if (i != pXView->getWindowList().end())
{
- const ::std::vector< Reference< XFormController> >& rControllerList = (*i)->GetList();
+ const ::std::vector< Reference< runtime::XFormController > >& rControllerList = (*i)->GetList();
::std::vector < ::rtl::OUString > aOriginalFilters;
::std::vector < sal_Bool > aOriginalApplyFlags;
if (bSave)
{
- for (::std::vector< Reference< XFormController> > ::const_iterator j = rControllerList.begin();
+ for (::std::vector< Reference< runtime::XFormController > > ::const_iterator j = rControllerList.begin();
j != rControllerList.end(); ++j)
{
if (bSave)
@@ -3035,18 +3226,18 @@ void FmXFormShell::stopFiltering(sal_Bool bSave)
saveFilter(*j);
}
}
- for (::std::vector< Reference< XFormController> > ::const_iterator j = rControllerList.begin();
+ for (::std::vector< Reference< runtime::XFormController > > ::const_iterator j = rControllerList.begin();
j != rControllerList.end(); ++j)
{
Reference< XModeSelector> xModeSelector(*j, UNO_QUERY);
if (xModeSelector.is())
- xModeSelector->setMode(DATA_MODE);
+ xModeSelector->setMode( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) ) );
}
if (bSave) // execute the filter
{
- const ::std::vector< Reference< XFormController> > & rControllers = (*i)->GetList();
- for (::std::vector< Reference< XFormController> > ::const_iterator j = rControllers.begin();
+ const ::std::vector< Reference< runtime::XFormController > > & rControllers = (*i)->GetList();
+ for (::std::vector< Reference< runtime::XFormController > > ::const_iterator j = rControllers.begin();
j != rControllers.end(); ++j)
{
Reference< XLoadable> xReload((*j)->getModel(), UNO_QUERY);
@@ -3087,13 +3278,13 @@ void FmXFormShell::stopFiltering(sal_Bool bSave)
}
//------------------------------------------------------------------------------
-void clearFilter(const Reference< XFormController>& _rxController)
+void clearFilter(const Reference< runtime::XFormController >& _rxController)
{
Reference< XPropertySet> xControllerAsSet(_rxController, UNO_QUERY);
Reference< XIndexAccess> xControllerAsIndex(_rxController, UNO_QUERY);
// call the subcontroller
- Reference< XFormController> xController;
+ Reference< runtime::XFormController > xController;
for (sal_Int32 i = 0, nCount = xControllerAsIndex->getCount();
i < nCount; i++)
{
@@ -3132,7 +3323,7 @@ void FmXFormShell::clearFilter()
Reference< XControlContainer> xContainer;
if (getActiveController() == m_xExternalViewController)
{
- DBG_ASSERT(m_xExtViewTriggerController.is(), "FmXFormShell::startFiltering : inconsistent : active external controller, but noone triggered this !");
+ DBG_ASSERT(m_xExtViewTriggerController.is(), "FmXFormShell::clearFilter : inconsistent : active external controller, but noone triggered this !");
xContainer = m_xExtViewTriggerController->getContainer();
}
else
@@ -3141,8 +3332,8 @@ void FmXFormShell::clearFilter()
FmWinRecList::iterator i = pXView->findWindow(xContainer);
if (i != pXView->getWindowList().end())
{
- const ::std::vector< Reference< XFormController> > & rControllerList = (*i)->GetList();
- for (::std::vector< Reference< XFormController> > ::const_iterator j = rControllerList.begin();
+ const ::std::vector< Reference< runtime::XFormController > > & rControllerList = (*i)->GetList();
+ for (::std::vector< Reference< runtime::XFormController > > ::const_iterator j = rControllerList.begin();
j != rControllerList.end(); ++j)
{
::clearFilter(*j);
@@ -3253,7 +3444,7 @@ void FmXFormShell::restoreControlLocks()
}
//------------------------------------------------------------------------------
-void FmXFormShell::DoAsyncCursorAction(const Reference< XFormController>& _xController, CURSOR_ACTION _eWhat)
+void FmXFormShell::DoAsyncCursorAction(const Reference< runtime::XFormController >& _xController, CURSOR_ACTION _eWhat)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormShell::DoAsyncCursorAction" );
if ( impl_checkDisposed() )
@@ -3329,7 +3520,7 @@ sal_Bool FmXFormShell::HasPendingCursorAction(const Reference< XResultSet>& _xFo
}
//------------------------------------------------------------------------------
-sal_Bool FmXFormShell::HasPendingCursorAction(const Reference< XFormController>& xController) const
+sal_Bool FmXFormShell::HasPendingCursorAction(const Reference< runtime::XFormController >& xController) const
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormShell::HasPendingCursorAction" );
if ( impl_checkDisposed() )
@@ -3471,7 +3662,7 @@ void FmXFormShell::CreateExternalView()
::rtl::OUString sFrameName = ::rtl::OUString::createFromAscii("_beamer");
sal_Int32 nSearchFlags = ::com::sun::star::frame::FrameSearchFlag::CHILDREN | ::com::sun::star::frame::FrameSearchFlag::CREATE;
- Reference< XFormController> xCurrentNavController( getNavController());
+ Reference< runtime::XFormController > xCurrentNavController( getNavController());
// the creation of the "partwindow" may cause a deactivate of the document which will result in our nav controller to be set to NULL
// _first_ check if we have any valid fields we can use for the grid view
@@ -3538,12 +3729,12 @@ void FmXFormShell::CreateExternalView()
{
if ( m_xExternalViewController == getActiveController() )
{
- Reference< XFormController > xAsFormController( m_xExternalViewController, UNO_QUERY );
+ Reference< runtime::XFormController > xAsFormController( m_xExternalViewController, UNO_QUERY );
ControllerFeatures aHelper( ::comphelper::getProcessServiceFactory(), xAsFormController, NULL );
aHelper->commitCurrentControl();
}
- Reference< XFormController> xNewController(m_xExtViewTriggerController);
+ Reference< runtime::XFormController > xNewController(m_xExtViewTriggerController);
CloseExternalFormViewer();
setActiveController(xNewController);
return;
@@ -3557,28 +3748,8 @@ void FmXFormShell::CreateExternalView()
xClear->dispatch(aClearURL, Sequence< PropertyValue>());
}
- // interception of slots of the external view
- if (m_pExternalViewInterceptor)
- { // already intercepting ...
- if (m_pExternalViewInterceptor->getIntercepted() != xExternalViewFrame)
- { // ... but another frame -> create a new interceptor
- m_pExternalViewInterceptor->dispose();
- m_pExternalViewInterceptor->release();
- m_pExternalViewInterceptor = NULL;
- }
- }
-
- if (!m_pExternalViewInterceptor)
- {
- Reference< ::com::sun::star::frame::XDispatchProviderInterception> xSupplier(xExternalViewFrame, UNO_QUERY);
- ::rtl::OUString sInterceptorScheme = FMURL_FORMSLOTS_PREFIX;
- sInterceptorScheme += ::rtl::OUString::createFromAscii("*");
-// m_pExternalViewInterceptor = new FmXDispatchInterceptorImpl(xSupplier, this, 1, Sequence< ::rtl::OUString >(&sInterceptorScheme, 1));
-// m_pExternalViewInterceptor->acquire();
- // TODO: re-implement this in a easier way than before: We need an interceptor at the xSupplier, which
- // forwards all queryDispatch requests to the FormController instance for which this "external view"
- // was triggered
- }
+ // TODO: We need an interceptor at the xSupplier, which forwards all queryDispatch requests to the FormController
+ // instance for which this "external view" was triggered
// get the dispatch interface of the frame so we can communicate (interceptable) with the controller
Reference< ::com::sun::star::frame::XDispatchProvider> xCommLink(xExternalViewFrame, UNO_QUERY);
@@ -3876,7 +4047,8 @@ void FmXFormShell::CreateExternalView()
// we want to know modifications done in the external view
// if the external controller is a XFormController we can use all our default handlings for it
- Reference< XFormController> xFormController(m_xExternalViewController, UNO_QUERY);
+ Reference< runtime::XFormController > xFormController( m_xExternalViewController, UNO_QUERY );
+ OSL_ENSURE( xFormController.is(), "FmXFormShell::CreateExternalView:: invalid external view controller!" );
if (xFormController.is())
xFormController->addActivateListener((XFormControllerListener*)this);
}
@@ -4158,6 +4330,44 @@ IMPL_LINK( FmXFormShell, OnLoadForms, FmFormPage*, /*_pPage*/ )
return 0L;
}
+//------------------------------------------------------------------------------
+namespace
+{
+ sal_Bool lcl_isLoadable( const Reference< XInterface >& _rxLoadable )
+ {
+ // determines whether a form should be loaded or not
+ // if there is no datasource or connection there is no reason to load a form
+ Reference< XPropertySet > xSet( _rxLoadable, UNO_QUERY );
+ if ( !xSet.is() )
+ return sal_False;
+ try
+ {
+ Reference< XConnection > xConn;
+ if ( OStaticDataAccessTools().isEmbeddedInDatabase( _rxLoadable.get(), xConn ) )
+ return sal_True;
+
+ // is there already a active connection
+ xSet->getPropertyValue(FM_PROP_ACTIVE_CONNECTION) >>= xConn;
+ if ( xConn.is() )
+ return sal_True;
+
+ ::rtl::OUString sPropertyValue;
+ OSL_VERIFY( xSet->getPropertyValue( FM_PROP_DATASOURCE ) >>= sPropertyValue );
+ if ( sPropertyValue.getLength() )
+ return sal_True;
+
+ OSL_VERIFY( xSet->getPropertyValue( FM_PROP_URL ) >>= sPropertyValue );
+ if ( sPropertyValue.getLength() )
+ return sal_True;
+ }
+ catch(const Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return sal_False;
+ }
+}
+
//------------------------------------------------------------------------
void FmXFormShell::loadForms( FmFormPage* _pPage, const sal_uInt16 _nBehaviour /* FORMS_LOAD | FORMS_SYNC */ )
{
@@ -4202,7 +4412,7 @@ void FmXFormShell::loadForms( FmFormPage* _pPage, const sal_uInt16 _nBehaviour /
{
if ( 0 == ( _nBehaviour & FORMS_UNLOAD ) )
{
- if ( ::isLoadable( xForm ) && !xForm->isLoaded() )
+ if ( lcl_isLoadable( xForm ) && !xForm->isLoaded() )
xForm->load();
}
else
diff --git a/svx/source/form/fmsrcimp.cxx b/svx/source/form/fmsrcimp.cxx
index 3d1235624802..91384d3274d5 100644
--- a/svx/source/form/fmsrcimp.cxx
+++ b/svx/source/form/fmsrcimp.cxx
@@ -34,7 +34,6 @@
#ifndef _SVX_FMRESIDS_HRC
#include "fmresids.hrc"
#endif
-#include "fmtools.hxx"
#include "fmsrccfg.hxx"
#include <tools/debug.hxx>
#include <tools/diagnose_ex.h>
diff --git a/svx/source/form/fmstring.src b/svx/source/form/fmstring.src
index 8b42ccadc6a6..da9b47de43cf 100644
--- a/svx/source/form/fmstring.src
+++ b/svx/source/form/fmstring.src
@@ -130,7 +130,7 @@ String RID_STR_DELETECONFIRM_RECORDS
};
String RID_STR_DELETECONFIRM
{
- Text [ en-US ] = "If you click Yes, you won't be able to undo this operation!\nDo you want to continue anyway?";
+ Text [ en-US ] = "If you click Yes, you won't be able to undo this operation.\nDo you want to continue anyway?";
};
String RID_ERR_NO_ELEMENT
diff --git a/svx/source/form/fmtextcontrolshell.cxx b/svx/source/form/fmtextcontrolshell.cxx
index fc7f1aa78558..66feffd2feba 100644
--- a/svx/source/form/fmtextcontrolshell.cxx
+++ b/svx/source/form/fmtextcontrolshell.cxx
@@ -89,6 +89,7 @@ namespace svx
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::awt;
using namespace ::com::sun::star::form;
+ using namespace ::com::sun::star::form::runtime;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::util;
diff --git a/svx/source/form/fmtools.cxx b/svx/source/form/fmtools.cxx
index df8b51b8b82f..c3df100cd873 100644
--- a/svx/source/form/fmtools.cxx
+++ b/svx/source/form/fmtools.cxx
@@ -30,83 +30,74 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/io/XPersistObject.hpp>
-#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
-#include <com/sun/star/sdb/XCompletedConnection.hpp>
-#include <com/sun/star/sdbcx/Privilege.hpp>
-#include <com/sun/star/lang/Locale.hpp>
+
+#include "fmprop.hrc"
+#include "fmservs.hxx"
#include "fmtools.hxx"
#include "svx/dbtoolsclient.hxx"
-#include "fmservs.hxx"
-#include <svx/fmglob.hxx>
-#include <vcl/stdtext.hxx>
-#ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
-#include <toolkit/unohlp.hxx>
-#endif
+#include "svx/fmglob.hxx"
-#include <stdlib.h>
-#include <stdio.h>
-#include <wchar.h>
-#include <com/sun/star/uno/XNamingService.hpp>
-#include <com/sun/star/sdbc/XDataSource.hpp>
+/** === begin UNO includes === **/
+#include <com/sun/star/awt/LineEndFormat.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/beans/XIntrospection.hpp>
+#include <com/sun/star/container/XChild.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/form/XGridColumnFactory.hpp>
+#include <com/sun/star/io/XActiveDataSink.hpp>
+#include <com/sun/star/io/XActiveDataSource.hpp>
+#include <com/sun/star/io/XObjectInputStream.hpp>
+#include <com/sun/star/io/XObjectOutputStream.hpp>
+#include <com/sun/star/io/XPersistObject.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/sdb/CommandType.hpp>
-#include <com/sun/star/sdb/XQueriesSupplier.hpp>
+#include <com/sun/star/sdb/ErrorCondition.hpp>
#include <com/sun/star/sdb/SQLContext.hpp>
-#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+#include <com/sun/star/sdb/XCompletedConnection.hpp>
+#include <com/sun/star/sdb/XQueriesSupplier.hpp>
#include <com/sun/star/sdb/XResultSetAccess.hpp>
-#include <com/sun/star/sdb/ErrorCondition.hpp>
#include <com/sun/star/sdbc/DataType.hpp>
-#include <com/sun/star/util/NumberFormat.hpp>
-#include <com/sun/star/io/XActiveDataSink.hpp>
-#include <com/sun/star/io/XActiveDataSource.hpp>
-#include <com/sun/star/script/XEventAttacherManager.hpp>
-#include <com/sun/star/form/XForm.hpp>
-#include <com/sun/star/form/XFormComponent.hpp>
-#include <com/sun/star/util/XNumberFormatter.hpp>
-#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
+#include <com/sun/star/sdbc/XDataSource.hpp>
+#include <com/sun/star/sdbcx/Privilege.hpp>
+#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+#include <com/sun/star/uno/XNamingService.hpp>
#include <com/sun/star/util/Language.hpp>
-#include <com/sun/star/util/XNumberFormats.hpp>
-#include <com/sun/star/util/XNumberFormatTypes.hpp>
+#include <com/sun/star/util/NumberFormat.hpp>
#include <com/sun/star/util/XCloneable.hpp>
-#include <com/sun/star/io/XObjectInputStream.hpp>
-#include <com/sun/star/io/XObjectOutputStream.hpp>
-#include <com/sun/star/reflection/XIdlClass.hpp>
-#include <com/sun/star/reflection/XIdlMethod.hpp>
-#include <com/sun/star/beans/XIntrospection.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/container/XChild.hpp>
-#include <com/sun/star/task/XInteractionHandler.hpp>
-#include <com/sun/star/awt/LineEndFormat.hpp>
-#include <com/sun/star/form/XGridColumnFactory.hpp>
-
+#include <com/sun/star/util/XNumberFormatTypes.hpp>
+#include <com/sun/star/util/XNumberFormats.hpp>
+#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
+#include <com/sun/star/util/XNumberFormatter.hpp>
+/** === end UNO includes === **/
-#include <tools/debug.hxx>
-#include <tools/string.hxx>
#include <basic/sbxvar.hxx>
-#include <rtl/math.hxx>
-#include <vcl/svapp.hxx>
-
-#ifndef _SVX_FMPROP_HRC
-#include "fmprop.hrc"
-#endif
-#include <sfx2/bindings.hxx>
-#include <svtools/eitem.hxx>
-#include <svtools/stritem.hxx>
-#include <cppuhelper/servicefactory.hxx>
-#include <comphelper/types.hxx>
-#include <comphelper/property.hxx>
#include <comphelper/container.hxx>
-#include <connectivity/dbtools.hxx>
+#include <comphelper/extract.hxx>
#include <comphelper/processfactory.hxx>
+#include <comphelper/property.hxx>
#include <comphelper/sequence.hxx>
-#include <comphelper/extract.hxx>
+#include <comphelper/types.hxx>
#include <comphelper/uno3.hxx>
#include <connectivity/dbexception.hxx>
-#include <comphelper/extract.hxx>
+#include <connectivity/dbtools.hxx>
+#include <cppuhelper/servicefactory.hxx>
#include <cppuhelper/typeprovider.hxx>
-#include <algorithm>
#include <rtl/logfile.hxx>
+#include <rtl/math.hxx>
+#include <sfx2/bindings.hxx>
+#include <svtools/eitem.hxx>
+#include <svtools/stritem.hxx>
+#include <toolkit/unohlp.hxx>
+#include <tools/debug.hxx>
+#include <tools/string.hxx>
+#include <vcl/stdtext.hxx>
+#include <vcl/svapp.hxx>
+
+#include <algorithm>
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::util;
@@ -204,106 +195,8 @@ void displayException(const ::com::sun::star::sdb::SQLErrorEvent& _rEvent, Windo
}
//------------------------------------------------------------------------------
-Reference< XInterface > cloneUsingProperties(const Reference< ::com::sun::star::io::XPersistObject>& _xObj)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::cloneUsingProperties" );
- if (!_xObj.is())
- return Reference< XInterface >();
-
- // create a new object
- ::rtl::OUString aObjectService = _xObj->getServiceName();
- Reference< ::com::sun::star::beans::XPropertySet> xDestSet(::comphelper::getProcessServiceFactory()->createInstance(aObjectService), UNO_QUERY);
- if (!xDestSet.is())
- {
- DBG_ERROR("cloneUsingProperties : could not instantiate an object of the given type !");
- return Reference< XInterface >();
- }
- // transfer properties
- Reference< XPropertySet > xSourceSet(_xObj, UNO_QUERY);
- Reference< XPropertySetInfo > xSourceInfo( xSourceSet->getPropertySetInfo());
- Sequence< Property> aSourceProperties = xSourceInfo->getProperties();
- Reference< XPropertySetInfo > xDestInfo( xDestSet->getPropertySetInfo());
- Sequence< Property> aDestProperties = xDestInfo->getProperties();
- int nDestLen = aDestProperties.getLength();
-
- Property* pSourceProps = aSourceProperties.getArray();
- Property* pSourceEnd = pSourceProps + aSourceProperties.getLength();
- Property* pDestProps = aDestProperties.getArray();
-
- for (; pSourceProps != pSourceEnd; ++pSourceProps)
- {
- ::com::sun::star::beans::Property* pResult = ::std::lower_bound(
- pDestProps,
- pDestProps + nDestLen,
- pSourceProps->Name,
- ::comphelper::PropertyStringLessFunctor()
- );
-
- if ( ( pResult != pDestProps + nDestLen )
- && ( pResult->Name == pSourceProps->Name )
- && ( pResult->Attributes == pSourceProps->Attributes )
- && ( (pResult->Attributes & PropertyAttribute::READONLY ) == 0 )
- && ( pResult->Type.equals( pSourceProps->Type ) )
- )
- { // Attribute/type are the same and the prop isn't readonly
- try
- {
- xDestSet->setPropertyValue(pResult->Name, xSourceSet->getPropertyValue(pResult->Name));
- }
- catch(IllegalArgumentException e)
- {
- (void)e;
-#ifdef DBG_UTIL
- ::rtl::OString sMessage("cloneUsingProperties : could not transfer the value for property \"");
- sMessage = sMessage + ::rtl::OString(pResult->Name.getStr(), pResult->Name.getLength(), RTL_TEXTENCODING_ASCII_US);
- sMessage = sMessage + '\"';
- DBG_ERROR(sMessage);
-#endif
- }
-
- }
- }
-
- return xDestSet.get();
-}
-
-//------------------------------------------------------------------------------
-sal_Bool searchElement(const Reference< ::com::sun::star::container::XIndexAccess>& xCont, const Reference< XInterface >& xElement)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::searchElement" );
- if (!xCont.is() || !xElement.is())
- return sal_False;
-
- sal_Int32 nCount = xCont->getCount();
- Reference< XInterface > xComp;
- for (sal_Int32 i = 0; i < nCount; i++)
- {
- try
- {
- xCont->getByIndex(i) >>= xComp;
- if (xComp.is())
- {
- if ( xElement == xComp )
- return sal_True;
- else
- {
- Reference< ::com::sun::star::container::XIndexAccess> xCont2(xComp, UNO_QUERY);
- if (xCont2.is() && searchElement(xCont2, xElement))
- return sal_True;
- }
- }
- }
- catch(Exception&)
- {
- }
- }
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
sal_Int32 getElementPos(const Reference< ::com::sun::star::container::XIndexAccess>& xCont, const Reference< XInterface >& xElement)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::getElementPos" );
sal_Int32 nIndex = -1;
if (!xCont.is())
return nIndex;
@@ -336,127 +229,6 @@ sal_Int32 getElementPos(const Reference< ::com::sun::star::container::XIndexAcce
}
//------------------------------------------------------------------
-String getFormComponentAccessPath(const Reference< XInterface >& _xElement, Reference< XInterface >& _rTopLevelElement)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::getFormComponentAccessPath" );
- Reference< ::com::sun::star::form::XFormComponent> xChild(_xElement, UNO_QUERY);
- Reference< ::com::sun::star::container::XIndexAccess> xParent;
- if (xChild.is())
- xParent = Reference< ::com::sun::star::container::XIndexAccess>(xChild->getParent(), UNO_QUERY);
-
- // while the current content is a form
- String sReturn;
- String sCurrentIndex;
- while (xChild.is())
- {
- // get the content's relative pos within it's parent container
- sal_Int32 nPos = getElementPos(xParent, xChild);
-
- // prepend this current relaive pos
- sCurrentIndex = String::CreateFromInt32(nPos);
- if (sReturn.Len() != 0)
- {
- sCurrentIndex += '\\';
- sCurrentIndex += sReturn;
- }
-
- sReturn = sCurrentIndex;
-
- // travel up
- if (::comphelper::query_interface((Reference< XInterface >)xParent,xChild))
- xParent = Reference< ::com::sun::star::container::XIndexAccess>(xChild->getParent(), UNO_QUERY);
- }
-
- _rTopLevelElement = xParent;
- return sReturn;
-}
-
-//------------------------------------------------------------------
-String getFormComponentAccessPath(const Reference< XInterface >& _xElement)
-{
- Reference< XInterface > xDummy;
- return getFormComponentAccessPath(_xElement, xDummy);
-}
-
-//------------------------------------------------------------------------------
-Reference< XInterface > getElementFromAccessPath(const Reference< ::com::sun::star::container::XIndexAccess>& _xParent, const String& _rRelativePath)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::getElementFromAccessPath" );
- if (!_xParent.is())
- return Reference< XInterface >();
- Reference< ::com::sun::star::container::XIndexAccess> xContainer(_xParent);
- Reference< XInterface > xElement( _xParent);
-
- String sPath(_rRelativePath);
- while (sPath.Len() && xContainer.is())
- {
- xub_StrLen nSepPos = sPath.Search((sal_Unicode)'\\');
-
- String sIndex(sPath.Copy(0, (nSepPos == STRING_NOTFOUND) ? sPath.Len() : nSepPos));
- // DBG_ASSERT(sIndex.IsNumeric(), "getElementFromAccessPath : invalid path !");
-
- sPath = sPath.Copy((nSepPos == STRING_NOTFOUND) ? sPath.Len() : nSepPos+1);
-
- ::cppu::extractInterface(xElement, xContainer->getByIndex(sIndex.ToInt32()));
- xContainer = Reference< ::com::sun::star::container::XIndexAccess>::query(xElement);
- }
-
- if (sPath.Len() != 0)
- // the loop terminated because an element wasn't a container, but we stil have a path -> the path is invalid
- xElement = NULL;
-
- return xElement;
-}
-
-//------------------------------------------------------------------
-// Vergleichen von PropertyInfo
-extern "C" int
-#if defined( WNT )
- __cdecl
-#endif
-#if defined( ICC ) && defined( OS2 )
-_Optlink
-#endif
- NameCompare(const void* pFirst, const void* pSecond)
-{
- return ((::rtl::OUString*)pFirst)->compareTo(*(::rtl::OUString*)pSecond);
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 findPos(const ::rtl::OUString& aStr, const Sequence< ::rtl::OUString>& rList)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::findPos" );
- const ::rtl::OUString* pStrList = rList.getConstArray();
- ::rtl::OUString* pResult = (::rtl::OUString*) bsearch(&aStr, (void*)pStrList, rList.getLength(), sizeof(::rtl::OUString),
- &NameCompare);
-
- if (pResult)
- return (pResult - pStrList);
- else
- return -1;
-}
-
-//------------------------------------------------------------------
-Reference< ::com::sun::star::frame::XModel> getXModel(const Reference< XInterface >& xIface)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::getXModel" );
- Reference< ::com::sun::star::frame::XModel> xModel(xIface, UNO_QUERY);
- if (xModel.is())
- return xModel;
- else
- {
- Reference< ::com::sun::star::container::XChild> xChild(xIface, UNO_QUERY);
- if (xChild.is())
- {
- Reference< XInterface > xParent( xChild->getParent());
- return getXModel(xParent);
- }
- else
- return NULL;
- }
-}
-
-//------------------------------------------------------------------
::rtl::OUString getLabelName(const Reference< ::com::sun::star::beans::XPropertySet>& xControlModel)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::getLabelName" );
@@ -690,412 +462,6 @@ sal_Int16 getControlTypeByObject(const Reference< ::com::sun::star::lang::XServi
}
//------------------------------------------------------------------------------
-::rtl::OUString getServiceNameByControlType(sal_Int16 nType)
-{
- switch (nType)
- {
- case OBJ_FM_EDIT : return FM_COMPONENT_TEXTFIELD;
- case OBJ_FM_BUTTON : return FM_COMPONENT_COMMANDBUTTON;
- case OBJ_FM_FIXEDTEXT : return FM_COMPONENT_FIXEDTEXT;
- case OBJ_FM_LISTBOX : return FM_COMPONENT_LISTBOX;
- case OBJ_FM_CHECKBOX : return FM_COMPONENT_CHECKBOX;
- case OBJ_FM_RADIOBUTTON : return FM_COMPONENT_RADIOBUTTON;
- case OBJ_FM_GROUPBOX : return FM_COMPONENT_GROUPBOX;
- case OBJ_FM_COMBOBOX : return FM_COMPONENT_COMBOBOX;
- case OBJ_FM_GRID : return FM_COMPONENT_GRIDCONTROL;
- case OBJ_FM_IMAGEBUTTON : return FM_COMPONENT_IMAGEBUTTON;
- case OBJ_FM_FILECONTROL : return FM_COMPONENT_FILECONTROL;
- case OBJ_FM_DATEFIELD : return FM_COMPONENT_DATEFIELD;
- case OBJ_FM_TIMEFIELD : return FM_COMPONENT_TIMEFIELD;
- case OBJ_FM_NUMERICFIELD : return FM_COMPONENT_NUMERICFIELD;
- case OBJ_FM_CURRENCYFIELD : return FM_COMPONENT_CURRENCYFIELD;
- case OBJ_FM_PATTERNFIELD : return FM_COMPONENT_PATTERNFIELD;
- case OBJ_FM_HIDDEN : return FM_COMPONENT_HIDDENCONTROL;
- case OBJ_FM_IMAGECONTROL : return FM_COMPONENT_IMAGECONTROL;
- case OBJ_FM_FORMATTEDFIELD : return FM_COMPONENT_FORMATTEDFIELD;
- case OBJ_FM_SCROLLBAR : return FM_SUN_COMPONENT_SCROLLBAR;
- case OBJ_FM_SPINBUTTON : return FM_SUN_COMPONENT_SPINBUTTON;
- case OBJ_FM_NAVIGATIONBAR : return FM_SUN_COMPONENT_NAVIGATIONBAR;
- }
- return ::rtl::OUString();
-}
-//------------------------------------------------------------------------------
-Sequence< ::rtl::OUString> getEventMethods(const Type& type)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::getEventMethods" );
- typelib_InterfaceTypeDescription *pType=0;
- type.getDescription( (typelib_TypeDescription**)&pType);
-
- if(!pType)
- return Sequence< ::rtl::OUString>();
-
- Sequence< ::rtl::OUString> aNames(pType->nMembers);
- ::rtl::OUString* pNames = aNames.getArray();
- for(sal_Int32 i=0;i<pType->nMembers;i++,++pNames)
- {
- // the decription reference
- typelib_TypeDescriptionReference* pMemberDescriptionReference = pType->ppMembers[i];
- // the description for the reference
- typelib_TypeDescription* pMemberDescription = NULL;
- typelib_typedescriptionreference_getDescription(&pMemberDescription, pMemberDescriptionReference);
- if (pMemberDescription)
- {
- typelib_InterfaceMemberTypeDescription* pRealMemberDescription =
- reinterpret_cast<typelib_InterfaceMemberTypeDescription*>(pMemberDescription);
- *pNames = pRealMemberDescription->pMemberName;
- }
- }
- typelib_typedescription_release( (typelib_TypeDescription *)pType );
- return aNames;
-}
-
-
-//------------------------------------------------------------------------------
-void TransferEventScripts(const Reference< ::com::sun::star::awt::XControlModel>& xModel, const Reference< ::com::sun::star::awt::XControl>& xControl,
- const Sequence< ::com::sun::star::script::ScriptEventDescriptor>& rTransferIfAvailable)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::TransferEventScripts" );
- // first check if we have a XEventAttacherManager for the model
- Reference< ::com::sun::star::container::XChild> xModelChild(xModel, UNO_QUERY);
- if (!xModelChild.is())
- return; // nothing to do
-
- Reference< ::com::sun::star::script::XEventAttacherManager> xEventManager(xModelChild->getParent(), UNO_QUERY);
- if (!xEventManager.is())
- return; // nothing to do
-
- if (!rTransferIfAvailable.getLength())
- return; // nothing to do
-
- // check for the index of the model within it's parent
- Reference< ::com::sun::star::container::XIndexAccess> xParentIndex(xModelChild->getParent(), UNO_QUERY);
- if (!xParentIndex.is())
- return; // nothing to do
- sal_Int32 nIndex = getElementPos(xParentIndex, xModel);
- if (nIndex<0 || nIndex>=xParentIndex->getCount())
- return; // nothing to do
-
- // then we need informations about the listeners supported by the control and the model
- Sequence< Type> aModelListeners;
- Sequence< Type> aControlListeners;
-
- Reference< ::com::sun::star::beans::XIntrospection> xModelIntrospection(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.beans.Introspection")), UNO_QUERY);
- Reference< ::com::sun::star::beans::XIntrospection> xControlIntrospection(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.beans.Introspection")), UNO_QUERY);
-
- if (xModelIntrospection.is() && xModel.is())
- {
- Any aModel(makeAny(xModel));
- aModelListeners = xModelIntrospection->inspect(aModel)->getSupportedListeners();
- }
-
- if (xControlIntrospection.is() && xControl.is())
- {
- Any aControl(makeAny(xControl));
- aControlListeners = xControlIntrospection->inspect(aControl)->getSupportedListeners();
- }
-
- sal_Int32 nMaxNewLen = aModelListeners.getLength() + aControlListeners.getLength();
- if (!nMaxNewLen)
- return; // the model and the listener don't support any listeners (or we were unable to retrieve these infos)
-
- Sequence< ::com::sun::star::script::ScriptEventDescriptor> aTransferable(nMaxNewLen);
- ::com::sun::star::script::ScriptEventDescriptor* pTransferable = aTransferable.getArray();
-
- const ::com::sun::star::script::ScriptEventDescriptor* pCurrent = rTransferIfAvailable.getConstArray();
- sal_Int32 i,j,k;
- for (i=0; i<rTransferIfAvailable.getLength(); ++i, ++pCurrent)
- {
- // search the model/control idl classes for the event described by pCurrent
- for ( Sequence< Type>* pCurrentArray = &aModelListeners;
- pCurrentArray;
- pCurrentArray = (pCurrentArray == &aModelListeners) ? &aControlListeners : NULL
- )
- {
- const Type* pCurrentListeners = pCurrentArray->getConstArray();
- for (j=0; j<pCurrentArray->getLength(); ++j, ++pCurrentListeners)
- {
- UniString aListener = (*pCurrentListeners).getTypeName();
- xub_StrLen nTokens = aListener.GetTokenCount('.');
- if (nTokens)
- aListener = aListener.GetToken(nTokens - 1, '.');
-
- if (aListener == pCurrent->ListenerType.getStr())
- // the current ::com::sun::star::script::ScriptEventDescriptor doesn't match the current listeners class
- continue;
-
- // now check the methods
- Sequence< ::rtl::OUString> aMethodsNames = getEventMethods(*pCurrentListeners);
- const ::rtl::OUString* pMethodsNames = aMethodsNames.getConstArray();
- for (k=0; k<aMethodsNames.getLength(); ++k, ++pMethodsNames)
- {
- if ((*pMethodsNames).compareTo(pCurrent->EventMethod) != COMPARE_EQUAL)
- // the current ::com::sun::star::script::ScriptEventDescriptor doesn't match the current listeners current method
- continue;
-
- // we can transfer the script event : the model (control) supports it
- *pTransferable = *pCurrent;
- ++pTransferable;
- break;
- }
- if (k<aMethodsNames.getLength())
- break;
- }
- }
- }
-
- sal_Int32 nRealNewLen = pTransferable - aTransferable.getArray();
- aTransferable.realloc(nRealNewLen);
-
- xEventManager->registerScriptEvents(nIndex, aTransferable);
-}
-
-//------------------------------------------------------------------------------
-sal_Int16 GridView2ModelPos(const Reference< ::com::sun::star::container::XIndexAccess>& rColumns, sal_Int16 nViewPos)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::GridView2ModelPos" );
- try
- {
- if (rColumns.is())
- {
- // loop through all columns
- sal_Int16 i;
- Reference< ::com::sun::star::beans::XPropertySet> xCur;
- for (i=0; i<rColumns->getCount(); ++i)
- {
- rColumns->getByIndex(i) >>= xCur;
- if (!::comphelper::getBOOL(xCur->getPropertyValue(FM_PROP_HIDDEN)))
- {
- // for every visible col : if nViewPos is greater zero, decrement it, else we
- // have found the model position
- if (!nViewPos)
- break;
- else
- --nViewPos;
- }
- }
- if (i<rColumns->getCount())
- return i;
- }
- }
- catch(const Exception&)
- {
- DBG_ERROR("GridView2ModelPos Exception occured!");
- }
- return (sal_Int16)-1;
-}
-
-//========================================================================
-//= FmXDispatchInterceptorImpl
-//========================================================================
-
-DBG_NAME(FmXDispatchInterceptorImpl);
-//------------------------------------------------------------------------
-FmXDispatchInterceptorImpl::FmXDispatchInterceptorImpl(
- const Reference< XDispatchProviderInterception >& _rxToIntercept, FmDispatchInterceptor* _pMaster,
- sal_Int16 _nId, Sequence< ::rtl::OUString > _rInterceptedSchemes)
- :FmXDispatchInterceptorImpl_BASE(_pMaster && _pMaster->getInterceptorMutex() ? *_pMaster->getInterceptorMutex() : m_aFallback)
- ,m_xIntercepted(_rxToIntercept)
- ,m_bListening(sal_False)
- ,m_pMaster(_pMaster)
- ,m_nId(_nId)
- ,m_aInterceptedURLSchemes(_rInterceptedSchemes)
-{
- DBG_CTOR(FmXDispatchInterceptorImpl,NULL);
-
- ::osl::MutexGuard aGuard(getAccessSafety());
- ::comphelper::increment(m_refCount);
- if (_rxToIntercept.is())
- {
- _rxToIntercept->registerDispatchProviderInterceptor((::com::sun::star::frame::XDispatchProviderInterceptor*)this);
- // this should make us the top-level dispatch-provider for the component, via a call to our
- // setDispatchProvider we should have got an fallback for requests we (i.e. our master) cannot fullfill
- Reference< ::com::sun::star::lang::XComponent> xInterceptedComponent(_rxToIntercept, UNO_QUERY);
- if (xInterceptedComponent.is())
- {
- xInterceptedComponent->addEventListener(this);
- m_bListening = sal_True;
- }
- }
- ::comphelper::decrement(m_refCount);
-}
-
-//------------------------------------------------------------------------
-FmXDispatchInterceptorImpl::~FmXDispatchInterceptorImpl()
-{
- if (!rBHelper.bDisposed)
- dispose();
-
- DBG_DTOR(FmXDispatchInterceptorImpl,NULL);
-}
-
-//------------------------------------------------------------------------------
-Sequence< sal_Int8 > SAL_CALL FmXDispatchInterceptorImpl::getImplementationId() throw(RuntimeException)
-{
- static ::cppu::OImplementationId* pId = 0;
- if (! pId)
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if (! pId)
- {
- static ::cppu::OImplementationId aId;
- pId = &aId;
- }
- }
- return pId->getImplementationId();
-}
-
-//------------------------------------------------------------------------------
-Reference< ::com::sun::star::frame::XDispatch > SAL_CALL FmXDispatchInterceptorImpl::queryDispatch( const URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw(RuntimeException)
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- Reference< ::com::sun::star::frame::XDispatch> xResult;
- // ask our 'real' interceptor
- if (m_pMaster)
- xResult = m_pMaster->interceptedQueryDispatch(m_nId, aURL, aTargetFrameName, nSearchFlags);
-
- // ask our slave provider
- if (!xResult.is() && m_xSlaveDispatcher.is())
- xResult = m_xSlaveDispatcher->queryDispatch(aURL, aTargetFrameName, nSearchFlags);
-
- return xResult;
-}
-
-//------------------------------------------------------------------------------
-Sequence< Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL
-FmXDispatchInterceptorImpl::queryDispatches( const Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw(RuntimeException)
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- Sequence< Reference< ::com::sun::star::frame::XDispatch> > aReturn(aDescripts.getLength());
- Reference< ::com::sun::star::frame::XDispatch>* pReturn = aReturn.getArray();
- const ::com::sun::star::frame::DispatchDescriptor* pDescripts = aDescripts.getConstArray();
- for (sal_Int16 i=0; i<aDescripts.getLength(); ++i, ++pReturn, ++pDescripts)
- {
- *pReturn = queryDispatch(pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags);
- }
- return aReturn;
-}
-
-//------------------------------------------------------------------------------
-Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL FmXDispatchInterceptorImpl::getSlaveDispatchProvider( ) throw(RuntimeException)
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- return m_xSlaveDispatcher;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL FmXDispatchInterceptorImpl::setSlaveDispatchProvider(const Reference< ::com::sun::star::frame::XDispatchProvider>& xNewDispatchProvider) throw( RuntimeException )
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- m_xSlaveDispatcher = xNewDispatchProvider;
-}
-
-//------------------------------------------------------------------------------
-Reference< ::com::sun::star::frame::XDispatchProvider> SAL_CALL FmXDispatchInterceptorImpl::getMasterDispatchProvider(void) throw( RuntimeException )
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- return m_xMasterDispatcher;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL FmXDispatchInterceptorImpl::setMasterDispatchProvider(const Reference< ::com::sun::star::frame::XDispatchProvider>& xNewSupplier) throw( RuntimeException )
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- m_xMasterDispatcher = xNewSupplier;
-}
-
-//------------------------------------------------------------------------------
-Sequence< ::rtl::OUString > SAL_CALL FmXDispatchInterceptorImpl::getInterceptedURLs( ) throw(RuntimeException)
-{
- return m_aInterceptedURLSchemes;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL FmXDispatchInterceptorImpl::disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException )
-{
- if (m_bListening)
- {
- Reference< XDispatchProviderInterception > xIntercepted(m_xIntercepted.get(), UNO_QUERY);
- if (Source.Source == xIntercepted)
- ImplDetach();
- }
-}
-
-//------------------------------------------------------------------------------
-void FmXDispatchInterceptorImpl::ImplDetach()
-{
- ::osl::MutexGuard aGuard(getAccessSafety());
- OSL_ENSURE(m_bListening, "FmXDispatchInterceptorImpl::ImplDetach: invalid call!");
-
- // deregister ourself from the interception component
- Reference< XDispatchProviderInterception > xIntercepted(m_xIntercepted.get(), UNO_QUERY);
- if (xIntercepted.is())
- xIntercepted->releaseDispatchProviderInterceptor(static_cast<XDispatchProviderInterceptor*>(this));
-
-// m_xIntercepted = Reference< XDispatchProviderInterception >();
- // Don't reset m_xIntercepted: It may be needed by our owner to check for which object we were
- // responsible. As we hold the object with a weak reference only, this should be no problem.
- // 88936 - 23.07.2001 - frank.schoenheit@sun.com
- m_pMaster = NULL;
- m_bListening = sal_False;
-}
-
-//------------------------------------------------------------------------------
-void FmXDispatchInterceptorImpl::disposing()
-{
- // remove ourself as event listener from the interception component
- if (m_bListening)
- {
- Reference< ::com::sun::star::lang::XComponent> xInterceptedComponent(m_xIntercepted.get(), UNO_QUERY);
- if (xInterceptedComponent.is())
- xInterceptedComponent->removeEventListener(static_cast<XEventListener*>(this));
-
- // detach from the interception component
- ImplDetach();
- }
-}
-
-//==============================================================================
-//==============================================================================
-
-//------------------------------------------------------------------------------
-sal_Bool isLoadable( const Reference< XInterface >& _rxLoadable )
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::isLoadable" );
- // determines whether a form should be loaded or not
- // if there is no datasource or connection there is no reason to load a form
- Reference< XPropertySet > xSet( _rxLoadable, UNO_QUERY );
- if ( xSet.is() )
- {
- try
- {
- Reference< XConnection > xConn;
- if ( OStaticDataAccessTools().isEmbeddedInDatabase( _rxLoadable.get(), xConn ) )
- return sal_True;
-
- // is there already a active connection
- xSet->getPropertyValue(FM_PROP_ACTIVE_CONNECTION) >>= xConn;
- if ( xConn.is() )
- return sal_True;
-
- ::rtl::OUString sPropertyValue;
- OSL_VERIFY( xSet->getPropertyValue( FM_PROP_DATASOURCE ) >>= sPropertyValue );
- if ( sPropertyValue.getLength() )
- return sal_True;
-
- OSL_VERIFY( xSet->getPropertyValue( FM_PROP_URL ) >>= sPropertyValue );
- if ( sPropertyValue.getLength() )
- return sal_True;
- }
- catch(Exception&)
- {
- DBG_ERROR( "isLoadable: caught an exception!" );
- }
-
- }
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
void setConnection(const Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet, const Reference< ::com::sun::star::sdbc::XConnection>& _rxConn)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "fmtools::setConnection" );
diff --git a/svx/source/form/fmundo.cxx b/svx/source/form/fmundo.cxx
index 2436113312cc..3295d011f9ff 100644
--- a/svx/source/form/fmundo.cxx
+++ b/svx/source/form/fmundo.cxx
@@ -30,12 +30,23 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
+
#include "fmundo.hxx"
+#include "fmtools.hxx"
+#include "fmpgeimp.hxx"
+#include "svx/dbtoolsclient.hxx"
+#include "svditer.hxx"
+#include "fmobj.hxx"
+#include "fmprop.hrc"
+#include "fmresids.hrc"
+#include "svx/fmglob.hxx"
+#include "svx/dialmgr.hxx"
+#include "svx/fmmodel.hxx"
+#include "svx/fmpage.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/util/XModifyBroadcaster.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/form/XFormController.hpp>
#include <com/sun/star/container/XContainer.hpp>
#include <com/sun/star/container/XContainerListener.hpp>
#include <com/sun/star/script/XEventAttacherManager.hpp>
@@ -44,18 +55,7 @@
#include <com/sun/star/reflection/XInterfaceMethodTypeDescription.hpp>
/** === end UNO includes === **/
-#ifndef _FM_FMMODEL_HXX
-#include <svx/fmmodel.hxx>
-#endif
-#include "fmtools.hxx"
-#include <svx/fmpage.hxx>
-#ifndef _SVX_FMRESIDS_HRC
-#include "fmresids.hrc"
-#endif
#include <rtl/logfile.hxx>
-#include <svx/dialmgr.hxx>
-#include "fmpgeimp.hxx"
-#include "svx/dbtoolsclient.hxx"
#include <svtools/macitem.hxx>
#include <tools/shl.hxx>
#include <tools/diagnose_ex.h>
@@ -64,13 +64,8 @@
#include <sfx2/app.hxx>
#include <sfx2/sfx.hrc>
#include <sfx2/event.hxx>
-#include "svditer.hxx"
-#include "fmobj.hxx"
#include <osl/mutex.hxx>
-#include <svx/fmglob.hxx>
-#ifndef _SVX_FMPROP_HRC
-#include "fmprop.hrc"
-#endif
+#include <vos/mutex.hxx>
#include <comphelper/property.hxx>
#include <comphelper/uno3.hxx>
#include <comphelper/stl_types.hxx>
@@ -301,6 +296,42 @@ void FmXUndoEnvironment::Inserted(SdrObject* pObj)
}
//------------------------------------------------------------------------------
+namespace
+{
+ sal_Bool lcl_searchElement(const Reference< XIndexAccess>& xCont, const Reference< XInterface >& xElement)
+ {
+ if (!xCont.is() || !xElement.is())
+ return sal_False;
+
+ sal_Int32 nCount = xCont->getCount();
+ Reference< XInterface > xComp;
+ for (sal_Int32 i = 0; i < nCount; i++)
+ {
+ try
+ {
+ xCont->getByIndex(i) >>= xComp;
+ if (xComp.is())
+ {
+ if ( xElement == xComp )
+ return sal_True;
+ else
+ {
+ Reference< XIndexAccess> xCont2(xComp, UNO_QUERY);
+ if (xCont2.is() && lcl_searchElement(xCont2, xElement))
+ return sal_True;
+ }
+ }
+ }
+ catch(const Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+ return sal_False;
+ }
+}
+
+//------------------------------------------------------------------------------
void FmXUndoEnvironment::Inserted(FmFormObj* pObj)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXUndoEnvironment::Inserted" );
@@ -326,7 +357,7 @@ void FmXUndoEnvironment::Inserted(FmFormObj* pObj)
Reference< XIndexContainer > xNewParent;
Reference< XForm > xForm;
sal_Int32 nPos = -1;
- if ( searchElement( xForms, xObjectParent ) )
+ if ( lcl_searchElement( xForms, xObjectParent ) )
{
// the form which was the parent of the object when it was removed is still
// part of the form component hierachy of the current page
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index 222407a36021..24029a98a393 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -61,7 +61,6 @@
#include <svx/fmpage.hxx>
#include <svx/fmshell.hxx>
#include "fmpgeimp.hxx"
-#include "fmtools.hxx"
#include "fmshimp.hxx"
#include "fmservs.hxx"
#include "fmprop.hrc"
@@ -626,7 +625,7 @@ void FmFormView::createControlLabelPair( OutputDevice* _pOutDev, sal_Int32 _nXOf
);
}
// -----------------------------------------------------------------------------
-Reference< XFormController > FmFormView::GetFormController( const Reference< XForm >& _rxForm, const OutputDevice& _rDevice ) const
+Reference< runtime::XFormController > FmFormView::GetFormController( const Reference< XForm >& _rxForm, const OutputDevice& _rDevice ) const
{
return pImpl->getFormController( _rxForm, _rDevice );
}
diff --git a/svx/source/form/fmvwimp.cxx b/svx/source/form/fmvwimp.cxx
index 46750d524a4d..fc4bbc62b58e 100644
--- a/svx/source/form/fmvwimp.cxx
+++ b/svx/source/form/fmvwimp.cxx
@@ -31,7 +31,6 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#include "fmctrler.hxx"
#include "fmdocumentclassification.hxx"
#include "fmobj.hxx"
#include "fmpgeimp.hxx"
@@ -39,7 +38,6 @@
#include "fmresids.hrc"
#include "fmservs.hxx"
#include "fmshimp.hxx"
-#include "fmtools.hxx"
#include "fmundo.hxx"
#include "fmvwimp.hxx"
#include "formcontrolfactory.hxx"
@@ -84,68 +82,88 @@
#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
#include <com/sun/star/sdbc/XPreparedStatement.hpp>
#include <com/sun/star/sdb/XQueriesSupplier.hpp>
+#include <com/sun/star/container/XContainer.hpp>
/** === end UNO includes === **/
#include <comphelper/enumhelper.hxx>
#include <comphelper/extract.hxx>
+#include <comphelper/namedvaluecollection.hxx>
#include <comphelper/numbers.hxx>
#include <comphelper/property.hxx>
+#include <cppuhelper/exc_hlp.hxx>
#include <svtools/moduleoptions.hxx>
#include <tools/diagnose_ex.h>
#include <vcl/msgbox.hxx>
#include <vcl/stdtext.hxx>
+#include <vos/mutex.hxx>
#include <rtl/logfile.hxx>
#include <algorithm>
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::sdb;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::form;
-using namespace ::com::sun::star::awt;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::util;
-using namespace ::com::sun::star::script;
-using namespace ::com::sun::star::style;
-using namespace ::com::sun::star::task;
-using namespace ::com::sun::star::ui::dialogs;
using namespace ::comphelper;
-using namespace ::svxform;
using namespace ::svx;
-using com::sun::star::style::VerticalAlignment_MIDDLE;
-using ::com::sun::star::form::binding::XValueBinding;
-using ::com::sun::star::form::binding::XBindableValue;
-
-namespace svxform
-{
- //========================================================================
- class OAutoDispose
- {
- protected:
- Reference< XComponent > m_xComp;
-
- public:
- OAutoDispose( const Reference< XInterface > _rxObject );
- ~OAutoDispose();
- };
+using namespace ::svxform;
- //------------------------------------------------------------------------
- OAutoDispose::OAutoDispose( const Reference< XInterface > _rxObject )
- :m_xComp(_rxObject, UNO_QUERY)
- {
- }
-
- //------------------------------------------------------------------------
- OAutoDispose::~OAutoDispose()
- {
- if (m_xComp.is())
- m_xComp->dispose();
- }
-}
+ using namespace ::com::sun::star;
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::style::VerticalAlignment_MIDDLE;
+ using ::com::sun::star::form::FormButtonType_SUBMIT;
+ using ::com::sun::star::form::binding::XValueBinding;
+ using ::com::sun::star::form::binding::XBindableValue;
+ using ::com::sun::star::lang::XComponent;
+ using ::com::sun::star::container::XIndexAccess;
+ using ::com::sun::star::form::XForm;
+ using ::com::sun::star::form::runtime::XFormController;
+ using ::com::sun::star::script::XEventAttacherManager;
+ using ::com::sun::star::awt::XTabControllerModel;
+ using ::com::sun::star::container::XChild;
+ using ::com::sun::star::container::XEnumeration;
+ using ::com::sun::star::task::XInteractionHandler;
+ using ::com::sun::star::lang::XInitialization;
+ using ::com::sun::star::awt::XTabController;
+ using ::com::sun::star::lang::XUnoTunnel;
+ using ::com::sun::star::awt::XControlContainer;
+ using ::com::sun::star::awt::XControl;
+ using ::com::sun::star::form::XFormComponent;
+ using ::com::sun::star::form::XForm;
+ using ::com::sun::star::lang::IndexOutOfBoundsException;
+ using ::com::sun::star::lang::WrappedTargetException;
+ using ::com::sun::star::container::XContainer;
+ using ::com::sun::star::container::ContainerEvent;
+ using ::com::sun::star::lang::EventObject;
+ using ::com::sun::star::beans::NamedValue;
+ using ::com::sun::star::sdb::SQLErrorEvent;
+ using ::com::sun::star::sdbc::XRowSet;
+ using ::com::sun::star::beans::XPropertySet;
+ using ::com::sun::star::container::XElementAccess;
+ using ::com::sun::star::awt::XWindow;
+ using ::com::sun::star::awt::FocusEvent;
+ using ::com::sun::star::ui::dialogs::XExecutableDialog;
+ using ::com::sun::star::sdbc::XDataSource;
+ using ::com::sun::star::container::XIndexContainer;
+ using ::com::sun::star::sdbc::XConnection;
+ using ::com::sun::star::container::XNameAccess;
+ using ::com::sun::star::sdb::SQLContext;
+ using ::com::sun::star::sdbc::SQLWarning;
+ using ::com::sun::star::sdbc::SQLException;
+ using ::com::sun::star::util::XNumberFormatsSupplier;
+ using ::com::sun::star::util::XNumberFormats;
+ using ::com::sun::star::beans::XPropertySetInfo;
+ /** === end UNO using === **/
+ namespace FormComponentType = ::com::sun::star::form::FormComponentType;
+ namespace CommandType = ::com::sun::star::sdb::CommandType;
+ namespace DataType = ::com::sun::star::sdbc::DataType;
//------------------------------------------------------------------------------
class FmXFormView::ObjectRemoveListener : public SfxListener
@@ -181,7 +199,7 @@ FmXPageViewWinRec::FmXPageViewWinRec( const ::comphelper::ComponentContext& _rCo
{
Reference< XForm > xForm( xForms->getByIndex(i), UNO_QUERY );
if ( xForm.is() )
- setController( xForm );
+ setController( xForm, NULL );
}
}
catch( const Exception& )
@@ -207,7 +225,7 @@ void FmXPageViewWinRec::dispose()
{
try
{
- Reference< XFormController > xController( *i, UNO_SET_THROW );
+ Reference< XFormController > xController( *i, UNO_QUERY_THROW );
// detaching the events
Reference< XChild > xControllerModel( xController->getModel(), UNO_QUERY );
@@ -276,6 +294,21 @@ Any SAL_CALL FmXPageViewWinRec::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBo
}
//------------------------------------------------------------------------
+void SAL_CALL FmXPageViewWinRec::makeVisible( const Reference< XControl >& _Control ) throw (RuntimeException)
+{
+ ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
+
+ Reference< XWindow > xWindow( _Control, UNO_QUERY );
+ if ( xWindow.is() && m_pViewImpl->getView() && m_pWindow )
+ {
+ awt::Rectangle aRect = xWindow->getPosSize();
+ ::Rectangle aNewRect( aRect.X, aRect.Y, aRect.X + aRect.Width, aRect.Y + aRect.Height );
+ aNewRect = m_pWindow->PixelToLogic( aNewRect );
+ m_pViewImpl->getView()->MakeVisible( aNewRect, *m_pWindow );
+ }
+}
+
+//------------------------------------------------------------------------
Reference< XFormController > getControllerSearchChilds( const Reference< XIndexAccess > & xIndex, const Reference< XTabControllerModel > & xModel)
{
if (xIndex.is() && xIndex->getCount())
@@ -319,9 +352,8 @@ Reference< XFormController > FmXPageViewWinRec::getController( const Reference<
}
//------------------------------------------------------------------------
-void FmXPageViewWinRec::setController(const Reference< XForm > & xForm, FmXFormController* _pParent )
+void FmXPageViewWinRec::setController(const Reference< XForm > & xForm, const Reference< XFormController >& _rxParentController )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXPageViewWinRec::setController" );
DBG_ASSERT( xForm.is(), "FmXPageViewWinRec::setController: there should be a form!" );
Reference< XIndexAccess > xFormCps(xForm, UNO_QUERY);
if (!xFormCps.is())
@@ -330,58 +362,52 @@ void FmXPageViewWinRec::setController(const Reference< XForm > & xForm, FmXForm
Reference< XTabControllerModel > xTabOrder(xForm, UNO_QUERY);
// create a form controller
- FmXFormController* pController = new FmXFormController( m_aContext.getLegacyServiceFactory(), m_pViewImpl->getView(), m_pWindow );
- Reference< XFormController > xController( pController );
+ Reference< XFormController > xController( m_aContext.createComponent( FM_FORM_CONTROLLER ), UNO_QUERY );
+ if ( !xController.is() )
+ {
+ ShowServiceNotAvailableError( m_pWindow, FM_FORM_CONTROLLER, sal_True );
+ return;
+ }
Reference< XInteractionHandler > xHandler;
- if ( _pParent )
- xHandler = _pParent->getInteractionHandler();
+ if ( _rxParentController.is() )
+ xHandler = _rxParentController->getInteractionHandler();
else
{
// TODO: should we create a default handler? Not really necessary, since the
// FormController itself has a default fallback
}
if ( xHandler.is() )
- {
- Reference< XInitialization > xInitController( xController, UNO_QUERY );
- DBG_ASSERT( xInitController.is(), "FmXPageViewWinRec::setController: can't initialize the controller!" );
- if ( xInitController.is() )
- {
- Sequence< Any > aInitArgs( 1 );
- aInitArgs[ 0 ] <<= NamedValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "InteractionHandler" ) ), makeAny( xHandler ) );
- xInitController->initialize( aInitArgs );
- }
- }
+ xController->setInteractionHandler( xHandler );
- pController->setModel(xTabOrder);
- pController->setContainer( m_xControlContainer );
- pController->activateTabOrder();
- pController->addActivateListener(m_pViewImpl);
+ xController->setContext( this );
- if ( _pParent )
- _pParent->addChild(pController);
+ xController->setModel( xTabOrder );
+ xController->setContainer( m_xControlContainer );
+ xController->activateTabOrder();
+ xController->addActivateListener( m_pViewImpl );
+
+ if ( _rxParentController.is() )
+ _rxParentController->addChildController( xController );
else
{
- // Reference< XFormController > xController(pController);
m_aControllerList.push_back(xController);
- pController->setParent(*this);
+ xController->setParent( *this );
// attaching the events
- Reference< XEventAttacherManager > xEventManager(xForm->getParent(), UNO_QUERY);
+ Reference< XEventAttacherManager > xEventManager( xForm->getParent(), UNO_QUERY );
Reference< XInterface > xIfc(xController, UNO_QUERY);
xEventManager->attach(m_aControllerList.size() - 1, xIfc, makeAny(xController) );
}
-
-
// jetzt die Subforms durchgehen
sal_uInt32 nLength = xFormCps->getCount();
Reference< XForm > xSubForm;
for (sal_uInt32 i = 0; i < nLength; i++)
{
if ( xFormCps->getByIndex(i) >>= xSubForm )
- setController(xSubForm, pController);
+ setController( xSubForm, xController );
}
}
@@ -406,18 +432,12 @@ void FmXPageViewWinRec::updateTabOrder( const Reference< XForm >& _rxForm )
// if it's a sub form, then we must ensure there exist TabControllers
// for all its ancestors, too
Reference< XForm > xParentForm( _rxForm->getParent(), UNO_QUERY );
- FmXFormController* pFormController = NULL;
// there is a parent form -> look for the respective controller
+ Reference< XFormController > xParentController;
if ( xParentForm.is() )
- xTabCtrl = Reference< XTabController >( getController( xParentForm ), UNO_QUERY );
+ xParentController.set( getController( xParentForm ), UNO_QUERY );
- if ( xTabCtrl.is() )
- {
- Reference< XUnoTunnel > xTunnel( xTabCtrl, UNO_QUERY_THROW );
- pFormController = reinterpret_cast< FmXFormController* >( xTunnel->getSomething( FmXFormController::getUnoTunnelImplementationId() ) );
- }
-
- setController( _rxForm, pFormController );
+ setController( _rxForm, xParentController );
}
}
catch( const Exception& )
@@ -1068,20 +1088,14 @@ IMPL_LINK( FmXFormView, OnStartControlWizard, void*, /**/ )
if ( pWizardAsciiName )
{
// build the argument list
- Sequence< Any > aWizardArgs(1);
- // the object affected
- aWizardArgs[0] = makeAny( PropertyValue(
- ::rtl::OUString::createFromAscii("ObjectModel"),
- 0,
- makeAny( m_xLastCreatedControlModel ),
- PropertyState_DIRECT_VALUE
- ) );
+ ::comphelper::NamedValueCollection aWizardArgs;
+ aWizardArgs.put( "ObjectModel", m_xLastCreatedControlModel );
// create the wizard object
Reference< XExecutableDialog > xWizard;
try
{
- m_aContext.createComponentWithArguments( pWizardAsciiName, aWizardArgs, xWizard );
+ m_aContext.createComponentWithArguments( pWizardAsciiName, aWizardArgs.getWrappedPropertyValues(), xWizard );
}
catch( const Exception& )
{
@@ -1187,9 +1201,10 @@ SdrObject* FmXFormView::implCreateFieldControl( const ::svx::ODataAccessDescript
m_aContext.getLegacyServiceFactory()
) );
}
- catch(const SQLContext& e) { aError.Reason <<= e; }
- catch(const SQLWarning& e) { aError.Reason <<= e; }
- catch(const SQLException& e) { aError.Reason <<= e; }
+ catch ( const SQLException& )
+ {
+ aError.Reason = ::cppu::getCaughtException();
+ }
catch( const Exception& ) { /* will be asserted below */ }
if (aError.Reason.hasValue())
{
@@ -1217,14 +1232,11 @@ SdrObject* FmXFormView::implCreateFieldControl( const ::svx::ODataAccessDescript
if (xFields.is() && xFields->hasByName(sFieldName))
xFields->getByName(sFieldName) >>= xField;
-
- Reference< XNumberFormatsSupplier > xSupplier = aDBATools.getNumberFormats(xConnection, sal_False);
- if (!xSupplier.is() || !xField.is())
+ if ( !xField.is() )
return NULL;
- Reference< XNumberFormats > xNumberFormats(xSupplier->getNumberFormats());
- if (!xNumberFormats.is())
- return NULL;
+ Reference< XNumberFormatsSupplier > xSupplier( aDBATools.getNumberFormats( xConnection, sal_False ), UNO_SET_THROW );
+ Reference< XNumberFormats > xNumberFormats( xSupplier->getNumberFormats(), UNO_SET_THROW );
::rtl::OUString sLabelPostfix;
diff --git a/svx/source/form/fmctrler.cxx b/svx/source/form/formcontroller.cxx
index 48db5acbb01e..ed3e37c3812b 100644
--- a/svx/source/form/fmctrler.cxx
+++ b/svx/source/form/formcontroller.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmctrler.cxx,v $
- * $Revision: 1.71 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -31,24 +28,18 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#include "confirmdelete.hxx"
#include "fmcontrolbordermanager.hxx"
#include "fmcontrollayout.hxx"
-#include "fmctrler.hxx"
-#include "fmdispatch.hxx"
+#include "formcontroller.hxx"
+#include "formfeaturedispatcher.hxx"
#include "fmdocumentclassification.hxx"
+#include "formcontrolling.hxx"
#include "fmprop.hrc"
+#include "svx/dialmgr.hxx"
#include "fmresids.hrc"
#include "fmservs.hxx"
-#include "fmshimp.hxx"
-#include "fmtools.hxx"
#include "fmurl.hxx"
-#include "svx/dialmgr.hxx"
-#include "svx/fmshell.hxx"
-#include "svx/fmview.hxx"
-#include "svx/sdrpagewindow.hxx"
-#include "svx/svdpagv.hxx"
-#include "trace.hxx"
+#include "fmtools.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/awt/FocusChangeReason.hpp>
@@ -72,6 +63,13 @@
#include <com/sun/star/sdb/XInteractionSupplyParameters.hpp>
#include <com/sun/star/sdbc/ColumnValue.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
+#include <com/sun/star/form/runtime/FormOperations.hpp>
+#include <com/sun/star/form/runtime/FormFeature.hpp>
+#include <com/sun/star/container/XContainer.hpp>
+#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
+#include <com/sun/star/util/XNumberFormatter.hpp>
+#include <com/sun/star/sdb/SQLContext.hpp>
+#include <com/sun/star/sdb/XColumn.hpp>
/** === end UNO includes === **/
#include <comphelper/enumhelper.hxx>
@@ -84,9 +82,6 @@
#include <comphelper/uno3.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <cppuhelper/typeprovider.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/viewsh.hxx>
#include <toolkit/controls/unocontrol.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <tools/debug.hxx>
@@ -94,32 +89,126 @@
#include <tools/shl.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/svapp.hxx>
+#include <vos/mutex.hxx>
#include <rtl/logfile.hxx>
#include <algorithm>
#include <functional>
using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::awt;
-using namespace ::com::sun::star::sdb;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::task;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::util;
-using namespace ::com::sun::star::form;
-using namespace ::com::sun::star::form::validation;
-using namespace ::com::sun::star::form::runtime;
-using namespace ::com::sun::star::frame;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::script;
-using namespace ::com::sun::star::container;
using namespace ::comphelper;
using namespace ::connectivity;
-using namespace ::svxform;
using namespace ::connectivity::simple;
+//------------------------------------------------------------------
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
+ FormController_NewInstance_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & _rxORB )
+{
+ return *( new ::svxform::FormController( _rxORB ) );
+}
+
+namespace svxform
+{
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::sdb::XColumn;
+ using ::com::sun::star::awt::XControl;
+ using ::com::sun::star::awt::XTabController;
+ using ::com::sun::star::awt::XToolkit;
+ using ::com::sun::star::awt::XWindowPeer;
+ using ::com::sun::star::form::XGrid;
+ using ::com::sun::star::beans::XPropertySet;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::container::XIndexAccess;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::beans::XPropertySetInfo;
+ using ::com::sun::star::beans::PropertyValue;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::lang::IndexOutOfBoundsException;
+ using ::com::sun::star::sdb::XInteractionSupplyParameters;
+ using ::com::sun::star::awt::XTextComponent;
+ using ::com::sun::star::awt::XTextListener;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::frame::XDispatch;
+ using ::com::sun::star::lang::XMultiServiceFactory;
+ using ::com::sun::star::uno::XAggregation;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::lang::IllegalArgumentException;
+ using ::com::sun::star::sdbc::XConnection;
+ using ::com::sun::star::sdbc::XRowSet;
+ using ::com::sun::star::sdbc::XDatabaseMetaData;
+ using ::com::sun::star::util::XNumberFormatsSupplier;
+ using ::com::sun::star::util::XNumberFormatter;
+ using ::com::sun::star::sdbcx::XColumnsSupplier;
+ using ::com::sun::star::container::XNameAccess;
+ using ::com::sun::star::lang::EventObject;
+ using ::com::sun::star::beans::Property;
+ using ::com::sun::star::container::XEnumeration;
+ using ::com::sun::star::form::XFormComponent;
+ using ::com::sun::star::form::runtime::XFormOperations;
+ using ::com::sun::star::form::runtime::FilterEvent;
+ using ::com::sun::star::form::runtime::XFilterControllerListener;
+ using ::com::sun::star::awt::XControlContainer;
+ using ::com::sun::star::container::XIdentifierReplace;
+ using ::com::sun::star::lang::WrappedTargetException;
+ using ::com::sun::star::form::XFormControllerListener;
+ using ::com::sun::star::awt::XWindow;
+ using ::com::sun::star::sdbc::XResultSet;
+ using ::com::sun::star::awt::XControlModel;
+ using ::com::sun::star::awt::XTabControllerModel;
+ using ::com::sun::star::beans::PropertyChangeEvent;
+ using ::com::sun::star::form::validation::XValidatableFormComponent;
+ using ::com::sun::star::form::XLoadable;
+ using ::com::sun::star::script::XEventAttacherManager;
+ using ::com::sun::star::form::XBoundControl;
+ using ::com::sun::star::beans::XPropertyChangeListener;
+ using ::com::sun::star::awt::TextEvent;
+ using ::com::sun::star::form::XBoundComponent;
+ using ::com::sun::star::awt::XCheckBox;
+ using ::com::sun::star::awt::XComboBox;
+ using ::com::sun::star::awt::XListBox;
+ using ::com::sun::star::awt::ItemEvent;
+ using ::com::sun::star::util::XModifyListener;
+ using ::com::sun::star::form::XReset;
+ using ::com::sun::star::frame::XDispatchProviderInterception;
+ using ::com::sun::star::form::XGridControl;
+ using ::com::sun::star::awt::XVclWindowPeer;
+ using ::com::sun::star::form::validation::XValidator;
+ using ::com::sun::star::awt::FocusEvent;
+ using ::com::sun::star::sdb::SQLContext;
+ using ::com::sun::star::container::XChild;
+ using ::com::sun::star::form::TabulatorCycle_RECORDS;
+ using ::com::sun::star::container::ContainerEvent;
+ using ::com::sun::star::lang::DisposedException;
+ using ::com::sun::star::lang::Locale;
+ using ::com::sun::star::beans::NamedValue;
+ using ::com::sun::star::lang::NoSupportException;
+ using ::com::sun::star::sdb::RowChangeEvent;
+ using ::com::sun::star::frame::XStatusListener;
+ using ::com::sun::star::frame::XDispatchProviderInterceptor;
+ using ::com::sun::star::sdb::SQLErrorEvent;
+ using ::com::sun::star::form::DatabaseParameterEvent;
+ using ::com::sun::star::sdb::ParametersRequest;
+ using ::com::sun::star::task::XInteractionRequest;
+ using ::com::sun::star::util::URL;
+ using ::com::sun::star::frame::FeatureStateEvent;
+ using ::com::sun::star::form::runtime::XFormControllerContext;
+ using ::com::sun::star::task::XInteractionHandler;
+ using ::com::sun::star::form::runtime::FormOperations;
+ using ::com::sun::star::container::XContainer;
+ using ::com::sun::star::sdbc::SQLWarning;
+ /** === end UNO using === **/
+ namespace ColumnValue = ::com::sun::star::sdbc::ColumnValue;
+ namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute;
+ namespace FocusChangeReason = ::com::sun::star::awt::FocusChangeReason;
+ namespace RowChangeAction = ::com::sun::star::sdb::RowChangeAction;
+ namespace FormFeature = ::com::sun::star::form::runtime::FormFeature;
+
//==============================================================================
// ColumnInfo
//==============================================================================
@@ -184,7 +273,6 @@ ColumnInfoCache::ColumnInfoCache( const Reference< XColumnsSupplier >& _rxColSup
:m_aColumns()
,m_bControlsInitialized( false )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "ColumnInfoCache::ColumnInfoCache" );
try
{
m_aColumns.clear();
@@ -242,7 +330,6 @@ namespace
//------------------------------------------------------------------------------
void ColumnInfoCache::deinitializeControls()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "ColumnInfoCache::deinitializeControls" );
for ( ColumnInfos::iterator col = m_aColumns.begin();
col != m_aColumns.end();
++col
@@ -255,7 +342,6 @@ void ColumnInfoCache::deinitializeControls()
//------------------------------------------------------------------------------
void ColumnInfoCache::initializeControls( const Sequence< Reference< XControl > >& _rControls )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "ColumnInfoCache::initializeControls" );
try
{
// for every of our known columns, find the controls which are bound to this column
@@ -338,7 +424,6 @@ void ColumnInfoCache::initializeControls( const Sequence< Reference< XControl >
//------------------------------------------------------------------------------
const ColumnInfo& ColumnInfoCache::getColumnInfo( size_t _pos )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "ColumnInfoCache::getColumnInfo" );
if ( _pos >= m_aColumns.size() )
throw IndexOutOfBoundsException();
@@ -424,7 +509,7 @@ void FmXAutoControl::ImplSetPeerProperty( const ::rtl::OUString& rPropName, cons
}
//------------------------------------------------------------------------------
-IMPL_LINK( FmXFormController, OnActivateTabOrder, void*, /*EMPTYTAG*/ )
+IMPL_LINK( FormController, OnActivateTabOrder, void*, /*EMPTYTAG*/ )
{
activateTabOrder();
return 1;
@@ -441,10 +526,10 @@ struct UpdateAllListeners : public ::std::unary_function< Reference< XDispatch >
}
};
//..............................................................................
-IMPL_LINK( FmXFormController, OnInvalidateFeatures, void*, /*_pNotInterestedInThisParam*/ )
+IMPL_LINK( FormController, OnInvalidateFeatures, void*, /*_pNotInterestedInThisParam*/ )
{
::osl::MutexGuard aGuard( m_aMutex );
- for ( ::std::set< sal_Int32 >::const_iterator aLoop = m_aInvalidFeatures.begin();
+ for ( ::std::set< sal_Int16 >::const_iterator aLoop = m_aInvalidFeatures.begin();
aLoop != m_aInvalidFeatures.end();
++aLoop
)
@@ -462,48 +547,28 @@ IMPL_LINK( FmXFormController, OnInvalidateFeatures, void*, /*_pNotInterestedInTh
/*************************************************************************/
+DBG_NAME( FormController )
//------------------------------------------------------------------
-Reference< XInterface > SAL_CALL
- FmXFormController_NewInstance_Impl(const Reference< XMultiServiceFactory > & _rxORB)
-{
- return *(new FmXFormController(_rxORB));
-}
-
-//------------------------------------------------------------------
-namespace fmctrlr
-{
- const ::rtl::OUString& getDataModeIdentifier()
- {
- static ::rtl::OUString s_sDataModeIdentifier = DATA_MODE;
- return s_sDataModeIdentifier;
- }
-}
-using namespace fmctrlr;
-
-DBG_NAME( FmXFormController )
-//------------------------------------------------------------------
-FmXFormController::FmXFormController(const Reference< XMultiServiceFactory > & _rxORB,
- FmFormView* _pView, Window* _pWindow )
- :FmXFormController_BASE( m_aMutex )
- ,OPropertySetHelper( FmXFormController_BASE::rBHelper )
- ,OSQLParserClient(_rxORB)
- ,m_xORB(_rxORB)
+FormController::FormController(const Reference< XMultiServiceFactory > & _rxORB )
+ :FormController_BASE( m_aMutex )
+ ,OPropertySetHelper( FormController_BASE::rBHelper )
+ ,OSQLParserClient( _rxORB )
+ ,m_aContext( _rxORB )
,m_aActivateListeners(m_aMutex)
,m_aModifyListeners(m_aMutex)
,m_aErrorListeners(m_aMutex)
,m_aDeleteListeners(m_aMutex)
,m_aRowSetApproveListeners(m_aMutex)
,m_aParameterListeners(m_aMutex)
- ,m_pView(_pView)
- ,m_pWindow(_pWindow)
+ ,m_aFilterListeners(m_aMutex)
,m_pControlBorderManager( new ::svxform::ControlBorderManager )
- ,m_aControllerFeatures( _rxORB, this )
- ,m_aMode(getDataModeIdentifier())
- ,m_aLoadEvent( LINK( this, FmXFormController, OnLoad ) )
- ,m_aToggleEvent( LINK( this, FmXFormController, OnToggleAutoFields ) )
- ,m_aActivationEvent( LINK( this, FmXFormController, OnActivated ) )
- ,m_aDeactivationEvent( LINK( this, FmXFormController, OnDeactivated ) )
- ,m_nCurrentFilterPosition(0)
+ ,m_xFormOperations()
+ ,m_aMode( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) ) )
+ ,m_aLoadEvent( LINK( this, FormController, OnLoad ) )
+ ,m_aToggleEvent( LINK( this, FormController, OnToggleAutoFields ) )
+ ,m_aActivationEvent( LINK( this, FormController, OnActivated ) )
+ ,m_aDeactivationEvent( LINK( this, FormController, OnDeactivated ) )
+ ,m_nCurrentFilterPosition(-1)
,m_bCurrentRecordModified(sal_False)
,m_bCurrentRecordNew(sal_False)
,m_bLocked(sal_False)
@@ -519,17 +584,16 @@ FmXFormController::FmXFormController(const Reference< XMultiServiceFactory > & _
,m_bDetachEvents(sal_True)
,m_bAttemptedHandlerCreation( false )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::FmXFormController" );
- DBG_CTOR( FmXFormController, NULL );
+ DBG_CTOR( FormController, NULL );
::comphelper::increment(m_refCount);
{
{
m_xAggregate = Reference< XAggregation >(
- m_xORB->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.awt.TabController" ) ),
+ m_aContext.createComponent( "com.sun.star.awt.TabController" ),
UNO_QUERY
);
- DBG_ASSERT( m_xAggregate.is(), "FmXFormController::FmXFormController : could not create my aggregate !" );
+ DBG_ASSERT( m_xAggregate.is(), "FormController::FormController : could not create my aggregate !" );
m_xTabController = Reference< XTabController >( m_xAggregate, UNO_QUERY );
}
@@ -539,14 +603,14 @@ FmXFormController::FmXFormController(const Reference< XMultiServiceFactory > & _
::comphelper::decrement(m_refCount);
m_aTabActivationTimer.SetTimeout( 500 );
- m_aTabActivationTimer.SetTimeoutHdl( LINK( this, FmXFormController, OnActivateTabOrder ) );
+ m_aTabActivationTimer.SetTimeoutHdl( LINK( this, FormController, OnActivateTabOrder ) );
m_aFeatureInvalidationTimer.SetTimeout( 200 );
- m_aFeatureInvalidationTimer.SetTimeoutHdl( LINK( this, FmXFormController, OnInvalidateFeatures ) );
+ m_aFeatureInvalidationTimer.SetTimeoutHdl( LINK( this, FormController, OnInvalidateFeatures ) );
}
//------------------------------------------------------------------
-FmXFormController::~FmXFormController()
+FormController::~FormController()
{
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -565,6 +629,10 @@ FmXFormController::~FmXFormController()
disposeAllFeaturesAndDispatchers();
+ if ( m_xFormOperations.is() )
+ m_xFormOperations->dispose();
+ m_xFormOperations.clear();
+
// Freigeben der Aggregation
if ( m_xAggregate.is() )
{
@@ -574,28 +642,25 @@ FmXFormController::~FmXFormController()
DELETEZ( m_pControlBorderManager );
- DBG_DTOR( FmXFormController, NULL );
+ DBG_DTOR( FormController, NULL );
}
// -----------------------------------------------------------------------------
-void SAL_CALL FmXFormController::acquire() throw ()
+void SAL_CALL FormController::acquire() throw ()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::acquire" );
- FmXFormController_BASE::acquire();
+ FormController_BASE::acquire();
}
// -----------------------------------------------------------------------------
-void SAL_CALL FmXFormController::release() throw ()
+void SAL_CALL FormController::release() throw ()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::release" );
- FmXFormController_BASE::release();
+ FormController_BASE::release();
}
//------------------------------------------------------------------
-Any SAL_CALL FmXFormController::queryInterface( const Type& _rType ) throw(RuntimeException)
+Any SAL_CALL FormController::queryInterface( const Type& _rType ) throw(RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::queryInterface" );
- Any aRet = FmXFormController_BASE::queryInterface( _rType );
+ Any aRet = FormController_BASE::queryInterface( _rType );
if ( !aRet.hasValue() )
aRet = OPropertySetHelper::queryInterface( _rType );
if ( !aRet.hasValue() )
@@ -604,9 +669,8 @@ Any SAL_CALL FmXFormController::queryInterface( const Type& _rType ) throw(Runti
}
//------------------------------------------------------------------------------
-Sequence< sal_Int8 > SAL_CALL FmXFormController::getImplementationId() throw( RuntimeException )
+Sequence< sal_Int8 > SAL_CALL FormController::getImplementationId() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getImplementationId" );
static ::cppu::OImplementationId* pId = NULL;
if ( !pId )
{
@@ -621,56 +685,18 @@ Sequence< sal_Int8 > SAL_CALL FmXFormController::getImplementationId() throw( Ru
}
//------------------------------------------------------------------------------
-Sequence< Type > SAL_CALL FmXFormController::getTypes( ) throw(RuntimeException)
+Sequence< Type > SAL_CALL FormController::getTypes( ) throw(RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getTypes" );
return comphelper::concatSequences(
- FmXFormController_BASE::getTypes(),
+ FormController_BASE::getTypes(),
::cppu::OPropertySetHelper::getTypes()
);
}
-// -----------------------------------------------------------------------------
-// XUnoTunnel
-Sequence< sal_Int8 > FmXFormController::getUnoTunnelImplementationId()
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getUnoTunnelImplementationId" );
- static ::cppu::OImplementationId * pId = NULL;
- if ( !pId )
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if ( !pId )
- {
- static ::cppu::OImplementationId aId;
- pId = &aId;
- }
- }
- return pId->getImplementationId();
-}
-//------------------------------------------------------------------------------
-FmXFormController* FmXFormController::getImplementation( const Reference< XInterface >& _rxComponent )
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getImplementation" );
- Reference< XUnoTunnel > xTunnel( _rxComponent, UNO_QUERY );
- if ( xTunnel.is() )
- return reinterpret_cast< FmXFormController* >( xTunnel->getSomething( getUnoTunnelImplementationId() ) );
- return NULL;
-}
-//------------------------------------------------------------------------------
-sal_Int64 SAL_CALL FmXFormController::getSomething(Sequence<sal_Int8> const& rId)throw( RuntimeException )
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getSomething" );
- if (rId.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(), rId.getConstArray(), 16 ) )
- return reinterpret_cast< sal_Int64 >( this );
-
- return sal_Int64();
-}
-
// XServiceInfo
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::supportsService(const ::rtl::OUString& ServiceName) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::supportsService(const ::rtl::OUString& ServiceName) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::supportsService" );
Sequence< ::rtl::OUString> aSNL(getSupportedServiceNames());
const ::rtl::OUString * pArray = aSNL.getConstArray();
for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
@@ -680,16 +706,14 @@ sal_Bool SAL_CALL FmXFormController::supportsService(const ::rtl::OUString& Serv
}
//------------------------------------------------------------------------------
-::rtl::OUString SAL_CALL FmXFormController::getImplementationName() throw( RuntimeException )
+::rtl::OUString SAL_CALL FormController::getImplementationName() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getImplementationName" );
- return ::rtl::OUString::createFromAscii("com.sun.star.form.FmXFormController");
+ return ::rtl::OUString::createFromAscii( "org.openoffice.comp.svx.FormController" );
}
//------------------------------------------------------------------------------
-Sequence< ::rtl::OUString> SAL_CALL FmXFormController::getSupportedServiceNames(void) throw( RuntimeException )
+Sequence< ::rtl::OUString> SAL_CALL FormController::getSupportedServiceNames(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getSupportedServiceNames" );
// service names which are supported only, but cannot be used to created an
// instance at a service factory
Sequence< ::rtl::OUString > aNonCreatableServiceNames( 1 );
@@ -701,94 +725,107 @@ Sequence< ::rtl::OUString> SAL_CALL FmXFormController::getSupportedServiceNames(
}
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::approveReset(const EventObject& /*rEvent*/) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::approveReset(const EventObject& /*rEvent*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::approveReset" );
return sal_True;
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::resetted(const EventObject& rEvent) throw( RuntimeException )
+void SAL_CALL FormController::resetted(const EventObject& rEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::resetted" );
::osl::MutexGuard aGuard(m_aMutex);
if (getCurrentControl().is() && (getCurrentControl()->getModel() == rEvent.Source))
m_bModified = sal_False;
}
//------------------------------------------------------------------------------
-Sequence< ::rtl::OUString> FmXFormController::getSupportedServiceNames_Static(void)
+Sequence< ::rtl::OUString> FormController::getSupportedServiceNames_Static(void)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getSupportedServiceNames_Static" );
static Sequence< ::rtl::OUString> aServices;
if (!aServices.getLength())
{
aServices.realloc(2);
- aServices.getArray()[0] = ::rtl::OUString::createFromAscii("com.sun.star.form.FormController");
+ aServices.getArray()[0] = FM_FORM_CONTROLLER;
aServices.getArray()[1] = ::rtl::OUString::createFromAscii("com.sun.star.awt.control.TabController");
}
return aServices;
}
-//------------------------------------------------------------------------------
-void FmXFormController::setCurrentFilterPosition( sal_Int32 nPos )
+// -----------------------------------------------------------------------------
+namespace
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setCurrentFilterPosition" );
- DBG_ASSERT(nPos < (sal_Int32)m_aFilters.size(), "Invalid Position");
-
- if (nPos != m_nCurrentFilterPosition)
+ struct ResetComponentText : public ::std::unary_function< Reference< XTextComponent >, void >
{
- m_nCurrentFilterPosition = nPos;
+ void operator()( const Reference< XTextComponent >& _rxText )
+ {
+ _rxText->setText( ::rtl::OUString() );
+ }
+ };
- // reset the text for all controls
- for (FmFilterControls::const_iterator iter = m_aFilterControls.begin();
- iter != m_aFilterControls.end(); iter++)
- (*iter).first->setText(rtl::OUString());
+ struct RemoveComponentTextListener : public ::std::unary_function< Reference< XTextComponent >, void >
+ {
+ RemoveComponentTextListener( const Reference< XTextListener >& _rxListener )
+ :m_xListener( _rxListener )
+ {
+ }
- if ( nPos != -1 )
+ void operator()( const Reference< XTextComponent >& _rxText )
{
- impl_setTextOnAllFilter_throw();
+ _rxText->removeTextListener( m_xListener );
}
- }
+
+ private:
+ Reference< XTextListener > m_xListener;
+ };
}
+
// -----------------------------------------------------------------------------
-void FmXFormController::impl_setTextOnAllFilter_throw()
+void FormController::impl_setTextOnAllFilter_throw()
{
+ // reset the text for all controls
+ ::std::for_each( m_aFilterComponents.begin(), m_aFilterComponents.end(), ResetComponentText() );
+
+ if ( m_aFilterRows.empty() )
+ // nothing to do anymore
+ return;
+
+ if ( m_nCurrentFilterPosition < 0 )
+ return;
+
// set the text for all filters
- OSL_ENSURE( ( m_aFilters.size() > (size_t)m_nCurrentFilterPosition ) && ( m_nCurrentFilterPosition >= 0 ),
- "FmXFormController::setCurrentFilterPosition: m_nCurrentFilterPosition too big" );
+ OSL_ENSURE( m_aFilterRows.size() > (size_t)m_nCurrentFilterPosition,
+ "FormController::impl_setTextOnAllFilter_throw: m_nCurrentFilterPosition too big" );
- if ( ( m_nCurrentFilterPosition >= 0 ) && ( (size_t)m_nCurrentFilterPosition < m_aFilters.size() ) )
+ if ( (size_t)m_nCurrentFilterPosition < m_aFilterRows.size() )
{
- FmFilterRow& rRow = m_aFilters[m_nCurrentFilterPosition];
- for (FmFilterRow::const_iterator iter2 = rRow.begin();
- iter2 != rRow.end(); iter2++)
+ FmFilterRow& rRow = m_aFilterRows[ m_nCurrentFilterPosition ];
+ for ( FmFilterRow::const_iterator iter2 = rRow.begin();
+ iter2 != rRow.end();
+ ++iter2
+ )
{
- (*iter2).first->setText((*iter2).second);
+ iter2->first->setText( iter2->second );
}
- } // if ( ( m_nCurrentFilterPosition >= 0 ) && ( (size_t)m_nCurrentFilterPosition < m_aFilters.size() ) )
+ }
}
// OPropertySetHelper
//------------------------------------------------------------------------------
-sal_Bool FmXFormController::convertFastPropertyValue( Any & /*rConvertedValue*/, Any & /*rOldValue*/,
+sal_Bool FormController::convertFastPropertyValue( Any & /*rConvertedValue*/, Any & /*rOldValue*/,
sal_Int32 /*nHandle*/, const Any& /*rValue*/ )
throw( IllegalArgumentException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::convertFastPropertyValue" );
return sal_False;
}
//------------------------------------------------------------------------------
-void FmXFormController::setFastPropertyValue_NoBroadcast( sal_Int32 /*nHandle*/, const Any& /*rValue*/ )
+void FormController::setFastPropertyValue_NoBroadcast( sal_Int32 /*nHandle*/, const Any& /*rValue*/ )
throw( Exception )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setFastPropertyValue_NoBroadcast" );
}
//------------------------------------------------------------------------------
-void FmXFormController::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const
+void FormController::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getFastPropertyValue" );
switch (nHandle)
{
case FM_ATTR_FILTER:
@@ -799,9 +836,8 @@ void FmXFormController::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) c
if (xConnection.is())
{
Reference< XDatabaseMetaData> xMetaData(xConnection->getMetaData());
- Reference< XNumberFormatsSupplier> xFormatSupplier( aStaticTools.getNumberFormats(xConnection, sal_True));
- Reference< XNumberFormatter> xFormatter(m_xORB
- ->createInstance(::rtl::OUString::createFromAscii("com.sun.star.util.NumberFormatter")), UNO_QUERY);
+ Reference< XNumberFormatsSupplier> xFormatSupplier( aStaticTools.getNumberFormats( xConnection, sal_True ) );
+ Reference< XNumberFormatter> xFormatter( m_aContext.createComponent( "com.sun.star.util.NumberFormatter" ), UNO_QUERY_THROW );
xFormatter->attachNumberFormatsSupplier(xFormatSupplier);
Reference< XColumnsSupplier> xSupplyCols(m_xModelAsIndex, UNO_QUERY);
@@ -809,40 +845,48 @@ void FmXFormController::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) c
::rtl::OUString aQuote( xMetaData->getIdentifierQuoteString() );
- // now add the filter rows
- for ( FmFilterRows::const_iterator row = m_aFilters.begin(); row != m_aFilters.end(); ++row )
+ // now add the filter rows
+ try
{
- const FmFilterRow& rRow = *row;
+ for ( FmFilterRows::const_iterator row = m_aFilterRows.begin(); row != m_aFilterRows.end(); ++row )
+ {
+ const FmFilterRow& rRow = *row;
- if ( rRow.empty() )
- continue;
+ if ( rRow.empty() )
+ continue;
- if ( aFilter.getLength() )
- aFilter.appendAscii( " OR " );
+ if ( aFilter.getLength() )
+ aFilter.appendAscii( " OR " );
- aFilter.appendAscii( "( " );
- for ( FmFilterRow::const_iterator condition = rRow.begin(); condition != rRow.end(); ++condition )
- {
- // get the field of the controls map
- Reference< XTextComponent > xText = condition->first;
- Reference< XPropertySet > xField = m_aFilterControls.find( xText )->second;
- DBG_ASSERT( xField.is(), "FmXFormController::getFastPropertyValue: no field found!" );
- if ( condition != rRow.begin() )
- aFilter.appendAscii( " AND " );
-
- ::rtl::OUString sFilterValue( condition->second );
-
- ::rtl::OUString sErrorMsg, sCriteria;
- ::rtl::Reference< ISQLParseNode > xParseNode = predicateTree( sErrorMsg, sFilterValue, xFormatter, xField );
- OSL_ENSURE( xParseNode.is(), "FmXFormController::getFastPropertyValue: could not parse the field value predicate!" );
- if ( xParseNode.is() )
+ aFilter.appendAscii( "( " );
+ for ( FmFilterRow::const_iterator condition = rRow.begin(); condition != rRow.end(); ++condition )
{
- // don't use a parse context here, we need it unlocalized
- xParseNode->parseNodeToStr( sCriteria, xConnection, NULL );
- aFilter.append( sCriteria );
+ // get the field of the controls map
+ Reference< XControl > xControl( condition->first, UNO_QUERY_THROW );
+ Reference< XPropertySet > xModelProps( xControl->getModel(), UNO_QUERY_THROW );
+ Reference< XPropertySet > xField( xModelProps->getPropertyValue( FM_PROP_BOUNDFIELD ), UNO_QUERY_THROW );
+ if ( condition != rRow.begin() )
+ aFilter.appendAscii( " AND " );
+
+ ::rtl::OUString sFilterValue( condition->second );
+
+ ::rtl::OUString sErrorMsg, sCriteria;
+ ::rtl::Reference< ISQLParseNode > xParseNode = predicateTree( sErrorMsg, sFilterValue, xFormatter, xField );
+ OSL_ENSURE( xParseNode.is(), "FormController::getFastPropertyValue: could not parse the field value predicate!" );
+ if ( xParseNode.is() )
+ {
+ // don't use a parse context here, we need it unlocalized
+ xParseNode->parseNodeToStr( sCriteria, xConnection, NULL );
+ aFilter.append( sCriteria );
+ }
}
+ aFilter.appendAscii( " )" );
}
- aFilter.appendAscii( " )" );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ aFilter.setLength(0);
}
}
rValue <<= aFilter.makeStringAndClear();
@@ -850,15 +894,14 @@ void FmXFormController::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) c
break;
case FM_ATTR_FORM_OPERATIONS:
- rValue <<= m_aControllerFeatures->getFormOperations();
+ rValue <<= m_xFormOperations;
break;
}
}
//------------------------------------------------------------------------------
-Reference< XPropertySetInfo > FmXFormController::getPropertySetInfo() throw( RuntimeException )
+Reference< XPropertySetInfo > FormController::getPropertySetInfo() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getPropertySetInfo" );
static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
return xInfo;
}
@@ -872,12 +915,11 @@ pDesc[nPos++] = Property(FM_PROP_##varname, FM_ATTR_##varname, ::getCppuType((co
DECL_PROP_CORE(varname, type) PropertyAttribute::attrib1)
//------------------------------------------------------------------------------
-void FmXFormController::fillProperties(
+void FormController::fillProperties(
Sequence< Property >& /* [out] */ _rProps,
Sequence< Property >& /* [out] */ /*_rAggregateProps*/
) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::fillProperties" );
_rProps.realloc(2);
sal_Int32 nPos = 0;
Property* pDesc = _rProps.getArray();
@@ -886,90 +928,229 @@ void FmXFormController::fillProperties(
}
//------------------------------------------------------------------------------
-::cppu::IPropertyArrayHelper& FmXFormController::getInfoHelper()
+::cppu::IPropertyArrayHelper& FormController::getInfoHelper()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getInfoHelper" );
return *getArrayHelper();
}
+// XFilterController
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::addFilterControllerListener( const Reference< XFilterControllerListener >& _Listener ) throw( RuntimeException )
+{
+ m_aFilterListeners.addInterface( _Listener );
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::removeFilterControllerListener( const Reference< XFilterControllerListener >& _Listener ) throw( RuntimeException )
+{
+ m_aFilterListeners.removeInterface( _Listener );
+}
+
+//------------------------------------------------------------------------------
+::sal_Int32 SAL_CALL FormController::getFilterComponents() throw( ::com::sun::star::uno::RuntimeException )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ return m_aFilterComponents.size();
+}
+
+//------------------------------------------------------------------------------
+::sal_Int32 SAL_CALL FormController::getDisjunctiveTerms() throw( ::com::sun::star::uno::RuntimeException )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ return m_aFilterRows.size();
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::setPredicateExpression( ::sal_Int32 _Component, ::sal_Int32 _Term, const ::rtl::OUString& _PredicateExpression ) throw( RuntimeException, IndexOutOfBoundsException )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ if ( ( _Component < 0 ) || ( _Component >= getFilterComponents() ) || ( _Term < 0 ) || ( _Term >= getDisjunctiveTerms() ) )
+ throw IndexOutOfBoundsException( ::rtl::OUString(), *this );
+
+ Reference< XTextComponent > xText( m_aFilterComponents[ _Component ] );
+ xText->setText( _PredicateExpression );
+
+ FmFilterRow& rFilterRow = m_aFilterRows[ _Term ];
+ if ( _PredicateExpression.getLength() )
+ rFilterRow[ xText ] = _PredicateExpression;
+ else
+ rFilterRow.erase( xText );
+}
+
+//------------------------------------------------------------------------------
+Reference< XControl > FormController::getFilterComponent( ::sal_Int32 _Component ) throw( RuntimeException, IndexOutOfBoundsException )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ if ( ( _Component < 0 ) || ( _Component >= getFilterComponents() ) )
+ throw IndexOutOfBoundsException( ::rtl::OUString(), *this );
+
+ return Reference< XControl >( m_aFilterComponents[ _Component ], UNO_QUERY );
+}
+
+//------------------------------------------------------------------------------
+Sequence< Sequence< ::rtl::OUString > > FormController::getPredicateExpressions() throw( RuntimeException )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ Sequence< Sequence< ::rtl::OUString > > aExpressions( m_aFilterRows.size() );
+ sal_Int32 termIndex = 0;
+ for ( FmFilterRows::const_iterator row = m_aFilterRows.begin();
+ row != m_aFilterRows.end();
+ ++row, ++termIndex
+ )
+ {
+ const FmFilterRow& rRow( *row );
+
+ Sequence< ::rtl::OUString > aConjunction( m_aFilterComponents.size() );
+ sal_Int32 componentIndex = 0;
+ for ( FilterComponents::const_iterator comp = m_aFilterComponents.begin();
+ comp != m_aFilterComponents.end();
+ ++comp, ++componentIndex
+ )
+ {
+ FmFilterRow::const_iterator predicate = rRow.find( *comp );
+ if ( predicate != rRow.end() )
+ aConjunction[ componentIndex ] = predicate->second;
+ }
+
+ aExpressions[ termIndex ] = aConjunction;
+ }
+
+ return aExpressions;
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::removeDisjunctiveTerm( ::sal_Int32 _Term ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ // SYNCHRONIZED -->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ if ( ( _Term < 0 ) || ( _Term >= getDisjunctiveTerms() ) )
+ throw IndexOutOfBoundsException( ::rtl::OUString(), *this );
+
+ // if the to-be-deleted row is our current row, we need to shift
+ if ( _Term == m_nCurrentFilterPosition )
+ {
+ if ( m_nCurrentFilterPosition < sal_Int32( m_aFilterRows.size() - 1 ) )
+ ++m_nCurrentFilterPosition;
+ else
+ --m_nCurrentFilterPosition;
+ }
+
+ FmFilterRows::iterator pos = m_aFilterRows.begin() + _Term;
+ m_aFilterRows.erase( pos );
+
+ // adjust m_nCurrentFilterPosition if the removed row preceeded it
+ if ( _Term < m_nCurrentFilterPosition )
+ --m_nCurrentFilterPosition;
+
+ OSL_POSTCOND( ( m_nCurrentFilterPosition < 0 ) == ( m_aFilterRows.empty() ),
+ "FormController::removeDisjunctiveTerm: inconsistency!" );
+
+ // update the texts in the filter controls
+ impl_setTextOnAllFilter_throw();
+
+ FilterEvent aEvent;
+ aEvent.Source = *this;
+ aEvent.DisjunctiveTerm = _Term;
+ aGuard.clear();
+ // <-- SYNCHRONIZED
+
+ m_aFilterListeners.notifyEach( &XFilterControllerListener::disjunctiveTermRemoved, aEvent );
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::appendEmptyDisjunctiveTerm() throw (RuntimeException)
+{
+ // SYNCHRONIZED -->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ impl_appendEmptyFilterRow( aGuard );
+ // <-- SYNCHRONIZED
+}
+
+//------------------------------------------------------------------------------
+::sal_Int32 SAL_CALL FormController::getActiveTerm() throw (RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ return m_nCurrentFilterPosition;
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::setActiveTerm( ::sal_Int32 _ActiveTerm ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ if ( ( _ActiveTerm < 0 ) || ( _ActiveTerm >= getDisjunctiveTerms() ) )
+ throw IndexOutOfBoundsException( ::rtl::OUString(), *this );
+
+ if ( _ActiveTerm == getActiveTerm() )
+ return;
+
+ m_nCurrentFilterPosition = _ActiveTerm;
+ impl_setTextOnAllFilter_throw();
+}
+
// XElementAccess
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::hasElements(void) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::hasElements(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::hasElements" );
-::osl::MutexGuard aGuard( m_aMutex );
+ ::osl::MutexGuard aGuard( m_aMutex );
return !m_aChilds.empty();
}
//------------------------------------------------------------------------------
-Type SAL_CALL FmXFormController::getElementType(void) throw( RuntimeException )
+Type SAL_CALL FormController::getElementType(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getElementType" );
return ::getCppuType((const Reference< XFormController>*)0);
}
// XEnumerationAccess
//------------------------------------------------------------------------------
-Reference< XEnumeration > SAL_CALL FmXFormController::createEnumeration(void) throw( RuntimeException )
+Reference< XEnumeration > SAL_CALL FormController::createEnumeration(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::createEnumeration" );
::osl::MutexGuard aGuard( m_aMutex );
return new ::comphelper::OEnumerationByIndex(this);
}
// XIndexAccess
//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL FmXFormController::getCount(void) throw( RuntimeException )
+sal_Int32 SAL_CALL FormController::getCount(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getCount" );
::osl::MutexGuard aGuard( m_aMutex );
return m_aChilds.size();
}
//------------------------------------------------------------------------------
-Any SAL_CALL FmXFormController::getByIndex(sal_Int32 Index) throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
+Any SAL_CALL FormController::getByIndex(sal_Int32 Index) throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getByIndex" );
::osl::MutexGuard aGuard( m_aMutex );
if (Index < 0 ||
Index >= (sal_Int32)m_aChilds.size())
throw IndexOutOfBoundsException();
- return makeAny(m_aChilds[Index]);
- // , ::getCppuType((const XFormController*)0));
-}
-
-//-----------------------------------------------------------------------------
-void FmXFormController::addChild(FmXFormController* pChild)
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addChild" );
- Reference< XFormController > xController(pChild);
- m_aChilds.push_back(xController);
- pChild->setParent(static_cast< XFormController* >(this));
-
- Reference< XFormComponent > xForm(pChild->getModel(), UNO_QUERY);
-
- // search the position of the model within the form
- sal_uInt32 nPos = m_xModelAsIndex->getCount();
- Reference< XFormComponent > xTemp;
- for( ; nPos; )
- {
- m_xModelAsIndex->getByIndex(--nPos) >>= xTemp;
- if ((XFormComponent*)xForm.get() == (XFormComponent*)xTemp.get())
- {
- Reference< XInterface > xIfc(xController, UNO_QUERY);
- m_xModelAsManager->attach( nPos, xIfc, makeAny( xController) );
- break;
- }
- }
+ return makeAny( m_aChilds[ Index ] );
}
// EventListener
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::disposing(const EventObject& e) throw( RuntimeException )
+void SAL_CALL FormController::disposing(const EventObject& e) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::disposing" );
// Ist der Container disposed worden
::osl::MutexGuard aGuard( m_aMutex );
Reference< XControlContainer > xContainer(e.Source, UNO_QUERY);
@@ -991,9 +1172,8 @@ void SAL_CALL FmXFormController::disposing(const EventObject& e) throw( RuntimeE
// OComponentHelper
//-----------------------------------------------------------------------------
-void FmXFormController::disposeAllFeaturesAndDispatchers() SAL_THROW(())
+void FormController::disposeAllFeaturesAndDispatchers() SAL_THROW(())
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::disposeAllFeaturesAndDispatchers" );
for ( DispatcherContainer::iterator aDispatcher = m_aFeatureDispatchers.begin();
aDispatcher != m_aFeatureDispatchers.end();
++aDispatcher
@@ -1005,18 +1185,16 @@ void FmXFormController::disposeAllFeaturesAndDispatchers() SAL_THROW(())
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::disposeAllFeaturesAndDispatchers: caught an exception while disposing a dispatcher!" );
+ DBG_UNHANDLED_EXCEPTION();
}
}
m_aFeatureDispatchers.clear();
- m_aControllerFeatures.dispose();
}
//-----------------------------------------------------------------------------
-void FmXFormController::disposing(void)
+void FormController::disposing(void)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::disposing" );
- EventObject aEvt(static_cast< XFormController* >(this));
+ EventObject aEvt( *this );
// if we're still active, simulate a "deactivated" event
if ( m_xActiveControl.is() )
@@ -1029,13 +1207,14 @@ void FmXFormController::disposing(void)
m_aDeleteListeners.disposeAndClear(aEvt);
m_aRowSetApproveListeners.disposeAndClear(aEvt);
m_aParameterListeners.disposeAndClear(aEvt);
+ m_aFilterListeners.disposeAndClear(aEvt);
removeBoundFieldListener();
stopFiltering();
m_pControlBorderManager->restoreAll();
- m_aFilters.clear();
+ m_aFilterRows.clear();
::osl::MutexGuard aGuard( m_aMutex );
m_xActiveControl = NULL;
@@ -1067,6 +1246,10 @@ void FmXFormController::disposing(void)
disposeAllFeaturesAndDispatchers();
+ if ( m_xFormOperations.is() )
+ m_xFormOperations->dispose();
+ m_xFormOperations.clear();
+
if (m_bDBConnection)
unload();
@@ -1076,7 +1259,6 @@ void FmXFormController::disposing(void)
::comphelper::disposeComponent( m_xComposer );
- m_xORB = NULL;
m_bDBConnection = sal_False;
}
@@ -1096,10 +1278,9 @@ namespace
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::propertyChange(const PropertyChangeEvent& evt) throw( RuntimeException )
+void SAL_CALL FormController::propertyChange(const PropertyChangeEvent& evt) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::propertyChange" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
if ( evt.PropertyName == FM_PROP_BOUNDFIELD )
{
Reference<XPropertySet> xOldBound;
@@ -1164,14 +1345,13 @@ void SAL_CALL FmXFormController::propertyChange(const PropertyChangeEvent& evt)
}
//------------------------------------------------------------------------------
-bool FmXFormController::replaceControl( const Reference< XControl >& _rxExistentControl, const Reference< XControl >& _rxNewControl )
+bool FormController::replaceControl( const Reference< XControl >& _rxExistentControl, const Reference< XControl >& _rxNewControl )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::replaceControl" );
bool bSuccess = false;
try
{
Reference< XIdentifierReplace > xContainer( getContainer(), UNO_QUERY );
- DBG_ASSERT( xContainer.is(), "FmXFormController::replaceControl: yes, it's not required by the service description, but XItentifierReplaces would be nice!" );
+ DBG_ASSERT( xContainer.is(), "FormController::replaceControl: yes, it's not required by the service description, but XItentifierReplaces would be nice!" );
if ( xContainer.is() )
{
// look up the ID of _rxExistentControl
@@ -1184,7 +1364,7 @@ bool FmXFormController::replaceControl( const Reference< XControl >& _rxExistent
if ( xCheck == _rxExistentControl )
break;
}
- DBG_ASSERT( pIdentifiers != pIdentifiersEnd, "FmXFormController::replaceControl: did not find the control in the container!" );
+ DBG_ASSERT( pIdentifiers != pIdentifiersEnd, "FormController::replaceControl: did not find the control in the container!" );
if ( pIdentifiers != pIdentifiersEnd )
{
bool bReplacedWasActive = ( m_xActiveControl.get() == _rxExistentControl.get() );
@@ -1217,7 +1397,7 @@ bool FmXFormController::replaceControl( const Reference< XControl >& _rxExistent
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::replaceControl: caught an exception!" );
+ DBG_UNHANDLED_EXCEPTION();
}
Reference< XControl > xDisposeIt( bSuccess ? _rxExistentControl : _rxNewControl );
@@ -1226,10 +1406,9 @@ bool FmXFormController::replaceControl( const Reference< XControl >& _rxExistent
}
//------------------------------------------------------------------------------
-void FmXFormController::toggleAutoFields(sal_Bool bAutoFields)
+void FormController::toggleAutoFields(sal_Bool bAutoFields)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::toggleAutoFields" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
Sequence< Reference< XControl > > aControlsCopy( m_aControls );
@@ -1289,7 +1468,7 @@ void FmXFormController::toggleAutoFields(sal_Bool bAutoFields)
{
::rtl::OUString sServiceName;
OSL_VERIFY( xSet->getPropertyValue( FM_PROP_DEFAULTCONTROL ) >>= sServiceName );
- Reference< XControl > xNewControl( m_xORB->createInstance( sServiceName ), UNO_QUERY );
+ Reference< XControl > xNewControl( m_aContext.createComponent( sServiceName ), UNO_QUERY );
replaceControl( xControl, xNewControl );
}
}
@@ -1300,9 +1479,9 @@ void FmXFormController::toggleAutoFields(sal_Bool bAutoFields)
}
//------------------------------------------------------------------------------
-IMPL_LINK(FmXFormController, OnToggleAutoFields, void*, EMPTYARG)
+IMPL_LINK(FormController, OnToggleAutoFields, void*, EMPTYARG)
{
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
toggleAutoFields(m_bCurrentRecordNew);
return 1L;
@@ -1310,35 +1489,52 @@ IMPL_LINK(FmXFormController, OnToggleAutoFields, void*, EMPTYARG)
// XTextListener
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::textChanged(const TextEvent& e) throw( RuntimeException )
+void SAL_CALL FormController::textChanged(const TextEvent& e) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::textChanged" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ // SYNCHRONIZED -->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
if (m_bFiltering)
{
Reference< XTextComponent > xText(e.Source,UNO_QUERY);
::rtl::OUString aText = xText->getText();
- // Suchen der aktuellen Row
- OSL_ENSURE( ( m_aFilters.size() > (size_t)m_nCurrentFilterPosition ) && ( m_nCurrentFilterPosition >= 0 ),
- "FmXFormController::textChanged: m_nCurrentFilterPosition too big" );
+ if ( m_aFilterRows.empty() )
+ appendEmptyDisjunctiveTerm();
- if ( ( m_nCurrentFilterPosition >= 0 ) && ( (size_t)m_nCurrentFilterPosition < m_aFilters.size() ) )
+ // Suchen der aktuellen Row
+ if ( ( (size_t)m_nCurrentFilterPosition >= m_aFilterRows.size() ) || ( m_nCurrentFilterPosition < 0 ) )
{
- FmFilterRow& rRow = m_aFilters[m_nCurrentFilterPosition];
+ OSL_ENSURE( false, "FormController::textChanged: m_nCurrentFilterPosition is wrong!" );
+ return;
+ }
- // do we have a new filter
- if (aText.getLength())
- rRow[xText] = aText;
- else
- {
- // do we have the control in the row
- FmFilterRow::iterator iter = rRow.find(xText);
- // erase the entry out of the row
- if (iter != rRow.end())
- rRow.erase(iter);
- }
+ FmFilterRow& rRow = m_aFilterRows[ m_nCurrentFilterPosition ];
+
+ // do we have a new filter
+ if (aText.getLength())
+ rRow[xText] = aText;
+ else
+ {
+ // do we have the control in the row
+ FmFilterRow::iterator iter = rRow.find(xText);
+ // erase the entry out of the row
+ if (iter != rRow.end())
+ rRow.erase(iter);
}
+
+ // multiplex the event to our FilterControllerListeners
+ FilterEvent aEvent;
+ aEvent.Source = *this;
+ aEvent.FilterComponent = ::std::find( m_aFilterComponents.begin(), m_aFilterComponents.end(), xText ) - m_aFilterComponents.begin();
+ aEvent.DisjunctiveTerm = getActiveTerm();
+ aEvent.PredicateExpression = aText;
+
+ aGuard.clear();
+ // <-- SYNCHRONIZED
+
+ // notify the changed filter expression
+ m_aFilterListeners.notifyEach( &XFilterControllerListener::predicateExpressionChanged, aEvent );
}
else
impl_onModify();
@@ -1346,36 +1542,34 @@ void SAL_CALL FmXFormController::textChanged(const TextEvent& e) throw( RuntimeE
// XItemListener
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::itemStateChanged(const ItemEvent& /*rEvent*/) throw( RuntimeException )
+void SAL_CALL FormController::itemStateChanged(const ItemEvent& /*rEvent*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::itemStateChanged" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
impl_onModify();
}
// XModificationBroadcaster
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addModifyListener(const Reference< XModifyListener > & l) throw( RuntimeException )
+void SAL_CALL FormController::addModifyListener(const Reference< XModifyListener > & l) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addModifyListener" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
m_aModifyListeners.addInterface( l );
}
//------------------------------------------------------------------------------
-void FmXFormController::removeModifyListener(const Reference< XModifyListener > & l) throw( RuntimeException )
+void FormController::removeModifyListener(const Reference< XModifyListener > & l) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeModifyListener" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
m_aModifyListeners.removeInterface( l );
}
// XModificationListener
//------------------------------------------------------------------------------
-void FmXFormController::modified( const EventObject& _rEvent ) throw( RuntimeException )
+void FormController::modified( const EventObject& _rEvent ) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::modified" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
try
{
@@ -1400,10 +1594,16 @@ void FmXFormController::modified( const EventObject& _rEvent ) throw( RuntimeExc
}
//------------------------------------------------------------------------------
-void FmXFormController::impl_onModify()
+void FormController::impl_checkDisposed_throw() const
+{
+ if ( impl_isDisposed_nofail() )
+ throw DisposedException( ::rtl::OUString(), *const_cast< FormController* >( this ) );
+}
+
+//------------------------------------------------------------------------------
+void FormController::impl_onModify()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::onModify" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -1416,10 +1616,36 @@ void FmXFormController::impl_onModify()
}
//------------------------------------------------------------------------------
-sal_Bool FmXFormController::determineLockState() const
+void FormController::impl_addFilterRow( const FmFilterRow& _row )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::determineLockState" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ m_aFilterRows.push_back( _row );
+
+ if ( m_aFilterRows.size() == 1 )
+ { // that's the first row ever
+ OSL_ENSURE( m_nCurrentFilterPosition == -1, "FormController::impl_addFilterRow: inconsistency!" );
+ m_nCurrentFilterPosition = 0;
+ }
+}
+
+//------------------------------------------------------------------------------
+void FormController::impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard& _rClearBeforeNotify )
+{
+ // SYNCHRONIZED -->
+ impl_addFilterRow( FmFilterRow() );
+
+ // notify the listeners
+ FilterEvent aEvent;
+ aEvent.Source = *this;
+ aEvent.DisjunctiveTerm = (sal_Int32)m_aFilterRows.size() - 1;
+ _rClearBeforeNotify.clear();
+ // <-- SYNCHRONIZED
+ m_aFilterListeners.notifyEach( &XFilterControllerListener::disjunctiveTermAdded, aEvent );
+}
+
+//------------------------------------------------------------------------------
+sal_Bool FormController::determineLockState() const
+{
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
// a.) in filter mode we are always locked
// b.) if we have no valid model or our model (a result set) is not alive -> we're locked
// c.) if we are inserting everything is OK and we are not locked
@@ -1434,17 +1660,15 @@ sal_Bool FmXFormController::determineLockState() const
// FocusListener
//------------------------------------------------------------------------------
-void FmXFormController::focusGained(const FocusEvent& e) throw( RuntimeException )
+void FormController::focusGained(const FocusEvent& e) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::focusGained" );
- TRACE_RANGE( "FmXFormController::focusGained" );
-
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- ::osl::MutexGuard aGuard( m_aMutex );
- Reference< XControl > xControl(e.Source, UNO_QUERY);
+ // SYNCHRONIZED -->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
m_pControlBorderManager->focusGained( e.Source );
+ Reference< XControl > xControl(e.Source, UNO_QUERY);
if (m_bDBConnection)
{
// do we need to keep the locking of the commit
@@ -1473,7 +1697,7 @@ void FmXFormController::focusGained(const FocusEvent& e) throw( RuntimeException
#if (OSL_DEBUG_LEVEL > 1) || defined DBG_UTIL
Reference< XBoundControl > xLockingTest(m_xCurrentControl, UNO_QUERY);
sal_Bool bControlIsLocked = xLockingTest.is() && xLockingTest->getLock();
- OSL_ENSURE(!bControlIsLocked, "FmXFormController::Gained: I'm modified and the current control is locked ? How this ?");
+ OSL_ENSURE(!bControlIsLocked, "FormController::Gained: I'm modified and the current control is locked ? How this ?");
// normalerweise sollte ein gelocktes Control nicht modified sein, also muss wohl mein bModified aus einem anderen Kontext
// gesetzt worden sein, was ich nicht verstehen wuerde ...
#endif
@@ -1505,22 +1729,33 @@ void FmXFormController::focusGained(const FocusEvent& e) throw( RuntimeException
if (!m_bFiltering && m_bCycle && (e.FocusFlags & FocusChangeReason::AROUND) && m_xCurrentControl.is())
{
- if ( e.FocusFlags & FocusChangeReason::FORWARD )
+ SQLErrorEvent aErrorEvent;
+ OSL_ENSURE( m_xFormOperations.is(), "FormController::focusGained: hmm?" );
+ // should have been created in setModel
+ try
{
- if ( m_aControllerFeatures->isEnabled( SID_FM_RECORD_NEXT ) )
- m_aControllerFeatures->moveRight();
+ if ( e.FocusFlags & FocusChangeReason::FORWARD )
+ {
+ if ( m_xFormOperations.is() && m_xFormOperations->isEnabled( FormFeature::MoveToNext ) )
+ m_xFormOperations->execute( FormFeature::MoveToNext );
+ }
+ else // backward
+ {
+ if ( m_xFormOperations.is() && m_xFormOperations->isEnabled( FormFeature::MoveToPrevious ) )
+ m_xFormOperations->execute( FormFeature::MoveToPrevious );
+ }
}
- else // backward
+ catch ( const Exception& )
{
- if ( m_aControllerFeatures->isEnabled( SID_FM_RECORD_PREV ) )
- m_aControllerFeatures->moveLeft();
+ // don't handle this any further. That's an ... admissible error.
+ DBG_UNHANDLED_EXCEPTION();
}
}
}
// Immer noch ein und dasselbe Control
- if ( (m_xActiveControl.get() == xControl.get())
- && (xControl.get() == m_xCurrentControl.get())
+ if ( ( m_xActiveControl == xControl )
+ && ( xControl == m_xCurrentControl )
)
{
DBG_ASSERT(m_xCurrentControl.is(), "Kein CurrentControl selektiert");
@@ -1545,25 +1780,24 @@ void FmXFormController::focusGained(const FocusEvent& e) throw( RuntimeException
}
// invalidate all features which depend on the currently focused control
- if ( m_bDBConnection && !m_bFiltering && m_pView )
+ if ( m_bDBConnection && !m_bFiltering )
implInvalidateCurrentControlDependentFeatures();
- if (m_xCurrentControl.is())
- {
- // Control erhaelt Focus, dann eventuell in den sichtbaren Bereich
- Reference< XWindow > xWindow(xControl, UNO_QUERY);
- if (xWindow.is() && m_pView && m_pWindow)
- {
- ::com::sun::star::awt::Rectangle aRect = xWindow->getPosSize();
- ::Rectangle aNewRect(aRect.X,aRect.Y,aRect.X+aRect.Width,aRect.Y+aRect.Height);
- aNewRect = m_pWindow->PixelToLogic(aNewRect);
- m_pView->MakeVisible( aNewRect, *const_cast< Window* >( m_pWindow ) );
- }
- }
+ if ( !m_xCurrentControl.is() )
+ return;
+
+ // Control erhaelt Focus, dann eventuell in den sichtbaren Bereich
+ Reference< XFormControllerContext > xContext( m_xContext );
+ Reference< XControl > xCurrentControl( m_xCurrentControl );
+ aGuard.clear();
+ // <-- SYNCHRONIZED
+
+ if ( xContext.is() )
+ xContext->makeVisible( xCurrentControl );
}
//------------------------------------------------------------------------------
-IMPL_LINK( FmXFormController, OnActivated, void*, /**/ )
+IMPL_LINK( FormController, OnActivated, void*, /**/ )
{
EventObject aEvent;
aEvent.Source = *this;
@@ -1573,7 +1807,7 @@ IMPL_LINK( FmXFormController, OnActivated, void*, /**/ )
}
//------------------------------------------------------------------------------
-IMPL_LINK( FmXFormController, OnDeactivated, void*, /**/ )
+IMPL_LINK( FormController, OnDeactivated, void*, /**/ )
{
EventObject aEvent;
aEvent.Source = *this;
@@ -1583,10 +1817,9 @@ IMPL_LINK( FmXFormController, OnDeactivated, void*, /**/ )
}
//------------------------------------------------------------------------------
-void FmXFormController::focusLost(const FocusEvent& e) throw( RuntimeException )
+void FormController::focusLost(const FocusEvent& e) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::focusLost" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
m_pControlBorderManager->focusLost( e.Source );
@@ -1601,53 +1834,48 @@ void FmXFormController::focusLost(const FocusEvent& e) throw( RuntimeException )
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::mousePressed( const awt::MouseEvent& /*_rEvent*/ ) throw (RuntimeException)
+void SAL_CALL FormController::mousePressed( const awt::MouseEvent& /*_rEvent*/ ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::mousePressed" );
// not interested in
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::mouseReleased( const awt::MouseEvent& /*_rEvent*/ ) throw (RuntimeException)
+void SAL_CALL FormController::mouseReleased( const awt::MouseEvent& /*_rEvent*/ ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::mouseReleased" );
// not interested in
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::mouseEntered( const awt::MouseEvent& _rEvent ) throw (RuntimeException)
+void SAL_CALL FormController::mouseEntered( const awt::MouseEvent& _rEvent ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::mouseEntered" );
m_pControlBorderManager->mouseEntered( _rEvent.Source );
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::mouseExited( const awt::MouseEvent& _rEvent ) throw (RuntimeException)
+void SAL_CALL FormController::mouseExited( const awt::MouseEvent& _rEvent ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::mouseExited" );
m_pControlBorderManager->mouseExited( _rEvent.Source );
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::componentValidityChanged( const EventObject& _rSource ) throw (RuntimeException)
+void SAL_CALL FormController::componentValidityChanged( const EventObject& _rSource ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::componentValidityChanged" );
Reference< XControl > xControl( findControl( m_aControls, Reference< XControlModel >( _rSource.Source, UNO_QUERY ), sal_False, sal_False ) );
Reference< XValidatableFormComponent > xValidatable( _rSource.Source, UNO_QUERY );
- OSL_ENSURE( xControl.is() && xValidatable.is(), "FmXFormController::componentValidityChanged: huh?" );
+ OSL_ENSURE( xControl.is() && xValidatable.is(), "FormController::componentValidityChanged: huh?" );
if ( xControl.is() && xValidatable.is() )
m_pControlBorderManager->validityChanged( xControl, xValidatable );
}
//--------------------------------------------------------------------
-void FmXFormController::setModel(const Reference< XTabControllerModel > & Model) throw( RuntimeException )
+void FormController::setModel(const Reference< XTabControllerModel > & Model) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setModel" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::setModel : invalid aggregate !");
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::setModel : invalid aggregate !");
try
{
@@ -1672,10 +1900,15 @@ void FmXFormController::setModel(const Reference< XTabControllerModel > & Model)
Reference< XDatabaseParameterBroadcaster > xParamBroadcaster(m_xModelAsIndex, UNO_QUERY);
if (xParamBroadcaster.is())
xParamBroadcaster->removeParameterListener(this);
+
}
disposeAllFeaturesAndDispatchers();
+ if ( m_xFormOperations.is() )
+ m_xFormOperations->dispose();
+ m_xFormOperations.clear();
+
// set the new model wait for the load event
if (m_xTabController.is())
m_xTabController->setModel(Model);
@@ -1691,7 +1924,9 @@ void FmXFormController::setModel(const Reference< XTabControllerModel > & Model)
if (m_xModelAsIndex.is())
{
- m_aControllerFeatures.assign( this );
+ // re-create m_xFormOperations
+ m_xFormOperations.set( FormOperations::createWithFormController( m_aContext.getUNOContext(), this ), UNO_SET_THROW );
+ m_xFormOperations->setFeatureInvalidation( this );
// adding load and ui interaction listeners
Reference< XLoadable > xForm(Model, UNO_QUERY);
@@ -1743,27 +1978,27 @@ void FmXFormController::setModel(const Reference< XTabControllerModel > & Model)
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::setModel: caught an exception!" );
+ DBG_UNHANDLED_EXCEPTION();
}
}
//------------------------------------------------------------------------------
-Reference< XTabControllerModel > FmXFormController::getModel() throw( RuntimeException )
+Reference< XTabControllerModel > FormController::getModel() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getModel" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::getModel : invalid aggregate !");
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::getModel : invalid aggregate !");
if (!m_xTabController.is())
return Reference< XTabControllerModel > ();
return m_xTabController->getModel();
}
//------------------------------------------------------------------------------
-void FmXFormController::addToEventAttacher(const Reference< XControl > & xControl)
+void FormController::addToEventAttacher(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addToEventAttacher" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- OSL_ENSURE( xControl.is(), "FmXFormController::addToEventAttacher: invalid control - how did you reach this?" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
+ OSL_ENSURE( xControl.is(), "FormController::addToEventAttacher: invalid control - how did you reach this?" );
if ( !xControl.is() )
return; /* throw IllegalArgumentException(); */
@@ -1788,11 +2023,10 @@ void FmXFormController::addToEventAttacher(const Reference< XControl > & xContro
}
//------------------------------------------------------------------------------
-void FmXFormController::removeFromEventAttacher(const Reference< XControl > & xControl)
+void FormController::removeFromEventAttacher(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeFromEventAttacher" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- OSL_ENSURE( xControl.is(), "FmXFormController::removeFromEventAttacher: invalid control - how did you reach this?" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
+ OSL_ENSURE( xControl.is(), "FormController::removeFromEventAttacher: invalid control - how did you reach this?" );
if ( !xControl.is() )
return; /* throw IllegalArgumentException(); */
@@ -1817,14 +2051,13 @@ void FmXFormController::removeFromEventAttacher(const Reference< XControl > & xC
}
//------------------------------------------------------------------------------
-void FmXFormController::setContainer(const Reference< XControlContainer > & xContainer) throw( RuntimeException )
+void FormController::setContainer(const Reference< XControlContainer > & xContainer) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setContainer" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
Reference< XTabControllerModel > xTabModel(getModel());
DBG_ASSERT(xTabModel.is() || !xContainer.is(), "No Model defined");
// if we have a new container we need a model
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::setContainer : invalid aggregate !");
+ DBG_ASSERT(m_xTabController.is(), "FormController::setContainer : invalid aggregate !");
::osl::MutexGuard aGuard( m_aMutex );
Reference< XContainer > xCurrentContainer;
@@ -1838,11 +2071,8 @@ void FmXFormController::setContainer(const Reference< XControlContainer > & xCon
m_aTabActivationTimer.Stop();
// clear the filter map
- for (FmFilterControls::const_iterator iter = m_aFilterControls.begin();
- iter != m_aFilterControls.end(); ++iter)
- (*iter).first->removeTextListener(this);
-
- m_aFilterControls.clear();
+ ::std::for_each( m_aFilterComponents.begin(), m_aFilterComponents.end(), RemoveComponentTextListener( this ) );
+ m_aFilterComponents.clear();
// einsammeln der Controls
const Reference< XControl >* pControls = m_aControls.getConstArray();
@@ -1906,23 +2136,23 @@ void FmXFormController::setContainer(const Reference< XControlContainer > & xCon
}
//------------------------------------------------------------------------------
-Reference< XControlContainer > FmXFormController::getContainer() throw( RuntimeException )
+Reference< XControlContainer > FormController::getContainer() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getContainer" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::getContainer : invalid aggregate !");
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::getContainer : invalid aggregate !");
if (!m_xTabController.is())
return Reference< XControlContainer > ();
return m_xTabController->getContainer();
}
//------------------------------------------------------------------------------
-Sequence< Reference< XControl > > FmXFormController::getControls(void) throw( RuntimeException )
+Sequence< Reference< XControl > > FormController::getControls(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getControls" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
if (!m_bControlsSorted)
{
Reference< XTabControllerModel > xModel = getModel();
@@ -1958,32 +2188,31 @@ Sequence< Reference< XControl > > FmXFormController::getControls(void) throw( Ru
}
//------------------------------------------------------------------------------
-void FmXFormController::autoTabOrder() throw( RuntimeException )
+void FormController::autoTabOrder() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::autoTabOrder" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::autoTabOrder : invalid aggregate !");
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::autoTabOrder : invalid aggregate !");
if (m_xTabController.is())
m_xTabController->autoTabOrder();
}
//------------------------------------------------------------------------------
-void FmXFormController::activateTabOrder() throw( RuntimeException )
+void FormController::activateTabOrder() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::activateTabOrder" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::activateTabOrder : invalid aggregate !");
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::activateTabOrder : invalid aggregate !");
if (m_xTabController.is())
m_xTabController->activateTabOrder();
}
//------------------------------------------------------------------------------
-void FmXFormController::setControlLock(const Reference< XControl > & xControl)
+void FormController::setControlLock(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setControlLock" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
sal_Bool bLocked = isLocked();
// es wird gelockt
@@ -2022,8 +2251,9 @@ void FmXFormController::setControlLock(const Reference< XControl > & xControl)
else
xBound->setLock(bLocked);
}
- catch(...)
+ catch( const Exception& )
{
+ DBG_UNHANDLED_EXCEPTION();
}
}
@@ -2034,10 +2264,9 @@ void FmXFormController::setControlLock(const Reference< XControl > & xControl)
}
//------------------------------------------------------------------------------
-void FmXFormController::setLocks()
+void FormController::setLocks()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setLocks" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
// alle Controls, die mit einer Datenquelle verbunden sind locken/unlocken
const Reference< XControl >* pControls = m_aControls.getConstArray();
const Reference< XControl >* pControlsEnd = pControls + m_aControls.getLength();
@@ -2076,10 +2305,9 @@ namespace
}
//------------------------------------------------------------------------------
-void FmXFormController::startControlModifyListening(const Reference< XControl > & xControl)
+void FormController::startControlModifyListening(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::startControlModifyListening" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
bool bModifyListening = lcl_shouldListenForModifications( xControl, this );
@@ -2126,10 +2354,9 @@ void FmXFormController::startControlModifyListening(const Reference< XControl >
}
//------------------------------------------------------------------------------
-void FmXFormController::stopControlModifyListening(const Reference< XControl > & xControl)
+void FormController::stopControlModifyListening(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::stopControlModifyListening" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
bool bModifyListening = lcl_shouldListenForModifications( xControl, NULL );
@@ -2175,10 +2402,9 @@ void FmXFormController::stopControlModifyListening(const Reference< XControl > &
}
//------------------------------------------------------------------------------
-void FmXFormController::startListening()
+void FormController::startListening()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::startListening" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
m_bModified = sal_False;
// jetzt anmelden bei gebundenen feldern
@@ -2189,10 +2415,9 @@ void FmXFormController::startListening()
}
//------------------------------------------------------------------------------
-void FmXFormController::stopListening()
+void FormController::stopListening()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::stopListening" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
m_bModified = sal_False;
// jetzt anmelden bei gebundenen feldern
@@ -2204,10 +2429,9 @@ void FmXFormController::stopListening()
//------------------------------------------------------------------------------
-Reference< XControl > FmXFormController::findControl(Sequence< Reference< XControl > >& _rControls, const Reference< XControlModel > & xCtrlModel ,sal_Bool _bRemove,sal_Bool _bOverWrite) const
+Reference< XControl > FormController::findControl(Sequence< Reference< XControl > >& _rControls, const Reference< XControlModel > & xCtrlModel ,sal_Bool _bRemove,sal_Bool _bOverWrite) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::findControl" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
DBG_ASSERT( xCtrlModel.is(), "findControl - welches ?!" );
Reference< XControl >* pControls = _rControls.getArray();
@@ -2232,9 +2456,8 @@ Reference< XControl > FmXFormController::findControl(Sequence< Reference< XCont
}
//------------------------------------------------------------------------------
-void FmXFormController::implControlInserted( const Reference< XControl>& _rxControl, bool _bAddToEventAttacher )
+void FormController::implControlInserted( const Reference< XControl>& _rxControl, bool _bAddToEventAttacher )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::implControlInserted" );
Reference< XWindow > xWindow( _rxControl, UNO_QUERY );
if ( xWindow.is() )
{
@@ -2272,9 +2495,8 @@ void FmXFormController::implControlInserted( const Reference< XControl>& _rxCont
}
//------------------------------------------------------------------------------
-void FmXFormController::implControlRemoved( const Reference< XControl>& _rxControl, bool _bRemoveFromEventAttacher )
+void FormController::implControlRemoved( const Reference< XControl>& _rxControl, bool _bRemoveFromEventAttacher )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::implControlRemoved" );
Reference< XWindow > xWindow( _rxControl, UNO_QUERY );
if ( xWindow.is() )
{
@@ -2304,9 +2526,8 @@ void FmXFormController::implControlRemoved( const Reference< XControl>& _rxContr
}
//------------------------------------------------------------------------------
-void FmXFormController::implSetCurrentControl( const Reference< XControl >& _rxControl )
+void FormController::implSetCurrentControl( const Reference< XControl >& _rxControl )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::implSetCurrentControl" );
if ( m_xCurrentControl.get() == _rxControl.get() )
return;
@@ -2322,10 +2543,9 @@ void FmXFormController::implSetCurrentControl( const Reference< XControl >& _rxC
}
//------------------------------------------------------------------------------
-void FmXFormController::insertControl(const Reference< XControl > & xControl)
+void FormController::insertControl(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::insertControl" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
m_bControlsSorted = sal_False;
m_aControls.realloc(m_aControls.getLength() + 1);
m_aControls.getArray()[m_aControls.getLength() - 1] = xControl;
@@ -2343,10 +2563,9 @@ void FmXFormController::insertControl(const Reference< XControl > & xControl)
}
//------------------------------------------------------------------------------
-void FmXFormController::removeControl(const Reference< XControl > & xControl)
+void FormController::removeControl(const Reference< XControl > & xControl)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeControl" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
const Reference< XControl >* pControls = m_aControls.getConstArray();
const Reference< XControl >* pControlsEnd = pControls + m_aControls.getLength();
while ( pControls != pControlsEnd )
@@ -2358,13 +2577,9 @@ void FmXFormController::removeControl(const Reference< XControl > & xControl)
}
}
- if (m_aFilterControls.size())
- {
- Reference< XTextComponent > xText(xControl, UNO_QUERY);
- FmFilterControls::iterator iter = m_aFilterControls.find(xText);
- if (iter != m_aFilterControls.end())
- m_aFilterControls.erase(iter);
- }
+ FilterComponents::iterator componentPos = ::std::find( m_aFilterComponents.begin(), m_aFilterComponents.end(), xControl );
+ if ( componentPos != m_aFilterComponents.end() )
+ m_aFilterComponents.erase( componentPos );
implControlRemoved( xControl, m_bDetachEvents );
@@ -2374,12 +2589,11 @@ void FmXFormController::removeControl(const Reference< XControl > & xControl)
// XLoadListener
//------------------------------------------------------------------------------
-void FmXFormController::loaded(const EventObject& rEvent) throw( RuntimeException )
+void FormController::loaded(const EventObject& rEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::loaded" );
- OSL_ENSURE( rEvent.Source == m_xModelAsIndex, "FmXFormController::loaded: where did this come from?" );
+ OSL_ENSURE( rEvent.Source == m_xModelAsIndex, "FormController::loaded: where did this come from?" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
Reference< XRowSet > xForm(rEvent.Source, UNO_QUERY);
// do we have a connected data source
@@ -2431,9 +2645,8 @@ void FmXFormController::loaded(const EventObject& rEvent) throw( RuntimeExceptio
}
//------------------------------------------------------------------------------
-void FmXFormController::updateAllDispatchers() const
+void FormController::updateAllDispatchers() const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::updateAllDispatchers" );
::std::for_each(
m_aFeatureDispatchers.begin(),
m_aFeatureDispatchers.end(),
@@ -2445,9 +2658,9 @@ void FmXFormController::updateAllDispatchers() const
}
//------------------------------------------------------------------------------
-IMPL_LINK(FmXFormController, OnLoad, void*, EMPTYARG)
+IMPL_LINK(FormController, OnLoad, void*, EMPTYARG)
{
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
m_bLocked = determineLockState();
setLocks();
@@ -2463,19 +2676,20 @@ IMPL_LINK(FmXFormController, OnLoad, void*, EMPTYARG)
}
//------------------------------------------------------------------------------
-void FmXFormController::unloaded(const EventObject& /*rEvent*/) throw( RuntimeException )
+void FormController::unloaded(const EventObject& /*rEvent*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::unloaded" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
updateAllDispatchers();
}
//------------------------------------------------------------------------------
-void FmXFormController::reloading(const EventObject& /*aEvent*/) throw( RuntimeException )
+void FormController::reloading(const EventObject& /*aEvent*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::reloading" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
// do the same like in unloading
// just one exception toggle the auto values
m_aToggleEvent.CancelPendingCall();
@@ -2483,27 +2697,28 @@ void FmXFormController::reloading(const EventObject& /*aEvent*/) throw( RuntimeE
}
//------------------------------------------------------------------------------
-void FmXFormController::reloaded(const EventObject& aEvent) throw( RuntimeException )
+void FormController::reloaded(const EventObject& aEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::reloaded" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
loaded(aEvent);
}
//------------------------------------------------------------------------------
-void FmXFormController::unloading(const EventObject& /*aEvent*/) throw( RuntimeException )
+void FormController::unloading(const EventObject& /*aEvent*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::unloading" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
unload();
}
//------------------------------------------------------------------------------
-void FmXFormController::unload() throw( RuntimeException )
+void FormController::unload() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::unload" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
m_aLoadEvent.CancelPendingCall();
@@ -2529,9 +2744,8 @@ void FmXFormController::unload() throw( RuntimeException )
}
// -----------------------------------------------------------------------------
-void FmXFormController::removeBoundFieldListener()
+void FormController::removeBoundFieldListener()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeBoundFieldListener" );
const Reference< XControl >* pControls = m_aControls.getConstArray();
const Reference< XControl >* pControlsEnd = pControls + m_aControls.getLength();
while ( pControls != pControlsEnd )
@@ -2543,9 +2757,8 @@ void FmXFormController::removeBoundFieldListener()
}
//------------------------------------------------------------------------------
-void FmXFormController::startFormListening( const Reference< XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly )
+void FormController::startFormListening( const Reference< XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::startFormListening" );
try
{
if ( m_bCanInsert || m_bCanUpdate ) // form can be modified
@@ -2573,14 +2786,13 @@ void FmXFormController::startFormListening( const Reference< XPropertySet >& _rx
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::startFormListening: caught an exception!" );
+ DBG_UNHANDLED_EXCEPTION();
}
}
//------------------------------------------------------------------------------
-void FmXFormController::stopFormListening( const Reference< XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly )
+void FormController::stopFormListening( const Reference< XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::stopFormListening" );
try
{
if ( m_bCanInsert || m_bCanUpdate )
@@ -2606,20 +2818,20 @@ void FmXFormController::stopFormListening( const Reference< XPropertySet >& _rxF
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::stopFormListening: caught an exception!" );
+ DBG_UNHANDLED_EXCEPTION();
}
}
// com::sun::star::sdbc::XRowSetListener
//------------------------------------------------------------------------------
-void FmXFormController::cursorMoved(const EventObject& /*event*/) throw( RuntimeException )
+void FormController::cursorMoved(const EventObject& /*event*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::cursorMoved" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
// toggle the locking ?
if (m_bLocked != determineLockState())
{
- ::osl::MutexGuard aGuard( m_aMutex );
m_bLocked = !m_bLocked;
setLocks();
if (isListeningForChanges())
@@ -2633,31 +2845,28 @@ void FmXFormController::cursorMoved(const EventObject& /*event*/) throw( Runtime
}
//------------------------------------------------------------------------------
-void FmXFormController::rowChanged(const EventObject& /*event*/) throw( RuntimeException )
+void FormController::rowChanged(const EventObject& /*event*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::rowChanged" );
// not interested in ...
}
//------------------------------------------------------------------------------
-void FmXFormController::rowSetChanged(const EventObject& /*event*/) throw( RuntimeException )
+void FormController::rowSetChanged(const EventObject& /*event*/) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::rowSetChanged" );
// not interested in ...
}
// XContainerListener
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::elementInserted(const ContainerEvent& evt) throw( RuntimeException )
+void SAL_CALL FormController::elementInserted(const ContainerEvent& evt) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::elementInserted" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- Reference< XControl > xControl;
- evt.Element >>= xControl;
- if (!xControl.is())
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ Reference< XControl > xControl( evt.Element, UNO_QUERY );
+ if ( !xControl.is() )
return;
- ::osl::MutexGuard aGuard( m_aMutex );
Reference< XFormComponent > xModel(xControl->getModel(), UNO_QUERY);
if (xModel.is() && m_xModelAsIndex == xModel->getParent())
{
@@ -2686,8 +2895,8 @@ void SAL_CALL FmXFormController::elementInserted(const ContainerEvent& evt) thro
if (xText.is() && xField.is() && ::comphelper::hasProperty(FM_PROP_SEARCHABLE, xField) &&
::comphelper::getBOOL(xField->getPropertyValue(FM_PROP_SEARCHABLE)))
{
- m_aFilterControls[xText] = xField;
- xText->addTextListener(this);
+ m_aFilterComponents.push_back( xText );
+ xText->addTextListener( this );
}
}
}
@@ -2695,9 +2904,8 @@ void SAL_CALL FmXFormController::elementInserted(const ContainerEvent& evt) thro
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::elementReplaced(const ContainerEvent& evt) throw( RuntimeException )
+void SAL_CALL FormController::elementReplaced(const ContainerEvent& evt) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::elementReplaced" );
// simulate an elementRemoved
ContainerEvent aRemoveEvent( evt );
aRemoveEvent.Element = evt.ReplacedElement;
@@ -2711,11 +2919,10 @@ void SAL_CALL FmXFormController::elementReplaced(const ContainerEvent& evt) thro
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::elementRemoved(const ContainerEvent& evt) throw( RuntimeException )
+void SAL_CALL FormController::elementRemoved(const ContainerEvent& evt) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::elementRemoved" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
Reference< XControl > xControl;
evt.Element >>= xControl;
@@ -2731,18 +2938,17 @@ void SAL_CALL FmXFormController::elementRemoved(const ContainerEvent& evt) throw
// are we in filtermode and a XModeSelector has inserted an element
else if (m_bFiltering && Reference< XModeSelector > (evt.Source, UNO_QUERY).is())
{
- Reference< XTextComponent > xText(xControl, UNO_QUERY);
- FmFilterControls::iterator iter = m_aFilterControls.find(xText);
- if (iter != m_aFilterControls.end())
- m_aFilterControls.erase(iter);
+ FilterComponents::iterator componentPos = ::std::find(
+ m_aFilterComponents.begin(), m_aFilterComponents.end(), xControl );
+ if ( componentPos != m_aFilterComponents.end() )
+ m_aFilterComponents.erase( componentPos );
}
}
//------------------------------------------------------------------------------
-Reference< XControl > FmXFormController::isInList(const Reference< XWindowPeer > & xPeer) const
+Reference< XControl > FormController::isInList(const Reference< XWindowPeer > & xPeer) const
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::isInList" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
const Reference< XControl >* pControls = m_aControls.getConstArray();
sal_uInt32 nCtrls = m_aControls.getLength();
@@ -2759,58 +2965,134 @@ Reference< XControl > FmXFormController::isInList(const Reference< XWindowPeer
}
//------------------------------------------------------------------------------
-void FmXFormController::activateFirst() throw( RuntimeException )
+void FormController::activateFirst() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::activateFirst" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::activateFirst : invalid aggregate !");
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::activateFirst : invalid aggregate !");
if (m_xTabController.is())
m_xTabController->activateFirst();
}
//------------------------------------------------------------------------------
-void FmXFormController::activateLast() throw( RuntimeException )
+void FormController::activateLast() throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::activateLast" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::osl::MutexGuard aGuard( m_aMutex );
- DBG_ASSERT(m_xTabController.is(), "FmXFormController::activateLast : invalid aggregate !");
+ impl_checkDisposed_throw();
+
+ DBG_ASSERT(m_xTabController.is(), "FormController::activateLast : invalid aggregate !");
if (m_xTabController.is())
m_xTabController->activateLast();
}
// XFormController
//------------------------------------------------------------------------------
-Reference< XControl> SAL_CALL FmXFormController::getCurrentControl(void) throw( RuntimeException )
+Reference< XFormOperations > SAL_CALL FormController::getFormOperations() throw (RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ return m_xFormOperations;
+}
+
+//------------------------------------------------------------------------------
+Reference< XControl> SAL_CALL FormController::getCurrentControl(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getCurrentControl" );
::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
return m_xCurrentControl;
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addActivateListener(const Reference< XFormControllerListener > & l) throw( RuntimeException )
+void SAL_CALL FormController::addActivateListener(const Reference< XFormControllerListener > & l) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addActivateListener" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
m_aActivateListeners.addInterface(l);
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeActivateListener(const Reference< XFormControllerListener > & l) throw( RuntimeException )
+void SAL_CALL FormController::removeActivateListener(const Reference< XFormControllerListener > & l) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeActivateListener" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
m_aActivateListeners.removeInterface(l);
}
//------------------------------------------------------------------------------
-void FmXFormController::setFilter(::std::vector<FmFieldInfo>& rFieldInfos)
+void SAL_CALL FormController::addChildController( const Reference< XFormController >& _ChildController ) throw( RuntimeException, IllegalArgumentException )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ if ( !_ChildController.is() )
+ throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+ // TODO: (localized) error message
+
+ // the parent of our (to-be-)child must be our own model
+ Reference< XFormComponent > xFormOfChild( _ChildController->getModel(), UNO_QUERY );
+ if ( !xFormOfChild.is() )
+ throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+ // TODO: (localized) error message
+
+ if ( xFormOfChild->getParent() != m_xModelAsIndex )
+ throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+ // TODO: (localized) error message
+
+ m_aChilds.push_back( _ChildController );
+ _ChildController->setParent( *this );
+
+ // search the position of the model within the form
+ sal_uInt32 nPos = m_xModelAsIndex->getCount();
+ Reference< XFormComponent > xTemp;
+ for( ; nPos; )
+ {
+ m_xModelAsIndex->getByIndex(--nPos) >>= xTemp;
+ if ( xFormOfChild == xTemp )
+ {
+ Reference< XInterface > xIfc( _ChildController, UNO_QUERY );
+ m_xModelAsManager->attach( nPos, xIfc, makeAny( _ChildController) );
+ break;
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+Reference< XFormControllerContext > SAL_CALL FormController::getContext() throw (RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+ return m_xContext;
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::setContext( const Reference< XFormControllerContext >& _context ) throw (RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+ m_xContext = _context;
+}
+
+//------------------------------------------------------------------------------
+Reference< XInteractionHandler > SAL_CALL FormController::getInteractionHandler() throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setFilter" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+ return m_xInteractionHandler;
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::setInteractionHandler( const Reference< XInteractionHandler >& _interactionHandler ) throw (RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+ m_xInteractionHandler = _interactionHandler;
+}
+
+//------------------------------------------------------------------------------
+void FormController::setFilter(::std::vector<FmFieldInfo>& rFieldInfos)
+{
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
// create the composer
Reference< XRowSet > xForm(m_xModelAsIndex, UNO_QUERY);
Reference< XConnection > xConnection(OStaticDataAccessTools().getRowSetConnection(xForm));
@@ -2865,11 +3147,10 @@ void FmXFormController::setFilter(::std::vector<FmFieldInfo>& rFieldInfos)
// need to parse criteria localized
OStaticDataAccessTools aStaticTools;
Reference< XNumberFormatsSupplier> xFormatSupplier( aStaticTools.getNumberFormats(xConnection, sal_True));
- Reference< XNumberFormatter> xFormatter(m_xORB
- ->createInstance(::rtl::OUString::createFromAscii("com.sun.star.util.NumberFormatter")), UNO_QUERY);
+ Reference< XNumberFormatter> xFormatter( m_aContext.createComponent( "com.sun.star.util.NumberFormatter" ), UNO_QUERY );
xFormatter->attachNumberFormatsSupplier(xFormatSupplier);
Locale aAppLocale = Application::GetSettings().GetUILocale();
- LocaleDataWrapper aLocaleWrapper(m_xORB,aAppLocale);
+ LocaleDataWrapper aLocaleWrapper( m_aContext.getLegacyServiceFactory(), aAppLocale );
// retrieving the filter
const Sequence < PropertyValue >* pRow = aFilterRows.getConstArray();
@@ -2967,26 +3248,24 @@ void FmXFormController::setFilter(::std::vector<FmFieldInfo>& rFieldInfos)
if (aRow.empty())
continue;
- m_aFilters.push_back(aRow);
+ impl_addFilterRow( aRow );
}
}
// now set the filter controls
- for (::std::vector<FmFieldInfo>::iterator iter = rFieldInfos.begin();
- iter != rFieldInfos.end(); iter++)
+ for ( ::std::vector<FmFieldInfo>::iterator field = rFieldInfos.begin();
+ field != rFieldInfos.end();
+ ++field
+ )
{
- m_aFilterControls[(*iter).xText] = (*iter).xField;
+ m_aFilterComponents.push_back( field->xText );
}
-
- // add an empty row
- m_aFilters.push_back(FmFilterRow());
}
//------------------------------------------------------------------------------
-void FmXFormController::startFiltering()
+void FormController::startFiltering()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::startFiltering" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
OStaticDataAccessTools aStaticTools;
Reference< XConnection > xConnection( aStaticTools.getRowSetConnection( Reference< XRowSet >( m_xModelAsIndex, UNO_QUERY ) ) );
@@ -3013,8 +3292,7 @@ void FmXFormController::startFiltering()
// the control we have to activate after replacement
Reference< XDatabaseMetaData > xMetaData(xConnection->getMetaData());
Reference< XNumberFormatsSupplier > xFormatSupplier = aStaticTools.getNumberFormats(xConnection, sal_True);
- Reference< XNumberFormatter > xFormatter(m_xORB
- ->createInstance(::rtl::OUString::createFromAscii("com.sun.star.util.NumberFormatter")), UNO_QUERY);
+ Reference< XNumberFormatter > xFormatter( m_aContext.createComponent( "com.sun.star.util.NumberFormatter" ), UNO_QUERY );
xFormatter->attachNumberFormatsSupplier(xFormatSupplier);
// structure for storing the field info
@@ -3032,7 +3310,7 @@ void FmXFormController::startFiltering()
Reference< XModeSelector > xSelector(xControl, UNO_QUERY);
if (xSelector.is())
{
- xSelector->setMode(FILTER_MODE);
+ xSelector->setMode( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterMode" ) ) );
// listening for new controls of the selector
Reference< XContainer > xContainer(xSelector, UNO_QUERY);
@@ -3092,13 +3370,10 @@ void FmXFormController::startFiltering()
aCreationArgs[ 1 ] <<= NamedValue( ::rtl::OUString::createFromAscii( "NumberFormatter" ), makeAny( xFormatter ) );
aCreationArgs[ 2 ] <<= NamedValue( ::rtl::OUString::createFromAscii( "ControlModel" ), makeAny( xModel ) );
Reference< XControl > xFilterControl(
- m_xORB->createInstanceWithArguments(
- ::rtl::OUString::createFromAscii( "com.sun.star.form.control.FilterControl" ),
- aCreationArgs
- ),
+ m_aContext.createComponentWithArguments( "com.sun.star.form.control.FilterControl", aCreationArgs ),
UNO_QUERY
);
- DBG_ASSERT( xFilterControl.is(), "FmXFormController::startFiltering: could not create a filter control!" );
+ DBG_ASSERT( xFilterControl.is(), "FormController::startFiltering: could not create a filter control!" );
if ( replaceControl( xControl, xFilterControl ) )
{
@@ -3132,10 +3407,9 @@ void FmXFormController::startFiltering()
}
//------------------------------------------------------------------------------
-void FmXFormController::stopFiltering()
+void FormController::stopFiltering()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::stopFiltering" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
if ( !m_bFiltering ) // #104693# OJ
{ // nothing to do
return;
@@ -3150,17 +3424,10 @@ void FmXFormController::stopFiltering()
Sequence< Reference< XControl > > aControlsCopy( m_aControls );
const Reference< XControl > * pControls = aControlsCopy.getConstArray();
sal_Int32 nControlCount = aControlsCopy.getLength();
- // SdrPageView* pCurPageView = m_pView->GetSdrPageView();
-
- // sal_uInt16 nPos = pCurPageView ? pCurPageView->GetWinList().Find((OutputDevice*)m_pView->GetActualOutDev()) : SDRPAGEVIEWWIN_NOTFOUND;
- // const SdrPageWindow* pWindow = pCurPageView ? pCurPageView->FindPageWindow(*((OutputDevice*)m_pView->GetActualOutDev())) : 0L;
// clear the filter control map
- for (FmFilterControls::const_iterator iter = m_aFilterControls.begin();
- iter != m_aFilterControls.end(); iter++)
- (*iter).first->removeTextListener(this);
-
- m_aFilterControls.clear();
+ ::std::for_each( m_aFilterComponents.begin(), m_aFilterComponents.end(), RemoveComponentTextListener( this ) );
+ m_aFilterComponents.clear();
for ( sal_Int32 i = nControlCount; i > 0; )
{
@@ -3173,7 +3440,7 @@ void FmXFormController::stopFiltering()
Reference< XModeSelector > xSelector(xControl, UNO_QUERY);
if (xSelector.is())
{
- xSelector->setMode(DATA_MODE);
+ xSelector->setMode( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) ) );
// listening for new controls of the selector
Reference< XContainer > xContainer(xSelector, UNO_QUERY);
@@ -3197,7 +3464,7 @@ void FmXFormController::stopFiltering()
{
::rtl::OUString sServiceName;
OSL_VERIFY( xSet->getPropertyValue( FM_PROP_DEFAULTCONTROL ) >>= sServiceName );
- Reference< XControl > xNewControl( m_xORB->createInstance( sServiceName ), UNO_QUERY );
+ Reference< XControl > xNewControl( m_aContext.createComponent( sServiceName ), UNO_QUERY );
replaceControl( xControl, xNewControl );
}
}
@@ -3210,8 +3477,8 @@ void FmXFormController::stopFiltering()
m_bDetachEvents = sal_True;
- m_aFilters.clear();
- m_nCurrentFilterPosition = 0;
+ m_aFilterRows.clear();
+ m_nCurrentFilterPosition = -1;
// release the locks if possible
// lock all controls which are not used for filtering
@@ -3225,12 +3492,11 @@ void FmXFormController::stopFiltering()
// XModeSelector
//------------------------------------------------------------------------------
-void FmXFormController::setMode(const ::rtl::OUString& Mode) throw( NoSupportException, RuntimeException )
+void FormController::setMode(const ::rtl::OUString& Mode) throw( NoSupportException, RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::setMode" );
::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
if (!supportsMode(Mode))
throw NoSupportException();
@@ -3239,7 +3505,7 @@ void FmXFormController::setMode(const ::rtl::OUString& Mode) throw( NoSupportExc
m_aMode = Mode;
- if (Mode == FILTER_MODE)
+ if ( Mode.equalsAscii( "FilterMode" ) )
startFiltering();
else
stopFiltering();
@@ -3254,35 +3520,37 @@ void FmXFormController::setMode(const ::rtl::OUString& Mode) throw( NoSupportExc
}
//------------------------------------------------------------------------------
-::rtl::OUString SAL_CALL FmXFormController::getMode(void) throw( RuntimeException )
+::rtl::OUString SAL_CALL FormController::getMode(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getMode" );
-::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
return m_aMode;
}
//------------------------------------------------------------------------------
-Sequence< ::rtl::OUString > SAL_CALL FmXFormController::getSupportedModes(void) throw( RuntimeException )
+Sequence< ::rtl::OUString > SAL_CALL FormController::getSupportedModes(void) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getSupportedModes" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
static Sequence< ::rtl::OUString > aModes;
if (!aModes.getLength())
{
aModes.realloc(2);
::rtl::OUString* pModes = aModes.getArray();
- pModes[0] = DATA_MODE;
- pModes[1] = FILTER_MODE;
+ pModes[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) );
+ pModes[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterMode" ) );
}
return aModes;
}
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::supportsMode(const ::rtl::OUString& Mode) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::supportsMode(const ::rtl::OUString& Mode) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::supportsMode" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
Sequence< ::rtl::OUString > aModes(getSupportedModes());
const ::rtl::OUString* pModes = aModes.getConstArray();
for (sal_Int32 i = aModes.getLength(); i > 0; )
@@ -3294,37 +3562,32 @@ sal_Bool SAL_CALL FmXFormController::supportsMode(const ::rtl::OUString& Mode) t
}
//------------------------------------------------------------------------------
-Window* FmXFormController::getDialogParentWindow()
+Window* FormController::getDialogParentWindow()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::getDialogParentWindow" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
- Window* pParent = m_pWindow;
- if ( !pParent )
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
+ Window* pParentWindow = NULL;
+ try
{
- try
- {
- Reference< XControl > xContainerControl( getContainer(), UNO_QUERY_THROW );
- Reference< XWindowPeer > xContainerPeer( xContainerControl->getPeer(), UNO_QUERY_THROW );
- pParent = VCLUnoHelper::GetWindow( xContainerPeer );
- }
- catch( const Exception& )
- {
- OSL_ENSURE( sal_False, "FmXFormController::getDialogParentWindow: caught an exception!" );
- }
+ Reference< XControl > xContainerControl( getContainer(), UNO_QUERY_THROW );
+ Reference< XWindowPeer > xContainerPeer( xContainerControl->getPeer(), UNO_QUERY_THROW );
+ pParentWindow = VCLUnoHelper::GetWindow( xContainerPeer );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
}
- return pParent;
+ return pParentWindow;
}
//------------------------------------------------------------------------------
-bool FmXFormController::checkFormComponentValidity( ::rtl::OUString& /* [out] */ _rFirstInvalidityExplanation, Reference< XControlModel >& /* [out] */ _rxFirstInvalidModel ) SAL_THROW(())
+bool FormController::checkFormComponentValidity( ::rtl::OUString& /* [out] */ _rFirstInvalidityExplanation, Reference< XControlModel >& /* [out] */ _rxFirstInvalidModel ) SAL_THROW(())
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::checkFormComponentValidity" );
try
{
Reference< XEnumerationAccess > xControlEnumAcc( getModel(), UNO_QUERY );
Reference< XEnumeration > xControlEnumeration;
if ( xControlEnumAcc.is() )
xControlEnumeration = xControlEnumAcc->createEnumeration();
- OSL_ENSURE( xControlEnumeration.is(), "FmXFormController::checkFormComponentValidity: cannot enumerate the controls!" );
+ OSL_ENSURE( xControlEnumeration.is(), "FormController::checkFormComponentValidity: cannot enumerate the controls!" );
if ( !xControlEnumeration.is() )
// assume all valid
return true;
@@ -3340,7 +3603,7 @@ bool FmXFormController::checkFormComponentValidity( ::rtl::OUString& /* [out] */
continue;
Reference< XValidator > xValidator( xValidatable->getValidator() );
- OSL_ENSURE( xValidator.is(), "FmXFormController::checkFormComponentValidity: invalid, but no validator?" );
+ OSL_ENSURE( xValidator.is(), "FormController::checkFormComponentValidity: invalid, but no validator?" );
if ( !xValidator.is() )
// this violates the interface definition of css.form.validation.XValidatableFormComponent ...
continue;
@@ -3352,15 +3615,14 @@ bool FmXFormController::checkFormComponentValidity( ::rtl::OUString& /* [out] */
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::checkFormComponentValidity: caught an exception!" );
+ DBG_UNHANDLED_EXCEPTION();
}
return true;
}
//------------------------------------------------------------------------------
-Reference< XControl > FmXFormController::locateControl( const Reference< XControlModel >& _rxModel ) SAL_THROW(())
+Reference< XControl > FormController::locateControl( const Reference< XControlModel >& _rxModel ) SAL_THROW(())
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::locateControl" );
try
{
Sequence< Reference< XControl > > aControls( getControls() );
@@ -3369,18 +3631,18 @@ Reference< XControl > FmXFormController::locateControl( const Reference< XContro
for ( ; pControls != pControlsEnd; ++pControls )
{
- OSL_ENSURE( pControls->is(), "FmXFormController::locateControl: NULL-control?" );
+ OSL_ENSURE( pControls->is(), "FormController::locateControl: NULL-control?" );
if ( pControls->is() )
{
if ( ( *pControls)->getModel() == _rxModel )
return *pControls;
}
}
- OSL_ENSURE( sal_False, "FmXFormController::locateControl: did not find a control for this model!" );
+ OSL_ENSURE( sal_False, "FormController::locateControl: did not find a control for this model!" );
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "FmXFormController::locateControl: caught an exception!" );
+ DBG_UNHANDLED_EXCEPTION();
}
return NULL;
}
@@ -3448,12 +3710,11 @@ namespace
// XRowSetApproveListener
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::approveRowChange(const RowChangeEvent& _rEvent) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::approveRowChange(const RowChangeEvent& _rEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::approveRowChange" );
::osl::ClearableMutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
::cppu::OInterfaceIteratorHelper aIter(m_aRowSetApproveListeners);
sal_Bool bValid = sal_True;
if (aIter.hasMoreElements())
@@ -3486,7 +3747,7 @@ sal_Bool SAL_CALL FmXFormController::approveRowChange(const RowChangeEvent& _rEv
if ( !lcl_shouldValidateRequiredFields_nothrow( _rEvent.Source ) )
return sal_True;
- OSL_ENSURE( m_pColumnInfoCache.get(), "FmXFormController::approveRowChange: no column infos!" );
+ OSL_ENSURE( m_pColumnInfoCache.get(), "FormController::approveRowChange: no column infos!" );
if ( !m_pColumnInfoCache.get() )
return sal_True;
@@ -3537,11 +3798,11 @@ sal_Bool SAL_CALL FmXFormController::approveRowChange(const RowChangeEvent& _rEv
}
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::approveCursorMove(const EventObject& event) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::approveCursorMove(const EventObject& event) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::approveCursorMove" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
+
::cppu::OInterfaceIteratorHelper aIter(m_aRowSetApproveListeners);
if (aIter.hasMoreElements())
{
@@ -3554,11 +3815,11 @@ sal_Bool SAL_CALL FmXFormController::approveCursorMove(const EventObject& event)
}
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::approveRowSetChange(const EventObject& event) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::approveRowSetChange(const EventObject& event) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::approveRowSetChange" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
+
::cppu::OInterfaceIteratorHelper aIter(m_aRowSetApproveListeners);
if (aIter.hasMoreElements())
{
@@ -3572,30 +3833,29 @@ sal_Bool SAL_CALL FmXFormController::approveRowSetChange(const EventObject& even
// XRowSetApproveBroadcaster
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addRowSetApproveListener(const Reference< XRowSetApproveListener > & _rxListener) throw( RuntimeException )
+void SAL_CALL FormController::addRowSetApproveListener(const Reference< XRowSetApproveListener > & _rxListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addRowSetApproveListener" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
+
m_aRowSetApproveListeners.addInterface(_rxListener);
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeRowSetApproveListener(const Reference< XRowSetApproveListener > & _rxListener) throw( RuntimeException )
+void SAL_CALL FormController::removeRowSetApproveListener(const Reference< XRowSetApproveListener > & _rxListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeRowSetApproveListener" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
+
m_aRowSetApproveListeners.removeInterface(_rxListener);
}
// XErrorListener
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::errorOccured(const SQLErrorEvent& aEvent) throw( RuntimeException )
+void SAL_CALL FormController::errorOccured(const SQLErrorEvent& aEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::errorOccured" );
::osl::ClearableMutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
::cppu::OInterfaceIteratorHelper aIter(m_aErrorListeners);
if (aIter.hasMoreElements())
@@ -3613,61 +3873,62 @@ void SAL_CALL FmXFormController::errorOccured(const SQLErrorEvent& aEvent) throw
// XErrorBroadcaster
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addSQLErrorListener(const Reference< XSQLErrorListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::addSQLErrorListener(const Reference< XSQLErrorListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addSQLErrorListener" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
+
m_aErrorListeners.addInterface(aListener);
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeSQLErrorListener(const Reference< XSQLErrorListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::removeSQLErrorListener(const Reference< XSQLErrorListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeSQLErrorListener" );
::osl::MutexGuard aGuard( m_aMutex );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ impl_checkDisposed_throw();
+
m_aErrorListeners.removeInterface(aListener);
}
// XDatabaseParameterBroadcaster2
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addDatabaseParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::addDatabaseParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addDatabaseParameterListener" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
m_aParameterListeners.addInterface(aListener);
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeDatabaseParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::removeDatabaseParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeDatabaseParameterListener" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
m_aParameterListeners.removeInterface(aListener);
}
// XDatabaseParameterBroadcaster
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::addParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addParameterListener" );
- FmXFormController::addDatabaseParameterListener( aListener );
+ FormController::addDatabaseParameterListener( aListener );
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::removeParameterListener(const Reference< XDatabaseParameterListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeParameterListener" );
- FmXFormController::removeDatabaseParameterListener( aListener );
+ FormController::removeDatabaseParameterListener( aListener );
}
// XDatabaseParameterListener
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::approveParameter(const DatabaseParameterEvent& aEvent) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::approveParameter(const DatabaseParameterEvent& aEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::approveParameter" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
::cppu::OInterfaceIteratorHelper aIter(m_aParameterListeners);
if (aIter.hasMoreElements())
@@ -3698,10 +3959,7 @@ sal_Bool SAL_CALL FmXFormController::approveParameter(const DatabaseParameterEve
pParamRequest->addContinuation(pAbort);
// handle the request
- {
- ::vos::OGuard aGuard(Application::GetSolarMutex());
- m_xInteractionHandler->handle(xParamRequest);
- }
+ m_xInteractionHandler->handle(xParamRequest);
if (!pParamValues->wasSelected())
// canceled
@@ -3711,7 +3969,7 @@ sal_Bool SAL_CALL FmXFormController::approveParameter(const DatabaseParameterEve
Sequence< PropertyValue > aFinalValues = pParamValues->getValues();
if (aFinalValues.getLength() != aRequest.Parameters->getCount())
{
- DBG_ERROR("FmXFormController::approveParameter: the InteractionHandler returned nonsense!");
+ DBG_ERROR("FormController::approveParameter: the InteractionHandler returned nonsense!");
return sal_False;
}
const PropertyValue* pFinalValues = aFinalValues.getConstArray();
@@ -3724,19 +3982,19 @@ sal_Bool SAL_CALL FmXFormController::approveParameter(const DatabaseParameterEve
#ifdef DBG_UTIL
::rtl::OUString sName;
xParam->getPropertyValue(FM_PROP_NAME) >>= sName;
- DBG_ASSERT(sName.equals(pFinalValues->Name), "FmXFormController::approveParameter: suspicious value names!");
+ DBG_ASSERT(sName.equals(pFinalValues->Name), "FormController::approveParameter: suspicious value names!");
#endif
try { xParam->setPropertyValue(FM_PROP_VALUE, pFinalValues->Value); }
catch(Exception&)
{
- DBG_ERROR("FmXFormController::approveParameter: setting one of the properties failed!");
+ DBG_ERROR("FormController::approveParameter: setting one of the properties failed!");
}
}
}
}
catch(Exception&)
{
- DBG_ERROR("FmXFormController::approveParameter: caught an Exception (tried to let the InteractionHandler handle it)!");
+ DBG_UNHANDLED_EXCEPTION();
}
}
return sal_True;
@@ -3744,27 +4002,29 @@ sal_Bool SAL_CALL FmXFormController::approveParameter(const DatabaseParameterEve
// XConfirmDeleteBroadcaster
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addConfirmDeleteListener(const Reference< XConfirmDeleteListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::addConfirmDeleteListener(const Reference< XConfirmDeleteListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addConfirmDeleteListener" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
m_aDeleteListeners.addInterface(aListener);
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeConfirmDeleteListener(const Reference< XConfirmDeleteListener > & aListener) throw( RuntimeException )
+void SAL_CALL FormController::removeConfirmDeleteListener(const Reference< XConfirmDeleteListener > & aListener) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeConfirmDeleteListener" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
m_aDeleteListeners.removeInterface(aListener);
}
// XConfirmDeleteListener
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL FmXFormController::confirmDelete(const RowChangeEvent& aEvent) throw( RuntimeException )
+sal_Bool SAL_CALL FormController::confirmDelete(const RowChangeEvent& aEvent) throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::confirmDelete" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
::cppu::OInterfaceIteratorHelper aIter(m_aDeleteListeners);
if (aIter.hasMoreElements())
@@ -3773,32 +4033,62 @@ sal_Bool SAL_CALL FmXFormController::confirmDelete(const RowChangeEvent& aEvent)
aEvt.Source = *this;
return ((XConfirmDeleteListener*)aIter.next())->confirmDelete(aEvt);
}
+ // default handling: instantiate an interaction handler and let it handle the request
+
+ String sTitle;
+ sal_Int32 nLength = aEvent.Rows;
+ if ( nLength > 1 )
+ {
+ sTitle = SVX_RES( RID_STR_DELETECONFIRM_RECORDS );
+ sTitle.SearchAndReplace( '#', String::CreateFromInt32( nLength ) );
+ }
else
+ sTitle = SVX_RES( RID_STR_DELETECONFIRM_RECORD );
+
+ try
{
- // default handling
- UniString aTitle;
- sal_Int32 nLength = aEvent.Rows;
- if (nLength > 1)
- {
- aTitle = SVX_RES(RID_STR_DELETECONFIRM_RECORDS);
- aTitle.SearchAndReplace('#', String::CreateFromInt32(nLength));
- }
- else
- aTitle = SVX_RES(RID_STR_DELETECONFIRM_RECORD);
+ if ( !ensureInteractionHandler() )
+ return sal_False;
+
+ // two continuations allowed: Yes and No
+ OInteractionApprove* pApprove = new OInteractionApprove;
+ OInteractionDisapprove* pDisapprove = new OInteractionDisapprove;
- ConfirmDeleteDialog aDlg(getDialogParentWindow(), aTitle);
- return RET_YES == aDlg.Execute();
+ // the request
+ SQLWarning aWarning;
+ aWarning.Message = sTitle;
+ SQLWarning aDetails;
+ aDetails.Message = String( SVX_RES( RID_STR_DELETECONFIRM ) );
+ aWarning.NextException <<= aDetails;
+
+ OInteractionRequest* pRequest = new OInteractionRequest( makeAny( aWarning ) );
+ Reference< XInteractionRequest > xRequest( pRequest );
+
+ // some knittings
+ pRequest->addContinuation( pApprove );
+ pRequest->addContinuation( pDisapprove );
+
+ // handle the request
+ m_xInteractionHandler->handle( xRequest );
+
+ if ( pApprove->wasSelected() )
+ return sal_True;
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
}
+
+ return sal_False;
}
//------------------------------------------------------------------------------
-void FmXFormController::invalidateFeatures( const ::std::vector< sal_Int32 >& _rFeatures )
+void SAL_CALL FormController::invalidateFeatures( const Sequence< ::sal_Int16 >& _Features ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::invalidateFeatures" );
::osl::MutexGuard aGuard( m_aMutex );
// for now, just copy the ids of the features, because ....
- ::std::copy( _rFeatures.begin(), _rFeatures.end(),
- ::std::insert_iterator< ::std::set< sal_Int32 > >( m_aInvalidFeatures, m_aInvalidFeatures.begin() )
+ ::std::copy( _Features.getConstArray(), _Features.getConstArray() + _Features.getLength(),
+ ::std::insert_iterator< ::std::set< sal_Int16 > >( m_aInvalidFeatures, m_aInvalidFeatures.begin() )
);
// ... we will do the real invalidation asynchronously
@@ -3807,13 +4097,30 @@ void FmXFormController::invalidateFeatures( const ::std::vector< sal_Int32 >& _r
}
//------------------------------------------------------------------------------
+void SAL_CALL FormController::invalidateAllFeatures( ) throw (RuntimeException)
+{
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ Sequence< sal_Int16 > aInterceptedFeatures( m_aFeatureDispatchers.size() );
+ ::std::transform(
+ m_aFeatureDispatchers.begin(),
+ m_aFeatureDispatchers.end(),
+ aInterceptedFeatures.getArray(),
+ ::std::select1st< DispatcherContainer::value_type >()
+ );
+
+ aGuard.clear();
+ if ( aInterceptedFeatures.getLength() )
+ invalidateFeatures( aInterceptedFeatures );
+}
+
+//------------------------------------------------------------------------------
Reference< XDispatch >
-FmXFormController::interceptedQueryDispatch(sal_uInt16 /*_nId*/, const URL& aURL,
+FormController::interceptedQueryDispatch( const URL& aURL,
const ::rtl::OUString& /*aTargetFrameName*/, sal_Int32 /*nSearchFlags*/)
throw( RuntimeException )
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::interceptedQueryDispatch" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
Reference< XDispatch > xReturn;
// dispatches handled by ourself
if ( ( aURL.Complete == FMURL_CONFIRM_DELETION )
@@ -3824,22 +4131,23 @@ FmXFormController::interceptedQueryDispatch(sal_uInt16 /*_nId*/, const URL& aURL
xReturn = static_cast< XDispatch* >( this );
// dispatches of FormSlot-URLs we have to translate
- if ( !xReturn.is() && m_aControllerFeatures.isAssigned() )
+ if ( !xReturn.is() && m_xFormOperations.is() )
{
// find the slot id which corresponds to the URL
- sal_Int32 nFeatureId = ::svx::FeatureSlotTranslation::getControllerFeatureSlotIdForURL( aURL.Main );
- if ( nFeatureId > 0 )
+ sal_Int32 nFeatureSlotId = ::svx::FeatureSlotTranslation::getControllerFeatureSlotIdForURL( aURL.Main );
+ sal_Int16 nFormFeature = ( nFeatureSlotId != -1 ) ? ::svx::FeatureSlotTranslation::getFormFeatureForSlotId( nFeatureSlotId ) : -1;
+ if ( nFormFeature > 0 )
{
// get the dispatcher for this feature, create if necessary
- DispatcherContainer::const_iterator aDispatcherPos = m_aFeatureDispatchers.find( nFeatureId );
+ DispatcherContainer::const_iterator aDispatcherPos = m_aFeatureDispatchers.find( nFormFeature );
if ( aDispatcherPos == m_aFeatureDispatchers.end() )
{
aDispatcherPos = m_aFeatureDispatchers.insert(
- DispatcherContainer::value_type( nFeatureId, new ::svx::OSingleFeatureDispatcher( aURL, nFeatureId, *m_aControllerFeatures, m_aMutex ) )
+ DispatcherContainer::value_type( nFormFeature, new ::svx::OSingleFeatureDispatcher( aURL, nFormFeature, m_xFormOperations, m_aMutex ) )
).first;
}
- OSL_ENSURE( aDispatcherPos->second.is(), "FmXFormController::interceptedQueryDispatch: should have a dispatcher by now!" );
+ OSL_ENSURE( aDispatcherPos->second.is(), "FormController::interceptedQueryDispatch: should have a dispatcher by now!" );
return aDispatcherPos->second;
}
}
@@ -3849,12 +4157,11 @@ FmXFormController::interceptedQueryDispatch(sal_uInt16 /*_nId*/, const URL& aURL
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::dispatch( const URL& _rURL, const Sequence< PropertyValue >& _rArgs ) throw (RuntimeException)
+void SAL_CALL FormController::dispatch( const URL& _rURL, const Sequence< PropertyValue >& _rArgs ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::dispatch" );
if ( _rArgs.getLength() != 1 )
{
- DBG_ERROR( "FmXFormController::dispatch: no arguments -> no dispatch!" );
+ DBG_ERROR( "FormController::dispatch: no arguments -> no dispatch!" );
return;
}
@@ -3869,18 +4176,17 @@ void SAL_CALL FmXFormController::dispatch( const URL& _rURL, const Sequence< Pro
if ( _rURL.Complete == FMURL_CONFIRM_DELETION )
{
- DBG_ERROR( "FmXFormController::dispatch: How do you expect me to return something via this call?" );
+ DBG_ERROR( "FormController::dispatch: How do you expect me to return something via this call?" );
// confirmDelete has a return value - dispatch hasn't
return;
}
- DBG_ERROR( "FmXFormController::dispatch: unknown URL!" );
+ DBG_ERROR( "FormController::dispatch: unknown URL!" );
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::addStatusListener( const Reference< XStatusListener >& _rxListener, const URL& _rURL ) throw (RuntimeException)
+void SAL_CALL FormController::addStatusListener( const Reference< XStatusListener >& _rxListener, const URL& _rURL ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::addStatusListener" );
if (_rURL.Complete == FMURL_CONFIRM_DELETION)
{
if (_rxListener.is())
@@ -3893,23 +4199,33 @@ void SAL_CALL FmXFormController::addStatusListener( const Reference< XStatusList
}
}
else
- OSL_ENSURE(sal_False, "FmXFormController::addStatusListener: invalid (unsupported) URL!");
+ OSL_ENSURE(sal_False, "FormController::addStatusListener: invalid (unsupported) URL!");
+}
+
+//------------------------------------------------------------------------------
+Reference< XInterface > SAL_CALL FormController::getParent() throw( RuntimeException )
+{
+ return m_xParent;
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FormController::setParent( const Reference< XInterface >& Parent) throw( NoSupportException, RuntimeException )
+{
+ m_xParent = Parent;
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::removeStatusListener( const Reference< XStatusListener >& /*_rxListener*/, const URL& _rURL ) throw (RuntimeException)
+void SAL_CALL FormController::removeStatusListener( const Reference< XStatusListener >& /*_rxListener*/, const URL& _rURL ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::removeStatusListener" );
(void)_rURL;
- OSL_ENSURE(_rURL.Complete == FMURL_CONFIRM_DELETION, "FmXFormController::removeStatusListener: invalid (unsupported) URL!");
+ OSL_ENSURE(_rURL.Complete == FMURL_CONFIRM_DELETION, "FormController::removeStatusListener: invalid (unsupported) URL!");
// we never really added the listener, so we don't need to remove it
}
//------------------------------------------------------------------------------
-Reference< XDispatchProviderInterceptor > FmXFormController::createInterceptor(const Reference< XDispatchProviderInterception > & _xInterception)
+Reference< XDispatchProviderInterceptor > FormController::createInterceptor(const Reference< XDispatchProviderInterception > & _xInterception)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::createInterceptor" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
#ifdef DBG_UTIL
// check if we already have a interceptor for the given object
for ( ConstInterceptorsIterator aIter = m_aControlDispatchInterceptors.begin();
@@ -3918,49 +4234,43 @@ Reference< XDispatchProviderInterceptor > FmXFormController::createInterceptor(
)
{
if ((*aIter)->getIntercepted() == _xInterception)
- DBG_ERROR("FmXFormController::createInterceptor : we already do intercept this objects dispatches !");
+ DBG_ERROR("FormController::createInterceptor : we already do intercept this objects dispatches !");
}
#endif
- ::rtl::OUString sInterceptorScheme(RTL_CONSTASCII_USTRINGPARAM("*"));
- FmXDispatchInterceptorImpl* pInterceptor = new FmXDispatchInterceptorImpl(_xInterception, this, 0, Sequence< ::rtl::OUString >(&sInterceptorScheme, 1));
+ DispatchInterceptionMultiplexer* pInterceptor = new DispatchInterceptionMultiplexer( _xInterception, this );
pInterceptor->acquire();
- m_aControlDispatchInterceptors.insert(m_aControlDispatchInterceptors.end(), pInterceptor);
+ m_aControlDispatchInterceptors.insert( m_aControlDispatchInterceptors.end(), pInterceptor );
- return (XDispatchProviderInterceptor*)pInterceptor;
+ return pInterceptor;
}
//------------------------------------------------------------------------------
-bool FmXFormController::ensureInteractionHandler()
+bool FormController::ensureInteractionHandler()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::ensureInteractionHandler" );
if ( m_xInteractionHandler.is() )
return true;
if ( m_bAttemptedHandlerCreation )
return false;
m_bAttemptedHandlerCreation = true;
- if ( !m_xORB.is() )
- return false;
- m_xInteractionHandler.set( m_xORB->createInstance( SRV_SDB_INTERACTION_HANDLER ), UNO_QUERY );
- OSL_ENSURE( m_xInteractionHandler.is(), "FmXFormController::ensureInteractionHandler: could not create an interaction handler!" );
+ m_xInteractionHandler.set( m_aContext.createComponent( (::rtl::OUString)SRV_SDB_INTERACTION_HANDLER ), UNO_QUERY );
+ OSL_ENSURE( m_xInteractionHandler.is(), "FormController::ensureInteractionHandler: could not create an interaction handler!" );
return m_xInteractionHandler.is();
}
//------------------------------------------------------------------------------
-void SAL_CALL FmXFormController::handle( const Reference< XInteractionRequest >& _rRequest ) throw (RuntimeException)
+void SAL_CALL FormController::handle( const Reference< XInteractionRequest >& _rRequest ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::handle" );
if ( !ensureInteractionHandler() )
return;
m_xInteractionHandler->handle( _rRequest );
}
//------------------------------------------------------------------------------
-void FmXFormController::deleteInterceptor(const Reference< XDispatchProviderInterception > & _xInterception)
+void FormController::deleteInterceptor(const Reference< XDispatchProviderInterception > & _xInterception)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::deleteInterceptor" );
- OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" );
+ OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
// search the interceptor responsible for the given object
InterceptorsIterator aIter;
for ( aIter = m_aControlDispatchInterceptors.begin();
@@ -3977,7 +4287,7 @@ void FmXFormController::deleteInterceptor(const Reference< XDispatchProviderInte
}
// log off the interception from it's interception object
- FmXDispatchInterceptorImpl* pInterceptorImpl = *aIter;
+ DispatchInterceptionMultiplexer* pInterceptorImpl = *aIter;
pInterceptorImpl->dispose();
pInterceptorImpl->release();
@@ -3986,35 +4296,22 @@ void FmXFormController::deleteInterceptor(const Reference< XDispatchProviderInte
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException)
+void FormController::implInvalidateCurrentControlDependentFeatures()
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::initialize" );
- DBG_ASSERT( !m_xInteractionHandler.is(), "FmXFormController::initialize: already initialized!" );
- // currently, we only initialize our interaction handler here, so it's sufficient to assert this
+ Sequence< sal_Int16 > aCurrentControlDependentFeatures(4);
- ::comphelper::NamedValueCollection aArgs( aArguments );
- m_xInteractionHandler = aArgs.getOrDefault( "InteractionHandler", m_xInteractionHandler );
-}
-
-//--------------------------------------------------------------------
-void FmXFormController::implInvalidateCurrentControlDependentFeatures()
-{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::implInvalidateCurrentControlDependentFeatures" );
- ::std::vector< sal_Int32 > aCurrentControlDependentFeatures;
-
- aCurrentControlDependentFeatures.push_back( SID_FM_SORTUP );
- aCurrentControlDependentFeatures.push_back( SID_FM_SORTDOWN );
- aCurrentControlDependentFeatures.push_back( SID_FM_AUTOFILTER );
- aCurrentControlDependentFeatures.push_back( SID_FM_REFRESH_FORM_CONTROL );
+ aCurrentControlDependentFeatures[0] = FormFeature::SortAscending;
+ aCurrentControlDependentFeatures[1] = FormFeature::SortDescending;
+ aCurrentControlDependentFeatures[2] = FormFeature::AutoFilter;
+ aCurrentControlDependentFeatures[3] = FormFeature::RefreshCurrentControl;
- if ( m_pView && m_pView->GetFormShell() && m_pView->GetFormShell()->GetImpl() )
- m_pView->GetFormShell()->GetImpl()->invalidateFeatures( aCurrentControlDependentFeatures );
invalidateFeatures( aCurrentControlDependentFeatures );
}
//--------------------------------------------------------------------
-void SAL_CALL FmXFormController::columnChanged( const EventObject& /*_event*/ ) throw (RuntimeException)
+void SAL_CALL FormController::columnChanged( const EventObject& /*_event*/ ) throw (RuntimeException)
{
- RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmXFormController::columnChanged" );
implInvalidateCurrentControlDependentFeatures();
}
+
+} // namespace svxform
diff --git a/svx/source/form/formcontrolling.cxx b/svx/source/form/formcontrolling.cxx
index 104d2f423eb5..63f2ddf69d8e 100644
--- a/svx/source/form/formcontrolling.cxx
+++ b/svx/source/form/formcontrolling.cxx
@@ -33,7 +33,7 @@
#include "formcontrolling.hxx"
#include "fmurl.hxx"
-#include <svx/svxids.hrc>
+#include "svx/svxids.hrc"
#include "fmprop.hrc"
#include "fmtools.hxx"
@@ -60,7 +60,7 @@ namespace svx
/** === begin UNO using === **/
using ::com::sun::star::uno::Reference;
using ::com::sun::star::lang::XMultiServiceFactory;
- using ::com::sun::star::form::XFormController;
+ using ::com::sun::star::form::runtime::XFormController;
using ::com::sun::star::form::XForm;
using ::com::sun::star::form::runtime::FormOperations;
using ::com::sun::star::uno::Exception;
diff --git a/svx/source/form/formdispatchinterceptor.cxx b/svx/source/form/formdispatchinterceptor.cxx
new file mode 100644
index 000000000000..903d27d6e650
--- /dev/null
+++ b/svx/source/form/formdispatchinterceptor.cxx
@@ -0,0 +1,213 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+#include "formdispatchinterceptor.hxx"
+
+/** === begin UNO includes === **/
+/** === end UNO includes === **/
+
+#include <tools/debug.hxx>
+
+//........................................................................
+namespace svxform
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::frame::XDispatchProviderInterception;
+ using ::com::sun::star::frame::XDispatchProviderInterceptor;
+ using ::com::sun::star::lang::XComponent;
+ using ::com::sun::star::util::URL;
+ using ::com::sun::star::frame::XDispatch;
+ using ::com::sun::star::frame::DispatchDescriptor;
+ using ::com::sun::star::frame::XDispatchProvider;
+ using ::com::sun::star::lang::EventObject;
+ /** === end UNO using === **/
+
+ //========================================================================
+ //= DispatchInterceptionMultiplexer
+ //========================================================================
+
+ DBG_NAME(DispatchInterceptionMultiplexer);
+ //------------------------------------------------------------------------
+ DispatchInterceptionMultiplexer::DispatchInterceptionMultiplexer(
+ const Reference< XDispatchProviderInterception >& _rxToIntercept, DispatchInterceptor* _pMaster )
+ :DispatchInterceptionMultiplexer_BASE(_pMaster && _pMaster->getInterceptorMutex() ? *_pMaster->getInterceptorMutex() : m_aFallback)
+ ,m_aFallback()
+ ,m_pMutex( _pMaster && _pMaster->getInterceptorMutex() ? _pMaster->getInterceptorMutex() : &m_aFallback )
+ ,m_xIntercepted(_rxToIntercept)
+ ,m_bListening(sal_False)
+ ,m_pMaster(_pMaster)
+ {
+ DBG_CTOR(DispatchInterceptionMultiplexer,NULL);
+
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ ::comphelper::increment(m_refCount);
+ if (_rxToIntercept.is())
+ {
+ _rxToIntercept->registerDispatchProviderInterceptor((XDispatchProviderInterceptor*)this);
+ // this should make us the top-level dispatch-provider for the component, via a call to our
+ // setDispatchProvider we should have got an fallback for requests we (i.e. our master) cannot fullfill
+ Reference< XComponent> xInterceptedComponent(_rxToIntercept, UNO_QUERY);
+ if (xInterceptedComponent.is())
+ {
+ xInterceptedComponent->addEventListener(this);
+ m_bListening = sal_True;
+ }
+ }
+ ::comphelper::decrement(m_refCount);
+ }
+
+ //------------------------------------------------------------------------
+ DispatchInterceptionMultiplexer::~DispatchInterceptionMultiplexer()
+ {
+ if (!rBHelper.bDisposed)
+ dispose();
+
+ DBG_DTOR(DispatchInterceptionMultiplexer,NULL);
+ }
+
+ //------------------------------------------------------------------------------
+ Reference< XDispatch > SAL_CALL DispatchInterceptionMultiplexer::queryDispatch( const URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw(RuntimeException)
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ Reference< XDispatch> xResult;
+ // ask our 'real' interceptor
+ if (m_pMaster)
+ xResult = m_pMaster->interceptedQueryDispatch( aURL, aTargetFrameName, nSearchFlags);
+
+ // ask our slave provider
+ if (!xResult.is() && m_xSlaveDispatcher.is())
+ xResult = m_xSlaveDispatcher->queryDispatch(aURL, aTargetFrameName, nSearchFlags);
+
+ return xResult;
+ }
+
+ //------------------------------------------------------------------------------
+ Sequence< Reference< XDispatch > > SAL_CALL
+ DispatchInterceptionMultiplexer::queryDispatches( const Sequence< DispatchDescriptor >& aDescripts ) throw(RuntimeException)
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ Sequence< Reference< XDispatch> > aReturn(aDescripts.getLength());
+ Reference< XDispatch>* pReturn = aReturn.getArray();
+ const DispatchDescriptor* pDescripts = aDescripts.getConstArray();
+ for (sal_Int16 i=0; i<aDescripts.getLength(); ++i, ++pReturn, ++pDescripts)
+ {
+ *pReturn = queryDispatch(pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags);
+ }
+ return aReturn;
+ }
+
+ //------------------------------------------------------------------------------
+ Reference< XDispatchProvider > SAL_CALL DispatchInterceptionMultiplexer::getSlaveDispatchProvider( ) throw(RuntimeException)
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ return m_xSlaveDispatcher;
+ }
+
+ //------------------------------------------------------------------------------
+ void SAL_CALL DispatchInterceptionMultiplexer::setSlaveDispatchProvider(const Reference< XDispatchProvider>& xNewDispatchProvider) throw( RuntimeException )
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ m_xSlaveDispatcher = xNewDispatchProvider;
+ }
+
+ //------------------------------------------------------------------------------
+ Reference< XDispatchProvider> SAL_CALL DispatchInterceptionMultiplexer::getMasterDispatchProvider(void) throw( RuntimeException )
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ return m_xMasterDispatcher;
+ }
+
+ //------------------------------------------------------------------------------
+ void SAL_CALL DispatchInterceptionMultiplexer::setMasterDispatchProvider(const Reference< XDispatchProvider>& xNewSupplier) throw( RuntimeException )
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ m_xMasterDispatcher = xNewSupplier;
+ }
+
+ //------------------------------------------------------------------------------
+ void SAL_CALL DispatchInterceptionMultiplexer::disposing(const EventObject& Source) throw( RuntimeException )
+ {
+ if (m_bListening)
+ {
+ Reference< XDispatchProviderInterception > xIntercepted(m_xIntercepted.get(), UNO_QUERY);
+ if (Source.Source == xIntercepted)
+ ImplDetach();
+ }
+ }
+
+ //------------------------------------------------------------------------------
+ void DispatchInterceptionMultiplexer::ImplDetach()
+ {
+ ::osl::MutexGuard aGuard( *m_pMutex );
+ OSL_ENSURE(m_bListening, "DispatchInterceptionMultiplexer::ImplDetach: invalid call!");
+
+ // deregister ourself from the interception component
+ Reference< XDispatchProviderInterception > xIntercepted(m_xIntercepted.get(), UNO_QUERY);
+ if (xIntercepted.is())
+ xIntercepted->releaseDispatchProviderInterceptor(static_cast<XDispatchProviderInterceptor*>(this));
+
+ // m_xIntercepted = Reference< XDispatchProviderInterception >();
+ // Don't reset m_xIntercepted: It may be needed by our owner to check for which object we were
+ // responsible. As we hold the object with a weak reference only, this should be no problem.
+ // 88936 - 23.07.2001 - frank.schoenheit@sun.com
+ m_pMaster = NULL;
+ m_pMutex = &m_aFallback;
+ m_bListening = sal_False;
+ }
+
+ //------------------------------------------------------------------------------
+ void DispatchInterceptionMultiplexer::disposing()
+ {
+ // remove ourself as event listener from the interception component
+ if (m_bListening)
+ {
+ Reference< XComponent> xInterceptedComponent(m_xIntercepted.get(), UNO_QUERY);
+ if (xInterceptedComponent.is())
+ xInterceptedComponent->removeEventListener(static_cast<XEventListener*>(this));
+
+ // detach from the interception component
+ ImplDetach();
+ }
+ }
+
+//........................................................................
+} // namespace svxform
+//........................................................................
diff --git a/svx/source/form/fmdispatch.cxx b/svx/source/form/formfeaturedispatcher.cxx
index 154063409bef..82ca17812562 100644
--- a/svx/source/form/fmdispatch.cxx
+++ b/svx/source/form/formfeaturedispatcher.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmdispatch.cxx,v $
- * $Revision: 1.7 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -30,8 +27,11 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
-#include "fmdispatch.hxx"
-#include "formcontrolling.hxx"
+
+#include "formfeaturedispatcher.hxx"
+
+#include <comphelper/namedvaluecollection.hxx>
+#include <tools/diagnose_ex.h>
//........................................................................
namespace svx
@@ -49,13 +49,13 @@ namespace svx
//= OSingleFeatureDispatcher
//====================================================================
//--------------------------------------------------------------------
- OSingleFeatureDispatcher::OSingleFeatureDispatcher( const URL& _rFeatureURL, sal_Int32 _nFeatureId,
- const FormControllerHelper& _rController, ::osl::Mutex& _rMutex )
+ OSingleFeatureDispatcher::OSingleFeatureDispatcher( const URL& _rFeatureURL, const sal_Int16 _nFormFeature,
+ const Reference< XFormOperations >& _rxFormOperations, ::osl::Mutex& _rMutex )
:m_rMutex( _rMutex )
,m_aStatusListeners( _rMutex )
- ,m_rController( _rController )
+ ,m_xFormOperations( _rxFormOperations )
,m_aFeatureURL( _rFeatureURL )
- ,m_nFeatureId( _nFeatureId )
+ ,m_nFormFeature( _nFormFeature )
,m_bLastKnownEnabled( sal_False )
,m_bDisposed( sal_False )
{
@@ -82,10 +82,9 @@ namespace svx
//--------------------------------------------------------------------
void OSingleFeatureDispatcher::getUnoState( FeatureStateEvent& /* [out] */ _rState ) const
{
- FeatureState aState;
_rState.Source = *const_cast< OSingleFeatureDispatcher* >( this );
- m_rController.getState( m_nFeatureId, aState );
+ FeatureState aState( m_xFormOperations->getState( m_nFormFeature ) );
_rState.FeatureURL = m_aFeatureURL;
_rState.IsEnabled = aState.Enabled;
@@ -161,21 +160,34 @@ namespace svx
OSL_ENSURE( _rURL.Complete == m_aFeatureURL.Complete, "OSingleFeatureDispatcher::dispatch: not responsible for this URL!" );
(void)_rURL;
- if ( m_rController.isEnabled( m_nFeatureId ) )
- {
- // release our mutex before executing the slot?
- sal_Int32 nFeatureId( m_nFeatureId );
- aGuard.clear();
+ if ( !m_xFormOperations->isEnabled( m_nFormFeature ) )
+ return;
+ // release our mutex before executing the command
+ sal_Int16 nFormFeature( m_nFormFeature );
+ Reference< XFormOperations > xFormOperations( m_xFormOperations );
+ aGuard.clear();
+
+ try
+ {
if ( !_rArguments.getLength() )
{
- m_rController.execute( nFeatureId );
+ xFormOperations->execute( nFormFeature );
}
else
{ // at the moment we only support one parameter
- m_rController.execute( nFeatureId, _rArguments[0].Name, _rArguments[0].Value );
+ ::comphelper::NamedValueCollection aArgs( _rArguments );
+ xFormOperations->executeWithArguments( nFormFeature, aArgs.getNamedValues() );
}
}
+ catch( const RuntimeException& )
+ {
+ throw;
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
}
//--------------------------------------------------------------------
diff --git a/svx/source/form/legacyformcontroller.cxx b/svx/source/form/legacyformcontroller.cxx
new file mode 100644
index 000000000000..47805a8d6ee1
--- /dev/null
+++ b/svx/source/form/legacyformcontroller.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+#include "fmservs.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/form/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+/** === end UNO includes === **/
+
+#include <cppuhelper/implbase2.hxx>
+
+//........................................................................
+namespace svxform
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::lang::XMultiServiceFactory;
+ using ::com::sun::star::awt::XControl;
+ using ::com::sun::star::awt::XTabControllerModel;
+ using ::com::sun::star::awt::XControlContainer;
+ using ::com::sun::star::lang::XServiceInfo;
+ /** === end UNO using === **/
+
+ using namespace ::com::sun::star;
+
+ //====================================================================
+ //= LegacyFormController
+ //====================================================================
+ typedef ::cppu::WeakImplHelper2 < form::XFormController
+ , XServiceInfo
+ > LegacyFormController_Base;
+ /** is an implementation of the legacy form controller service, namely css.form.FormController, supporting the
+ css.form.XFormController interface.
+
+ This legacy API is superseded by css.form.runtime.(X)FormController, and though we migrated all OOo-internal
+ usage of this old API, their might be clients external to OOo still using it (though this is rather unlikely).
+ */
+ class LegacyFormController : public LegacyFormController_Base
+ {
+ public:
+ static Reference< XInterface > Create( const Reference< XMultiServiceFactory >& _rxFactory )
+ {
+ return *( new LegacyFormController( _rxFactory ) );
+ }
+
+ protected:
+ LegacyFormController( const Reference< XMultiServiceFactory >& _rxFactory )
+ :m_xDelegator( _rxFactory->createInstance( FM_FORM_CONTROLLER ), UNO_QUERY_THROW )
+ {
+ }
+
+ // form::XFormController
+ virtual Reference< XControl > SAL_CALL getCurrentControl( ) throw (RuntimeException);
+ virtual void SAL_CALL addActivateListener( const Reference< form::XFormControllerListener >& l ) throw (RuntimeException);
+ virtual void SAL_CALL removeActivateListener( const Reference< form::XFormControllerListener >& l ) throw (RuntimeException);
+
+ // awt::XTabController
+ virtual void SAL_CALL setModel( const Reference< XTabControllerModel >& Model ) throw (RuntimeException);
+ virtual Reference< XTabControllerModel > SAL_CALL getModel( ) throw (RuntimeException);
+ virtual void SAL_CALL setContainer( const Reference< XControlContainer >& Container ) throw (RuntimeException);
+ virtual Reference< XControlContainer > SAL_CALL getContainer( ) throw (RuntimeException);
+ virtual Sequence< Reference< XControl > > SAL_CALL getControls( ) throw (RuntimeException);
+ virtual void SAL_CALL autoTabOrder( ) throw (RuntimeException);
+ virtual void SAL_CALL activateTabOrder( ) throw (RuntimeException);
+ virtual void SAL_CALL activateFirst( ) throw (RuntimeException);
+ virtual void SAL_CALL activateLast( ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+ private:
+ const Reference< form::runtime::XFormController > m_xDelegator;
+ };
+
+ //--------------------------------------------------------------------
+ Reference< XControl > SAL_CALL LegacyFormController::getCurrentControl( ) throw (RuntimeException)
+ {
+ return m_xDelegator->getCurrentControl();
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::addActivateListener( const Reference< form::XFormControllerListener >& _listener ) throw (RuntimeException)
+ {
+ m_xDelegator->addActivateListener( _listener );
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::removeActivateListener( const Reference< form::XFormControllerListener >& _listener ) throw (RuntimeException)
+ {
+ m_xDelegator->removeActivateListener( _listener );
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::setModel( const Reference< XTabControllerModel >& _model ) throw (RuntimeException)
+ {
+ m_xDelegator->setModel( _model );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XTabControllerModel > SAL_CALL LegacyFormController::getModel( ) throw (RuntimeException)
+ {
+ return m_xDelegator->getModel();
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::setContainer( const Reference< XControlContainer >& _container ) throw (RuntimeException)
+ {
+ m_xDelegator->setContainer( _container );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XControlContainer > SAL_CALL LegacyFormController::getContainer( ) throw (RuntimeException)
+ {
+ return m_xDelegator->getContainer();
+ }
+
+ //--------------------------------------------------------------------
+ Sequence< Reference< XControl > > SAL_CALL LegacyFormController::getControls( ) throw (RuntimeException)
+ {
+ return m_xDelegator->getControls();
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::autoTabOrder( ) throw (RuntimeException)
+ {
+ m_xDelegator->autoTabOrder();
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::activateTabOrder( ) throw (RuntimeException)
+ {
+ m_xDelegator->activateTabOrder();
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::activateFirst( ) throw (RuntimeException)
+ {
+ m_xDelegator->activateFirst();
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL LegacyFormController::activateLast( ) throw (RuntimeException)
+ {
+ m_xDelegator->activateLast();
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL LegacyFormController::getImplementationName( ) throw (RuntimeException)
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.comp.svx.LegacyFormController" ) );
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL LegacyFormController::supportsService( const ::rtl::OUString& _serviceName ) throw (RuntimeException)
+ {
+ Sequence< ::rtl::OUString > aServices( getSupportedServiceNames() );
+ const ::rtl::OUString* pServices = aServices.getConstArray();
+ for ( sal_Int32 i = 0; i < aServices.getLength(); ++i, ++pServices )
+ if( pServices->equals( _serviceName ) )
+ return sal_True;
+ return sal_False;
+ }
+
+ //--------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL LegacyFormController::getSupportedServiceNames( ) throw (RuntimeException)
+ {
+ Sequence< ::rtl::OUString > aServices(2);
+ aServices.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.FormController" ) );
+ aServices.getArray()[1] = ::rtl::OUString::createFromAscii("com.sun.star.awt.control.TabController");
+ return aServices;
+ }
+
+//........................................................................
+} // namespace svxform
+//........................................................................
+
+//------------------------------------------------------------------
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
+ LegacyFormController_NewInstance_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & _rxORB )
+{
+ return ::svxform::LegacyFormController::Create( _rxORB );
+}
+
diff --git a/svx/source/form/makefile.mk b/svx/source/form/makefile.mk
index b649be94d106..71002531544c 100644
--- a/svx/source/form/makefile.mk
+++ b/svx/source/form/makefile.mk
@@ -65,7 +65,6 @@ LIB1OBJFILES= \
$(SLO)$/fmtextcontrolshell.obj \
$(SLO)$/ParseContext.obj \
$(SLO)$/typeconversionclient.obj \
- $(SLO)$/confirmdelete.obj \
$(SLO)$/dbtoolsclient.obj \
$(SLO)$/sqlparserclient.obj \
$(SLO)$/dataaccessdescriptor.obj \
@@ -75,7 +74,7 @@ LIB1OBJFILES= \
$(SLO)$/navigatortree.obj \
$(SLO)$/navigatortreemodel.obj \
$(SLO)$/fmexpl.obj \
- $(SLO)$/fmctrler.obj \
+ $(SLO)$/formcontroller.obj \
$(SLO)$/fmpgeimp.obj \
$(SLO)$/fmvwimp.obj \
$(SLO)$/fmdpage.obj \
@@ -91,14 +90,16 @@ LIB1OBJFILES= \
$(SLO)$/fmview.obj \
$(SLO)$/sdbdatacolumn.obj \
$(SLO)$/formcontrolling.obj \
- $(SLO)$/fmdispatch.obj \
+ $(SLO)$/formfeaturedispatcher.obj \
+ $(SLO)$/formdispatchinterceptor.obj \
$(SLO)$/datanavi.obj \
$(SLO)$/xfm_addcondition.obj \
$(SLO)$/datalistener.obj \
$(SLO)$/fmscriptingenv.obj \
$(SLO)$/stringlistresource.obj \
$(SLO)$/delayedevent.obj \
- $(SLO)$/formcontrolfactory.obj
+ $(SLO)$/formcontrolfactory.obj \
+ $(SLO)$/legacyformcontroller.obj
LIB2TARGET= $(SLB)$/$(TARGET).lib
LIB2OBJFILES= \
diff --git a/svx/source/form/tabwin.cxx b/svx/source/form/tabwin.cxx
index 4ad118418981..39c246b99730 100644
--- a/svx/source/form/tabwin.cxx
+++ b/svx/source/form/tabwin.cxx
@@ -32,7 +32,6 @@
#include "precompiled_svx.hxx"
#include "tabwin.hxx"
-#include "fmtools.hxx"
#include "fmservs.hxx"
#include "stringlistresource.hxx"
diff --git a/svx/source/inc/confirmdelete.hxx b/svx/source/inc/confirmdelete.hxx
deleted file mode 100644
index a06e297a8748..000000000000
--- a/svx/source/inc/confirmdelete.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: confirmdelete.hxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SVX_FORM_CONFIRMDELETE_HXX
-#define SVX_FORM_CONFIRMDELETE_HXX
-
-#include <vcl/btndlg.hxx>
-#include <vcl/fixed.hxx>
-
-//........................................................................
-namespace svxform
-{
-//........................................................................
-
- //====================================================================
- //= class ConfirmDeleteDialog
- //====================================================================
- class ConfirmDeleteDialog : public ButtonDialog
- {
- FixedImage m_aInfoImage;
- FixedText m_aTitle;
- FixedText m_aMessage;
-
- public:
- ConfirmDeleteDialog(Window* pParent, const String& _rTitle);
- ~ConfirmDeleteDialog();
- };
-
-//........................................................................
-} // namespace svxform
-//........................................................................
-
-#endif // SVX_FORM_CONFIRMDELETE_HXX
-
-
diff --git a/svx/source/inc/delayedevent.hxx b/svx/source/inc/delayedevent.hxx
index 151b998f2f8c..bd8194a00c82 100644
--- a/svx/source/inc/delayedevent.hxx
+++ b/svx/source/inc/delayedevent.hxx
@@ -5,10 +5,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
-* $RCSfile: delayedevent.hxx,v $
-*
-* $Revision: 1.1.2.1 $
-*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/svx/source/inc/filtnav.hxx b/svx/source/inc/filtnav.hxx
index 2bb298836d02..08db2e8ae7dc 100644
--- a/svx/source/inc/filtnav.hxx
+++ b/svx/source/inc/filtnav.hxx
@@ -30,8 +30,10 @@
#ifndef _SVX_FILTNAV_HXX
#define _SVX_FILTNAV_HXX
-#include <com/sun/star/awt/XTextComponent.hpp>
#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFilterController.hpp>
+
#include <svtools/lstner.hxx>
#include <svtools/brdcst.hxx>
#include <vcl/window.hxx>
@@ -46,7 +48,6 @@
#include <vcl/dialog.hxx>
#include <vcl/group.hxx>
#include <vcl/dockwin.hxx>
-#include "fmtools.hxx"
#include "fmexch.hxx"
#include <connectivity/sqlparse.hxx>
#include "fmexch.hxx"
@@ -93,8 +94,7 @@ public:
class FmParentData : public FmFilterData
{
protected:
- ::std::vector<FmFilterData*> m_aChilds;
-
+ ::std::vector< FmFilterData* > m_aChildren;
public:
TYPEINFO();
@@ -103,28 +103,34 @@ public:
{}
virtual ~FmParentData();
- ::std::vector<FmFilterData*>& GetChilds() {return m_aChilds;}
+ ::std::vector< FmFilterData* >& GetChildren() { return m_aChildren; }
};
//========================================================================
// Item representing the forms and subforms
class FmFormItem : public FmParentData
{
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > m_xController;
- sal_Int32 m_nCurrent;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterController > m_xFilterController;
public:
TYPEINFO();
- FmFormItem(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory):FmParentData(_rxFactory,NULL, ::rtl::OUString()){}
- FmFormItem(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,FmParentData* _pParent,
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & _xController,
- const ::rtl::OUString& _rText):FmParentData(_rxFactory,_pParent, _rText)
- ,m_xController(_xController)
- ,m_nCurrent(0){}
-
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & GetController(){return m_xController;}
- void SetCurrentPosition(sal_Int32 nCurrent){m_nCurrent = nCurrent;}
- sal_Int32 GetCurrentPosition() const {return m_nCurrent;}
+
+ FmFormItem( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,FmParentData* _pParent,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > & _xController,
+ const ::rtl::OUString& _rText)
+ :FmParentData( _rxFactory, _pParent, _rText )
+ ,m_xController( _xController )
+ ,m_xFilterController( _xController, ::com::sun::star::uno::UNO_QUERY_THROW )
+ {
+ }
+
+ inline const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >&
+ GetController() { return m_xController; }
+
+ inline const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterController >&
+ GetFilterController() { return m_xFilterController; }
+
virtual Image GetImage( BmpColorMode _eMode = BMP_COLOR_NORMAL ) const;
};
@@ -136,26 +142,28 @@ public:
FmFilterItems(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory):FmParentData(_rxFactory,NULL, ::rtl::OUString()){}
FmFilterItems(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,FmFormItem* pParent, const ::rtl::OUString& rText ):FmParentData(_rxFactory,pParent, rText){}
- FmFilterItem* Find(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > & xText) const;
+ FmFilterItem* Find( const ::sal_Int32 _nFilterComponentIndex ) const;
virtual Image GetImage( BmpColorMode _eMode = BMP_COLOR_NORMAL ) const;
};
//========================================================================
class FmFilterItem : public FmFilterData
{
- ::rtl::OUString m_aFieldName;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > m_xText;
+ ::rtl::OUString m_aFieldName;
+ const sal_Int32 m_nComponentIndex;
public:
TYPEINFO();
- FmFilterItem(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,
- FmFilterItems* pParent,
- const ::rtl::OUString& aFieldName,
- const ::rtl::OUString& aCondition,
- const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > & xText);
+ FmFilterItem(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,
+ FmFilterItems* pParent,
+ const ::rtl::OUString& aFieldName,
+ const ::rtl::OUString& aCondition,
+ const sal_Int32 _nComponentIndex
+ );
const ::rtl::OUString& GetFieldName() const {return m_aFieldName;}
- const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > & GetTextComponent() const {return m_xText;}
+ sal_Int32 GetComponentIndex() const { return m_nComponentIndex; }
virtual Image GetImage( BmpColorMode _eMode = BMP_COLOR_NORMAL ) const;
};
@@ -167,9 +175,9 @@ class FmFilterModel : public FmParentData
{
friend class FmFilterAdapter;
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > m_xControllers;
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > m_xController;
- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB;
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > m_xControllers;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB;
FmFilterAdapter* m_pAdapter;
FmFilterItems* m_pCurrentItems;
@@ -178,7 +186,7 @@ public:
FmFilterModel(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory);
virtual ~FmFilterModel();
- void Update(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & xControllers, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & xCurrent);
+ void Update(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & xControllers, const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > & xCurrent);
void Clear();
sal_Bool ValidateText(FmFilterItem* pItem, UniString& rText, UniString& rErrorMsg) const;
void Append(FmFilterItems* pItems, FmFilterItem* pFilterItem);
@@ -190,17 +198,17 @@ public:
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > getORB() const { return m_xORB; }
const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & GetControllers() const {return m_xControllers;}
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & GetCurrentController() const {return m_xController;}
- void SetCurrentController(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & xController);
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > & GetCurrentController() const {return m_xController;}
+ void SetCurrentController(const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > & xController);
void Remove(FmFilterData* pFilterItem);
- void AppendFilterItems(FmFormItem* pItem);
- void CheckIntegrity(FmParentData* pItem);
+ void AppendFilterItems( FmFormItem& _rItem );
+ void EnsureEmptyFilterRows( FmParentData& _rItem );
protected:
void Insert(const ::std::vector<FmFilterData*>::iterator& rPos, FmFilterData* pFilterItem);
- void Remove(const ::std::vector<FmFilterData*>::iterator& rPos, FmFilterData* pFilterItem);
- FmFormItem* Find(const ::std::vector<FmFilterData*>& rItems, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & xController) const;
+ void Remove( const ::std::vector<FmFilterData*>::iterator& rPos );
+ FmFormItem* Find(const ::std::vector<FmFilterData*>& rItems, const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > & xController) const;
FmFormItem* Find(const ::std::vector<FmFilterData*>& rItems, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm) const;
void Update(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & xControllers, FmParentData* pParent);
};
@@ -267,7 +275,10 @@ public:
FmFilterNavigator( Window* pParent );
virtual ~FmFilterNavigator();
- void UpdateContent(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & xControllers, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > & xCurrent);
+ void UpdateContent(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > & xControllers,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > & xCurrent
+ );
const FmFilterModel* GetFilterModel() const {return m_pModel;}
protected:
diff --git a/svx/source/inc/fmPropBrw.hxx b/svx/source/inc/fmPropBrw.hxx
index 285cb90320d2..fb970eb0a22f 100644
--- a/svx/source/inc/fmPropBrw.hxx
+++ b/svx/source/inc/fmPropBrw.hxx
@@ -30,6 +30,8 @@
#ifndef SVX_FMPROPBRW_HXX
#define SVX_FMPROPBRW_HXX
+#include "fmtools.hxx"
+
/** === begin UNO includes === **/
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/awt/XControlContainer.hpp>
@@ -37,10 +39,10 @@
#include <com/sun/star/inspection/XObjectInspectorModel.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
/** === end UNO includes === **/
+
#include <sfx2/basedlgs.hxx>
#include <sfx2/ctrlitem.hxx>
#include <sfx2/childwin.hxx>
-#include "fmtools.hxx"
//========================================================================
class FmPropBrwMgr : public SfxChildWindow
diff --git a/svx/source/inc/fmcontrolbordermanager.hxx b/svx/source/inc/fmcontrolbordermanager.hxx
index c08907026585..a9e605873940 100644
--- a/svx/source/inc/fmcontrolbordermanager.hxx
+++ b/svx/source/inc/fmcontrolbordermanager.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmcontrolbordermanager.hxx,v $
- * $Revision: 1.6 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -132,7 +129,7 @@ namespace svxform
//====================================================================
/** manages the dynamic border color for form controls
- Used by the <type>FmXFormController</type>, this class manages the dynamic changes in the
+ Used by the <type>FormController</type>, this class manages the dynamic changes in the
border color of form controls. For this a set of events have to be forwarded to the manager
instance, which then will switch the border color depending on the mouse and focus status
of the controls.
diff --git a/svx/source/inc/fmcontrollayout.hxx b/svx/source/inc/fmcontrollayout.hxx
index 1110c274b9f8..fdaa5e17bc7e 100644
--- a/svx/source/inc/fmcontrollayout.hxx
+++ b/svx/source/inc/fmcontrollayout.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmcontrollayout.hxx,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/svx/source/inc/fmctrler.hxx b/svx/source/inc/fmctrler.hxx
deleted file mode 100644
index 7a973e129280..000000000000
--- a/svx/source/inc/fmctrler.hxx
+++ /dev/null
@@ -1,617 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: fmctrler.hxx,v $
- * $Revision: 1.24 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-#ifndef _SVX_FMCTRLER_HXX
-#define _SVX_FMCTRLER_HXX
-
-#include "fmtools.hxx"
-#include "formcontrolling.hxx"
-#include "sqlparserclient.hxx"
-#include "delayedevent.hxx"
-
-/** === begin UNO includes === **/
-#include <com/sun/star/awt/XControl.hpp>
-#include <com/sun/star/awt/XControlContainer.hpp>
-#include <com/sun/star/awt/XControlModel.hpp>
-#include <com/sun/star/awt/XFocusListener.hpp>
-#include <com/sun/star/awt/XItemListener.hpp>
-#include <com/sun/star/awt/XMouseListener.hpp>
-#include <com/sun/star/awt/XTabController.hpp>
-#include <com/sun/star/awt/XTabControllerModel.hpp>
-#include <com/sun/star/awt/XTextComponent.hpp>
-#include <com/sun/star/awt/XTextListener.hpp>
-#include <com/sun/star/beans/PropertyChangeEvent.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/beans/XPropertyChangeListener.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/XPropertySetInfo.hpp>
-#include <com/sun/star/container/ContainerEvent.hpp>
-#include <com/sun/star/container/XChild.hpp>
-#include <com/sun/star/container/XContainer.hpp>
-#include <com/sun/star/container/XContainerListener.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/container/XIndexContainer.hpp>
-#include <com/sun/star/form/DatabaseDeleteEvent.hpp>
-#include <com/sun/star/form/DatabaseParameterEvent.hpp>
-#include <com/sun/star/form/ErrorEvent.hpp>
-#include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
-#include <com/sun/star/form/XConfirmDeleteBroadcaster.hpp>
-#include <com/sun/star/form/XConfirmDeleteListener.hpp>
-#include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
-#include <com/sun/star/form/XDatabaseParameterListener.hpp>
-#include <com/sun/star/form/XFormController.hpp>
-#include <com/sun/star/form/XFormControllerListener.hpp>
-#include <com/sun/star/form/XGridControlListener.hpp>
-#include <com/sun/star/form/XLoadListener.hpp>
-#include <com/sun/star/form/XResetListener.hpp>
-#include <com/sun/star/frame/DispatchDescriptor.hpp>
-#include <com/sun/star/frame/XDispatch.hpp>
-#include <com/sun/star/frame/XDispatchProvider.hpp>
-#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
-#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
-#include <com/sun/star/frame/XModel.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XUnoTunnel.hpp>
-#include <com/sun/star/script/XEventAttacherManager.hpp>
-#include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
-#include <com/sun/star/sdb/XRowSetApproveListener.hpp>
-#include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
-#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
-#include <com/sun/star/sdb/XSQLErrorListener.hpp>
-#include <com/sun/star/sdbc/XRowSetListener.hpp>
-#include <com/sun/star/task/XInteractionHandler.hpp>
-#include <com/sun/star/util/XModeSelector.hpp>
-#include <com/sun/star/util/XModifyBroadcaster.hpp>
-#include <com/sun/star/util/XModifyListener.hpp>
-/** === end UNO includes === **/
-
-#include <comphelper/broadcasthelper.hxx>
-#include <comphelper/proparrhlp.hxx>
-#include <comphelper/stl_types.hxx>
-#include <connectivity/sqlparse.hxx>
-#include <cppuhelper/propshlp.hxx>
-#include <tools/debug.hxx>
-#include <vcl/timer.hxx>
-
-#if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_31)
-#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_31
-#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 31
-#include <comphelper/implbase_var.hxx>
-#endif
-
-struct FmXTextComponentLess : public ::std::binary_function< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent> , sal_Bool>
-{
- sal_Bool operator() (const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& x, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& y) const
- {
- return reinterpret_cast<sal_Int64>(x.get()) < reinterpret_cast<sal_Int64>(y.get());
- }
-};
-
-typedef ::std::map< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >, FmXTextComponentLess> FmFilterControls;
-typedef ::std::map< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::rtl::OUString, FmXTextComponentLess> FmFilterRow;
-typedef ::std::vector< FmFilterRow > FmFilterRows;
-typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > > FmFormControllers;
-
-struct FmFieldInfo;
-class FmFormView;
-class Window;
-
-namespace svxform
-{
- class ControlBorderManager;
-}
-
-typedef ::comphelper::WeakComponentImplHelper31 < ::com::sun::star::form::XFormController
- , ::com::sun::star::container::XChild
- , ::com::sun::star::container::XIndexAccess
- , ::com::sun::star::container::XEnumerationAccess
- , ::com::sun::star::awt::XFocusListener
- , ::com::sun::star::form::XLoadListener
- , ::com::sun::star::beans::XPropertyChangeListener
- , ::com::sun::star::awt::XTextListener
- , ::com::sun::star::awt::XItemListener
- , ::com::sun::star::container::XContainerListener
- , ::com::sun::star::util::XModifyListener
- , ::com::sun::star::util::XModifyBroadcaster
- , ::com::sun::star::util::XModeSelector
- , ::com::sun::star::form::XConfirmDeleteListener
- , ::com::sun::star::form::XConfirmDeleteBroadcaster
- , ::com::sun::star::sdb::XSQLErrorListener
- , ::com::sun::star::sdb::XSQLErrorBroadcaster
- , ::com::sun::star::sdbc::XRowSetListener
- , ::com::sun::star::sdb::XRowSetApproveListener
- , ::com::sun::star::sdb::XRowSetApproveBroadcaster
- , ::com::sun::star::form::XDatabaseParameterListener
- , ::com::sun::star::form::XDatabaseParameterBroadcaster
- , ::com::sun::star::lang::XServiceInfo
- , ::com::sun::star::form::XResetListener
- , ::com::sun::star::lang::XUnoTunnel
- , ::com::sun::star::frame::XDispatch
- , ::com::sun::star::awt::XMouseListener
- , ::com::sun::star::form::validation::XFormComponentValidityListener
- , ::com::sun::star::task::XInteractionHandler
- , ::com::sun::star::lang::XInitialization
- , ::com::sun::star::form::XGridControlListener
- > FmXFormController_BASE;
-
-//==================================================================
-// FmXFormController
-//==================================================================
-class ColumnInfoCache;
-class SAL_DLLPRIVATE FmXFormController :public ::comphelper::OBaseMutex
- ,public FmXFormController_BASE
- ,public ::cppu::OPropertySetHelper
- ,public FmDispatchInterceptor
- ,public ::comphelper::OAggregationArrayUsageHelper< FmXFormController >
- ,public ::svxform::OSQLParserClient
- ,public ::svx::IControllerFeatureInvalidation
-{
- typedef ::std::map < sal_Int32,
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >
- > DispatcherContainer;
-
- friend class FmXPageViewWinRec;
-
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabController> m_xTabController;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> m_xActiveControl, m_xCurrentControl;
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess> m_xModelAsIndex;
- ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xModelAsManager;
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xParent;
- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB;
- // Composer used for checking filter conditions
- ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > m_xComposer;
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xInteractionHandler;
-
- ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > m_aControls;
- ::cppu::OInterfaceContainerHelper
- m_aActivateListeners,
- m_aModifyListeners,
- m_aErrorListeners,
- m_aDeleteListeners,
- m_aRowSetApproveListeners,
- m_aParameterListeners;
-
- FmFormControllers m_aChilds;
- FmFilterControls m_aFilterControls;
- FmFilterRows m_aFilters;
-
- Timer m_aTabActivationTimer;
- Timer m_aFeatureInvalidationTimer;
-
- FmFormView* m_pView;
- Window* m_pWindow;
- ::svxform::ControlBorderManager*
- m_pControlBorderManager;
-
- ::svx::ControllerFeatures m_aControllerFeatures;
- DispatcherContainer m_aFeatureDispatchers;
- ::std::set< sal_Int32 > m_aInvalidFeatures; // for asynchronous feature invalidation
-
- ::rtl::OUString m_aMode;
-
- ::svxform::DelayedEvent m_aLoadEvent;
- ::svxform::DelayedEvent m_aToggleEvent;
- ::svxform::DelayedEvent m_aActivationEvent;
- ::svxform::DelayedEvent m_aDeactivationEvent;
-
- ::std::auto_ptr< ColumnInfoCache >
- m_pColumnInfoCache;
-
- sal_Int32 m_nCurrentFilterPosition; // current level for filtering (or-criteria)
-
- sal_Bool m_bCurrentRecordModified : 1;
- sal_Bool m_bCurrentRecordNew : 1;
- sal_Bool m_bLocked : 1;
- sal_Bool m_bDBConnection : 1; // Focuslistener nur fuer Datenbankformulare
- sal_Bool m_bCycle : 1;
- sal_Bool m_bCanInsert : 1;
- sal_Bool m_bCanUpdate : 1;
- sal_Bool m_bCommitLock : 1; // lock the committing of controls see focusGained
- sal_Bool m_bModified : 1; // ist der Inhalt eines Controls modifiziert ?
- sal_Bool m_bControlsSorted : 1;
- sal_Bool m_bFiltering : 1;
- sal_Bool m_bAttachEvents : 1;
- sal_Bool m_bDetachEvents : 1;
- sal_Bool m_bAttemptedHandlerCreation : 1;
-
- // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
- // the ::com::sun::star::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
- DECLARE_STL_VECTOR(FmXDispatchInterceptorImpl*, Interceptors);
- Interceptors m_aControlDispatchInterceptors;
-
-public:
- inline const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >&
- getInteractionHandler() const
- {
- const_cast< FmXFormController* >( this )->ensureInteractionHandler();
- return m_xInteractionHandler;
- }
-
-public:
- FmXFormController(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & _rxORB,
- FmFormView* _pView = NULL, Window* _pWindow = NULL );
- ~FmXFormController();
-
-// XInterface
- virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& type) throw ( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL acquire() throw ();
- virtual void SAL_CALL release() throw ();
-
-// XTypeProvider
- virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() 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);
-
-// XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
- static ::com::sun::star::uno::Sequence< sal_Int8 > getUnoTunnelImplementationId();
- SVX_DLLPUBLIC static FmXFormController* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent );
-
-// XDispatch
- virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& _rURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rArgs ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException);
-
-// ::com::sun::star::container::XChild
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> SAL_CALL getParent(void) throw( ::com::sun::star::uno::RuntimeException ) {return m_xParent;}
- virtual void SAL_CALL setParent(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& Parent) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException )
- {m_xParent = Parent;}
-
-// ::com::sun::star::lang::XEventListener
- virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException );
-
-// OComponentHelper
- virtual void SAL_CALL disposing();
-
-// OPropertySetHelper
- virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any & rConvertedValue, ::com::sun::star::uno::Any & rOldValue,
- sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
- throw( ::com::sun::star::lang::IllegalArgumentException );
-
- virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw( ::com::sun::star::uno::Exception );
- virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
-
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException );
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
-
- using OPropertySetHelper::getFastPropertyValue;
-
-// XElementAccess
- virtual ::com::sun::star::uno::Type SAL_CALL getElementType(void) throw( ::com::sun::star::uno::RuntimeException );
- virtual sal_Bool SAL_CALL hasElements(void) throw( ::com::sun::star::uno::RuntimeException );
-
-// ::com::sun::star::container::XEnumerationAccess
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException );
-
-// ::com::sun::star::container::XContainerListener
- virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XLoadListener
- virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XModeSelector
- virtual void SAL_CALL setMode(const ::rtl::OUString& Mode) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException );
- virtual ::rtl::OUString SAL_CALL getMode(void) throw( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedModes(void) throw( ::com::sun::star::uno::RuntimeException );
- virtual sal_Bool SAL_CALL supportsMode(const ::rtl::OUString& Mode) throw( ::com::sun::star::uno::RuntimeException );
-
-// ::com::sun::star::container::XIndexAccess
- virtual sal_Int32 SAL_CALL getCount(void) throw( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 Index) throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException );
-
-// XModifyBroadcaster
- virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException );
-
-// XFocusListener
- virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException );
-
-// XMouseListener
- virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
-
-// XFormComponentValidityListener
- virtual void SAL_CALL componentValidityChanged( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException);
-
-// XInteractionHandler
- virtual void SAL_CALL handle( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& Request ) throw (::com::sun::star::uno::RuntimeException);
-
-// XInitialization
- virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
-
-// XGridControlListener
- virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException);
-
-// ::com::sun::star::beans::XPropertyChangeListener -> aenderung der stati
- virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw( ::com::sun::star::uno::RuntimeException );
-
-// XTextListener -> modify setzen
- virtual void SAL_CALL textChanged(const ::com::sun::star::awt::TextEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XItemListener -> modify setzen
- virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XModifyListener -> modify setzen
- virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XFormController
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> SAL_CALL getCurrentControl(void) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL addActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException );
-
-// XTabController
- virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > SAL_CALL getControls(void) throw( ::com::sun::star::uno::RuntimeException );
-
- virtual void SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel>& Model) throw( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel> SAL_CALL getModel() throw( ::com::sun::star::uno::RuntimeException );
-
- virtual void SAL_CALL setContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer>& Container) throw( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer> SAL_CALL getContainer() throw( ::com::sun::star::uno::RuntimeException );
-
- virtual void SAL_CALL autoTabOrder() throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL activateTabOrder() throw( ::com::sun::star::uno::RuntimeException );
-
- virtual void SAL_CALL activateFirst() throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL activateLast() throw( ::com::sun::star::uno::RuntimeException );
-
-// com::sun::star::sdbc::XRowSetListener
- virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
-
-// XRowSetApproveListener
- virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
- virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event) throw( ::com::sun::star::uno::RuntimeException );
- virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
-
-// XRowSetApproveBroadcaster
- virtual void SAL_CALL addRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException );
-
-// XSQLErrorBroadcaster
- virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XSQLErrorListener
- virtual void SAL_CALL addSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException );
-
-// XDatabaseParameterBroadcaster2
- virtual void SAL_CALL addDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
-
-// XDatabaseParameterBroadcaster
- virtual void SAL_CALL addParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
-
-// XDatabaseParameterListener
- virtual sal_Bool SAL_CALL approveParameter(const ::com::sun::star::form::DatabaseParameterEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XConfirmDeleteBroadcaster
- virtual void SAL_CALL addConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL removeConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
-
-// XConfirmDeleteListener
- virtual sal_Bool SAL_CALL confirmDelete(const ::com::sun::star::sdb::RowChangeEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// XServiceInfo
- virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException);
- virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw(::com::sun::star::uno::RuntimeException);
-
-// XResetListener
- virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
- virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
-
-// method for registration
- static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void);
-
- // comphelper::OPropertyArrayUsageHelper
- virtual void fillProperties(
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps,
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
- ) const;
-
-// access to the controls for filtering
- const FmFilterControls& getFilterControls() const {return m_aFilterControls;}
-
-// access to the current filter rows
- const FmFilterRows& getFilterRows() const {return m_aFilters;}
- FmFilterRows& getFilterRows() {return m_aFilters;}
-
- // just decr. the positions no notifications for the view
- void decrementCurrentFilterPosition()
- {
- DBG_ASSERT(m_nCurrentFilterPosition, "Invalid Position");
- --m_nCurrentFilterPosition;
- }
-
- SVX_DLLPUBLIC void setCurrentFilterPosition(sal_Int32 nPos);
- sal_Int32 getCurrentFilterPosition() const {return m_nCurrentFilterPosition;}
-
-protected:
- // FmDispatchInterceptor
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch>
- interceptedQueryDispatch(sal_uInt16 _nId,const ::com::sun::star::util::URL& aURL,
- const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags)
- throw( ::com::sun::star::uno::RuntimeException );
-
- // IControllerFeatureInvalidation
- virtual void invalidateFeatures( const ::std::vector< sal_Int32 >& _rFeatures );
-
- virtual ::osl::Mutex* getInterceptorMutex() { return &m_aMutex; }
-
- /// update all our dispatchers
- void updateAllDispatchers() const;
-
- /** disposes all dispatchers in m_aFeatureDispatchers, empties m_aFeatureDispatchers,
- and disposes m_aControllerFeatures
- */
- void disposeAllFeaturesAndDispatchers() SAL_THROW(());
-
- void startFiltering();
- void stopFiltering();
- void setFilter(::std::vector<FmFieldInfo>&);
- void startListening();
- void stopListening();
-
- /** ensures that we have an interaction handler, if possible
-
- If an interaction handler was provided at creation time (<member>initialize</member>), this
- one will be used. Else, an attempt is made to create an <type scope="com::sun::star::sdb">InteractionHandler</type>
- is made.
-
- @return <TRUE/>
- if and only if <member>m_xInteractionHandler</member> is valid when the method returns
- */
- bool ensureInteractionHandler();
-
- /** replaces one of our controls with another one
-
- Upon successful replacing, the old control will be disposed. Also, internal members pointing
- to the current or active control will be adjusted. Yet more, if the replaced control was
- the active control, the new control will be made active.
-
- @param _rxExistentControl
- The control to replace. Must be one of the controls in our ControlContainer.
- @param _rxNewControl
- The control which should replace the existent control.
- @return
- <TRUE/> if and only if the control was successfully replaced
- */
- bool replaceControl(
- const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxExistentControl,
- const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxNewControl
- );
-
- // we're listening at all bound controls for modifications
- void startControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
- void stopControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
-
- void setLocks();
- void setControlLock(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
- void addToEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
- void removeFromEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
- void toggleAutoFields(sal_Bool bAutoFields);
- void unload() throw( ::com::sun::star::uno::RuntimeException );
- void removeBoundFieldListener();
-
- void startFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
- void stopFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
-
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> findControl( ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> >& rCtrls, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel>& rxCtrlModel, sal_Bool _bRemove, sal_Bool _bOverWrite ) const;
-
- void insertControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
- void removeControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
-
- /// called when a new control is to be handled by the controller
- void implControlInserted( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bAddToEventAttacher );
- /// called when a control is not to be handled by the controller anymore
- void implControlRemoved( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bRemoveFromEventAttacher );
-
- /** sets m_xCurrentControl, plus does administrative tasks depending on it
- */
- void implSetCurrentControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl );
-
- /** invalidates the FormFeatures which depend on the current control
- */
- void implInvalidateCurrentControlDependentFeatures();
-
- bool impl_isDisposed_nofail() const { return FmXFormController_BASE::rBHelper.bDisposed; }
-
- void impl_onModify();
-
- sal_Bool isLocked() const {return m_bLocked;}
- sal_Bool determineLockState() const;
-
- Window* getDialogParentWindow();
- // returns m_pWindow or - if m_pWindow is NULL - the window of the currently set container
-
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor> createInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
- // create a new interceptor, register it on the given object
- void deleteInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
- // if createInterceptor was called for the given object the according interceptor will be removed
- // from the objects interceptor chain and released
-
- /** checks all form controls belonging to our form for validity
-
- If a form control supports the XValidatableFormComponent interface, this is used to determine
- the validity of the control. If the interface is not supported, the control is supposed to be
- valid.
-
- @param _rFirstInvalidityExplanation
- if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
- the explanation for the invalidity, as obtained from the validator.
-
- @param _rxFirstInvalidModel
- if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
- the control model
-
- @return
- <TRUE/> if and only if all controls belonging to our form are valid
- */
- bool checkFormComponentValidity(
- ::rtl::OUString& /* [out] */ _rFirstInvalidityExplanation,
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& /* [out] */ _rxFirstInvalidModel
- ) SAL_THROW(());
-
- /** locates the control which belongs to a given model
- */
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >
- locateControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel ) SAL_THROW(());
-
- // set the text for all filters
- void impl_setTextOnAllFilter_throw();
-
- // in filter mode we do not listen for changes
- sal_Bool isListeningForChanges() const {return m_bDBConnection && !m_bFiltering && !isLocked();}
- void addChild(FmXFormController* pChild);
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> isInList(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer>& xPeer) const;
-
- DECL_LINK( OnActivateTabOrder, void* );
- DECL_LINK( OnInvalidateFeatures, void* );
- DECL_LINK( OnLoad, void* );
- DECL_LINK( OnToggleAutoFields, void* );
- DECL_LINK( OnActivated, void* );
- DECL_LINK( OnDeactivated, void* );
-};
-
-
-#endif // _SVX_FMCTRLER_HXX
-
diff --git a/svx/source/inc/fmexpl.hxx b/svx/source/inc/fmexpl.hxx
index df60ba931739..a03940fd510b 100644
--- a/svx/source/inc/fmexpl.hxx
+++ b/svx/source/inc/fmexpl.hxx
@@ -39,12 +39,17 @@
#include <sfx2/dockwin.hxx>
#include <sfx2/ctrlitem.hxx>
#include <vcl/image.hxx>
+
+/** === begin UNO includes === **/
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/form/XForm.hpp>
#include <com/sun/star/form/XFormComponent.hpp>
#include <com/sun/star/beans/PropertyChangeEvent.hpp>
#include <com/sun/star/container/XContainerListener.hpp>
#include <com/sun/star/container/XContainer.hpp>
+#include <com/sun/star/beans/XPropertyChangeListener.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+/** === end UNO includes === **/
#include <svtools/svtreebx.hxx>
@@ -57,7 +62,6 @@
#include <svx/fmview.hxx>
#include "fmexch.hxx"
-#include "fmtools.hxx"
class SdrObjListIter;
class FmFormShell;
diff --git a/svx/source/inc/fmservs.hxx b/svx/source/inc/fmservs.hxx
index 201a5a351224..62d9654858a3 100644
--- a/svx/source/inc/fmservs.hxx
+++ b/svx/source/inc/fmservs.hxx
@@ -57,7 +57,7 @@
#define FM_COMPONENT_IMAGECONTROL rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "stardiv.one.form.component.ImageControl" ) )
#define FM_CONTROL_GRID rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "stardiv.one.form.control.Grid" ) )
#define FM_CONTROL_GRIDCONTROL rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "stardiv.one.form.control.GridControl" ) )
-#define FM_FORM_CONTROLLER rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.FormController" ) )
+#define FM_FORM_CONTROLLER rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.runtime.FormController" ) )
#define SRV_SDB_CONNECTION rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.Connection" ) )
#define SRV_SDB_INTERACTION_HANDLER rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.InteractionHandler" ) )
#define FM_SUN_COMPONENT_FORM rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.component.Form" ) )
diff --git a/svx/source/inc/fmshimp.hxx b/svx/source/inc/fmshimp.hxx
index 85644ea5daba..434f13a177d0 100644
--- a/svx/source/inc/fmshimp.hxx
+++ b/svx/source/inc/fmshimp.hxx
@@ -40,7 +40,7 @@
#include <com/sun/star/awt/XControlContainer.hpp>
#include <com/sun/star/util/XModifyListener.hpp>
#include <com/sun/star/form/XForm.hpp>
-#include <com/sun/star/form/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
#include <com/sun/star/form/XFormComponent.hpp>
#include <com/sun/star/form/NavigationBarMode.hpp>
#include <com/sun/star/frame/XFrame.hpp>
@@ -243,9 +243,9 @@ class SAL_DLLPRIVATE FmXFormShell :public FmXFormShell_BASE
// aktuelle Form, Controller
// nur im alive mode verfuegbar
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController> m_xActiveController;
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController> m_xNavigationController;
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm> m_xActiveForm;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xActiveController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xNavigationController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > m_xActiveForm;
// Aktueller container einer Page
// nur im designmode verfuegbar
@@ -266,11 +266,9 @@ class SAL_DLLPRIVATE FmXFormShell :public FmXFormShell_BASE
// the frame we live in
::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame> m_xAttachedFrame;
// Administration of external form views (see the SID_FM_VIEW_AS_GRID-slot)
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController> m_xExternalViewController; // the controller for the external form view
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController> m_xExtViewTriggerController; // the nav controller at the time the external display was triggered
- ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet> m_xExternalDisplayedForm; // the form which the external view is based on
-
- FmXDispatchInterceptorImpl* m_pExternalViewInterceptor;
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > m_xExternalViewController; // the controller for the external form view
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xExtViewTriggerController; // the nav controller at the time the external display was triggered
+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > m_xExternalDisplayedForm; // the form which the external view is based on
mutable ::svxform::DocumentType
m_eDocumentType; /// the type of document we're living in
@@ -399,11 +397,11 @@ protected:
public:
// methode fuer nicht designmode (alive mode)
- void setActiveController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController>& _xController, sal_Bool _bNoSaveOldContent = sal_False );
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController>& getActiveController() const {return m_xActiveController;}
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController>& getActiveInternalController() const { return m_xActiveController == m_xExternalViewController ? m_xExtViewTriggerController : m_xActiveController; }
+ void setActiveController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& _xController, sal_Bool _bNoSaveOldContent = sal_False );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& getActiveController() const {return m_xActiveController;}
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& getActiveInternalController() const { return m_xActiveController == m_xExternalViewController ? m_xExtViewTriggerController : m_xActiveController; }
const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm>& getActiveForm() const {return m_xActiveForm;}
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController>& getNavController() const {return m_xNavigationController;}
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& getNavController() const {return m_xNavigationController;}
inline const ::svx::ControllerFeatures& getActiveControllerFeatures() const
{ return m_aActiveControllerFeatures; }
@@ -568,13 +566,13 @@ private:
public:
enum CURSOR_ACTION { CA_MOVE_TO_LAST, CA_MOVE_ABSOLUTE };
- void DoAsyncCursorAction(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController>& _xController, CURSOR_ACTION _eWhat);
+ void DoAsyncCursorAction(const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& _xController, CURSOR_ACTION _eWhat);
void DoAsyncCursorAction(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& _xForm, CURSOR_ACTION _eWhat);
sal_Bool HasAnyPendingCursorAction() const;
void CancelAnyPendingCursorAction();
- sal_Bool HasPendingCursorAction(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController>& _xController) const;
+ sal_Bool HasPendingCursorAction(const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& _xController) const;
sal_Bool HasPendingCursorAction(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& _xForm) const;
/** execute the given form slot
diff --git a/svx/source/inc/fmsrcimp.hxx b/svx/source/inc/fmsrcimp.hxx
index eb2475bc56e8..cfe38153c0ba 100644
--- a/svx/source/inc/fmsrcimp.hxx
+++ b/svx/source/inc/fmsrcimp.hxx
@@ -32,18 +32,27 @@
#define _FMSRCIMP_HXX
#include "fmtools.hxx"
-#include <vos/thread.hxx>
-#include <osl/mutex.hxx>
-#include <com/sun/star/awt/XTextComponent.hpp>
+#include "svx/svxdllapi.h"
+
+/** === begin UNO includes === **/
#include <com/sun/star/awt/XCheckBox.hpp>
#include <com/sun/star/awt/XListBox.hpp>
+#include <com/sun/star/awt/XTextComponent.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include <com/sun/star/util/XNumberFormatter.hpp>
+/** === end UNO includes === **/
+
#include <comphelper/stl_types.hxx>
#include <cppuhelper/implbase1.hxx>
+#include <osl/mutex.hxx>
#include <unotools/charclass.hxx>
#include <unotools/collatorwrapper.hxx>
-#include "svx/svxdllapi.h"
+#include <vos/thread.hxx>
+
+#ifndef _SVSTDARR_ULONGS
+#define _SVSTDARR_ULONGS
+#include <svtools/svstdarr.hxx>
+#endif
// ===================================================================================================
// Hilfsstrukturen
diff --git a/svx/source/inc/fmtextcontrolshell.hxx b/svx/source/inc/fmtextcontrolshell.hxx
index 17ba06d5513b..a67520f89ed8 100644
--- a/svx/source/inc/fmtextcontrolshell.hxx
+++ b/svx/source/inc/fmtextcontrolshell.hxx
@@ -36,7 +36,7 @@
#include <com/sun/star/frame/XStatusListener.hpp>
#include <com/sun/star/awt/XFocusListener.hpp>
#include <com/sun/star/awt/XMouseListener.hpp>
-#include <com/sun/star/form/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
#include <com/sun/star/awt/XControl.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
/** === end UNO includes === **/
@@ -92,10 +92,10 @@ namespace svx
,public IContextRequestObserver
{
private:
- ::com::sun::star::uno::Reference< ::com::sun::star::util::XURLTransformer > m_xURLTransformer;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > m_xActiveControl;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > m_xActiveTextComponent;
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > m_xActiveController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::util::XURLTransformer > m_xURLTransformer;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > m_xActiveControl;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > m_xActiveTextComponent;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xActiveController;
#ifndef DONT_REMEMBER_LAST_CONTROL
// without this define, m_xActiveControl remembers the *last* active control, even
// if it, in the meantime, already lost the focus
@@ -144,10 +144,10 @@ namespace svx
/** to be called when a form in our document has been activated
*/
- void formActivated( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController );
+ void formActivated( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController );
/** to be called when a form in our document has been deactivated
*/
- void formDeactivated( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController );
+ void formDeactivated( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController );
/** notifies the instance that the design mode has changed
*/
@@ -205,7 +205,7 @@ namespace svx
@precond
we don't have an active controller currently
*/
- void startControllerListening( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController );
+ void startControllerListening( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController );
/** stops listening at the active controller
@precond
we have an active controller currently
diff --git a/svx/source/inc/fmtools.hxx b/svx/source/inc/fmtools.hxx
index 935e84c6448e..a456bed35bc6 100644
--- a/svx/source/inc/fmtools.hxx
+++ b/svx/source/inc/fmtools.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmtools.hxx,v $
- * $Revision: 1.27 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -30,6 +27,9 @@
#ifndef _SVX_FMTOOLS_HXX
#define _SVX_FMTOOLS_HXX
+#include "fmprop.hrc"
+#include "svx/svxdllapi.h"
+
#include <com/sun/star/sdb/SQLContext.hpp>
#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp>
#include <com/sun/star/sdbcx/Privilege.hpp>
@@ -48,7 +48,6 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
-#include <com/sun/star/frame/XInterceptorInfo.hpp>
#include <com/sun/star/container/XIndexContainer.hpp>
#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/frame/XStatusListener.hpp>
@@ -66,38 +65,18 @@
#include <com/sun/star/awt/FontStrikeout.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <vcl/wintypes.hxx>
-#include <vos/mutex.hxx>
-
-#ifndef _SVSTDARR_ULONGS
-#define _SVSTDARR_ULONGS
-#include <svtools/svstdarr.hxx>
-#endif
-#include <sfx2/ctrlitem.hxx>
-#include <tools/link.hxx>
-#include <tools/date.hxx>
-#include <tools/time.hxx>
-#include <tools/datetime.hxx>
-
-#include "fmprop.hrc"
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/io/XObjectInputStream.hpp>
#include <com/sun/star/io/XObjectOutputStream.hpp>
#include <com/sun/star/io/XPersistObject.hpp>
#include <com/sun/star/util/XNumberFormatter.hpp>
#include <com/sun/star/util/XNumberFormats.hpp>
-#include <cppuhelper/interfacecontainer.h>
-#include <cppuhelper/compbase2.hxx>
-#include <cppuhelper/compbase3.hxx>
+
+#include <vcl/wintypes.hxx>
#include <cppuhelper/weakref.hxx>
#include <comphelper/uno3.hxx>
#include <comphelper/stl_types.hxx>
#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/implbase2.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/component.hxx>
-
-#include <svx/svxdllapi.h>
#include <set>
@@ -114,24 +93,7 @@ SVX_DLLPUBLIC void displayException(const ::com::sun::star::sdb::SQLContext&, Wi
void displayException(const ::com::sun::star::sdb::SQLErrorEvent&, Window* _pParent = NULL);
void displayException(const ::com::sun::star::uno::Any&, Window* _pParent = NULL);
-#define DATA_MODE rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) )
-#define FILTER_MODE rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterMode" ) )
-
-// Kopieren von Persistenten Objecten
-::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> cloneUsingProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XPersistObject>& _xObj);
-
-sal_Int32 findPos(const ::rtl::OUString& aStr, const ::com::sun::star::uno::Sequence< ::rtl::OUString>& rList);
-
-// Suchen in einer Indexliste nach einem Element
-sal_Bool searchElement(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& xCont, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& xElement);
-
sal_Int32 getElementPos(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& xCont, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& xElement);
-String getFormComponentAccessPath(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xElement);
-String getFormComponentAccessPath(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xElement, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _rTopLevelElement);
-::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> getElementFromAccessPath(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& _xParent, const String& _rRelativePath);
-
-
-::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel> getXModel(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& xIface);
SVX_DLLPUBLIC ::rtl::OUString getLabelName(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& xControlModel);
@@ -236,10 +198,8 @@ protected:
void setAdapter(FmXDisposeMultiplexer* pAdapter);
};
-typedef ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener> FmXDisposeMultiplexer_x;
//==============================================================================
-
class FmXDisposeMultiplexer :public ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener>
{
::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent> m_xObject;
@@ -258,119 +218,10 @@ public:
// ==================================================================
-//========================================================================
-//= dispatch interception helper classes
-//========================================================================
-
-//------------------------------------------------------------------------
-//- FmDispatchInterceptor
-//------------------------------------------------------------------------
-class FmDispatchInterceptor
-{
-public:
- FmDispatchInterceptor() { }
-
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch> interceptedQueryDispatch(sal_uInt16 _nId,
- const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw( ::com::sun::star::uno::RuntimeException ) = 0;
-
- virtual ::osl::Mutex* getInterceptorMutex() = 0;
-};
-
-//------------------------------------------------------------------------
-//- FmXDispatchInterceptorImpl
-//------------------------------------------------------------------------
-typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::frame::XDispatchProviderInterceptor
- , ::com::sun::star::lang::XEventListener
- , ::com::sun::star::frame::XInterceptorInfo
- > FmXDispatchInterceptorImpl_BASE;
-
-class FmXDispatchInterceptorImpl : public FmXDispatchInterceptorImpl_BASE
-{
- ::osl::Mutex m_aFallback;
-
- // the component which's dispatches we're intercepting
- ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XDispatchProviderInterception>
- m_xIntercepted;
- sal_Bool m_bListening;
-
- // the real interceptor
- FmDispatchInterceptor* m_pMaster;
-
- // chaining
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider> m_xSlaveDispatcher;
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider> m_xMasterDispatcher;
-
- // our id
- sal_Int16 m_nId;
-
- ::com::sun::star::uno::Sequence< ::rtl::OUString >
- m_aInterceptedURLSchemes;
-
- virtual ~FmXDispatchInterceptorImpl();
-
-public:
- ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception> getIntercepted() const { return m_xIntercepted; }
-
-public:
- FmXDispatchInterceptorImpl(
- const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _rToIntercept,
- FmDispatchInterceptor* _pMaster,
- sal_Int16 _nId,
- ::com::sun::star::uno::Sequence< ::rtl::OUString > _rInterceptedSchemes /// if not empty, this will be used for getInterceptedURLs
- );
-
- // StarOne
- DECLARE_UNO3_DEFAULTS(FmXDispatchInterceptorImpl, FmXDispatchInterceptorImpl_BASE);
- // virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& type) throw ( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
- // ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
-
-
- // ::com::sun::star::frame::XDispatchProvider
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw(::com::sun::star::uno::RuntimeException);
-
- // ::com::sun::star::frame::XDispatchProviderInterceptor
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL getSlaveDispatchProvider( ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewDispatchProvider ) throw(::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL getMasterDispatchProvider( ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSupplier ) throw(::com::sun::star::uno::RuntimeException);
-
- // ::com::sun::star::frame::XInterceptorInfo
- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getInterceptedURLs( ) throw(::com::sun::star::uno::RuntimeException);
-
- // ::com::sun::star::lang::XEventListener
- virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
-
- // OComponentHelper
- virtual void SAL_CALL disposing();
-
-protected:
- void ImplDetach();
-
- ::osl::Mutex& getAccessSafety()
- {
- if (m_pMaster && m_pMaster->getInterceptorMutex())
- return *m_pMaster->getInterceptorMutex();
- return m_aFallback;
- }
-};
-
-//==================================================================
-// ...
-//==================================================================
-::rtl::OUString getServiceNameByControlType(sal_Int16 nType);
- // get a service name to create a model of the given type (OBJ_FM_...)
sal_Int16 getControlTypeByObject(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XServiceInfo>& _rxObject);
// get the object type (OBJ_FM_...) from the services the object supports
-void TransferEventScripts(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel>& xModel, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl,
- const ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor>& rTransferIfAvailable);
-
-sal_Int16 GridView2ModelPos(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& rColumns, sal_Int16 nViewPos);
-
//==================================================================
-sal_Bool isLoadable(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& xLoad);
sal_Bool isRowSetAlive(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _rxRowSet);
// checks if the ::com::sun::star::sdbcx::XColumnsSupplier provided by _rxRowSet supllies any columns
diff --git a/svx/source/inc/fmvwimp.hxx b/svx/source/inc/fmvwimp.hxx
index 12965c07ad3b..c51c935883ed 100644
--- a/svx/source/inc/fmvwimp.hxx
+++ b/svx/source/inc/fmvwimp.hxx
@@ -37,7 +37,8 @@
#include <com/sun/star/form/XForm.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
-#include <com/sun/star/form/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFormControllerContext.hpp>
#include <com/sun/star/container/XContainerListener.hpp>
#include <com/sun/star/container/ContainerEvent.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
@@ -49,7 +50,7 @@
#include <comphelper/stl_types.hxx>
#include <tools/link.hxx>
#include <tools/string.hxx>
-#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/implbase3.hxx>
#include <comphelper/uno3.hxx>
#include <comphelper/componentcontext.hxx>
@@ -73,7 +74,6 @@ FORWARD_DECLARE_INTERFACE(awt,XWindow)
FORWARD_DECLARE_INTERFACE(beans,XPropertySet)
FORWARD_DECLARE_INTERFACE(util,XNumberFormats)
-class FmXFormController;
class FmXFormView;
namespace svx {
@@ -84,41 +84,49 @@ namespace svx {
//==================================================================
// FmXPageViewWinRec
//==================================================================
-class FmXPageViewWinRec : public ::cppu::WeakImplHelper1< ::com::sun::star::container::XIndexAccess>
+typedef ::cppu::WeakImplHelper2 < ::com::sun::star::container::XIndexAccess
+ , ::com::sun::star::form::runtime::XFormControllerContext
+ > FmXPageViewWinRec_Base;
+
+class FmXPageViewWinRec : public FmXPageViewWinRec_Base
{
friend class FmXFormView;
- ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > > m_aControllerList;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > m_xControlContainer;
- ::comphelper::ComponentContext m_aContext;
+ ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > > m_aControllerList;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > m_xControlContainer;
+ ::comphelper::ComponentContext m_aContext;
FmXFormView* m_pViewImpl;
Window* m_pWindow;
+protected:
+ ~FmXPageViewWinRec();
+
public:
FmXPageViewWinRec( const ::comphelper::ComponentContext& _rContext,
const SdrPageWindow&, FmXFormView* pView);
//const SdrPageViewWinRec*, FmXFormView* pView);
- ~FmXPageViewWinRec();
-
-// UNO Anbindung
-// ::com::sun::star::container::XElementAccess
+ // XElementAccess
virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
-// ::com::sun::star::container::XEnumerationAccess
+ // XEnumerationAccess
virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException);
-// ::com::sun::star::container::XIndexAccess
+ // XIndexAccess
virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _Index) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
- const ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > >& GetList() {return m_aControllerList;}
+ // XFormControllerContext
+ virtual void SAL_CALL makeVisible( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _Control ) throw (::com::sun::star::uno::RuntimeException);
+
+ const ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > >& GetList() {return m_aControllerList;}
protected:
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController > getController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm ) const;
- void setController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm,
- FmXFormController* pParent = NULL);
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > getController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm ) const;
+ void setController(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxParentController );
::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > getControlContainer() const { return m_xControlContainer; }
void updateTabOrder( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm );
void dispose();
@@ -213,7 +221,7 @@ public:
FmWinRecList::const_iterator findWindow( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& _rxCC ) const;
const FmWinRecList& getWindowList() const {return m_aWinList;}
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >
getFormController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, const OutputDevice& _rDevice ) const;
// activation handling
diff --git a/svx/source/inc/formcontroller.hxx b/svx/source/inc/formcontroller.hxx
new file mode 100644
index 000000000000..4c4ba187187d
--- /dev/null
+++ b/svx/source/inc/formcontroller.hxx
@@ -0,0 +1,592 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SVX_FMCTRLER_HXX
+#define _SVX_FMCTRLER_HXX
+
+#include "delayedevent.hxx"
+#include "formdispatchinterceptor.hxx"
+#include "sqlparserclient.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/awt/XControl.hpp>
+#include <com/sun/star/awt/XControlModel.hpp>
+#include <com/sun/star/awt/XFocusListener.hpp>
+#include <com/sun/star/awt/XItemListener.hpp>
+#include <com/sun/star/awt/XMouseListener.hpp>
+#include <com/sun/star/awt/XTabController.hpp>
+#include <com/sun/star/awt/XTextComponent.hpp>
+#include <com/sun/star/container/XContainerListener.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/form/DatabaseDeleteEvent.hpp>
+#include <com/sun/star/form/DatabaseParameterEvent.hpp>
+#include <com/sun/star/form/ErrorEvent.hpp>
+#include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
+#include <com/sun/star/form/XConfirmDeleteBroadcaster.hpp>
+#include <com/sun/star/form/XConfirmDeleteListener.hpp>
+#include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
+#include <com/sun/star/form/XDatabaseParameterListener.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFilterController.hpp>
+#include <com/sun/star/form/XFormControllerListener.hpp>
+#include <com/sun/star/form/XGridControlListener.hpp>
+#include <com/sun/star/form/XLoadListener.hpp>
+#include <com/sun/star/form/XResetListener.hpp>
+#include <com/sun/star/frame/DispatchDescriptor.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
+#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/script/XEventAttacherManager.hpp>
+#include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
+#include <com/sun/star/sdb/XRowSetApproveListener.hpp>
+#include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
+#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
+#include <com/sun/star/sdb/XSQLErrorListener.hpp>
+#include <com/sun/star/sdbc/XRowSetListener.hpp>
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include <com/sun/star/util/XModeSelector.hpp>
+#include <com/sun/star/util/XModifyBroadcaster.hpp>
+#include <com/sun/star/util/XModifyListener.hpp>
+/** === end UNO includes === **/
+
+#include <comphelper/broadcasthelper.hxx>
+#include <comphelper/componentcontext.hxx>
+#include <comphelper/proparrhlp.hxx>
+#include <comphelper/stl_types.hxx>
+#include <connectivity/sqlparse.hxx>
+#include <cppuhelper/propshlp.hxx>
+#include <tools/debug.hxx>
+#include <vcl/timer.hxx>
+
+#if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22)
+#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
+#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 22
+#include <comphelper/implbase_var.hxx>
+#endif
+
+struct FmXTextComponentLess : public ::std::binary_function< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent> , sal_Bool>
+{
+ sal_Bool operator() (const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& x, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& y) const
+ {
+ return reinterpret_cast<sal_Int64>(x.get()) < reinterpret_cast<sal_Int64>(y.get());
+ }
+};
+
+typedef ::std::map< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::rtl::OUString, FmXTextComponentLess> FmFilterRow;
+typedef ::std::vector< FmFilterRow > FmFilterRows;
+typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > > FmFormControllers;
+
+class FmFormView;
+class Window;
+
+namespace svxform
+{
+ typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > > FilterComponents;
+ class ControlBorderManager;
+ struct FmFieldInfo;
+
+ typedef ::comphelper::WeakComponentImplHelper22 < ::com::sun::star::form::runtime::XFormController
+ , ::com::sun::star::form::runtime::XFilterController
+ , ::com::sun::star::awt::XFocusListener
+ , ::com::sun::star::form::XLoadListener
+ , ::com::sun::star::beans::XPropertyChangeListener
+ , ::com::sun::star::awt::XTextListener
+ , ::com::sun::star::awt::XItemListener
+ , ::com::sun::star::container::XContainerListener
+ , ::com::sun::star::util::XModifyListener
+ , ::com::sun::star::form::XConfirmDeleteListener
+ , ::com::sun::star::sdb::XSQLErrorListener
+ , ::com::sun::star::sdbc::XRowSetListener
+ , ::com::sun::star::sdb::XRowSetApproveListener
+ , ::com::sun::star::form::XDatabaseParameterListener
+ , ::com::sun::star::lang::XServiceInfo
+ , ::com::sun::star::form::XResetListener
+ , ::com::sun::star::frame::XDispatch
+ , ::com::sun::star::awt::XMouseListener
+ , ::com::sun::star::form::validation::XFormComponentValidityListener
+ , ::com::sun::star::task::XInteractionHandler
+ , ::com::sun::star::form::XGridControlListener
+ , ::com::sun::star::form::runtime::XFeatureInvalidation
+ > FormController_BASE;
+
+ //==================================================================
+ // FormController
+ //==================================================================
+ class ColumnInfoCache;
+ class SAL_DLLPRIVATE FormController :public ::comphelper::OBaseMutex
+ ,public FormController_BASE
+ ,public ::cppu::OPropertySetHelper
+ ,public DispatchInterceptor
+ ,public ::comphelper::OAggregationArrayUsageHelper< FormController >
+ ,public ::svxform::OSQLParserClient
+ {
+ typedef ::std::map < sal_Int16,
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >
+ > DispatcherContainer;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabController> m_xTabController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> m_xActiveControl, m_xCurrentControl;
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess> m_xModelAsIndex;
+ ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xModelAsManager;
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xParent;
+ ::comphelper::ComponentContext m_aContext;
+ // Composer used for checking filter conditions
+ ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > m_xComposer;
+ ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xInteractionHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > m_xContext;
+
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > m_aControls;
+ ::cppu::OInterfaceContainerHelper
+ m_aActivateListeners,
+ m_aModifyListeners,
+ m_aErrorListeners,
+ m_aDeleteListeners,
+ m_aRowSetApproveListeners,
+ m_aParameterListeners,
+ m_aFilterListeners;
+
+ FmFormControllers m_aChilds;
+ FilterComponents m_aFilterComponents;
+ FmFilterRows m_aFilterRows;
+
+ Timer m_aTabActivationTimer;
+ Timer m_aFeatureInvalidationTimer;
+
+ ::svxform::ControlBorderManager*
+ m_pControlBorderManager;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >
+ m_xFormOperations;
+ DispatcherContainer m_aFeatureDispatchers;
+ ::std::set< sal_Int16 > m_aInvalidFeatures; // for asynchronous feature invalidation
+
+ ::rtl::OUString m_aMode;
+
+ ::svxform::DelayedEvent m_aLoadEvent;
+ ::svxform::DelayedEvent m_aToggleEvent;
+ ::svxform::DelayedEvent m_aActivationEvent;
+ ::svxform::DelayedEvent m_aDeactivationEvent;
+
+ ::std::auto_ptr< ColumnInfoCache >
+ m_pColumnInfoCache;
+
+ sal_Int32 m_nCurrentFilterPosition; // current level for filtering (or-criteria)
+
+ sal_Bool m_bCurrentRecordModified : 1;
+ sal_Bool m_bCurrentRecordNew : 1;
+ sal_Bool m_bLocked : 1;
+ sal_Bool m_bDBConnection : 1; // Focuslistener nur fuer Datenbankformulare
+ sal_Bool m_bCycle : 1;
+ sal_Bool m_bCanInsert : 1;
+ sal_Bool m_bCanUpdate : 1;
+ sal_Bool m_bCommitLock : 1; // lock the committing of controls see focusGained
+ sal_Bool m_bModified : 1; // ist der Inhalt eines Controls modifiziert ?
+ sal_Bool m_bControlsSorted : 1;
+ sal_Bool m_bFiltering : 1;
+ sal_Bool m_bAttachEvents : 1;
+ sal_Bool m_bDetachEvents : 1;
+ sal_Bool m_bAttemptedHandlerCreation : 1;
+
+ // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
+ // the ::com::sun::star::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
+ DECLARE_STL_VECTOR(DispatchInterceptionMultiplexer*, Interceptors);
+ Interceptors m_aControlDispatchInterceptors;
+
+ public:
+ FormController( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & _rxORB );
+
+ protected:
+ ~FormController();
+
+ // XInterface
+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& type) throw ( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL acquire() throw ();
+ virtual void SAL_CALL release() throw ();
+
+ // XTypeProvider
+ virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() 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);
+
+ // XDispatch
+ virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& _rURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rArgs ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::container::XChild
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> SAL_CALL getParent(void) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL setParent(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& Parent) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException );
+
+ // ::com::sun::star::lang::XEventListener
+ virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException );
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing();
+
+ // OPropertySetHelper
+ virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any & rConvertedValue, ::com::sun::star::uno::Any & rOldValue,
+ sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
+ throw( ::com::sun::star::lang::IllegalArgumentException );
+
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw( ::com::sun::star::uno::Exception );
+ virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
+
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException );
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
+
+ using OPropertySetHelper::getFastPropertyValue;
+
+ // XFilterController
+ virtual ::sal_Int32 SAL_CALL getFilterComponents() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getDisjunctiveTerms() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addFilterControllerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterControllerListener >& _Listener ) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeFilterControllerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterControllerListener >& _Listener ) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL setPredicateExpression( ::sal_Int32 _Component, ::sal_Int32 _Term, const ::rtl::OUString& _PredicateExpression ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > SAL_CALL getFilterComponent( ::sal_Int32 _Component ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL getPredicateExpressions() throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeDisjunctiveTerm( ::sal_Int32 _Term ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL appendEmptyDisjunctiveTerm() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getActiveTerm() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setActiveTerm( ::sal_Int32 _ActiveTerm ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+
+ // XElementAccess
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType(void) throw( ::com::sun::star::uno::RuntimeException );
+ virtual sal_Bool SAL_CALL hasElements(void) throw( ::com::sun::star::uno::RuntimeException );
+
+ // ::com::sun::star::container::XEnumerationAccess
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException );
+
+ // ::com::sun::star::container::XContainerListener
+ virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XLoadListener
+ virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XModeSelector
+ virtual void SAL_CALL setMode(const ::rtl::OUString& Mode) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException );
+ virtual ::rtl::OUString SAL_CALL getMode(void) throw( ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedModes(void) throw( ::com::sun::star::uno::RuntimeException );
+ virtual sal_Bool SAL_CALL supportsMode(const ::rtl::OUString& Mode) throw( ::com::sun::star::uno::RuntimeException );
+
+ // ::com::sun::star::container::XIndexAccess
+ virtual sal_Int32 SAL_CALL getCount(void) throw( ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 Index) throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException );
+
+ // XModifyBroadcaster
+ virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XFocusListener
+ virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XMouseListener
+ virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XFormComponentValidityListener
+ virtual void SAL_CALL componentValidityChanged( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XInteractionHandler
+ virtual void SAL_CALL handle( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& Request ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XGridControlListener
+ virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::beans::XPropertyChangeListener -> aenderung der stati
+ virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XTextListener -> modify setzen
+ virtual void SAL_CALL textChanged(const ::com::sun::star::awt::TextEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XItemListener -> modify setzen
+ virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XModifyListener -> modify setzen
+ virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XFormController
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations > SAL_CALL getFormOperations() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> SAL_CALL getCurrentControl(void) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL addActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL addChildController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _ChildController ) throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException );
+
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > SAL_CALL getContext() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setContext( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext >& _context ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > SAL_CALL getInteractionHandler() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setInteractionHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _interactionHandler ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XTabController
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > SAL_CALL getControls(void) throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual void SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel>& Model) throw( ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel> SAL_CALL getModel() throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual void SAL_CALL setContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer>& Container) throw( ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer> SAL_CALL getContainer() throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual void SAL_CALL autoTabOrder() throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL activateTabOrder() throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual void SAL_CALL activateFirst() throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL activateLast() throw( ::com::sun::star::uno::RuntimeException );
+
+ // com::sun::star::sdbc::XRowSetListener
+ virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XRowSetApproveListener
+ virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
+ virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event) throw( ::com::sun::star::uno::RuntimeException );
+ virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XRowSetApproveBroadcaster
+ virtual void SAL_CALL addRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XSQLErrorBroadcaster
+ virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XSQLErrorListener
+ virtual void SAL_CALL addSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XDatabaseParameterBroadcaster2
+ virtual void SAL_CALL addDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XDatabaseParameterBroadcaster
+ virtual void SAL_CALL addParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XDatabaseParameterListener
+ virtual sal_Bool SAL_CALL approveParameter(const ::com::sun::star::form::DatabaseParameterEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XConfirmDeleteBroadcaster
+ virtual void SAL_CALL addConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL removeConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XConfirmDeleteListener
+ virtual sal_Bool SAL_CALL confirmDelete(const ::com::sun::star::sdb::RowChangeEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XServiceInfo
+ virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw(::com::sun::star::uno::RuntimeException);
+
+ // XResetListener
+ virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
+
+ // XFeatureInvalidation
+ virtual void SAL_CALL invalidateFeatures( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& Features ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL invalidateAllFeatures( ) throw (::com::sun::star::uno::RuntimeException);
+
+// method for registration
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void);
+
+ // comphelper::OPropertyArrayUsageHelper
+ virtual void fillProperties(
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps,
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
+ ) const;
+
+ protected:
+ // DispatchInterceptor
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch>
+ interceptedQueryDispatch(
+ const ::com::sun::star::util::URL& aURL,
+ const ::rtl::OUString& aTargetFrameName,
+ sal_Int32 nSearchFlags
+ ) throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual ::osl::Mutex* getInterceptorMutex() { return &m_aMutex; }
+
+ /// update all our dispatchers
+ void updateAllDispatchers() const;
+
+ /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
+ */
+ void disposeAllFeaturesAndDispatchers() SAL_THROW(());
+
+ void startFiltering();
+ void stopFiltering();
+ void setFilter(::std::vector<FmFieldInfo>&);
+ void startListening();
+ void stopListening();
+
+ /** ensures that we have an interaction handler, if possible
+
+ If an interaction handler was provided at creation time (<member>initialize</member>), this
+ one will be used. Else, an attempt is made to create an <type scope="com::sun::star::sdb">InteractionHandler</type>
+ is made.
+
+ @return <TRUE/>
+ if and only if <member>m_xInteractionHandler</member> is valid when the method returns
+ */
+ bool ensureInteractionHandler();
+
+ /** replaces one of our controls with another one
+
+ Upon successful replacing, the old control will be disposed. Also, internal members pointing
+ to the current or active control will be adjusted. Yet more, if the replaced control was
+ the active control, the new control will be made active.
+
+ @param _rxExistentControl
+ The control to replace. Must be one of the controls in our ControlContainer.
+ @param _rxNewControl
+ The control which should replace the existent control.
+ @return
+ <TRUE/> if and only if the control was successfully replaced
+ */
+ bool replaceControl(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxExistentControl,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxNewControl
+ );
+
+ // we're listening at all bound controls for modifications
+ void startControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+ void stopControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+
+ void setLocks();
+ void setControlLock(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+ void addToEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+ void removeFromEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+ void toggleAutoFields(sal_Bool bAutoFields);
+ void unload() throw( ::com::sun::star::uno::RuntimeException );
+ void removeBoundFieldListener();
+
+ void startFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
+ void stopFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> findControl( ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> >& rCtrls, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel>& rxCtrlModel, sal_Bool _bRemove, sal_Bool _bOverWrite ) const;
+
+ void insertControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+ void removeControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
+
+ /// called when a new control is to be handled by the controller
+ void implControlInserted( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bAddToEventAttacher );
+ /// called when a control is not to be handled by the controller anymore
+ void implControlRemoved( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bRemoveFromEventAttacher );
+
+ /** sets m_xCurrentControl, plus does administrative tasks depending on it
+ */
+ void implSetCurrentControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl );
+
+ /** invalidates the FormFeatures which depend on the current control
+ */
+ void implInvalidateCurrentControlDependentFeatures();
+
+ bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper.bDisposed; }
+ void impl_checkDisposed_throw() const;
+
+ void impl_onModify();
+
+ /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
+ row is the first one.
+
+ @precond
+ our mutex is locked
+ */
+ void impl_addFilterRow( const FmFilterRow& _row );
+
+ /** adds an empty filter row to m_aFilterRows, and notifies our listeners
+ */
+ void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard& _rClearBeforeNotify );
+
+ sal_Bool isLocked() const {return m_bLocked;}
+ sal_Bool determineLockState() const;
+
+ Window* getDialogParentWindow();
+ // returns the window which should be used as parent window for dialogs
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor> createInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
+ // create a new interceptor, register it on the given object
+ void deleteInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
+ // if createInterceptor was called for the given object the according interceptor will be removed
+ // from the objects interceptor chain and released
+
+ /** checks all form controls belonging to our form for validity
+
+ If a form control supports the XValidatableFormComponent interface, this is used to determine
+ the validity of the control. If the interface is not supported, the control is supposed to be
+ valid.
+
+ @param _rFirstInvalidityExplanation
+ if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
+ the explanation for the invalidity, as obtained from the validator.
+
+ @param _rxFirstInvalidModel
+ if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
+ the control model
+
+ @return
+ <TRUE/> if and only if all controls belonging to our form are valid
+ */
+ bool checkFormComponentValidity(
+ ::rtl::OUString& /* [out] */ _rFirstInvalidityExplanation,
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& /* [out] */ _rxFirstInvalidModel
+ ) SAL_THROW(());
+
+ /** locates the control which belongs to a given model
+ */
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >
+ locateControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel ) SAL_THROW(());
+
+ // set the text for all filters
+ void impl_setTextOnAllFilter_throw();
+
+ // in filter mode we do not listen for changes
+ sal_Bool isListeningForChanges() const {return m_bDBConnection && !m_bFiltering && !isLocked();}
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> isInList(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer>& xPeer) const;
+
+ DECL_LINK( OnActivateTabOrder, void* );
+ DECL_LINK( OnInvalidateFeatures, void* );
+ DECL_LINK( OnLoad, void* );
+ DECL_LINK( OnToggleAutoFields, void* );
+ DECL_LINK( OnActivated, void* );
+ DECL_LINK( OnDeactivated, void* );
+ };
+
+} // namespace svxform
+
+#endif // _SVX_FMCTRLER_HXX
+
diff --git a/svx/source/inc/formcontrolling.hxx b/svx/source/inc/formcontrolling.hxx
index d082bd889804..f818ced85189 100644
--- a/svx/source/inc/formcontrolling.hxx
+++ b/svx/source/inc/formcontrolling.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: formcontrolling.hxx,v $
- * $Revision: 1.7 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -31,7 +28,7 @@
#ifndef SVX_FORMCONTROLLING_HXX
#define SVX_FORMCONTROLLING_HXX
-#include <com/sun/star/form/XFormController.hpp>
+#include <com/sun/star/form/runtime/XFormController.hpp>
#include <com/sun/star/form/XForm.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/form/runtime/FeatureState.hpp>
@@ -117,7 +114,7 @@ namespace svx
IControllerFeatureInvalidation* _pInvalidationCallback
);
- /** constructs the instance from a <type scope="com::sun::star::form">XFormController<type> instance
+ /** constructs the instance from a <type scope="com::sun::star::form::runtime">XFormController<type> instance
@param _rxORB
a multi service factory for creating various needed components
@@ -131,7 +128,7 @@ namespace svx
*/
ControllerFeatures(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController,
IControllerFeatureInvalidation* _pInvalidationCallback
);
@@ -163,7 +160,7 @@ namespace svx
/** assign to a controller
*/
void assign(
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController
);
/** assign to a controller
@@ -206,7 +203,7 @@ namespace svx
::com::sun::star::uno::Any m_aOperationError;
public:
- /** constructs the helper from a <type scope="com::sun::star::form">XFormController<type> instance
+ /** constructs the helper from a <type scope="com::sun::star::form::runtime">XFormController<type> instance
@param _rContext
the context the component lives in
@@ -218,7 +215,7 @@ namespace svx
*/
FormControllerHelper(
const ::comphelper::ComponentContext& _rContext,
- const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController,
IControllerFeatureInvalidation* _pInvalidationCallback
);
diff --git a/svx/source/inc/formdispatchinterceptor.hxx b/svx/source/inc/formdispatchinterceptor.hxx
new file mode 100644
index 000000000000..5bcfc1726ad0
--- /dev/null
+++ b/svx/source/inc/formdispatchinterceptor.hxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVX_FORMDISPATCHINTERCEPTOR_HXX
+#define SVX_FORMDISPATCHINTERCEPTOR_HXX
+
+/** === begin UNO includes === **/
+#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
+#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
+/** === end UNO includes === **/
+
+#include <cppuhelper/compbase2.hxx>
+#include <comphelper/uno3.hxx>
+
+//........................................................................
+namespace svxform
+{
+//........................................................................
+
+ //====================================================================
+ //= DispatchInterceptor
+ //====================================================================
+ class DispatchInterceptor
+ {
+ public:
+ DispatchInterceptor() { }
+
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch> interceptedQueryDispatch(
+ const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw( ::com::sun::star::uno::RuntimeException ) = 0;
+
+ virtual ::osl::Mutex* getInterceptorMutex() = 0;
+ };
+
+ //====================================================================
+ //=
+ //====================================================================
+ typedef ::cppu::WeakComponentImplHelper2< ::com::sun::star::frame::XDispatchProviderInterceptor
+ , ::com::sun::star::lang::XEventListener
+ > DispatchInterceptionMultiplexer_BASE;
+
+ class DispatchInterceptionMultiplexer : public DispatchInterceptionMultiplexer_BASE
+ {
+ ::osl::Mutex m_aFallback;
+ ::osl::Mutex* m_pMutex;
+
+ // the component which's dispatches we're intercepting
+ ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XDispatchProviderInterception >
+ m_xIntercepted;
+ sal_Bool m_bListening;
+
+ // the real interceptor
+ DispatchInterceptor* m_pMaster;
+
+ // chaining
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider> m_xSlaveDispatcher;
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider> m_xMasterDispatcher;
+
+ virtual ~DispatchInterceptionMultiplexer();
+
+ public:
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception> getIntercepted() const { return m_xIntercepted; }
+
+ public:
+ DispatchInterceptionMultiplexer(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _rToIntercept,
+ DispatchInterceptor* _pMaster
+ );
+
+ // UNO
+ DECLARE_UNO3_DEFAULTS(DispatchInterceptionMultiplexer, DispatchInterceptionMultiplexer_BASE);
+
+ // ::com::sun::star::frame::XDispatchProvider
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw(::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::frame::XDispatchProviderInterceptor
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL getSlaveDispatchProvider( ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewDispatchProvider ) throw(::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL getMasterDispatchProvider( ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSupplier ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::lang::XEventListener
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing();
+
+ protected:
+ void ImplDetach();
+ };
+
+//........................................................................
+} // namespace svxform
+//........................................................................
+
+#endif // SVX_FORMDISPATCHINTERCEPTOR_HXX
diff --git a/svx/source/inc/fmdispatch.hxx b/svx/source/inc/formfeaturedispatcher.hxx
index 90480afc4609..32316d52b922 100644
--- a/svx/source/inc/fmdispatch.hxx
+++ b/svx/source/inc/formfeaturedispatcher.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fmdispatch.hxx,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -31,19 +28,20 @@
#ifndef SVX_FMDISPATCH_HXX
#define SVX_FMDISPATCH_HXX
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/interfacecontainer.hxx>
+/** === begin UNO includes === **/
#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/form/runtime/XFormOperations.hpp>
+/** === end UNO includes === **/
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/interfacecontainer.hxx>
//........................................................................
namespace svx
{
//........................................................................
- class FormControllerHelper;
-
//====================================================================
//= OSingleFeatureDispatcher
//====================================================================
@@ -55,10 +53,11 @@ namespace svx
private:
::osl::Mutex& m_rMutex;
::cppu::OInterfaceContainerHelper m_aStatusListeners;
- const FormControllerHelper& m_rController;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >
+ m_xFormOperations;
const ::com::sun::star::util::URL m_aFeatureURL;
::com::sun::star::uno::Any m_aLastKnownState;
- const sal_Int32 m_nFeatureId;
+ const sal_Int16 m_nFormFeature;
sal_Bool m_bLastKnownEnabled;
sal_Bool m_bDisposed;
@@ -80,9 +79,9 @@ namespace svx
*/
OSingleFeatureDispatcher(
const ::com::sun::star::util::URL& _rFeatureURL,
- sal_Int32 _nFeatureId,
- const FormControllerHelper& _rController,
- ::osl::Mutex& _rMutex
+ const sal_Int16 _nFormFeature,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >& _rxFormOperations,
+ ::osl::Mutex& _rMutex
);
/** disposes the dispatcher instance
diff --git a/svx/source/inc/gridcell.hxx b/svx/source/inc/gridcell.hxx
index cb747e3a894c..b3792b76422c 100644
--- a/svx/source/inc/gridcell.hxx
+++ b/svx/source/inc/gridcell.hxx
@@ -35,7 +35,6 @@
#include "sqlparserclient.hxx"
#include "typeconversionclient.hxx"
-#include "fmtools.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/sdb/XColumn.hpp>
@@ -51,6 +50,7 @@
#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>
diff --git a/svx/source/inc/tabwin.hxx b/svx/source/inc/tabwin.hxx
index be46c05a58d5..02f58a507511 100644
--- a/svx/source/inc/tabwin.hxx
+++ b/svx/source/inc/tabwin.hxx
@@ -37,9 +37,6 @@
#include <sfx2/ctrlitem.hxx>
#include <com/sun/star/form/XForm.hpp>
-//#ifndef _SVX_FMTOOLS_HXX
-//#include "fmtools.hxx"
-//#endif
#include <comphelper/propmultiplex.hxx>
#include <svtools/transfer.hxx>
#include "svx/dbtoolsclient.hxx"
diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
index bbfe3eaf65ab..3a446d96ef59 100644
--- a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
@@ -257,8 +257,8 @@ namespace sdr { namespace contact {
// no check whether we're valid, this is the responsibility of the caller
// Argh. Why does XView have a setZoom only, but not a getZoom?
- Window* pWindow = VCLUnoHelper::GetWindow( m_xControlWindow );
- OSL_ENSURE( pWindow, "ControlHolder::setZoom: no implementation access!" );
+ Window* pWindow = VCLUnoHelper::GetWindow( m_xControl->getPeer() );
+ OSL_ENSURE( pWindow, "ControlHolder::getZoom: no implementation access!" );
::basegfx::B2DVector aZoom( 1, 1 );
if ( pWindow )
@@ -606,14 +606,6 @@ namespace sdr { namespace contact {
*/
bool isControlVisible() const { return impl_isControlVisible_nofail(); }
- /** determines whether the instance belongs to a given OutputDevice
- @precond
- The instance knows the device it belongs to, or can determine it.
- If this is not the case, you will notice an assertion, and the method will
- return false.
- */
- bool belongsToDevice( const OutputDevice* _pDevice ) const;
-
/// creates an XControl for the given device and SdrUnoObj
static bool
createControlForDevice(
@@ -1056,10 +1048,10 @@ namespace sdr { namespace contact {
namespace
{
- static void lcl_resetFlag( bool& rbFlag )
- {
- rbFlag = false;
- }
+ static void lcl_resetFlag( bool& rbFlag )
+ {
+ rbFlag = false;
+ }
}
//--------------------------------------------------------------------
@@ -1082,8 +1074,8 @@ namespace sdr { namespace contact {
}
m_bCreatingControl = true;
- ::comphelper::ScopeGuard aGuard( ::boost::bind( lcl_resetFlag, ::boost::ref( m_bCreatingControl ) ) );
-
+ ::comphelper::ScopeGuard aGuard( ::boost::bind( lcl_resetFlag, ::boost::ref( m_bCreatingControl ) ) );
+
if ( m_aControl.is() )
{
if ( m_pOutputDeviceForWindow == &_rDevice )
@@ -1486,31 +1478,33 @@ namespace sdr { namespace contact {
VOCGuard aGuard( *this );
DBG_ASSERT( Event.Source == m_xContainer, "ViewObjectContactOfUnoControl_Impl::elementReplaced: where did this come from?" );
- if ( m_aControl == Event.ReplacedElement )
- {
- Reference< XControl > xNewControl( Event.Element, UNO_QUERY );
- DBG_ASSERT( xNewControl.is(), "ViewObjectContactOfUnoControl_Impl::elementReplaced: invalid new control!" );
- if ( !xNewControl.is() )
- return;
+ if ( ! ( m_aControl == Event.ReplacedElement ) )
+ return;
- ENSURE_OR_THROW( m_pOutputDeviceForWindow, "calling this without /me having an output device should be impossible." );
+ Reference< XControl > xNewControl( Event.Element, UNO_QUERY );
+ DBG_ASSERT( xNewControl.is(), "ViewObjectContactOfUnoControl_Impl::elementReplaced: invalid new control!" );
+ if ( !xNewControl.is() )
+ return;
- DBG_ASSERT( xNewControl->getModel() == m_aControl.getModel(), "ViewObjectContactOfUnoControl_Impl::elementReplaced: another model at the new control?" );
- // another model should - in the drawing layer - also imply another SdrUnoObj, which
- // should also result in new ViewContact, and thus in new ViewObjectContacts
+ ENSURE_OR_THROW( m_pOutputDeviceForWindow, "calling this without /me having an output device should be impossible." );
- impl_switchControlListening_nothrow( false );
+ DBG_ASSERT( xNewControl->getModel() == m_aControl.getModel(), "ViewObjectContactOfUnoControl_Impl::elementReplaced: another model at the new control?" );
+ // another model should - in the drawing layer - also imply another SdrUnoObj, which
+ // should also result in new ViewContact, and thus in new ViewObjectContacts
- ControlHolder aNewControl( xNewControl );
- aNewControl.setZoom( m_aControl.getZoom() );
- aNewControl.setPosSize( m_aControl.getPosSize() );
- aNewControl.setDesignMode( impl_isControlDesignMode_nothrow() );
+ impl_switchControlListening_nothrow( false );
- m_aControl = xNewControl;
- m_bControlIsVisible = m_aControl.isVisible();
+ ControlHolder aNewControl( xNewControl );
+ aNewControl.setZoom( m_aControl.getZoom() );
+ aNewControl.setPosSize( m_aControl.getPosSize() );
+ aNewControl.setDesignMode( impl_isControlDesignMode_nothrow() );
- impl_switchControlListening_nothrow( true );
- }
+ m_aControl = xNewControl;
+ m_bControlIsVisible = m_aControl.isVisible();
+
+ impl_switchControlListening_nothrow( true );
+
+ m_pAntiImpl->onControlChangedOrModified( ViewObjectContactOfUnoControl::ImplAccess() );
}
//--------------------------------------------------------------------
@@ -1737,8 +1731,8 @@ namespace sdr { namespace contact {
// our control already died.
// TODO: Is it worth re-creating the control? Finally, this is a pathological situation, it means some instance
// disposed the control though it doesn't own it. So, /me thinks we should not bother here.
- return drawinglayer::primitive2d::Primitive2DSequence();
-
+ return drawinglayer::primitive2d::Primitive2DSequence();
+
::drawinglayer::primitive2d::Primitive2DReference xPrimitive( new LazyControlCreationPrimitive2D( m_pImpl ) );
return ::drawinglayer::primitive2d::Primitive2DSequence( &xPrimitive, 1 );
}
@@ -1746,14 +1740,7 @@ namespace sdr { namespace contact {
//--------------------------------------------------------------------
void ViewObjectContactOfUnoControl::propertyChange()
{
- // graphical invalidate at all views
- ActionChanged();
-
- // #i93318# flush Primitive2DSequence to force recreation with updated XControlModel
- // since e.g. background color has changed and existing decompositions are possibly no
- // longer valid. Unfortunately this is not detected from ControlPrimitive2D::operator==
- // since it only has a uno reference to the XControlModel
- flushPrimitive2DSequence();
+ impl_onControlChangedOrModified();
}
//--------------------------------------------------------------------
@@ -1781,6 +1768,19 @@ namespace sdr { namespace contact {
}
}
+ //--------------------------------------------------------------------
+ void ViewObjectContactOfUnoControl::impl_onControlChangedOrModified()
+ {
+ // graphical invalidate at all views
+ ActionChanged();
+
+ // #i93318# flush Primitive2DSequence to force recreation with updated XControlModel
+ // since e.g. background color has changed and existing decompositions are possibly no
+ // longer valid. Unfortunately this is not detected from ControlPrimitive2D::operator==
+ // since it only has a uno reference to the XControlModel
+ flushPrimitive2DSequence();
+ }
+
//====================================================================
//= UnoControlPrintOrPreviewContact
//====================================================================