[ooo-build-commit] Branch 'ooo/master' - 4 commits - configmgr/source connectivity/inc connectivity/source embeddedobj/source officecfg/registry sfx2/source svx/source svx/util uui/source xmloff/inc xmloff/source

Jan Holesovsky kendy at kemper.freedesktop.org
Tue Sep 15 18:20:34 PDT 2009


 configmgr/source/tree/localizedtreeactions.cxx                 |    5 
 connectivity/inc/connectivity/DriversConfig.hxx                |    4 
 connectivity/source/commontools/DriversConfig.cxx              |   23 
 connectivity/source/commontools/dbmetadata.cxx                 |   35 
 connectivity/source/drivers/ado/ado.xcu                        |   10 
 connectivity/source/drivers/mysql/mysql.xcu                    |   77 
 embeddedobj/source/commonembedding/embedobj.cxx                |    6 
 embeddedobj/source/commonembedding/miscobj.cxx                 |   10 
 embeddedobj/source/commonembedding/persistence.cxx             |   10 
 embeddedobj/source/inc/commonembobj.hxx                        |    7 
 officecfg/registry/schema/org/openoffice/Office/DataAccess.xcs |   19 
 sfx2/source/appl/app.src                                       |    4 
 svx/source/cui/macropg.src                                     |    4 
 svx/source/cui/selector.cxx                                    |    9 
 svx/source/cui/selector.hxx                                    |    1 
 svx/source/fmcomp/fmgridcl.cxx                                 |   23 
 svx/source/fmcomp/gridcell.cxx                                 |  854 ++++++++--
 svx/source/form/fmPropBrw.cxx                                  |   14 
 svx/source/form/fmctrler.cxx                                   |    8 
 svx/source/form/fmpgeimp.cxx                                   |   95 -
 svx/source/form/fmshimp.cxx                                    |   10 
 svx/source/form/fmstring.src                                   |  103 -
 svx/source/form/fmview.cxx                                     |    4 
 svx/source/form/formcontrolfactory.cxx                         |   70 
 svx/source/form/navigatortree.cxx                              |    2 
 svx/source/inc/fmPropBrw.hxx                                   |    1 
 svx/source/inc/fmpgeimp.hxx                                    |   13 
 svx/source/inc/fmresids.hrc                                    |   46 
 svx/source/inc/formcontrolfactory.hxx                          |   17 
 svx/source/inc/gridcell.hxx                                    |  199 +-
 svx/source/svdraw/svdoole2.cxx                                 |    8 
 svx/source/xml/xmleohlp.cxx                                    |   28 
 svx/util/makefile.mk                                           |    4 
 uui/source/iahndl.cxx                                          |   19 
 uui/source/iahndl.hxx                                          |    4 
 uui/source/interactionhandler.cxx                              |   52 
 uui/source/interactionhandler.hxx                              |    8 
 xmloff/inc/xmloff/xmltoken.hxx                                 |    1 
 xmloff/source/chart/SchXMLChartContext.cxx                     |   27 
 xmloff/source/chart/SchXMLChartContext.hxx                     |    7 
 xmloff/source/chart/SchXMLExport.cxx                           |    7 
 xmloff/source/chart/SchXMLTools.cxx                            |    9 
 xmloff/source/core/xmltoken.cxx                                |    3 
 43 files changed, 1328 insertions(+), 532 deletions(-)

New commits:
commit c3da55c5d2ba81ef01a882bbfff5fd11ede15163
Author: Kurt Zenker <kz at openoffice.org>
Date:   Tue Sep 15 08:02:36 2009 +0000

    #i10000# builderror and WaE on solaris fixed

diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx
index 9b46ec6..f79731a 100644
--- a/svx/source/fmcomp/gridcell.cxx
+++ b/svx/source/fmcomp/gridcell.cxx
@@ -3335,10 +3335,10 @@ void FmXGridCell::setLock(sal_Bool _bLock) throw( RuntimeException )
 }
 
 //------------------------------------------------------------------
-void SAL_CALL FmXGridCell::setPosSize( ::sal_Int32 _X, ::sal_Int32 _Y, ::sal_Int32 _Width, ::sal_Int32 _Height, ::sal_Int16 _Flags ) throw (RuntimeException)
+void SAL_CALL FmXGridCell::setPosSize( ::sal_Int32 _XX, ::sal_Int32 _Y, ::sal_Int32 _Width, ::sal_Int32 _Height, ::sal_Int16 _Flags ) throw (RuntimeException)
 {
     OSL_ENSURE( false, "FmXGridCell::setPosSize: not implemented" );
-    (void)_X;
+    (void)_XX;
     (void)_Y;
     (void)_Width;
     (void)_Height;
@@ -3891,7 +3891,6 @@ void FmXEditCell::onWindowEvent( const ULONG _nEventId, const Window& _rWindow,
             onTextChanged();
         return;
     }
-    break;
     }
 
     FmXTextCell::onWindowEvent( _nEventId, _rWindow, _pEventData );
commit 46b676fd73e50af3e13fe1fa63c47c4aebd70232
Author: Kurt Zenker <kz at openoffice.org>
Date:   Mon Sep 14 12:35:50 2009 +0000

    #i104978# patch

diff --git a/svx/util/makefile.mk b/svx/util/makefile.mk
index 8986292..3dcf5ca 100644
--- a/svx/util/makefile.mk
+++ b/svx/util/makefile.mk
@@ -163,7 +163,7 @@ SHL1STDLIBS= \
 
 SHL1DEF=	$(MISC)$/$(SHL1TARGET).def
 DEF1NAME=	$(SHL1TARGET)
-DEFLIB1NAME=$(TARGET)_5
+DEFLIB1NAME=$(TARGET)_5 $(TARGET)_6
 
 # svx
 SHL2TARGET= svx$(DLLPOSTFIX)
@@ -280,7 +280,7 @@ SHL4STDLIBS= \
 
 SHL4DEF=	$(MISC)$/$(SHL4TARGET).def
 DEF4NAME=	$(SHL4TARGET)
-DEFLIB4NAME=$(TARGET)_6
+DEFLIB4NAME=$(TARGET)_7
 
 # ------------------------------------------------------------------------------
 
commit 03b8078fb816753f108b2a76a71efe2eb288ead4
Author: Kurt Zenker <kz at openoffice.org>
Date:   Mon Sep 14 11:18:01 2009 +0000

    CWS-TOOLING: integrate CWS dba32g
    2009-09-09 07:53:55 +0200 oj  r275964 : replace strlen with rtl_str_getLength
    2009-09-07 20:59:10 +0200 fs  r275913 : disable the CopyTableWizard test until issue 104869 is fixed
    2009-09-07 12:17:31 +0200 oj  r275885 : #i104810# remove de as lang
    2009-09-05 22:26:21 +0200 fs  r275857 : protect StateChanged against re-entrance
    2009-09-05 22:25:52 +0200 fs  r275856 : don't attempt to classify the parent of a form as control
    2009-09-05 22:25:29 +0200 fs  r275855 : protect against re-entrance
    2009-09-05 00:11:40 +0200 fs  r275835 : #i10000#
    2009-09-04 23:25:50 +0200 fs  r275834 : #i10000#
    2009-09-04 23:23:47 +0200 fs  r275833 : #i10000#
    2009-09-04 21:49:37 +0200 fs  r275830 : #i10000# correct wrong conflict resolution
    2009-09-04 20:59:51 +0200 fs  r275829 : CWS-TOOLING: rebase CWS dba32g to trunk at 275801 (milestone: DEV300:m57)
    2009-09-04 11:08:32 +0200 oj  r275791 : #i104780# new version 1.2.0
    2009-09-03 22:29:21 +0200 fs  r275775 : OSL_TRACE doesn't need \n anymore
    2009-09-03 08:33:21 +0200 fs  r275743 : CWS-TOOLING: rebase CWS dba32g to trunk at 275331 (milestone: DEV300:m56)
    2009-09-02 13:48:12 +0200 fs  r275708 : removed useless include
    2009-09-02 13:45:43 +0200 fs  r275707 : more since tags, which are used across offapi/udkapi
    2009-09-02 13:23:04 +0200 fs  r275705 : should *not* have the dtor, copy ctor, and assignment operator compiler-generated, else we run into trouble as soon as the compiler creates different versions of our singleton member's static data in different libraries
    2009-09-02 12:32:45 +0200 fs  r275704 : AutoIncrementIsPrimaryKey is a driver setting, not a data source setting
    2009-09-02 11:42:49 +0200 fs  r275701 : URL meta data are meta data which are valid for all connections of this type, not per-data-source properties. Settings them as data source properties is a hack.
    2009-09-02 08:43:34 +0200 fs  r275696 : 3.x.x is not a valid 'since' tag
    2009-09-01 16:05:24 +0200 fs  r275665 : #i104686# don't treat controls bound to read-only columns as required
    2009-09-01 13:10:22 +0200 fs  r275657 : #i104574# use PageUp/Down to scroll through the complete page
    2009-09-01 07:04:48 +0200 oj  r275641 : #i104104# correct line ends
    2009-08-31 15:52:34 +0200 fs  r275612 : #i104410#
    2009-08-31 12:29:05 +0200 fs  r275596 : #i104364#
    2009-08-31 12:28:56 +0200 fs  r275595 : #i104364#
    2009-08-31 11:43:09 +0200 fs  r275593 : #i104649# JavaDriverClassPath is also a known JDBC-bridge setting
    2009-08-31 11:41:37 +0200 fs  r275592 : #i104649#
    2009-08-28 21:48:27 +0200 fs  r275552 : during #i96862#: renamed the configuration data which controls availability of certain DBA-related UI
    2009-08-28 21:48:17 +0200 fs  r275551 : #i96862# do not show the 'Create a new database' option when a) no embedded/dBase driver is installed or b) the configuration requests to hide the option
    2009-08-28 21:47:19 +0200 fs  r275550 : during #i96862#: renamed the configuration data which controls availability of certain DBA-related UI
    2009-08-28 21:46:41 +0200 fs  r275549 : #i96862# renamed and extended the configuration data which controls availability of certain DBA-related UI
    2009-08-28 15:10:19 +0200 fs  r275535 : #i96862# if no embedded driver is installed, use dBase for creating new DBs. If no dBase driver is installed, too, do not offer the 'Create new database' option
    2009-08-28 14:03:04 +0200 fs  r275532 : #i104454# allow multiple fields to display the same column
    2009-08-28 13:14:00 +0200 fs  r275528 : #i104584# driver meta data do not belong into a data source's settings
    2009-08-28 13:09:57 +0200 fs  r275527 : properly chech the MySQL type buttons (else next/back in the wizard leads to state with two buttons checked)
    2009-08-28 13:09:17 +0200 fs  r275526 : #i104584# driver meta data do not belong into a data source's settings
    2009-08-28 13:07:18 +0200 fs  r275525 : BooleanComparisonMode is a property, or a feature - but not a driver meta data
    2009-08-28 11:00:31 +0200 fs  r275521 : #i104580#
    2009-08-28 10:40:05 +0200 fs  r275519 : #i104577# correct assertion: If the template node type is ANY, then any value type is allowed
    2009-08-28 10:09:30 +0200 fs  r275518 : #i104575# implement Named Pipe UI
    2009-08-28 10:09:07 +0200 fs  r275517 : pass the trigger-event to IWindowOperator::operateOn / work with VclWindowEvents, not VclSimpleEvents
    2009-08-27 14:27:36 +0200 fs  r275484 : ImplPosTabPage: respect mbEmptyViewMargin for WINDOWALIGN_LEFT
    2009-08-27 13:43:56 +0200 fs  r275480 : merging latest changes from CWS dba32f herein
    2009-08-27 13:23:07 +0200 fs  r275475 : #i103882#
    2009-08-27 11:56:55 +0200 fs  r275466 : #i104544# SetState: Do not call Update at the window which we just set text for. It should (sic\!) not be needed, but causes trouble
    2009-08-27 11:55:34 +0200 fs  r275465 : #i104544#
    do not allow re-entrance for impl_ensureControl_nothrow
    Actually, this is part of the fix only. I also removed the code which triggered this re-entrance (from
    the grid control implementation), but to ensure it won't happen, again, I added some safety herein.
    2009-08-27 10:14:11 +0200 fs  r275459 : preparations for supporting a 'NamedPipe' parameter for the MySQL Connector/OOo
    2009-08-27 10:13:21 +0200 fs  r275458 : preparations for supporting a 'NamedPipe' setting for the MySQL Connector/OOo
    2009-08-27 10:11:14 +0200 fs  r275456 : outsourced the MySQLNative settings into a dedicated class, to not duplicate all the code in two tab page implementations
    2009-08-26 14:18:13 +0200 fs  r275422 : #i10000#
    2009-08-26 13:26:36 +0200 fs  r275419 : ignore output paths
    2009-08-26 13:23:38 +0200 fs  r275417 : support the LocalSocket property for the MySQL native driver
    2009-08-26 13:17:05 +0200 fs  r275416 : some re-factoring, to outsource the tab page for setting up the MySQLNative connection, into a dedicated class (needed later)
    2009-08-26 13:15:15 +0200 fs  r275415 : support a NoThousandSep property for NumericFormatters - I'm tired of correcting this at runtime, instead of controlling it in the resource
    2009-08-26 11:45:08 +0200 fs  r275410 : oops, 'flat' shouldn't have got lost
    2009-08-26 09:38:57 +0200 fs  r275398 : #i102631# when saving the document fails, ensure that the interaction handler really can handle/display the error
    2009-08-26 09:37:05 +0200 fs  r275397 : #i102631# don't let non-IO/RuntimeExceptions escape from DatabaseDocument::store*, wrap them into an IOException
    2009-08-26 09:35:39 +0200 fs  r275395 : let the default interaction handler implement XInteractionHandler2
    2009-08-25 13:51:34 +0200 fs  r275352 : #i102631# createTempFile: pass URL through FileHelper.getOOoCompatibleFileURL
    2009-08-25 13:49:23 +0200 fs  r275351 : #i102631# createTempFileURL: immediately delete the file implicitly created by createTempFile, we really only need the URL
    2009-08-24 14:49:07 +0200 fs  r275318 : #i10000#
    2009-08-24 14:36:03 +0200 fs  r275315 : properly terminate message with 0 character
    2009-08-24 14:35:45 +0200 fs  r275314 : trace method concepts in non-pro, if special flag is enabled
    2009-08-24 14:24:17 +0200 fs  r275312 : #i98973# filter some more events for grid control columns
    2009-08-24 14:15:23 +0200 fs  r275311 : #i98973# implement XComboBox for combo box cells
    2009-08-24 13:39:24 +0200 fs  r275308 : #i98973# do not display the 'actionPerformed' event for grid combo box columns
    2009-08-24 12:52:03 +0200 fs  r275303 : #i98973# implement XCheckBox and XButton for check box cells
    2009-08-24 11:56:05 +0200 oj  r275300 : #i104447# wrong default for orientation
    2009-08-24 10:51:21 +0200 fs  r275296 : in the script selector dialog, interpret a double click onto a function as OK
    2009-08-24 10:50:56 +0200 fs  r275295 : localize some to-be-displayed names, consolidate some code regarding form/control naming
    2009-08-21 14:28:05 +0200 fs  r275255 : #i98973# implement KeyListeners
    2009-08-21 14:27:20 +0200 fs  r275254 : #i98973# move the conversion VCL[Mouse|Key]Event->Awt[Mouse|Key]Event from vclxwindow.cxx to VCLUnoHelper
    2009-08-21 14:08:50 +0200 fs  r275248 : #i98973# implement Mouse- and MouseMotion-broadcasting
    2009-08-21 13:31:08 +0200 fs  r275244 : #i98973# implement text and change listeners at text cells
    2009-08-21 12:47:38 +0200 fs  r275234 : #i104399# some refactoring:
    If the MySQL Connector/OOo is installed, it registers for the sdbc:mysqlc: protocol (now known as DST_MYSQL_NATIVE_DIRECT).
    However, we do not want to display this in the UI, instead we display "MySQL" only, which collects DST_MYSQL_ODBC, DST_MYSQL_JDBC, and DST_MYSQL_NATIVE.
    2009-08-21 12:45:18 +0200 fs  r275232 : #i104399# also register for the sdbc:mysql:mysqlc protocol, decide at runtime (depending on the availability of sdbc:mysqlc:), whether it is really accepted. This prevents that the C/OOo extension needs to register *our* implementation name for the sdbc:mysql:mysqlc: protocol, which would be somewhat weird
    2009-08-20 16:18:48 +0200 fs  r275190 : merging the latest changes from CWS dba32f (which this CWS was created from)
    2009-08-19 20:19:59 +0200 fs  r275160 : add some spacing between the radios
    2009-08-19 14:50:15 +0200 fs  r275150 : #i98973# slightly refactoring the grid cell implementations, to prepare for proper events being fired. Implement focus events for the moment, more to come.
    2009-08-19 10:53:38 +0200 fs  r275142 : #i99936# initialize newly created models
    2009-08-18 23:03:48 +0200 fs  r275132 : merging latest changes from CWS dba32f
    2009-08-18 15:14:08 +0200 fs  r275110 : #i102819# SetColumnPos: SCROLL_CLIP is deadly here

diff --git a/configmgr/source/tree/localizedtreeactions.cxx b/configmgr/source/tree/localizedtreeactions.cxx
index 331cd5d..24c7fb8 100644
--- a/configmgr/source/tree/localizedtreeactions.cxx
+++ b/configmgr/source/tree/localizedtreeactions.cxx
@@ -178,8 +178,11 @@ namespace
 
     // -- -----------------------------
         OSL_ENSURE( aValueType != uno::Type(), "VOID result type found");
-        OSL_ENSURE( aValueType == parseTemplateName(_aSubtree.getElementTemplateName()),
+#if OSL_DEBUG_LEVEL > 0
+        uno::Type aTemplateType = parseTemplateName( _aSubtree.getElementTemplateName() );
+        OSL_ENSURE( ( aValueType == aTemplateType ) || ( aTemplateType.getTypeClass() == uno::TypeClass_ANY ),
                     "ERROR: Found Value Type doesn't match encoded value type in pseudo template name");
+#endif
         OSL_POSTCOND( static_cast<ValueNode&>(*pResult).getValueType() == aValueType,
                       "ERROR: Resulting Value Type doesn't match original value type" );
 
diff --git a/connectivity/inc/connectivity/DriversConfig.hxx b/connectivity/inc/connectivity/DriversConfig.hxx
index 8a33019..bd86e9c 100755
--- a/connectivity/inc/connectivity/DriversConfig.hxx
+++ b/connectivity/inc/connectivity/DriversConfig.hxx
@@ -73,6 +73,10 @@ namespace connectivity
         const ::comphelper::NamedValueCollection& impl_get(const ::rtl::OUString& _sURL,sal_Int32 _nProps) const;
     public:
         DriversConfig(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB);
+        ~DriversConfig();
+
+        DriversConfig( const DriversConfig& );
+        DriversConfig& operator=( const DriversConfig& );
 
         ::rtl::OUString getDriverFactoryName(const ::rtl::OUString& _sUrl) const;
         ::rtl::OUString getDriverTypeDisplayName(const ::rtl::OUString& _sUrl) const;
diff --git a/connectivity/source/commontools/DriversConfig.cxx b/connectivity/source/commontools/DriversConfig.cxx
index dae6b91..b9b771a 100755
--- a/connectivity/source/commontools/DriversConfig.cxx
+++ b/connectivity/source/commontools/DriversConfig.cxx
@@ -139,6 +139,29 @@ DriversConfig::DriversConfig(const uno::Reference< lang::XMultiServiceFactory >&
 {
     m_aNode->Load(_rxORB,m_aDrivers);
 }
+
+// -----------------------------------------------------------------------------
+DriversConfig::~DriversConfig()
+{
+}
+
+// -----------------------------------------------------------------------------
+DriversConfig::DriversConfig( const DriversConfig& _rhs )
+{
+    *this = _rhs;
+}
+
+// -----------------------------------------------------------------------------
+DriversConfig& DriversConfig::operator=( const DriversConfig& _rhs )
+{
+    if ( this != &_rhs )
+    {
+        m_aDrivers = _rhs.m_aDrivers;
+        m_aNode = _rhs.m_aNode;
+    }
+    return *this;
+}
+
 // -----------------------------------------------------------------------------
 ::rtl::OUString DriversConfig::getDriverFactoryName(const ::rtl::OUString& _sURL) const
 {
diff --git a/connectivity/source/commontools/dbmetadata.cxx b/connectivity/source/commontools/dbmetadata.cxx
index 2f9495e..0463b51 100644
--- a/connectivity/source/commontools/dbmetadata.cxx
+++ b/connectivity/source/commontools/dbmetadata.cxx
@@ -31,8 +31,9 @@
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_connectivity.hxx"
 
-#include <connectivity/dbmetadata.hxx>
-#include <connectivity/dbexception.hxx>
+#include "connectivity/dbmetadata.hxx"
+#include "connectivity/dbexception.hxx"
+#include "connectivity/DriversConfig.hxx"
 #include "resource/common_res.hrc"
 #include "resource/sharedresources.hxx"
 
@@ -52,6 +53,7 @@
 #include <tools/diagnose_ex.h>
 #include <comphelper/namedvaluecollection.hxx>
 #include <comphelper/componentcontext.hxx>
+#include <comphelper/processfactory.hxx>
 
 #include <boost/optional.hpp>
 
@@ -90,9 +92,19 @@ namespace dbtools
     {
         Reference< XConnection >        xConnection;
         Reference< XDatabaseMetaData >  xConnectionMetaData;
+        ::connectivity::DriversConfig   aDriverConfig;
 
         ::boost::optional< ::rtl::OUString >    sCachedIdentifierQuoteString;
         ::boost::optional< ::rtl::OUString >    sCachedCatalogSeparator;
+
+        DatabaseMetaData_Impl()
+            :xConnection()
+            ,xConnectionMetaData()
+            ,aDriverConfig( ::comphelper::getProcessServiceFactory() )
+            ,sCachedIdentifierQuoteString()
+            ,sCachedCatalogSeparator()
+        {
+        }
     };
 
     //--------------------------------------------------------------------
@@ -122,6 +134,17 @@ namespace dbtools
         }
 
         //................................................................
+        static bool lcl_getDriverSetting( const sal_Char* _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting )
+        {
+            lcl_checkConnected( _metaData );
+            const ::comphelper::NamedValueCollection& rDriverMetaData = _metaData.aDriverConfig.getMetaData( _metaData.xConnectionMetaData->getURL() );
+            if ( !rDriverMetaData.has( _asciiName ) )
+                return false;
+            _out_setting = rDriverMetaData.get( _asciiName );
+            return true;
+        }
+
+        //................................................................
         static bool lcl_getConnectionSetting( const sal_Char* _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting )
         {
             try
@@ -278,11 +301,11 @@ namespace dbtools
     //--------------------------------------------------------------------
     bool DatabaseMetaData::isAutoIncrementPrimaryKey() const
     {
-        bool doGenerate( true );
+        bool is( true );
         Any setting;
-        if ( lcl_getConnectionSetting( "AutoIncrementIsPrimaryKey", *m_pImpl, setting ) )
-            OSL_VERIFY( setting >>= doGenerate );
-        return doGenerate;
+        if ( lcl_getDriverSetting( "AutoIncrementIsPrimaryKey", *m_pImpl, setting ) )
+            OSL_VERIFY( setting >>= is );
+        return is;
     }
     //--------------------------------------------------------------------
     sal_Int32 DatabaseMetaData::getBooleanComparisonMode() const
diff --git a/connectivity/source/drivers/ado/ado.xcu b/connectivity/source/drivers/ado/ado.xcu
index a99b989..fe4596f 100755
--- a/connectivity/source/drivers/ado/ado.xcu
+++ b/connectivity/source/drivers/ado/ado.xcu
@@ -147,6 +147,11 @@
             <value></value>
           </prop>
         </node>
+        <node oor:name="BooleanComparisonMode" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:int">
+            <value>3</value>
+          </prop>
+        </node>
       </node>
       <node oor:name="Features">
         <node oor:name="UseSQL92NamingConstraints" oor:op="replace">
@@ -216,11 +221,6 @@
             <value>mdb</value>
           </prop>
         </node>
-        <node oor:name="BooleanComparisonMode" oor:op="replace">
-          <prop oor:name="Value" oor:type="xs:int">
-            <value>3</value>
-          </prop>
-        </node>
       </node>
     </node>
     <node oor:name="sdbc:ado:access:Provider=Microsoft.ACE.OLEDB.12.0;DATA SOURCE=*" oor:op="replace">
diff --git a/connectivity/source/drivers/mysql/mysql.xcu b/connectivity/source/drivers/mysql/mysql.xcu
index 27c84c9..7ea033d 100755
--- a/connectivity/source/drivers/mysql/mysql.xcu
+++ b/connectivity/source/drivers/mysql/mysql.xcu
@@ -80,11 +80,6 @@
             <value>true</value>
           </prop>
         </node>
-        <node oor:name="EscapeDateTime" 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">
@@ -149,19 +144,83 @@
             <value>true</value>
           </prop>
         </node>
-        <node oor:name="EscapeDateTime" oor:op="replace">
+      </node>
+      <node oor:name="MetaData">
+        <node oor:name="SupportsTableCreation" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+        <node oor:name="SupportsBrowsing" oor:op="replace">
           <prop oor:name="Value" oor:type="xs:boolean">
             <value>true</value>
           </prop>
         </node>
+        <node oor:name="Authentication" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:string">
+            <value>UserPassword</value>
+          </prop>
+        </node>
       </node>
-      <node oor:name="MetaData">
-        <node oor:name="SupportsTableCreation" oor:op="replace">
+    </node>
+    <node oor:name="sdbc:mysql:mysqlc:*" oor:op="replace">
+      <prop oor:name="Driver">
+        <value>org.openoffice.comp.drivers.MySQL.Driver</value>
+      </prop>
+      <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
+        <value xml:lang="en-US">MySQL (Native)</value>
+      </prop>
+      <node oor:name="Properties">
+        <node oor:name="CharSet" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:string">
+            <value></value>
+          </prop>
+        </node>
+        <node oor:name="LocalSocket" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:string">
+            <value></value>
+          </prop>
+        </node>
+        <node oor:name="NamedPipe" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:string">
+            <value></value>
+          </prop>
+        </node>
+      </node>
+      <node oor:name="Features">
+        <node oor:name="UseKeywordAsBeforeAlias" oor:op="replace">
           <prop oor:name="Value" oor:type="xs:boolean">
             <value>true</value>
           </prop>
         </node>
-        <node oor:name="SupportsBrowsing" oor:op="replace">
+        <node oor:name="IgnoreDriverPrivileges" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+        <node oor:name="DisplayVersionColumns" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+        <node oor:name="UseDOSLineEnds" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+        <node oor:name="BooleanComparisonMode" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+        <node oor:name="FormsCheckRequiredFields" 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">
           <prop oor:name="Value" oor:type="xs:boolean">
             <value>true</value>
           </prop>
diff --git a/officecfg/registry/schema/org/openoffice/Office/DataAccess.xcs b/officecfg/registry/schema/org/openoffice/Office/DataAccess.xcs
index c6eec88..cb68401 100644
--- a/officecfg/registry/schema/org/openoffice/Office/DataAccess.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/DataAccess.xcs
@@ -197,14 +197,25 @@
 		<info>
 			<author>OJ</author>
 		</info>
-        <group oor:name="ApplicationIntegration">
+        <group oor:name="Policies">
             <info>
-                <desc>Specifies sevaral settings related to integrating data access functionality into the main applications.</desc>
+                <desc>Defines different policies for working with OpenOffice.org Base.</desc>
             </info>
-            <group oor:name="InstalledFeatures">
+            <group oor:name="Features">
                 <info>
-                    <desc>Specifies which data-access related features are available in non-Base applications.</desc>
+                    <desc>controls availability of certain database access related features in the OpenOffice.org applications.</desc>
                 </info>
+                <group oor:name="Base">
+                    <info>
+                        <desc>controls availability of features within OpenOffice.org Base.</desc>
+                    </info>
+                    <prop oor:name="CreateLocalDatabase" oor:type="xs:boolean">
+                        <info>
+                            <desc>Specifies that the user is able to creatte new local database documents in the "Create Database" wizard.</desc>
+                        </info>
+                        <value>true</value>
+                    </prop>
+                </group>
                 <group oor:name="Writer">
                     <info>
                         <desc>Specifies which data-access related features are available in OpenOffice.org Writer.</desc>
diff --git a/sfx2/source/appl/app.src b/sfx2/source/appl/app.src
index a340ed8..9b7ea4e 100644
--- a/sfx2/source/appl/app.src
+++ b/sfx2/source/appl/app.src
@@ -519,12 +519,12 @@ String STR_EVENT_CREATEDOC
 
 String STR_EVENT_CLOSEDOC
 {
-    Text [ en-US ] = "Document is closing" ;
+    Text [ en-US ] = "Document closed" ;
 };
 
 String STR_EVENT_PREPARECLOSEDOC
 {
-    Text [ en-US ] = "Close Document" ;
+    Text [ en-US ] = "Document is closing" ;
 };
 
 String STR_EVENT_OPENDOC
diff --git a/svx/source/cui/macropg.src b/svx/source/cui/macropg.src
index 7361c5c..63de9ec 100644
--- a/svx/source/cui/macropg.src
+++ b/svx/source/cui/macropg.src
@@ -172,12 +172,12 @@ String RID_SVXSTR_EVENT_CREATEDOC
 
 String RID_SVXSTR_EVENT_CLOSEDOC
 {
-    Text [ en-US ] = "Document is closing" ;
+    Text [ en-US ] = "Document closed" ;
 };
 
 String RID_SVXSTR_EVENT_PREPARECLOSEDOC
 {
-    Text [ en-US ] = "Close Document" ;
+    Text [ en-US ] = "Document is closing" ;
 };
 
 String RID_SVXSTR_EVENT_OPENDOC
diff --git a/svx/source/cui/selector.cxx b/svx/source/cui/selector.cxx
index bf67cd2..83e0e33 100644
--- a/svx/source/cui/selector.cxx
+++ b/svx/source/cui/selector.cxx
@@ -1053,6 +1053,7 @@ SvxScriptSelectorDialog::SvxScriptSelectorDialog(
     aCategories.SetSelectHdl(
             LINK( this, SvxScriptSelectorDialog, SelectHdl ) );
     aCommands.SetSelectHdl( LINK( this, SvxScriptSelectorDialog, SelectHdl ) );
+    aCommands.SetDoubleClickHdl( LINK( this, SvxScriptSelectorDialog, FunctionDoubleClickHdl ) );
 
     aOKButton.SetClickHdl( LINK( this, SvxScriptSelectorDialog, ClickHdl ) );
     aCancelButton.SetClickHdl( LINK( this, SvxScriptSelectorDialog, ClickHdl ) );
@@ -1140,6 +1141,14 @@ IMPL_LINK( SvxScriptSelectorDialog, SelectHdl, Control*, pCtrl )
     return 0;
 }
 
+IMPL_LINK( SvxScriptSelectorDialog, FunctionDoubleClickHdl, Control*, pCtrl )
+{
+    (void)pCtrl;
+    if ( aOKButton.IsEnabled() )
+        return ClickHdl( &aOKButton );
+    return 0;
+}
+
 // Check if command is selected and enable the OK button accordingly
 // Grab the help text for this id if available and update the description field
 void
diff --git a/svx/source/cui/selector.hxx b/svx/source/cui/selector.hxx
index f06c26e..b649a8e 100644
--- a/svx/source/cui/selector.hxx
+++ b/svx/source/cui/selector.hxx
@@ -216,6 +216,7 @@ class SvxScriptSelectorDialog : public ModelessDialog
 
     DECL_LINK( ClickHdl, Button * );
     DECL_LINK( SelectHdl, Control* );
+    DECL_LINK( FunctionDoubleClickHdl, Control* );
 
     void								UpdateUI();
     void								ResizeControls();
diff --git a/svx/source/fmcomp/fmgridcl.cxx b/svx/source/fmcomp/fmgridcl.cxx
index b681ddc..aee39a7 100644
--- a/svx/source/fmcomp/fmgridcl.cxx
+++ b/svx/source/fmcomp/fmgridcl.cxx
@@ -889,9 +889,6 @@ void FmGridHeader::PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMe
         break;
         case SID_FM_SHOWCOLS_MORE:
         {
-            //CHINA001 FmShowColsDialog dlg(NULL);
-            //CHINA001 dlg.SetColumns(xCols);
-            //CHINA001 dlg.Execute();
             SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
             if(pFact)
             {
@@ -960,24 +957,14 @@ void FmGridHeader::PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMe
             }
             else
             {
-                // Standardlabel setzen
-                ::rtl::OUString sLabelBase = String( SVX_RES( RID_STR_COLUMN ) );
-                // disambiguate the name
-                Reference< XNameAccess > xColNames( xCols, UNO_QUERY );
-                ::rtl::OUString sLabel;
-                for ( sal_Int32 i=1; i<65535; ++i )
-                {
-                    sLabel = sLabelBase;
-                    sLabel += ::rtl::OUString::valueOf( (sal_Int32)i );
-                    if ( !xColNames->hasByName( sLabel ) )
-                        break;
-                }
-                // no fallback in case the name is not unique (which is rather improbable) ....
+                FormControlFactory factory( ::comphelper::getProcessServiceFactory() );
+
+                ::rtl::OUString sLabel = factory.getDefaultUniqueName_ByComponentType(
+                    Reference< XNameAccess >( xCols, UNO_QUERY_THROW ), xNewCol );
                 xNewCol->setPropertyValue( FM_PROP_LABEL, makeAny( sLabel ) );
                 xNewCol->setPropertyValue( FM_PROP_NAME, makeAny( sLabel ) );
 
-                FormControlFactory determine( ::comphelper::getProcessServiceFactory() );
-                determine.initializeControlModel( DocumentClassification::classifyHostDocument( xCols ), xNewCol );
+                factory.initializeControlModel( DocumentClassification::classifyHostDocument( xCols ), xNewCol );
 
                 xCols->insertByIndex( nPos, makeAny( xNewCol ) );
             }
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx
index 0442a5e..9b46ec6 100644
--- a/svx/source/fmcomp/gridcell.cxx
+++ b/svx/source/fmcomp/gridcell.cxx
@@ -30,55 +30,52 @@
 
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_svx.hxx"
-#include "gridcell.hxx"
-#include "fmtools.hxx"
-#include <stdio.h>
-#ifndef _SVX_FMPROP_HRC
+
+
 #include "fmprop.hrc"
-#endif
+#include "fmresids.hrc"
+#include "fmtools.hxx"
+#include "gridcell.hxx"
 #include "gridcols.hxx"
 #include "sdbdatacolumn.hxx"
+
+#include <com/sun/star/awt/LineEndFormat.hpp>
+#include <com/sun/star/awt/MouseWheelBehavior.hpp>
 #include <com/sun/star/awt/VisualEffect.hpp>
-#include <com/sun/star/sdbc/XStatement.hpp>
+#include <com/sun/star/container/XChild.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+#include <com/sun/star/form/FormComponentType.hpp>
+#include <com/sun/star/form/XBoundComponent.hpp>
 #include <com/sun/star/script/XEventAttacherManager.hpp>
-#ifndef _COM_SUN_STAR_SDDB_XCOLUMNSSUPPLIER_HPP_
-#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
-#endif
 #include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp>
-#include <com/sun/star/sdbc/DataType.hpp>
 #include <com/sun/star/sdbc/ColumnValue.hpp>
-#include <com/sun/star/form/XBoundComponent.hpp>
-#include <com/sun/star/container/XChild.hpp>
-#include <com/sun/star/form/FormComponentType.hpp>
-#include <com/sun/star/util/XNumberFormatter.hpp>
+#include <com/sun/star/sdbc/DataType.hpp>
+#include <com/sun/star/sdbc/XStatement.hpp>
+#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
 #include <com/sun/star/util/NumberFormat.hpp>
 #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
-#include <com/sun/star/container/XNamed.hpp>
-#include <com/sun/star/awt/LineEndFormat.hpp>
-#include <com/sun/star/awt/MouseWheelBehavior.hpp>
-#ifndef _COM_SUN_STAR_SCRTIP_XEVENTATTACHERMANAGER_HPP_
-#include <com/sun/star/script/XEventAttacherManager.hpp>
-#endif
-#include <svtools/fmtfield.hxx>
-#include <svtools/numuno.hxx>
-#include <svtools/calendar.hxx>
-#include <vcl/longcurr.hxx>
-#include <svx/dialmgr.hxx>
-#ifndef _SVX_FMRESIDS_HRC
-#include "fmresids.hrc"
-#endif
-#include <tools/shl.hxx>
-#include <tools/diagnose_ex.h>
+#include <com/sun/star/util/XNumberFormatter.hpp>
+
+#include <comphelper/extract.hxx>
 #include <comphelper/numbers.hxx>
 #include <comphelper/property.hxx>
-#include <comphelper/extract.hxx>
+#include <connectivity/formattedcolumnvalue.hxx>
 #include <cppuhelper/typeprovider.hxx>
 #include <i18npool/lang.h>
-#include <connectivity/formattedcolumnvalue.hxx>
 
-#include <math.h>
 #include <rtl/math.hxx>
+#include <svtools/calendar.hxx>
+#include <svtools/fmtfield.hxx>
+#include <svtools/numuno.hxx>
 #include <svtools/svmedit.hxx>
+#include <svx/dialmgr.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/shl.hxx>
+#include <vcl/longcurr.hxx>
+
+#include <math.h>
+#include <stdio.h>
 
 using namespace ::connectivity;
 using namespace ::connectivity::simple;
@@ -228,13 +225,15 @@ void DbGridColumn::CreateControl(sal_Int32 _nFieldPos, const Reference< ::com::s
     {
         switch (nTypeId)
         {
-            case TYPE_CHECKBOX: m_pCell = new FmXCheckBoxCell(this, pCellControl);  break;
-            case TYPE_LISTBOX: m_pCell = new FmXListBoxCell(this, pCellControl);    break;
+            case TYPE_CHECKBOX: m_pCell = new FmXCheckBoxCell( this, *pCellControl );  break;
+            case TYPE_LISTBOX: m_pCell = new FmXListBoxCell( this, *pCellControl );    break;
+            case TYPE_COMBOBOX: m_pCell = new FmXComboBoxCell( this, *pCellControl );    break;
             default:
-                m_pCell = new FmXEditCell(this, pCellControl);
+                m_pCell = new FmXEditCell( this, *pCellControl );
         }
     }
     m_pCell->acquire();
+    m_pCell->init();
 
     impl_toggleScriptManager_nothrow( true );
 
@@ -3199,13 +3198,33 @@ TYPEINIT0(FmXGridCell);
 
 DBG_NAME(FmXGridCell);
 //-----------------------------------------------------------------------------
-FmXGridCell::FmXGridCell(DbGridColumn* pColumn, DbCellControl* pControl)
+FmXGridCell::FmXGridCell( DbGridColumn* pColumn, DbCellControl* _pControl )
             :OComponentHelper(m_aMutex)
             ,m_pColumn(pColumn)
-            ,m_pCellControl(pControl)
+            ,m_pCellControl( _pControl )
+            ,m_aWindowListeners( m_aMutex )
+            ,m_aFocusListeners( m_aMutex )
+            ,m_aKeyListeners( m_aMutex )
+            ,m_aMouseListeners( m_aMutex )
+            ,m_aMouseMotionListeners( m_aMutex )
 {
     DBG_CTOR(FmXGridCell,NULL);
+}
+
+//-----------------------------------------------------------------------------
+void FmXGridCell::init()
+{
+    Window* pEventWindow( getEventWindow() );
+    if ( pEventWindow )
+        pEventWindow->AddEventListener( LINK( this, FmXGridCell, OnWindowEvent ) );
+}
 
+//-----------------------------------------------------------------------------
+Window* FmXGridCell::getEventWindow() const
+{
+    if ( m_pCellControl )
+        return &m_pCellControl->GetWindow();
+    return NULL;
 }
 
 //-----------------------------------------------------------------------------
@@ -3236,25 +3255,34 @@ void FmXGridCell::SetTextLineColor(const Color& _rColor)
 
 // XTypeProvider
 //------------------------------------------------------------------
-Sequence< sal_Int8 > SAL_CALL FmXGridCell::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();
+Sequence< Type > SAL_CALL FmXGridCell::getTypes( ) throw (RuntimeException)
+{
+    Sequence< uno::Type > aTypes = ::comphelper::concatSequences(
+        ::cppu::OComponentHelper::getTypes(),
+        FmXGridCell_Base::getTypes()
+    );
+    if ( m_pCellControl )
+        aTypes = ::comphelper::concatSequences(
+            aTypes,
+            FmXGridCell_WindowBase::getTypes()
+        );
+    return aTypes;
 }
 
+//------------------------------------------------------------------
+IMPLEMENT_GET_IMPLEMENTATION_ID( FmXGridCell )
+
 // OComponentHelper
 //-----------------------------------------------------------------------------
 void FmXGridCell::disposing()
 {
+    lang::EventObject aEvent( *this );
+    m_aWindowListeners.disposeAndClear( aEvent );
+    m_aFocusListeners.disposeAndClear( aEvent );
+    m_aKeyListeners.disposeAndClear( aEvent );
+    m_aMouseListeners.disposeAndClear( aEvent );
+    m_aMouseMotionListeners.disposeAndClear( aEvent );
+
     OComponentHelper::disposing();
     m_pColumn = NULL;
     DELETEZ(m_pCellControl);
@@ -3263,12 +3291,13 @@ void FmXGridCell::disposing()
 //------------------------------------------------------------------
 Any SAL_CALL FmXGridCell::queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(RuntimeException)
 {
-    Any aReturn = OComponentHelper::queryAggregation(_rType);
-    if (!aReturn.hasValue())
-        aReturn = ::cppu::queryInterface(_rType,
-            static_cast< ::com::sun::star::awt::XControl* >(this),
-            static_cast< ::com::sun::star::form::XBoundControl* >(this)
-        );
+    Any aReturn = OComponentHelper::queryAggregation( _rType );
+
+    if ( !aReturn.hasValue() )
+        aReturn = FmXGridCell_Base::queryInterface( _rType );
+
+    if ( !aReturn.hasValue() && ( m_pCellControl != NULL ) )
+        aReturn = FmXGridCell_WindowBase::queryInterface( _rType );
 
     return aReturn;
 }
@@ -3305,6 +3334,231 @@ void FmXGridCell::setLock(sal_Bool _bLock) throw( RuntimeException )
     }
 }
 
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::setPosSize( ::sal_Int32 _X, ::sal_Int32 _Y, ::sal_Int32 _Width, ::sal_Int32 _Height, ::sal_Int16 _Flags ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::setPosSize: not implemented" );
+    (void)_X;
+    (void)_Y;
+    (void)_Width;
+    (void)_Height;
+    (void)_Flags;
+    // not allowed to tamper with this for a grid cell
+}
+
+//------------------------------------------------------------------
+awt::Rectangle SAL_CALL FmXGridCell::getPosSize(  ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::getPosSize: not implemented" );
+    return awt::Rectangle();
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::setVisible( ::sal_Bool _Visible ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::setVisible: not implemented" );
+    (void)_Visible;
+    // not allowed to tamper with this for a grid cell
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::setEnable( ::sal_Bool _Enable ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::setEnable: not implemented" );
+    (void)_Enable;
+    // not allowed to tamper with this for a grid cell
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::setFocus(  ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::setFocus: not implemented" );
+    // not allowed to tamper with this for a grid cell
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::addWindowListener( const Reference< awt::XWindowListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aWindowListeners.addInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::removeWindowListener( const Reference< awt::XWindowListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aWindowListeners.removeInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::addFocusListener( const Reference< awt::XFocusListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aFocusListeners.addInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::removeFocusListener( const Reference< awt::XFocusListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aFocusListeners.removeInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::addKeyListener( const Reference< awt::XKeyListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aKeyListeners.addInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::removeKeyListener( const Reference< awt::XKeyListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aKeyListeners.removeInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::addMouseListener( const Reference< awt::XMouseListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aMouseListeners.addInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::removeMouseListener( const Reference< awt::XMouseListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aMouseListeners.removeInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::addMouseMotionListener( const Reference< awt::XMouseMotionListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aMouseMotionListeners.addInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::removeMouseMotionListener( const Reference< awt::XMouseMotionListener >& _rxListener ) throw (RuntimeException)
+{
+    m_aMouseMotionListeners.removeInterface( _rxListener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::addPaintListener( const Reference< awt::XPaintListener >& _rxListener ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::addPaintListener: not implemented" );
+    (void)_rxListener;
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXGridCell::removePaintListener( const Reference< awt::XPaintListener >& _rxListener ) throw (RuntimeException)
+{
+    OSL_ENSURE( false, "FmXGridCell::removePaintListener: not implemented" );
+    (void)_rxListener;
+}
+
+//------------------------------------------------------------------
+IMPL_LINK( FmXGridCell, OnWindowEvent, VclWindowEvent*, _pEvent )
+{
+    ENSURE_OR_THROW( _pEvent, "illegal event pointer" );
+    ENSURE_OR_THROW( _pEvent->GetWindow(), "illegal window" );
+    onWindowEvent( _pEvent->GetId(), *_pEvent->GetWindow(), _pEvent->GetData() );
+    return 1L;
+}
+
+//------------------------------------------------------------------------------
+void FmXGridCell::onFocusGained( const awt::FocusEvent& _rEvent )
+{
+    m_aFocusListeners.notifyEach( &awt::XFocusListener::focusGained, _rEvent );
+}
+
+//------------------------------------------------------------------------------
+void FmXGridCell::onFocusLost( const awt::FocusEvent& _rEvent )
+{
+    m_aFocusListeners.notifyEach( &awt::XFocusListener::focusLost, _rEvent );
+}
+
+//------------------------------------------------------------------------------
+void FmXGridCell::onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData )
+{
+    switch ( _nEventId )
+    {
+    case VCLEVENT_CONTROL_GETFOCUS:
+    case VCLEVENT_WINDOW_GETFOCUS:
+    case VCLEVENT_CONTROL_LOSEFOCUS:
+    case VCLEVENT_WINDOW_LOSEFOCUS:
+    {
+        if	(	(	_rWindow.IsCompoundControl()
+                &&	(   _nEventId == VCLEVENT_CONTROL_GETFOCUS
+                    ||  _nEventId == VCLEVENT_CONTROL_LOSEFOCUS
+                    )
+                )
+            ||	(	!_rWindow.IsCompoundControl()
+                &&	(   _nEventId == VCLEVENT_WINDOW_GETFOCUS
+                    ||  _nEventId == VCLEVENT_WINDOW_LOSEFOCUS
+                    )
+                )
+            )
+        {
+            if ( !m_aFocusListeners.getLength() )
+                break;
+
+            bool bFocusGained = ( _nEventId == VCLEVENT_CONTROL_GETFOCUS ) || ( _nEventId == VCLEVENT_WINDOW_GETFOCUS );
+
+            awt::FocusEvent aEvent;
+            aEvent.Source = *this;
+            aEvent.FocusFlags = _rWindow.GetGetFocusFlags();
+            aEvent.Temporary = sal_False;
+
+            if ( bFocusGained )
+                onFocusGained( aEvent );
+            else
+                onFocusLost( aEvent );
+        }
+    }
+    break;
+    case VCLEVENT_WINDOW_MOUSEBUTTONDOWN:
+    case VCLEVENT_WINDOW_MOUSEBUTTONUP:
+    {
+        if ( !m_aMouseListeners.getLength() )
+            break;
+
+        const bool bButtonDown = ( _nEventId == VCLEVENT_WINDOW_MOUSEBUTTONDOWN );
+
+        awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *static_cast< const ::MouseEvent* >( _pEventData ), *this ) );
+        m_aMouseListeners.notifyEach( bButtonDown ? &awt::XMouseListener::mousePressed : &awt::XMouseListener::mouseReleased, aEvent );
+    }
+    break;
+    case VCLEVENT_WINDOW_MOUSEMOVE:
+    {
+        const MouseEvent& rMouseEvent = *static_cast< const ::MouseEvent* >( _pEventData );
+        if ( rMouseEvent.IsEnterWindow() || rMouseEvent.IsLeaveWindow() )
+        {
+            if ( m_aMouseListeners.getLength() != 0 )
+            {
+                awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( rMouseEvent, *this ) );
+                m_aMouseListeners.notifyEach( rMouseEvent.IsEnterWindow() ? &awt::XMouseListener::mouseEntered: &awt::XMouseListener::mouseExited, aEvent );
+            }
+        }
+        else if ( !rMouseEvent.IsEnterWindow() && !rMouseEvent.IsLeaveWindow() )
+        {
+            if ( m_aMouseMotionListeners.getLength() != 0 )
+            {
+                awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( rMouseEvent, *this ) );
+                aEvent.ClickCount = 0;
+                const bool bSimpleMove = ( ( rMouseEvent.GetMode() & MOUSE_SIMPLEMOVE ) != 0 );
+                m_aMouseMotionListeners.notifyEach( bSimpleMove ? &awt::XMouseMotionListener::mouseMoved: &awt::XMouseMotionListener::mouseDragged, aEvent );
+            }
+        }
+    }
+    break;
+    case VCLEVENT_WINDOW_KEYINPUT:
+    case VCLEVENT_WINDOW_KEYUP:
+    {
+        if ( !m_aKeyListeners.getLength() )
+            break;
+
+        const bool bKeyPressed = ( _nEventId == VCLEVENT_WINDOW_KEYINPUT );
+        awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent( *static_cast< const ::KeyEvent* >( _pEventData ), *this ) );
+        m_aKeyListeners.notifyEach( bKeyPressed ? &awt::XKeyListener::keyPressed: &awt::XKeyListener::keyReleased, aEvent );
+    }
+    break;
+    }
+}
+
 /*************************************************************************/
 TYPEINIT1(FmXDataCell, FmXGridCell);
 //------------------------------------------------------------------------------
@@ -3326,6 +3580,12 @@ void FmXDataCell::UpdateFromColumn()
 /*************************************************************************/
 TYPEINIT1(FmXTextCell, FmXDataCell);
 
+FmXTextCell::FmXTextCell( DbGridColumn* pColumn, DbCellControl& _rControl )
+    :FmXDataCell( pColumn, _rControl )
+    ,m_bFastPaint( sal_True )
+{
+}
+
 //------------------------------------------------------------------------------
 void FmXTextCell::PaintFieldToCell(OutputDevice& rDev,
                         const Rectangle& rRect,
@@ -3372,15 +3632,16 @@ void FmXTextCell::PaintFieldToCell(OutputDevice& rDev,
 
 DBG_NAME(FmXEditCell);
 //------------------------------------------------------------------------------
-FmXEditCell::FmXEditCell(DbGridColumn* pColumn, DbCellControl* pControl)
-            :FmXTextCell(pColumn, pControl)
+FmXEditCell::FmXEditCell( DbGridColumn* pColumn, DbCellControl& _rControl )
+            :FmXTextCell( pColumn, _rControl )
             ,m_aTextListeners(m_aMutex)
+            ,m_aChangeListeners( m_aMutex )
             ,m_pEditImplementation( NULL )
             ,m_bOwnEditImplementation( false )
 {
     DBG_CTOR(FmXEditCell,NULL);
 
-    DbTextField* pTextField = PTR_CAST( DbTextField, pControl );
+    DbTextField* pTextField = PTR_CAST( DbTextField, &_rControl );
     if ( pTextField )
     {
 
@@ -3390,11 +3651,9 @@ FmXEditCell::FmXEditCell(DbGridColumn* pColumn, DbCellControl* pControl)
     }
     else
     {
-        m_pEditImplementation = new EditImplementation( *static_cast< Edit* >( pControl->GetControl() ) );
+        m_pEditImplementation = new EditImplementation( static_cast< Edit& >( _rControl.GetWindow() ) );
         m_bOwnEditImplementation = true;
     }
-
-    m_pEditImplementation->SetModifyHdl( LINK( this, FmXEditCell, OnTextChanged ) );
 }
 
 //------------------------------------------------------------------
@@ -3416,6 +3675,7 @@ void FmXEditCell::disposing()
 {
     ::com::sun::star::lang::EventObject aEvt(*this);
     m_aTextListeners.disposeAndClear(aEvt);
+    m_aChangeListeners.disposeAndClear(aEvt);
 
     m_pEditImplementation->SetModifyHdl( Link() );
     if ( m_bOwnEditImplementation )
@@ -3428,27 +3688,26 @@ void FmXEditCell::disposing()
 //------------------------------------------------------------------
 Any SAL_CALL FmXEditCell::queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(RuntimeException)
 {
-    Any aReturn = FmXDataCell::queryAggregation(_rType);
-    if (!aReturn.hasValue())
-        aReturn = ::cppu::queryInterface(_rType,
-            static_cast< ::com::sun::star::awt::XTextComponent* >(this)
-        );
+    Any aReturn = FmXTextCell::queryAggregation( _rType );
+
+    if ( !aReturn.hasValue() )
+        aReturn = FmXEditCell_Base::queryInterface( _rType );
+
     return aReturn;
 }
 
 //-------------------------------------------------------------------------
 Sequence< ::com::sun::star::uno::Type > SAL_CALL FmXEditCell::getTypes(  ) throw(RuntimeException)
 {
-    Sequence< ::com::sun::star::uno::Type > aTypes = OComponentHelper::getTypes();
-
-    sal_Int32 nLen = aTypes.getLength();
-    aTypes.realloc(nLen + 2);
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XControl >* >(NULL));
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XTextComponent >* >(NULL));
-
-    return aTypes;
+    return ::comphelper::concatSequences(
+        FmXTextCell::getTypes(),
+        FmXEditCell_Base::getTypes()
+    );
 }
 
+//------------------------------------------------------------------------------
+IMPLEMENT_GET_IMPLEMENTATION_ID( FmXEditCell )
+
 // ::com::sun::star::awt::XTextComponent
 //------------------------------------------------------------------------------
 void SAL_CALL FmXEditCell::addTextListener(const Reference< ::com::sun::star::awt::XTextListener >& l) throw( RuntimeException )
@@ -3473,7 +3732,7 @@ void SAL_CALL FmXEditCell::setText( const ::rtl::OUString& aText ) throw( Runtim
 
         // In JAVA wird auch ein textChanged ausgeloest, in VCL nicht.
         // ::com::sun::star::awt::Toolkit soll JAVA-komform sein...
-        OnTextChanged( NULL );
+        onTextChanged();
     }
 }
 
@@ -3583,30 +3842,71 @@ void SAL_CALL FmXEditCell::setMaxTextLen( sal_Int16 nLen ) throw( RuntimeExcepti
 }
 
 //------------------------------------------------------------------------------
-IMPL_LINK( FmXEditCell, OnTextChanged, void*, EMPTYARG )
+void SAL_CALL FmXEditCell::addChangeListener( const Reference< form::XChangeListener >& _Listener ) throw (RuntimeException)
 {
-    if ( m_pEditImplementation )
+    m_aChangeListeners.addInterface( _Listener );
+}
+
+//------------------------------------------------------------------------------
+void SAL_CALL FmXEditCell::removeChangeListener( const Reference< form::XChangeListener >& _Listener ) throw (RuntimeException)
+{
+    m_aChangeListeners.removeInterface( _Listener );
+}
+
+//------------------------------------------------------------------------------
+void FmXEditCell::onTextChanged()
+{
+    ::com::sun::star::awt::TextEvent aEvent;
+    aEvent.Source = *this;
+    m_aTextListeners.notifyEach( &awt::XTextListener::textChanged, aEvent );
+}
+
+//------------------------------------------------------------------------------
+void FmXEditCell::onFocusGained( const awt::FocusEvent& _rEvent )
+{
+    FmXTextCell::onFocusGained( _rEvent );
+    m_sValueOnEnter = getText();
+}
+
+//------------------------------------------------------------------------------
+void FmXEditCell::onFocusLost( const awt::FocusEvent& _rEvent )
+{
+    FmXTextCell::onFocusLost( _rEvent );
+
+    if ( getText() != m_sValueOnEnter )
     {
-        ::cppu::OInterfaceIteratorHelper aIt( m_aTextListeners );
-        ::com::sun::star::awt::TextEvent aEvt;
-        aEvt.Source = *this;
-        while( aIt.hasMoreElements() )
-            ((::com::sun::star::awt::XTextListener *)aIt.next())->textChanged( aEvt );
+        lang::EventObject aEvent( *this );
+        m_aChangeListeners.notifyEach( &XChangeListener::changed, aEvent );
     }
-    return 1;
+}
+
+//------------------------------------------------------------------------------
+void FmXEditCell::onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData )
+{
+    switch ( _nEventId )
+    {
+    case VCLEVENT_EDIT_MODIFY:
+    {
+        if ( m_pEditImplementation && m_aTextListeners.getLength() )
+            onTextChanged();
+        return;
+    }
+    break;
+    }
+
+    FmXTextCell::onWindowEvent( _nEventId, _rWindow, _pEventData );
 }
 
 /*************************************************************************/
 DBG_NAME(FmXCheckBoxCell);
 //------------------------------------------------------------------------------
-FmXCheckBoxCell::FmXCheckBoxCell(DbGridColumn* pColumn, DbCellControl* pControl)
-                :FmXDataCell(pColumn, pControl)
+FmXCheckBoxCell::FmXCheckBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl )
+                :FmXDataCell( pColumn, _rControl )
                 ,m_aItemListeners(m_aMutex)
-                ,m_pBox(&((CheckBoxControl*)pControl->GetControl())->GetBox())
+                ,m_aActionListeners( m_aMutex )
+                ,m_pBox( & static_cast< CheckBoxControl& >( _rControl.GetWindow() ).GetBox() )
 {
     DBG_CTOR(FmXCheckBoxCell,NULL);
-
-    ((CheckBoxControl*)pControl->GetControl())->SetClickHdl( LINK( this, FmXCheckBoxCell, OnClick ) );
 }
 
 //------------------------------------------------------------------
@@ -3627,8 +3927,9 @@ void FmXCheckBoxCell::disposing()
 {
     ::com::sun::star::lang::EventObject aEvt(*this);
     m_aItemListeners.disposeAndClear(aEvt);
+    m_aActionListeners.disposeAndClear(aEvt);
 
-    ((CheckBoxControl*)m_pCellControl->GetControl())->SetClickHdl(Link());
+    static_cast< CheckBoxControl& >( m_pCellControl->GetWindow() ).SetClickHdl(Link());
     m_pBox = NULL;
 
     FmXDataCell::disposing();
@@ -3637,27 +3938,26 @@ void FmXCheckBoxCell::disposing()
 //------------------------------------------------------------------
 Any SAL_CALL FmXCheckBoxCell::queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(RuntimeException)
 {
-    Any aReturn = FmXDataCell::queryAggregation(_rType);
-    if (!aReturn.hasValue())
-        aReturn = ::cppu::queryInterface(_rType,
-            static_cast< ::com::sun::star::awt::XCheckBox* >(this)
-        );
+    Any aReturn = FmXDataCell::queryAggregation( _rType );
+
+    if ( !aReturn.hasValue() )
+        aReturn = FmXCheckBoxCell_Base::queryInterface( _rType );
+
     return aReturn;
 }
 
 //-------------------------------------------------------------------------
 Sequence< ::com::sun::star::uno::Type > SAL_CALL FmXCheckBoxCell::getTypes(  ) throw(RuntimeException)
 {
-    Sequence< ::com::sun::star::uno::Type > aTypes = OComponentHelper::getTypes();
-
-    sal_Int32 nLen = aTypes.getLength();
-    aTypes.realloc(nLen + 2);
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XControl >* >(NULL));
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XCheckBox >* >(NULL));
-
-    return aTypes;
+    return ::comphelper::concatSequences(
+        FmXDataCell::getTypes(),
+        FmXCheckBoxCell_Base::getTypes()
+    );
 }
 
+//------------------------------------------------------------------------------
+IMPLEMENT_GET_IMPLEMENTATION_ID( FmXCheckBoxCell )
+
 //------------------------------------------------------------------
 void SAL_CALL FmXCheckBoxCell::addItemListener( const Reference< ::com::sun::star::awt::XItemListener >& l ) throw( RuntimeException )
 {
@@ -3671,17 +3971,6 @@ void SAL_CALL FmXCheckBoxCell::removeItemListener( const Reference< ::com::sun::
 }
 
 //------------------------------------------------------------------
-void SAL_CALL FmXCheckBoxCell::setLabel( const ::rtl::OUString& rLabel ) throw( RuntimeException )
-{
-    ::osl::MutexGuard aGuard( m_aMutex );
-    if (m_pBox)
-    {
-        UpdateFromColumn();
-        m_pBox->SetText( rLabel );
-    }
-}
-
-//------------------------------------------------------------------
 void SAL_CALL FmXCheckBoxCell::setState( short n ) throw( RuntimeException )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
@@ -3716,42 +4005,89 @@ void SAL_CALL FmXCheckBoxCell::enableTriState( sal_Bool b ) throw( RuntimeExcept
 }
 
 //------------------------------------------------------------------
-IMPL_LINK( FmXCheckBoxCell, OnClick, void*, EMPTYARG )
+void SAL_CALL FmXCheckBoxCell::addActionListener( const Reference< awt::XActionListener >& _Listener ) throw (RuntimeException)
 {
-    if (m_pBox)
+    m_aActionListeners.addInterface( _Listener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXCheckBoxCell::removeActionListener( const Reference< awt::XActionListener >& _Listener ) throw (RuntimeException)
+{
+    m_aActionListeners.removeInterface( _Listener );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXCheckBoxCell::setLabel( const ::rtl::OUString& _Label ) throw (RuntimeException)
+{
+    ::vos::OGuard aGuard( Application::GetSolarMutex() );
+    if ( m_pColumn )
+    {
+        DbGridControl& rGrid( m_pColumn->GetParent() );
+        rGrid.SetColumnTitle( rGrid.GetColumnId( m_pColumn->GetFieldPos() ), _Label );
+    }
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXCheckBoxCell::setActionCommand( const ::rtl::OUString& _Command ) throw (RuntimeException)
+{
+    m_aActionCommand = _Command;
+}
+
+//------------------------------------------------------------------
+Window* FmXCheckBoxCell::getEventWindow() const
+{
+    return m_pBox;
+}
+
+//------------------------------------------------------------------
+void FmXCheckBoxCell::onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData )
+{
+    switch ( _nEventId )
+    {
+    case VCLEVENT_CHECKBOX_TOGGLE:
     {
         // check boxes are to be committed immediately (this holds for ordinary check box controls in
         // documents, and this must hold for check boxes in grid columns, too
         // 91210 - 22.08.2001 - frank.schoenheit at sun.com
         m_pCellControl->Commit();
 
-        // notify our listeners
-        ::cppu::OInterfaceIteratorHelper aIt( m_aItemListeners );
-
-        ::com::sun::star::awt::ItemEvent aEvent;
-        aEvent.Source = *this;
-        aEvent.Highlighted = sal_False;
-        aEvent.Selected = m_pBox->GetState();
+        Reference< XWindow > xKeepAlive( this );
+        if ( m_aItemListeners.getLength() && m_pBox )
+        {
+            awt::ItemEvent aEvent;
+            aEvent.Source = *this;
+            aEvent.Highlighted = sal_False;
+            aEvent.Selected = m_pBox->GetState();
+            m_aItemListeners.notifyEach( &awt::XItemListener::itemStateChanged, aEvent );
+        }
+        if ( m_aActionListeners.getLength() )
+        {
+            awt::ActionEvent aEvent;
+            aEvent.Source = *this;
+            aEvent.ActionCommand = m_aActionCommand;
+            m_aActionListeners.notifyEach( &awt::XActionListener::actionPerformed, aEvent );
+        }
+    }
+    break;
 
-        while ( aIt.hasMoreElements() )
-            static_cast< awt::XItemListener* >( aIt.next() )->itemStateChanged( aEvent );
+    default:
+        FmXDataCell::onWindowEvent( _nEventId, _rWindow, _pEventData );
+        break;
     }
-    return 1;
 }
 
 /*************************************************************************/
 
 DBG_NAME(FmXListBoxCell);
 //------------------------------------------------------------------------------
-FmXListBoxCell::FmXListBoxCell(DbGridColumn* pColumn, DbCellControl* pControl)
-               :FmXTextCell(pColumn, pControl)
+FmXListBoxCell::FmXListBoxCell(DbGridColumn* pColumn, DbCellControl& _rControl)
+               :FmXTextCell( pColumn, _rControl )
                ,m_aItemListeners(m_aMutex)
                ,m_aActionListeners(m_aMutex)
-               ,m_pBox((ListBox*)pControl->GetControl())
+               ,m_pBox( &static_cast< ListBox& >( _rControl.GetWindow() ) )
 {
     DBG_CTOR(FmXListBoxCell,NULL);
 
-    m_pBox->AddEventListener( LINK( this, FmXListBoxCell, OnSelect ) );
     m_pBox->SetDoubleClickHdl( LINK( this, FmXListBoxCell, OnDoubleClick ) );
 }
 
@@ -3786,26 +4122,25 @@ void FmXListBoxCell::disposing()
 Any SAL_CALL FmXListBoxCell::queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(RuntimeException)
 {
     Any aReturn = FmXTextCell::queryAggregation(_rType);
-    if (!aReturn.hasValue())
-        aReturn = ::cppu::queryInterface(_rType,
-            static_cast< ::com::sun::star::awt::XListBox* >(this)
-        );
+
+    if ( !aReturn.hasValue() )
+        aReturn = FmXListBoxCell_Base::queryInterface( _rType );
+
     return aReturn;
 }
 
 //-------------------------------------------------------------------------
 Sequence< ::com::sun::star::uno::Type > SAL_CALL FmXListBoxCell::getTypes(  ) throw(RuntimeException)
 {
-    Sequence< ::com::sun::star::uno::Type > aTypes = OComponentHelper::getTypes();
-
-    sal_Int32 nLen = aTypes.getLength();
-    aTypes.realloc(nLen + 2);
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XControl >* >(NULL));
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XListBox >* >(NULL));
-
-    return aTypes;
+    return ::comphelper::concatSequences(
+        FmXTextCell::getTypes(),
+        FmXListBoxCell_Base::getTypes()
+    );
 }
 
+//------------------------------------------------------------------------------
+IMPLEMENT_GET_IMPLEMENTATION_ID( FmXListBoxCell )
+
 //------------------------------------------------------------------
 void SAL_CALL FmXListBoxCell::addItemListener(const Reference< ::com::sun::star::awt::XItemListener >& l) throw( RuntimeException )
 {
@@ -4042,10 +4377,10 @@ void SAL_CALL FmXListBoxCell::makeVisible(sal_Int16 nEntry) throw( RuntimeExcept
 }
 
 //------------------------------------------------------------------
-IMPL_LINK(FmXListBoxCell, OnSelect, VclWindowEvent*, _pEvent )
+void FmXListBoxCell::onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData )
 {
-    if  (   ( _pEvent->GetWindow() == m_pBox )
-        &&  ( _pEvent->GetId() == VCLEVENT_LISTBOX_SELECT )
+    if  (   ( &_rWindow == m_pBox )
+        &&  ( _nEventId == VCLEVENT_LISTBOX_SELECT )
         )
     {
         OnDoubleClick( NULL );
@@ -4059,8 +4394,10 @@ IMPL_LINK(FmXListBoxCell, OnSelect, VclWindowEvent*, _pEvent )
             ? m_pBox->GetSelectEntryPos() : 0xFFFF;
 
         m_aItemListeners.notifyEach( &awt::XItemListener::itemStateChanged, aEvent );
+        return;
     }
-    return 1;
+
+    FmXTextCell::onWindowEvent( _nEventId, _rWindow, _pEventData );
 }
 
 
@@ -4083,6 +4420,203 @@ IMPL_LINK( FmXListBoxCell, OnDoubleClick, void*, EMPTYARG )
 
 
 /*************************************************************************/
+
+DBG_NAME( FmXComboBoxCell );
+
+//------------------------------------------------------------------------------
+FmXComboBoxCell::FmXComboBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl )
+    :FmXTextCell( pColumn, _rControl )
+    ,m_aItemListeners( m_aMutex )
+    ,m_aActionListeners( m_aMutex )
+    ,m_pComboBox( &static_cast< ComboBox& >( _rControl.GetWindow() ) )
+{
+    DBG_CTOR( FmXComboBoxCell, NULL );
+}
+
+//------------------------------------------------------------------------------
+FmXComboBoxCell::~FmXComboBoxCell()
+{
+    if ( !OComponentHelper::rBHelper.bDisposed )
+    {
+        acquire();
+        dispose();
+    }
+
+    DBG_DTOR( FmXComboBoxCell, NULL );
+}
+
+//-----------------------------------------------------------------------------
+void FmXComboBoxCell::disposing()
+{
+    ::com::sun::star::lang::EventObject aEvt(*this);
+    m_aItemListeners.disposeAndClear(aEvt);
+    m_aActionListeners.disposeAndClear(aEvt);
+
+    FmXTextCell::disposing();
+}
+
+//------------------------------------------------------------------
+Any SAL_CALL FmXComboBoxCell::queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(RuntimeException)
+{
+    Any aReturn = FmXTextCell::queryAggregation(_rType);
+
+    if ( !aReturn.hasValue() )
+        aReturn = FmXComboBoxCell_Base::queryInterface( _rType );
+
+    return aReturn;
+}
+
+//-------------------------------------------------------------------------
+Sequence< Type > SAL_CALL FmXComboBoxCell::getTypes(  ) throw(RuntimeException)
+{
+    return ::comphelper::concatSequences(
+        FmXTextCell::getTypes(),
+        FmXComboBoxCell_Base::getTypes()
+    );
+}
+
+//------------------------------------------------------------------------------
+IMPLEMENT_GET_IMPLEMENTATION_ID( FmXComboBoxCell )
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::addItemListener(const Reference< awt::XItemListener >& l) throw( RuntimeException )
+{
+    m_aItemListeners.addInterface( l );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::removeItemListener(const Reference< awt::XItemListener >& l) throw( RuntimeException )
+{
+    m_aItemListeners.removeInterface( l );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::addActionListener(const Reference< awt::XActionListener >& l) throw( RuntimeException )
+{
+    m_aActionListeners.addInterface( l );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::removeActionListener(const Reference< awt::XActionListener >& l) throw( RuntimeException )
+{
+    m_aActionListeners.removeInterface( l );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::addItem( const ::rtl::OUString& _Item, sal_Int16 _Pos ) throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+    if ( m_pComboBox )
+        m_pComboBox->InsertEntry( _Item, _Pos );
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::addItems( const Sequence< ::rtl::OUString >& _Items, sal_Int16 _Pos ) throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+    if ( m_pComboBox )
+    {
+        sal_uInt16 nP = _Pos;
+        for ( sal_uInt16 n = 0; n < _Items.getLength(); n++ )
+        {
+            m_pComboBox->InsertEntry( _Items.getConstArray()[n], nP );
+            if ( _Pos != -1 )
+                nP++;
+        }
+    }
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::removeItems( sal_Int16 _Pos, sal_Int16 _Count ) throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+    if ( m_pComboBox )
+    {
+        for ( sal_uInt16 n = _Count; n; )
+            m_pComboBox->RemoveEntry( _Pos + (--n) );
+    }
+}
+
+//------------------------------------------------------------------
+sal_Int16 SAL_CALL FmXComboBoxCell::getItemCount() throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+    return m_pComboBox ? m_pComboBox->GetEntryCount() : 0;
+}
+
+//------------------------------------------------------------------
+::rtl::OUString SAL_CALL FmXComboBoxCell::getItem( sal_Int16 _Pos ) throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+    String sItem;
+    if ( m_pComboBox )
+        sItem = m_pComboBox->GetEntry( _Pos );
+    return sItem;
+}
+//------------------------------------------------------------------
+Sequence< ::rtl::OUString > SAL_CALL FmXComboBoxCell::getItems() throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+
+    Sequence< ::rtl::OUString > aItems;
+    if ( m_pComboBox )
+    {
+        sal_uInt16 nEntries = m_pComboBox->GetEntryCount();
+        aItems.realloc( nEntries );
+        ::rtl::OUString* pItem = aItems.getArray();
+        for ( sal_uInt16 n=0; n<nEntries; ++n, ++pItem )
+            *pItem = m_pComboBox->GetEntry( n );
+    }
+    return aItems;
+}
+
+//------------------------------------------------------------------
+sal_Int16 SAL_CALL FmXComboBoxCell::getDropDownLineCount() throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+
+    sal_Int16 nLines = 0;
+    if ( m_pComboBox )
+        nLines = m_pComboBox->GetDropDownLineCount();
+
+    return nLines;
+}
+
+//------------------------------------------------------------------
+void SAL_CALL FmXComboBoxCell::setDropDownLineCount(sal_Int16 nLines) throw( RuntimeException )
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+    if ( m_pComboBox )
+        m_pComboBox->SetDropDownLineCount( nLines );
+}
+
+//------------------------------------------------------------------------------
+void FmXComboBoxCell::onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData )
+{
+
+    switch ( _nEventId )
+    {
+    case VCLEVENT_COMBOBOX_SELECT:
+    {
+        awt::ItemEvent aEvent;
+        aEvent.Source = *this;
+        aEvent.Highlighted = sal_False;
+
+        // Bei Mehrfachselektion 0xFFFF, sonst die ID
+        aEvent.Selected =   ( m_pComboBox->GetSelectEntryCount() == 1 )
+                        ?   m_pComboBox->GetSelectEntryPos()
+                        :   0xFFFF;
+        m_aItemListeners.notifyEach( &awt::XItemListener::itemStateChanged, aEvent );
+    }
+    break;
+
+    default:
+        FmXTextCell::onWindowEvent( _nEventId, _rWindow, _pEventData );
+        break;
+    }
+}
+
+/*************************************************************************/
 TYPEINIT1(FmXFilterCell, FmXGridCell);
 
 //------------------------------------------------------------------------------
@@ -4093,8 +4627,8 @@ Reference< XInterface >  FmXFilterCell_CreateInstance(const Reference< ::com::su
 
 DBG_NAME(FmXFilterCell);
 //------------------------------------------------------------------------------
-FmXFilterCell::FmXFilterCell(DbGridColumn* pColumn, DbCellControl* pControl)
-              :FmXGridCell(pColumn, pControl)
+FmXFilterCell::FmXFilterCell(DbGridColumn* pColumn, DbCellControl* pControl )
+              :FmXGridCell( pColumn, pControl )
               ,m_aTextListeners(m_aMutex)
 {
     DBG_CTOR(FmXFilterCell,NULL);
@@ -4180,26 +4714,25 @@ void FmXFilterCell::disposing()
 Any SAL_CALL FmXFilterCell::queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(RuntimeException)
 {
     Any aReturn = FmXGridCell::queryAggregation(_rType);
-    if (!aReturn.hasValue())
-        aReturn = ::cppu::queryInterface(_rType,
-            static_cast< ::com::sun::star::awt::XTextComponent* >(this)
-        );
+
+    if ( !aReturn.hasValue() )
+        aReturn = FmXFilterCell_Base::queryInterface( _rType );
+
     return aReturn;
 }
 
 //-------------------------------------------------------------------------
 Sequence< ::com::sun::star::uno::Type > SAL_CALL FmXFilterCell::getTypes(  ) throw(RuntimeException)
 {
-    Sequence< ::com::sun::star::uno::Type > aTypes = OComponentHelper::getTypes();
-
-    sal_Int32 nLen = aTypes.getLength();
-    aTypes.realloc(nLen + 2);
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XControl >* >(NULL));
-    aTypes.getArray()[nLen++] = ::getCppuType(static_cast< Reference< ::com::sun::star::awt::XTextComponent >* >(NULL));
-
-    return aTypes;
+    return ::comphelper::concatSequences(
+        FmXGridCell::getTypes(),
+        FmXFilterCell_Base::getTypes()
+    );
 }
 
+//------------------------------------------------------------------------------
+IMPLEMENT_GET_IMPLEMENTATION_ID( FmXFilterCell )
+
 // ::com::sun::star::awt::XTextComponent
 //------------------------------------------------------------------------------
 void SAL_CALL FmXFilterCell::addTextListener(const Reference< ::com::sun::star::awt::XTextListener >& l) throw( RuntimeException )
diff --git a/svx/source/form/fmPropBrw.cxx b/svx/source/form/fmPropBrw.cxx
index 57eebb7..d1f77a8 100644
--- a/svx/source/form/fmPropBrw.cxx
+++ b/svx/source/form/fmPropBrw.cxx
@@ -190,7 +190,7 @@ using namespace ::svxform;
         case FormComponentType::IMAGECONTROL:
             nClassNameResourceId = RID_STR_PROPTITLE_IMAGECONTROL; break;
         case FormComponentType::HIDDENCONTROL:
-            nClassNameResourceId = RID_STR_HIDDEN_CLASSNAME; break;
+            nClassNameResourceId = RID_STR_PROPTITLE_HIDDEN; break;
         case FormComponentType::SCROLLBAR:
             nClassNameResourceId = RID_STR_PROPTITLE_SCROLLBAR; break;
         case FormComponentType::SPINBUTTON:
@@ -199,7 +199,7 @@ using namespace ::svxform;
             nClassNameResourceId = RID_STR_PROPTITLE_NAVBAR; break;
         case FormComponentType::CONTROL:
         default:
-            nClassNameResourceId = RID_STR_CONTROL_CLASSNAME; break;
+            nClassNameResourceId = RID_STR_CONTROL; break;
     }
 
     if ( !nClassNameResourceId )
@@ -218,6 +218,7 @@ FmPropBrw::FmPropBrw( const Reference< XMultiServiceFactory >& _xORB, SfxBinding
     :SfxFloatingWindow(_pBindings, _pMgr, _pParent, WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_3DLOOK|WB_ROLLABLE) )
     ,SfxControllerItem(SID_FM_PROPERTY_CONTROL, *_pBindings)
     ,m_bInitialStateChange(sal_True)
+    ,m_bInStateChange( false )
     ,m_xORB(_xORB)
 {
     DBG_CTOR(FmPropBrw,NULL);
@@ -668,11 +669,12 @@ void FmPropBrw::impl_ensurePropertyBrowser_nothrow( FmFormShell* _pFormShell )
 //-----------------------------------------------------------------------
 void FmPropBrw::StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState)
 {
+    if (!pState  || SID_FM_PROPERTY_CONTROL != nSID)
+        return;
+
+    m_bInStateChange = true;
     try
     {
-        if (!pState  || SID_FM_PROPERTY_CONTROL != nSID)
-            return;
-
         if (eState >= SFX_ITEM_AVAILABLE)
         {
             FmFormShell* pShell = PTR_CAST(FmFormShell,((SfxObjectItem*)pState)->GetShell());
@@ -719,5 +721,5 @@ void FmPropBrw::StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPool
     {
         DBG_ERROR("FmPropBrw::StateChanged: Exception occured!");
     }
-
+    m_bInStateChange = false;
 }
diff --git a/svx/source/form/fmctrler.cxx b/svx/source/form/fmctrler.cxx
index 4aeec29..5f6c07c 100644
--- a/svx/source/form/fmctrler.cxx
+++ b/svx/source/form/fmctrler.cxx
@@ -129,6 +129,7 @@ struct ColumnInfo
     Reference< XColumn >    xColumn;
     sal_Int32               nNullable;
     sal_Bool                bAutoIncrement;
+    sal_Bool                bReadOnly;
     ::rtl::OUString         sName;
 
     // information about the control(s) bound to this column
@@ -148,6 +149,7 @@ struct ColumnInfo
         :xColumn()
         ,nNullable( ColumnValue::NULLABLE_UNKNOWN )
         ,bAutoIncrement( sal_False )
+        ,bReadOnly( sal_False )
         ,sName()
         ,xFirstControlWithInputRequired()
         ,xFirstGridWithInputRequiredColumn()
@@ -202,6 +204,7 @@ ColumnInfoCache::ColumnInfoCache( const Reference< XColumnsSupplier >& _rxColSup
             OSL_VERIFY( xColumnProps->getPropertyValue( FM_PROP_ISNULLABLE ) >>= aColInfo.nNullable );
             OSL_VERIFY( xColumnProps->getPropertyValue( FM_PROP_AUTOINCREMENT ) >>= aColInfo.bAutoIncrement );
             OSL_VERIFY( xColumnProps->getPropertyValue( FM_PROP_NAME ) >>= aColInfo.sName );
+            OSL_VERIFY( xColumnProps->getPropertyValue( FM_PROP_ISREADONLY ) >>= aColInfo.bReadOnly );
 
             m_aColumns.push_back( aColInfo );
         }
@@ -227,6 +230,7 @@ namespace
         OSL_VERIFY( _rxControlModel->getPropertyValue( FM_PROP_INPUT_REQUIRED ) >>= bInputRequired );
         return ( bInputRequired != sal_False );
     }
+
     void lcl_resetColumnControlInfo( ColumnInfo& _rColInfo )
     {
         _rColInfo.xFirstControlWithInputRequired.clear();
@@ -2956,7 +2960,6 @@ void FmXFormController::setFilter(::std::vector<FmFieldInfo>& rFieldInfos)
                                 aRow[(*iter).xText] = sCriteria;
                             }
                         }
-                        break;
                     }
                 }
             }
@@ -3502,6 +3505,9 @@ sal_Bool SAL_CALL FmXFormController::approveRowChange(const RowChangeEvent& _rEv
             if ( rColInfo.bAutoIncrement )
                 continue;
 
+            if ( rColInfo.bReadOnly )
+                continue;
+
             if ( !rColInfo.xFirstControlWithInputRequired.is() && !rColInfo.xFirstGridWithInputRequiredColumn.is() )
                 continue;
 
diff --git a/svx/source/form/fmpgeimp.cxx b/svx/source/form/fmpgeimp.cxx
index 107cf54..9da374d 100644
--- a/svx/source/form/fmpgeimp.cxx
+++ b/svx/source/form/fmpgeimp.cxx
@@ -38,6 +38,7 @@
 #include "fmprop.hrc"
 #include "fmservs.hxx"
 #include "fmobj.hxx"
+#include "formcontrolfactory.hxx"
 #include "svditer.hxx"
 #include "fmresids.hrc"
 #include "svx/dbtoolsclient.hxx"
@@ -551,18 +552,12 @@ Reference< ::com::sun::star::form::XForm >  FmFormPageImpl::findPlaceInFormCompo
             xFormProps->setPropertyValue(FM_PROP_COMMANDTYPE, makeAny(nCommandType));
 
             Reference< ::com::sun::star::container::XNameAccess >  xNamedSet( getForms(), UNO_QUERY );
-            ::rtl::OUString aName;
 
-            if ((CommandType::TABLE == nCommandType) || (CommandType::QUERY == nCommandType))
-            {
-                // Namen der ::com::sun::star::form ueber den Titel der CursorSource setzen
-                aName = getUniqueName(rCursorSource, xNamedSet);
-            }
-            else
-                // ansonsten StandardformName verwenden
-                aName = getUniqueName(::rtl::OUString(String(SVX_RES(RID_STR_STDFORMNAME))), xNamedSet);
+            const bool bTableOrQuery = ( CommandType::TABLE == nCommandType ) || ( CommandType::QUERY == nCommandType );
+            ::rtl::OUString sName = FormControlFactory::getUniqueName( xNamedSet,
+                bTableOrQuery ? rCursorSource : ::rtl::OUString( String( SVX_RES( RID_STR_STDFORMNAME ) ) ) );
 
-            xFormProps->setPropertyValue(FM_PROP_NAME, makeAny(aName));
+            xFormProps->setPropertyValue( FM_PROP_NAME, makeAny( sName ) );
 
             if( bUndo )
             {
@@ -574,7 +569,7 @@ Reference< ::com::sun::star::form::XForm >  FmFormPageImpl::findPlaceInFormCompo
                                                          xContainer->getCount()));
             }
 
-            getForms()->insertByName(aName, makeAny(xForm));
+            getForms()->insertByName( sName, makeAny( xForm ) );
 
             if( bUndo )
                 pModel->EndUndo();
@@ -672,7 +667,6 @@ Reference< XForm >  FmFormPageImpl::findFormForDataSource(
 //------------------------------------------------------------------------------
 ::rtl::OUString FmFormPageImpl::setUniqueName(const Reference< XFormComponent > & xFormComponent, const Reference< XForm > & xControls)
 {
-    RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmFormPageImpl::setUniqueName" );
 #if OSL_DEBUG_LEVEL > 0
     try
     {
@@ -696,9 +690,10 @@ Reference< XForm >  FmFormPageImpl::findFormForDataSource(
             // setzen eines default Namens ueber die ClassId
             sal_Int16 nClassId( FormComponentType::CONTROL );
             xSet->getPropertyValue( FM_PROP_CLASSID ) >>= nClassId;
-            Reference< XServiceInfo > xSI( xSet, UNO_QUERY );
 
-            ::rtl::OUString sDefaultName = getDefaultName( nClassId, xControls, xSI );
+            ::rtl::OUString sDefaultName = FormControlFactory::getDefaultUniqueName_ByComponentType(
+                Reference< XNameAccess >( xControls, UNO_QUERY ), xSet );
+
             // bei Radiobuttons, die einen Namen haben, diesen nicht ueberschreiben!
             if (!sName.getLength() || nClassId != ::com::sun::star::form::FormComponentType::RADIOBUTTON)
             {
@@ -711,78 +706,6 @@ Reference< XForm >  FmFormPageImpl::findFormForDataSource(
     return sName;
 }
 
-
-UniString FmFormPageImpl::getDefaultName( sal_Int16 _nClassId, const Reference< XServiceInfo >& _rxObject )
-{
-    RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmFormPageImpl::getDefaultName" );
-    sal_uInt16 nResId;
-
-    switch (_nClassId)
-    {
-        case FormComponentType::COMMANDBUTTON:  nResId = RID_STR_BUTTON_CLASSNAME;      break;
-        case FormComponentType::RADIOBUTTON:    nResId = RID_STR_RADIOBUTTON_CLASSNAME; break;
-        case FormComponentType::CHECKBOX:       nResId = RID_STR_CHECKBOX_CLASSNAME;    break;
-        case FormComponentType::LISTBOX:        nResId = RID_STR_LISTBOX_CLASSNAME;     break;
-        case FormComponentType::COMBOBOX:       nResId = RID_STR_COMBOBOX_CLASSNAME;    break;
-        case FormComponentType::GROUPBOX:       nResId = RID_STR_GROUPBOX_CLASSNAME;    break;
-        case FormComponentType::IMAGEBUTTON:    nResId = RID_STR_IMAGE_CLASSNAME;       break;
-        case FormComponentType::FIXEDTEXT:      nResId = RID_STR_FIXEDTEXT_CLASSNAME;   break;
-        case FormComponentType::GRIDCONTROL:    nResId = RID_STR_GRID_CLASSNAME;        break;
-        case FormComponentType::FILECONTROL:    nResId = RID_STR_FILECONTROL_CLASSNAME; break;
-        case FormComponentType::DATEFIELD:      nResId = RID_STR_DATEFIELD_CLASSNAME;   break;
-        case FormComponentType::TIMEFIELD:      nResId = RID_STR_TIMEFIELD_CLASSNAME;   break;
-        case FormComponentType::NUMERICFIELD:   nResId = RID_STR_NUMERICFIELD_CLASSNAME;    break;
-        case FormComponentType::CURRENCYFIELD:  nResId = RID_STR_CURRENCYFIELD_CLASSNAME;   break;
-        case FormComponentType::PATTERNFIELD:   nResId = RID_STR_PATTERNFIELD_CLASSNAME;    break;
-        case FormComponentType::IMAGECONTROL:   nResId = RID_STR_IMAGECONTROL_CLASSNAME;    break;
-        case FormComponentType::HIDDENCONTROL:  nResId = RID_STR_HIDDEN_CLASSNAME;      break;
-        case FormComponentType::SCROLLBAR:      nResId = RID_STR_CLASSNAME_SCROLLBAR;   break;
-        case FormComponentType::SPINBUTTON:     nResId = RID_STR_CLASSNAME_SPINBUTTON;  break;
-        case FormComponentType::NAVIGATIONBAR:  nResId = RID_STR_NAVBAR_CLASSNAME;      break;
-
-        case FormComponentType::TEXTFIELD:
-            nResId = RID_STR_EDIT_CLASSNAME;
-            if ( _rxObject.is() && _rxObject->supportsService( FM_SUN_COMPONENT_FORMATTEDFIELD ) )
-                nResId = RID_STR_FORMATTED_CLASSNAME;
-            break;
-
-        default:
-            nResId = RID_STR_CONTROL_CLASSNAME;     break;
-    }
-
-    return SVX_RES(nResId);
-}
-
-//------------------------------------------------------------------------------
-::rtl::OUString FmFormPageImpl::getDefaultName(
-    sal_Int16 _nClassId, const Reference< XForm >& _rxControls, const Reference< XServiceInfo >& _rxObject ) const
-{
-    RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmFormPageImpl::getDefaultName" );
-    ::rtl::OUString aClassName=getDefaultName( _nClassId, _rxObject );
-
-    Reference< ::com::sun::star::container::XNameAccess >  xNamedSet( _rxControls, UNO_QUERY );
-    return getUniqueName(aClassName, xNamedSet);
-}
-
-//------------------------------------------------------------------
-::rtl::OUString FmFormPageImpl::getUniqueName(const ::rtl::OUString& rName, const Reference< ::com::sun::star::container::XNameAccess > & xNamedSet) const
-{
-    RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmFormPageImpl::getUniqueName" );
-    Reference< ::com::sun::star::container::XIndexAccess >  xIndexSet(xNamedSet, UNO_QUERY);
-    ::rtl::OUString sName( rName );
-
-    if ( !xIndexSet.is() )
-        return sName;
-
-    sal_Int32 n = 0;
-    ::rtl::OUString sClassName = rName;
-
-    while ( xNamedSet->hasByName( sName ) )
-        sName = sClassName + ::rtl::OUString::valueOf(++n);
-
-    return sName;
-}
-
 //------------------------------------------------------------------
 void FmFormPageImpl::formObjectInserted( const FmFormObj& _object )
 {
diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index 06a4f81..645787b 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -785,7 +785,7 @@ void SAL_CALL FmXFormShell::formDeactivated(const EventObject& rEvent) throw( Ru
 void FmXFormShell::disposing()
 {
     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmXFormShell::disposing" );
-    OSL_TRACE( "--- FmXFormShell::disposing      : %p, ........, ........\n", this );
+    OSL_TRACE( "--- FmXFormShell::disposing      : %p, ........, ........", this );
     impl_checkDisposed();
 
     FmXFormShell_BASE::disposing();
@@ -3936,7 +3936,7 @@ void FmXFormShell::SetWizardUsing(sal_Bool _bUseThem)
 void FmXFormShell::viewDeactivated( FmFormView& _rCurrentView, sal_Bool _bDeactivateController /* = sal_True */ )
 {
     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmXFormShell::viewDeactivated" );
-    OSL_TRACE( "--- FmXFormShell::viewDeactivated: %p, %p, ........\n", this, &_rCurrentView );
+    OSL_TRACE( "--- FmXFormShell::viewDeactivated: %p, %p, ........", this, &_rCurrentView );
 
     if ( _rCurrentView.GetImpl() && !_rCurrentView.IsDesignMode() )
     {
@@ -3971,7 +3971,7 @@ void FmXFormShell::viewDeactivated( FmFormView& _rCurrentView, sal_Bool _bDeacti
     // remove callbacks at the page
     if ( pPage )
     {
-        OSL_TRACE( "--- FmXFormShell::resetHandler   : %p, ........, %p\n", this, pPage );
+        OSL_TRACE( "--- FmXFormShell::resetHandler   : %p, ........, %p", this, pPage );
         pPage->GetImpl().SetFormsCreationHdl( Link() );
     }
     UpdateForms( sal_True );
@@ -4010,7 +4010,7 @@ IMPL_LINK( FmXFormShell, OnFormsCreated, FmFormPage*, /*_pPage*/ )
 void FmXFormShell::viewActivated( FmFormView& _rCurrentView, sal_Bool _bSyncAction /* = sal_False */ )
 {
     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "FmXFormShell::viewActivated" );
-    OSL_TRACE( "--- FmXFormShell::viewActivated  : %p, %p, ........\n", this, &_rCurrentView );
+    OSL_TRACE( "--- FmXFormShell::viewActivated  : %p, %p, ........", this, &_rCurrentView );
 
     FmFormPage* pPage = _rCurrentView.GetCurPage();
 
@@ -4040,7 +4040,7 @@ void FmXFormShell::viewActivated( FmFormView& _rCurrentView, sal_Bool _bSyncActi
     // set callbacks at the page
     if ( pPage )
     {
-        OSL_TRACE( "--- FmXFormShell::setHandler     : %p, ........, %p\n", this, pPage );
+        OSL_TRACE( "--- FmXFormShell::setHandler     : %p, ........, %p", this, pPage );
         pPage->GetImpl().SetFormsCreationHdl( LINK( this, FmXFormShell, OnFormsCreated ) );
     }
 
diff --git a/svx/source/form/fmstring.src b/svx/source/form/fmstring.src
index 0ee4113..e8867d1 100644
--- a/svx/source/form/fmstring.src
+++ b/svx/source/form/fmstring.src
@@ -84,107 +84,16 @@ Resource RID_RSC_TABWIN_PREFIX
 };
 String RID_STR_FORMSHELL
 {
-    Text [ en-US ] = "Form";
+    Text = "Form Shell";
 };
 String RID_STR_STDFORMNAME
 {
-    Text = "Standard";
-};
-String RID_STR_FORMATTED_CLASSNAME
-{
-    Text = "FormattedField";
-};
-String RID_STR_CONTROL_CLASSNAME
-{
-    Text = "Control";
-};
-String RID_STR_CHECKBOX_CLASSNAME
-{
-    Text = "CheckBox";
-};
-String RID_STR_RADIOBUTTON_CLASSNAME
-{
-    Text = "OptionButton";
-};
-String RID_STR_BUTTON_CLASSNAME
-{
-    Text = "PushButton";
-};
-String RID_STR_FIXEDTEXT_CLASSNAME
-{
-    Text = "LabelField";
-};
-String RID_STR_IMAGE_CLASSNAME
-{
-    Text = "ImageButton";
-};
-String RID_STR_GRID_CLASSNAME
-{
-    Text = "TableControl";
-};
-String RID_STR_GROUPBOX_CLASSNAME
-{
-    Text = "GroupBox";
-};
-String RID_STR_LISTBOX_CLASSNAME
-{
-    Text = "ListBox";
-};
-String RID_STR_COMBOBOX_CLASSNAME
-{
-    Text = "ComboBox";
-};
-String RID_STR_EDIT_CLASSNAME
-{
-    Text = "TextBox";
+    Text [ en-US ]= "Form";
 };
-String RID_STR_FILECONTROL_CLASSNAME
+String RID_STR_PROPTITLE_HIDDEN
 {
-    Text = "FileSelection";
+    Text [ en-US ] = "Hidden Control";
 };
-String RID_STR_DATEFIELD_CLASSNAME
-{
-    Text = "DateField";
-};
-String RID_STR_TIMEFIELD_CLASSNAME
-{
-    Text = "TimeField";
-};
-String RID_STR_NUMERICFIELD_CLASSNAME
-{
-    Text = "NumericalField";
-};
-String RID_STR_CURRENCYFIELD_CLASSNAME
-{
-    Text = "CurrencyField";
-};
-String RID_STR_PATTERNFIELD_CLASSNAME
-{
-    Text = "PatternField";
-};
-String RID_STR_IMAGECONTROL_CLASSNAME
-{
-    Text = "ImageControl";
-};
-String RID_STR_HIDDEN_CLASSNAME
-{
-    Text = "HiddenControl";
-};
-String RID_STR_NAVBAR_CLASSNAME
-{
-    Text [ en-US ] = "NavigationBar";
-};
-
-String RID_STR_CLASSNAME_SCROLLBAR
-{
-    Text [ en-US ] = "Scrollbar";
-};
-
-String RID_STR_CLASSNAME_SPINBUTTON
-{
-    Text [ en-US ] = "SpinButton";
-};
-
 String RID_STR_CONTROL
 {
     Text [ en-US ] = "Control";
@@ -282,7 +191,7 @@ String RID_STR_TIME
 };
 String RID_STR_PROPTITLE_PUSHBUTTON
 {
-    Text [ en-US ] = "Button";
+    Text [ en-US ] = "Push Button";
 };
 String RID_STR_PROPTITLE_RADIOBUTTON
 {
@@ -294,7 +203,7 @@ String RID_STR_PROPTITLE_CHECKBOX
 };
 String RID_STR_PROPTITLE_FIXEDTEXT
 {
-    Text [ en-US ] = "Label field";
+    Text [ en-US ] = "Label Field";
 };
 String RID_STR_PROPTITLE_GROUPBOX
 {
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index eeabfc9..26a5ecd 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -342,7 +342,7 @@ void FmFormView::GrabFirstControlFocus( sal_Bool _bForceSync )
 //------------------------------------------------------------------------
 SdrPageView* FmFormView::ShowSdrPage(SdrPage* pPage)
 {
-    OSL_TRACE( "--- FmFormView::ShowSdrPage      : ........, %p, %p\n", this, pPage );
+    OSL_TRACE( "--- FmFormView::ShowSdrPage      : ........, %p, %p", this, pPage );
 
     SdrPageView* pPV = E3dView::ShowSdrPage(pPage);
 
@@ -380,7 +380,7 @@ SdrPageView* FmFormView::ShowSdrPage(SdrPage* pPage)
 //------------------------------------------------------------------------
 void FmFormView::HideSdrPage()
 {
-    OSL_TRACE( "--- FmFormView::HideSdrPage      : ........, %p, %p\n", this, GetCurPage() );
+    OSL_TRACE( "--- FmFormView::HideSdrPage      : ........, %p, %p", this, GetCurPage() );
 
     // --- 1. deactivate controls
     if ( !IsDesignMode() )
diff --git a/svx/source/form/formcontrolfactory.cxx b/svx/source/form/formcontrolfactory.cxx
index 33f8b47..4e28c62 100644
--- a/svx/source/form/formcontrolfactory.cxx
+++ b/svx/source/form/formcontrolfactory.cxx
@@ -35,6 +35,7 @@
 #include "fmcontrollayout.hxx"
 #include "fmprop.hrc"
 #include "fmresids.hrc"
+#include "fmservs.hxx"
 #include "svx/dialmgr.hxx"
 #include "svx/svdouno.hxx"
 
@@ -739,6 +740,75 @@ namespace svxform
         }
     }
 
+    //------------------------------------------------------------------------------
+    ::rtl::OUString FormControlFactory::getDefaultName( sal_Int16 _nClassId, const Reference< XServiceInfo >& _rxObject )
+    {
+        sal_uInt16 nResId(0);
+
+        switch ( _nClassId )
+        {
+            case FormComponentType::COMMANDBUTTON:  nResId = RID_STR_PROPTITLE_PUSHBUTTON;  break;
+            case FormComponentType::RADIOBUTTON:    nResId = RID_STR_PROPTITLE_RADIOBUTTON; break;
+            case FormComponentType::CHECKBOX:       nResId = RID_STR_PROPTITLE_CHECKBOX;    break;
+            case FormComponentType::LISTBOX:        nResId = RID_STR_PROPTITLE_LISTBOX;     break;
+            case FormComponentType::COMBOBOX:       nResId = RID_STR_PROPTITLE_COMBOBOX;    break;
+            case FormComponentType::GROUPBOX:       nResId = RID_STR_PROPTITLE_GROUPBOX;    break;
+            case FormComponentType::IMAGEBUTTON:    nResId = RID_STR_PROPTITLE_IMAGEBUTTON; break;
+            case FormComponentType::FIXEDTEXT:      nResId = RID_STR_PROPTITLE_FIXEDTEXT;   break;
+            case FormComponentType::GRIDCONTROL:    nResId = RID_STR_PROPTITLE_DBGRID;      break;
+            case FormComponentType::FILECONTROL:    nResId = RID_STR_PROPTITLE_FILECONTROL; break;
+            case FormComponentType::DATEFIELD:      nResId = RID_STR_PROPTITLE_DATEFIELD;   break;
+            case FormComponentType::TIMEFIELD:      nResId = RID_STR_PROPTITLE_TIMEFIELD;   break;
+            case FormComponentType::NUMERICFIELD:   nResId = RID_STR_PROPTITLE_NUMERICFIELD;    break;
+            case FormComponentType::CURRENCYFIELD:  nResId = RID_STR_PROPTITLE_CURRENCYFIELD;   break;
+            case FormComponentType::PATTERNFIELD:   nResId = RID_STR_PROPTITLE_PATTERNFIELD;    break;
+            case FormComponentType::IMAGECONTROL:   nResId = RID_STR_PROPTITLE_IMAGECONTROL;    break;
+            case FormComponentType::HIDDENCONTROL:  nResId = RID_STR_PROPTITLE_HIDDEN;      break;
+            case FormComponentType::SCROLLBAR:      nResId = RID_STR_PROPTITLE_SCROLLBAR;   break;
+            case FormComponentType::SPINBUTTON:     nResId = RID_STR_PROPTITLE_SPINBUTTON;  break;
+            case FormComponentType::NAVIGATIONBAR:  nResId = RID_STR_PROPTITLE_NAVBAR;      break;
+
+            case FormComponentType::TEXTFIELD:
+                nResId = RID_STR_PROPTITLE_EDIT;
+                if ( _rxObject.is() && _rxObject->supportsService( FM_SUN_COMPONENT_FORMATTEDFIELD ) )
+                    nResId = RID_STR_PROPTITLE_FORMATTED;
+                break;
+
+            default:
+                nResId = RID_STR_CONTROL;     break;
+        }
+
+        return String( SVX_RES( nResId ) );
+    }
+
+    //------------------------------------------------------------------------------
+    ::rtl::OUString FormControlFactory::getDefaultUniqueName_ByComponentType( const Reference< XNameAccess >& _rxContainer,
+        const Reference< XPropertySet >& _rxObject )
+    {
+        sal_Int16 nClassId = FormComponentType::CONTROL;
+        OSL_VERIFY( _rxObject->getPropertyValue( FM_PROP_CLASSID ) >>= nClassId );
+        ::rtl::OUString sBaseName = getDefaultName( nClassId, Reference< XServiceInfo >( _rxObject, UNO_QUERY ) );
+
+        return getUniqueName( _rxContainer, sBaseName );
+    }
+
+    //------------------------------------------------------------------------------
+    ::rtl::OUString FormControlFactory::getUniqueName( const Reference< XNameAccess >& _rxContainer, const ::rtl::OUString& _rBaseName )
+    {
+        sal_Int32 n = 0;
+        ::rtl::OUString sName;
+        do
+        {
+            ::rtl::OUStringBuffer aBuf( _rBaseName );
+            aBuf.appendAscii( " " );
+            aBuf.append( ++n );
+            sName = aBuf.makeStringAndClear();
+        }
+        while ( _rxContainer->hasByName( sName ) );
+
+        return sName;
+    }
+
 //........................................................................
 } // namespace svxform
 //........................................................................
diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx
index 749bd92..232a075 100644
--- a/svx/source/form/navigatortree.cxx
+++ b/svx/source/form/navigatortree.cxx
@@ -1573,7 +1573,7 @@ namespace svxform
             aBaseName = SVX_RES( RID_STR_STDFORMNAME );
 
         else if( pEntryData->ISA(FmControlData) )
-            aBaseName = SVX_RES( RID_STR_CONTROL_CLASSNAME );
+            aBaseName = SVX_RES( RID_STR_CONTROL );
 
         //////////////////////////////////////////////////////////////////////
         // Neuen Namen erstellen
diff --git a/svx/source/inc/fmPropBrw.hxx b/svx/source/inc/fmPropBrw.hxx
index 84825a5..78ee4f2 100644
--- a/svx/source/inc/fmPropBrw.hxx
+++ b/svx/source/inc/fmPropBrw.hxx
@@ -57,6 +57,7 @@ class FmFormShell;
 class FmPropBrw : public SfxFloatingWindow, public SfxControllerItem
 {
     sal_Bool		m_bInitialStateChange;
+    bool            m_bInStateChange;
     ::rtl::OUString m_sLastActivePage;
     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > 
                         m_xInspectorContext;
diff --git a/svx/source/inc/fmpgeimp.hxx b/svx/source/inc/fmpgeimp.hxx
index 651232c..9009d2c 100644
--- a/svx/source/inc/fmpgeimp.hxx
+++ b/svx/source/inc/fmpgeimp.hxx
@@ -133,21 +133,8 @@ protected:
         sal_Int32 nCommandType
     );
 
-    ::rtl::OUString getDefaultName(
-                        sal_Int16 _nClassId,
-                        const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm>& _rxControls,
-                        const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XServiceInfo >& _rxObject
-                    ) const;
-
 public:
-
-    static UniString getDefaultName(
-                        sal_Int16 nClassId,
-                        const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XServiceInfo >& _rxObject
-                    );
-
     ::rtl::OUString setUniqueName(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent>& xFormComponent, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm>& xControls);
-    ::rtl::OUString getUniqueName(const ::rtl::OUString& rName, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& xNamedSet) const;
 
     void formObjectInserted( const FmFormObj& _object );
     void formObjectRemoved( const FmFormObj& _object );
diff --git a/svx/source/inc/fmresids.hrc b/svx/source/inc/fmresids.hrc
index a5f35af..867d82d 100644
--- a/svx/source/inc/fmresids.hrc
+++ b/svx/source/inc/fmresids.hrc
@@ -214,29 +214,29 @@
 #define RID_STR_SVT_SQL_SYNTAX_COLUMN               (RID_FORMS_START +  98)
 #define RID_STR_PROPTITLE_SCROLLBAR                 (RID_FORMS_START +  99)
 #define RID_STR_PROPTITLE_SPINBUTTON                (RID_FORMS_START + 100)
-#define RID_STR_EDIT_CLASSNAME                      (RID_FORMS_START + 101)
-#define RID_STR_BUTTON_CLASSNAME                    (RID_FORMS_START + 102)
-#define RID_STR_FIXEDTEXT_CLASSNAME                 (RID_FORMS_START + 103)
-#define RID_STR_CHECKBOX_CLASSNAME                  (RID_FORMS_START + 104)
-#define RID_STR_RADIOBUTTON_CLASSNAME               (RID_FORMS_START + 105)
-#define RID_STR_LISTBOX_CLASSNAME                   (RID_FORMS_START + 106)
-#define RID_STR_COMBOBOX_CLASSNAME                  (RID_FORMS_START + 107)
-#define RID_STR_FORMATTED_CLASSNAME                 (RID_FORMS_START + 108)
-#define RID_STR_GROUPBOX_CLASSNAME                  (RID_FORMS_START + 109)
-#define RID_STR_CONTROL_CLASSNAME                   (RID_FORMS_START + 110)
-#define RID_STR_IMAGE_CLASSNAME                     (RID_FORMS_START + 111)
-#define RID_STR_GRID_CLASSNAME                      (RID_FORMS_START + 112)
-#define RID_STR_FILECONTROL_CLASSNAME               (RID_FORMS_START + 113)
-#define RID_STR_DATEFIELD_CLASSNAME                 (RID_FORMS_START + 114)
-#define RID_STR_TIMEFIELD_CLASSNAME                 (RID_FORMS_START + 115)
-#define RID_STR_NUMERICFIELD_CLASSNAME              (RID_FORMS_START + 116)
-#define RID_STR_CURRENCYFIELD_CLASSNAME             (RID_FORMS_START + 117)
-#define RID_STR_PATTERNFIELD_CLASSNAME              (RID_FORMS_START + 118)
-#define RID_STR_IMAGECONTROL_CLASSNAME              (RID_FORMS_START + 119)
-#define RID_STR_HIDDEN_CLASSNAME                    (RID_FORMS_START + 120)
-#define RID_STR_CLASSNAME_SCROLLBAR                 (RID_FORMS_START + 121)
-#define RID_STR_CLASSNAME_SPINBUTTON                (RID_FORMS_START + 122)
-#define RID_STR_NAVBAR_CLASSNAME                    (RID_FORMS_START + 123)
+#define RID_STR_PROPTITLE_HIDDEN                    (RID_FORMS_START + 101)
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
+    // FREE
 #define RID_STR_DATANAVIGATOR                       (RID_FORMS_START + 124)
 #define RID_STR_DATANAV_SUBM_PARENT                 (RID_FORMS_START + 125)
 #define RID_STR_DATANAV_SUBM_ID                     (RID_FORMS_START + 126)
diff --git a/svx/source/inc/formcontrolfactory.hxx b/svx/source/inc/formcontrolfactory.hxx
index c405727..c157a5d 100644
--- a/svx/source/inc/formcontrolfactory.hxx
+++ b/svx/source/inc/formcontrolfactory.hxx
@@ -37,6 +37,8 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/util/XNumberFormats.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
 /** === end UNO includes === **/
 
 #include <memory>
@@ -94,6 +96,21 @@ namespace svxform
                     const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats >& _rxNumberFormats
                 );
 
+        static ::rtl::OUString getDefaultName(
+                    const sal_Int16 nClassId,
+                    const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XServiceInfo >& _rxObject
+                );
+
+        static ::rtl::OUString getDefaultUniqueName_ByComponentType(
+                    const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxContainer,
+                    const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject
+                );
+
+        static ::rtl::OUString getUniqueName(
+                    const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxContainer,
+                    const ::rtl::OUString& _rBaseName
+                );
+
     private:
         ::std::auto_ptr< FormControlFactory_Data >  m_pData;
     };
diff --git a/svx/source/inc/gridcell.hxx b/svx/source/inc/gridcell.hxx
index ff03e1a..2167079 100644
--- a/svx/source/inc/gridcell.hxx
+++ b/svx/source/inc/gridcell.hxx
@@ -42,20 +42,24 @@
 #include <com/sun/star/form/XBoundControl.hpp>
 #include <com/sun/star/awt/XTextComponent.hpp>
 #include <com/sun/star/awt/XListBox.hpp>
+#include <com/sun/star/awt/XComboBox.hpp>
 #include <com/sun/star/awt/TextAlign.hpp>
 #include <com/sun/star/awt/XControlModel.hpp>
 #include <com/sun/star/awt/XControl.hpp>
 #include <com/sun/star/awt/XCheckBox.hpp>
+#include <com/sun/star/awt/XButton.hpp>
 #include <com/sun/star/beans/XFastPropertySet.hpp>
 #include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <com/sun/star/form/XChangeBroadcaster.hpp>
 /** === end UNO includes === **/
 
-#include <tools/rtti.hxx>
-
 #include <comphelper/propmultiplex.hxx>
 #include <comphelper/componentcontext.hxx>
-
 #include <cppuhelper/component.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/rtti.hxx>
 
 class DbCellControl;
 class Edit;
@@ -282,7 +286,11 @@ public:
     virtual ~DbCellControl();
 
 
-    Window* GetControl() const { return m_pWindow; }
+    Window& GetWindow() const
+    {
+        ENSURE_OR_THROW( m_pWindow, "no window" );
+        return *m_pWindow;
+    }
 
     // control alignment
     inline	sal_Bool	isAlignedController() const { return m_bAlignedController; }
@@ -732,20 +740,34 @@ protected:
 //==================================================================
 // Base class providing the access to a grid cell
 //==================================================================
-class FmXGridCell : public ::cppu::OComponentHelper,
-                    public ::com::sun::star::awt::XControl,
-                    public ::com::sun::star::form::XBoundControl
+typedef ::cppu::ImplHelper2 <   ::com::sun::star::awt::XControl
+                            ,   ::com::sun::star::form::XBoundControl
+                            >   FmXGridCell_Base;
+typedef ::cppu::ImplHelper1 <   ::com::sun::star::awt::XWindow
+                            >   FmXGridCell_WindowBase;
+class FmXGridCell   :public ::cppu::OComponentHelper
+                    ,public FmXGridCell_Base
+                    ,public FmXGridCell_WindowBase
 {
 protected:
-    ::osl::Mutex	m_aMutex;
-    DbGridColumn*			m_pColumn;
-    DbCellControl*			m_pCellControl;
+    ::osl::Mutex        m_aMutex;
+    DbGridColumn*       m_pColumn;
+    DbCellControl*      m_pCellControl;
+
+private:
+    ::cppu::OInterfaceContainerHelper	m_aWindowListeners;
+    ::cppu::OInterfaceContainerHelper	m_aFocusListeners;
+    ::cppu::OInterfaceContainerHelper	m_aKeyListeners;
+    ::cppu::OInterfaceContainerHelper	m_aMouseListeners;
+    ::cppu::OInterfaceContainerHelper	m_aMouseMotionListeners;
 
+protected:
     virtual ~FmXGridCell();
+
 public:
     TYPEINFO();
-    FmXGridCell(DbGridColumn* pColumn, DbCellControl* pControl);
-
+    FmXGridCell( DbGridColumn* pColumn, DbCellControl* pControl );
+    void init();
 
     DECLARE_UNO3_AGG_DEFAULTS(FmXGridCell, OComponentHelper);
     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
@@ -754,6 +776,7 @@ public:
     void SetTextLineColor(const Color& _rColor);
 
 // XTypeProvider
+    virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw (::com::sun::star::uno::RuntimeException);
     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
 
 // OComponentHelper
@@ -781,6 +804,25 @@ public:
     virtual sal_Bool SAL_CALL getLock() throw(::com::sun::star::uno::RuntimeException);
     virtual void SAL_CALL setLock(sal_Bool _bLock) throw(::com::sun::star::uno::RuntimeException);
 
+    // XWindow
+    virtual void SAL_CALL setPosSize( ::sal_Int32 X, ::sal_Int32 Y, ::sal_Int32 Width, ::sal_Int32 Height, ::sal_Int16 Flags ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::awt::Rectangle SAL_CALL getPosSize(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL setVisible( ::sal_Bool Visible ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL setEnable( ::sal_Bool Enable ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL setFocus(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+
     sal_Bool Commit() {return m_pCellControl->Commit();}
     void ImplInitWindow( Window& rParent, const InitWindowFacet _eInitWhat )
         { m_pCellControl->ImplInitWindow( rParent, _eInitWhat ); }
@@ -788,6 +830,17 @@ public:
     sal_Bool isAlignedController() const { return m_pCellControl->isAlignedController(); }
     void AlignControl(sal_Int16 nAlignment)
         { m_pCellControl->AlignControl(nAlignment);}
+
+protected:
+    virtual Window* getEventWindow() const;
+    virtual void onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData );
+
+    // default implementations call our focus listeners, don't forget to call them if you override this
+    virtual void onFocusGained( const ::com::sun::star::awt::FocusEvent& _rEvent );
+    virtual void onFocusLost( const ::com::sun::star::awt::FocusEvent& _rEvent );
+
+private:
+    DECL_LINK( OnWindowEvent, VclWindowEvent* );
 };
 
 //==================================================================
@@ -795,7 +848,10 @@ class FmXDataCell : public FmXGridCell
 {
 public:
     TYPEINFO();
-    FmXDataCell(DbGridColumn* pColumn, DbCellControl* pControl):FmXGridCell(pColumn, pControl){}
+    FmXDataCell( DbGridColumn* pColumn, DbCellControl& _rControl )
+        :FmXGridCell( pColumn, &_rControl )
+    {
+    }
 
     virtual void PaintFieldToCell(OutputDevice& rDev,
                const Rectangle& rRect,
@@ -831,11 +887,7 @@ protected:
 
 public:
     TYPEINFO();
-    FmXTextCell( DbGridColumn* pColumn, DbCellControl* pControl )
-        :FmXDataCell( pColumn, pControl )
-        ,m_bFastPaint( sal_True )
-    {
-    }
+    FmXTextCell( DbGridColumn* pColumn, DbCellControl& _rControl );
 
     virtual void PaintFieldToCell(OutputDevice& rDev,
                const Rectangle& rRect,
@@ -849,23 +901,31 @@ public:
 };
 
 //==================================================================
+typedef ::cppu::ImplHelper2 <   ::com::sun::star::awt::XTextComponent
+                            ,   ::com::sun::star::form::XChangeBroadcaster
+                            >   FmXEditCell_Base;
 class FmXEditCell : public FmXTextCell,
-                    public ::com::sun::star::awt::XTextComponent
+                    public FmXEditCell_Base
 {
+private:
+    ::rtl::OUString                     m_sValueOnEnter;
+
 protected:
     ::cppu::OInterfaceContainerHelper	m_aTextListeners;
+    ::cppu::OInterfaceContainerHelper	m_aChangeListeners;
     ::svt::IEditImplementation*         m_pEditImplementation;
     bool                                m_bOwnEditImplementation;
 
     virtual ~FmXEditCell();
 public:
-    FmXEditCell(DbGridColumn* pColumn, DbCellControl* pControl);
+    FmXEditCell( DbGridColumn* pColumn, DbCellControl& _rControl );
 
     DECLARE_UNO3_AGG_DEFAULTS(FmXEditCell, FmXTextCell);
     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
 
 // XTypeProvider
     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
 
 // OComponentHelper
     virtual void SAL_CALL disposing();
@@ -884,26 +944,43 @@ public:
     virtual void SAL_CALL setMaxTextLen(sal_Int16 nLen) throw(::com::sun::star::uno::RuntimeException);
     virtual sal_Int16 SAL_CALL getMaxTextLen() throw(::com::sun::star::uno::RuntimeException);
 
+    // XChangeBroadcaster
+    virtual void SAL_CALL addChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+
 protected:
-    DECL_LINK( OnTextChanged, void* );
+    virtual void onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData );
+
+    virtual void onFocusGained( const ::com::sun::star::awt::FocusEvent& _rEvent );
+    virtual void onFocusLost( const ::com::sun::star::awt::FocusEvent& _rEvent );
+
+private:
+    void onTextChanged();
 };
 
 //==================================================================
+typedef ::cppu::ImplHelper2 <   ::com::sun::star::awt::XCheckBox
+                            ,   ::com::sun::star::awt::XButton
+                            >   FmXCheckBoxCell_Base;
 class FmXCheckBoxCell : public FmXDataCell,
-                        public ::com::sun::star::awt::XCheckBox
+                        public FmXCheckBoxCell_Base
 {
     ::cppu::OInterfaceContainerHelper	m_aItemListeners;
+    ::cppu::OInterfaceContainerHelper	m_aActionListeners;
+    ::rtl::OUString                     m_aActionCommand;
     CheckBox*							m_pBox;
+
 protected:
     virtual ~FmXCheckBoxCell();
-public:
-    FmXCheckBoxCell(DbGridColumn* pColumn, DbCellControl* pControl);
 
+public:
+    FmXCheckBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl );
 
 // UNO
     DECLARE_UNO3_AGG_DEFAULTS(FmXCheckBoxCell, FmXDataCell);
     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
 
 // OComponentHelper
     virtual void SAL_CALL disposing();
@@ -916,26 +993,37 @@ public:
     virtual void SAL_CALL setLabel(const ::rtl::OUString& Label) throw(::com::sun::star::uno::RuntimeException);
     virtual void SAL_CALL enableTriState(sal_Bool b) throw(::com::sun::star::uno::RuntimeException);
 
+    // XButton
+    virtual void SAL_CALL addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l ) throw (::com::sun::star::uno::RuntimeException);
+    //virtual void SAL_CALL setLabel( const ::rtl::OUString& Label ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL setActionCommand( const ::rtl::OUString& Command ) throw (::com::sun::star::uno::RuntimeException);
+
 protected:
-    DECL_LINK( OnClick, void* );
+    virtual Window* getEventWindow() const;
+    virtual void onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData );
 };
 
 //==================================================================
-class FmXListBoxCell : public FmXTextCell,
-                       public ::com::sun::star::awt::XListBox
+typedef ::cppu::ImplHelper1 <   ::com::sun::star::awt::XListBox
+                            >   FmXListBoxCell_Base;
+class FmXListBoxCell    :public FmXTextCell
+                        ,public FmXListBoxCell_Base
 {
     ::cppu::OInterfaceContainerHelper	m_aItemListeners,
                                         m_aActionListeners;
     ListBox*							m_pBox;
+
 protected:
     virtual ~FmXListBoxCell();
-public:
-    FmXListBoxCell(DbGridColumn* pColumn, DbCellControl* pControl);
 
+public:
+    FmXListBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl );
 
     DECLARE_UNO3_AGG_DEFAULTS(FmXListBoxCell, FmXTextCell);
     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
 
 // OComponentHelper
     virtual void SAL_CALL disposing();
@@ -965,14 +1053,60 @@ public:
     virtual void SAL_CALL SAL_CALL makeVisible(sal_Int16 nEntry) throw(::com::sun::star::uno::RuntimeException);
 
 protected:
-    DECL_LINK( OnSelect, VclWindowEvent* );
+    virtual void onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData );
+
     DECL_LINK( OnDoubleClick, void* );
 };
 
 //==================================================================
+typedef ::cppu::ImplHelper1 <   ::com::sun::star::awt::XComboBox
+                            >   FmXComboBoxCell_Base;
+class FmXComboBoxCell   :public FmXTextCell
+                        ,public FmXComboBoxCell_Base
+{
+private:
+    ::cppu::OInterfaceContainerHelper	m_aItemListeners,
+                                        m_aActionListeners;
+    ComboBox*                           m_pComboBox;
+
+protected:
+    virtual ~FmXComboBoxCell();
+
+public:
+    FmXComboBoxCell( DbGridColumn* pColumn, DbCellControl& _rControl );
+
+    DECLARE_UNO3_AGG_DEFAULTS(FmXListBoxCell, FmXTextCell);
+    virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
+
+    // OComponentHelper
+    virtual void SAL_CALL disposing();
+
+    // XComboBox
+    virtual void SAL_CALL addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addItem( const ::rtl::OUString& _Item, ::sal_Int16 _Pos ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _Items, ::sal_Int16 _Pos ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeItems( ::sal_Int16 nPos, ::sal_Int16 nCount ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::sal_Int16 SAL_CALL getItemCount(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::rtl::OUString SAL_CALL getItem( ::sal_Int16 _Pos ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getItems(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::sal_Int16 SAL_CALL getDropDownLineCount(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL setDropDownLineCount( ::sal_Int16 _Lines ) throw (::com::sun::star::uno::RuntimeException);
+
+protected:
+    virtual void onWindowEvent( const ULONG _nEventId, const Window& _rWindow, const void* _pEventData );
+};
+
+//==================================================================
+typedef ::cppu::ImplHelper2 <   ::com::sun::star::awt::XTextComponent
+                            ,   ::com::sun::star::lang::XUnoTunnel
+                            >   FmXFilterCell_Base;
 class FmXFilterCell :public FmXGridCell
-                    ,public ::com::sun::star::awt::XTextComponent
-                    ,public ::com::sun::star::lang::XUnoTunnel
+                    ,public FmXFilterCell_Base
 {
     ::cppu::OInterfaceContainerHelper m_aTextListeners;
 protected:
@@ -985,6 +1119,7 @@ public:
     DECLARE_UNO3_AGG_DEFAULTS(FmXFilterCell, FmXGridCell);
     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
 
 // XUnoTunnel
     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx
index c58794c..7f384a7 100644
--- a/uui/source/iahndl.cxx
+++ b/uui/source/iahndl.cxx
@@ -438,10 +438,12 @@ public:
         star::uno::Reference< star::task::XInteractionRequest > const &
         rRequest)
         : osl::Condition(),
-          m_rRequest(rRequest)
+          m_rRequest(rRequest),
+          bHandled( false )
     {
     }
     star::uno::Reference< star::task::XInteractionRequest > m_rRequest;
+    bool                                                    bHandled;
     star::beans::Optional< rtl::OUString >                  m_aResult;
 };
 
@@ -450,13 +452,13 @@ long UUIInteractionHelper::handlerequest(
 {
     HandleData* pHND = (HandleData*) pHandleData;
     UUIInteractionHelper* pUUI = (UUIInteractionHelper*) pInteractionHelper;
-    pUUI->handle_impl(pHND->m_rRequest);
+    pHND->bHandled = pUUI->handle_impl(pHND->m_rRequest);
     pHND->set();
     return 0;
 }
 
 
-void
+bool
 UUIInteractionHelper::handleRequest(
     star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
     throw (star::uno::RuntimeException)
@@ -477,9 +479,10 @@ UUIInteractionHelper::handleRequest(
         ULONG locks = Application::ReleaseSolarMutex();
         aHD.wait();
         Application::AcquireSolarMutex(locks);
+        return aHD.bHandled;
     }
     else
-        handle_impl(rRequest);
+        return handle_impl(rRequest);
 }
 
 long UUIInteractionHelper::getstringfromrequest(
@@ -1282,7 +1285,7 @@ bool UUIInteractionHelper::handleErrorHandlerRequests(
     return false;
 }
 
-void
+bool
 UUIInteractionHelper::handle_impl(
     star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
     throw (star::uno::RuntimeException)
@@ -1290,7 +1293,7 @@ UUIInteractionHelper::handle_impl(
     try
     {
         if (!rRequest.is())
-            return;
+            return false;
 
         ////////////////////////////////////////////////////////////
         // Display Messagebox
@@ -1329,8 +1332,9 @@ UUIInteractionHelper::handle_impl(
                         OSL_ENSURE( xInteractionHandler.is(), "Custom Interactionhandler does not implement mandatory interface XInteractionHandler2!" );
                         if (xInteractionHandler.is())
                             if (xInteractionHandler->handleInteractionRequest(rRequest))
-                                break;
+                                return true;
                     } 
+                    return false;
                 }
             }
         }
@@ -1341,6 +1345,7 @@ UUIInteractionHelper::handle_impl(
             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
             star::uno::Reference< star::uno::XInterface >());
     }
+    return true;
 }
 
 void UUIInteractionHelper::GetInteractionHandlerList(InteractionHandlerDataList &rdataList)
diff --git a/uui/source/iahndl.hxx b/uui/source/iahndl.hxx
index 9475e72..ba09ba3 100644
--- a/uui/source/iahndl.hxx
+++ b/uui/source/iahndl.hxx
@@ -136,7 +136,7 @@ public:
 
     ~UUIInteractionHelper() SAL_THROW(());
 
-    void
+    bool
     handleRequest(com::sun::star::uno::Reference<
               com::sun::star::task::XInteractionRequest > const &
                   rRequest)
@@ -149,7 +149,7 @@ public:
         throw (com::sun::star::uno::RuntimeException);
 
 private:
-    void
+    bool
     handle_impl(com::sun::star::uno::Reference<
                     com::sun::star::task::XInteractionRequest > const &
                 rRequest)
diff --git a/uui/source/interactionhandler.cxx b/uui/source/interactionhandler.cxx
index b069359..dd8a875 100644
--- a/uui/source/interactionhandler.cxx
+++ b/uui/source/interactionhandler.cxx
@@ -31,10 +31,10 @@
 #include "iahndl.hxx"
 #include "interactionhandler.hxx"
 
-using namespace com::sun;
+using namespace com::sun::star;
 
 UUIInteractionHandler::UUIInteractionHandler(
-    star::uno::Reference< star::lang::XMultiServiceFactory > const &
+    uno::Reference< lang::XMultiServiceFactory > const &
         rServiceFactory)
     SAL_THROW(())
         : m_xServiceFactory(rServiceFactory),
@@ -48,16 +48,16 @@ UUIInteractionHandler::~UUIInteractionHandler()
 }
 
 rtl::OUString SAL_CALL UUIInteractionHandler::getImplementationName()
-    throw (star::uno::RuntimeException)
+    throw (uno::RuntimeException)
 {
     return rtl::OUString::createFromAscii(m_aImplementationName);
 }
 
 sal_Bool SAL_CALL
 UUIInteractionHandler::supportsService(rtl::OUString const & rServiceName)
-    throw (star::uno::RuntimeException)
+    throw (uno::RuntimeException)
 {
-    star::uno::Sequence< rtl::OUString > 
+    uno::Sequence< rtl::OUString > 
     aNames(getSupportedServiceNames_static());
     for (sal_Int32 i = 0; i < aNames.getLength(); ++i)
         if (aNames[i] == rServiceName)
@@ -65,17 +65,17 @@ UUIInteractionHandler::supportsService(rtl::OUString const & rServiceName)
     return false;
 }
 
-star::uno::Sequence< rtl::OUString > SAL_CALL
+uno::Sequence< rtl::OUString > SAL_CALL
 UUIInteractionHandler::getSupportedServiceNames()
-    throw (star::uno::RuntimeException)
+    throw (uno::RuntimeException)
 {
     return getSupportedServiceNames_static();
 }
 
 void SAL_CALL
 UUIInteractionHandler::initialize(
-    star::uno::Sequence< star::uno::Any > const & rArguments)
-    throw (star::uno::Exception)
+    uno::Sequence< uno::Any > const & rArguments)
+    throw (uno::Exception)
 {
     delete m_pImpl;
     m_pImpl = new UUIInteractionHelper(m_xServiceFactory, rArguments);
@@ -83,26 +83,40 @@ UUIInteractionHandler::initialize(
 
 void SAL_CALL
 UUIInteractionHandler::handle(
-    star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
-    throw (star::uno::RuntimeException)
+    uno::Reference< task::XInteractionRequest > const & rRequest)
+    throw (uno::RuntimeException)
 {
     try
     {
         m_pImpl->handleRequest(rRequest);
     }
-    catch (star::uno::RuntimeException const & ex)
+    catch (uno::RuntimeException const & ex)
     {
-        throw star::uno::RuntimeException(ex.Message, *this);
+        throw uno::RuntimeException(ex.Message, *this);
     }
 }
 
+::sal_Bool SAL_CALL UUIInteractionHandler::handleInteractionRequest(
+    const uno::Reference< task::XInteractionRequest >& _Request ) throw ( uno::RuntimeException )
+{
+    try
+    {
+        return m_pImpl->handleRequest( _Request );
+    }
+    catch (uno::RuntimeException const & ex)
+    {
+        throw uno::RuntimeException( ex.Message, *this );
+    }
+    return sal_False;
+}
+
 char const UUIInteractionHandler::m_aImplementationName[]
     = "com.sun.star.comp.uui.UUIInteractionHandler";
 
-star::uno::Sequence< rtl::OUString >
+uno::Sequence< rtl::OUString >
 UUIInteractionHandler::getSupportedServiceNames_static()
 {
-    star::uno::Sequence< rtl::OUString > aNames(3);
+    uno::Sequence< rtl::OUString > aNames(3);
     aNames[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
                     "com.sun.star.task.InteractionHandler"));
     // added to indicate support for configuration.backend.MergeRecoveryRequest
@@ -114,11 +128,11 @@ UUIInteractionHandler::getSupportedServiceNames_static()
     return aNames;
 }
 
-star::uno::Reference< star::uno::XInterface > SAL_CALL
+uno::Reference< uno::XInterface > SAL_CALL
 UUIInteractionHandler::createInstance(
-    star::uno::Reference< star::lang::XMultiServiceFactory > const &
+    uno::Reference< lang::XMultiServiceFactory > const &
         rServiceFactory)
-    SAL_THROW((star::uno::Exception))
+    SAL_THROW((uno::Exception))
 {
     try
     {
@@ -126,7 +140,7 @@ UUIInteractionHandler::createInstance(
     }
     catch (std::bad_alloc const &)
     {
-        throw star::uno::RuntimeException(
+        throw uno::RuntimeException(
         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
         0);
     }
diff --git a/uui/source/interactionhandler.hxx b/uui/source/interactionhandler.hxx
index 63596fd..d420507 100644
--- a/uui/source/interactionhandler.hxx
+++ b/uui/source/interactionhandler.hxx
@@ -33,7 +33,7 @@
 
 #include "com/sun/star/lang/XInitialization.hpp"
 #include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/task/XInteractionHandler.hpp"
+#include "com/sun/star/task/XInteractionHandler2.hpp"
 #include "cppuhelper/implbase3.hxx"
 
 class UUIInteractionHelper;
@@ -41,7 +41,7 @@ class UUIInteractionHelper;
 class UUIInteractionHandler:
     public cppu::WeakImplHelper3< com::sun::star::lang::XServiceInfo,
                                   com::sun::star::lang::XInitialization,
-                                  com::sun::star::task::XInteractionHandler >
+                                  com::sun::star::task::XInteractionHandler2 >
 {
 public:
     static char const m_aImplementationName[];
@@ -95,6 +95,10 @@ private:
        rRequest)
         throw (com::sun::star::uno::RuntimeException);
 
+    virtual ::sal_Bool SAL_CALL
+        handleInteractionRequest(
+            const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& _Request
+        )   throw ( ::com::sun::star::uno::RuntimeException );
 };
 
 #endif // UUI_INTERACTIONHANDLER_HXX
commit f779271dc4c7f587213ab73512ed4a29853dee50
Author: Kurt Zenker <kz at openoffice.org>
Date:   Mon Sep 14 10:57:16 2009 +0000

    CWS-TOOLING: integrate CWS chart41
    2009-09-07 11:17:59 +0200 iha  r275880 : #i104854# ODF: Fallback to bar chart for surface charts as long as surface charts are not implemented
    2009-09-03 10:07:24 +0200 iha  r275745 : #i104020# Y axis scaling  problem with stock chart
    2009-09-02 17:11:42 +0200 iha  r275723 : #i103984# XChartDataArray / setDataArray broken
    2009-09-02 17:05:16 +0200 iha  r275721 : #i103984# XChartDataArray / setDataArray broken
    2009-08-31 18:18:21 +0200 iha  r275629 : #i103076# ODF, chart from MS-Office2007sp2 doesn't load  caused be different  xlink:href syntax
    2009-08-28 18:35:52 +0200 iha  r275548 : #i103460# ODF charts without svg:width and svg:height are not imported correctly
    2009-08-28 18:35:25 +0200 iha  r275547 : #i103460# ODF charts without svg:width and svg:height are not imported correctly
    2009-08-28 18:25:45 +0200 iha  r275546 : #i103460# ODF charts without svg:width and svg:height are not imported correctly
    2009-08-28 18:23:21 +0200 iha  r275544 : #i103460# ODF charts without svg:width and svg:height are not imported correctly
    2009-08-28 18:18:34 +0200 iha  r275543 : #i103460# ODF charts without svg:width and svg:height are not imported correctly
    2009-08-27 15:57:20 +0200 iha  r275490 : #i104160# report designer broken

diff --git a/embeddedobj/source/commonembedding/embedobj.cxx b/embeddedobj/source/commonembedding/embedobj.cxx
index 868f778..799e865 100644
--- a/embeddedobj/source/commonembedding/embedobj.cxx
+++ b/embeddedobj/source/commonembedding/embedobj.cxx
@@ -696,3 +696,9 @@ void SAL_CALL OCommonEmbeddedObject::setParent( const com::sun::star::uno::Refer
     }
 }
 
+// XDefaultSizeTransmitter
+void SAL_CALL OCommonEmbeddedObject::setDefaultSize( const ::com::sun::star::awt::Size& rSize_100TH_MM ) throw (::com::sun::star::uno::RuntimeException)
+{
+    //#i103460# charts do not necessaryly have an own size within ODF files, in this case they need to use the size settings from the surrounding frame, which is made available with this method
+    m_aDefaultSizeForChart_In_100TH_MM = rSize_100TH_MM;
+}
diff --git a/embeddedobj/source/commonembedding/miscobj.cxx b/embeddedobj/source/commonembedding/miscobj.cxx
index 5a2bc87..c99f477 100644
--- a/embeddedobj/source/commonembedding/miscobj.cxx
+++ b/embeddedobj/source/commonembedding/miscobj.cxx
@@ -361,9 +361,14 @@ uno::Any SAL_CALL OCommonEmbeddedObject::queryInterface( const uno::Type& rType
 {
     uno::Any aReturn;
 
-    aReturn <<= ::cppu::queryInterface(
+    if ( rType == ::getCppuType( (uno::Reference< embed::XEmbeddedObject > const *)0 ))
+    {
+        void * p = static_cast< embed::XEmbeddedObject * >( this );
+        return uno::Any( &p, rType );
+    }
+    else
+        aReturn <<= ::cppu::queryInterface(
                     rType,
-                    static_cast< embed::XEmbeddedObject* >( this ),
                     static_cast< embed::XInplaceObject* >( this ),
                     static_cast< embed::XVisualObject* >( this ),
                     static_cast< embed::XCommonEmbedPersist* >( static_cast< embed::XEmbedPersist* >( this ) ),
@@ -374,6 +379,7 @@ uno::Any SAL_CALL OCommonEmbeddedObject::queryInterface( const uno::Type& rType
                     static_cast< embed::XComponentSupplier* >( this ),
                     static_cast< util::XCloseable* >( this ),
                     static_cast< container::XChild* >( this ),
+                    static_cast< chart2::XDefaultSizeTransmitter* >( this ),
                     static_cast< document::XEventBroadcaster* >( this ) );
 
     if ( aReturn.hasValue() )
diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx
index 8310ebc..bd2ffcf 100644
--- a/embeddedobj/source/commonembedding/persistence.cxx
+++ b/embeddedobj/source/commonembedding/persistence.cxx
@@ -58,6 +58,7 @@
 #include <com/sun/star/util/XCloseable.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/beans/IllegalTypeException.hpp>
+#include <com/sun/star/chart2/XChartDocument.hpp>
 
 #include <comphelper/fileformat.h>
 #include <comphelper/storagehelper.hxx>
@@ -463,6 +464,15 @@ uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadDocumentFromStorag
     uno::Reference< util::XCloseable > xDocument( CreateDocument( m_xFactory, GetDocumentServiceName(),
                                                 m_bEmbeddedScriptSupport ) );
 
+    //#i103460# ODF: take the size given from the parent frame as default
+    uno::Reference< chart2::XChartDocument > xChart( xDocument, uno::UNO_QUERY );
+    if( xChart.is() )
+    {
+        uno::Reference< embed::XVisualObject > xChartVisualObject( xChart, uno::UNO_QUERY );
+        if( xChartVisualObject.is() )
+            xChartVisualObject->setVisualAreaSize( embed::Aspects::MSOLE_CONTENT, m_aDefaultSizeForChart_In_100TH_MM );
+    }
+
     uno::Reference< frame::XLoadable > xLoadable( xDocument, uno::UNO_QUERY );
     uno::Reference< document::XStorageBasedDocument > xDoc
 #ifdef USE_STORAGEBASED_DOCUMENT
diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx
index 2f4c8de..9139409 100644
--- a/embeddedobj/source/inc/commonembobj.hxx
+++ b/embeddedobj/source/inc/commonembobj.hxx
@@ -47,6 +47,7 @@
 #include <com/sun/star/awt/Rectangle.hpp>
 #include <com/sun/star/document/XEventBroadcaster.hpp>
 #include <com/sun/star/util/XCloseable.hpp>
+#include <com/sun/star/chart2/XDefaultSizeTransmitter.hpp>
 #include <cppuhelper/weak.hxx>
 
 namespace com { namespace sun { namespace star {
@@ -85,6 +86,7 @@ class OCommonEmbeddedObject : public ::com::sun::star::embed::XEmbeddedObject
                             , public ::com::sun::star::embed::XLinkageSupport
                             , public ::com::sun::star::embed::XInplaceObject
                             , public ::com::sun::star::container::XChild
+                            , public ::com::sun::star::chart2::XDefaultSizeTransmitter
                             , public ::cppu::OWeakObject
 {
 protected:
@@ -159,6 +161,7 @@ protected:
     sal_Bool m_bHasClonedSize; // the object has cached size
     ::com::sun::star::awt::Size m_aClonedSize;
     sal_Int32 m_nClonedMapUnit;
+    ::com::sun::star::awt::Size m_aDefaultSizeForChart_In_100TH_MM;//#i103460# charts do not necessaryly have an own size within ODF files, in this case they need to use the size settings from the surrounding frame, which is made available with this member
 
 private:
     void CommonInit_Impl( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aObjectProps );
@@ -492,6 +495,10 @@ public:
     // XChild
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent(  ) 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);
+
+    // XDefaultSizeTransmitter
+    //#i103460# charts do not necessaryly have an own size within ODF files, in this case they need to use the size settings from the surrounding frame, which is made available with this method
+    virtual void SAL_CALL setDefaultSize( const ::com::sun::star::awt::Size& rSize_100TH_MM ) throw (::com::sun::star::uno::RuntimeException);
 };
 
 #endif
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 37281e1..1e89aab 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -1867,6 +1867,14 @@ void SdrOle2Obj::NbcSetSnapRect(const Rectangle& rRect)
     SdrRectObj::NbcSetSnapRect(rRect);
     if( pModel && !pModel->isLocked() )
         ImpSetVisAreaSize();
+
+    if ( xObjRef.is() && IsChart() )
+    {
+        //#i103460# charts do not necessaryly have an own size within ODF files,
+        //for this case they need to use the size settings from the surrounding frame,
+        //which is made available with this method as there is no other way
+        xObjRef.SetDefaultSizeForChart( Size( rRect.GetWidth(), rRect.GetHeight() ) );
+    }
 }
 
 // -----------------------------------------------------------------------------
diff --git a/svx/source/xml/xmleohlp.cxx b/svx/source/xml/xmleohlp.cxx
index 47056a2..8b94cf3 100644
--- a/svx/source/xml/xmleohlp.cxx
+++ b/svx/source/xml/xmleohlp.cxx
@@ -326,11 +326,29 @@ sal_Bool SvXMLEmbeddedObjectHelper::ImplGetStorageNames(
         }
         else
         {
-            sal_Int32 nPathStart = 0;
-            if( 0 == aURLNoPar.compareToAscii( "./", 2 ) )
-                nPathStart = 2;
-            if( _nPos >= nPathStart )
-                rContainerStorageName = aURLNoPar.copy( nPathStart, _nPos-nPathStart);
+            //eliminate 'superfluous' slashes at start and end
+            //#i103076# load objects with all allowed xlink:href syntaxes
+            {
+                //eliminate './' at start
+                sal_Int32 nStart = 0;
+                sal_Int32 nCount = aURLNoPar.getLength();
+                if( 0 == aURLNoPar.compareToAscii( "./", 2 ) )
+                {
+                    nStart = 2;
+                    nCount -= 2;
+                }
+
+                //eliminate '/' at end
+                sal_Int32 nEnd = aURLNoPar.lastIndexOf( '/' );
+                if( nEnd == aURLNoPar.getLength()-1 && nEnd != (nStart-1) )
+                    nCount--;
+
+                aURLNoPar = aURLNoPar.copy( nStart, nCount );
+            }
+
+            _nPos = aURLNoPar.lastIndexOf( '/' );
+            if( _nPos >= 0 )
+                rContainerStorageName = aURLNoPar.copy( 0, _nPos );
             rObjectStorageName = aURLNoPar.copy( _nPos+1 );
         }
     }
diff --git a/xmloff/inc/xmloff/xmltoken.hxx b/xmloff/inc/xmloff/xmltoken.hxx
index 0010b61..20ccb24 100644
--- a/xmloff/inc/xmloff/xmltoken.hxx
+++ b/xmloff/inc/xmloff/xmltoken.hxx
@@ -3075,6 +3075,7 @@ namespace xmloff { namespace token {
         XML_AT_AXIS,
         XML_AT_LABELS_AND_AXIS,
         XML_FILLED_RADAR,
+        XML_SURFACE,
 
         // MathML only
         XML_MATHVARIANT, 
diff --git a/xmloff/source/chart/SchXMLChartContext.cxx b/xmloff/source/chart/SchXMLChartContext.cxx
index f44f23a..5125a37 100644
--- a/xmloff/source/chart/SchXMLChartContext.cxx
+++ b/xmloff/source/chart/SchXMLChartContext.cxx
@@ -318,7 +318,12 @@ void SchXMLChartContext::StartElement( const uno::Reference< xml::sax::XAttribut
     // parse attributes
     sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0;
     const SvXMLTokenMap& rAttrTokenMap = mrImportHelper.GetChartAttrTokenMap();
-    awt::Size aChartSize;
+
+    uno::Reference< embed::XVisualObject > xVisualObject( mrImportHelper.GetChartDocument(), uno::UNO_QUERY);
+    DBG_ASSERT(xVisualObject.is(),"need xVisualObject for page size");
+    if( xVisualObject.is() )
+        maChartSize = xVisualObject->getVisualAreaSize( embed::Aspects::MSOLE_CONTENT ); //#i103460# take the size given from the parent frame as default
+
     // this flag is necessarry for pie charts in the core
     sal_Bool bSetSwitchData = sal_False;
 
@@ -377,11 +382,11 @@ void SchXMLChartContext::StartElement( const uno::Reference< xml::sax::XAttribut
                 break;
 
             case XML_TOK_CHART_WIDTH:
-                GetImport().GetMM100UnitConverter().convertMeasure( aChartSize.Width, aValue );
+                GetImport().GetMM100UnitConverter().convertMeasure( maChartSize.Width, aValue );
                 break;
 
             case XML_TOK_CHART_HEIGHT:
-                GetImport().GetMM100UnitConverter().convertMeasure( aChartSize.Height, aValue );
+                GetImport().GetMM100UnitConverter().convertMeasure( maChartSize.Height, aValue );
                 break;
 
             case XML_TOK_CHART_STYLE_NAME:
@@ -406,8 +411,12 @@ void SchXMLChartContext::StartElement( const uno::Reference< xml::sax::XAttribut
         maChartTypeServiceName = SchXMLTools::GetChartTypeByClassName( aChartClass_Bar, false /* bUseOldNames */ );
     }
 
-    InitChart (aChartSize, aOldChartTypeName, bSetSwitchData);
-    
+    //	Set the size of the draw page.
+    if( xVisualObject.is() )
+        xVisualObject->setVisualAreaSize( embed::Aspects::MSOLE_CONTENT, maChartSize );
+
+    InitChart( aOldChartTypeName, bSetSwitchData);
+        
     if( bHasAddin )
     {
         //correct charttype serveice name when having an addin
@@ -1198,11 +1207,9 @@ SvXMLImportContext* SchXMLChartContext::CreateChildContext(
         4.	Set the chart type.
 */
 void SchXMLChartContext::InitChart(
-    awt::Size aChartSize,
     const OUString & rChartTypeServiceName, // currently the old service name
     sal_Bool /* bSetSwitchData */ )
 {
-    maChartSize = aChartSize;
     uno::Reference< chart::XChartDocument > xDoc = mrImportHelper.GetChartDocument();
     DBG_ASSERT( xDoc.is(), "No valid document!" );
     uno::Reference< frame::XModel > xModel (xDoc, uno::UNO_QUERY );
@@ -1217,12 +1224,6 @@ void SchXMLChartContext::InitChart(
             xTitled->setTitleObject( 0 );
     }
 
-    //	Set the size of the draw page.
-    uno::Reference< embed::XVisualObject > xVisualObject(xModel,uno::UNO_QUERY);
-    DBG_ASSERT(xVisualObject.is(),"need xVisualObject for page size");
-    if( xVisualObject.is() )
-        xVisualObject->setVisualAreaSize( embed::Aspects::MSOLE_CONTENT, aChartSize );
-
     //	Set the chart type via setting the diagram.
     if( rChartTypeServiceName.getLength() &&
         xDoc.is())
diff --git a/xmloff/source/chart/SchXMLChartContext.hxx b/xmloff/source/chart/SchXMLChartContext.hxx
index bfb823f..076cde7 100644
--- a/xmloff/source/chart/SchXMLChartContext.hxx
+++ b/xmloff/source/chart/SchXMLChartContext.hxx
@@ -138,15 +138,12 @@ private:
     ::com::sun::star::awt::Size maChartSize;
 
     /**	@descr	This method bundles some settings to the chart model and executes them with
-            a locked controller.  This includes setting the draw page size and setting
-            the chart type.
-        @param	aChartSize	The size the draw page will be set to.
+            a locked controller.  This includes setting the chart type.
         @param	aServiceName The name of the service the diagram is initialized with.
         @param	bSetWitchData	Indicates wether the data set takes it's data series from
             rows or from columns.
     */
-    void	InitChart	(com::sun::star::awt::Size aChartSize,
-                        const ::rtl::OUString & rChartTypeServiceName,
+    void	InitChart	(const ::rtl::OUString & rChartTypeServiceName,
                         sal_Bool bSetSwitchData);
 
     void MergeSeriesForStockChart();
diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx
index 25bcf43..56daa7b 100644
--- a/xmloff/source/chart/SchXMLExport.cxx
+++ b/xmloff/source/chart/SchXMLExport.cxx
@@ -93,6 +93,7 @@
 #include <com/sun/star/chart2/data/XDataSink.hpp>
 #include <com/sun/star/chart2/data/XDataReceiver.hpp>
 #include <com/sun/star/chart2/data/XDataProvider.hpp>
+#include <com/sun/star/chart2/data/XDatabaseDataProvider.hpp>
 #include <com/sun/star/chart2/data/XRangeXMLConversion.hpp>
 #include <com/sun/star/chart2/data/XTextualDataSequence.hpp>
 #include <com/sun/star/chart2/data/XNumericalDataSequence.hpp>
@@ -1123,6 +1124,12 @@ void SchXMLExportHelper::parseDocument( Reference< chart::XChartDocument >& rCha
             OUString aDataProviderURL( RTL_CONSTASCII_USTRINGPARAM( ".." ) );
             if( xNewDoc->hasInternalDataProvider() )
                 aDataProviderURL = OUString( RTL_CONSTASCII_USTRINGPARAM( "." ) );
+            else //special handling for data base data provider necessary
+            {
+                Reference< chart2::data::XDatabaseDataProvider > xDBDataProvider( xNewDoc->getDataProvider(), uno::UNO_QUERY );
+                if( xDBDataProvider.is() )
+                    aDataProviderURL = OUString( RTL_CONSTASCII_USTRINGPARAM( "." ) );
+            }
             mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, aDataProviderURL );
         }
 
diff --git a/xmloff/source/chart/SchXMLTools.cxx b/xmloff/source/chart/SchXMLTools.cxx
index 40828bf..6a600a4 100644
--- a/xmloff/source/chart/SchXMLTools.cxx
+++ b/xmloff/source/chart/SchXMLTools.cxx
@@ -173,6 +173,7 @@ static __FAR_DATA SvXMLEnumMapEntry aXMLChartClassMap[] =
     { XML_BAR,			XML_CHART_CLASS_BAR		},
     { XML_STOCK,		XML_CHART_CLASS_STOCK	},
     { XML_BUBBLE,		XML_CHART_CLASS_BUBBLE	},
+    { XML_SURFACE,		XML_CHART_CLASS_BAR	    }, //@todo change this if a surface chart is available
     { XML_ADD_IN,       XML_CHART_CLASS_ADDIN   },
     { XML_TOKEN_INVALID, XML_CHART_CLASS_UNKNOWN }
 };
@@ -293,6 +294,14 @@ OUString GetChartTypeByClassName(
         else
             aResultBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM("CandleStick"));
     }
+    else if( IsXMLToken( rClassName, XML_SURFACE ))
+    {
+        //@todo change this if a surface chart is available
+        if( bUseOldNames )
+            aResultBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM("Bar"));
+        else
+            aResultBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM("Column"));
+    }
     else
         bInternalType = false;
 
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 70319b4..0dde523 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -3077,7 +3077,8 @@ namespace xmloff { namespace token {
         TOKEN( "at-axis",               XML_AT_AXIS ),
         TOKEN( "at-labels-and-axis",    XML_AT_LABELS_AND_AXIS ),
         TOKEN( "filled-radar",                    XML_FILLED_RADAR ),
-
+        TOKEN( "surface",               XML_SURFACE ),
+        
         TOKEN( "mathvariant",           XML_MATHVARIANT ),
         TOKEN( "mathsize",              XML_MATHSIZE ),
         TOKEN( "mathweight",            XML_MATHWEIGHT ),


More information about the ooo-build-commit mailing list