diff --git a/basic/inc/basic/basmgr.hxx b/basic/inc/basic/basmgr.hxx
index da63da89ea81..d8cc5498dfd5 100644
--- a/basic/inc/basic/basmgr.hxx
+++ b/basic/inc/basic/basmgr.hxx
@@ -237,6 +237,13 @@ public:
*/
bool LegacyPsswdBinaryLimitExceeded( ::com::sun::star::uno::Sequence< rtl::OUString >& _out_rModuleNames );
+ /// determines whether the Basic Manager has a given macro, given by fully qualified name
+ bool HasMacro( String const& i_fullyQualifiedName ) const;
+ /// executes a given macro
+ ErrCode ExecuteMacro( String const& i_fullyQualifiedName, SbxArray* i_arguments, SbxValue* i_retValue );
+ /// executes a given macro
+ ErrCode ExecuteMacro( String const& i_fullyQualifiedName, String const& i_commaSeparatedArgs, SbxValue* i_retValue );
+
private:
sal_Bool IsReference( sal_uInt16 nLib );
diff --git a/basic/source/app/appedit.cxx b/basic/source/app/appedit.cxx
index e51fd41ea3af..9aa06ffad38e 100644
--- a/basic/source/app/appedit.cxx
+++ b/basic/source/app/appedit.cxx
@@ -201,8 +201,8 @@ long AppEdit::InitMenu( Menu* pMenu )
if( pDataEdit )
{
- sal_uInt16 UndoCount = ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetUndoManager().GetUndoActionCount();
- sal_uInt16 RedoCount = ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetUndoManager().GetRedoActionCount();
+ size_t UndoCount = ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetUndoManager().GetUndoActionCount();
+ size_t RedoCount = ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetUndoManager().GetRedoActionCount();
pMenu->EnableItem( RID_EDITUNDO, UndoCount > 0 );
pMenu->EnableItem( RID_EDITREDO, RedoCount > 0 );
diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx
index d1f68fed511b..bb686c765f4c 100644
--- a/basic/source/basmgr/basmgr.cxx
+++ b/basic/source/basmgr/basmgr.cxx
@@ -42,6 +42,8 @@
#include
#include
#include
+#include
+#include
#include
#include
@@ -1868,6 +1870,116 @@ bool BasicManager::LegacyPsswdBinaryLimitExceeded( ::com::sun::star::uno::Sequen
return false;
}
+
+namespace
+{
+ SbMethod* lcl_queryMacro( BasicManager* i_manager, String const& i_fullyQualifiedName )
+ {
+ sal_uInt16 nLast = 0;
+ String sMacro = i_fullyQualifiedName;
+ String sLibName = sMacro.GetToken( 0, '.', nLast );
+ String sModule = sMacro.GetToken( 0, '.', nLast );
+ sMacro.Erase( 0, nLast );
+
+ IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
+ const CollatorWrapper* pCollator = aIntlWrapper.getCollator();
+ sal_uInt16 nLibCount = i_manager->GetLibCount();
+ for ( sal_uInt16 nLib = 0; nLib < nLibCount; ++nLib )
+ {
+ if ( COMPARE_EQUAL == pCollator->compareString( i_manager->GetLibName( nLib ), sLibName ) )
+ {
+ StarBASIC* pLib = i_manager->GetLib( nLib );
+ if( !pLib )
+ {
+ i_manager->LoadLib( nLib );
+ pLib = i_manager->GetLib( nLib );
+ }
+
+ if( pLib )
+ {
+ sal_uInt16 nModCount = pLib->GetModules()->Count();
+ for( sal_uInt16 nMod = 0; nMod < nModCount; ++nMod )
+ {
+ SbModule* pMod = (SbModule*)pLib->GetModules()->Get( nMod );
+ if ( pMod && COMPARE_EQUAL == pCollator->compareString( pMod->GetName(), sModule ) )
+ {
+ SbMethod* pMethod = (SbMethod*)pMod->Find( sMacro, SbxCLASS_METHOD );
+ if( pMethod )
+ return pMethod;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+ }
+}
+
+bool BasicManager::HasMacro( String const& i_fullyQualifiedName ) const
+{
+ return ( NULL != lcl_queryMacro( const_cast< BasicManager* >( this ), i_fullyQualifiedName ) );
+}
+
+ErrCode BasicManager::ExecuteMacro( String const& i_fullyQualifiedName, SbxArray* i_arguments, SbxValue* i_retValue )
+{
+ SbMethod* pMethod = lcl_queryMacro( this, i_fullyQualifiedName );
+ ErrCode nError = 0;
+ if ( pMethod )
+ {
+ if ( i_arguments )
+ pMethod->SetParameters( i_arguments );
+ nError = pMethod->Call( i_retValue );
+ }
+ else
+ nError = ERRCODE_BASIC_PROC_UNDEFINED;
+ return nError;
+}
+
+ErrCode BasicManager::ExecuteMacro( String const& i_fullyQualifiedName, String const& i_commaSeparatedArgs, SbxValue* i_retValue )
+{
+ SbMethod* pMethod = lcl_queryMacro( this, i_fullyQualifiedName );
+ if ( !pMethod )
+ return ERRCODE_BASIC_PROC_UNDEFINED;
+
+ // arguments must be quoted
+ String sQuotedArgs;
+ String sArgs( i_commaSeparatedArgs );
+ if ( sArgs.Len()<2 || sArgs.GetBuffer()[1] == '\"')
+ // no args or already quoted args
+ sQuotedArgs = sArgs;
+ else
+ {
+ // quote parameters
+ sArgs.Erase( 0, 1 );
+ sArgs.Erase( sArgs.Len()-1, 1 );
+
+ sQuotedArgs = '(';
+
+ sal_uInt16 nCount = sArgs.GetTokenCount(',');
+ for ( sal_uInt16 n=0; nGetName();
+ sCall += sQuotedArgs;
+ sCall += ']';
+
+ SbxVariable* pRet = pMethod->GetParent()->Execute( sCall );
+ if ( pRet )
+ *i_retValue = *pRet;
+ return SbxBase::GetError();
+}
+
//=====================================================================
class ModuleInfo_Impl : public ModuleInfoHelper
diff --git a/connectivity/inc/connectivity/PColumn.hxx b/connectivity/inc/connectivity/PColumn.hxx
index 547cc8fb9970..1e9dc8b560f1 100644
--- a/connectivity/inc/connectivity/PColumn.hxx
+++ b/connectivity/inc/connectivity/PColumn.hxx
@@ -125,15 +125,27 @@ namespace connectivity
class OOO_DLLPUBLIC_DBTOOLS OOrderColumn :
public OOrderColumn_BASE, public OOrderColumn_PROP
{
- sal_Bool m_bAscending;
- sal_Bool m_bOrder;
+ const sal_Bool m_bAscending;
+ const ::rtl::OUString m_sTableName;
+
protected:
virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const;
virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
virtual ~OOrderColumn();
public:
- OOrderColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,sal_Bool _bCase,sal_Bool _bAscending);
+ OOrderColumn(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
+ const ::rtl::OUString& i_rOriginatingTableName,
+ sal_Bool _bCase,
+ sal_Bool _bAscending
+ );
+
+ OOrderColumn(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
+ sal_Bool _bCase,
+ sal_Bool _bAscending
+ );
virtual void construct();
diff --git a/connectivity/inc/connectivity/dbconversion.hxx b/connectivity/inc/connectivity/dbconversion.hxx
index 6a54a3e92d2d..75c491e505e6 100644
--- a/connectivity/inc/connectivity/dbconversion.hxx
+++ b/connectivity/inc/connectivity/dbconversion.hxx
@@ -98,17 +98,18 @@ namespace dbtools
const double& rValue,
sal_Int16 nKeyType) throw(::com::sun::star::lang::IllegalArgumentException);
- static double getValue(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& xVariant, const ::com::sun::star::util::Date& rNullDate,
- sal_Int16 nKeyType);
+ static double getValue( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& xVariant, const ::com::sun::star::util::Date& rNullDate );
// get the columnvalue as string with a default format given by the column or a default format
// for the type
- static ::rtl::OUString getValue(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
+ static ::rtl::OUString getFormattedValue(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& xFormatter,
const ::com::sun::star::lang::Locale& _rLocale,
const ::com::sun::star::util::Date& rNullDate);
- static ::rtl::OUString getValue(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& _xColumn,
+ static ::rtl::OUString getFormattedValue(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& _xColumn,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& xFormatter,
const ::com::sun::star::util::Date& rNullDate,
sal_Int32 nKey,
diff --git a/connectivity/inc/connectivity/virtualdbtools.hxx b/connectivity/inc/connectivity/virtualdbtools.hxx
index 70b17dcb37c9..1ad4c1d7d77d 100644
--- a/connectivity/inc/connectivity/virtualdbtools.hxx
+++ b/connectivity/inc/connectivity/virtualdbtools.hxx
@@ -256,17 +256,16 @@ namespace connectivity
virtual double getValue(
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& _rxVariant,
- const ::com::sun::star::util::Date& rNullDate,
- sal_Int16 nKeyType) const = 0;
+ const ::com::sun::star::util::Date& rNullDate ) const = 0;
- virtual ::rtl::OUString getValue(
+ virtual ::rtl::OUString getFormattedValue(
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxColumn,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxFormatter,
const ::com::sun::star::util::Date& _rNullDate,
sal_Int32 _nKey,
sal_Int16 _nKeyType) const = 0;
- virtual ::rtl::OUString getValue(
+ virtual ::rtl::OUString getFormattedValue(
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxColumn,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& _rxFormatter,
const ::com::sun::star::lang::Locale& _rLocale,
diff --git a/connectivity/prj/build.lst b/connectivity/prj/build.lst
index 6d70bc71c97c..8d16197961fa 100644
--- a/connectivity/prj/build.lst
+++ b/connectivity/prj/build.lst
@@ -28,5 +28,5 @@ cn connectivity\source\parse nmake - all cn_parse cn_
cn connectivity\source\simpledbt nmake - all cn_simpledbt cn_cmtools cn_inc NULL
cn connectivity\source\dbtools nmake - all cn_dbtools cn_simpledbt cn_cmtools cn_parse cn_res cn_sdbcx cn_inc cn_res NULL
cn connectivity\qa\connectivity\tools nmake - all cn_qa_tools cn_inc NULL
+cn connectivity\qa nmake - all cn_qa cn_inc NULL
cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb cn_macab NULL
-
diff --git a/connectivity/qa/drivers/dbase/DBaseDriverTest.java b/connectivity/qa/complex/connectivity/DBaseDriverTest.java
similarity index 75%
rename from connectivity/qa/drivers/dbase/DBaseDriverTest.java
rename to connectivity/qa/complex/connectivity/DBaseDriverTest.java
index 2e2920b4145b..5b9e456ab367 100644
--- a/connectivity/qa/drivers/dbase/DBaseDriverTest.java
+++ b/connectivity/qa/complex/connectivity/DBaseDriverTest.java
@@ -24,36 +24,18 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package qa.drivers.dbase;
+package complex.connectivity;
-import com.sun.star.sdbc.*;
+import complex.connectivity.dbase.DBaseDateFunctions;
+import complex.connectivity.dbase.DBaseStringFunctions;
+import complex.connectivity.dbase.DBaseSqlTests;
+import complex.connectivity.dbase.DBaseNumericFunctions;
import com.sun.star.lang.XMultiServiceFactory;
import complexlib.ComplexTestCase;
-import java.util.*;
-import java.io.*;
import share.LogWriter;
-//import complex.connectivity.DBaseStringFunctions;
-public class DBaseDriverTest extends ComplexTestCase
+public class DBaseDriverTest extends ComplexTestCase implements TestCase
{
-
- private static Properties props = new Properties();
- private XDriver m_xDiver;
- private String where = "FROM \"biblio\" \"biblio\" where \"Identifier\" = 'BOR00'";
-
- static
- {
- try
- {
- String propsFile = "test.properties";
- props.load(new FileInputStream(propsFile));
- }
- catch (Exception ex)
- {
- throw new RuntimeException(ex);
- }
- }
-
public String[] getTestMethodNames()
{
return new String[]
@@ -62,19 +44,21 @@ public class DBaseDriverTest extends ComplexTestCase
};
}
+ @Override
public String getTestObjectName()
{
return "DBaseDriverTest";
}
- public void assure2(String s, boolean b)
+ @Override
+ public void assure( final String i_message, final boolean i_condition )
{
- assure(s, b);
+ super.assure( i_message, i_condition );
}
public LogWriter getLog()
{
- return log;
+ return ComplexTestCase.log;
}
public void Functions() throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
diff --git a/connectivity/qa/complex/connectivity/FlatFileAccess.java b/connectivity/qa/complex/connectivity/FlatFileAccess.java
new file mode 100755
index 000000000000..3f0481684827
--- /dev/null
+++ b/connectivity/qa/complex/connectivity/FlatFileAccess.java
@@ -0,0 +1,237 @@
+package complex.connectivity;
+
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.sdb.CommandType;
+import com.sun.star.sdbc.SQLException;
+import com.sun.star.util.Date;
+import complexlib.ComplexTestCase;
+import connectivity.tools.CsvDatabase;
+import connectivity.tools.RowSet;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+public class FlatFileAccess extends ComplexTestCase
+{
+ public FlatFileAccess()
+ {
+ super();
+ }
+
+ @Override
+ public String[] getTestMethodNames()
+ {
+ return new String[] {
+ "testBasicAccess",
+ "testCalendarFunctions",
+ "testSortingByFunction"
+ };
+ }
+
+ @Override
+ public String getTestObjectName()
+ {
+ return "FlatFileAccess";
+ }
+
+ public void before() throws Exception
+ {
+ m_database = new CsvDatabase( (XMultiServiceFactory)param.getMSF() );
+
+ // proper settings
+ final XPropertySet dataSourceSettings = m_database.getDataSource().geSettings();
+ dataSourceSettings.setPropertyValue( "Extension", "csv" );
+ dataSourceSettings.setPropertyValue( "HeaderLine", Boolean.TRUE );
+ dataSourceSettings.setPropertyValue( "FieldDelimiter", " " );
+ m_database.store();
+
+ // write the table(s) for our test
+ final String tableLocation = m_database.getTableFileLocation().getAbsolutePath();
+ final PrintWriter tableWriter = new PrintWriter( new FileOutputStream( tableLocation + File.separatorChar + "dates.csv", false ) );
+ tableWriter.println( "ID date" );
+ tableWriter.println( "1 2013-01-01" );
+ tableWriter.println( "2 2012-02-02" );
+ tableWriter.println( "3 2011-03-03" );
+ tableWriter.close();
+ }
+
+ public void after()
+ {
+ }
+
+ private class EqualityDate extends Date
+ {
+ EqualityDate( short i_day, short i_month, short i_year )
+ {
+ super( i_day, i_month, i_year );
+ }
+
+ EqualityDate( Date i_date )
+ {
+ super( i_date.Day, i_date.Month, i_date.Year );
+ }
+
+ @Override
+ public boolean equals( Object i_compare )
+ {
+ if ( !( i_compare instanceof Date ) )
+ return false;
+ return Day == ((Date)i_compare).Day
+ && Month == ((Date)i_compare).Month
+ && Year == ((Date)i_compare).Year;
+ }
+ }
+
+ /**
+ * ensures simple SELECTs from our table(s) work, and deliver the expected results
+ */
+ public void testBasicAccess()
+ {
+ testRowSetResults(
+ "SELECT * FROM \"dates\"",
+ new RowSetIntGetter(1),
+ new Integer[] { 1, 2, 3 },
+ "simple select", "wrong IDs"
+ );
+
+ testRowSetResults(
+ "SELECT * FROM \"dates\"",
+ new RowSetDateGetter( 2 ),
+ new EqualityDate[] { new EqualityDate( (short)1, (short)1, (short)2013 ),
+ new EqualityDate( (short)2, (short)2, (short)2012 ),
+ new EqualityDate( (short)3, (short)3, (short)2011 )
+ },
+ "simple select", "wrong dates"
+ );
+ testRowSetResults(
+ "SELECT \"date\", \"ID\" FROM \"dates\" ORDER BY \"ID\" DESC",
+ new RowSetIntGetter( 2 ),
+ new Integer[] { 3, 2, 1 },
+ "explicit column selection, sorted by IDs", "wrong IDs"
+ );
+ testRowSetResults(
+ "SELECT * FROM \"dates\" ORDER BY \"date\"",
+ new RowSetIntGetter( 1 ),
+ new Integer[] { 3, 2, 1 },
+ "sorted by date", "wrong IDs"
+ );
+ }
+
+ /**
+ * ensures the basic functionality for selecting calendar functions from a CSV table - this is a prerequisite for
+ * later tests.
+ */
+ public void testCalendarFunctions()
+ {
+ // simple check for proper results of the calendar functions (DATE/MONTH)
+ // The * at the first position is crucial here - there was code which wrongly calculated
+ // column positions of function columns when * was present in the statement
+ testRowSetResults(
+ "SELECT \"dates\".*, YEAR( \"date\" ) FROM \"dates\"",
+ new RowSetIntGetter( 3 ),
+ new Integer[] { 2013, 2012, 2011 },
+ "YEAR function", "wrong calculated years"
+ );
+ testRowSetResults(
+ "SELECT \"dates\".*, MONTH( \"date\" ) FROM \"dates\"",
+ new RowSetIntGetter( 3 ),
+ new Integer[] { 1, 2, 3 },
+ "MONTH function", "wrong calculated months"
+ );
+ }
+
+ /**
+ * ensures that sorting by a function column works
+ */
+ public void testSortingByFunction()
+ {
+ // most simple case: select a function, and sort by it
+ testRowSetResults(
+ "SELECT YEAR( \"date\" ) AS \"year\" FROM \"dates\" ORDER BY \"year\"",
+ new RowSetIntGetter(1),
+ new Integer[] { 2011, 2012, 2013 },
+ "single YEAR selection, sorted by years", "wrong calculated years"
+ );
+ // somewhat more "difficult" (this used to crash): Select all columns, plus a function, so the calculated
+ // column has a position greater than column count
+ testRowSetResults(
+ "SELECT \"dates\".*, YEAR( \"date\" ) AS \"year\" FROM \"dates\" ORDER BY \"year\" DESC",
+ new RowSetIntGetter(3),
+ new Integer[] { 2013, 2012, 2011 },
+ "extended YEAR selection, sorted by years", "wrong calculated years"
+ );
+ }
+
+ private interface RowSetValueGetter
+ {
+ public Object getValue( final RowSet i_rowSet ) throws SQLException;
+ }
+
+ private abstract class RowSetColumnValueGetter implements RowSetValueGetter
+ {
+ RowSetColumnValueGetter( final int i_columnIndex )
+ {
+ m_columnIndex = i_columnIndex;
+ }
+
+ protected final int m_columnIndex;
+ }
+
+ private class RowSetIntGetter extends RowSetColumnValueGetter
+ {
+ RowSetIntGetter( final int i_columnIndex )
+ {
+ super( i_columnIndex );
+ }
+
+ public Object getValue( final RowSet i_rowSet ) throws SQLException
+ {
+ return i_rowSet.getInt( m_columnIndex );
+ }
+ }
+
+ private class RowSetDateGetter extends RowSetColumnValueGetter
+ {
+ RowSetDateGetter( final int i_columnIndex )
+ {
+ super( i_columnIndex );
+ }
+
+ public Object getValue( final RowSet i_rowSet ) throws SQLException
+ {
+ return i_rowSet.getDate( m_columnIndex );
+ }
+ }
+
+ private void testRowSetResults( String i_command, RowSetValueGetter i_getter,
+ T[] i_expectedValues, String i_context, String i_failureDesc )
+ {
+ RowSet rowSet = null;
+ try
+ {
+ rowSet = m_database.createRowSet( CommandType.COMMAND, i_command );
+ rowSet.execute();
+
+ List< T > values = new ArrayList< T >();
+ while ( rowSet.next() )
+ {
+ values.add( (T)i_getter.getValue( rowSet ) );
+ }
+ assureEquals( i_context + ": " + i_failureDesc, i_expectedValues, values.toArray(), true );
+ }
+ catch( final SQLException e )
+ {
+ failed( i_context + ": caught an exception: " + e.toString(), false );
+ }
+ finally
+ {
+ if ( rowSet != null )
+ rowSet.dispose();
+ }
+ }
+
+ private CsvDatabase m_database = null;
+}
diff --git a/connectivity/qa/drivers/hsqldb/DriverTest.java b/connectivity/qa/complex/connectivity/HsqlDriverTest.java
similarity index 82%
rename from connectivity/qa/drivers/hsqldb/DriverTest.java
rename to connectivity/qa/complex/connectivity/HsqlDriverTest.java
index d343a1309a05..28ad862c4a76 100644
--- a/connectivity/qa/drivers/hsqldb/DriverTest.java
+++ b/connectivity/qa/complex/connectivity/HsqlDriverTest.java
@@ -24,63 +24,50 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package qa.drivers.hsqldb;
+package complex.connectivity;
-import com.sun.star.awt.XWindow;
+import complex.connectivity.hsqldb.TestCacheSize;
import com.sun.star.frame.XModel;
-import com.sun.star.text.XTextDocument;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.util.XCloseable;
-import com.sun.star.sdbc.*;
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.container.XNameAccess;
-import com.sun.star.sdbc.XDataSource;
import com.sun.star.frame.XStorable;
import com.sun.star.lang.*;
import com.sun.star.document.XDocumentSubStorageSupplier;
import complexlib.ComplexTestCase;
-import java.io.PrintWriter;
-import util.utils;
-import java.util.*;
-import java.io.*;
-import org.hsqldb.jdbcDriver;
-import qa.drivers.hsqldb.DatabaseMetaData;
import org.hsqldb.lib.StopWatch;
-import com.sun.star.sdbc.*;
-import com.sun.star.container.XNameAccess;
import com.sun.star.uno.UnoRuntime;
-import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.PropertyState;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.embed.XStorage;
+import com.sun.star.sdbc.XDataSource;
+import com.sun.star.sdbc.XDriver;
+import connectivity.tools.HsqlDatabase;
-public class DriverTest extends ComplexTestCase {
+public class HsqlDriverTest extends ComplexTestCase {
public String[] getTestMethodNames() {
return new String[] { "test" };
}
+ @Override
public String getTestObjectName() {
return "DriverTest";
}
public void assurePublic(String sMessage,boolean check){
- addResult(sMessage,check);
+ super.assure(sMessage,check);
}
public void test(){
- mThreadTimeOut = 10000000;
XDataSource ds = null;
System.gc();
try {
- XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class,((XMultiServiceFactory)param.getMSF()).createInstance("com.sun.star.sdb.DatabaseContext"));
- ds = (XDataSource)UnoRuntime.queryInterface(XDataSource.class,xNameAccess.getByName("file:///g:/test.odb"));
+ HsqlDatabase database = new HsqlDatabase( (XMultiServiceFactory)param.getMSF() );
+ ds = database.getDataSource().getXDataSource();
} catch(Exception ex) {
- throw new RuntimeException("factory: unable to construct data source" );
+ throw new RuntimeException("factory: unable to construct data source" );
}
try{
@@ -141,7 +128,6 @@ public class DriverTest extends ComplexTestCase {
}catch(Exception e){}
}
public void test2(){
- mThreadTimeOut = 10000000;
System.gc();
com.sun.star.beans.PropertyValue[] info = null;
@@ -149,7 +135,7 @@ public class DriverTest extends ComplexTestCase {
try{
info = new com.sun.star.beans.PropertyValue[]{
new com.sun.star.beans.PropertyValue("JavaDriverClass",0,"org.hsqldb.jdbcDriver",PropertyState.DIRECT_VALUE)
- ,new com.sun.star.beans.PropertyValue("ParameterNameSubstitution",0,new Boolean(false),PropertyState.DIRECT_VALUE)
+ ,new com.sun.star.beans.PropertyValue("ParameterNameSubstitution",0, false,PropertyState.DIRECT_VALUE)
};
drv = (XDriver)UnoRuntime.queryInterface(XDriver.class,((XMultiServiceFactory)param.getMSF()).createInstance("com.sun.star.comp.sdbc.JDBCDriver"));
TestCacheSize test = new TestCacheSize(((XMultiServiceFactory)param.getMSF()),info,drv);
diff --git a/connectivity/qa/drivers/jdbc/LongVarCharTest.java b/connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java
similarity index 98%
rename from connectivity/qa/drivers/jdbc/LongVarCharTest.java
rename to connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java
index a5797b223b61..63a3e8f241bc 100644
--- a/connectivity/qa/drivers/jdbc/LongVarCharTest.java
+++ b/connectivity/qa/complex/connectivity/JdbcLongVarCharTest.java
@@ -40,7 +40,7 @@ import com.sun.star.sdbc.XRow;
import com.sun.star.uno.UnoRuntime;
import complexlib.ComplexTestCase;
-public class LongVarCharTest extends ComplexTestCase
+public class JdbcLongVarCharTest extends ComplexTestCase
{
public String[] getTestMethodNames()
@@ -51,6 +51,7 @@ public class LongVarCharTest extends ComplexTestCase
};
}
+ @Override
public String getTestObjectName()
{
return "LongVarCharTest";
diff --git a/connectivity/qa/complex/connectivity/SubTestCase.java b/connectivity/qa/complex/connectivity/SubTestCase.java
new file mode 100755
index 000000000000..1c2e685c5943
--- /dev/null
+++ b/connectivity/qa/complex/connectivity/SubTestCase.java
@@ -0,0 +1,23 @@
+package complex.connectivity;
+
+import share.LogWriter;
+
+public class SubTestCase implements TestCase
+{
+ protected SubTestCase( final TestCase i_parentTestCase )
+ {
+ m_parentTestCase = i_parentTestCase;
+ }
+
+ public void assure( String i_message, boolean i_condition )
+ {
+ m_parentTestCase.assure( i_message, i_condition );
+ }
+
+ public LogWriter getLog()
+ {
+ return m_parentTestCase.getLog();
+ }
+
+ private final TestCase m_parentTestCase;
+}
diff --git a/sfx2/inc/sfxbasic.hxx b/connectivity/qa/complex/connectivity/TestCase.java
old mode 100644
new mode 100755
similarity index 76%
rename from sfx2/inc/sfxbasic.hxx
rename to connectivity/qa/complex/connectivity/TestCase.java
index ff5f097500a5..bae5fcdcb4c4
--- a/sfx2/inc/sfxbasic.hxx
+++ b/connectivity/qa/complex/connectivity/TestCase.java
@@ -24,19 +24,12 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#ifndef _SFXBASIC_HXX
-#define _SFXBASIC_HXX
+package complex.connectivity;
-class BasicManager;
-class SbMethod;
-
-//------------------------------------------------------------------
-
-SbMethod* SfxQueryMacro( BasicManager* pMgr, const String& rMacro );
-
-ErrCode SfxCallMacro( BasicManager* pMgr, const String& rMacro,
- SbxArray *pArgs = 0, SbxValue *pRet = 0 );
-
-
-#endif
+import share.LogWriter;
+public interface TestCase
+{
+ public void assure( final String i_message, final boolean i_condition );
+ public LogWriter getLog();
+}
diff --git a/connectivity/qa/drivers/dbase/DBaseDateFunctions.java b/connectivity/qa/complex/connectivity/dbase/DBaseDateFunctions.java
similarity index 92%
rename from connectivity/qa/drivers/dbase/DBaseDateFunctions.java
rename to connectivity/qa/complex/connectivity/dbase/DBaseDateFunctions.java
index b48ae2158359..9cfc6aaaf590 100644
--- a/connectivity/qa/drivers/dbase/DBaseDateFunctions.java
+++ b/connectivity/qa/complex/connectivity/dbase/DBaseDateFunctions.java
@@ -24,30 +24,26 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package qa.drivers.dbase;
+package complex.connectivity.dbase;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.sdbc.*;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.XMultiServiceFactory;
+import complex.connectivity.TestCase;
+import complex.connectivity.SubTestCase;
-public class DBaseDateFunctions
+public class DBaseDateFunctions extends SubTestCase
{
private final String where = "FROM \"biblio\" \"biblio\" where \"Identifier\" = 'BOR00'";
private final XMultiServiceFactory m_xORB;
- private final DBaseDriverTest testcase;
- public DBaseDateFunctions(final XMultiServiceFactory _xORB, final DBaseDriverTest _testcase)
+ public DBaseDateFunctions(final XMultiServiceFactory _xORB, final TestCase i_testCase)
{
+ super( i_testCase );
m_xORB = _xORB;
- testcase = _testcase;
- }
-
- private void assure(final String s, final boolean b)
- {
- testcase.assure2(s, b);
}
public void testFunctions() throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
@@ -55,7 +51,7 @@ public class DBaseDateFunctions
final XRowSet xRowRes = (XRowSet) UnoRuntime.queryInterface(XRowSet.class,
m_xORB.createInstance("com.sun.star.sdb.RowSet"));
- testcase.getLog().println("starting DateTime function test!");
+ getLog().println("starting DateTime function test!");
// set the properties needed to connect to a database
final XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xRowRes);
xProp.setPropertyValue("DataSourceName", "Bibliography");
@@ -289,21 +285,21 @@ public class DBaseDateFunctions
{
final XRow row = execute(xRowRes, "CURDATE() ");
final com.sun.star.util.Date aDate = row.getDate(1);
- testcase.getLog().println("CURDATE() is '" + aDate.Year + "-" + aDate.Month + "-" + aDate.Day + "'");
+ getLog().println("CURDATE() is '" + aDate.Year + "-" + aDate.Month + "-" + aDate.Day + "'");
}
private void curtime(final XRowSet xRowRes) throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
{
final XRow row = execute(xRowRes, "CURTIME() ");
final com.sun.star.util.Time aTime = row.getTime(1);
- testcase.getLog().println("CURTIME() is '" + aTime.Hours + ":" + aTime.Minutes + ":" + aTime.Seconds + "'");
+ getLog().println("CURTIME() is '" + aTime.Hours + ":" + aTime.Minutes + ":" + aTime.Seconds + "'");
}
private void now(final XRowSet xRowRes) throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
{
final XRow row = execute(xRowRes, "NOW() ");
final com.sun.star.util.DateTime aTime = row.getTimestamp(1);
- testcase.getLog().println("NOW() is '" + aTime.Year + "-" + aTime.Month + "-" + aTime.Day + "'");
- testcase.getLog().println("'" + aTime.Hours + ":" + aTime.Minutes + ":" + aTime.Seconds + "'");
+ getLog().println("NOW() is '" + aTime.Year + "-" + aTime.Month + "-" + aTime.Day + "'");
+ getLog().println("'" + aTime.Hours + ":" + aTime.Minutes + ":" + aTime.Seconds + "'");
}
}
diff --git a/connectivity/qa/drivers/dbase/DBaseNumericFunctions.java b/connectivity/qa/complex/connectivity/dbase/DBaseNumericFunctions.java
similarity index 97%
rename from connectivity/qa/drivers/dbase/DBaseNumericFunctions.java
rename to connectivity/qa/complex/connectivity/dbase/DBaseNumericFunctions.java
index b3c8ff014a2f..f5aec94a3c23 100644
--- a/connectivity/qa/drivers/dbase/DBaseNumericFunctions.java
+++ b/connectivity/qa/complex/connectivity/dbase/DBaseNumericFunctions.java
@@ -24,30 +24,25 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package qa.drivers.dbase;
+package complex.connectivity.dbase;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.sdbc.*;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.XMultiServiceFactory;
+import complex.connectivity.SubTestCase;
+import complex.connectivity.TestCase;
-public class DBaseNumericFunctions
+public class DBaseNumericFunctions extends SubTestCase
{
-
private final String where = "FROM \"biblio\" \"biblio\" where \"Identifier\" = 'BOR00'";
private final XMultiServiceFactory m_xORB;
- private final DBaseDriverTest testcase;
- public DBaseNumericFunctions(final XMultiServiceFactory _xORB, final DBaseDriverTest _testcase)
+ public DBaseNumericFunctions(final XMultiServiceFactory _xORB, final TestCase i_testCase)
{
+ super( i_testCase );
m_xORB = _xORB;
- testcase = _testcase;
- }
-
- private void assure(final String s, final boolean b)
- {
- testcase.assure2(s, b);
}
public void testFunctions() throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
@@ -55,7 +50,7 @@ public class DBaseNumericFunctions
final XRowSet xRowRes = (XRowSet) UnoRuntime.queryInterface(XRowSet.class,
m_xORB.createInstance("com.sun.star.sdb.RowSet"));
- testcase.getLog().println("starting Numeric function test");
+ getLog().println("starting Numeric function test");
// set the properties needed to connect to a database
final XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xRowRes);
xProp.setPropertyValue("DataSourceName", "Bibliography");
diff --git a/connectivity/qa/drivers/dbase/DBaseSqlTests.java b/connectivity/qa/complex/connectivity/dbase/DBaseSqlTests.java
similarity index 91%
rename from connectivity/qa/drivers/dbase/DBaseSqlTests.java
rename to connectivity/qa/complex/connectivity/dbase/DBaseSqlTests.java
index c393c5a48356..1265e05e7bef 100755
--- a/connectivity/qa/drivers/dbase/DBaseSqlTests.java
+++ b/connectivity/qa/complex/connectivity/dbase/DBaseSqlTests.java
@@ -24,27 +24,23 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package qa.drivers.dbase;
+package complex.connectivity.dbase;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.sdbc.*;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.XMultiServiceFactory;
+import complex.connectivity.TestCase;
+import complex.connectivity.SubTestCase;
-public class DBaseSqlTests
+public class DBaseSqlTests extends SubTestCase
{
private final XMultiServiceFactory m_xORB;
- private final DBaseDriverTest testcase;
- public DBaseSqlTests(final XMultiServiceFactory _xORB,final DBaseDriverTest _testcase)
+ public DBaseSqlTests(final XMultiServiceFactory _xORB,final TestCase i_testCase)
{
+ super( i_testCase );
m_xORB = _xORB;
- testcase = _testcase;
- }
-
- private void assure(final String s,final boolean b)
- {
- testcase.assure2(s, b);
}
public void testFunctions() throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
@@ -52,7 +48,7 @@ public class DBaseSqlTests
final XRowSet xRowRes = (XRowSet) UnoRuntime.queryInterface(XRowSet.class,
m_xORB.createInstance("com.sun.star.sdb.RowSet"));
- testcase.getLog().println("starting SQL test");
+ getLog().println("starting SQL test");
// set the properties needed to connect to a database
final XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xRowRes);
xProp.setPropertyValue("DataSourceName", "Bibliography");
@@ -88,7 +84,7 @@ public class DBaseSqlTests
}
catch(SQLException e)
{
- testcase.getLog().println(sql + " Error: " + e.getMessage());
+ getLog().println(sql + " Error: " + e.getMessage());
}
}
diff --git a/connectivity/qa/drivers/dbase/DBaseStringFunctions.java b/connectivity/qa/complex/connectivity/dbase/DBaseStringFunctions.java
similarity index 97%
rename from connectivity/qa/drivers/dbase/DBaseStringFunctions.java
rename to connectivity/qa/complex/connectivity/dbase/DBaseStringFunctions.java
index 1d4ccf0a9b26..30b94484d53d 100644
--- a/connectivity/qa/drivers/dbase/DBaseStringFunctions.java
+++ b/connectivity/qa/complex/connectivity/dbase/DBaseStringFunctions.java
@@ -24,28 +24,24 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package qa.drivers.dbase;
+package complex.connectivity.dbase;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.sdbc.*;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.XMultiServiceFactory;
+import complex.connectivity.SubTestCase;
+import complex.connectivity.TestCase;
-public class DBaseStringFunctions
+public class DBaseStringFunctions extends SubTestCase
{
private String where = "FROM \"biblio\" \"biblio\" where \"Identifier\" = 'BOR00'";
private final XMultiServiceFactory m_xORB;
- private final DBaseDriverTest testcase;
- public DBaseStringFunctions(final XMultiServiceFactory _xORB,final DBaseDriverTest _testcase)
+ public DBaseStringFunctions(final XMultiServiceFactory _xORB,final TestCase i_testCase)
{
+ super( i_testCase );
m_xORB = _xORB;
- testcase = _testcase;
- }
-
- private void assure(final String s,final boolean b)
- {
- testcase.assure2(s, b);
}
public void testFunctions() throws com.sun.star.uno.Exception, com.sun.star.beans.UnknownPropertyException
@@ -53,7 +49,7 @@ public class DBaseStringFunctions
final XRowSet xRowRes = (XRowSet) UnoRuntime.queryInterface(XRowSet.class,
m_xORB.createInstance("com.sun.star.sdb.RowSet"));
- testcase.getLog().println("starting String function test");
+ getLog().println("starting String function test");
// set the properties needed to connect to a database
final XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xRowRes);
xProp.setPropertyValue("DataSourceName", "Bibliography");
diff --git a/connectivity/qa/drivers/hsqldb/DatabaseMetaData.java b/connectivity/qa/complex/connectivity/hsqldb/DatabaseMetaData.java
similarity index 95%
rename from connectivity/qa/drivers/hsqldb/DatabaseMetaData.java
rename to connectivity/qa/complex/connectivity/hsqldb/DatabaseMetaData.java
index ddc45a4e0ca1..a20bb992b4e3 100644
--- a/connectivity/qa/drivers/hsqldb/DatabaseMetaData.java
+++ b/connectivity/qa/complex/connectivity/hsqldb/DatabaseMetaData.java
@@ -8,21 +8,19 @@
*
* @author oj93728
*/
-package qa.drivers.hsqldb;
+package complex.connectivity.hsqldb;
+import complex.connectivity.HsqlDriverTest;
import java.sql.*;
-import com.sun.star.uno.UnoRuntime;
-import complexlib.ComplexTestCase;
import java.lang.reflect.Method;
-import qa.drivers.hsqldb.DriverTest;
public class DatabaseMetaData {
private java.sql.DatabaseMetaData m_xMD;
- private DriverTest m_TestCase;
+ private HsqlDriverTest m_TestCase;
/** Creates a new instance of DatabaseMetaData */
- public DatabaseMetaData(DriverTest _testCase,java.sql.DatabaseMetaData _xmd) {
+ public DatabaseMetaData(HsqlDriverTest _testCase,java.sql.DatabaseMetaData _xmd) {
m_TestCase = _testCase;
m_xMD = _xmd;
}
diff --git a/connectivity/qa/drivers/hsqldb/TestCacheSize.java b/connectivity/qa/complex/connectivity/hsqldb/TestCacheSize.java
similarity index 97%
rename from connectivity/qa/drivers/hsqldb/TestCacheSize.java
rename to connectivity/qa/complex/connectivity/hsqldb/TestCacheSize.java
index 4701905772b8..6c4db8bdeee7 100644
--- a/connectivity/qa/drivers/hsqldb/TestCacheSize.java
+++ b/connectivity/qa/complex/connectivity/hsqldb/TestCacheSize.java
@@ -29,24 +29,16 @@
*/
-package qa.drivers.hsqldb;
+package complex.connectivity.hsqldb;
-import java.io.*;
import org.hsqldb.lib.StopWatch;
-import org.hsqldb.lib.FileAccess;
import java.util.Random;
import com.sun.star.lang.*;
import com.sun.star.uno.UnoRuntime;
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.beans.PropertyState;
-import com.sun.star.container.XNameAccess;
import com.sun.star.sdbc.*;
-import com.sun.star.document.XDocumentSubStorageSupplier;
-import com.sun.star.embed.XStorage;
-import com.sun.star.frame.XStorable;
/**
* Test large cached tables by setting up a cached table of 100000 records
@@ -123,17 +115,17 @@ public class TestCacheSize {
XDriver drv;
com.sun.star.beans.PropertyValue[] info;
- TestCacheSize(XMultiServiceFactory _xmulti,com.sun.star.beans.PropertyValue[] _info,XDriver _drv){
+ public TestCacheSize(XMultiServiceFactory _xmulti,com.sun.star.beans.PropertyValue[] _info,XDriver _drv){
servicefactory = _xmulti;
drv = _drv;
info = _info;
}
- void setURL(String _url){
+ public void setURL(String _url){
url = _url;
}
- protected void setUp() {
+ public void setUp() {
user = "sa";
password = "";
@@ -406,9 +398,9 @@ public class TestCacheSize {
+ (i * 1000 / (sw.elapsedTime() + 1)));
}
- protected void tearDown() {}
+ public void tearDown() {}
- protected void checkResults() {
+ public void checkResults() {
try {
StopWatch sw = new StopWatch();
diff --git a/connectivity/qa/connectivity/tools/AbstractDatabase.java b/connectivity/qa/connectivity/tools/AbstractDatabase.java
index b47c7c7961da..65f550be5abf 100755
--- a/connectivity/qa/connectivity/tools/AbstractDatabase.java
+++ b/connectivity/qa/connectivity/tools/AbstractDatabase.java
@@ -47,18 +47,6 @@ import java.io.File;
*/
public abstract class AbstractDatabase implements DatabaseAccess
{
- // the service factory
-
- protected final XMultiServiceFactory m_orb;
- // the URL of the temporary file used for the database document
- protected String m_databaseDocumentFile;
- // the database document
- protected XOfficeDatabaseDocument m_databaseDocument;
- // the data source belonging to the database document
- protected DataSource m_dataSource;
- // the default connection
- protected Connection m_connection;
-
public AbstractDatabase(final XMultiServiceFactory orb) throws Exception
{
m_orb = orb;
@@ -75,7 +63,6 @@ public abstract class AbstractDatabase implements DatabaseAccess
*
* Multiple calls to this method return the same connection. The DbaseDatabase object keeps
* the ownership of the connection, so you don't need to (and should not) dispose/close it.
- *
*/
public Connection defaultConnection() throws SQLException
{
@@ -219,4 +206,15 @@ public abstract class AbstractDatabase implements DatabaseAccess
closeAndDelete();
super.finalize();
}
+
+ // the service factory
+ protected final XMultiServiceFactory m_orb;
+ // the URL of the temporary file used for the database document
+ protected String m_databaseDocumentFile;
+ // the database document
+ protected XOfficeDatabaseDocument m_databaseDocument;
+ // the data source belonging to the database document
+ protected DataSource m_dataSource;
+ // the default connection
+ protected Connection m_connection;
}
diff --git a/connectivity/qa/connectivity/tools/CsvDatabase.java b/connectivity/qa/connectivity/tools/CsvDatabase.java
new file mode 100755
index 000000000000..f9f16a718205
--- /dev/null
+++ b/connectivity/qa/connectivity/tools/CsvDatabase.java
@@ -0,0 +1,18 @@
+package connectivity.tools;
+
+import com.sun.star.lang.XMultiServiceFactory;
+
+public class CsvDatabase extends FlatFileDatabase
+{
+ // --------------------------------------------------------------------------------------------------------
+ public CsvDatabase( final XMultiServiceFactory i_orb ) throws Exception
+ {
+ super( i_orb, "flat" );
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ protected CsvDatabase( final XMultiServiceFactory i_orb, final String i_existingDocumentURL ) throws Exception
+ {
+ super( i_orb, i_existingDocumentURL, "flat" );
+ }
+}
diff --git a/connectivity/qa/connectivity/tools/DataSource.java b/connectivity/qa/connectivity/tools/DataSource.java
index 221ada3cb487..5c06f7d69622 100644
--- a/connectivity/qa/connectivity/tools/DataSource.java
+++ b/connectivity/qa/connectivity/tools/DataSource.java
@@ -69,6 +69,14 @@ public class DataSource
return m_dataSource;
}
+ /**
+ * retrieves the data source's settings
+ */
+ public XPropertySet geSettings()
+ {
+ return UnoRuntime.queryInterface( XPropertySet.class, impl_getPropertyValue( "Settings" ) );
+ }
+
/** creates a query with a given name and SQL command
*/
public void createQuery(final String _name, final String _sqlCommand) throws ElementExistException, WrappedTargetException, com.sun.star.lang.IllegalArgumentException
@@ -121,6 +129,26 @@ public class DataSource
return suppQueries.getQueryDefinitions();
}
+ /**
+ * retrieves a property value from the data source
+ * @param i_propertyName
+ * the name of the property whose value is to be returned.
+ */
+ private Object impl_getPropertyValue( final String i_propertyName )
+ {
+ Object propertyValue = null;
+ try
+ {
+ final XPropertySet dataSourceProps = UnoRuntime.queryInterface( XPropertySet.class, m_dataSource );
+ propertyValue = dataSourceProps.getPropertyValue( i_propertyName );
+ }
+ catch (Exception ex)
+ {
+ Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return propertyValue;
+ }
+
/** returns the name of the data source
*
* If a data source is registered at the database context, the name is the registration
@@ -130,16 +158,6 @@ public class DataSource
*/
public String getName()
{
- String name = null;
- try
- {
- final XPropertySet dataSourceProps = UnoRuntime.queryInterface( XPropertySet.class, m_dataSource );
- name = (String) dataSourceProps.getPropertyValue("Name");
- }
- catch (Exception ex)
- {
- Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
- }
- return name;
+ return (String)impl_getPropertyValue( "Name" );
}
};
diff --git a/connectivity/qa/connectivity/tools/DbaseDatabase.java b/connectivity/qa/connectivity/tools/DbaseDatabase.java
index ae40be4222aa..19a44132adf4 100755
--- a/connectivity/qa/connectivity/tools/DbaseDatabase.java
+++ b/connectivity/qa/connectivity/tools/DbaseDatabase.java
@@ -1,98 +1,18 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- *
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
package connectivity.tools;
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.beans.XPropertySet;
-import com.sun.star.frame.XStorable;
import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.sdb.XOfficeDatabaseDocument;
-import com.sun.star.sdbc.SQLException;
-import com.sun.star.uno.UnoRuntime;
-import helper.URLHelper;
-import java.io.File;
-
-/**
- *
- * @author Ocke
- */
-public class DbaseDatabase extends AbstractDatabase
+public class DbaseDatabase extends FlatFileDatabase
{
// --------------------------------------------------------------------------------------------------------
-
- public DbaseDatabase(final XMultiServiceFactory orb) throws Exception
+ public DbaseDatabase( final XMultiServiceFactory i_orb ) throws Exception
{
- super(orb);
- createDBDocument();
+ super( i_orb, "dbase" );
}
// --------------------------------------------------------------------------------------------------------
- public DbaseDatabase(final XMultiServiceFactory orb, final String _existingDocumentURL) throws Exception
+ protected DbaseDatabase( final XMultiServiceFactory i_orb, final String i_existingDocumentURL ) throws Exception
{
- super(orb, _existingDocumentURL);
- }
-
- /** creates an empty database document in a temporary location
- */
- private void createDBDocument() throws Exception
- {
- final File documentFile = File.createTempFile("dbase", ".odb");
- if ( documentFile.exists() )
- documentFile.delete();
- final File subPath = new File(documentFile.getParent() + File.separator + documentFile.getName().replaceAll(".odb", "") + File.separator );
- subPath.mkdir();
- //subPath.deleteOnExit();
- m_databaseDocumentFile = URLHelper.getFileURLFromSystemPath(documentFile);
- final String path = URLHelper.getFileURLFromSystemPath(subPath.getPath());
-
- m_databaseDocument = (XOfficeDatabaseDocument) UnoRuntime.queryInterface(
- XOfficeDatabaseDocument.class, m_orb.createInstance("com.sun.star.sdb.OfficeDatabaseDocument"));
- m_dataSource = new DataSource(m_orb, m_databaseDocument.getDataSource());
-
- final XPropertySet dsProperties = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, m_databaseDocument.getDataSource());
- dsProperties.setPropertyValue("URL", "sdbc:dbase:" + path);
-
- final XStorable storable = (XStorable) UnoRuntime.queryInterface(XStorable.class, m_databaseDocument);
- storable.storeAsURL(m_databaseDocumentFile, new PropertyValue[]
- {
- });
- }
-
- /** drops the table with a given name
-
- @param _name
- the name of the table to drop
- @param _ifExists
- TRUE if it should be dropped only when it exists.
- */
- public void dropTable(final String _name,final boolean _ifExists) throws SQLException
- {
- String dropStatement = "DROP TABLE \"" + _name;
- executeSQL(dropStatement);
+ super( i_orb, i_existingDocumentURL, "dbase" );
}
}
diff --git a/connectivity/qa/connectivity/tools/FlatFileDatabase.java b/connectivity/qa/connectivity/tools/FlatFileDatabase.java
new file mode 100755
index 000000000000..5385f1e119f6
--- /dev/null
+++ b/connectivity/qa/connectivity/tools/FlatFileDatabase.java
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package connectivity.tools;
+
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.frame.XStorable;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.sdb.XOfficeDatabaseDocument;
+import com.sun.star.sdbc.SQLException;
+import com.sun.star.uno.UnoRuntime;
+
+import helper.URLHelper;
+import java.io.File;
+
+class FlatFileDatabase extends AbstractDatabase
+{
+ // --------------------------------------------------------------------------------------------------------
+ protected FlatFileDatabase( final XMultiServiceFactory i_orb, final String i_urlSubScheme ) throws Exception
+ {
+ super(i_orb);
+ m_urlSubScheme = i_urlSubScheme;
+ createDBDocument();
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ protected FlatFileDatabase(final XMultiServiceFactory i_orb, final String i_existingDocumentURL,
+ final String i_urlSubScheme ) throws Exception
+ {
+ super( i_orb, i_existingDocumentURL );
+ m_urlSubScheme = i_urlSubScheme;
+
+ final XPropertySet dsProperties = UnoRuntime.queryInterface(XPropertySet.class, m_databaseDocument.getDataSource());
+ final String url = (String)dsProperties.getPropertyValue( "URL" );
+ final String expectedURLPrefix = "sdbc:" + m_urlSubScheme + ":";
+ if ( !url.startsWith( expectedURLPrefix ) )
+ throw new IllegalArgumentException( i_existingDocumentURL + " is of wrong type" );
+
+ final String location = url.substring( expectedURLPrefix.length() );
+ m_tableFileLocation = new File( location );
+ if ( m_tableFileLocation.isDirectory() )
+ throw new IllegalArgumentException( "unsupported table file location (must be a folder)" );
+ }
+
+ /**
+ * returns a {@link File} which represents the folder where the database's table files reside.
+ */
+ public File getTableFileLocation()
+ {
+ return m_tableFileLocation;
+ }
+
+ /** creates an empty database document in a temporary location
+ */
+ private void createDBDocument() throws Exception
+ {
+ final File documentFile = File.createTempFile( m_urlSubScheme, ".odb" );
+ if ( documentFile.exists() )
+ documentFile.delete();
+ m_tableFileLocation = new File(documentFile.getParent() + File.separator + documentFile.getName().replace(".odb", "") + File.separator );
+ m_tableFileLocation.mkdir();
+ //subPath.deleteOnExit();
+ m_databaseDocumentFile = URLHelper.getFileURLFromSystemPath(documentFile);
+ final String path = URLHelper.getFileURLFromSystemPath( m_tableFileLocation.getPath() );
+
+ m_databaseDocument = UnoRuntime.queryInterface( XOfficeDatabaseDocument.class,
+ m_orb.createInstance("com.sun.star.sdb.OfficeDatabaseDocument"));
+ m_dataSource = new DataSource(m_orb, m_databaseDocument.getDataSource());
+
+ final XPropertySet dsProperties = UnoRuntime.queryInterface(XPropertySet.class, m_databaseDocument.getDataSource());
+ dsProperties.setPropertyValue("URL", "sdbc:" + m_urlSubScheme + ":" + path);
+
+ final XStorable storable = UnoRuntime.queryInterface( XStorable.class, m_databaseDocument );
+ storable.storeAsURL( m_databaseDocumentFile, new PropertyValue[] { } );
+ }
+
+ /** drops the table with a given name
+
+ @param _name
+ the name of the table to drop
+ @param _ifExists
+ TRUE if it should be dropped only when it exists.
+ */
+ public void dropTable(final String _name,final boolean _ifExists) throws SQLException
+ {
+ String dropStatement = "DROP TABLE \"" + _name;
+ executeSQL(dropStatement);
+ }
+
+ final String m_urlSubScheme;
+ File m_tableFileLocation = null;
+}
diff --git a/connectivity/qa/connectivity/tools/RowSet.java b/connectivity/qa/connectivity/tools/RowSet.java
index a26456dcc746..31d0f237a1dd 100644
--- a/connectivity/qa/connectivity/tools/RowSet.java
+++ b/connectivity/qa/connectivity/tools/RowSet.java
@@ -31,6 +31,7 @@ import com.sun.star.beans.XPropertySet;
import com.sun.star.container.XIndexAccess;
import com.sun.star.container.XNameAccess;
import com.sun.star.io.XInputStream;
+import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.sdbc.SQLException;
import com.sun.star.sdbc.XArray;
@@ -48,7 +49,6 @@ import com.sun.star.util.Time;
public class RowSet implements XRowSet, XRow
{
- private XMultiServiceFactory m_orb;
private XRowSet m_rowSet;
private XRow m_row;
private XPropertySet m_rowSetProps;
@@ -57,14 +57,13 @@ public class RowSet implements XRowSet, XRow
{
try
{
- m_rowSetProps = (XPropertySet)UnoRuntime.queryInterface(
- XPropertySet.class, _orb.createInstance("com.sun.star.sdb.RowSet") );
+ m_rowSetProps = UnoRuntime.queryInterface( XPropertySet.class, _orb.createInstance( "com.sun.star.sdb.RowSet" ) );
m_rowSetProps.setPropertyValue( "DataSourceName", _dataSource );
m_rowSetProps.setPropertyValue( "CommandType", new Integer( _commandType ) );
m_rowSetProps.setPropertyValue( "Command", _command );
- m_rowSet = (XRowSet)UnoRuntime.queryInterface( XRowSet.class, m_rowSetProps );
- m_row = (XRow)UnoRuntime.queryInterface( XRow.class, m_rowSetProps );
+ m_rowSet = UnoRuntime.queryInterface( XRowSet.class, m_rowSetProps );
+ m_row = UnoRuntime.queryInterface( XRow.class, m_rowSetProps );
}
catch ( Exception e )
{
@@ -289,4 +288,12 @@ public class RowSet implements XRowSet, XRow
{
return m_row.getArray(i);
}
+
+ public void dispose()
+ {
+ if ( m_rowSet == null )
+ return;
+ XComponent rowSetComp = UnoRuntime.queryInterface( XComponent.class, m_rowSet );
+ rowSetComp.dispose();
+ }
};
diff --git a/connectivity/qa/connectivity/tools/makefile.mk b/connectivity/qa/connectivity/tools/makefile.mk
index 07490532a1b1..d77da7f1b945 100644
--- a/connectivity/qa/connectivity/tools/makefile.mk
+++ b/connectivity/qa/connectivity/tools/makefile.mk
@@ -42,15 +42,11 @@ all:
JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunnerLight.jar
JAVAFILES := $(shell @$(FIND) . -name "*.java")
-JAVACLASSFILES := $(foreach,i,$(JAVAFILES) $(CLASSDIR)/$(PACKAGE)/$(i:d)$(i:b).class)
#----- make a jar from compiled files ------------------------------
-MAXLINELENGTH = 100000
-
-JARCLASSDIRS = $(PACKAGE)
-JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
+JARCLASSDIRS = $(PACKAGE)
+JARTARGET = $(TARGET).jar
# --- Targets ------------------------------------------------------
diff --git a/connectivity/qa/drivers/dbase/.nbattrs b/connectivity/qa/drivers/dbase/.nbattrs
deleted file mode 100644
index 1ea7ed0bd8e6..000000000000
--- a/connectivity/qa/drivers/dbase/.nbattrs
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/connectivity/qa/drivers/dbase/makefile.mk b/connectivity/qa/drivers/dbase/makefile.mk
deleted file mode 100644
index d71670d67458..000000000000
--- a/connectivity/qa/drivers/dbase/makefile.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# This file is part of OpenOffice.org.
-#
-# OpenOffice.org is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3
-# only, as published by the Free Software Foundation.
-#
-# OpenOffice.org is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License version 3 for more details
-# (a copy is included in the LICENSE file that accompanied this code).
-#
-# You should have received a copy of the GNU Lesser General Public License
-# version 3 along with OpenOffice.org. If not, see
-#
-# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-
-PRJ = ..$/..$/..
-TARGET = DBaseDriverTest
-PRJNAME = connectivity
-PACKAGE = qa$/drivers$/dbase
-
-# --- Settings -----------------------------------------------------
-.INCLUDE: settings.mk
-
-
-#----- compile .java files -----------------------------------------
-
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-JAVAFILES =\
- DBaseDateFunctions.java\
- DBaseDriverTest.java\
- DBaseNumericFunctions.java\
- DBaseStringFunctions.java\
- DBaseSqlTests.java
-
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
-
-#----- make a jar from compiled files ------------------------------
-
-MAXLINELENGTH = 100000
-
-JARCLASSDIRS = $(PACKAGE)
-JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-
-run: $(CLASSDIR)$/$(JARTARGET)
- java -cp "$(CLASSPATH)$(PATH_SEPERATOR)$(SOLARBINDIR)$/OOoRunner.jar" org.openoffice.Runner -TestBase java_complex -o qa.drivers.dbase.$(TARGET)
-
diff --git a/connectivity/qa/drivers/dbase/test.properties b/connectivity/qa/drivers/dbase/test.properties
deleted file mode 100644
index c26879f480f3..000000000000
--- a/connectivity/qa/drivers/dbase/test.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# x-no-translate
-Driver=org.openoffice.comp.drivers.MySQL.Driver
-user=testuser
-password=
-URL=sdbc:mysql:odbc:MYSQL fs-11110 TESTUSER
diff --git a/connectivity/qa/drivers/jdbc/makefile.mk b/connectivity/qa/makefile.mk
similarity index 60%
rename from connectivity/qa/drivers/jdbc/makefile.mk
rename to connectivity/qa/makefile.mk
index e9f03ce1be3c..ee41cab63554 100644
--- a/connectivity/qa/drivers/jdbc/makefile.mk
+++ b/connectivity/qa/makefile.mk
@@ -25,42 +25,48 @@
#
#*************************************************************************
-PRJ = ..$/..$/..
-TARGET = LongVarCharTest
+PRJ = ..
+TARGET = ConnectivityComplexTests
PRJNAME = connectivity
-PACKAGE = complex$/connectivity
+PACKAGE = complex/connectivity
# --- Settings -----------------------------------------------------
.INCLUDE: settings.mk
-
#----- compile .java files -----------------------------------------
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-JAVAFILES =\
- LongVarCharTest.java
-
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
+JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar hsqldb.jar
+JAVAFILES := $(shell @$(FIND) complex -name "*.java")
#----- make a jar from compiled files ------------------------------
-MAXLINELENGTH = 100000
+JARCLASSDIRS = $(PACKAGE)
+JARTARGET = $(TARGET).jar
-JARCLASSDIRS = $(PACKAGE)
-JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
+# --- Runner Settings ----------------------------------------------
+
+# classpath and argument list
+RUNNER_CLASSPATH = -cp "$(CLASSPATH)$(PATH_SEPERATOR)$(SOLARBINDIR)$/OOoRunner.jar"
+RUNNER_ARGS = org.openoffice.Runner -TestBase java_complex
# --- Targets ------------------------------------------------------
.IF "$(depend)" == ""
ALL : ALLTAR
+ @echo -----------------------------------------------------
+ @echo - do a 'dmake show_targets' to show available targets
+ @echo -----------------------------------------------------
.ELSE
ALL: ALLDEP
.ENDIF
.INCLUDE : target.mk
+show_targets:
+ +@$(AUGMENT_LIBRARY_PATH) java $(RUNNER_CLASSPATH) complexlib.ShowTargets $(foreach,i,$(JAVAFILES) $(i:s/.\$///:s/.java//))
-run:
- java -cp $(CLASSPATH)$(PATH_SEPERATOR)$(SOLARBINDIR)$/OOoRunner.jar org.openoffice.Runner -TestBase java_complex -o complex.connectivity.$(TARGET)
+run: $(CLASSDIR)$/$(JARTARGET)
+ +$(AUGMENT_LIBRARY_PATH) java $(RUNNER_CLASSPATH) $(RUNNER_ARGS) -sce scenarios.sce
+run_%: $(CLASSDIR)$/$(JARTARGET)
+ +$(AUGMENT_LIBRARY_PATH) java $(RUNNER_CLASSPATH) $(RUNNER_ARGS) -o complex.$(PRJNAME).$(@:s/run_//)
diff --git a/connectivity/qa/scenarios.sce b/connectivity/qa/scenarios.sce
new file mode 100644
index 000000000000..c085f11bd7d8
--- /dev/null
+++ b/connectivity/qa/scenarios.sce
@@ -0,0 +1,4 @@
+-o complex.connectivity.DBaseDriverTest
+-o complex.connectivity.HsqlDriverTest
+#-o complex.connectivity.JdbcLongVarCharTest
+-o complex.connectivity.FlatFileAccess
diff --git a/connectivity/source/commontools/DateConversion.cxx b/connectivity/source/commontools/DateConversion.cxx
index 9f5be37f208f..a701b3b01570 100644
--- a/connectivity/source/commontools/DateConversion.cxx
+++ b/connectivity/source/commontools/DateConversion.cxx
@@ -43,6 +43,7 @@
#include "diagnose_ex.h"
#include
#include
+#include
using namespace ::connectivity;
@@ -365,56 +366,59 @@ void DBTypeConversion::setValue(const Reference& xVariant,
}
//------------------------------------------------------------------------------
-double DBTypeConversion::getValue(const Reference& xVariant,
- const Date& rNullDate,
- sal_Int16 nKeyType)
+double DBTypeConversion::getValue( const Reference< XColumn >& i_column, const Date& i_relativeToNullDate )
{
try
{
- switch (nKeyType & ~NumberFormat::DEFINED)
+ const Reference< XPropertySet > xProp( i_column, UNO_QUERY_THROW );
+
+ const sal_Int32 nColumnType = ::comphelper::getINT32( xProp->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_TYPE ) ) );
+ switch ( nColumnType )
{
- case NumberFormat::DATE:
- return toDouble( xVariant->getDate(), rNullDate);
- case NumberFormat::DATETIME:
- return toDouble(xVariant->getTimestamp(),rNullDate);
- case NumberFormat::TIME:
- return toDouble(xVariant->getTime());
- default:
+ case DataType::DATE:
+ return toDouble( i_column->getDate(), i_relativeToNullDate );
+
+ case DataType::TIME:
+ return toDouble( i_column->getTime() );
+
+ case DataType::TIMESTAMP:
+ return toDouble( i_column->getTimestamp(), i_relativeToNullDate );
+
+ default:
{
- Reference xProp(xVariant,UNO_QUERY);
- if ( xProp.is()
- && xProp->getPropertySetInfo()->hasPropertyByName(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISSIGNED))
- && !::comphelper::getBOOL(xProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISSIGNED))) )
+ sal_Bool bIsSigned = sal_True;
+ OSL_VERIFY( xProp->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_ISSIGNED ) ) >>= bIsSigned );
+ if ( !bIsSigned )
{
- switch (::comphelper::getINT32(xProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))))
+ switch ( nColumnType)
{
case DataType::TINYINT:
- return static_cast(static_cast(xVariant->getByte()));
+ return static_cast(static_cast(i_column->getByte()));
case DataType::SMALLINT:
- return static_cast(static_cast(xVariant->getShort()));
+ return static_cast(static_cast(i_column->getShort()));
case DataType::INTEGER:
- return static_cast(static_cast(xVariant->getInt()));
+ return static_cast(static_cast(i_column->getInt()));
case DataType::BIGINT:
- return static_cast(static_cast(xVariant->getLong()));
+ return static_cast(static_cast(i_column->getLong()));
}
}
-
- return xVariant->getDouble();
}
+ return i_column->getDouble();
}
}
- catch(const Exception& )
+ catch( const Exception& )
{
+ DBG_UNHANDLED_EXCEPTION();
return 0.0;
}
}
//------------------------------------------------------------------------------
-::rtl::OUString DBTypeConversion::getValue(const Reference< XPropertySet>& _xColumn,
+::rtl::OUString DBTypeConversion::getFormattedValue(const Reference< XPropertySet>& _xColumn,
const Reference& _xFormatter,
const ::com::sun::star::lang::Locale& _rLocale,
const Date& _rNullDate)
{
- OSL_ENSURE(_xColumn.is() && _xFormatter.is(), "DBTypeConversion::getValue: invalid arg !");
+ OSL_ENSURE(_xColumn.is() && _xFormatter.is(), "DBTypeConversion::getFormattedValue: invalid arg !");
if (!_xColumn.is() || !_xFormatter.is())
return ::rtl::OUString();
@@ -425,7 +429,7 @@ double DBTypeConversion::getValue(const Reference& xVariant,
}
catch (const Exception& )
{
- OSL_ENSURE(false, "DBTypeConversion::getValue: caught an exception while asking for the format key!");
+ OSL_ENSURE(false, "DBTypeConversion::getFormattedValue: caught an exception while asking for the format key!");
}
if (!nKey)
@@ -441,11 +445,11 @@ double DBTypeConversion::getValue(const Reference& xVariant,
sal_Int16 nKeyType = getNumberFormatType(_xFormatter, nKey) & ~NumberFormat::DEFINED;
- return DBTypeConversion::getValue(Reference< XColumn > (_xColumn, UNO_QUERY), _xFormatter, _rNullDate, nKey, nKeyType);
+ return DBTypeConversion::getFormattedValue(Reference< XColumn > (_xColumn, UNO_QUERY), _xFormatter, _rNullDate, nKey, nKeyType);
}
//------------------------------------------------------------------------------
-::rtl::OUString DBTypeConversion::getValue(const Reference& xVariant,
+::rtl::OUString DBTypeConversion::getFormattedValue(const Reference& xVariant,
const Reference& xFormatter,
const Date& rNullDate,
sal_Int32 nKey,
@@ -462,23 +466,20 @@ double DBTypeConversion::getValue(const Reference& xVariant,
case NumberFormat::DATETIME:
{
// get a value which represents the given date, relative to the given null date
- double fValue = getValue(xVariant, rNullDate, nKeyType);
+ double fValue = getValue( xVariant, rNullDate );
if ( !xVariant->wasNull() )
{
// get the null date of the formatter
Date aFormatterNullDate( rNullDate );
try
{
- Reference< XPropertySet > xFormatterSettings;
- Reference< XNumberFormatsSupplier > xSupplier( xFormatter->getNumberFormatsSupplier( ) );
- if ( xSupplier.is() )
- xFormatterSettings = xSupplier->getNumberFormatSettings();
- if ( xFormatterSettings.is() )
- xFormatterSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NullDate" ) ) ) >>= aFormatterNullDate;
+ Reference< XNumberFormatsSupplier > xSupplier( xFormatter->getNumberFormatsSupplier(), UNO_SET_THROW );
+ Reference< XPropertySet > xFormatterSettings( xSupplier->getNumberFormatSettings(), UNO_SET_THROW );
+ OSL_VERIFY( xFormatterSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NullDate" ) ) ) >>= aFormatterNullDate );
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "DBTypeConversion::getValue: caught an exception while retrieving the formatter's NullDate!" );
+ DBG_UNHANDLED_EXCEPTION();
}
// get a value which represents the given date, relative to the null date of the formatter
fValue -= toDays( rNullDate, aFormatterNullDate );
diff --git a/connectivity/source/commontools/TSkipDeletedSet.cxx b/connectivity/source/commontools/TSkipDeletedSet.cxx
index 2d144ab72941..ccef25db11e3 100644
--- a/connectivity/source/commontools/TSkipDeletedSet.cxx
+++ b/connectivity/source/commontools/TSkipDeletedSet.cxx
@@ -154,10 +154,15 @@ sal_Bool OSkipDeletedSet::skipDeleted(IResultSetHelper::Movement _eCursorPositio
bDone = sal_False;
}
- if(bDataFound && bDone )
+ if(bDataFound && bDone)
{
const sal_Int32 nDriverPos = m_pHelper->getDriverPos();
- if ( ::std::find(m_aBookmarksPositions.begin(),m_aBookmarksPositions.end(),nDriverPos) == m_aBookmarksPositions.end() )
+ if ( m_bDeletedVisible )
+ {
+ if ( nDriverPos > (sal_Int32)m_aBookmarksPositions.size() )
+ m_aBookmarksPositions.push_back(nDriverPos);
+ }
+ else if ( ::std::find(m_aBookmarksPositions.begin(),m_aBookmarksPositions.end(),nDriverPos) == m_aBookmarksPositions.end() )
m_aBookmarksPositions.push_back(nDriverPos);
/*sal_Int32 nDriverPos = m_pHelper->getDriverPos();
if(m_aBookmarks.find(nDriverPos) == m_aBookmarks.end())
diff --git a/connectivity/source/commontools/dbtools.cxx b/connectivity/source/commontools/dbtools.cxx
index 05bcf997268f..a216864fd172 100644
--- a/connectivity/source/commontools/dbtools.cxx
+++ b/connectivity/source/commontools/dbtools.cxx
@@ -261,7 +261,7 @@ Reference< XDataSource> getDataSource_allowException(
const ::rtl::OUString& _rsTitleOrPath,
const Reference< XMultiServiceFactory >& _rxFactory )
{
- OSL_ENSURE( _rsTitleOrPath.getLength(), "getDataSource_allowException: invalid arg !" );
+ ENSURE_OR_RETURN( _rsTitleOrPath.getLength(), "getDataSource_allowException: invalid arg !", NULL );
Reference< XNameAccess> xDatabaseContext(
_rxFactory->createInstance(
@@ -281,8 +281,9 @@ Reference< XDataSource > getDataSource(
{
xDS = getDataSource_allowException( _rsTitleOrPath, _rxFactory );
}
- catch(Exception)
+ catch( const Exception& )
{
+ DBG_UNHANDLED_EXCEPTION();
}
return xDS;
diff --git a/connectivity/source/commontools/formattedcolumnvalue.cxx b/connectivity/source/commontools/formattedcolumnvalue.cxx
index d63c83524389..98a6e3c2ece9 100644
--- a/connectivity/source/commontools/formattedcolumnvalue.cxx
+++ b/connectivity/source/commontools/formattedcolumnvalue.cxx
@@ -328,7 +328,7 @@ namespace dbtools
{
if ( m_pData->m_bNumericField )
{
- sStringValue = DBTypeConversion::getValue(
+ sStringValue = DBTypeConversion::getFormattedValue(
m_pData->m_xColumn, m_pData->m_xFormatter, m_pData->m_aNullDate, m_pData->m_nFormatKey, m_pData->m_nKeyType
);
}
diff --git a/connectivity/source/drivers/ado/ACatalog.cxx b/connectivity/source/drivers/ado/ACatalog.cxx
index d73ac4746fa3..4db595636eb4 100644
--- a/connectivity/source/drivers/ado/ACatalog.cxx
+++ b/connectivity/source/drivers/ado/ACatalog.cxx
@@ -81,7 +81,7 @@ void OCatalog::refreshTables()
if(m_pTables)
m_pTables->reFill(aVector);
else
- m_pTables = new OTables(this,m_aMutex,aVector,aTables,m_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ m_pTables = new OTables(this,m_aMutex,aVector,aTables,m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers());
}
// -------------------------------------------------------------------------
void OCatalog::refreshViews()
@@ -94,7 +94,7 @@ void OCatalog::refreshViews()
if(m_pViews)
m_pViews->reFill(aVector);
else
- m_pViews = new OViews(this,m_aMutex,aVector,aViews,m_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ m_pViews = new OViews(this,m_aMutex,aVector,aViews,m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers());
}
// -------------------------------------------------------------------------
void OCatalog::refreshGroups()
@@ -107,7 +107,7 @@ void OCatalog::refreshGroups()
if(m_pGroups)
m_pGroups->reFill(aVector);
else
- m_pGroups = new OGroups(this,m_aMutex,aVector,aGroups,m_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ m_pGroups = new OGroups(this,m_aMutex,aVector,aGroups,m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers());
}
// -------------------------------------------------------------------------
void OCatalog::refreshUsers()
@@ -120,7 +120,7 @@ void OCatalog::refreshUsers()
if(m_pUsers)
m_pUsers->reFill(aVector);
else
- m_pUsers = new OUsers(this,m_aMutex,aVector,aUsers,m_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ m_pUsers = new OUsers(this,m_aMutex,aVector,aUsers,m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers());
}
// -------------------------------------------------------------------------
diff --git a/connectivity/source/drivers/ado/AColumns.cxx b/connectivity/source/drivers/ado/AColumns.cxx
index b2e383f53e0d..60140e9be93e 100644
--- a/connectivity/source/drivers/ado/AColumns.cxx
+++ b/connectivity/source/drivers/ado/AColumns.cxx
@@ -72,8 +72,14 @@ Reference< XPropertySet > OColumns::createDescriptor()
sdbcx::ObjectType OColumns::appendObject( const ::rtl::OUString&, const Reference< XPropertySet >& descriptor )
{
OAdoColumn* pColumn = NULL;
+ Reference< XPropertySet > xColumn;
if ( !getImplementation( pColumn, descriptor ) || pColumn == NULL )
- m_pConnection->throwGenericSQLException( STR_INVALID_COLUMN_DESCRIPTOR_ERROR,static_cast(this) );
+ {
+ // m_pConnection->throwGenericSQLException( STR_INVALID_COLUMN_DESCRIPTOR_ERROR,static_cast(this) );
+ pColumn = new OAdoColumn(isCaseSensitive(),m_pConnection);
+ xColumn = pColumn;
+ ::comphelper::copyProperties(descriptor,xColumn);
+ }
WpADOColumn aColumn = pColumn->getColumnImpl();
diff --git a/connectivity/source/drivers/ado/ADriver.cxx b/connectivity/source/drivers/ado/ADriver.cxx
index 20eb6910f849..5b89623c28d8 100644
--- a/connectivity/source/drivers/ado/ADriver.cxx
+++ b/connectivity/source/drivers/ado/ADriver.cxx
@@ -163,6 +163,37 @@ void ODriver::impl_checkURL_throw(const ::rtl::OUString& _sUrl)
Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const ::rtl::OUString& url, const Sequence< PropertyValue >& /*info*/ ) throw(SQLException, RuntimeException)
{
impl_checkURL_throw(url);
+ if ( acceptsURL(url) )
+ {
+ ::std::vector< DriverPropertyInfo > aDriverInfo;
+
+ Sequence< ::rtl::OUString > aBooleanValues(2);
+ aBooleanValues[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) );
+ aBooleanValues[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) );
+
+ aDriverInfo.push_back(DriverPropertyInfo(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IgnoreDriverPrivileges"))
+ ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Ignore the privileges from the database driver."))
+ ,sal_False
+ ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) )
+ ,aBooleanValues)
+ );
+ aDriverInfo.push_back(DriverPropertyInfo(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EscapeDateTime"))
+ ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Escape date time format."))
+ ,sal_False
+ ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) )
+ ,aBooleanValues)
+ );
+ aDriverInfo.push_back(DriverPropertyInfo(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TypeInfoSettings"))
+ ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Defines how the type info of the database metadata should be manipulated."))
+ ,sal_False
+ ,::rtl::OUString( )
+ ,Sequence< ::rtl::OUString > ())
+ );
+ return Sequence< DriverPropertyInfo >(&aDriverInfo[0],aDriverInfo.size());
+ }
return Sequence< DriverPropertyInfo >();
}
// --------------------------------------------------------------------------------
diff --git a/connectivity/source/drivers/ado/ado.xcu b/connectivity/source/drivers/ado/ado.xcu
index 50c29cf7ba2e..e95e1a676c12 100755
--- a/connectivity/source/drivers/ado/ado.xcu
+++ b/connectivity/source/drivers/ado/ado.xcu
@@ -164,6 +164,11 @@
false
+
+
+ Column(2) = 16,Column(3) = 1
+
+
diff --git a/connectivity/source/drivers/ado/adoimp.cxx b/connectivity/source/drivers/ado/adoimp.cxx
index 1bc136a35662..b59f41a597fa 100644
--- a/connectivity/source/drivers/ado/adoimp.cxx
+++ b/connectivity/source/drivers/ado/adoimp.cxx
@@ -105,7 +105,7 @@ sal_Int32 ADOS::MapADOType2Jdbc(DataTypeEnum eType)
case adDBTime: nType = DataType::TIME; break;
case adDate:
case adDBTimeStamp: nType = DataType::TIMESTAMP; break;
- case adBoolean: nType = DataType::BIT; break;
+ case adBoolean: nType = DataType::BOOLEAN; break;
// case adArray: nType = DataType::ARRAY; break;
case adBinary: nType = DataType::BINARY; break;
case adGUID: nType = DataType::OBJECT; break;
@@ -151,6 +151,7 @@ DataTypeEnum ADOS::MapJdbc2ADOType(sal_Int32 _nType,sal_Int32 _nJetEngine)
case DataType::DATE: return isJetEngine(_nJetEngine) ? adDate : adDBDate; break;
case DataType::TIME: return adDBTime; break;
case DataType::TIMESTAMP: return isJetEngine(_nJetEngine) ? adDate : adDBTimeStamp; break;
+ case DataType::BOOLEAN:
case DataType::BIT: return adBoolean; break;
case DataType::BINARY: return adBinary; break;
case DataType::VARCHAR: return adVarWChar; break;
diff --git a/connectivity/source/drivers/calc/CTable.cxx b/connectivity/source/drivers/calc/CTable.cxx
index 3c9017e1c792..ef150f126060 100644
--- a/connectivity/source/drivers/calc/CTable.cxx
+++ b/connectivity/source/drivers/calc/CTable.cxx
@@ -470,8 +470,8 @@ void OCalcTable::fillColumns()
String aStrFieldName;
aStrFieldName.AssignAscii("Column");
::rtl::OUString aTypeName;
- ::comphelper::UStringMixEqual aCase(m_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers());
- const sal_Bool bStoresMixedCaseQuotedIdentifiers = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ ::comphelper::UStringMixEqual aCase(m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers());
+ const sal_Bool bStoresMixedCaseQuotedIdentifiers = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
for (sal_Int32 i = 0; i < m_nDataCols; i++)
{
diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx
index ccbc6c46966f..cd11204b3570 100644
--- a/connectivity/source/drivers/dbase/DIndex.cxx
+++ b/connectivity/source/drivers/dbase/DIndex.cxx
@@ -67,7 +67,7 @@ using namespace com::sun::star::lang;
IMPLEMENT_SERVICE_INFO(ODbaseIndex,"com.sun.star.sdbcx.driver.dbase.Index","com.sun.star.sdbcx.Index");
// -------------------------------------------------------------------------
-ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable) : OIndex(sal_True/*_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers()*/)
+ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable) : OIndex(sal_True/*_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers()*/)
,m_pFileStream(NULL)
,m_nCurNode(NODE_NOTFOUND)
,m_pTable(_pTable)
@@ -80,7 +80,7 @@ ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable) : OIndex(sal_True/*_pTable->getCo
ODbaseIndex::ODbaseIndex( ODbaseTable* _pTable,
const NDXHeader& _rHeader,
const ::rtl::OUString& _rName)
- :OIndex(_rName,::rtl::OUString(),_rHeader.db_unique,sal_False,sal_False,sal_True) // _pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers()
+ :OIndex(_rName,::rtl::OUString(),_rHeader.db_unique,sal_False,sal_False,sal_True) // _pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers()
,m_pFileStream(NULL)
,m_aHeader(_rHeader)
,m_nCurNode(NODE_NOTFOUND)
diff --git a/connectivity/source/drivers/dbase/DIndexColumns.cxx b/connectivity/source/drivers/dbase/DIndexColumns.cxx
index 59682a38d8af..1ea40b7bc03f 100644
--- a/connectivity/source/drivers/dbase/DIndexColumns.cxx
+++ b/connectivity/source/drivers/dbase/DIndexColumns.cxx
@@ -69,7 +69,7 @@ sdbcx::ObjectType ODbaseIndexColumns::createObject(const ::rtl::OUString& _rName
,sal_False
,sal_False
,sal_False
- ,pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ ,pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
return xRet;
}
@@ -82,7 +82,7 @@ void ODbaseIndexColumns::impl_refresh() throw(RuntimeException)
// -------------------------------------------------------------------------
Reference< XPropertySet > ODbaseIndexColumns::createDescriptor()
{
- return new sdbcx::OIndexColumn(m_pIndex->getTable()->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ return new sdbcx::OIndexColumn(m_pIndex->getTable()->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
}
// -------------------------------------------------------------------------
sdbcx::ObjectType ODbaseIndexColumns::appendObject( const ::rtl::OUString& /*_rForName*/, const Reference< XPropertySet >& descriptor )
diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx
index 2c1438debbef..a0844b93b0b7 100644
--- a/connectivity/source/drivers/dbase/DTable.cxx
+++ b/connectivity/source/drivers/dbase/DTable.cxx
@@ -340,7 +340,7 @@ void ODbaseTable::fillColumns()
aStrFieldName.AssignAscii("Column");
::rtl::OUString aTypeName;
static const ::rtl::OUString sVARCHAR(RTL_CONSTASCII_USTRINGPARAM("VARCHAR"));
- const sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ const sal_Bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
const bool bFoxPro = m_aHeader.db_typ == VisualFoxPro || m_aHeader.db_typ == VisualFoxProAuto || m_aHeader.db_typ == FoxProMemo;
sal_Int32 i = 0;
@@ -2208,7 +2208,7 @@ void ODbaseTable::alterColumn(sal_Int32 index,
if(xOldColumn.is())
xCopyColumn = xOldColumn->createDataDescriptor();
else
- xCopyColumn = new OColumn(getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ xCopyColumn = new OColumn(getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
::comphelper::copyProperties(descriptor,xCopyColumn);
@@ -2233,7 +2233,7 @@ void ODbaseTable::alterColumn(sal_Int32 index,
if(xColumn.is())
xCpy = xColumn->createDataDescriptor();
else
- xCpy = new OColumn(getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ xCpy = new OColumn(getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
::comphelper::copyProperties(xProp,xCpy);
xAppend->appendByDescriptor(xCpy);
}
@@ -2249,7 +2249,7 @@ void ODbaseTable::alterColumn(sal_Int32 index,
if(xColumn.is())
xCpy = xColumn->createDataDescriptor();
else
- xCpy = new OColumn(getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ xCpy = new OColumn(getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
::comphelper::copyProperties(xProp,xCpy);
xAppend->appendByDescriptor(xCpy);
}
@@ -2390,7 +2390,7 @@ void ODbaseTable::addColumn(const Reference< XPropertySet >& _xNewColumn)
pNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(::rtl::OUString(sTempName)));
{
Reference xAppend(pNewTable->getColumns(),UNO_QUERY);
- sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ sal_Bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
// copy the structure
for(sal_Int32 i=0;i < m_pColumns->getCount();++i)
{
@@ -2463,7 +2463,7 @@ void ODbaseTable::dropColumn(sal_Int32 _nPos)
pNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(::rtl::OUString(sTempName)));
{
Reference xAppend(pNewTable->getColumns(),UNO_QUERY);
- sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ sal_Bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
// copy the structure
for(sal_Int32 i=0;i < m_pColumns->getCount();++i)
{
diff --git a/connectivity/source/drivers/evoab/LFolderList.cxx b/connectivity/source/drivers/evoab/LFolderList.cxx
index c9bca3d2d207..02d3fb284312 100644
--- a/connectivity/source/drivers/evoab/LFolderList.cxx
+++ b/connectivity/source/drivers/evoab/LFolderList.cxx
@@ -107,7 +107,7 @@ void OEvoabFolderList::fillColumns(const ::com::sun::star::lang::Locale& _aLocal
m_aPrecisions.reserve(nFieldCount);
m_aScales.reserve(nFieldCount);
- sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ sal_Bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
CharClass aCharClass(pConnection->getDriver()->getFactory(),_aLocale);
// read description
sal_Unicode cDecimalDelimiter = pConnection->getDecimalDelimiter();
diff --git a/connectivity/source/drivers/evoab/LTable.cxx b/connectivity/source/drivers/evoab/LTable.cxx
index c77924d2a8ca..c1a41e91acf2 100644
--- a/connectivity/source/drivers/evoab/LTable.cxx
+++ b/connectivity/source/drivers/evoab/LTable.cxx
@@ -119,7 +119,7 @@ void OEvoabTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale)
m_aPrecisions.reserve(nFieldCount);
m_aScales.reserve(nFieldCount);
- sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ sal_Bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
CharClass aCharClass(pConnection->getDriver()->getFactory(),_aLocale);
// read description
sal_Unicode cDecimalDelimiter = pConnection->getDecimalDelimiter();
@@ -674,7 +674,7 @@ sal_Bool OEvoabTable::setColumnAliases()
aColumnFinalName = aColumnReadName;
sColumnFinalName = aColumnFinalName;
- sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ sal_Bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
::rtl::OUString aTypeName;
aTypeName = ::rtl::OUString::createFromAscii("VARCHAR");
sdbcx::OColumn* pColumn = new sdbcx::OColumn(sColumnFinalName,aTypeName,::rtl::OUString(),
diff --git a/connectivity/source/drivers/file/FColumns.cxx b/connectivity/source/drivers/file/FColumns.cxx
index 3c3929a80c50..e92855db23fa 100644
--- a/connectivity/source/drivers/file/FColumns.cxx
+++ b/connectivity/source/drivers/file/FColumns.cxx
@@ -72,7 +72,7 @@ sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName)
sal_False,
sal_False,
sal_False,
- m_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers());
+ m_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
xRet = pRet;
break;
}
diff --git a/connectivity/source/drivers/file/FResultSet.cxx b/connectivity/source/drivers/file/FResultSet.cxx
index aebd6f4af3bf..b9b7180eb65e 100644
--- a/connectivity/source/drivers/file/FResultSet.cxx
+++ b/connectivity/source/drivers/file/FResultSet.cxx
@@ -138,7 +138,7 @@ OResultSet::OResultSet(OStatement_Base* pStmt,OSQLParseTreeIterator& _aSQLIte
m_nResultSetConcurrency = isCount() ? ResultSetConcurrency::READ_ONLY : ResultSetConcurrency::UPDATABLE;
construct();
- m_aSkipDeletedSet.SetDeleted(m_bShowDeleted);
+ m_aSkipDeletedSet.SetDeletedVisible(m_bShowDeleted);
osl_decrementInterlockedCount( &m_refCount );
}
@@ -1692,7 +1692,7 @@ void OResultSet::setBoundedColumns(const OValueRefRow& _rRow,
::std::vector& _rColMapping)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSet::setBoundedColumns" );
- ::comphelper::UStringMixEqual aCase(_xMetaData->storesMixedCaseQuotedIdentifiers());
+ ::comphelper::UStringMixEqual aCase(_xMetaData->supportsMixedCaseQuotedIdentifiers());
Reference xTableColumn;
::rtl::OUString sTableColumnName, sSelectColumnRealName;
diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx
index 46f855e3d208..4d10d97b24b5 100644
--- a/connectivity/source/drivers/file/FTable.cxx
+++ b/connectivity/source/drivers/file/FTable.cxx
@@ -50,7 +50,7 @@ using namespace ::com::sun::star::container;
DBG_NAME( file_OFileTable )
OFileTable::OFileTable(sdbcx::OCollection* _pTables,OConnection* _pConnection)
-: OTable_TYPEDEF(_pTables,_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers())
+: OTable_TYPEDEF(_pTables,_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers())
,m_pConnection(_pConnection)
,m_pFileStream(NULL)
,m_nFilePos(0)
@@ -72,7 +72,7 @@ OFileTable::OFileTable( sdbcx::OCollection* _pTables,OConnection* _pConnection,
const ::rtl::OUString& _Description ,
const ::rtl::OUString& _SchemaName,
const ::rtl::OUString& _CatalogName
- ) : OTable_TYPEDEF(_pTables,_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers(),
+ ) : OTable_TYPEDEF(_pTables,_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers(),
_Name,
_Type,
_Description,
diff --git a/connectivity/source/drivers/flat/EConnection.cxx b/connectivity/source/drivers/flat/EConnection.cxx
index c9cec7b5ee10..428f813c2674 100644
--- a/connectivity/source/drivers/flat/EConnection.cxx
+++ b/connectivity/source/drivers/flat/EConnection.cxx
@@ -56,6 +56,7 @@ using namespace ::com::sun::star::lang;
// --------------------------------------------------------------------------------
OFlatConnection::OFlatConnection(ODriver* _pDriver) : OConnection(_pDriver)
+ ,m_nMaxRowsToScan(50)
,m_bHeaderLine(sal_True)
,m_cFieldDelimiter(';')
,m_cStringDelimiter('"')
@@ -108,10 +109,15 @@ void OFlatConnection::construct(const ::rtl::OUString& url,const Sequence< Prope
OSL_VERIFY( pBegin->Value >>= aVal );
m_cThousandDelimiter = aVal.toChar();
}
+ else if ( !pBegin->Name.compareToAscii("MaxRowScan") )
+ {
+ pBegin->Value >>= m_nMaxRowsToScan;
+ }
}
osl_decrementInterlockedCount( &m_refCount );
OConnection::construct(url,info);
+ m_bShowDeleted = sal_True; // we do not supported rows for this type
}
// --------------------------------------------------------------------------------
Reference< XDatabaseMetaData > SAL_CALL OFlatConnection::getMetaData( ) throw(SQLException, RuntimeException)
diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx
index 1d1423ab72f6..4c531f7fecc3 100644
--- a/connectivity/source/drivers/flat/ETable.cxx
+++ b/connectivity/source/drivers/flat/ETable.cxx
@@ -113,11 +113,11 @@ void OFlatTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale)
m_aScales.clear();
// reserve some space
m_aColumns->get().reserve(nFieldCount+1);
- m_aTypes.reserve(nFieldCount+1);
- m_aPrecisions.reserve(nFieldCount+1);
- m_aScales.reserve(nFieldCount+1);
+ m_aTypes.assign(nFieldCount+1,DataType::SQLNULL);
+ m_aPrecisions.assign(nFieldCount+1,-1);
+ m_aScales.assign(nFieldCount+1,-1);
- const sal_Bool bCase = m_pConnection->getMetaData()->storesMixedCaseQuotedIdentifiers();
+ const sal_Bool bCase = m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers();
CharClass aCharClass(pConnection->getDriver()->getFactory(),_aLocale);
// read description
const sal_Unicode cDecimalDelimiter = pConnection->getDecimalDelimiter();
@@ -125,106 +125,186 @@ void OFlatTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale)
String aColumnName;
::rtl::OUString aTypeName;
::comphelper::UStringMixEqual aCase(bCase);
- xub_StrLen nStartPosHeaderLine = 0; // use for eficient way to get the tokens
- xub_StrLen nStartPosFirstLine = 0; // use for eficient way to get the tokens
- xub_StrLen nStartPosFirstLine2 = 0;
+ ::std::vector aColumnNames,m_aTypeNames;
+ m_aTypeNames.resize(nFieldCount);
+ const sal_Int32 nMaxRowsToScan = pConnection->getMaxRowsToScan();
+ sal_Int32 nRowCount = 0;
+ do
+ {
+ xub_StrLen nStartPosHeaderLine = 0; // use for eficient way to get the tokens
+ xub_StrLen nStartPosFirstLine = 0; // use for eficient way to get the tokens
+ xub_StrLen nStartPosFirstLine2 = 0;
+ for (xub_StrLen i = 0; i < nFieldCount; i++)
+ {
+ if ( nRowCount == 0)
+ {
+ if ( bHasHeaderLine )
+ {
+ aHeaderLine.GetTokenSpecial(aColumnName,nStartPosHeaderLine,m_cFieldDelimiter,m_cStringDelimiter);
+ if ( !aColumnName.Len() )
+ {
+ aColumnName = 'C';
+ aColumnName += String::CreateFromInt32(i+1);
+ }
+ }
+ else
+ {
+ // no column name so ...
+ aColumnName = 'C';
+ aColumnName += String::CreateFromInt32(i+1);
+ }
+ aColumnNames.push_back(aColumnName);
+ }
+ impl_fillColumnInfo_nothrow(aFirstLine,nStartPosFirstLine,nStartPosFirstLine2,m_aTypes[i],m_aPrecisions[i],m_aScales[i],m_aTypeNames[i],cDecimalDelimiter,cThousandDelimiter,aCharClass);
+ }
+ ++nRowCount;
+ }
+ while(nRowCount < nMaxRowsToScan && m_pFileStream->ReadByteStringLine(aFirstLine,nEncoding));
+
for (xub_StrLen i = 0; i < nFieldCount; i++)
{
- if ( bHasHeaderLine )
+ // check if the columname already exists
+ String aAlias(aColumnNames[i]);
+ OSQLColumns::Vector::const_iterator aFind = connectivity::find(m_aColumns->get().begin(),m_aColumns->get().end(),aAlias,aCase);
+ sal_Int32 nExprCnt = 0;
+ while(aFind != m_aColumns->get().end())
{
- aHeaderLine.GetTokenSpecial(aColumnName,nStartPosHeaderLine,m_cFieldDelimiter,m_cStringDelimiter);
- if ( !aColumnName.Len() )
+ (aAlias = aColumnNames[i]) += String::CreateFromInt32(++nExprCnt);
+ aFind = connectivity::find(m_aColumns->get().begin(),m_aColumns->get().end(),aAlias,aCase);
+ }
+
+ sdbcx::OColumn* pColumn = new sdbcx::OColumn(aAlias,m_aTypeNames[i],::rtl::OUString(),::rtl::OUString(),
+ ColumnValue::NULLABLE,
+ m_aPrecisions[i],
+ m_aScales[i],
+ m_aTypes[i],
+ sal_False,
+ sal_False,
+ sal_False,
+ bCase);
+ Reference< XPropertySet> xCol = pColumn;
+ m_aColumns->get().push_back(xCol);
+ }
+ m_pFileStream->Seek(m_nStartRowFilePos);
+}
+void OFlatTable::impl_fillColumnInfo_nothrow(QuotedTokenizedString& aFirstLine,xub_StrLen& nStartPosFirstLine,xub_StrLen& nStartPosFirstLine2
+ ,sal_Int32& io_nType,sal_Int32& io_nPrecisions,sal_Int32& io_nScales,String& o_sTypeName
+ ,const sal_Unicode cDecimalDelimiter,const sal_Unicode cThousandDelimiter,const CharClass& aCharClass)
+{
+ if ( io_nType != DataType::VARCHAR )
+ {
+ BOOL bNumeric = io_nType == DataType::SQLNULL || io_nType == DataType::DOUBLE || io_nType == DataType::DECIMAL || io_nType == DataType::INTEGER;
+ ULONG nIndex = 0;
+
+ if ( bNumeric )
+ {
+ // first without fielddelimiter
+ String aField;
+ aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine,m_cFieldDelimiter,'\0');
+ if (aField.Len() == 0 ||
+ (m_cStringDelimiter && m_cStringDelimiter == aField.GetChar(0)))
{
- aColumnName = 'C';
- aColumnName += String::CreateFromInt32(i+1);
- }
- }
- else
- {
- // no column name so ...
- aColumnName = 'C';
- aColumnName += String::CreateFromInt32(i+1);
- }
- sal_Int32 eType;
- sal_uInt16 nPrecision = 0;
- sal_uInt16 nScale = 0;
-
- sal_Bool bNumeric = sal_False;
- sal_uIntPtr nIndex = 0;
-
- // first without fielddelimiter
- String aField;
- aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine,m_cFieldDelimiter,'\0');
- if (aField.Len() == 0 ||
- (m_cStringDelimiter && m_cStringDelimiter == aField.GetChar(0)))
- {
- bNumeric = sal_False;
- if ( m_cStringDelimiter != '\0' )
- aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
- else
- nStartPosFirstLine2 = nStartPosFirstLine;
- }
- else
- {
- String aField2;
- if ( m_cStringDelimiter != '\0' )
- aFirstLine.GetTokenSpecial(aField2,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
- else
- aField2 = aField;
-
- if (aField2.Len() == 0)
- {
- bNumeric = sal_False;
+ bNumeric = FALSE;
+ if ( m_cStringDelimiter != '\0' )
+ aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
+ else
+ nStartPosFirstLine2 = nStartPosFirstLine;
}
else
{
- bNumeric = sal_True;
- xub_StrLen nDot = 0;
- xub_StrLen nDecimalDelCount = 0;
- for (xub_StrLen j = 0; j < aField2.Len(); j++)
+ String aField2;
+ if ( m_cStringDelimiter != '\0' )
+ aFirstLine.GetTokenSpecial(aField2,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
+ else
+ aField2 = aField;
+
+ if (aField2.Len() == 0)
{
- const sal_Unicode c = aField2.GetChar(j);
- // nur Ziffern und Dezimalpunkt und Tausender-Trennzeichen?
- if ( ( !cDecimalDelimiter || c != cDecimalDelimiter ) &&
- ( !cThousandDelimiter || c != cThousandDelimiter ) &&
- !aCharClass.isDigit(aField2,j) &&
- ( j != 0 || (c != '+' && c != '-' ) ) )
- {
- bNumeric = sal_False;
- break;
- }
- if (cDecimalDelimiter && c == cDecimalDelimiter)
- {
- nPrecision = 15; // we have an decimal value
- nScale = 2;
- ++nDecimalDelCount;
- } // if (cDecimalDelimiter && c == cDecimalDelimiter)
- if ( c == '.' )
- ++nDot;
+ bNumeric = FALSE;
}
-
- if (nDecimalDelCount > 1 || nDot > 1 ) // if there is more than one dot it isn't a number
- bNumeric = sal_False;
- if (bNumeric && cThousandDelimiter)
+ else
{
- // Ist der Trenner richtig angegeben?
- const String aValue = aField2.GetToken(0,cDecimalDelimiter);
- for (sal_Int32 j = aValue.Len() - 4; j >= 0; j -= 4)
+ bNumeric = TRUE;
+ xub_StrLen nDot = 0;
+ xub_StrLen nDecimalDelCount = 0;
+ xub_StrLen nSpaceCount = 0;
+ for (xub_StrLen j = 0; j < aField2.Len(); j++)
{
- const sal_Unicode c = aValue.GetChar(static_cast(j));
- // nur Ziffern und Dezimalpunkt und Tausender-Trennzeichen?
- if (c == cThousandDelimiter && j)
- continue;
- else
+ const sal_Unicode c = aField2.GetChar(j);
+ if ( j == nSpaceCount && m_cFieldDelimiter != 32 && c == 32 )
{
- bNumeric = sal_False;
+ ++nSpaceCount;
+ continue;
+ }
+ // nur Ziffern und Dezimalpunkt und Tausender-Trennzeichen?
+ if ( ( !cDecimalDelimiter || c != cDecimalDelimiter ) &&
+ ( !cThousandDelimiter || c != cThousandDelimiter ) &&
+ !aCharClass.isDigit(aField2,j) &&
+ ( j != 0 || (c != '+' && c != '-' ) ) )
+ {
+ bNumeric = FALSE;
break;
}
+ if (cDecimalDelimiter && c == cDecimalDelimiter)
+ {
+ io_nPrecisions = 15; // we have an decimal value
+ io_nScales = 2;
+ ++nDecimalDelCount;
+ } // if (cDecimalDelimiter && c == cDecimalDelimiter)
+ if ( c == '.' )
+ ++nDot;
+ }
+
+ if (nDecimalDelCount > 1 || nDot > 1 ) // if there is more than one dot it isn't a number
+ bNumeric = FALSE;
+ if (bNumeric && cThousandDelimiter)
+ {
+ // Ist der Trenner richtig angegeben?
+ const String aValue = aField2.GetToken(0,cDecimalDelimiter);
+ for (sal_Int32 j = aValue.Len() - 4; j >= 0; j -= 4)
+ {
+ const sal_Unicode c = aValue.GetChar(static_cast(j));
+ // nur Ziffern und Dezimalpunkt und Tausender-Trennzeichen?
+ if (c == cThousandDelimiter && j)
+ continue;
+ else
+ {
+ bNumeric = FALSE;
+ break;
+ }
+ }
+ }
+
+ // jetzt koennte es noch ein Datumsfeld sein
+ if (!bNumeric)
+ {
+ try
+ {
+ nIndex = m_xNumberFormatter->detectNumberFormat(::com::sun::star::util::NumberFormat::ALL,aField2);
+ }
+ catch(Exception&)
+ {
+ }
}
}
-
- // jetzt koennte es noch ein Datumsfeld sein
- if (!bNumeric)
+ }
+ }
+ else if ( io_nType == DataType::DATE || io_nType == DataType::TIMESTAMP || io_nType == DataType::TIME)
+ {
+ String aField;
+ aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine,m_cFieldDelimiter,'\0');
+ if (aField.Len() == 0 ||
+ (m_cStringDelimiter && m_cStringDelimiter == aField.GetChar(0)))
+ {
+ }
+ else
+ {
+ String aField2;
+ if ( m_cStringDelimiter != '\0' )
+ aFirstLine.GetTokenSpecial(aField2,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
+ else
+ aField2 = aField;
+ if (aField2.Len() )
{
try
{
@@ -242,87 +322,83 @@ void OFlatTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale)
{
if (cDecimalDelimiter)
{
- if(nPrecision)
+ if(io_nPrecisions)
{
- eType = DataType::DECIMAL;
+ io_nType = DataType::DECIMAL;
static const ::rtl::OUString s_sDECIMAL(RTL_CONSTASCII_USTRINGPARAM("DECIMAL"));
- aTypeName = s_sDECIMAL;
+ o_sTypeName = s_sDECIMAL;
}
else
{
- eType = DataType::DOUBLE;
+ io_nType = DataType::DOUBLE;
static const ::rtl::OUString s_sDOUBLE(RTL_CONSTASCII_USTRINGPARAM("DOUBLE"));
- aTypeName = s_sDOUBLE;
+ o_sTypeName = s_sDOUBLE;
}
}
else
- eType = DataType::INTEGER;
+ {
+ io_nType = DataType::INTEGER;
+ io_nPrecisions = 0;
+ io_nScales = 0;
+ }
nFlags = ColumnSearch::BASIC;
}
else
{
-
switch (comphelper::getNumberFormatType(m_xNumberFormatter,nIndex))
{
case NUMBERFORMAT_DATE:
- eType = DataType::DATE;
+ io_nType = DataType::DATE;
{
static const ::rtl::OUString s_sDATE(RTL_CONSTASCII_USTRINGPARAM("DATE"));
- aTypeName = s_sDATE;
+ o_sTypeName = s_sDATE;
}
break;
case NUMBERFORMAT_DATETIME:
- eType = DataType::TIMESTAMP;
+ io_nType = DataType::TIMESTAMP;
{
static const ::rtl::OUString s_sTIMESTAMP(RTL_CONSTASCII_USTRINGPARAM("TIMESTAMP"));
- aTypeName = s_sTIMESTAMP;
+ o_sTypeName = s_sTIMESTAMP;
}
break;
case NUMBERFORMAT_TIME:
- eType = DataType::TIME;
+ io_nType = DataType::TIME;
{
static const ::rtl::OUString s_sTIME(RTL_CONSTASCII_USTRINGPARAM("TIME"));
- aTypeName = s_sTIME;
+ o_sTypeName = s_sTIME;
}
break;
default:
- eType = DataType::VARCHAR;
- nPrecision = 0; // nyi: Daten koennen aber laenger sein!
- nScale = 0;
+ io_nType = DataType::VARCHAR;
+ io_nPrecisions = 0; // nyi: Daten koennen aber laenger sein!
+ io_nScales = 0;
{
static const ::rtl::OUString s_sVARCHAR(RTL_CONSTASCII_USTRINGPARAM("VARCHAR"));
- aTypeName = s_sVARCHAR;
+ o_sTypeName = s_sVARCHAR;
}
};
nFlags |= ColumnSearch::CHAR;
}
-
- // check if the columname already exists
- String aAlias(aColumnName);
- OSQLColumns::Vector::const_iterator aFind = connectivity::find(m_aColumns->get().begin(),m_aColumns->get().end(),aAlias,aCase);
- sal_Int32 nExprCnt = 0;
- while(aFind != m_aColumns->get().end())
- {
- (aAlias = aColumnName) += String::CreateFromInt32(++nExprCnt);
- aFind = connectivity::find(m_aColumns->get().begin(),m_aColumns->get().end(),aAlias,aCase);
- }
-
- sdbcx::OColumn* pColumn = new sdbcx::OColumn(aAlias,aTypeName,::rtl::OUString(),::rtl::OUString(),
- ColumnValue::NULLABLE,
- nPrecision,
- nScale,
- eType,
- sal_False,
- sal_False,
- sal_False,
- bCase);
- Reference< XPropertySet> xCol = pColumn;
- m_aColumns->get().push_back(xCol);
- m_aTypes.push_back(eType);
- m_aPrecisions.push_back(nPrecision);
- m_aScales.push_back(nScale);
}
- m_pFileStream->Seek(m_nStartRowFilePos);
+ else
+ {
+ String aField;
+ aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine,m_cFieldDelimiter,'\0');
+ if (aField.Len() == 0 ||
+ (m_cStringDelimiter && m_cStringDelimiter == aField.GetChar(0)))
+ {
+ if ( m_cStringDelimiter != '\0' )
+ aFirstLine.GetTokenSpecial(aField,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
+ else
+ nStartPosFirstLine2 = nStartPosFirstLine;
+ }
+ else
+ {
+ String aField2;
+ if ( m_cStringDelimiter != '\0' )
+ aFirstLine.GetTokenSpecial(aField2,nStartPosFirstLine2,m_cFieldDelimiter,m_cStringDelimiter);
+ }
+ }
}
// -------------------------------------------------------------------------
OFlatTable::OFlatTable(sdbcx::OCollection* _pTables,OFlatConnection* _pConnection,
diff --git a/connectivity/source/drivers/flat/flat.xcu b/connectivity/source/drivers/flat/flat.xcu
index d00d1f98c38c..a54394e853e8 100755
--- a/connectivity/source/drivers/flat/flat.xcu
+++ b/connectivity/source/drivers/flat/flat.xcu
@@ -75,8 +75,18 @@
false
+
+
+ 100
+
+
+
+
+ true
+
+ true
diff --git a/connectivity/source/drivers/mozab/MResultSet.cxx b/connectivity/source/drivers/mozab/MResultSet.cxx
index c7c85770419e..da55b60079b3 100644
--- a/connectivity/source/drivers/mozab/MResultSet.cxx
+++ b/connectivity/source/drivers/mozab/MResultSet.cxx
@@ -897,8 +897,8 @@ void OResultSet::analyseWhereClause( const OSQLParseNode* parseT
OSQLParseNode *pOptEscape;
const OSQLParseNode* pPart2 = parseTree->getChild(1);
pColumn = parseTree->getChild(0); // Match Item
- pAtom = pPart2->getChild(parseTree->count()-2); // Match String
- pOptEscape = pPart2->getChild(parseTree->count()-1); // Opt Escape Rule
+ pAtom = pPart2->getChild(pPart2->count()-2); // Match String
+ pOptEscape = pPart2->getChild(pPart2->count()-1); // Opt Escape Rule
const bool bNot = SQL_ISTOKEN(pPart2->getChild(0), NOT);
if (!(pAtom->getNodeType() == SQL_NODE_STRING ||
@@ -1374,7 +1374,7 @@ void OResultSet::setBoundedColumns(const OValueRow& _rRow,
const Reference& _xMetaData,
::std::vector& _rColMapping)
{
- ::comphelper::UStringMixEqual aCase(_xMetaData->storesMixedCaseQuotedIdentifiers());
+ ::comphelper::UStringMixEqual aCase(_xMetaData->supportsMixedCaseQuotedIdentifiers());
Reference xTableColumn;
::rtl::OUString sTableColumnName, sSelectColumnRealName;
diff --git a/connectivity/source/inc/TSkipDeletedSet.hxx b/connectivity/source/inc/TSkipDeletedSet.hxx
index bcd3fc23f1a6..c5d5d5b71dd6 100644
--- a/connectivity/source/inc/TSkipDeletedSet.hxx
+++ b/connectivity/source/inc/TSkipDeletedSet.hxx
@@ -98,7 +98,7 @@ namespace connectivity
@return the last position
*/
inline sal_Int32 getLastPosition() const { return m_aBookmarksPositions.size(); }
- inline void SetDeleted(bool _bDeletedVisible) { m_bDeletedVisible = _bDeletedVisible; }
+ inline void SetDeletedVisible(bool _bDeletedVisible) { m_bDeletedVisible = _bDeletedVisible; }
};
}
#endif // CONNECTIVITY_SKIPDELETEDSSET_HXX
diff --git a/connectivity/source/inc/dbase/DIndexColumns.hxx b/connectivity/source/inc/dbase/DIndexColumns.hxx
index be4f2577237e..6ccdb07c12f9 100644
--- a/connectivity/source/inc/dbase/DIndexColumns.hxx
+++ b/connectivity/source/inc/dbase/DIndexColumns.hxx
@@ -48,7 +48,7 @@ namespace connectivity
ODbaseIndexColumns( ODbaseIndex* _pIndex,
::osl::Mutex& _rMutex,
const TStringVector &_rVector)
- : sdbcx::OCollection(*_pIndex,_pIndex->getTable()->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
+ : sdbcx::OCollection(*_pIndex,_pIndex->getTable()->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
, m_pIndex(_pIndex)
{}
diff --git a/connectivity/source/inc/dbase/DIndexes.hxx b/connectivity/source/inc/dbase/DIndexes.hxx
index e07e0cb90cb3..7988bd0a2727 100644
--- a/connectivity/source/inc/dbase/DIndexes.hxx
+++ b/connectivity/source/inc/dbase/DIndexes.hxx
@@ -50,7 +50,7 @@ namespace connectivity
virtual void dropObject(sal_Int32 _nPos,const ::rtl::OUString _sElementName);
public:
ODbaseIndexes(ODbaseTable* _pTable, ::osl::Mutex& _rMutex,
- const TStringVector &_rVector) : ODbaseIndexes_BASE(*_pTable,_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
+ const TStringVector &_rVector) : ODbaseIndexes_BASE(*_pTable,_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
, m_pTable(_pTable)
{}
diff --git a/connectivity/source/inc/file/FColumns.hxx b/connectivity/source/inc/file/FColumns.hxx
index 119ad228ad55..81214fbe603a 100644
--- a/connectivity/source/inc/file/FColumns.hxx
+++ b/connectivity/source/inc/file/FColumns.hxx
@@ -49,7 +49,7 @@ namespace connectivity
OColumns( OFileTable* _pTable,
::osl::Mutex& _rMutex,
const TStringVector &_rVector
- ) : sdbcx::OCollection(*_pTable,_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
+ ) : sdbcx::OCollection(*_pTable,_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
,m_pTable(_pTable)
{}
};
diff --git a/connectivity/source/inc/file/FTables.hxx b/connectivity/source/inc/file/FTables.hxx
index 4a15985c248b..e5247652e895 100644
--- a/connectivity/source/inc/file/FTables.hxx
+++ b/connectivity/source/inc/file/FTables.hxx
@@ -46,7 +46,7 @@ namespace connectivity
virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException);
public:
OTables(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
- const TStringVector &_rVector) : sdbcx::OCollection(_rParent,_rMetaData->storesMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
+ const TStringVector &_rVector) : sdbcx::OCollection(_rParent,_rMetaData->supportsMixedCaseQuotedIdentifiers(),_rMutex,_rVector)
,m_xMetaData(_rMetaData)
{}
diff --git a/connectivity/source/inc/flat/EConnection.hxx b/connectivity/source/inc/flat/EConnection.hxx
index 3b4fb7e558d6..becd4670f994 100644
--- a/connectivity/source/inc/flat/EConnection.hxx
+++ b/connectivity/source/inc/flat/EConnection.hxx
@@ -38,6 +38,7 @@ namespace connectivity
class OFlatConnection : public file::OConnection
{
private:
+ sal_Int32 m_nMaxRowsToScan;
sal_Bool m_bHeaderLine; // column names in first row
sal_Unicode m_cFieldDelimiter; // look at the name
sal_Unicode m_cStringDelimiter; // delimiter for strings m_cStringDelimiter blabla m_cStringDelimiter
@@ -55,6 +56,7 @@ namespace connectivity
inline sal_Unicode getStringDelimiter() const { return m_cStringDelimiter; }
inline sal_Unicode getDecimalDelimiter() const { return m_cDecimalDelimiter; }
inline sal_Unicode getThousandDelimiter() const { return m_cThousandDelimiter;}
+ inline sal_Int32 getMaxRowsToScan() const { return m_nMaxRowsToScan;}
// XServiceInfo
DECLARE_SERVICE_INFO();
diff --git a/connectivity/source/inc/flat/ETable.hxx b/connectivity/source/inc/flat/ETable.hxx
index 1d3aa9302c3d..cdbb902e9458 100644
--- a/connectivity/source/inc/flat/ETable.hxx
+++ b/connectivity/source/inc/flat/ETable.hxx
@@ -33,6 +33,7 @@
#include "connectivity/CommonTools.hxx"
#include
#include "file/quotedstring.hxx"
+#include
namespace connectivity
{
@@ -67,6 +68,9 @@ namespace connectivity
void fillColumns(const ::com::sun::star::lang::Locale& _aLocale);
sal_Bool CreateFile(const INetURLObject& aFile, sal_Bool& bCreateMemo);
sal_Bool readLine(sal_Int32& _rnCurrentPos);
+ void impl_fillColumnInfo_nothrow(QuotedTokenizedString& aFirstLine,xub_StrLen& nStartPosFirstLine,xub_StrLen& nStartPosFirstLine2
+ ,sal_Int32& io_nType,sal_Int32& io_nPrecisions,sal_Int32& io_nScales,String& o_sTypeName
+ ,const sal_Unicode cDecimalDelimiter,const sal_Unicode cThousandDelimiter,const CharClass& aCharClass);
public:
virtual void refreshColumns();
diff --git a/connectivity/source/parse/PColumn.cxx b/connectivity/source/parse/PColumn.cxx
index 43e38f5a1674..10f4b5b4bdcf 100644
--- a/connectivity/source/parse/PColumn.cxx
+++ b/connectivity/source/parse/PColumn.cxx
@@ -28,12 +28,12 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_connectivity.hxx"
-#ifndef _CONNECTIVITY_SDBCX_COLUMN_HXX_
#include "connectivity/PColumn.hxx"
-#endif
#include "connectivity/dbtools.hxx"
#include "TConnection.hxx"
+
#include
+#include
using namespace ::comphelper;
using namespace connectivity;
@@ -153,7 +153,7 @@ OParseColumn* OParseColumn::createColumnForResultSet( const Reference< XResultSe
_rxResMetaData->getColumnType( _nColumnPos ),
_rxResMetaData->isAutoIncrement( _nColumnPos ),
_rxResMetaData->isCurrency( _nColumnPos ),
- _rxDBMetaData->storesMixedCaseQuotedIdentifiers()
+ _rxDBMetaData->supportsMixedCaseQuotedIdentifiers()
);
pColumn->setTableName( ::dbtools::composeTableName( _rxDBMetaData,
_rxResMetaData->getCatalogName( _nColumnPos ),
@@ -191,38 +191,85 @@ void OParseColumn::construct()
// -----------------------------------------------------------------------------
::cppu::IPropertyArrayHelper & SAL_CALL OParseColumn::getInfoHelper()
{
- OSL_ENSURE( !isNew(), "OParseColumn::OOrderColumn: a *new* OrderColumn?" );
+ OSL_ENSURE( !isNew(), "OParseColumn::getInfoHelper: a *new* ParseColumn?" );
return *OParseColumn_PROP::getArrayHelper();
}
+
// -----------------------------------------------------------------------------
-OOrderColumn::OOrderColumn( const Reference& _xColumn
- ,sal_Bool _bCase
- ,sal_Bool _bAscending)
- : connectivity::sdbcx::OColumn( getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)))
- , getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)))
- , getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE)))
- , getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION)))
- , getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)))
- , getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION)))
- , getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE)))
- , getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)))
- , getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)))
- , sal_False
- , getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY)))
- , _bCase
- )
- , m_bAscending(_bAscending)
+namespace
+{
+ ::rtl::OUString lcl_getColumnTableName( const Reference< XPropertySet >& i_parseColumn )
+ {
+ ::rtl::OUString sColumnTableName;
+ try
+ {
+ OSL_VERIFY( i_parseColumn->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_TABLENAME ) ) >>= sColumnTableName );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return sColumnTableName;
+ }
+}
+
+// -----------------------------------------------------------------------------
+OOrderColumn::OOrderColumn( const Reference& _xColumn, const ::rtl::OUString& i_rOriginatingTableName,
+ sal_Bool _bCase, sal_Bool _bAscending )
+ : connectivity::sdbcx::OColumn(
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))),
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME))),
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))),
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))),
+ getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT))),
+ sal_False,
+ getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY))),
+ _bCase
+ )
+ ,m_bAscending(_bAscending)
+ ,m_sTableName( i_rOriginatingTableName )
{
construct();
}
+
+// -----------------------------------------------------------------------------
+OOrderColumn::OOrderColumn( const Reference& _xColumn, sal_Bool _bCase, sal_Bool _bAscending )
+ : connectivity::sdbcx::OColumn(
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))),
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME))),
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))),
+ getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE))),
+ getINT32(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))),
+ getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT))),
+ sal_False,
+ getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY))),
+ _bCase
+ )
+ ,m_bAscending(_bAscending)
+ ,m_sTableName( lcl_getColumnTableName( _xColumn ) )
+{
+ construct();
+}
+
// -------------------------------------------------------------------------
OOrderColumn::~OOrderColumn()
{
}
+
// -------------------------------------------------------------------------
void OOrderColumn::construct()
{
- registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISASCENDING),PROPERTY_ID_ISASCENDING,0,&m_bAscending, ::getCppuType(reinterpret_cast< sal_Bool*>(NULL)));
+ registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISASCENDING), PROPERTY_ID_ISASCENDING,
+ PropertyAttribute::READONLY, const_cast< sal_Bool* >( &m_bAscending ), ::getCppuType( reinterpret_cast< sal_Bool* >( NULL ) ) );
+ registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME), PROPERTY_ID_TABLENAME,
+ PropertyAttribute::READONLY, const_cast< ::rtl::OUString* >( &m_sTableName ), ::getCppuType(reinterpret_cast< ::rtl::OUString*>(NULL)));
}
// -----------------------------------------------------------------------------
::cppu::IPropertyArrayHelper* OOrderColumn::createArrayHelper() const
@@ -232,17 +279,14 @@ void OOrderColumn::construct()
// -----------------------------------------------------------------------------
::cppu::IPropertyArrayHelper & SAL_CALL OOrderColumn::getInfoHelper()
{
- OSL_ENSURE( !isNew(), "OOrderColumn::OOrderColumn: a *new* OrderColumn?" );
+ OSL_ENSURE( !isNew(), "OOrderColumn::getInfoHelper: a *new* OrderColumn?" );
return *OOrderColumn_PROP::getArrayHelper();
}
// -----------------------------------------------------------------------------
::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL OOrderColumn::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException)
{
::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(1);
- if ( m_bOrder )
- aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.OrderColumn");
- else
- aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.GroupColumn");
+ aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.OrderColumn");
return aSupported;
}
diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx
index e1d805e9a1e5..34ba49566383 100644
--- a/connectivity/source/parse/sqliterator.cxx
+++ b/connectivity/source/parse/sqliterator.cxx
@@ -93,7 +93,7 @@ namespace connectivity
OSL_PRECOND( m_xConnection.is(), "OSQLParseTreeIteratorImpl::OSQLParseTreeIteratorImpl: invalid connection!" );
m_xDatabaseMetaData = m_xConnection->getMetaData();
- m_bIsCaseSensitive = m_xDatabaseMetaData.is() && m_xDatabaseMetaData->storesMixedCaseQuotedIdentifiers();
+ m_bIsCaseSensitive = m_xDatabaseMetaData.is() && m_xDatabaseMetaData->supportsMixedCaseQuotedIdentifiers();
m_pTables.reset( new OSQLTables( m_bIsCaseSensitive ) );
m_pSubTables.reset( new OSQLTables( m_bIsCaseSensitive ) );
@@ -1910,12 +1910,12 @@ void OSQLParseTreeIterator::setOrderByColumnName(const ::rtl::OUString & rColumn
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::setOrderByColumnName" );
Reference xColumn = findColumn( rColumnName, rTableRange, false );
if ( xColumn.is() )
- m_aOrderColumns->get().push_back(new OOrderColumn(xColumn,isCaseSensitive(),bAscending));
+ m_aOrderColumns->get().push_back(new OOrderColumn( xColumn, rTableRange, isCaseSensitive(), bAscending ) );
else
{
sal_Int32 nId = rColumnName.toInt32();
if ( nId > 0 && nId < static_cast(m_aSelectColumns->get().size()) )
- m_aOrderColumns->get().push_back(new OOrderColumn((m_aSelectColumns->get())[nId-1],isCaseSensitive(),bAscending));
+ m_aOrderColumns->get().push_back( new OOrderColumn( ( m_aSelectColumns->get() )[nId-1], isCaseSensitive(), bAscending ) );
}
#ifdef SQL_TEST_PARSETREEITERATOR
diff --git a/connectivity/source/simpledbt/staticdbtools_s.cxx b/connectivity/source/simpledbt/staticdbtools_s.cxx
index 17d052a35b6b..36f9478a3312 100644
--- a/connectivity/source/simpledbt/staticdbtools_s.cxx
+++ b/connectivity/source/simpledbt/staticdbtools_s.cxx
@@ -29,7 +29,7 @@
#include "precompiled_connectivity.hxx"
#include
#include "staticdbtools_s.hxx"
-#include
+#include "connectivity/dbconversion.hxx"
#include
#include
@@ -61,23 +61,23 @@ namespace connectivity
}
//----------------------------------------------------------------
- double ODataAccessStaticTools::getValue(const Reference< XColumn>& _rxVariant, const Date& rNullDate, sal_Int16 nKeyType) const
+ double ODataAccessStaticTools::getValue(const Reference< XColumn>& _rxVariant, const Date& rNullDate ) const
{
- return ::dbtools::DBTypeConversion::getValue(_rxVariant, rNullDate, nKeyType);
+ return ::dbtools::DBTypeConversion::getValue( _rxVariant, rNullDate );
}
//----------------------------------------------------------------
- ::rtl::OUString ODataAccessStaticTools::getValue(const Reference< XColumn >& _rxColumn, const Reference< XNumberFormatter >& _rxFormatter,
+ ::rtl::OUString ODataAccessStaticTools::getFormattedValue(const Reference< XColumn >& _rxColumn, const Reference< XNumberFormatter >& _rxFormatter,
const Date& _rNullDate, sal_Int32 _nKey, sal_Int16 _nKeyType) const
{
- return ::dbtools::DBTypeConversion::getValue(_rxColumn, _rxFormatter, _rNullDate, _nKey, _nKeyType);
+ return ::dbtools::DBTypeConversion::getFormattedValue(_rxColumn, _rxFormatter, _rNullDate, _nKey, _nKeyType);
}
//----------------------------------------------------------------
- ::rtl::OUString ODataAccessStaticTools::getValue( const Reference< XPropertySet>& _rxColumn, const Reference< XNumberFormatter>& _rxFormatter,
+ ::rtl::OUString ODataAccessStaticTools::getFormattedValue( const Reference< XPropertySet>& _rxColumn, const Reference< XNumberFormatter>& _rxFormatter,
const Locale& _rLocale, const Date& _rNullDate ) const
{
- return ::dbtools::DBTypeConversion::getValue( _rxColumn, _rxFormatter, _rLocale, _rNullDate );
+ return ::dbtools::DBTypeConversion::getFormattedValue( _rxColumn, _rxFormatter, _rLocale, _rNullDate );
}
//----------------------------------------------------------------
diff --git a/connectivity/source/simpledbt/staticdbtools_s.hxx b/connectivity/source/simpledbt/staticdbtools_s.hxx
index 6746ad7a0918..4836f6bf3d12 100644
--- a/connectivity/source/simpledbt/staticdbtools_s.hxx
+++ b/connectivity/source/simpledbt/staticdbtools_s.hxx
@@ -54,11 +54,10 @@ namespace connectivity
// ------------------------------------------------
virtual double getValue(
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn>& _rxVariant,
- const ::com::sun::star::util::Date& rNullDate,
- sal_Int16 nKeyType) const;
+ const ::com::sun::star::util::Date& rNullDate ) const;
// ------------------------------------------------
- virtual ::rtl::OUString getValue(
+ virtual ::rtl::OUString getFormattedValue(
const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >& _rxColumn,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxFormatter,
const ::com::sun::star::util::Date& _rNullDate,
@@ -66,7 +65,7 @@ namespace connectivity
sal_Int16 _nKeyType) const;
// ------------------------------------------------
- virtual ::rtl::OUString getValue(
+ virtual ::rtl::OUString getFormattedValue(
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxColumn,
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter>& _rxFormatter,
const ::com::sun::star::lang::Locale& _rLocale,
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index 154736e1e056..6476667a19d8 100755
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -43,7 +43,6 @@
#include "com/sun/star/awt/WindowAttribute.hpp"
#include "com/sun/star/awt/WindowClass.hpp"
#include "com/sun/star/awt/WindowDescriptor.hpp"
-#include "com/sun/star/awt/XThrobber.hpp"
#include "com/sun/star/awt/XToolkit.hpp"
#include "com/sun/star/awt/XWindow.hpp"
#include "com/sun/star/awt/XWindowPeer.hpp"
@@ -570,6 +569,7 @@ UpdateDialog::UpdateDialog(
ModalDialog(parent,DpGuiResId(RID_DLG_UPDATE)),
m_context(context),
m_checking(this, DpGuiResId(RID_DLG_UPDATE_CHECKING)),
+ m_throbber(this, DpGuiResId(RID_DLG_UPDATE_THROBBER)),
m_update(this, DpGuiResId(RID_DLG_UPDATE_UPDATE)),
m_updates(
*this, DpGuiResId(RID_DLG_UPDATE_UPDATES),
@@ -630,23 +630,6 @@ UpdateDialog::UpdateDialog(
} catch (uno::Exception & e) {
throw uno::RuntimeException(e.Message, e.Context);
}
- Control c(this, DpGuiResId(RID_DLG_UPDATE_THROBBER));
- Point pos(c.GetPosPixel());
- Size size(c.GetSizePixel());
- try {
- m_throbber = uno::Reference< awt::XThrobber >(
- toolkit->createWindow(
- awt::WindowDescriptor(
- awt::WindowClass_SIMPLE,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Throbber")),
- GetComponentInterface(), 0,
- awt::Rectangle(
- pos.X(), pos.Y(), size.Width(), size.Height()),
- awt::WindowAttribute::SHOW)),
- uno::UNO_QUERY_THROW);
- } catch (lang::IllegalArgumentException & e) {
- throw uno::RuntimeException(e.Message, e.Context);
- }
m_updates.SetSelectHdl(LINK(this, UpdateDialog, selectionHandler));
m_all.SetToggleHdl(LINK(this, UpdateDialog, allHandler));
m_ok.SetClickHdl(LINK(this, UpdateDialog, okHandler));
@@ -681,7 +664,7 @@ sal_Bool UpdateDialog::Close() {
}
short UpdateDialog::Execute() {
- m_throbber->start();
+ m_throbber.start();
m_thread->launch();
return ModalDialog::Execute();
}
@@ -880,9 +863,8 @@ void UpdateDialog::addSpecificError( UpdateDialog::SpecificError & data )
void UpdateDialog::checkingDone() {
m_checking.Hide();
- m_throbber->stop();
- uno::Reference< awt::XWindow >(
- m_throbber, uno::UNO_QUERY_THROW)->setVisible(false);
+ m_throbber.stop();
+ m_throbber.Hide();
if (m_updates.getItemCount() == 0)
{
clearDescription();
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
index fefddd0e4ddc..a3cc76faaee8 100755
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
@@ -46,6 +46,7 @@
#include "vcl/dialog.hxx"
#include "vcl/fixed.hxx"
#include
+#include
#include "descedit.hxx"
#include "dp_gui_updatedata.hxx"
@@ -59,7 +60,6 @@ class ResId;
class Window;
namespace com { namespace sun { namespace star {
- namespace awt { class XThrobber; }
namespace deployment { class XExtensionManager;
class XPackage; }
namespace uno { class XComponentContext; }
@@ -184,7 +184,7 @@ private:
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
m_context;
FixedText m_checking;
- com::sun::star::uno::Reference< com::sun::star::awt::XThrobber > m_throbber;
+ Throbber m_throbber;
FixedText m_update;
UpdateDialog::CheckListBox m_updates;
CheckBox m_all;
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.src b/desktop/source/deployment/gui/dp_gui_updatedialog.src
index 4da431733e31..90b764d811b2 100755
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.src
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.src
@@ -60,11 +60,11 @@ ModalDialog RID_DLG_UPDATE {
Right = TRUE;
NoLabel = TRUE;
};
- Control RID_DLG_UPDATE_THROBBER {
+ FixedImage RID_DLG_UPDATE_THROBBER {
Pos = MAP_APPFONT(
RSC_SP_DLG_INNERBORDER_LEFT + LOCAL_WIDTH - RSC_CD_FIXEDTEXT_HEIGHT,
RSC_SP_DLG_INNERBORDER_TOP);
- Size = MAP_APPFONT(RSC_CD_FIXEDTEXT_HEIGHT, RSC_CD_FIXEDTEXT_HEIGHT);
+ Size = MAP_APPFONT(RSC_CD_FIXEDTEXT_HEIGHT, RSC_CD_FIXEDTEXT_HEIGHT + 1);
};
FixedText RID_DLG_UPDATE_UPDATE {
Disable = TRUE;
diff --git a/desktop/source/migration/pages.cxx b/desktop/source/migration/pages.cxx
index c8164d498e41..eefb529d0ca7 100644
--- a/desktop/source/migration/pages.cxx
+++ b/desktop/source/migration/pages.cxx
@@ -339,14 +339,13 @@ void MigrationThread::onTerminated()
MigrationPage::MigrationPage(
svt::OWizardMachine* parent,
- const ResId& resid,
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XThrobber > xThrobber)
+ const ResId& resid, Throbber& i_throbber )
: OWizardPage(parent, resid)
, m_ftHead(this, WizardResId(FT_MIGRATION_HEADER))
, m_ftBody(this, WizardResId(FT_MIGRATION_BODY))
, m_cbMigration(this, WizardResId(CB_MIGRATION))
+ , m_rThrobber(i_throbber)
, m_bMigrationDone(sal_False)
- , m_xThrobber(xThrobber)
{
FreeResource();
_setBold(m_ftHead);
@@ -366,9 +365,8 @@ sal_Bool MigrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason
if ( pWizard )
pWizard->DisableButtonsWhileMigration();
- uno::Reference< awt::XWindow > xWin( m_xThrobber, uno::UNO_QUERY );
- xWin->setVisible( true );
- m_xThrobber->start();
+ m_rThrobber.Show();
+ m_rThrobber.start();
MigrationThread* pMigThread = new MigrationThread();
pMigThread->create();
@@ -377,10 +375,10 @@ sal_Bool MigrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason
Application::Reschedule();
}
- m_xThrobber->stop();
+ m_rThrobber.stop();
GetParent()->LeaveWait();
// Next state will enable buttons - so no EnableButtons necessary!
- xWin->setVisible( false );
+ m_rThrobber.Hide();
pMigThread->join();
delete pMigThread;
m_bMigrationDone = sal_True;
diff --git a/desktop/source/migration/pages.hxx b/desktop/source/migration/pages.hxx
index 4981f68bbaa0..47eae23ff58c 100644
--- a/desktop/source/migration/pages.hxx
+++ b/desktop/source/migration/pages.hxx
@@ -29,17 +29,15 @@
#define _PAGES_HXX_
#include
-#include
#include
#include
#include
+#include
#include
#include
#include
#include
-#include
-
namespace desktop
{
class WelcomePage : public svt::OWizardPage
@@ -120,11 +118,11 @@ class MigrationPage : public svt::OWizardPage
private:
FixedText m_ftHead;
FixedText m_ftBody;
- CheckBox m_cbMigration;
+ CheckBox m_cbMigration;
+ Throbber& m_rThrobber;
sal_Bool m_bMigrationDone;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XThrobber > m_xThrobber;
public:
- MigrationPage( svt::OWizardMachine* parent, const ResId& resid, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XThrobber > xThrobber );
+ MigrationPage( svt::OWizardMachine* parent, const ResId& resid, Throbber& i_throbber );
virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason );
protected:
diff --git a/desktop/source/migration/wizard.cxx b/desktop/source/migration/wizard.cxx
index 3a4a0069967f..3489d7186b4f 100644
--- a/desktop/source/migration/wizard.cxx
+++ b/desktop/source/migration/wizard.cxx
@@ -87,16 +87,6 @@ const FirstStartWizard::WizardState FirstStartWizard::STATE_USER = 3;
const FirstStartWizard::WizardState FirstStartWizard::STATE_UPDATE_CHECK = 4;
const FirstStartWizard::WizardState FirstStartWizard::STATE_REGISTRATION = 5;
-static uno::Reference< uno::XComponentContext > getComponentContext( const uno::Reference< lang::XMultiServiceFactory >& rFactory )
-{
- uno::Reference< uno::XComponentContext > rContext;
- uno::Reference< beans::XPropertySet > rPropSet( rFactory, uno::UNO_QUERY );
- uno::Any a = rPropSet->getPropertyValue(
- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) );
- a >>= rContext;
- return rContext;
-}
-
static sal_Int32 getBuildId()
{
::rtl::OUString aDefault;
@@ -139,54 +129,14 @@ FirstStartWizard::FirstStartWizard( Window* pParent, sal_Bool bLicenseNeedsAccep
,m_bLicenseNeedsAcceptance( bLicenseNeedsAcceptance )
,m_bLicenseWasAccepted(sal_False)
,m_bAutomaticUpdChk(sal_True)
+ ,m_aThrobber(this, WizardResId(CTRL_THROBBER))
,m_aLicensePath( rLicensePath )
{
+ FreeResource();
// ---
- // FreeResource();
// enableState(STATE_USER, sal_False);
// enableState(STATE_REGISTRATION, sal_False);
- try
- {
- Point pos(5, 210 );
- Size size(11, 11 );
-
- pos = LogicToPixel( pos, MAP_APPFONT );
- size = LogicToPixel( size, MAP_APPFONT );
-
- uno::Reference< lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory();
- uno::Reference< awt::XToolkit > xToolkit(
- uno::Reference< lang::XMultiComponentFactory >(
- xFactory, uno::UNO_QUERY_THROW)->
- createInstanceWithContext(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Toolkit")),
- getComponentContext(xFactory)),
- uno::UNO_QUERY_THROW);
-
- m_xThrobber = uno::Reference< awt::XThrobber >(
- xToolkit->createWindow(
- awt::WindowDescriptor(
- awt::WindowClass_SIMPLE,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Throbber")),
- GetComponentInterface(), 0,
- awt::Rectangle(
- pos.X(), pos.Y(), size.Width(), size.Height()),
- awt::WindowAttribute::SHOW)),
- uno::UNO_QUERY_THROW);
- }
- catch (uno::RuntimeException &)
- {
- throw;
- }
- catch (Exception& )
- {
- }
-
- uno::Reference< awt::XWindow > xThrobberWin( m_xThrobber, uno::UNO_QUERY );
- if ( xThrobberWin.is() )
- xThrobberWin->setVisible( false );
-
Size aTPSize(TP_WIDTH, TP_HEIGHT);
SetPageSizePixel(LogicToPixel(aTPSize, MAP_APPFONT));
@@ -352,7 +302,7 @@ TabPage* FirstStartWizard::createPage(WizardState _nState)
pTabPage = new LicensePage(this, WizardResId(TP_LICENSE), m_aLicensePath);
break;
case STATE_MIGRATION:
- pTabPage = new MigrationPage(this, WizardResId(TP_MIGRATION), m_xThrobber );
+ pTabPage = new MigrationPage(this, WizardResId(TP_MIGRATION), m_aThrobber);
break;
case STATE_USER:
pTabPage = new UserPage(this, WizardResId(TP_USER));
diff --git a/desktop/source/migration/wizard.hrc b/desktop/source/migration/wizard.hrc
index fdad97a8174b..8f35488c58b3 100644
--- a/desktop/source/migration/wizard.hrc
+++ b/desktop/source/migration/wizard.hrc
@@ -79,6 +79,7 @@
#define ED_USER_FATHER 18
#define ED_USER_INITIALS 19
#define TR_WAITING 20
+#define CTRL_THROBBER 21
// global strings
#define STR_STATE_WELCOME RID_FIRSTSTSTART_START+100
diff --git a/desktop/source/migration/wizard.hxx b/desktop/source/migration/wizard.hxx
index 7e97f7d8e30e..96bd74dcd859 100644
--- a/desktop/source/migration/wizard.hxx
+++ b/desktop/source/migration/wizard.hxx
@@ -30,9 +30,8 @@
#include
#include
-#include
+#include
#include
-#include
namespace desktop
{
@@ -76,7 +75,7 @@ private:
sal_Bool m_bLicenseWasAccepted;
sal_Bool m_bAutomaticUpdChk;
Link m_lnkCancel;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XThrobber > m_xThrobber;
+ Throbber m_aThrobber;
rtl::OUString m_aLicensePath;
diff --git a/desktop/source/migration/wizard.src b/desktop/source/migration/wizard.src
index e690e130c74f..78bd3a0e8197 100644
--- a/desktop/source/migration/wizard.src
+++ b/desktop/source/migration/wizard.src
@@ -42,6 +42,13 @@ ModalDialog DLG_FIRSTSTART_WIZARD
Closeable = TRUE ;
Hide = TRUE;
HelpID = HID_FIRSTSTART_DIALOG;
+
+ FixedImage CTRL_THROBBER
+ {
+ Pos = MAP_APPFONT( 5, 210 );
+ Size = MAP_APPFONT( 11, 11 );
+ Hide = TRUE;
+ };
};
String STR_STATE_WELCOME
diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
index ed446afe4a12..b845ed189aad 100644
--- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
@@ -1379,6 +1379,7 @@ namespace drawinglayer
{
// need to handle PolyPolygonHatchPrimitive2D here to support XPATHFILL_SEQ_BEGIN/XPATHFILL_SEQ_END
const primitive2d::PolyPolygonHatchPrimitive2D& rHatchCandidate = static_cast< const primitive2d::PolyPolygonHatchPrimitive2D& >(rCandidate);
+ const attribute::FillHatchAttribute& rFillHatchAttribute = rHatchCandidate.getFillHatch();
basegfx::B2DPolyPolygon aLocalPolyPolygon(rHatchCandidate.getB2DPolyPolygon());
// #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points
@@ -1386,8 +1387,20 @@ namespace drawinglayer
while(fillPolyPolygonNeededToBeSplit(aLocalPolyPolygon))
;
+ if(rFillHatchAttribute.isFillBackground())
+ {
+ // with fixing #i111954# (see below) the possible background
+ // fill of a hatched object was lost.Generate a background fill
+ // primitive and render it
+ const primitive2d::Primitive2DReference xBackground(
+ new primitive2d::PolyPolygonColorPrimitive2D(
+ aLocalPolyPolygon,
+ rHatchCandidate.getBackgroundColor()));
+
+ process(primitive2d::Primitive2DSequence(&xBackground, 1));
+ }
+
SvtGraphicFill* pSvtGraphicFill = 0;
- const attribute::FillHatchAttribute& rFillHatchAttribute = rHatchCandidate.getFillHatch();
aLocalPolyPolygon.transform(maCurrentTransformation);
if(!mnSvtGraphicFillCount && aLocalPolyPolygon.count())
diff --git a/editeng/inc/editeng/editeng.hxx b/editeng/inc/editeng/editeng.hxx
index bd90849271e6..d046b77d98b3 100755
--- a/editeng/inc/editeng/editeng.hxx
+++ b/editeng/inc/editeng/editeng.hxx
@@ -33,7 +33,6 @@ class EditView;
class OutputDevice;
class EditUndo;
class SvxFont;
-class SfxUndoManager;
class SfxItemPool;
class SfxStyleSheet;
class String;
@@ -83,6 +82,9 @@ namespace svx{
struct SpellPortion;
typedef std::vector SpellPortions;
}
+namespace svl{
+class IUndoManager;
+}
namespace basegfx { class B2DPolyPolygon; }
#include
@@ -268,10 +270,11 @@ public:
void ShowParagraph( sal_uInt16 nParagraph, sal_Bool bShow = sal_True );
sal_Bool IsParagraphVisible( sal_uInt16 nParagraph );
- SfxUndoManager& GetUndoManager();
+ ::svl::IUndoManager&
+ GetUndoManager();
void UndoActionStart( sal_uInt16 nId );
void UndoActionEnd( sal_uInt16 nId );
- sal_Bool IsInUndo();
+ sal_Bool IsInUndo();
void EnableUndo( sal_Bool bEnable );
sal_Bool IsUndoEnabled();
diff --git a/editeng/inc/editeng/editund2.hxx b/editeng/inc/editeng/editund2.hxx
index b42ab9f9cf9d..52986e6ee1e4 100644
--- a/editeng/inc/editeng/editund2.hxx
+++ b/editeng/inc/editeng/editund2.hxx
@@ -33,7 +33,7 @@
class ImpEditEngine;
-class EDITENG_DLLPUBLIC EditUndoManager : public SfxUndoManager
+class EDITENG_DLLPRIVATE EditUndoManager : public SfxUndoManager
{
using SfxUndoManager::Undo;
using SfxUndoManager::Redo;
@@ -43,8 +43,8 @@ private:
public:
EditUndoManager( ImpEditEngine* pImpEE );
- virtual sal_Bool Undo( sal_uInt16 nCount=1 );
- virtual sal_Bool Redo( sal_uInt16 nCount=1 );
+ virtual sal_Bool Undo();
+ virtual sal_Bool Redo();
};
// -----------------------------------------------------------------------
diff --git a/editeng/inc/editeng/outliner.hxx b/editeng/inc/editeng/outliner.hxx
index 3995b0ce29f4..a14d688864eb 100644
--- a/editeng/inc/editeng/outliner.hxx
+++ b/editeng/inc/editeng/outliner.hxx
@@ -74,10 +74,15 @@ class SfxItemSet;
class SvxNumBulletItem;
class SvxNumberFormat;
class SvxLRSpaceItem;
-class SfxUndoManager;
class EditEngine;
class SvKeyValueIterator;
class SvxForbiddenCharactersTable;
+
+namespace svl
+{
+ class IUndoManager;
+}
+
#include
#include
@@ -938,7 +943,8 @@ public:
// nFormat muss ein Wert aus dem enum EETextFormat sein (wg.CLOOKS)
sal_uLong Read( SvStream& rInput, const String& rBaseURL, sal_uInt16, SvKeyValueIterator* pHTTPHeaderAttrs = NULL );
- SfxUndoManager& GetUndoManager();
+ ::svl::IUndoManager&
+ GetUndoManager();
void QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel );
void QuickInsertField( const SvxFieldItem& rFld, const ESelection& rSel );
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index a8c049ddc636..812625b69771 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -145,7 +145,7 @@ sal_Bool EditEngine::IsInUndo()
return pImpEditEngine->IsInUndo();
}
-SfxUndoManager& EditEngine::GetUndoManager()
+::svl::IUndoManager& EditEngine::GetUndoManager()
{
DBG_CHKTHIS( EditEngine, 0 );
return pImpEditEngine->GetUndoManager();
diff --git a/editeng/source/editeng/editundo.cxx b/editeng/source/editeng/editundo.cxx
index effe21f7a4f0..4b173f39082d 100644
--- a/editeng/source/editeng/editundo.cxx
+++ b/editeng/source/editeng/editundo.cxx
@@ -74,7 +74,7 @@ EditUndoManager::EditUndoManager( ImpEditEngine* p )
pImpEE = p;
}
-sal_Bool __EXPORT EditUndoManager::Undo( sal_uInt16 nCount )
+sal_Bool __EXPORT EditUndoManager::Undo()
{
if ( GetUndoActionCount() == 0 )
return sal_False;
@@ -95,7 +95,7 @@ sal_Bool __EXPORT EditUndoManager::Undo( sal_uInt16 nCount )
pImpEE->GetActiveView()->GetImpEditView()->DrawSelection(); // alte Selektion entfernen
pImpEE->SetUndoMode( sal_True );
- sal_Bool bDone = SfxUndoManager::Undo( nCount );
+ sal_Bool bDone = SfxUndoManager::Undo();
pImpEE->SetUndoMode( sal_False );
EditSelection aNewSel( pImpEE->GetActiveView()->GetImpEditView()->GetEditSelection() );
@@ -109,7 +109,7 @@ sal_Bool __EXPORT EditUndoManager::Undo( sal_uInt16 nCount )
return bDone;
}
-sal_Bool __EXPORT EditUndoManager::Redo( sal_uInt16 nCount )
+sal_Bool __EXPORT EditUndoManager::Redo()
{
if ( GetRedoActionCount() == 0 )
return sal_False;
@@ -130,7 +130,7 @@ sal_Bool __EXPORT EditUndoManager::Redo( sal_uInt16 nCount )
pImpEE->GetActiveView()->GetImpEditView()->DrawSelection(); // alte Selektion entfernen
pImpEE->SetUndoMode( sal_True );
- sal_Bool bDone = SfxUndoManager::Redo( nCount );
+ sal_Bool bDone = SfxUndoManager::Redo();
pImpEE->SetUndoMode( sal_False );
EditSelection aNewSel( pImpEE->GetActiveView()->GetImpEditView()->GetEditSelection() );
diff --git a/editeng/source/editeng/impedit5.cxx b/editeng/source/editeng/impedit5.cxx
index 40aa2dfeb87d..9ee95bc019a1 100644
--- a/editeng/source/editeng/impedit5.cxx
+++ b/editeng/source/editeng/impedit5.cxx
@@ -310,7 +310,7 @@ sal_Bool ImpEditEngine::Undo( EditView* pView )
if ( HasUndoManager() && GetUndoManager().GetUndoActionCount() )
{
SetActiveView( pView );
- GetUndoManager().Undo( 1 );
+ GetUndoManager().Undo();
return sal_True;
}
return sal_False;
@@ -321,7 +321,7 @@ sal_Bool ImpEditEngine::Redo( EditView* pView )
if ( HasUndoManager() && GetUndoManager().GetRedoActionCount() )
{
SetActiveView( pView );
- GetUndoManager().Redo( 0 );
+ GetUndoManager().Redo();
return sal_True;
}
return sal_False;
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 2c2ba69dce94..9d749b20e6f1 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -1227,7 +1227,7 @@ void Outliner::ImpFilterIndents( sal_uLong nFirstPara, sal_uLong nLastPara )
pEditEngine->SetUpdateMode( bUpdate );
}
-SfxUndoManager& Outliner::GetUndoManager()
+::svl::IUndoManager& Outliner::GetUndoManager()
{
DBG_CHKTHIS(Outliner,0);
return pEditEngine->GetUndoManager();
diff --git a/embeddedobj/source/commonembedding/embedobj.cxx b/embeddedobj/source/commonembedding/embedobj.cxx
index 2a56a0acb52a..a459c0ad9bd3 100644
--- a/embeddedobj/source/commonembedding/embedobj.cxx
+++ b/embeddedobj/source/commonembedding/embedobj.cxx
@@ -235,7 +235,10 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState )
if ( nNextState == embed::EmbedStates::INPLACE_ACTIVE )
{
if ( !m_xClientSite.is() )
- throw embed::WrongStateException(); //TODO: client site is not set!
+ throw embed::WrongStateException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "client site not set, yet" ) ),
+ *this
+ );
uno::Reference< embed::XInplaceClient > xInplaceClient( m_xClientSite, uno::UNO_QUERY );
if ( xInplaceClient.is() && xInplaceClient->canInplaceActivate() )
diff --git a/framework/Library_fwe.mk b/framework/Library_fwe.mk
index 013fe5bbf56c..86abf25f4f95 100644
--- a/framework/Library_fwe.mk
+++ b/framework/Library_fwe.mk
@@ -77,6 +77,8 @@ $(eval $(call gb_Library_add_exception_objects,fwe,\
framework/source/fwe/helper/imageproducer \
framework/source/fwe/helper/propertysetcontainer \
framework/source/fwe/helper/titlehelper \
+ framework/source/fwe/helper/documentundoguard \
+ framework/source/fwe/helper/undomanagerhelper \
framework/source/fwe/helper/uiconfigelementwrapperbase \
framework/source/fwe/helper/uielementwrapperbase \
framework/source/fwe/interaction/preventduplicateinteraction \
diff --git a/framework/Package_inc.mk b/framework/Package_inc.mk
index adefc3ccbd56..9db346cf1acf 100644
--- a/framework/Package_inc.mk
+++ b/framework/Package_inc.mk
@@ -34,6 +34,10 @@ $(eval $(call gb_Package_add_file,framework_inc,inc/framework/bmkmenu.hxx,framew
$(eval $(call gb_Package_add_file,framework_inc,inc/framework/configimporter.hxx,framework/configimporter.hxx))
$(eval $(call gb_Package_add_file,framework_inc,inc/framework/eventsconfiguration.hxx,framework/eventsconfiguration.hxx))
$(eval $(call gb_Package_add_file,framework_inc,inc/framework/framelistanalyzer.hxx,framework/framelistanalyzer.hxx))
+$(eval $(call gb_Package_add_file,framework_inc,inc/framework/documentundoguard.hxx,framework/documentundoguard.hxx))
+$(eval $(call gb_Package_add_file,framework_inc,inc/framework/undomanagerhelper.hxx,framework/undomanagerhelper.hxx))
+$(eval $(call gb_Package_add_file,framework_inc,inc/framework/imutex.hxx,framework/imutex.hxx))
+$(eval $(call gb_Package_add_file,framework_inc,inc/framework/iguard.hxx,framework/iguard.hxx))
$(eval $(call gb_Package_add_file,framework_inc,inc/framework/imageproducer.hxx,framework/imageproducer.hxx))
$(eval $(call gb_Package_add_file,framework_inc,inc/framework/imagesconfiguration.hxx,framework/imagesconfiguration.hxx))
$(eval $(call gb_Package_add_file,framework_inc,inc/framework/interaction.hxx,framework/interaction.hxx))
diff --git a/framework/inc/framework/documentundoguard.hxx b/framework/inc/framework/documentundoguard.hxx
new file mode 100755
index 000000000000..da2976e895e1
--- /dev/null
+++ b/framework/inc/framework/documentundoguard.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef FRAMEWORK_DOCUMENTUNDOGUARD_HXX
+#define FRAMEWORK_DOCUMENTUNDOGUARD_HXX
+
+#include "framework/fwedllapi.h"
+
+/** === begin UNO includes === **/
+#include
+/** === end UNO includes === **/
+
+#include
+
+//......................................................................................................................
+namespace framework
+{
+//......................................................................................................................
+
+ //==================================================================================================================
+ //= DocumentUndoGuard
+ //==================================================================================================================
+ struct DocumentUndoGuard_Data;
+ /** a helper class guarding the Undo manager of a document
+
+ This class guards, within a given scope, the Undo Manager of a document (or another component supporting
+ the XUndoManagerSupplier interface). When entering the scope (i.e. when the DocumentUndoGuard
+ instances is constructed), the current state of the undo contexts of the undo manager is examined.
+ Upon leaving the scope (i.e. when the DocumentUndoGuard is destructed), the guard will execute
+ as many calls to XUndoManager::leaveUndoContext as are
+ necessary to restore the manager's initial state.
+ */
+ class FWE_DLLPUBLIC DocumentUndoGuard
+ {
+ public:
+ DocumentUndoGuard( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_undoSupplierComponent );
+ ~DocumentUndoGuard();
+
+ private:
+ ::boost::scoped_ptr< DocumentUndoGuard_Data > m_pData;
+ };
+
+//......................................................................................................................
+} // namespace framework
+//......................................................................................................................
+
+#endif // FRAMEWORK_DOCUMENTUNDOGUARD_HXX
diff --git a/framework/inc/framework/iguard.hxx b/framework/inc/framework/iguard.hxx
new file mode 100755
index 000000000000..7c00858b208d
--- /dev/null
+++ b/framework/inc/framework/iguard.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __FRAMEWORK_THREADHELP_IGUARD_H_
+#define __FRAMEWORK_THREADHELP_IGUARD_H_
+
+//_________________________________________________________________________________________________________________
+// includes
+//_________________________________________________________________________________________________________________
+
+#include
+
+//_________________________________________________________________________________________________________________
+// namespace
+//_________________________________________________________________________________________________________________
+
+namespace framework{
+
+//_________________________________________________________________________________________________________________
+// declarations
+//_________________________________________________________________________________________________________________
+
+/*-************************************************************************************************************//**
+ @descr interface for guarding a lock
+*//*-*************************************************************************************************************/
+class SAL_NO_VTABLE IGuard
+{
+ //-------------------------------------------------------------------------------------------------------------
+ // public methods
+ //-------------------------------------------------------------------------------------------------------------
+ public:
+
+ /** clears the lock. If the guard does not currently hold the lock, nothing happens.
+ */
+ virtual void clear() = 0;
+
+ /** attempts to re-establishes the lock, blocking until the attempt is successful.
+ */
+ virtual void reset() = 0;
+
+}; // class IGuard
+
+} // namespace framework
+
+#endif // #ifndef __FRAMEWORK_THREADHELP_IGUARD_H_
diff --git a/framework/inc/threadhelp/imutex.h b/framework/inc/framework/imutex.hxx
similarity index 98%
rename from framework/inc/threadhelp/imutex.h
rename to framework/inc/framework/imutex.hxx
index 70784c312b87..5466edc4cf76 100644
--- a/framework/inc/threadhelp/imutex.h
+++ b/framework/inc/framework/imutex.hxx
@@ -32,6 +32,8 @@
// includes
//_________________________________________________________________________________________________________________
+#include
+
//_________________________________________________________________________________________________________________
// namespace
//_________________________________________________________________________________________________________________
@@ -45,7 +47,7 @@ namespace framework{
/*-************************************************************************************************************//**
@descr We need this interface to support using of different mutex implementations in a generic way.
*//*-*************************************************************************************************************/
-class IMutex
+class SAL_NO_VTABLE IMutex
{
//-------------------------------------------------------------------------------------------------------------
// public methods
diff --git a/framework/inc/framework/undomanagerhelper.hxx b/framework/inc/framework/undomanagerhelper.hxx
new file mode 100755
index 000000000000..9cd7266b33c8
--- /dev/null
+++ b/framework/inc/framework/undomanagerhelper.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef FRAMEWORK_UNDOMANAGERHELPER_HXX
+#define FRAMEWORK_UNDOMANAGERHELPER_HXX
+
+#include "framework/fwedllapi.h"
+#include "framework/iguard.hxx"
+#include "framework/imutex.hxx"
+
+/** === begin UNO includes === **/
+#include
+#include
+/** === end UNO includes === **/
+
+#include
+
+namespace svl
+{
+ class IUndoManager;
+}
+
+//......................................................................................................................
+namespace framework
+{
+//......................................................................................................................
+
+ //==================================================================================================================
+ //= IMutexGuard
+ //==================================================================================================================
+ class SAL_NO_VTABLE IMutexGuard : public IGuard
+ {
+ public:
+ /** returns the mutex guarded by the instance.
+
+ Even if the guard currently has not a lock on the mutex, this method must succeed.
+ */
+ virtual IMutex& getGuardedMutex() = 0;
+ };
+
+ //==================================================================================================================
+ //= IUndoManagerImplementation
+ //==================================================================================================================
+ class SAL_NO_VTABLE IUndoManagerImplementation
+ {
+ public:
+ /** returns the IUndoManager interface to the actual Undo stack
+
+ @throws com::sun::star::lang::DisposedException
+ when the instance is already disposed, and no IUndoManager can be provided
+
+ @throws com::sun::star::lang::NotInitializedException
+ when the instance is not initialized, yet, and no IUndoManager can be provided
+ */
+ virtual ::svl::IUndoManager& getImplUndoManager() = 0;
+
+ /** provides access to an UNO interface for the XUndoManager implementation. Used when throwing exceptions.
+ */
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoManager >
+ getThis() = 0;
+ };
+
+ //==================================================================================================================
+ //= UndoManagerHelper
+ //==================================================================================================================
+ class UndoManagerHelper_Impl;
+ /** helper class for implementing an XUndoManager
+
+ Several of the methods of the class take an IMutexGuard instance. It is assumed that this guard has a lock on
+ its mutext at the moment the method is entered. The lock will be released before any notifications to the
+ registered XUndoManagerListeners happen.
+
+ The following locking strategy is used for this mutex:
+
Any notifications to the registered XUndoManagerListeners are after the guard has been cleared. i.e.
+ without the mutex being locked.
+
Any calls into the IUndoManager implementation is made without the mutex being locked.
+ Note that this implies that the IUndoManager implementation must be thread-safe in itself
+ (which is true for the default implementation, SfxUndoManager).
+
An exception to the previous item are the IUndoManager::Undo and
+ IUndoManager::Redo methods: They're called with the given external mutex being
+ locked.
+
+
+ The reason for the exception for IUndoManager::Undo and IUndoManager::Redo is that those are expected to
+ modify the actual document which the UndoManager works for. And as long as our documents are not thread-safe,
+ and as long as we do not re-fit all existing SfxUndoImplementations to not expect
+ the dreaded SolarMutex being locked when they're called, the above behavior is a compromise between "how it should
+ be" and "how it can realistically be".
+ */
+ class FWE_DLLPUBLIC UndoManagerHelper
+ {
+ public:
+ UndoManagerHelper( IUndoManagerImplementation& i_undoManagerImpl );
+ ~UndoManagerHelper();
+
+ // life time control
+ void disposing();
+
+ // XUndoManager equivalents
+ void enterUndoContext( const ::rtl::OUString& i_title, IMutexGuard& i_instanceLock );
+ void enterHiddenUndoContext( IMutexGuard& i_instanceLock );
+ void leaveUndoContext( IMutexGuard& i_instanceLock );
+ void addUndoAction( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoAction >& i_action, IMutexGuard& i_instanceLock );
+ void undo( IMutexGuard& i_instanceLock );
+ void redo( IMutexGuard& i_instanceLock );
+ ::sal_Bool isUndoPossible() const;
+ ::sal_Bool isRedoPossible() const;
+ ::rtl::OUString getCurrentUndoActionTitle() const;
+ ::rtl::OUString getCurrentRedoActionTitle() const;
+ ::com::sun::star::uno::Sequence< ::rtl::OUString >
+ getAllUndoActionTitles() const;
+ ::com::sun::star::uno::Sequence< ::rtl::OUString >
+ getAllRedoActionTitles() const;
+ void clear( IMutexGuard& i_instanceLock );
+ void clearRedo( IMutexGuard& i_instanceLock );
+ void reset( IMutexGuard& i_instanceLock );
+ void addUndoManagerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoManagerListener >& i_listener );
+ void removeUndoManagerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoManagerListener >& i_listener );
+
+ // XLockable, base of XUndoManager, equivalents
+ void lock();
+ void unlock();
+ ::sal_Bool isLocked();
+
+ // XModifyBroadcaster equivalents
+ void addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& i_listener );
+ void removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& i_listener );
+
+ private:
+ ::boost::scoped_ptr< UndoManagerHelper_Impl > m_pImpl;
+ };
+
+//......................................................................................................................
+} // namespace framework
+//......................................................................................................................
+
+#endif // FRAMEWORK_UNDOMANAGERHELPER_HXX
diff --git a/framework/inc/threadhelp/lockhelper.hxx b/framework/inc/threadhelp/lockhelper.hxx
index d6ebae6d4b9c..0210ad975c29 100644
--- a/framework/inc/threadhelp/lockhelper.hxx
+++ b/framework/inc/threadhelp/lockhelper.hxx
@@ -33,7 +33,7 @@
//_________________________________________________________________________________________________________________
#include
-#include
+#include
#include
#include
diff --git a/framework/inc/threadhelp/resetableguard.hxx b/framework/inc/threadhelp/resetableguard.hxx
index 58830189e052..3b88294a80e3 100644
--- a/framework/inc/threadhelp/resetableguard.hxx
+++ b/framework/inc/threadhelp/resetableguard.hxx
@@ -33,7 +33,7 @@
//_________________________________________________________________________________________________________________
#include
-#include
+#include
//#ifndef __FRAMEWORK_THREADHELP_THREADHELPBASE_HXX_
//#include
diff --git a/framework/source/fwe/helper/documentundoguard.cxx b/framework/source/fwe/helper/documentundoguard.cxx
new file mode 100755
index 000000000000..91265cf45170
--- /dev/null
+++ b/framework/source/fwe/helper/documentundoguard.cxx
@@ -0,0 +1,271 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_framework.hxx"
+
+#include "framework/documentundoguard.hxx"
+
+/** === begin UNO includes === **/
+#include
+/** === end UNO includes === **/
+
+#include
+#include
+#include
+
+//......................................................................................................................
+namespace framework
+{
+//......................................................................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::document::XUndoManagerSupplier;
+ using ::com::sun::star::document::XUndoManager;
+ using ::com::sun::star::document::XUndoManagerListener;
+ using ::com::sun::star::document::UndoManagerEvent;
+ using ::com::sun::star::lang::EventObject;
+ /** === end UNO using === **/
+
+ //==================================================================================================================
+ //= UndoManagerContextListener
+ //==================================================================================================================
+ typedef ::cppu::WeakImplHelper1 < XUndoManagerListener
+ > UndoManagerContextListener_Base;
+ class UndoManagerContextListener : public UndoManagerContextListener_Base
+ {
+ public:
+ UndoManagerContextListener( const Reference< XUndoManager >& i_undoManager )
+ :m_xUndoManager( i_undoManager, UNO_QUERY_THROW )
+ ,m_nRelativeContextDepth( 0 )
+ ,m_documentDisposed( false )
+ {
+ osl_incrementInterlockedCount( &m_refCount );
+ {
+ m_xUndoManager->addUndoManagerListener( this );
+ }
+ osl_decrementInterlockedCount( &m_refCount );
+ }
+
+ UndoManagerContextListener()
+ {
+ }
+
+ void finish()
+ {
+ OSL_ENSURE( m_nRelativeContextDepth >= 0, "UndoManagerContextListener: more contexts left than entered?" );
+
+ if ( m_documentDisposed )
+ return;
+
+ // work with a copy of m_nRelativeContextDepth, to be independent from possible bugs in the
+ // listener notifications (where it would be decremented with every leaveUndoContext)
+ sal_Int32 nDepth = m_nRelativeContextDepth;
+ while ( nDepth-- > 0 )
+ {
+ m_xUndoManager->leaveUndoContext();
+ }
+ m_xUndoManager->removeUndoManagerListener( this );
+ }
+
+ // XUndoManagerListener
+ virtual void SAL_CALL undoActionAdded( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL actionUndone( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL actionRedone( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL allActionsCleared( const EventObject& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL redoActionsCleared( const EventObject& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL resetAll( const EventObject& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL enteredContext( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL enteredHiddenContext( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL leftContext( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL leftHiddenContext( const UndoManagerEvent& i_event ) throw (RuntimeException);
+ virtual void SAL_CALL cancelledContext( const UndoManagerEvent& i_event ) throw (RuntimeException);
+
+ // XEventListener
+ virtual void SAL_CALL disposing( const EventObject& i_event ) throw (RuntimeException);
+
+ private:
+ Reference< XUndoManager > const m_xUndoManager;
+ oslInterlockedCount m_nRelativeContextDepth;
+ bool m_documentDisposed;
+ };
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::undoActionAdded( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ // not interested in
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::actionUndone( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ // not interested in
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::actionRedone( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ // not interested in
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::allActionsCleared( const EventObject& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ // not interested in
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::redoActionsCleared( const EventObject& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ // not interested in
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::resetAll( const EventObject& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ m_nRelativeContextDepth = 0;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::enteredContext( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ osl_incrementInterlockedCount( &m_nRelativeContextDepth );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::enteredHiddenContext( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ osl_incrementInterlockedCount( &m_nRelativeContextDepth );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::leftContext( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ osl_decrementInterlockedCount( &m_nRelativeContextDepth );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::leftHiddenContext( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ osl_decrementInterlockedCount( &m_nRelativeContextDepth );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::cancelledContext( const UndoManagerEvent& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ osl_decrementInterlockedCount( &m_nRelativeContextDepth );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL UndoManagerContextListener::disposing( const EventObject& i_event ) throw (RuntimeException)
+ {
+ (void)i_event;
+ m_documentDisposed = true;
+ }
+
+ //==================================================================================================================
+ //= DocumentUndoGuard_Data
+ //==================================================================================================================
+ struct DocumentUndoGuard_Data
+ {
+ Reference< XUndoManager > xUndoManager;
+ ::rtl::Reference< UndoManagerContextListener > pContextListener;
+ };
+
+ namespace
+ {
+ //--------------------------------------------------------------------------------------------------------------
+ void lcl_init( DocumentUndoGuard_Data& i_data, const Reference< XInterface >& i_undoSupplierComponent )
+ {
+ try
+ {
+ Reference< XUndoManagerSupplier > xUndoSupplier( i_undoSupplierComponent, UNO_QUERY );
+ if ( xUndoSupplier.is() )
+ i_data.xUndoManager.set( xUndoSupplier->getUndoManager(), UNO_QUERY_THROW );
+
+ if ( i_data.xUndoManager.is() )
+ i_data.pContextListener.set( new UndoManagerContextListener( i_data.xUndoManager ) );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+
+ //--------------------------------------------------------------------------------------------------------------
+ void lcl_restore( DocumentUndoGuard_Data& i_data )
+ {
+ try
+ {
+ if ( i_data.pContextListener.is() )
+ i_data.pContextListener->finish();
+ i_data.pContextListener.clear();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+ }
+
+ //==================================================================================================================
+ //= DocumentUndoGuard
+ //==================================================================================================================
+ //------------------------------------------------------------------------------------------------------------------
+ DocumentUndoGuard::DocumentUndoGuard( const Reference< XInterface >& i_undoSupplierComponent )
+ :m_pData( new DocumentUndoGuard_Data )
+ {
+ lcl_init( *m_pData, i_undoSupplierComponent );
+ }
+
+ DocumentUndoGuard::~DocumentUndoGuard()
+ {
+ lcl_restore( *m_pData );
+ }
+
+//......................................................................................................................
+} // namespace framework
+//......................................................................................................................
diff --git a/framework/source/fwe/helper/undomanagerhelper.cxx b/framework/source/fwe/helper/undomanagerhelper.cxx
new file mode 100755
index 000000000000..a37451339234
--- /dev/null
+++ b/framework/source/fwe/helper/undomanagerhelper.cxx
@@ -0,0 +1,1165 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_framework.hxx"
+
+#include "framework/undomanagerhelper.hxx"
+
+/** === begin UNO includes === **/
+#include
+/** === end UNO includes === **/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+//......................................................................................................................
+namespace framework
+{
+//......................................................................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::document::XUndoManagerListener;
+ using ::com::sun::star::document::UndoManagerEvent;
+ using ::com::sun::star::document::EmptyUndoStackException;
+ using ::com::sun::star::document::UndoContextNotClosedException;
+ using ::com::sun::star::document::UndoFailedException;
+ using ::com::sun::star::util::NotLockedException;
+ using ::com::sun::star::lang::EventObject;
+ using ::com::sun::star::document::XUndoAction;
+ using ::com::sun::star::lang::XComponent;
+ using ::com::sun::star::document::XUndoManager;
+ using ::com::sun::star::util::InvalidStateException;
+ using ::com::sun::star::lang::IllegalArgumentException;
+ using ::com::sun::star::util::XModifyListener;
+ /** === end UNO using === **/
+ using ::svl::IUndoManager;
+
+ //==================================================================================================================
+ //= UndoActionWrapper
+ //==================================================================================================================
+ class UndoActionWrapper : public SfxUndoAction
+ {
+ public:
+ UndoActionWrapper(
+ Reference< XUndoAction > const& i_undoAction
+ );
+ virtual ~UndoActionWrapper();
+
+ virtual String GetComment() const;
+ virtual void Undo();
+ virtual void Redo();
+ virtual BOOL CanRepeat(SfxRepeatTarget&) const;
+
+ private:
+ const Reference< XUndoAction > m_xUndoAction;
+ };
+
+ //------------------------------------------------------------------------------------------------------------------
+ UndoActionWrapper::UndoActionWrapper( Reference< XUndoAction > const& i_undoAction )
+ :SfxUndoAction()
+ ,m_xUndoAction( i_undoAction )
+ {
+ ENSURE_OR_THROW( m_xUndoAction.is(), "illegal undo action" );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ UndoActionWrapper::~UndoActionWrapper()
+ {
+ try
+ {
+ Reference< XComponent > xComponent( m_xUndoAction, UNO_QUERY );
+ if ( xComponent.is() )
+ xComponent->dispose();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ String UndoActionWrapper::GetComment() const
+ {
+ String sComment;
+ try
+ {
+ sComment = m_xUndoAction->getTitle();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return sComment;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoActionWrapper::Undo()
+ {
+ m_xUndoAction->undo();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoActionWrapper::Redo()
+ {
+ m_xUndoAction->redo();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ BOOL UndoActionWrapper::CanRepeat(SfxRepeatTarget&) const
+ {
+ return FALSE;
+ }
+
+ //==================================================================================================================
+ //= UndoManagerRequest
+ //==================================================================================================================
+ class UndoManagerRequest : public ::comphelper::AnyEvent
+ {
+ public:
+ UndoManagerRequest( ::boost::function0< void > const& i_request )
+ :m_request( i_request )
+ ,m_caughtException()
+ ,m_finishCondition()
+ {
+ m_finishCondition.reset();
+ }
+
+ void execute()
+ {
+ try
+ {
+ m_request();
+ }
+ catch( const Exception& )
+ {
+ m_caughtException = ::cppu::getCaughtException();
+ }
+ m_finishCondition.set();
+ }
+
+ void wait()
+ {
+ m_finishCondition.wait();
+ if ( m_caughtException.hasValue() )
+ ::cppu::throwException( m_caughtException );
+ }
+
+ void cancel( const Reference< XInterface >& i_context )
+ {
+ m_caughtException <<= RuntimeException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Concurrency error: an ealier operation on the stack failed." ) ),
+ i_context
+ );
+ m_finishCondition.set();
+ }
+
+ protected:
+ ~UndoManagerRequest()
+ {
+ }
+
+ private:
+ ::boost::function0< void > m_request;
+ Any m_caughtException;
+ ::osl::Condition m_finishCondition;
+ };
+
+ //------------------------------------------------------------------------------------------------------------------
+
+ //==================================================================================================================
+ //= UndoManagerHelper_Impl
+ //==================================================================================================================
+ class UndoManagerHelper_Impl : public SfxUndoListener
+ {
+ private:
+ ::osl::Mutex m_aMutex;
+ ::osl::Mutex m_aQueueMutex;
+ bool m_disposed;
+ bool m_bAPIActionRunning;
+ bool m_bProcessingEvents;
+ ::cppu::OInterfaceContainerHelper m_aUndoListeners;
+ ::cppu::OInterfaceContainerHelper m_aModifyListeners;
+ IUndoManagerImplementation& m_rUndoManagerImplementation;
+ UndoManagerHelper& m_rAntiImpl;
+ ::std::stack< bool > m_aContextVisibilities;
+#if OSL_DEBUG_LEVEL > 0
+ ::std::stack< bool > m_aContextAPIFlags;
+#endif
+ ::std::queue< ::rtl::Reference< UndoManagerRequest > >
+ m_aEventQueue;
+
+ public:
+ ::osl::Mutex& getMutex() { return m_aMutex; }
+
+ public:
+ UndoManagerHelper_Impl( UndoManagerHelper& i_antiImpl, IUndoManagerImplementation& i_undoManagerImpl )
+ :m_aMutex()
+ ,m_aQueueMutex()
+ ,m_disposed( false )
+ ,m_bAPIActionRunning( false )
+ ,m_bProcessingEvents( false )
+ ,m_aUndoListeners( m_aMutex )
+ ,m_aModifyListeners( m_aMutex )
+ ,m_rUndoManagerImplementation( i_undoManagerImpl )
+ ,m_rAntiImpl( i_antiImpl )
+ {
+ getUndoManager().AddUndoListener( *this );
+ }
+
+ virtual ~UndoManagerHelper_Impl()
+ {
+ }
+
+ //..............................................................................................................
+ IUndoManager& getUndoManager() const
+ {
+ return m_rUndoManagerImplementation.getImplUndoManager();
+ }
+
+ //..............................................................................................................
+ Reference< XUndoManager > getXUndoManager() const
+ {
+ return m_rUndoManagerImplementation.getThis();
+ }
+
+ // SfxUndoListener
+ virtual void actionUndone( const String& i_actionComment );
+ virtual void actionRedone( const String& i_actionComment );
+ virtual void undoActionAdded( const String& i_actionComment );
+ virtual void cleared();
+ virtual void clearedRedo();
+ virtual void resetAll();
+ virtual void listActionEntered( const String& i_comment );
+ virtual void listActionLeft( const String& i_comment );
+ virtual void listActionLeftAndMerged();
+ virtual void listActionCancelled();
+ virtual void undoManagerDying();
+
+ // public operations
+ void disposing();
+
+ void enterUndoContext( const ::rtl::OUString& i_title, const bool i_hidden, IMutexGuard& i_instanceLock );
+ void leaveUndoContext( IMutexGuard& i_instanceLock );
+ void addUndoAction( const Reference< XUndoAction >& i_action, IMutexGuard& i_instanceLock );
+ void undo( IMutexGuard& i_instanceLock );
+ void redo( IMutexGuard& i_instanceLock );
+ void clear( IMutexGuard& i_instanceLock );
+ void clearRedo( IMutexGuard& i_instanceLock );
+ void reset( IMutexGuard& i_instanceLock );
+
+ void addUndoManagerListener( const Reference< XUndoManagerListener >& i_listener )
+ {
+ m_aUndoListeners.addInterface( i_listener );
+ }
+
+ void removeUndoManagerListener( const Reference< XUndoManagerListener >& i_listener )
+ {
+ m_aUndoListeners.removeInterface( i_listener );
+ }
+
+ void addModifyListener( const Reference< XModifyListener >& i_listener )
+ {
+ m_aModifyListeners.addInterface( i_listener );
+ }
+
+ void removeModifyListener( const Reference< XModifyListener >& i_listener )
+ {
+ m_aModifyListeners.removeInterface( i_listener );
+ }
+
+ UndoManagerEvent
+ buildEvent( ::rtl::OUString const& i_title ) const;
+
+ void impl_notifyModified();
+ void notify( ::rtl::OUString const& i_title,
+ void ( SAL_CALL XUndoManagerListener::*i_notificationMethod )( const UndoManagerEvent& )
+ );
+ void notify( void ( SAL_CALL XUndoManagerListener::*i_notificationMethod )( const UndoManagerEvent& ) )
+ {
+ notify( ::rtl::OUString(), i_notificationMethod );
+ }
+
+ void notify( void ( SAL_CALL XUndoManagerListener::*i_notificationMethod )( const EventObject& ) );
+
+ private:
+ /// adds a function to be called to the request processor's queue
+ void impl_processRequest( ::boost::function0< void > const& i_request, IMutexGuard& i_instanceLock );
+
+ /// impl-versions of the XUndoManager API.
+ void impl_enterUndoContext( const ::rtl::OUString& i_title, const bool i_hidden );
+ void impl_leaveUndoContext();
+ void impl_addUndoAction( const Reference< XUndoAction >& i_action );
+ void impl_doUndoRedo( IMutexGuard& i_externalLock, const bool i_undo );
+ void impl_clear();
+ void impl_clearRedo();
+ void impl_reset();
+ };
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::disposing()
+ {
+ EventObject aEvent;
+ aEvent.Source = getXUndoManager();
+ m_aUndoListeners.disposeAndClear( aEvent );
+ m_aModifyListeners.disposeAndClear( aEvent );
+
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ getUndoManager().RemoveUndoListener( *this );
+
+ m_disposed = true;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ UndoManagerEvent UndoManagerHelper_Impl::buildEvent( ::rtl::OUString const& i_title ) const
+ {
+ UndoManagerEvent aEvent;
+ aEvent.Source = getXUndoManager();
+ aEvent.UndoActionTitle = i_title;
+ aEvent.UndoContextDepth = getUndoManager().GetListActionDepth();
+ return aEvent;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_notifyModified()
+ {
+ const EventObject aEvent( getXUndoManager() );
+ m_aModifyListeners.notifyEach( &XModifyListener::modified, aEvent );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::notify( ::rtl::OUString const& i_title,
+ void ( SAL_CALL XUndoManagerListener::*i_notificationMethod )( const UndoManagerEvent& ) )
+ {
+ const UndoManagerEvent aEvent( buildEvent( i_title ) );
+
+ // TODO: this notification method here is used by UndoManagerHelper_Impl, to multiplex the notifications we
+ // receive from the IUndoManager. Those notitications are sent with a locked SolarMutex, which means
+ // we're doing the multiplexing here with a locked SM, too. Which is Bad (TM).
+ // Fixing this properly would require outsourcing all the notifications into an own thread - which might lead
+ // to problems of its own, since clients might expect synchronous notifications.
+
+ m_aUndoListeners.notifyEach( i_notificationMethod, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::notify( void ( SAL_CALL XUndoManagerListener::*i_notificationMethod )( const EventObject& ) )
+ {
+ const EventObject aEvent( getXUndoManager() );
+
+ // TODO: the same comment as in the other notify, regarding SM locking applies here ...
+
+ m_aUndoListeners.notifyEach( i_notificationMethod, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::enterUndoContext( const ::rtl::OUString& i_title, const bool i_hidden, IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_enterUndoContext,
+ this,
+ ::boost::cref( i_title ),
+ i_hidden
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::leaveUndoContext( IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_leaveUndoContext,
+ this
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::addUndoAction( const Reference< XUndoAction >& i_action, IMutexGuard& i_instanceLock )
+ {
+ if ( !i_action.is() )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "illegal undo action object" ) ),
+ getXUndoManager(),
+ 1
+ );
+
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_addUndoAction,
+ this,
+ ::boost::ref( i_action )
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::clear( IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_clear,
+ this
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::clearRedo( IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_clearRedo,
+ this
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::reset( IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_reset,
+ this
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_processRequest( ::boost::function0< void > const& i_request, IMutexGuard& i_instanceLock )
+ {
+ // create the request, and add it to our queue
+ ::rtl::Reference< UndoManagerRequest > pRequest( new UndoManagerRequest( i_request ) );
+ {
+ ::osl::MutexGuard aQueueGuard( m_aQueueMutex );
+ m_aEventQueue.push( pRequest );
+ }
+
+ i_instanceLock.clear();
+
+ if ( m_bProcessingEvents )
+ {
+ // another thread is processing the event queue currently => it will also process the event which we just added
+ pRequest->wait();
+ return;
+ }
+
+ m_bProcessingEvents = true;
+ do
+ {
+ pRequest.clear();
+ {
+ ::osl::MutexGuard aQueueGuard( m_aQueueMutex );
+ if ( m_aEventQueue.empty() )
+ {
+ // reset the flag before releasing the queue mutex, otherwise it's possible that another thread
+ // could add an event after we release the mutex, but before we reset the flag. If then this other
+ // thread checks the flag before be reset it, this thread's event would starve.
+ m_bProcessingEvents = false;
+ return;
+ }
+ pRequest = m_aEventQueue.front();
+ m_aEventQueue.pop();
+ }
+ try
+ {
+ pRequest->execute();
+ pRequest->wait();
+ }
+ catch( ... )
+ {
+ {
+ // no chance to process further requests, if the current one failed
+ // => discard them
+ ::osl::MutexGuard aQueueGuard( m_aQueueMutex );
+ while ( !m_aEventQueue.empty() )
+ {
+ pRequest = m_aEventQueue.front();
+ m_aEventQueue.pop();
+ pRequest->cancel( getXUndoManager() );
+ }
+ m_bProcessingEvents = false;
+ }
+ // re-throw the error
+ throw;
+ }
+ }
+ while ( true );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_enterUndoContext( const ::rtl::OUString& i_title, const bool i_hidden )
+ {
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ if ( !rUndoManager.IsUndoEnabled() )
+ // ignore this request if the manager is locked
+ return;
+
+ if ( i_hidden && ( rUndoManager.GetUndoActionCount( IUndoManager::CurrentLevel ) == 0 ) )
+ throw EmptyUndoStackException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "can't enter a hidden context without a previous Undo action" ) ),
+ m_rUndoManagerImplementation.getThis()
+ );
+
+ {
+ ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning );
+ rUndoManager.EnterListAction( i_title, ::rtl::OUString() );
+ }
+
+ m_aContextVisibilities.push( i_hidden );
+
+ const UndoManagerEvent aEvent( buildEvent( i_title ) );
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ m_aUndoListeners.notifyEach( i_hidden ? &XUndoManagerListener::enteredHiddenContext : &XUndoManagerListener::enteredContext, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_leaveUndoContext()
+ {
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ if ( !rUndoManager.IsUndoEnabled() )
+ // ignore this request if the manager is locked
+ return;
+
+ if ( !rUndoManager.IsInListAction() )
+ throw InvalidStateException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "no active undo context" ) ),
+ getXUndoManager()
+ );
+
+ size_t nContextElements = 0;
+
+ const bool isHiddenContext = m_aContextVisibilities.top();;
+ m_aContextVisibilities.pop();
+
+ const bool bHadRedoActions = ( rUndoManager.GetRedoActionCount( IUndoManager::TopLevel ) > 0 );
+ {
+ ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning );
+ if ( isHiddenContext )
+ nContextElements = rUndoManager.LeaveAndMergeListAction();
+ else
+ nContextElements = rUndoManager.LeaveListAction();
+ }
+ const bool bHasRedoActions = ( rUndoManager.GetRedoActionCount( IUndoManager::TopLevel ) > 0 );
+
+ // prepare notification
+ void ( SAL_CALL XUndoManagerListener::*notificationMethod )( const UndoManagerEvent& ) = NULL;
+
+ UndoManagerEvent aContextEvent( buildEvent( ::rtl::OUString() ) );
+ const EventObject aClearedEvent( getXUndoManager() );
+ if ( nContextElements == 0 )
+ {
+ notificationMethod = &XUndoManagerListener::cancelledContext;
+ }
+ else if ( isHiddenContext )
+ {
+ notificationMethod = &XUndoManagerListener::leftHiddenContext;
+ }
+ else
+ {
+ aContextEvent.UndoActionTitle = rUndoManager.GetUndoActionComment( 0, IUndoManager::CurrentLevel );
+ notificationMethod = &XUndoManagerListener::leftContext;
+ }
+
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ if ( bHadRedoActions && !bHasRedoActions )
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::redoActionsCleared, aClearedEvent );
+ m_aUndoListeners.notifyEach( notificationMethod, aContextEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_doUndoRedo( IMutexGuard& i_externalLock, const bool i_undo )
+ {
+ ::osl::Guard< ::framework::IMutex > aExternalGuard( i_externalLock.getGuardedMutex() );
+ // note that this assumes that the mutex has been released in the thread which added the
+ // Undo/Redo request, so we can successfully acquire it
+
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ if ( rUndoManager.IsInListAction() )
+ throw UndoContextNotClosedException( ::rtl::OUString(), getXUndoManager() );
+
+ const size_t nElements = i_undo
+ ? rUndoManager.GetUndoActionCount( IUndoManager::TopLevel )
+ : rUndoManager.GetRedoActionCount( IUndoManager::TopLevel );
+ if ( nElements == 0 )
+ throw EmptyUndoStackException( ::rtl::OUString::createFromAscii( "stack is empty" ), getXUndoManager() );
+
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ try
+ {
+ if ( i_undo )
+ rUndoManager.Undo();
+ else
+ rUndoManager.Redo();
+ }
+ catch( const RuntimeException& ) { /* allowed to leave here */ throw; }
+ catch( const UndoFailedException& ) { /* allowed to leave here */ throw; }
+ catch( const Exception& )
+ {
+ // not allowed to leave
+ const Any aError( ::cppu::getCaughtException() );
+ throw UndoFailedException( ::rtl::OUString(), getXUndoManager(), aError );
+ }
+
+ // note that in opposite to all of the other methods, we do *not* have our mutex locked when calling
+ // into the IUndoManager implementation. This ensures that an actual XUndoAction::undo/redo is also
+ // called without our mutex being locked.
+ // As a consequence, we do not set m_bAPIActionRunning here. Instead, our actionUndone/actionRedone methods
+ // *always* multiplex the event to our XUndoManagerListeners, not only when m_bAPIActionRunning is FALSE (This
+ // again is different from all other SfxUndoListener methods).
+ // So, we do not need to do this notification here ourself.
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_addUndoAction( const Reference< XUndoAction >& i_action )
+ {
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ if ( !rUndoManager.IsUndoEnabled() )
+ // ignore the request if the manager is locked
+ return;
+
+ const UndoManagerEvent aEventAdd( buildEvent( i_action->getTitle() ) );
+ const EventObject aEventClear( getXUndoManager() );
+
+ const bool bHadRedoActions = ( rUndoManager.GetRedoActionCount( IUndoManager::CurrentLevel ) > 0 );
+ {
+ ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning );
+ rUndoManager.AddUndoAction( new UndoActionWrapper( i_action ) );
+ }
+ const bool bHasRedoActions = ( rUndoManager.GetRedoActionCount( IUndoManager::CurrentLevel ) > 0 );
+
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::undoActionAdded, aEventAdd );
+ if ( bHadRedoActions && !bHasRedoActions )
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::redoActionsCleared, aEventClear );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_clear()
+ {
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ if ( rUndoManager.IsInListAction() )
+ throw UndoContextNotClosedException( ::rtl::OUString(), getXUndoManager() );
+
+ {
+ ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning );
+ rUndoManager.Clear();
+ }
+
+ const EventObject aEvent( getXUndoManager() );
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::allActionsCleared, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_clearRedo()
+ {
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ if ( rUndoManager.IsInListAction() )
+ throw UndoContextNotClosedException( ::rtl::OUString(), getXUndoManager() );
+
+ {
+ ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning );
+ rUndoManager.ClearRedo();
+ }
+
+ const EventObject aEvent( getXUndoManager() );
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::redoActionsCleared, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::impl_reset()
+ {
+ // SYNCHRONIZED --->
+ ::osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ IUndoManager& rUndoManager = getUndoManager();
+ {
+ ::comphelper::FlagGuard aNotificationGuard( m_bAPIActionRunning );
+ rUndoManager.Reset();
+ }
+
+ const EventObject aEvent( getXUndoManager() );
+ aGuard.clear();
+ // <--- SYNCHRONIZED
+
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::resetAll, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::actionUndone( const String& i_actionComment )
+ {
+ UndoManagerEvent aEvent;
+ aEvent.Source = getXUndoManager();
+ aEvent.UndoActionTitle = i_actionComment;
+ aEvent.UndoContextDepth = 0; // Undo can happen on level 0 only
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::actionUndone, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::actionRedone( const String& i_actionComment )
+ {
+ UndoManagerEvent aEvent;
+ aEvent.Source = getXUndoManager();
+ aEvent.UndoActionTitle = i_actionComment;
+ aEvent.UndoContextDepth = 0; // Redo can happen on level 0 only
+ m_aUndoListeners.notifyEach( &XUndoManagerListener::actionRedone, aEvent );
+ impl_notifyModified();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::undoActionAdded( const String& i_actionComment )
+ {
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( i_actionComment, &XUndoManagerListener::undoActionAdded );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::cleared()
+ {
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( &XUndoManagerListener::allActionsCleared );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::clearedRedo()
+ {
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( &XUndoManagerListener::redoActionsCleared );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::resetAll()
+ {
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( &XUndoManagerListener::resetAll );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::listActionEntered( const String& i_comment )
+ {
+#if OSL_DEBUG_LEVEL > 0
+ m_aContextAPIFlags.push( m_bAPIActionRunning );
+#endif
+
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( i_comment, &XUndoManagerListener::enteredContext );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::listActionLeft( const String& i_comment )
+ {
+#if OSL_DEBUG_LEVEL > 0
+ const bool bCurrentContextIsAPIContext = m_aContextAPIFlags.top();
+ m_aContextAPIFlags.pop();
+ OSL_ENSURE( bCurrentContextIsAPIContext == m_bAPIActionRunning, "UndoManagerHelper_Impl::listActionLeft: API and non-API contexts interwoven!" );
+#endif
+
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( i_comment, &XUndoManagerListener::leftContext );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::listActionLeftAndMerged()
+ {
+#if OSL_DEBUG_LEVEL > 0
+ const bool bCurrentContextIsAPIContext = m_aContextAPIFlags.top();
+ m_aContextAPIFlags.pop();
+ OSL_ENSURE( bCurrentContextIsAPIContext == m_bAPIActionRunning, "UndoManagerHelper_Impl::listActionLeftAndMerged: API and non-API contexts interwoven!" );
+#endif
+
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( &XUndoManagerListener::leftHiddenContext );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::listActionCancelled()
+ {
+#if OSL_DEBUG_LEVEL > 0
+ const bool bCurrentContextIsAPIContext = m_aContextAPIFlags.top();
+ m_aContextAPIFlags.pop();
+ OSL_ENSURE( bCurrentContextIsAPIContext == m_bAPIActionRunning, "UndoManagerHelper_Impl::listActionCancelled: API and non-API contexts interwoven!" );
+#endif
+
+ if ( m_bAPIActionRunning )
+ return;
+
+ notify( &XUndoManagerListener::cancelledContext );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::undoManagerDying()
+ {
+ // TODO: do we need to care? Or is this the responsibility of our owner?
+ }
+
+ //==================================================================================================================
+ //= UndoManagerHelper
+ //==================================================================================================================
+ //------------------------------------------------------------------------------------------------------------------
+ UndoManagerHelper::UndoManagerHelper( IUndoManagerImplementation& i_undoManagerImpl )
+ :m_pImpl( new UndoManagerHelper_Impl( *this, i_undoManagerImpl ) )
+ {
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ UndoManagerHelper::~UndoManagerHelper()
+ {
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::disposing()
+ {
+ m_pImpl->disposing();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::enterUndoContext( const ::rtl::OUString& i_title, IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->enterUndoContext( i_title, false, i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::enterHiddenUndoContext( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->enterUndoContext( ::rtl::OUString(), true, i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::leaveUndoContext( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->leaveUndoContext( i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::undo( IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_doUndoRedo,
+ this,
+ ::boost::ref( i_instanceLock ),
+ true
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper_Impl::redo( IMutexGuard& i_instanceLock )
+ {
+ impl_processRequest(
+ ::boost::bind(
+ &UndoManagerHelper_Impl::impl_doUndoRedo,
+ this,
+ ::boost::ref( i_instanceLock ),
+ false
+ ),
+ i_instanceLock
+ );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::addUndoAction( const Reference< XUndoAction >& i_action, IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->addUndoAction( i_action, i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::undo( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->undo( i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::redo( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->redo( i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::sal_Bool UndoManagerHelper::isUndoPossible() const
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( m_pImpl->getMutex() );
+ IUndoManager& rUndoManager = m_pImpl->getUndoManager();
+ if ( rUndoManager.IsInListAction() )
+ return sal_False;
+ return rUndoManager.GetUndoActionCount( IUndoManager::TopLevel ) > 0;
+ // <--- SYNCHRONIZED
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::sal_Bool UndoManagerHelper::isRedoPossible() const
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( m_pImpl->getMutex() );
+ const IUndoManager& rUndoManager = m_pImpl->getUndoManager();
+ if ( rUndoManager.IsInListAction() )
+ return sal_False;
+ return rUndoManager.GetRedoActionCount( IUndoManager::TopLevel ) > 0;
+ // <--- SYNCHRONIZED
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ namespace
+ {
+ //..............................................................................................................
+ ::rtl::OUString lcl_getCurrentActionTitle( UndoManagerHelper_Impl& i_impl, const bool i_undo )
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( i_impl.getMutex() );
+
+ const IUndoManager& rUndoManager = i_impl.getUndoManager();
+ const size_t nActionCount = i_undo
+ ? rUndoManager.GetUndoActionCount( IUndoManager::TopLevel )
+ : rUndoManager.GetRedoActionCount( IUndoManager::TopLevel );
+ if ( nActionCount == 0 )
+ throw EmptyUndoStackException(
+ i_undo ? ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "no action on the undo stack" ) )
+ : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "no action on the redo stack" ) ),
+ i_impl.getXUndoManager()
+ );
+ return i_undo
+ ? rUndoManager.GetUndoActionComment( 0, IUndoManager::TopLevel )
+ : rUndoManager.GetRedoActionComment( 0, IUndoManager::TopLevel );
+ // <--- SYNCHRONIZED
+ }
+
+ //..............................................................................................................
+ Sequence< ::rtl::OUString > lcl_getAllActionTitles( UndoManagerHelper_Impl& i_impl, const bool i_undo )
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( i_impl.getMutex() );
+
+ const IUndoManager& rUndoManager = i_impl.getUndoManager();
+ const size_t nCount = i_undo
+ ? rUndoManager.GetUndoActionCount( IUndoManager::TopLevel )
+ : rUndoManager.GetRedoActionCount( IUndoManager::TopLevel );
+
+ Sequence< ::rtl::OUString > aTitles( nCount );
+ for ( size_t i=0; i UndoManagerHelper::getAllUndoActionTitles() const
+ {
+ return lcl_getAllActionTitles( *m_pImpl, true );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ Sequence< ::rtl::OUString > UndoManagerHelper::getAllRedoActionTitles() const
+ {
+ return lcl_getAllActionTitles( *m_pImpl, false );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::clear( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->clear( i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::clearRedo( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->clearRedo( i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::reset( IMutexGuard& i_instanceLock )
+ {
+ m_pImpl->reset( i_instanceLock );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::lock()
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( m_pImpl->getMutex() );
+
+ IUndoManager& rUndoManager = m_pImpl->getUndoManager();
+ rUndoManager.EnableUndo( false );
+ // <--- SYNCHRONIZED
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::unlock()
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( m_pImpl->getMutex() );
+
+ IUndoManager& rUndoManager = m_pImpl->getUndoManager();
+ if ( rUndoManager.IsUndoEnabled() )
+ throw NotLockedException( ::rtl::OUString::createFromAscii( "Undo manager is not locked" ), m_pImpl->getXUndoManager() );
+ rUndoManager.EnableUndo( true );
+ // <--- SYNCHRONIZED
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::sal_Bool UndoManagerHelper::isLocked()
+ {
+ // SYNCHRONIZED --->
+ ::osl::MutexGuard aGuard( m_pImpl->getMutex() );
+
+ IUndoManager& rUndoManager = m_pImpl->getUndoManager();
+ return !rUndoManager.IsUndoEnabled();
+ // <--- SYNCHRONIZED
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::addUndoManagerListener( const Reference< XUndoManagerListener >& i_listener )
+ {
+ if ( i_listener.is() )
+ m_pImpl->addUndoManagerListener( i_listener );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::removeUndoManagerListener( const Reference< XUndoManagerListener >& i_listener )
+ {
+ if ( i_listener.is() )
+ m_pImpl->removeUndoManagerListener( i_listener );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::addModifyListener( const Reference< XModifyListener >& i_listener )
+ {
+ if ( i_listener.is() )
+ m_pImpl->addModifyListener( i_listener );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void UndoManagerHelper::removeModifyListener( const Reference< XModifyListener >& i_listener )
+ {
+ if ( i_listener.is() )
+ m_pImpl->removeModifyListener( i_listener );
+ }
+
+//......................................................................................................................
+} // namespace framework
+//......................................................................................................................
diff --git a/linguistic/source/misc2.cxx b/linguistic/source/misc2.cxx
index dde8768ac283..dbfbd19f3f55 100644
--- a/linguistic/source/misc2.cxx
+++ b/linguistic/source/misc2.cxx
@@ -249,7 +249,10 @@ String GetWritableDictionaryURL( const String &rDicName )
aURLObj.Append( rDicName, INetURLObject::ENCODE_ALL );
DBG_ASSERT(!aURLObj.HasError(), "lng : invalid URL");
- return aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
+ // NO_DECODE preserves the escape sequences that might be included in aDirName
+ // depending on the characters used in the path string. (Needed when comparing
+ // the dictionary URL with GetDictionaryWriteablePath in DicList::createDictionary.)
+ return aURLObj.GetMainURL( INetURLObject::NO_DECODE );
}
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu
old mode 100644
new mode 100755
index 4ed9be5a3d27..07a717f31442
--- a/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu
@@ -42,9 +42,6 @@
~Import Formula...
-
- 1
-
@@ -111,7 +108,7 @@
- 1
+ Zoom 100%1
@@ -119,7 +116,7 @@
- 2
+ Zoom 200%
diff --git a/officecfg/registry/schema/org/openoffice/Office/Math.xcs b/officecfg/registry/schema/org/openoffice/Office/Math.xcs
old mode 100644
new mode 100755
index 31f6e00a230a..13a566dc6746
--- a/officecfg/registry/schema/org/openoffice/Office/Math.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Math.xcs
@@ -316,6 +316,20 @@
100
+
+
+ Contains settings related to load and save operations.
+
+
+
+
+ TL
+ When set only symbols used in the current formula will be saved. Otherwise all user defined symbols will be saved in each formula.
+
+
+ true
+
+ Contains miscellaneous settings.
diff --git a/officecfg/registry/schema/org/openoffice/Office/Scripting.xcs b/officecfg/registry/schema/org/openoffice/Office/Scripting.xcs
index b77cb00f8cac..90acb2a110bf 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Scripting.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Scripting.xcs
@@ -48,28 +48,5 @@
Lists the registered Scripting Framework runtimes.
-
-
- Specifies display settings for assignment dialogs
-
-
-
- Show Basic scripts in assignment dialogs
-
- false
-
-
-
- Show Scripting Framework scripts in assignment dialogs
-
- true
-
-
-
- Use New Tools Configure dialog
-
- true
-
-
diff --git a/scripting/source/dlgprov/DialogModelProvider.cxx b/scripting/source/dlgprov/DialogModelProvider.cxx
new file mode 100644
index 000000000000..fe8da6e511d7
--- /dev/null
+++ b/scripting/source/dlgprov/DialogModelProvider.cxx
@@ -0,0 +1,196 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_scripting.hxx"
+
+#include "DialogModelProvider.hxx"
+#include "dlgprov.hxx"
+#include
+#include
+
+
+// component helper namespace
+namespace comp_DialogModelProvider {
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star;
+using namespace awt;
+using namespace lang;
+using namespace uno;
+using namespace script;
+using namespace beans;
+
+
+// component and service helper functions:
+::rtl::OUString SAL_CALL _getImplementationName();
+css::uno::Sequence< ::rtl::OUString > SAL_CALL _getSupportedServiceNames();
+css::uno::Reference< css::uno::XInterface > SAL_CALL _create( css::uno::Reference< css::uno::XComponentContext > const & context );
+
+} // closing component helper namespace
+
+
+
+/// anonymous implementation namespace
+namespace dlgprov {
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star;
+using namespace awt;
+using namespace lang;
+using namespace uno;
+using namespace script;
+using namespace beans;
+
+
+DialogModelProvider::DialogModelProvider(Reference< XComponentContext > const & context) :
+ m_xContext(context)
+{}
+
+// lang::XInitialization:
+void SAL_CALL DialogModelProvider::initialize(const css::uno::Sequence< uno::Any > & aArguments) throw (css::uno::RuntimeException, css::uno::Exception)
+{
+ if ( aArguments.getLength() == 1 )
+ {
+ ::rtl::OUString sURL;
+ if ( !( aArguments[ 0 ] >>= sURL ))
+ throw css::lang::IllegalArgumentException();
+ // Try any other URL with SimpleFileAccess
+ Reference< XMultiComponentFactory > xSMgr( m_xContext->getServiceManager(), UNO_QUERY_THROW );
+ Reference< ucb::XSimpleFileAccess > xSFI =
+ Reference< ucb::XSimpleFileAccess >( xSMgr->createInstanceWithContext
+ ( ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), m_xContext ), UNO_QUERY );
+
+ try
+ {
+ Reference< io::XInputStream > xInput = xSFI->openFileRead( sURL );
+ Reference< resource::XStringResourceManager > xStringResourceManager;
+ if ( xInput.is() )
+ {
+ xStringResourceManager = dlgprov::lcl_getStringResourceManager(m_xContext,sURL);
+ Any aDialogSourceURLAny;
+ aDialogSourceURLAny <<= sURL;
+
+ m_xDialogModel.set( dlgprov::lcl_createDialogModel( m_xContext,xInput , xStringResourceManager, aDialogSourceURLAny ), UNO_QUERY_THROW);
+ m_xDialogModelProp.set(m_xDialogModel, UNO_QUERY_THROW);
+ }
+ }
+ catch( Exception& )
+ {}
+ //m_sURL = sURL;
+ }
+}
+
+// container::XElementAccess:
+uno::Type SAL_CALL DialogModelProvider::getElementType() throw (css::uno::RuntimeException)
+{
+ return m_xDialogModel->getElementType();
+}
+
+::sal_Bool SAL_CALL DialogModelProvider::hasElements() throw (css::uno::RuntimeException)
+{
+ return m_xDialogModel->hasElements();
+}
+
+// container::XNameAccess:
+uno::Any SAL_CALL DialogModelProvider::getByName(const ::rtl::OUString & aName) throw (css::uno::RuntimeException, css::container::NoSuchElementException, css::lang::WrappedTargetException)
+{
+ return m_xDialogModel->getByName(aName);
+}
+
+css::uno::Sequence< ::rtl::OUString > SAL_CALL DialogModelProvider::getElementNames() throw (css::uno::RuntimeException)
+{
+ return m_xDialogModel->getElementNames();
+}
+
+::sal_Bool SAL_CALL DialogModelProvider::hasByName(const ::rtl::OUString & aName) throw (css::uno::RuntimeException)
+{
+ return m_xDialogModel->hasByName(aName);
+}
+
+// container::XNameReplace:
+void SAL_CALL DialogModelProvider::replaceByName(const ::rtl::OUString & aName, const uno::Any & aElement) throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::container::NoSuchElementException, css::lang::WrappedTargetException)
+{
+ m_xDialogModel->replaceByName(aName,aElement);
+}
+
+// container::XNameContainer:
+void SAL_CALL DialogModelProvider::insertByName(const ::rtl::OUString & aName, const uno::Any & aElement) throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::container::ElementExistException, css::lang::WrappedTargetException)
+{
+ m_xDialogModel->insertByName(aName,aElement);
+}
+
+void SAL_CALL DialogModelProvider::removeByName(const ::rtl::OUString & aName) throw (css::uno::RuntimeException, css::container::NoSuchElementException, css::lang::WrappedTargetException)
+{
+ m_xDialogModel->removeByName(aName);
+}
+uno::Reference< beans::XPropertySetInfo > SAL_CALL DialogModelProvider::getPropertySetInfo( ) throw (uno::RuntimeException)
+{
+ return m_xDialogModelProp->getPropertySetInfo();
+}
+void SAL_CALL DialogModelProvider::setPropertyValue( const ::rtl::OUString&, const uno::Any& ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
+{
+}
+uno::Any SAL_CALL DialogModelProvider::getPropertyValue( const ::rtl::OUString& PropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
+{
+ return m_xDialogModelProp->getPropertyValue(PropertyName);
+}
+void SAL_CALL DialogModelProvider::addPropertyChangeListener( const ::rtl::OUString& , const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
+{
+}
+void SAL_CALL DialogModelProvider::removePropertyChangeListener( const ::rtl::OUString& , const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
+{
+}
+void SAL_CALL DialogModelProvider::addVetoableChangeListener( const ::rtl::OUString& , const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
+{
+}
+void SAL_CALL DialogModelProvider::removeVetoableChangeListener( const ::rtl::OUString& ,const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
+{
+}
+
+// com.sun.star.uno.XServiceInfo:
+::rtl::OUString SAL_CALL DialogModelProvider::getImplementationName() throw (css::uno::RuntimeException)
+{
+ return comp_DialogModelProvider::_getImplementationName();
+}
+
+::sal_Bool SAL_CALL DialogModelProvider::supportsService(::rtl::OUString const & serviceName) throw (css::uno::RuntimeException)
+{
+ css::uno::Sequence< ::rtl::OUString > serviceNames = comp_DialogModelProvider::_getSupportedServiceNames();
+ for (::sal_Int32 i = 0; i < serviceNames.getLength(); ++i) {
+ if (serviceNames[i] == serviceName)
+ return sal_True;
+ }
+ return sal_False;
+}
+
+css::uno::Sequence< ::rtl::OUString > SAL_CALL DialogModelProvider::getSupportedServiceNames() throw (css::uno::RuntimeException)
+{
+ return comp_DialogModelProvider::_getSupportedServiceNames();
+}
+
+} // closing anonymous implementation namespace
+
diff --git a/scripting/source/dlgprov/DialogModelProvider.hxx b/scripting/source/dlgprov/DialogModelProvider.hxx
new file mode 100644
index 000000000000..bc74dfe661dd
--- /dev/null
+++ b/scripting/source/dlgprov/DialogModelProvider.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "sal/config.h"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase4.hxx"
+#include "com/sun/star/lang/XInitialization.hpp"
+#include "com/sun/star/container/XNameContainer.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+
+/// anonymous implementation namespace
+namespace dlgprov{
+
+namespace css = ::com::sun::star;
+
+class DialogModelProvider:
+ public ::cppu::WeakImplHelper4<
+ css::lang::XInitialization,
+ css::container::XNameContainer,
+ css::beans::XPropertySet,
+ css::lang::XServiceInfo>
+{
+public:
+ explicit DialogModelProvider(css::uno::Reference< css::uno::XComponentContext > const & context);
+private:
+ // ::com::sun::star::lang::XInitialization:
+ virtual void SAL_CALL initialize(const css::uno::Sequence< ::com::sun::star::uno::Any > & aArguments) throw (css::uno::RuntimeException, css::uno::Exception);
+
+ // ::com::sun::star::container::XElementAccess:
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasElements() throw (css::uno::RuntimeException);
+
+ // ::com::sun::star::container::XNameAccess:
+ virtual ::com::sun::star::uno::Any SAL_CALL getByName(const ::rtl::OUString & aName) throw (css::uno::RuntimeException, css::container::NoSuchElementException, css::lang::WrappedTargetException);
+ virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames() throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasByName(const ::rtl::OUString & aName) throw (css::uno::RuntimeException);
+
+ // ::com::sun::star::container::XNameReplace:
+ virtual void SAL_CALL replaceByName(const ::rtl::OUString & aName, const ::com::sun::star::uno::Any & aElement) throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::container::NoSuchElementException, css::lang::WrappedTargetException);
+
+ // ::com::sun::star::container::XNameContainer:
+ virtual void SAL_CALL insertByName(const ::rtl::OUString & aName, const ::com::sun::star::uno::Any & aElement) throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::container::ElementExistException, css::lang::WrappedTargetException);
+ virtual void SAL_CALL removeByName(const ::rtl::OUString & Name) throw (css::uno::RuntimeException, css::container::NoSuchElementException, css::lang::WrappedTargetException);
+
+ // ::com::sun::star::lang::XServiceInfo:
+ virtual ::rtl::OUString SAL_CALL getImplementationName() throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService(const ::rtl::OUString & ServiceName) throw (css::uno::RuntimeException);
+ virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw (css::uno::RuntimeException);
+
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+
+private:
+ DialogModelProvider(const DialogModelProvider &); // not defined
+ DialogModelProvider& operator=(const DialogModelProvider &); // not defined
+
+ // destructor is private and will be called indirectly by the release call virtual ~DialogModelProvider() {}
+
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ css::uno::Reference< css::container::XNameContainer> m_xDialogModel;
+ css::uno::Reference< css::beans::XPropertySet> m_xDialogModelProp;
+};
+} // closing anonymous implementation namespace
diff --git a/scripting/source/dlgprov/dlgprov.cxx b/scripting/source/dlgprov/dlgprov.cxx
index ffa128381d39..8a577ab03e1c 100644
--- a/scripting/source/dlgprov/dlgprov.cxx
+++ b/scripting/source/dlgprov/dlgprov.cxx
@@ -28,6 +28,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_scripting.hxx"
+#include "DialogModelProvider.hxx"
#include "dlgprov.hxx"
#include "dlgevtatt.hxx"
#include
@@ -60,20 +61,103 @@
#include
using namespace ::com::sun::star;
-using namespace ::com::sun::star::awt;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::script;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::document;
+using namespace awt;
+using namespace lang;
+using namespace uno;
+using namespace script;
+using namespace beans;
+using namespace document;
using namespace ::sf_misc;
+// component helper namespace
+namespace comp_DialogModelProvider
+{
+
+ ::rtl::OUString SAL_CALL _getImplementationName()
+ {
+ return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DialogModelProvider"));
+ }
+
+ uno::Sequence< ::rtl::OUString > SAL_CALL _getSupportedServiceNames()
+ {
+ uno::Sequence< ::rtl::OUString > s(1);
+ s[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlDialogModelProvider"));
+ return s;
+ }
+
+ uno::Reference< uno::XInterface > SAL_CALL _create(const uno::Reference< uno::XComponentContext > & context) SAL_THROW((uno::Exception))
+ {
+ return static_cast< ::cppu::OWeakObject * >(new dlgprov::DialogModelProvider(context));
+ }
+} // closing component helper namespace
//.........................................................................
namespace dlgprov
{
//.........................................................................
static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAscii( "ResourceResolver" );
+
+ Reference< resource::XStringResourceManager > lcl_getStringResourceManager(const Reference< XComponentContext >& i_xContext,const ::rtl::OUString& i_sURL)
+ {
+ INetURLObject aInetObj( i_sURL );
+ ::rtl::OUString aDlgName = aInetObj.GetBase();
+ aInetObj.removeSegment();
+ ::rtl::OUString aDlgLocation = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ bool bReadOnly = true;
+ ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
+ ::rtl::OUString aComment;
+
+ Sequence aArgs( 6 );
+ aArgs[0] <<= aDlgLocation;
+ aArgs[1] <<= bReadOnly;
+ aArgs[2] <<= aLocale;
+ aArgs[3] <<= aDlgName;
+ aArgs[4] <<= aComment;
+
+ Reference< task::XInteractionHandler > xDummyHandler;
+ aArgs[5] <<= xDummyHandler;
+ Reference< XMultiComponentFactory > xSMgr_( i_xContext->getServiceManager(), UNO_QUERY_THROW );
+ // TODO: Ctor
+ Reference< resource::XStringResourceManager > xStringResourceManager( xSMgr_->createInstanceWithContext
+ ( ::rtl::OUString::createFromAscii( "com.sun.star.resource.StringResourceWithLocation" ),
+ i_xContext ), UNO_QUERY );
+ if( xStringResourceManager.is() )
+ {
+ Reference< XInitialization > xInit( xStringResourceManager, UNO_QUERY );
+ if( xInit.is() )
+ xInit->initialize( aArgs );
+ }
+ return xStringResourceManager;
+ }
+ Reference< container::XNameContainer > lcl_createControlModel(const Reference< XComponentContext >& i_xContext)
+ {
+ Reference< XMultiComponentFactory > xSMgr_( i_xContext->getServiceManager(), UNO_QUERY_THROW );
+ Reference< container::XNameContainer > xControlModel( xSMgr_->createInstanceWithContext( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ), i_xContext ), UNO_QUERY_THROW );
+ return xControlModel;
+ }
+ Reference< container::XNameContainer > lcl_createDialogModel( const Reference< XComponentContext >& i_xContext,
+ const Reference< io::XInputStream >& xInput,
+ const Reference< resource::XStringResourceManager >& xStringResourceManager,
+ const Any &aDialogSourceURL) throw ( Exception )
+ {
+ Reference< container::XNameContainer > xDialogModel( lcl_createControlModel(i_xContext) );
+
+ ::rtl::OUString aDlgSrcUrlPropName( RTL_CONSTASCII_USTRINGPARAM( "DialogSourceURL" ) );
+ Reference< beans::XPropertySet > xDlgPropSet( xDialogModel, UNO_QUERY );
+ xDlgPropSet->setPropertyValue( aDlgSrcUrlPropName, aDialogSourceURL );
+
+ ::xmlscript::importDialogModel( xInput, xDialogModel, i_xContext );
+ // Set resource property
+ if( xStringResourceManager.is() )
+ {
+ Reference< beans::XPropertySet > xDlgPSet( xDialogModel, UNO_QUERY );
+ Any aStringResourceManagerAny;
+ aStringResourceManagerAny <<= xStringResourceManager;
+ xDlgPSet->setPropertyValue( aResourceResolverPropName, aStringResourceManagerAny );
+ }
+
+ return xDialogModel;
+ }
// =============================================================================
// component operations
// =============================================================================
@@ -173,9 +257,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< container::XNameContainer > DialogProviderImpl::createControlModel() throw ( Exception )
{
- Reference< XMultiComponentFactory > xSMgr_( m_xContext->getServiceManager(), UNO_QUERY_THROW );
- Reference< container::XNameContainer > xControlModel( xSMgr_->createInstanceWithContext( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ), m_xContext ), UNO_QUERY_THROW );
- return xControlModel;
+ return lcl_createControlModel(m_xContext);
}
Reference< container::XNameContainer > DialogProviderImpl::createDialogModel(
@@ -183,23 +265,9 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
const Reference< resource::XStringResourceManager >& xStringResourceManager,
const Any &aDialogSourceURL) throw ( Exception )
{
- Reference< container::XNameContainer > xDialogModel( createControlModel() );
- ::rtl::OUString aDlgSrcUrlPropName( RTL_CONSTASCII_USTRINGPARAM( "DialogSourceURL" ) );
- Reference< beans::XPropertySet > xDlgPropSet( xDialogModel, UNO_QUERY );
- xDlgPropSet->setPropertyValue( aDlgSrcUrlPropName, aDialogSourceURL );
- ::xmlscript::importDialogModel( xInput, xDialogModel, m_xContext );
- // Set resource property
- if( xStringResourceManager.is() )
- {
- Reference< beans::XPropertySet > xDlgPSet( xDialogModel, UNO_QUERY );
- Any aStringResourceManagerAny;
- aStringResourceManagerAny <<= xStringResourceManager;
- xDlgPSet->setPropertyValue( aResourceResolverPropName, aStringResourceManagerAny );
- }
-
- return xDialogModel;
+ return lcl_createDialogModel(m_xContext,xInput,xStringResourceManager,aDialogSourceURL);
}
Reference< XControlModel > DialogProviderImpl::createDialogModelForBasic() throw ( Exception )
@@ -280,8 +348,8 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
bSingleDialog = true;
// Try any other URL with SimpleFileAccess
- Reference< ::com::sun::star::ucb::XSimpleFileAccess > xSFI =
- Reference< ::com::sun::star::ucb::XSimpleFileAccess >( xSMgr->createInstanceWithContext
+ Reference< ucb::XSimpleFileAccess > xSFI =
+ Reference< ucb::XSimpleFileAccess >( xSMgr->createInstanceWithContext
( ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), m_xContext ), UNO_QUERY );
try
@@ -412,34 +480,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< resource::XStringResourceManager > xStringResourceManager;
if( bSingleDialog )
{
- INetURLObject aInetObj( aURL );
- ::rtl::OUString aDlgName = aInetObj.GetBase();
- aInetObj.removeSegment();
- ::rtl::OUString aDlgLocation = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
- bool bReadOnly = true;
- ::com::sun ::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
- ::rtl::OUString aComment;
-
- Sequence aArgs( 6 );
- aArgs[0] <<= aDlgLocation;
- aArgs[1] <<= bReadOnly;
- aArgs[2] <<= aLocale;
- aArgs[3] <<= aDlgName;
- aArgs[4] <<= aComment;
-
- Reference< task::XInteractionHandler > xDummyHandler;
- aArgs[5] <<= xDummyHandler;
- Reference< XMultiComponentFactory > xSMgr_( m_xContext->getServiceManager(), UNO_QUERY_THROW );
- // TODO: Ctor
- xStringResourceManager = Reference< resource::XStringResourceManager >( xSMgr_->createInstanceWithContext
- ( ::rtl::OUString::createFromAscii( "com.sun.star.resource.StringResourceWithLocation" ),
- m_xContext ), UNO_QUERY );
- if( xStringResourceManager.is() )
- {
- Reference< XInitialization > xInit( xStringResourceManager, UNO_QUERY );
- if( xInit.is() )
- xInit->initialize( aArgs );
- }
+ xStringResourceManager = lcl_getStringResourceManager(m_xContext,aURL);
}
else if( xDialogLib.is() )
{
@@ -794,7 +835,7 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
Reference< XWindow > DialogProviderImpl::createContainerWindow(
const ::rtl::OUString& URL, const ::rtl::OUString& WindowType,
const Reference< XWindowPeer >& xParent, const Reference< XInterface >& xHandler )
- throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
+ throw (lang::IllegalArgumentException, RuntimeException)
{
(void)WindowType; // for future use
if( !xParent.is() )
@@ -824,11 +865,8 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs
static struct ::cppu::ImplementationEntry s_component_entries [] =
{
- {
- create_DialogProviderImpl, getImplementationName_DialogProviderImpl,
- getSupportedServiceNames_DialogProviderImpl, ::cppu::createSingleComponentFactory,
- 0, 0
- },
+ {create_DialogProviderImpl, getImplementationName_DialogProviderImpl,getSupportedServiceNames_DialogProviderImpl, ::cppu::createSingleComponentFactory,0, 0},
+ { &comp_DialogModelProvider::_create,&comp_DialogModelProvider::_getImplementationName,&comp_DialogModelProvider::_getSupportedServiceNames,&::cppu::createSingleComponentFactory, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
};
diff --git a/scripting/source/dlgprov/dlgprov.hxx b/scripting/source/dlgprov/dlgprov.hxx
index bc15831d2ff1..cbe3727b045e 100644
--- a/scripting/source/dlgprov/dlgprov.hxx
+++ b/scripting/source/dlgprov/dlgprov.hxx
@@ -61,6 +61,13 @@ namespace dlgprov
// =============================================================================
// class DialogProviderImpl
// =============================================================================
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > lcl_createControlModel(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& i_xContext);
+ ::com::sun::star::uno::Reference< ::com::sun::star::resource::XStringResourceManager > lcl_getStringResourceManager(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& i_xContext,const ::rtl::OUString& i_sURL);
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > lcl_createDialogModel(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& i_xContext,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInput,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::resource::XStringResourceManager >& xStringResourceManager,
+ const ::com::sun::star::uno::Any &aDialogSourceURL) throw ( ::com::sun::star::uno::Exception );
typedef ::cppu::WeakImplHelper4<
::com::sun::star::lang::XServiceInfo,
diff --git a/scripting/source/dlgprov/makefile.mk b/scripting/source/dlgprov/makefile.mk
index 111dca58edc2..c3a99aa81aff 100644
--- a/scripting/source/dlgprov/makefile.mk
+++ b/scripting/source/dlgprov/makefile.mk
@@ -41,6 +41,7 @@ DLLPRE =
SLOFILES= \
$(SLO)$/dlgprov.obj \
+ $(SLO)$/DialogModelProvider.obj \
$(SLO)$/dlgevtatt.obj
SHL1TARGET= $(TARGET)$(DLLPOSTFIX).uno
diff --git a/scripting/source/inc/util/util.hxx b/scripting/source/inc/util/util.hxx
index 27e5c19ccc91..a07d66452e0d 100644
--- a/scripting/source/inc/util/util.hxx
+++ b/scripting/source/inc/util/util.hxx
@@ -29,21 +29,6 @@
#ifndef _COM_SUN_STAR_SCRIPTING_UTIL_UTIL_HXX_
#define _COM_SUN_STAR_SCRIPTING_UTIL_UTIL_HXX_
-#include
-#include
-
#define OUSTR(x) ::rtl::OUString( ::rtl::OUString::createFromAscii(x) )
-namespace scripting_util
-{
- inline void validateXRef(::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRef, const sal_Char* Msg) throw (::com::sun::star::uno::RuntimeException)
- {
- OSL_ENSURE( xRef.is(), Msg );
-
- if(!xRef.is())
- {
- throw ::com::sun::star::uno::RuntimeException(OUSTR(Msg), ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >());
- }
- }
-}
#endif //_COM_SUN_STAR_SCRIPTING_UTIL_UTIL_HXX_
diff --git a/scripting/source/protocolhandler/makefile.mk b/scripting/source/protocolhandler/makefile.mk
index ec69c00b209d..5a2e92bbbac3 100644
--- a/scripting/source/protocolhandler/makefile.mk
+++ b/scripting/source/protocolhandler/makefile.mk
@@ -45,6 +45,7 @@ SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
SHL1STDLIBS= \
$(SFXLIB) \
+ $(FWELIB) \
$(CPPULIB) \
$(CPPUHELPERLIB) \
$(VCLLIB) \
diff --git a/scripting/source/protocolhandler/scripthandler.cxx b/scripting/source/protocolhandler/scripthandler.cxx
index 52b626dc5884..b1268ada4998 100644
--- a/scripting/source/protocolhandler/scripthandler.cxx
+++ b/scripting/source/protocolhandler/scripthandler.cxx
@@ -49,10 +49,12 @@
#include
#include
#include
+#include
#include
#include
#include
+#include
#include "com/sun/star/uno/XComponentContext.hpp"
#include "com/sun/star/uri/XUriReference.hpp"
@@ -69,7 +71,6 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::script;
using namespace ::com::sun::star::script::provider;
using namespace ::com::sun::star::document;
-using namespace ::scripting_util;
namespace scripting_protocolhandler
{
@@ -97,8 +98,7 @@ void SAL_CALL ScriptProtocolHandler::initialize(
throw RuntimeException( temp, Reference< XInterface >() );
}
- validateXRef( m_xFactory,
- "ScriptProtocolHandler::initialize: No Service Manager available" );
+ ENSURE_OR_THROW( m_xFactory.is(), "ScriptProtocolHandler::initialize: No Service Manager available" );
m_bInitialised = true;
}
@@ -162,7 +162,7 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
{
try
{
- bool bIsDocumentScript = ( aURL.Complete.indexOf( ::rtl::OUString::createFromAscii( "document" ) ) !=-1 );
+ bool bIsDocumentScript = ( aURL.Complete.indexOfAsciiL( RTL_CONSTASCII_STRINGPARAM( "document" ) ) !=-1 );
// TODO: isn't this somewhat strange? This should be a test for a location=document parameter, shouldn't it?
if ( bIsDocumentScript )
@@ -182,7 +182,7 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
Reference< provider::XScript > xFunc =
m_xScriptProvider->getScript( aURL.Complete );
- validateXRef( xFunc,
+ ENSURE_OR_THROW( xFunc.is(),
"ScriptProtocolHandler::dispatchWithNotification: validate xFunc - unable to obtain XScript interface" );
@@ -207,6 +207,11 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
}
}
+ // attempt to protect the document against the script tampering with its Undo Context
+ ::std::auto_ptr< ::framework::DocumentUndoGuard > pUndoGuard;
+ if ( bIsDocumentScript )
+ pUndoGuard.reset( new ::framework::DocumentUndoGuard( m_xScriptInvocation ) );
+
bSuccess = sal_False;
while ( !bSuccess )
{
@@ -248,16 +253,6 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
bCaughtException = sal_True;
}
-#ifdef _DEBUG
- catch ( ... )
- {
- ::rtl::OUString reason = ::rtl::OUString::createFromAscii(
- "ScriptProtocolHandler::dispatch: caught unknown exception" );
-
- invokeResult <<= reason;
- }
-#endif
-
}
else
{
@@ -358,13 +353,11 @@ ScriptProtocolHandler::getScriptInvocation()
return m_xScriptInvocation.is();
}
-void
-ScriptProtocolHandler::createScriptProvider()
+void ScriptProtocolHandler::createScriptProvider()
{
if ( m_xScriptProvider.is() )
- {
return;
- }
+
try
{
// first, ask the component supporting the XScriptInvocationContext interface
@@ -397,6 +390,7 @@ ScriptProtocolHandler::createScriptProvider()
m_xScriptProvider = xSPS->getScriptProvider();
}
+ // if nothing of this is successful, use the master script provider
if ( !m_xScriptProvider.is() )
{
Reference< XPropertySet > xProps( m_xFactory, UNO_QUERY_THROW );
@@ -430,15 +424,6 @@ ScriptProtocolHandler::createScriptProvider()
::rtl::OUString temp = OUSTR( "ScriptProtocolHandler::createScriptProvider: " );
throw RuntimeException( temp.concat( e.Message ), Reference< XInterface >() );
}
-#ifdef _DEBUG
- catch ( ... )
- {
- throw RuntimeException(
- OUSTR( "ScriptProtocolHandler::createScriptProvider: UnknownException: " ),
- Reference< XInterface > () );
- }
-#endif
-
}
ScriptProtocolHandler::ScriptProtocolHandler(
diff --git a/scripting/source/provider/ActiveMSPList.cxx b/scripting/source/provider/ActiveMSPList.cxx
index 3c6206d8d051..bbabbb21405c 100644
--- a/scripting/source/provider/ActiveMSPList.cxx
+++ b/scripting/source/provider/ActiveMSPList.cxx
@@ -49,7 +49,6 @@
using namespace com::sun::star;
using namespace com::sun::star::uno;
using namespace com::sun::star::script;
-using namespace ::scripting_util;
using namespace ::sf_misc;
namespace func_provider
diff --git a/scripting/source/provider/MasterScriptProvider.cxx b/scripting/source/provider/MasterScriptProvider.cxx
index 94ea78f80c73..33d371e3d51b 100755
--- a/scripting/source/provider/MasterScriptProvider.cxx
+++ b/scripting/source/provider/MasterScriptProvider.cxx
@@ -33,6 +33,8 @@
#include
#include
#include
+#include
+
#include
#include
#include
@@ -60,7 +62,6 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::script;
using namespace ::com::sun::star::document;
using namespace ::sf_misc;
-using namespace ::scripting_util;
namespace func_provider
{
@@ -95,10 +96,9 @@ MasterScriptProvider::MasterScriptProvider( const Reference< XComponentContext >
m_xContext( xContext ), m_bIsValid( false ), m_bInitialised( false ),
m_bIsPkgMSP( false ), m_pPCache( 0 )
{
- validateXRef( m_xContext, "MasterScriptProvider::MasterScriptProvider: No context available\n" );
+ ENSURE_OR_THROW( m_xContext.is(), "MasterScriptProvider::MasterScriptProvider: No context available\n" );
m_xMgr = m_xContext->getServiceManager();
- validateXRef( m_xMgr,
- "MasterScriptProvider::MasterScriptProvider: No service manager available\n" );
+ ENSURE_OR_THROW( m_xMgr.is(), "MasterScriptProvider::MasterScriptProvider: No service manager available\n" );
m_bIsValid = true;
}
diff --git a/scripting/source/provider/ProviderCache.cxx b/scripting/source/provider/ProviderCache.cxx
index 5d3350f635e3..bea38a67a8f1 100644
--- a/scripting/source/provider/ProviderCache.cxx
+++ b/scripting/source/provider/ProviderCache.cxx
@@ -29,6 +29,7 @@
#include "precompiled_scripting.hxx"
#include
#include
+#include
#include
#include
@@ -39,7 +40,6 @@
using namespace com::sun::star;
using namespace com::sun::star::uno;
using namespace com::sun::star::script;
-using namespace ::scripting_util;
namespace func_provider
{
@@ -51,7 +51,7 @@ ProviderCache::ProviderCache( const Reference< XComponentContext >& xContext, co
// will use createContentEnumeration
m_xMgr = m_xContext->getServiceManager();
- validateXRef( m_xMgr, "ProviderCache::ProviderCache() failed to obtain ServiceManager" );
+ ENSURE_OR_THROW( m_xMgr.is(), "ProviderCache::ProviderCache() failed to obtain ServiceManager" );
populateCache();
}
@@ -64,7 +64,7 @@ ProviderCache::ProviderCache( const Reference< XComponentContext >& xContext, co
// will use createContentEnumeration
m_xMgr = m_xContext->getServiceManager();
- validateXRef( m_xMgr, "ProviderCache::ProviderCache() failed to obtain ServiceManager" );
+ ENSURE_OR_THROW( m_xMgr.is(), "ProviderCache::ProviderCache() failed to obtain ServiceManager" );
populateCache();
}
@@ -163,14 +163,8 @@ ProviderCache::populateCache() throw ( RuntimeException )
while ( xEnum->hasMoreElements() )
{
- Reference< lang::XSingleComponentFactory > factory;
- if ( sal_False == ( xEnum->nextElement() >>= factory ) )
- {
- throw new RuntimeException( ::rtl::OUString::createFromAscii( " error extracting XSingleComponentFactory from Content enumeration. " ), Reference< XInterface >() );
- }
- validateXRef( factory, "ProviderCache::populateCache() invalid factory" );
+ Reference< lang::XSingleComponentFactory > factory( xEnum->nextElement(), UNO_QUERY_THROW );
Reference< lang::XServiceInfo > xServiceInfo( factory, UNO_QUERY_THROW );
- validateXRef( xServiceInfo, "ProviderCache::populateCache() failed to get XServiceInfo from factory" );
Sequence< ::rtl::OUString > serviceNames = xServiceInfo->getSupportedServiceNames();
@@ -207,9 +201,8 @@ ProviderCache::createProvider( ProviderDetails& details ) throw ( RuntimeExcepti
{
try
{
- details.provider = Reference< provider::XScriptProvider >(
+ details.provider.set(
details.factory->createInstanceWithArgumentsAndContext( m_Sctx, m_xContext ), UNO_QUERY_THROW );
- validateXRef( details.provider, "ProviderCache::createProvider, failed to create provider");
}
catch ( RuntimeException& e )
{
diff --git a/scripting/source/provider/ScriptImpl.cxx b/scripting/source/provider/ScriptImpl.cxx
index f5b93a802138..08d548e3461c 100644
--- a/scripting/source/provider/ScriptImpl.cxx
+++ b/scripting/source/provider/ScriptImpl.cxx
@@ -46,15 +46,11 @@ ScriptImpl::ScriptImpl(
const Reference< runtime::XScriptInvocation > & runtimeMgr,
const ::rtl::OUString& scriptURI )
throw ( RuntimeException ) :
- m_XScriptingContext( scriptingContext ),
- m_RunTimeManager( runtimeMgr ),
+ m_XScriptingContext( scriptingContext, UNO_SET_THROW ),
+ m_RunTimeManager( runtimeMgr, UNO_SET_THROW ),
m_ScriptURI( scriptURI )
{
OSL_TRACE( "\n" );
- validateXRef( m_XScriptingContext,
- "ScriptImpl::ScriptImpl: No XScriptingContext\n" );
- validateXRef( m_RunTimeManager,
- "ScriptImpl::ScriptImpl: No XScriptInvocation\n" );
}
//*************************************************************************
diff --git a/scripting/source/provider/ScriptingContext.cxx b/scripting/source/provider/ScriptingContext.cxx
index 08a27a19562f..0394bd3653d1 100755
--- a/scripting/source/provider/ScriptingContext.cxx
+++ b/scripting/source/provider/ScriptingContext.cxx
@@ -55,13 +55,10 @@ namespace func_provider
//*************************************************************************
ScriptingContext::ScriptingContext( const Reference< XComponentContext > & xContext ) : //ScriptingContextImpl_BASE( GetMutex()),
OPropertyContainer( GetBroadcastHelper() ),
- m_xContext( xContext )
+ m_xContext( xContext, UNO_SET_THROW )
{
OSL_TRACE( "< ScriptingContext ctor called >\n" );
- validateXRef( m_xContext,
- "ScriptingContext::ScriptingContext: No context available\n" );
-
Any nullAny;
scripting_constants::ScriptingConstantsPool& scriptingConstantsPool =
diff --git a/scripting/source/runtimemgr/ScriptNameResolverImpl.cxx b/scripting/source/runtimemgr/ScriptNameResolverImpl.cxx
index 48b960c6c9aa..8dafab0e8d4c 100644
--- a/scripting/source/runtimemgr/ScriptNameResolverImpl.cxx
+++ b/scripting/source/runtimemgr/ScriptNameResolverImpl.cxx
@@ -70,13 +70,11 @@ static ::std::vector< sal_Int32 >* m_pSearchIDs = NULL;
//*************************************************************************
ScriptNameResolverImpl::ScriptNameResolverImpl(
const Reference< XComponentContext > & xContext ) :
- m_xContext( xContext )
+ m_xContext( xContext, UNO_SET_THROW )
{
OSL_TRACE( "< ScriptNameResolverImpl ctor called >\n" );
validateXRef( m_xContext, "ScriptNameResolverImpl::ScriptNameResolverImpl: invalid context" );
- m_xMultiComFac = m_xContext->getServiceManager();
-
- validateXRef( m_xMultiComFac, "ScriptNameResolverImpl::ScriptNameResolverImpl: invalid XMultiComponentFactory " );
+ m_xMultiComFac.set( m_xContext->getServiceManager(), UNO_SET_THROW );
if( !m_pSearchIDs )
{
@@ -220,11 +218,13 @@ throw ( lang::IllegalArgumentException, script::CannotConvertException, RuntimeE
OUString temp = OUSTR( "ScriptNameResolverImpl::resolve: " );
throw RuntimeException( temp.concat( e.Message ), Reference< XInterface >() );
}
- Reference< XInterface > xInterface = m_xMultiComFac->createInstanceWithContext(
- ::rtl::OUString::createFromAscii(
- "com.sun.star.ucb.SimpleFileAccess" ), m_xContext );
- validateXRef( xInterface,
- "ScriptProvider::initialise: cannot get SimpleFileAccess Service\n" );
+ Reference< XInterface > xInterface(
+ m_xMultiComFac->createInstanceWithContext(
+ ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ),
+ m_xContext
+ ),
+ UNO_SET_THROW
+ );
Reference < ucb::XSimpleFileAccess > xSimpleFileAccess = Reference <
ucb::XSimpleFileAccess > ( xInterface, UNO_QUERY_THROW );
@@ -236,15 +236,8 @@ throw ( lang::IllegalArgumentException, script::CannotConvertException, RuntimeE
try
{
// need to get the ScriptStorageManager
- Any a = m_xContext->getValueByName(
- scriptingConstantsPool.SCRIPTSTORAGEMANAGER_SERVICE );
- if ( sal_False == ( a >>= xScriptStorageMgr ) )
- {
- OUString temp = OUSTR( "ScriptNameResolverImpl::resolve: failed to get ScriptStorageManager" );
- throw RuntimeException( temp, Reference< XInterface >() );
- // need to throw
- }
- validateXRef( xScriptStorageMgr, "Cannot get ScriptStorageManager" );
+ xScriptStorageMgr.set( m_xContext->getValueByName(
+ scriptingConstantsPool.SCRIPTSTORAGEMANAGER_SERVICE ), UNO_QUERY_THROW );
filesysScriptStorageID =
xScriptStorageMgr->createScriptStorageWithURI(
xSimpleFileAccess, filesysURL );
@@ -364,20 +357,12 @@ throw ( lang::IllegalArgumentException, script::CannotConvertException, RuntimeE
if( filesysScriptStorageID > 2 )
{
// get the filesys storage and dispose of it
- Reference< XInterface > xScriptStorage =
- xScriptStorageMgr->getScriptStorage( filesysScriptStorageID );
- validateXRef( xScriptStorage,
- "ScriptNameResolverImpl::getStorageInstance: cannot get Script Storage service" );
+ Reference< XInterface > xScriptStorage( xScriptStorageMgr->getScriptStorage( filesysScriptStorageID ), UNO_SET_THROW );
Reference< storage::XScriptInfoAccess > xScriptInfoAccess = Reference<
storage::XScriptInfoAccess > ( xScriptStorage, UNO_QUERY_THROW );
- validateXRef( xScriptInfoAccess,
- "ScriptNameResolverImpl::resolveURIFromStorageID: cannot get XScriptInfoAccess" );
Sequence< Reference< storage::XScriptInfo > > results =
xScriptInfoAccess->getAllImplementations( );
- Reference < lang::XEventListener > xEL_ScriptStorageMgr =
- Reference< lang::XEventListener >
- ( xScriptStorageMgr ,UNO_QUERY_THROW );
- validateXRef( xEL_ScriptStorageMgr, "ScriptNameResolverImpl::resolve: can't get ScriptStorageManager XEventListener interface when trying to dispose of filesystem storage" );
+ Reference < lang::XEventListener > xEL_ScriptStorageMgr(( xScriptStorageMgr ,UNO_QUERY_THROW );
lang::EventObject event( results[ 0 ] );
xEL_ScriptStorageMgr->disposing( event );
}
@@ -447,9 +432,7 @@ SAL_THROW ( ( lang::IllegalArgumentException, css::security::AccessControlExcept
throw RuntimeException( temp.concat( e.Message ), Reference< XInterface >() );
}
}
- Reference< storage::XScriptInfoAccess > storage = getStorageInstance( sid, permissionURI );
- validateXRef( storage,
- "ScriptNameResolverImpl::resolveURIFromStorageID: cannot get XScriptInfoAccess" );
+ Reference< storage::XScriptInfoAccess > storage( getStorageInstance( sid, permissionURI ), UNO_SET_THROW );
Sequence< Reference< storage::XScriptInfo > > results =
storage->getImplementations( scriptURI );
@@ -516,22 +499,10 @@ const ::rtl::OUString & permissionURI ) SAL_THROW ( ( RuntimeException, css::sec
Reference< storage::XScriptInfoAccess > xScriptInfoAccess;
try
{
- Reference< XInterface > xInterface;
-
- Any a = m_xContext->getValueByName(
- OUString::createFromAscii( SCRIPTSTORAGEMANAGER_SERVICE ) );
- if ( sal_False == ( a >>= xInterface ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptNameResolverImpl::getStorageInstance: could not obtain ScriptStorageManager singleton" ),
- Reference< XInterface >() );
- }
- validateXRef( xInterface,
- "ScriptNameResolverImpl::getStorageInstance: cannot get Storage service" );
+ Reference< XInterface > xInterface( m_xContext->getValueByName(
+ OUString::createFromAscii( SCRIPTSTORAGEMANAGER_SERVICE ) ), UNO_QUERY_THROW );
// check that we have permissions for this storage
Reference< dcsssf::security::XScriptSecurity > xScriptSecurity( xInterface, UNO_QUERY_THROW );
- validateXRef( xScriptSecurity,
- "ScriptNameResolverImpl::getStorageInstance: cannot get Script Security service" );
scripting_constants::ScriptingConstantsPool& scriptingConstantsPool =
scripting_constants::ScriptingConstantsPool::instance();
// if we dealing with a document storage (ie. not user or share
@@ -546,14 +517,8 @@ const ::rtl::OUString & permissionURI ) SAL_THROW ( ( RuntimeException, css::sec
OSL_TRACE( "ScriptNameResolverImpl::getStorageInstance: got execute permission for ID=%d", sid );
}
Reference< storage::XScriptStorageManager > xScriptStorageManager( xInterface, UNO_QUERY_THROW );
- validateXRef( xScriptStorageManager,
- "ScriptNameResolverImpl::getStorageInstance: cannot get Script Storage Manager service" );
- Reference< XInterface > xScriptStorage =
- xScriptStorageManager->getScriptStorage( sid );
- validateXRef( xScriptStorage,
- "ScriptNameResolverImpl::getStorageInstance: cannot get Script Storage service" );
- xScriptInfoAccess = Reference<
- storage::XScriptInfoAccess > ( xScriptStorage, UNO_QUERY_THROW );
+ Reference< XInterface > xScriptStorage( ScriptStorageManager->getScriptStorage( sid ), UNO_SET_THROW );
+ xScriptInfoAccess.set( xScriptStorage, UNO_QUERY_THROW );
}
catch ( lang::IllegalArgumentException & e )
{
diff --git a/scripting/source/runtimemgr/ScriptRuntimeManager.cxx b/scripting/source/runtimemgr/ScriptRuntimeManager.cxx
index 4780d58acc88..79a44bebce7d 100755
--- a/scripting/source/runtimemgr/ScriptRuntimeManager.cxx
+++ b/scripting/source/runtimemgr/ScriptRuntimeManager.cxx
@@ -37,6 +37,7 @@
#include
#include
+#include
#include
#include
@@ -68,14 +69,10 @@ static Sequence< OUString > s_serviceNames = Sequence< OUString >( &s_serviceNam
// ScriptRuntimeManager Constructor
ScriptRuntimeManager::ScriptRuntimeManager(
const Reference< XComponentContext > & xContext ) :
- m_xContext( xContext )
+ m_xContext( xContext, UNO_SET_THROW )
{
OSL_TRACE( "< ScriptRuntimeManager ctor called >\n" );
- validateXRef( m_xContext,
- "ScriptRuntimeManager::ScriptRuntimeManager: invalid context" );
- m_xMgr = m_xContext->getServiceManager();
- validateXRef( m_xMgr,
- "ScriptRuntimeManager::ScriptRuntimeManager: cannot get ServiceManager" );
+ m_xMgr.set( m_xContext->getServiceManager(), UNO_SET_THROW );
s_moduleCount.modCnt.acquire( &s_moduleCount.modCnt );
// test
//scripting_securitymgr::ScriptSecurityManager ssm(xContext);
@@ -106,22 +103,12 @@ throw( RuntimeException )
Reference< storage::XScriptInfo > sinfo =
Reference< storage::XScriptInfo >( scriptInfo, UNO_QUERY_THROW );
- OUStringBuffer *buf = new OUStringBuffer(80);
- buf->appendAscii("/singletons/drafts.com.sun.star.script.framework.runtime.theScriptRuntimeFor");
- buf->append(sinfo->getLanguage());
+ OUStringBuffer* buf( 80 );
+ buf.appendAscii("/singletons/drafts.com.sun.star.script.framework.runtime.theScriptRuntimeFor");
+ buf.append(sinfo->getLanguage());
- Any a = m_xContext->getValueByName(buf->makeStringAndClear());
-
- if ( sal_False == ( a >>= xInterface ) )
- {
- throw RuntimeException(
- sinfo->getLanguage().concat( OUSTR( " runtime support is not installed for this language" ) ),
- Reference< XInterface >() );
- }
- validateXRef( xInterface,
- "ScriptRuntimeManager::GetScriptRuntime: cannot get appropriate ScriptRuntime Service"
- );
- xScriptInvocation = Reference< runtime::XScriptInvocation >( xInterface, UNO_QUERY_THROW );
+ xInterface.set( m_xContext->getValueByName( buf.makeStringAndClear() ), UNO_QUERY_THROW );
+ xScriptInvocation.set( xInterface, UNO_QUERY_THROW );
}
catch ( Exception & e )
{
@@ -143,13 +130,14 @@ throw( RuntimeException )
try
{
- Reference< XInterface > xInterface = m_xMgr->createInstanceWithContext(
- OUString::createFromAscii(
- "drafts.com.sun.star.script.framework.runtime.DefaultScriptNameResolver" ),
- m_xContext );
- validateXRef( xInterface,
- "ScriptRuntimeManager::GetScriptRuntime: cannot get instance of DefaultScriptNameResolver" );
- xScriptNameResolver = Reference< runtime::XScriptNameResolver >( xInterface, UNO_QUERY_THROW );
+ Reference< XInterface > xInterface(
+ m_xMgr->createInstanceWithContext(
+ OUString::createFromAscii("drafts.com.sun.star.script.framework.runtime.DefaultScriptNameResolver" ),
+ m_xContext
+ ),
+ UNO_SET_THROW
+ );
+ xScriptNameResolver.set( xInterface, UNO_QUERY_THROW );
}
catch ( Exception & e )
{
@@ -182,9 +170,8 @@ Any SAL_CALL ScriptRuntimeManager::invoke(
try
{
- Reference< storage::XScriptInfo > resolvedScript = resolve( scriptURI,
- resolvedCtx );
- validateXRef( resolvedScript, "ScriptRuntimeManager::invoke: No resolvedURI" );
+ Reference< storage::XScriptInfo > resolvedScript = resolve( scriptURI, resolvedCtx );
+ ENSURE_OR_THROW( resolvedScript.is(), "ScriptRuntimeManager::invoke: No resolvedURI" );
Reference< beans::XPropertySet > xPropSetResolvedCtx;
if ( sal_False == ( resolvedCtx >>= xPropSetResolvedCtx ) )
@@ -216,7 +203,7 @@ Any SAL_CALL ScriptRuntimeManager::invoke(
Reference< runtime::XScriptInvocation > xScriptInvocation =
getScriptRuntime( resolvedScript );
- validateXRef( xScriptInvocation,
+ ENSURE_OR_THROW( xScriptInvocation.is(),
"ScriptRuntimeManager::invoke: cannot get instance of language specific runtime." );
// the scriptURI is currently passed to the language-dept runtime but
@@ -232,13 +219,7 @@ Any SAL_CALL ScriptRuntimeManager::invoke(
{
Any a = m_xContext->getValueByName(
scriptingConstantsPool.SCRIPTSTORAGEMANAGER_SERVICE );
- Reference < lang::XEventListener > xEL_ScriptStorageManager;
- if ( sal_False == ( a >>= xEL_ScriptStorageManager ) )
- {
- throw RuntimeException( OUSTR( "ScriptRuntimeManager::invoke: can't get ScriptStorageManager XEventListener interface when trying to dispose of filesystem storage" ),
- Reference< XInterface > () );
- }
- validateXRef( xEL_ScriptStorageManager, "Cannot get XEventListener from ScriptStorageManager" );
+ Reference < lang::XEventListener > xEL_ScriptStorageManager( a, UNO_QUERY_THROW );
lang::EventObject event(resolvedScript);
xEL_ScriptStorageManager->disposing( event );
}
@@ -310,7 +291,7 @@ throw( lang::IllegalArgumentException, script::CannotConvertException, RuntimeEx
Reference< storage::XScriptInfo > resolvedURI;
Reference< runtime::XScriptNameResolver > xScriptNameResolver = getScriptNameResolver();
- validateXRef( xScriptNameResolver,
+ ENSURE_OR_THROW( xScriptNameResolver.is(),
"ScriptRuntimeManager::resolve: No ScriptNameResolver" );
try
diff --git a/scripting/source/runtimemgr/StorageBridge.cxx b/scripting/source/runtimemgr/StorageBridge.cxx
index d1915afba9e5..1e15cf808870 100644
--- a/scripting/source/runtimemgr/StorageBridge.cxx
+++ b/scripting/source/runtimemgr/StorageBridge.cxx
@@ -54,9 +54,8 @@ const int STORAGEPROXY = 0;
//*************************************************************************
// StorageBridge Constructor
StorageBridge::StorageBridge( const Reference< XComponentContext >& xContext,
- sal_Int32 sid ) : m_xContext( xContext ), m_sid( sid )
+ sal_Int32 sid ) : m_xContext( xContext, UNO_SET_THROW ), m_sid( sid )
{
- validateXRef( m_xContext, "StorageBridge::StorageBridge: invalid context" );
try
{
initStorage();
@@ -74,31 +73,12 @@ StorageBridge::initStorage() throw ( ::com::sun::star::uno::RuntimeException )
{
try
{
- Reference< lang::XMultiComponentFactory > xMultiComFac =
- m_xContext->getServiceManager();
- validateXRef( xMultiComFac,
- "StorageBridge::StorageBridge: cannot get multicomponentfactory from multiservice factory" );
- Reference< XInterface > temp;
-
- Any a = m_xContext->getValueByName(
- OUString::createFromAscii( SCRIPTSTORAGEMANAGER_SERVICE ) );
- if ( sal_False == ( a >>= temp ) )
- {
- throw RuntimeException(
- OUSTR( "StorageBridge::StorageBridge: could not obtain ScriptStorageManager singleton" ),
- Reference< XInterface >() );
- }
- validateXRef( temp,
- "StorageBridge::StorageBridge: cannot get Storage service" );
+ Reference< lang::XMultiComponentFactory > xMultiComFac( m_xContext->getServiceManager(), UNO_SET_THROW );
+ Reference< XInterface > temp( m_xContext->getValueByName(
+ OUString::createFromAscii( SCRIPTSTORAGEMANAGER_SERVICE ) ), UNO_QUERY_THROW );
Reference< storage::XScriptStorageManager > xScriptStorageManager( temp, UNO_QUERY_THROW );
- validateXRef( xScriptStorageManager,
- "StorageBridge::StorageBridge: cannot get Script Storage Manager service" );
- Reference< XInterface > xScriptStorage =
- xScriptStorageManager->getScriptStorage( m_sid );
- validateXRef( xScriptStorage,
- "StorageBridge::StorageBridge: cannot get Script Storage service" );
- m_xScriptInfoAccess =
- Reference< storage::XScriptInfoAccess > ( xScriptStorage, UNO_QUERY_THROW );
+ Reference< XInterface > xScriptStorage( xScriptStorageManager->getScriptStorage( m_sid ), UNO_SET_THROW );
+ m_xScriptInfoAccess.set( xScriptStorage, UNO_QUERY_THROW );
}
catch ( RuntimeException & re )
{
diff --git a/scripting/source/storage/ScriptMetadataImporter.cxx b/scripting/source/storage/ScriptMetadataImporter.cxx
index 64dd87b2546b..96faf6e9c1f4 100644
--- a/scripting/source/storage/ScriptMetadataImporter.cxx
+++ b/scripting/source/storage/ScriptMetadataImporter.cxx
@@ -38,7 +38,7 @@
#include
#include
-
+#include
#include
@@ -82,31 +82,14 @@ void ScriptMetadataImporter::parseMetaData(
ms_parcelURI = parcelURI;
//Get the parser service
- validateXRef( m_xContext,
+ ENSURE_OR_THROW( m_xContext.is(),
"ScriptMetadataImporter::parseMetaData: No context available" );
- Reference< lang::XMultiComponentFactory > xMgr =
- m_xContext->getServiceManager();
+ Reference< lang::XMultiComponentFactory > xMgr( m_xContext->getServiceManager(), UNO_SET_THROW );
- validateXRef( xMgr,
- "ScriptMetadataImporter::parseMetaData: No service manager available" );
-
- Reference< XInterface > xInterface = xMgr->createInstanceWithContext(
- OUString::createFromAscii( "com.sun.star.xml.sax.Parser" ), m_xContext );
-
- validateXRef( xInterface, "ScriptMetadataImporter::parseMetaData: cannot get SAX Parser" );
- Reference< xml::sax::XParser > xParser;
- try
- {
- xParser.set( xInterface ,UNO_QUERY_THROW );
- }
- catch (RuntimeException & re )
- {
- OUString msg = OUString::createFromAscii(
- "ScriptMetadata:Importer::parserMetaData cannot get XParser" );
- msg.concat( re.Message );
- throw RuntimeException( msg, Reference< XInterface > () );
- }
+ Reference< xml::sax::XParser > xParser(
+ xMgr->createInstanceWithContext( OUString::createFromAscii( "com.sun.star.xml.sax.Parser" ), m_xContext ),
+ UNO_QUERY_THROW );
// xxx todo: error handler, entity resolver omitted
// This class is the document handler for the parser
diff --git a/scripting/source/storage/ScriptSecurityManager.cxx b/scripting/source/storage/ScriptSecurityManager.cxx
index 3fde4e466974..fbe6f41b4663 100755
--- a/scripting/source/storage/ScriptSecurityManager.cxx
+++ b/scripting/source/storage/ScriptSecurityManager.cxx
@@ -47,7 +47,7 @@
#include "ScriptSecurityManager.hxx"
#include
#include
-
+#include
using namespace ::rtl;
using namespace ::osl;
@@ -85,28 +85,15 @@ static const int ADD_TO_PATH = 2;
// ScriptSecurityManager Constructor
ScriptSecurityManager::ScriptSecurityManager(
const Reference< XComponentContext > & xContext ) throw ( RuntimeException )
- : m_xContext( xContext)
+ : m_xContext( xContext, UNO_SET_THROW )
{
OSL_TRACE( "< ScriptSecurityManager ctor called >\n" );
- validateXRef( m_xContext,
- "ScriptSecurityManager::ScriptSecurityManager: invalid context" );
// get the service manager from the context
- Reference< lang::XMultiComponentFactory > xMgr = m_xContext->getServiceManager();
- validateXRef( xMgr,
- "ScriptSecurityManager::ScriptSecurityManager: cannot get ServiceManager" );
+ Reference< lang::XMultiComponentFactory > xMgr( m_xContext->getServiceManager(), UNO_SET_THROW );
// create an instance of the ConfigurationProvider
- Reference< XInterface > xInterface = xMgr->createInstanceWithContext(
- s_configProv, m_xContext );
- validateXRef( xInterface,
- "ScriptSecurityManager::ScriptSecurityManager: cannot get ConfigurationProvider" );
- // create an instance of the ConfigurationAccess for accessing the
- // scripting security settings
- m_xConfigProvFactory = Reference < lang::XMultiServiceFactory > ( xInterface, UNO_QUERY );
- validateXRef( m_xConfigProvFactory,
- "ScriptSecurityManager::ScriptSecurityManager: cannot get XMultiServiceFactory interface from ConfigurationProvider" );
-
+ m_xConfigProvFactory.set( xMgr->createInstanceWithContext( s_configProv, m_xContext ), UNO_QUERY_THROW );
}
void ScriptSecurityManager::addScriptStorage( rtl::OUString scriptStorageURL,
@@ -131,35 +118,6 @@ throw ( RuntimeException )
//need to check if storage has any scripts
try
{
- /* need to replace this with something better, now logical names are
- * gone
-
- Reference< XInterface > xInterface;
- Any a = m_xContext->getValueByName(
- OUString::createFromAscii( SCRIPTSTORAGEMANAGER_SERVICE ) );
- if ( sal_False == ( a >>= xInterface ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptSecurityManager::addScriptStorage: could not obtain ScriptStorageManager singleton" ),
- Reference< XInterface >() );
- }
- validateXRef( xInterface,
- "ScriptSecurityManager::addScriptStorage: cannot get Storage service" );
- Reference< storage::XScriptStorageManager > xScriptStorageManager(
- xInterface, UNO_QUERY_THROW );
- Reference< XInterface > xScriptStorage =
- xScriptStorageManager->getScriptStorage( storageID );
- validateXRef( xScriptStorage,
- "ScriptNameResolverImpl::getStorageInstance: cannot get Script Storage service" );
- Reference< storage::XScriptInfoAccess > xScriptInfoAccess =
- Reference< storage::XScriptInfoAccess > ( xScriptStorage,
- UNO_QUERY_THROW );
- Sequence< ::rtl::OUString > logicalNames = xScriptInfoAccess->getScriptLogicalNames();
- if( !logicalNames.getLength() ) // we have no logical names
- {
- return;
- } */
-
// we have some scripts so read config & decide on that basis
// Setup flags: m_runMacroSetting, m_warning, m_confirmationRequired,
readConfiguration();
@@ -317,17 +275,12 @@ throw ( RuntimeException )
short result;
try
{
- Reference< lang::XMultiComponentFactory > xMgr = m_xContext->getServiceManager();
- validateXRef( xMgr,
- "ScriptSecurityManager::executeDialog: cannot get ServiceManager" );
- Reference< XInterface > xInterface =
- xMgr->createInstanceWithArgumentsAndContext( s_securityDialog,
- aArgs, m_xContext );
- validateXRef( xInterface, "ScriptSecurityManager::executeDialog: Can't create SecurityDialog" );
- Reference< awt::XDialog > xDialog( xInterface, UNO_QUERY_THROW );
+ Reference< lang::XMultiComponentFactory > xMgr( m_xContext->getServiceManager(), UNO_SET_THROW );
+ Reference< awt::XDialog > xDialog(
+ xMgr->createInstanceWithArgumentsAndContext( s_securityDialog, aArgs, m_xContext ),
+ UNO_QUERY_THROW );
result = xDialog->execute();
- Reference< lang::XComponent > xComponent( xInterface, UNO_QUERY_THROW );
- validateXRef( xInterface, "ScriptSecurityManager::executeDialog: Can't get XComponent to dispose dialog" );
+ Reference< lang::XComponent > xComponent( xDialog, UNO_QUERY_THROW );
xComponent->dispose();
}
catch ( RuntimeException & rte )
@@ -410,31 +363,20 @@ void ScriptSecurityManager::removePermissionSettings ( ::rtl::OUString & scriptS
void ScriptSecurityManager::readConfiguration()
throw ( RuntimeException)
{
- Reference< XInterface > xInterface;
try
{
- beans::PropertyValue configPath;
- configPath.Name = ::rtl::OUString::createFromAscii( "nodepath" );
- configPath.Value <<= ::rtl::OUString::createFromAscii( "org.openoffice.Office.Common/Security/Scripting" );
- Sequence < Any > aargs( 1 );
- aargs[ 0 ] <<= configPath;
- validateXRef( m_xConfigProvFactory,
- "ScriptSecurityManager::readConfiguration: ConfigProviderFactory no longer valid!" );
- xInterface = m_xConfigProvFactory->createInstanceWithArguments( s_configAccess,
- aargs );
- validateXRef( xInterface,
- "ScriptSecurityManager::readConfiguration: cannot get ConfigurationAccess" );
- // get the XPropertySet interface from the ConfigurationAccess service
- Reference < beans::XPropertySet > xPropSet( xInterface, UNO_QUERY );
- Any value;
+ beans::PropertyValue configPath;
+ configPath.Name = ::rtl::OUString::createFromAscii( "nodepath" );
+ configPath.Value <<= ::rtl::OUString::createFromAscii( "org.openoffice.Office.Common/Security/Scripting" );
+ Sequence < Any > aargs( 1 );
+ aargs[ 0 ] <<= configPath;
+ ENSURE_OR_THROW( m_xConfigProvFactory.is(),
+ "ScriptSecurityManager::readConfiguration: ConfigProviderFactory no longer valid!" );
+ // get the XPropertySet interface from the ConfigurationAccess service
+ Reference < beans::XPropertySet > xPropSet( m_xConfigProvFactory->createInstanceWithArguments( s_configAccess, aargs ), UNO_QUERY_THROW );
- value=xPropSet->getPropertyValue( OUSTR( "Confirmation" ) );
- if ( sal_False == ( value >>= m_confirmationRequired ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptSecurityManager:readConfiguration: can't get Confirmation setting" ),
- Reference< XInterface > () );
- }
+ m_confirmationRequired = sal_True;
+ OSL_VERIFY( xPropSet->getPropertyValue( OUSTR( "Confirmation" ) ) >>= m_confirmationRequired );
if ( m_confirmationRequired == sal_True )
{
OSL_TRACE( "ScriptSecurityManager:readConfiguration: confirmation is true" );
@@ -443,13 +385,10 @@ void ScriptSecurityManager::readConfiguration()
{
OSL_TRACE( "ScriptSecurityManager:readConfiguration: confirmation is false" );
}
- value=xPropSet->getPropertyValue( OUSTR( "Warning" ) );
- if ( sal_False == ( value >>= m_warning ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptSecurityManager:readConfiguration: can't get Warning setting" ),
- Reference< XInterface > () );
- }
+
+ m_warning = true;
+ OSL_VERIFY( xPropSet->getPropertyValue( OUSTR( "Warning" ) ) >>= m_warning );
+
if ( m_warning == sal_True )
{
OSL_TRACE( "ScriptSecurityManager:readConfiguration: warning is true" );
@@ -458,21 +397,13 @@ void ScriptSecurityManager::readConfiguration()
{
OSL_TRACE( "ScriptSecurityManager:readConfiguration: warning is false" );
}
- value=xPropSet->getPropertyValue( OUSTR( "OfficeBasic" ) );
- if ( sal_False == ( value >>= m_runMacroSetting ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptSecurityManager:readConfiguration: can't get OfficeBasic setting" ),
- Reference< XInterface > () );
- }
+
+ m_runMacroSetting = sal_True;
+ OSL_VERIFY( xPropSet->getPropertyValue( OUSTR( "OfficeBasic" ) ) >>= m_runMacroSetting );
OSL_TRACE( "ScriptSecurityManager:readConfiguration: OfficeBasic = %d", m_runMacroSetting );
- value=xPropSet->getPropertyValue( OUSTR( "SecureURL" ) );
- if ( sal_False == ( value >>= m_secureURL ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptSecurityManager:readConfiguration: can't get SecureURL setting" ),
- Reference< XInterface > () );
- }
+
+ m_secureURL = ::rtl::OUString();
+ OSL_VERIFY( xPropSet->getPropertyValue( OUSTR( "SecureURL" ) ) >>= m_secureURL );
}
catch ( beans::UnknownPropertyException & upe )
{
@@ -508,18 +439,14 @@ void ScriptSecurityManager::readConfiguration()
int length = m_secureURL.getLength();
// PathSubstitution needed to interpret variables found in config
- Reference< lang::XMultiComponentFactory > xMgr = m_xContext->getServiceManager();
- validateXRef( xMgr,
- "ScriptSecurityManager::readConfiguration: cannot get XMultiComponentFactory" );
- xInterface = xMgr->createInstanceWithContext(
- ::rtl::OUString::createFromAscii(
- "com.sun.star.util.PathSubstitution"), m_xContext);
- validateXRef( xInterface,
- "ScriptSecurityManager::readConfiguration: cannot get ConfigurationProvider" );
+ Reference< lang::XMultiComponentFactory > xMgr( m_xContext->getServiceManager(), UNO_SET_THROW );
+ Reference< XInterface > xInterface = );
Reference< util::XStringSubstitution > xStringSubstitution(
- xInterface, UNO_QUERY);
- validateXRef( xStringSubstitution,
- "ScriptSecurityManager::readConfiguration: cannot get ConfigurationProvider" );
+ xMgr->createInstanceWithContext(
+ ::rtl::OUString::createFromAscii( "com.sun.star.util.PathSubstitution" ), m_xContext
+ ),
+ UNO_QUERY_THROW
+ );
for( int i = 0; i < length; i++ )
{
OSL_TRACE( "ScriptSecurityManager:readConfiguration path = %s",
@@ -552,16 +479,9 @@ throw ( RuntimeException )
configPath.Value <<= ::rtl::OUString::createFromAscii( "org.openoffice.Office.Common/Security/Scripting" );
Sequence < Any > aargs( 1 );
aargs[ 0 ] <<= configPath;
- Reference< XInterface > xInterface = m_xConfigProvFactory->createInstanceWithArguments( s_configUpdate,
- aargs );
- validateXRef( xInterface,
- "ScriptSecurityManager::addToSecurePaths: ScriptSecurityManager: cannot get ConfigurationUpdateAccess" );
- Reference < container::XNameReplace > xNameReplace( xInterface, UNO_QUERY );
- validateXRef( xNameReplace,
- "ScriptSecurityManager::addToSecurePaths: ScriptSecurityManager: cannot get XNameReplace" );
- Reference < util::XChangesBatch > xChangesBatch( xInterface, UNO_QUERY );
- validateXRef( xChangesBatch,
- "ScriptSecurityManager::addToSecurePaths: cannot get XChangesBatch" );
+ Reference < container::XNameReplace > xNameReplace(
+ m_xConfigProvFactory->createInstanceWithArguments( s_configUpdate, aargs ), UNO_QUERY_THROW );
+ Reference < util::XChangesBatch > xChangesBatch( xNameReplace, UNO_QUERY_THROW );
OSL_TRACE( "--->ScriptSecurityManager::addToSecurePaths: after if stuff" );
Reference < beans::XPropertySet > xPropSet( xInterface, UNO_QUERY );
diff --git a/scripting/source/storage/ScriptStorage.cxx b/scripting/source/storage/ScriptStorage.cxx
index 7315e9d35dd5..e4ea5f231f47 100644
--- a/scripting/source/storage/ScriptStorage.cxx
+++ b/scripting/source/storage/ScriptStorage.cxx
@@ -84,16 +84,11 @@ const sal_uInt16 NUMBER_STORAGE_INITIALIZE_ARGS = 3;
ScriptStorage::ScriptStorage( const Reference <
XComponentContext > & xContext )
throw ( RuntimeException )
- : m_xContext( xContext ), m_bInitialised( false )
+ : m_xContext( xContext, UNO_SET_THROW ), m_bInitialised( false )
{
OSL_TRACE( "< ScriptStorage ctor called >\n" );
- validateXRef( m_xContext,
- "ScriptStorage::ScriptStorage : cannot get component context" );
-
- m_xMgr = m_xContext->getServiceManager();
- validateXRef( m_xMgr,
- "ScriptStorage::ScriptStorage : cannot get service manager" );
+ m_xMgr.set( m_xContext->getServiceManager(), UNO_SET_THROW );
if( !mh_scriptLangs )
{
@@ -101,47 +96,30 @@ throw ( RuntimeException )
if( !mh_scriptLangs )
{
mh_scriptLangs = new ScriptLanguages_hash();
- Reference< XInterface > xInterface =
- m_xMgr->createInstanceWithContext(
- OUString::createFromAscii(
- "com.sun.star.configuration.ConfigurationProvider" )
- , m_xContext );
- validateXRef( xInterface,
- "ScriptStorage::ScriptStorage: cannot get ConfigurationProvider" );
+ Reference< lang::XMultiServiceFactory > xConfigProvFactory(
+ m_xMgr->createInstanceWithContext( OUString::createFromAscii( "com.sun.star.configuration.ConfigurationProvider" ), m_xContext ),
+ UNO_QUERY_THROW );
// create an instance of the ConfigurationAccess for accessing the
// scripting runtime settings
- Reference< lang::XMultiServiceFactory > xConfigProvFactory =
- Reference < lang::XMultiServiceFactory >
- ( xInterface, UNO_QUERY_THROW );
- validateXRef( xConfigProvFactory,
- "ScriptStorage::ScriptStorage: cannot get XMultiServiceFactory interface from ConfigurationProvider" );
beans::PropertyValue configPath;
configPath.Name = ::rtl::OUString::createFromAscii( "nodepath" );
configPath.Value <<= ::rtl::OUString::createFromAscii( "org.openoffice.Office.Scripting/ScriptRuntimes" );
Sequence < Any > aargs( 1 );
aargs[ 0 ] <<= configPath;
- xInterface = xConfigProvFactory->createInstanceWithArguments(
- OUString::createFromAscii(
- "com.sun.star.configuration.ConfigurationAccess"),
- aargs );
- validateXRef( xInterface,
- "ScriptStorage::ScriptStorage: cannot get ConfigurationAccess" );
- Reference< container::XNameAccess > xNameAccess =
- Reference < container::XNameAccess > ( xInterface,
- UNO_QUERY_THROW );
- validateXRef( xNameAccess,
- "ScriptStorage::ScriptStorage: cannot get ConfigurationAccess" );
+ Reference< container::XNameAccess > xNameAccess(
+ xConfigProvFactory->createInstanceWithArguments(
+ OUString::createFromAscii( "com.sun.star.configuration.ConfigurationAccess" ),
+ aargs
+ ),
+ UNO_QUERY_THROW );
+
Sequence< OUString > names = xNameAccess->getElementNames();
for( int i = 0 ; i < names.getLength() ; i++ )
{
OSL_TRACE( "Getting propertyset for Lang=%s",
::rtl::OUStringToOString( names[i], RTL_TEXTENCODING_ASCII_US ).pData->buffer );
- Reference< beans::XPropertySet > xPropSet =
- Reference< beans::XPropertySet >( xNameAccess->getByName(names[i]),
- UNO_QUERY_THROW );
- validateXRef( xPropSet,
- "ScriptStorage::ScriptStorage: cannot get XPropertySet for name" );
+ Reference< beans::XPropertySet > xPropSet( xNameAccess->getByName( names[i] ), UNO_QUERY_THROW );
Any aProp = xPropSet->getPropertyValue(
OUString::createFromAscii( "SupportedFileExtensions") );
Sequence< OUString > extns;
@@ -285,9 +263,7 @@ throw ( RuntimeException, Exception )
OUString xStringUri(m_stringUri);
ScriptMetadataImporter* SMI = new ScriptMetadataImporter( m_xContext );
- Reference< xml::sax::XExtendedDocumentHandler > xSMI( SMI );
-
- validateXRef( xSMI, "ScriptStorage::create: failed to obtain valid XExtendedDocumentHandler" );
+ Reference< xml::sax::XExtendedDocumentHandler > xSMI( SMI, UNO_SET_THROW );
xStringUri = xStringUri.concat( ::rtl::OUString::createFromAscii(
SCRIPT_DIR ) );
@@ -587,15 +563,14 @@ throw ( RuntimeException )
"/parcel.xml" ) ),
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
- Reference< XInterface > xInterface =
+ xHandler.set(
m_xMgr->createInstanceWithContext(
- OUString::createFromAscii( "com.sun.star.xml.sax.Writer" ),
- m_xContext );
- validateXRef( xInterface, "ScriptStorage::save: cannot get sax.Writer" );
- xHandler = Reference(
- xInterface, UNO_QUERY_THROW );
- xSource = Reference< io::XActiveDataSource >(
- xHandler, UNO_QUERY_THROW );
+ OUString::createFromAscii( "com.sun.star.xml.sax.Writer" ),
+ m_xContext
+ ),
+ UNO_QUERY_THROW
+ );
+ xSource.set( xHandler, UNO_QUERY_THROW );
xSource->setOutputStream( xOS );
writeMetadataHeader( xHandler );
diff --git a/scripting/source/storage/ScriptStorageManager.cxx b/scripting/source/storage/ScriptStorageManager.cxx
index 77ca5a45dd15..424f2752bc47 100644
--- a/scripting/source/storage/ScriptStorageManager.cxx
+++ b/scripting/source/storage/ScriptStorageManager.cxx
@@ -45,6 +45,7 @@
#include "ScriptStorageManager.hxx"
#include
#include
+#include
using namespace ::rtl;
using namespace ::com::sun::star;
@@ -70,32 +71,19 @@ static Sequence< OUString > s_serviceNames = Sequence< OUString >( &s_serviceNam
// ScriptStorageManager Constructor
ScriptStorageManager::ScriptStorageManager( const Reference<
XComponentContext > & xContext ) SAL_THROW ( ( RuntimeException ) )
- : m_xContext( xContext ), m_count( 0 ), m_securityMgr( xContext )
+ : m_xContext( xContext, UNO_SET_THROW ), m_count( 0 ), m_securityMgr( xContext )
{
OSL_TRACE( "< ScriptStorageManager ctor called >\n" );
//s_moduleCount.modCnt.acquire( &s_moduleCount.modCnt );
- validateXRef( m_xContext,
- "ScriptStorageManager::ScriptStorageManager : cannot get component context" );
-
- m_xMgr = m_xContext->getServiceManager();
- validateXRef( m_xMgr,
- "ScriptStorageManager::ScriptStorageManager : cannot get service manager" );
+ m_xMgr.set( m_xContext->getServiceManager(), UNO_SET_THROW );
try
{
// obtain the macro expander singleton to use in determining the
// location of the application script storage
- Any aAny = m_xContext->getValueByName( OUString::createFromAscii(
- "/singletons/com.sun.star.util.theMacroExpander" ) );
- Reference< util::XMacroExpander > xME;
- if ( sal_False == ( aAny >>= xME ) )
- {
- throw RuntimeException(
- OUSTR( "ScriptStorageManager::ScriptStorageManager: can't get XMacroExpander" ),
- Reference< XInterface >() );
- }
- validateXRef( xME, "ScriptStorageManager constructor: can't get MacroExpander" );
+ Reference< util::XMacroExpander > xME( m_xContext->getValueByName( OUString::createFromAscii(
+ "/singletons/com.sun.star.util.theMacroExpander" ) ), UNO_QUERY_THROW );
OUString base = OUString::createFromAscii(
SAL_CONFIGFILE( "${$BRAND_BASE_DIR/program/bootstrap" ) );
@@ -126,12 +114,13 @@ SAL_THROW ( ( RuntimeException ) )
{
try
{
- Reference< XInterface > xInterface =
+ Reference< ucb::XSimpleFileAccess > xSFA(
m_xMgr->createInstanceWithContext(
- OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), m_xContext );
- validateXRef( xInterface,
- "ScriptStorageManager constructor: can't get SimpleFileAccess XInterface" );
- Reference< ucb::XSimpleFileAccess > xSFA( xInterface, UNO_QUERY_THROW );
+ OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ),
+ m_xContext
+ ),
+ UNO_QUERY_THROW
+ );
setupAnyStorage( xSFA, xME->expandMacros( storageStr ), appStr );
}
@@ -168,13 +157,14 @@ SAL_THROW ( ( RuntimeException ) )
::rtl::OUStringToOString( storageStr,
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
- Reference< XInterface > xInterface =
+ Reference< XInterface > xInterface(
m_xMgr->createInstanceWithArgumentsAndContext(
- OUString::createFromAscii(
- "drafts.com.sun.star.script.framework.storage.ScriptStorage" ),
- aArgs, m_xContext );
-
- validateXRef( xInterface, "ScriptStorageManager:: setupAnyStorage: Can't create ScriptStorage for share" );
+ OUString::createFromAscii( "drafts.com.sun.star.script.framework.storage.ScriptStorage" ),
+ aArgs,
+ m_xContext
+ ),
+ UNO_QUERY_THROW
+ );
// and place it in the hash_map. Increment the counter
m_ScriptStorageMap[ m_count++ ] = xInterface;
@@ -215,8 +205,7 @@ ScriptStorageManager::createScriptStorage(
throw ( RuntimeException )
{
OSL_TRACE( "** ==> ScriptStorageManager in createScriptingStorage\n" );
- validateXRef( xSFA,
- "ScriptStorageManager::createScriptStorage: XSimpleFileAccess is not valid" );
+ ENSURE_OR_THROW( xSFA.is(), "ScriptStorageManager::createScriptStorage: XSimpleFileAccess is not valid" );
return setupAnyStorage( xSFA, ::rtl::OUString::createFromAscii( "" ),
::rtl::OUString::createFromAscii( "" ) );
@@ -229,7 +218,7 @@ ScriptStorageManager::createScriptStorageWithURI(
throw ( RuntimeException )
{
OSL_TRACE( "** ==> ScriptStorageManager in createScriptingStorageWithURI\n" );
- validateXRef( xSFA, "ScriptStorageManager::createScriptStorage: XSimpleFileAccess is not valid" );
+ ENSURE_OR_THROW( xSFA.is(), "ScriptStorageManager::createScriptStorage: XSimpleFileAccess is not valid" );
// related to issue 11866
// warning dialog gets launched when adding binding to script in doc
@@ -313,7 +302,7 @@ throw( RuntimeException )
OUSTR( "ScriptStorageManager::getScriptStorage: invalid storage ID" ),
Reference< XInterface >() );
}
- validateXRef( itr->second,
+ ENSURE_OR_THROW( itr->second.is(),
"ScriptStorageManager::getScriptStorage: Cannot get ScriptStorage from ScriptStorageHash" );
return itr->second;
}
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 3c3ebe85294e..fb4d1a51857e 100755
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -137,7 +137,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/control/bindings \
sfx2/source/control/ctrlitem \
sfx2/source/control/dispatch \
- sfx2/source/control/macrconf \
sfx2/source/control/macro \
sfx2/source/control/minfitem \
sfx2/source/control/msg \
@@ -215,6 +214,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/doc/plugin \
sfx2/source/doc/printhelper \
sfx2/source/doc/querytemplate \
+ sfx2/source/doc/docundomanager \
sfx2/source/doc/sfxbasemodel \
sfx2/source/doc/sfxmodelfactory \
sfx2/source/doc/syspath \
diff --git a/sfx2/Package_inc.mk b/sfx2/Package_inc.mk
index 6ad8b0209c4e..85ce4143323c 100644
--- a/sfx2/Package_inc.mk
+++ b/sfx2/Package_inc.mk
@@ -81,7 +81,6 @@ $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/layout.hxx,sfx2/layout.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/linkmgr.hxx,sfx2/linkmgr.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/linksrc.hxx,sfx2/linksrc.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/lnkbase.hxx,sfx2/lnkbase.hxx))
-$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/macrconf.hxx,sfx2/macrconf.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/mailmodelapi.hxx,sfx2/mailmodelapi.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/mgetempl.hxx,sfx2/mgetempl.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/mieclip.hxx,sfx2/mieclip.hxx))
diff --git a/sfx2/inc/sfx2/app.hxx b/sfx2/inc/sfx2/app.hxx
index 804a43b35d7f..d27d9d6f1ba4 100644
--- a/sfx2/inc/sfx2/app.hxx
+++ b/sfx2/inc/sfx2/app.hxx
@@ -31,6 +31,7 @@
#include "sfx2/dllapi.h"
#include "sal/types.h"
#include
+#include
#include
#include
#include
@@ -98,6 +99,8 @@ struct SfxStbCtrlFactory;
struct SfxTbxCtrlFactory;
class SimpleResMgr;
class ModalDialog;
+class SbxArray;
+class SbxValue;
namespace sfx2
{
@@ -218,28 +221,26 @@ public:
// members
SfxFilterMatcher& GetFilterMatcher();
- SfxMacroConfig* GetMacroConfig() const;
SfxProgress* GetProgress() const;
const String& GetLastSaveDirectory() const;
- sal_uInt16 GetFreeIndex();
+ sal_uInt16 GetFreeIndex();
void ReleaseIndex(sal_uInt16 i);
- SfxEventConfiguration* GetEventConfig() const;
// Basic/Scripting
static sal_Bool IsXScriptURL( const String& rScriptURL );
static ::rtl::OUString ChooseScript();
static void MacroOrganizer( sal_Int16 nTabId );
+ static ErrCode CallBasic( const String&, BasicManager*, SbxArray *pArgs, SbxValue *pRet );
+ static ErrCode CallAppBasic( const String& i_macroName, SbxArray* i_args = NULL, SbxValue* i_ret = NULL )
+ { return CallBasic( i_macroName, SfxApplication::GetOrCreate()->GetBasicManager(), i_args, i_ret ); }
BasicManager* GetBasicManager();
com::sun::star::uno::Reference< com::sun::star::script::XLibraryContainer >
GetDialogContainer();
com::sun::star::uno::Reference< com::sun::star::script::XLibraryContainer >
GetBasicContainer();
StarBASIC* GetBasic();
- sal_uInt16 SaveBasicManager() const;
- sal_uInt16 SaveBasicAndDialogContainer() const;
- void EnterBasicCall();
- bool IsInBasicCall() const;
- void LeaveBasicCall();
+ sal_uInt16 SaveBasicManager() const;
+ sal_uInt16 SaveBasicAndDialogContainer() const;
void RegisterBasicConstants( const char *pPrefix,
const SfxConstant *pConsts,
sal_uInt16 nCount );
@@ -293,8 +294,6 @@ public:
SAL_DLLPRIVATE void MiscState_Impl(SfxItemSet &);
SAL_DLLPRIVATE void PropExec_Impl(SfxRequest &);
SAL_DLLPRIVATE void PropState_Impl(SfxItemSet &);
- SAL_DLLPRIVATE void MacroExec_Impl(SfxRequest &);
- SAL_DLLPRIVATE void MacroState_Impl(SfxItemSet &);
SAL_DLLPRIVATE void INetExecute_Impl(SfxRequest &);
SAL_DLLPRIVATE void INetState_Impl(SfxItemSet &);
SAL_DLLPRIVATE void OfaExec_Impl(SfxRequest &);
@@ -303,7 +302,6 @@ public:
SAL_DLLPRIVATE void SetProgress_Impl(SfxProgress *);
SAL_DLLPRIVATE const String& GetLastDir_Impl() const;
SAL_DLLPRIVATE void SetLastDir_Impl( const String & );
- SAL_DLLPRIVATE void PlayMacro_Impl( SfxRequest &rReq, StarBASIC *pBas );
SAL_DLLPRIVATE void EnterAsynchronCall_Impl();
SAL_DLLPRIVATE bool IsInAsynchronCall_Impl() const;
diff --git a/sfx2/inc/sfx2/dispatch.hxx b/sfx2/inc/sfx2/dispatch.hxx
index 4a027bba78c8..945d04b71f99 100644
--- a/sfx2/inc/sfx2/dispatch.hxx
+++ b/sfx2/inc/sfx2/dispatch.hxx
@@ -211,11 +211,8 @@ public:
Window *pWin, const Point *pPosPixel,
const SfxPoolItem *pArg1, ... );
- void EnterAction( const String& rName );
- void LeaveAction();
-
- sal_Bool IsAppDispatcher() const;
- sal_Bool IsFlushed() const;
+ sal_Bool IsAppDispatcher() const;
+ sal_Bool IsFlushed() const;
void Flush();
void Lock( sal_Bool bLock );
sal_Bool IsLocked( sal_uInt16 nSID = 0 ) const;
diff --git a/sfx2/inc/sfx2/evntconf.hxx b/sfx2/inc/sfx2/evntconf.hxx
index 0606209777d1..791b63da930a 100644
--- a/sfx2/inc/sfx2/evntconf.hxx
+++ b/sfx2/inc/sfx2/evntconf.hxx
@@ -45,10 +45,6 @@
#define ITEMID_MACRO SID_ATTR_MACROITEM
#include
-class SfxMacroInfo;
-class SfxMacroInfoArr_Impl;
-class SfxEventConfigItem_Impl;
-class SfxEventInfoArr_Impl;
class SfxObjectShell;
class SvxMacroTableDtor;
diff --git a/sfx2/inc/sfx2/macrconf.hxx b/sfx2/inc/sfx2/macrconf.hxx
deleted file mode 100644
index 6b50ddf3497a..000000000000
--- a/sfx2/inc/sfx2/macrconf.hxx
+++ /dev/null
@@ -1,155 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- *
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-#ifndef _SFX_MACROCONF_HXX
-#define _SFX_MACROCONF_HXX
-
-#include "sal/config.h"
-#include "sfx2/dllapi.h"
-#include "sal/types.h"
-#include
-#define _SVSTDARR_USHORTS
-#include // SvUShorts
-#include
-
-class SfxMacroInfo;
-class SfxSlot;
-class SfxMacroInfoItem;
-class SfxObjectShell;
-class BasicManager;
-struct SfxMacroConfig_Impl;
-class SbMethod;
-class SbxValue;
-class SbxObject;
-class SbxArray;
-class SvStream;
-class SvxMacro;
-
-typedef SfxMacroInfo* SfxMacroInfoPtr;
-//#if 0 // _SOLAR__PRIVATE
-SV_DECL_PTRARR(SfxMacroInfoArr_Impl, SfxMacroInfoPtr, 5, 5)
-//#else
-//class SfxMacroInfoArr_Impl;
-//#endif
-
-class SFX2_DLLPUBLIC SfxMacroInfo
-{
-friend class SfxMacroConfig;
-friend class SfxEventConfiguration;
-friend SvStream& operator >> (SvStream& rStream, SfxMacroInfo& rInfo);
-friend SvStream& operator << (SvStream& rStream, const SfxMacroInfo& rInfo);
-
- String* pHelpText;
- sal_uInt16 nRefCnt;
- sal_Bool bAppBasic;
- String aLibName;
- String aModuleName;
- String aMethodName;
- sal_uInt16 nSlotId;
- SfxSlot* pSlot;
-
-public:
- SfxMacroInfo( const String& rURL );
- SfxMacroInfo( bool _bAppBasic = true );
- SfxMacroInfo( bool _bAppBasic, const String& rQualifiedName );
- SfxMacroInfo(SfxMacroInfo& rOther);
- SfxMacroInfo(bool _bAppBasic, const String& rLibName,
- const String& rModuleName, const String& rMethodName);
- ~SfxMacroInfo();
- sal_Bool operator==(const SfxMacroInfo& rOther) const;
- int Load (SvStream&);
- int Store (SvStream&);
- String GetMacroName() const;
- String GetQualifiedName() const;
- String GetFullQualifiedName() const;
- BasicManager* GetBasicManager() const;
- String GetBasicName() const;
- String GetHelpText() const;
- sal_Bool IsAppMacro() const
- { return bAppBasic; }
- const String& GetModuleName() const
- { return aModuleName; }
- const String& GetLibName() const
- { return aLibName; }
- const String& GetMethodName() const
- { return aMethodName; }
- sal_uInt16 GetSlotId() const
- { return nSlotId; }
- SfxSlot* GetSlot() const
- { return pSlot; }
-
- sal_Bool Compare( const SvxMacro& ) const;
- void SetHelpText( const String& rText );
- String GetURL() const;
-};
-
-//ASDBG obsolete >= 582
-//ASDBG class ::com::sun::star::uno::Reference< ::com::sun::star::script::XEngine > ;
-//ASDBG class ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > ;
-
-class SFX2_DLLPUBLIC SfxMacroConfig
-{
-friend class SfxEventConfiguration;
-
- SAL_DLLPRIVATE static SfxMacroConfig* pMacroConfig;
-
- SfxMacroConfig_Impl* pImp;
- SvUShorts aIdArray;
-
-public:
- SfxMacroConfig();
- ~SfxMacroConfig();
-
- static SfxMacroConfig* GetOrCreate();
-
- static String RequestHelp( sal_uInt16 nId );
- static sal_Bool IsMacroSlot( sal_uInt16 nId );
- static sal_Bool IsBasic( SbxObject*, const String&, BasicManager* );
- static ErrCode Call( SbxObject*, const String&, BasicManager*,
- SbxArray *pArgs=NULL, SbxValue *pRet=NULL );
-//ASDBG obsolete >= 582
-//ASDBG static void CallStarScript( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XEngine > & rxEngine, const String & rCode,
-//ASDBG const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & rSource, void *pArgs, void *pRet );
- static SbMethod* GetMethod_Impl( const String&, BasicManager* );
-
- sal_uInt16 GetSlotId(SfxMacroInfoPtr);
- void ReleaseSlotId(sal_uInt16 nId);
- void RegisterSlotId(sal_uInt16 nId);
- SfxMacroInfo* GetMacroInfo(sal_uInt16 nId) const;
- sal_Bool ExecuteMacro(sal_uInt16 nId, const String& rArgs ) const;
- sal_Bool ExecuteMacro( SfxObjectShell*, const SvxMacro*, const String& ) const;
- sal_Bool CheckMacro(sal_uInt16 nId) const;
- sal_Bool CheckMacro( SfxObjectShell*, const SvxMacro* ) const;
-
-//#if 0 // _SOLAR__PRIVATE
- SAL_DLLPRIVATE static void Release_Impl();
- SAL_DLLPRIVATE const SfxMacroInfo* GetMacroInfo_Impl( const SvxMacro *pMacro ) const;
- DECL_DLLPRIVATE_LINK( CallbackHdl_Impl, SfxMacroConfig*);
- DECL_DLLPRIVATE_LINK( EventHdl_Impl, SfxMacroInfo*);
-//#endif
-};
-
-#endif
diff --git a/sfx2/inc/sfx2/objsh.hxx b/sfx2/inc/sfx2/objsh.hxx
index 4a0dbfaf12f9..05ae3365d6b1 100644
--- a/sfx2/inc/sfx2/objsh.hxx
+++ b/sfx2/inc/sfx2/objsh.hxx
@@ -73,7 +73,6 @@ class BasicManager;
class SfxMedium;
class SfxObjectFactory;
class SfxDocumentInfoDialog;
-class SfxEventConfigItem_Impl;
class SfxStyleSheetBasePool;
class INote;
class SfxStyleSheetPool;
@@ -190,12 +189,6 @@ in fremde Objekte integriert werden k"onnen.
----------------------------------------------------------------------*/
-enum SfxTitleQuery
-{
- SFX_TITLE_QUERY_SAVE_NAME_PROPOSAL
-};
-
-
class SfxToolBoxConfig;
struct TransferableObjectDescriptor;
@@ -363,36 +356,11 @@ public:
sal_uInt16 GetScriptingSignatureState();
void SignScriptingContent();
- virtual String QueryTitle( SfxTitleQuery ) const;
virtual SfxDocumentInfoDialog* CreateDocumentInfoDialog(
Window *pParent, const SfxItemSet& );
- sal_Bool IsBasic( const String & rCode, SbxObject * pVCtrl = NULL );
ErrCode CallBasic( const String& rMacro, const String& rBasicName,
- SbxObject* pVCtrl, SbxArray* pArgs = 0, SbxValue* pRet = 0 );
- ErrCode Call( const String & rCode, sal_Bool bIsBasicReturn, SbxObject * pVCtrl = NULL );
-
- ErrCode CallScript(
- const String & rScriptType, const String & rCode, const void* pArgs = NULL, void* pRet = NULL );
-
- /** calls a StarBasic script without magic
- @param _rMacroName
- specifies the name of the method to execute
- @param _rLocation
- specifies the location of the script to execute. Allowed values are "application" and "document".
- @param _pArguments
- This is a pointer to a Sequence< Any >. All elements of the Sequence are wrapped into Basic objects
- and passed as arguments to the method specified by _rMacroName
- @param _pReturn
- If not , the Any pointed to by this argument contains the return value of the (synchronous) call
- to the StarBasic macro
- */
- ErrCode CallStarBasicScript(
- const String& _rMacroName,
- const String& _rLocation,
- const void* _pArguments = NULL,
- void* _pReturn = NULL
- );
+ SbxArray* pArgs = 0, SbxValue* pRet = 0 );
ErrCode CallXScript(
const String& rScriptURL,
@@ -787,7 +755,6 @@ public:
SAL_DLLPRIVATE SfxObjectShell* GetParentShellByModel_Impl();
// configuration items
- SAL_DLLPRIVATE SfxEventConfigItem_Impl* GetEventConfig_Impl( sal_Bool bForce=sal_False );
SAL_DLLPRIVATE SfxToolBoxConfig* GetToolBoxConfig_Impl();
SAL_DLLPRIVATE sal_uInt16 ImplGetSignatureState( sal_Bool bScriptingContent = sal_False );
diff --git a/sfx2/inc/sfx2/sfx.hrc b/sfx2/inc/sfx2/sfx.hrc
old mode 100644
new mode 100755
index 44c00cc93018..dfc2dec2f5ff
--- a/sfx2/inc/sfx2/sfx.hrc
+++ b/sfx2/inc/sfx2/sfx.hrc
@@ -222,7 +222,6 @@
#define RID_BUILDVERSION (RID_SFX_START+5)
#define RID_DOCALREADYLOADED_DLG (RID_SFX_START+1)
-#define RID_CANTLOADDOC_DLG (RID_SFX_START+2)
#define TP_DOCINFODESC (RID_SFX_START+3)
#define TP_DOCINFODOC (RID_SFX_START+4)
@@ -313,16 +312,8 @@
// ------------------------------------------------------------------------
-#define BMP_COLS 21
-#define BMP_SFX_SMALL 1
-#define BMP_SFX_LARGE 2
-
#define RID_SFX_GLOBALS 1000
-#define BMP_SFX_COLOR (RID_SFX_GLOBALS + 1)
-#define BMP_SFX_MONO (RID_SFX_GLOBALS + 2)
-#define SFX_MSG_RES (RID_SFX_GLOBALS + 3)
-
// =========================================================================
#define RID_OPTIONS_START (SID_LIB_START + 2000)
@@ -330,24 +321,6 @@
// ResId's ------------------------------------------------------------------
-#define RID_SFXLANG_BEGIN (RID_OPTIONS_START + 0)
-#define RID_SFXLANG_NO (RID_SFXLANG_BEGIN + 0)
-#define RID_SFXLANG_GERMAN (RID_SFXLANG_BEGIN + 1)
-#define RID_SFXLANG_SWISS_GERMAN (RID_SFXLANG_BEGIN + 2)
-#define RID_SFXLANG_US_ENGLISH (RID_SFXLANG_BEGIN + 3)
-#define RID_SFXLANG_UK_ENGLISH (RID_SFXLANG_BEGIN + 4)
-#define RID_SFXLANG_FRENCH (RID_SFXLANG_BEGIN + 5)
-#define RID_SFXLANG_ITALIAN (RID_SFXLANG_BEGIN + 6)
-#define RID_SFXLANG_CAST_SPANISH (RID_SFXLANG_BEGIN + 7)
-#define RID_SFXLANG_PORTUGUESE (RID_SFXLANG_BEGIN + 8)
-#define RID_SFXLANG_DANISH (RID_SFXLANG_BEGIN + 9)
-#define RID_SFXLANG_DUTCH (RID_SFXLANG_BEGIN + 10)
-#define RID_SFXLANG_SWEDISH (RID_SFXLANG_BEGIN + 11)
-#define RID_SFXLANG_FINNISH (RID_SFXLANG_BEGIN + 12)
-#define RID_SFXLANG_NORWEG_BOKMAL (RID_SFXLANG_BEGIN + 13)
-#define RID_SFXLANG_NORWEG_NYNORSK (RID_SFXLANG_BEGIN + 14)
-#define RID_SFXLANG_ALL (RID_SFXLANG_BEGIN + 15)
-
#define RID_SFXPAGE_SAVE (RID_OPTIONS_START + 0)
#define RID_SFXPAGE_GENERAL (RID_OPTIONS_START + 1)
#define RID_SFXPAGE_SPELL (RID_OPTIONS_START + 2)
@@ -356,10 +329,7 @@
#define RID_SFXQB_DELDICT (RID_OPTIONS_START + 5)
#define RID_SFXPAGE_PATH (RID_OPTIONS_START + 6)
#define RID_SFXPAGE_LINGU (RID_OPTIONS_START + 7)
-#define RID_SFXPAGE_INET (RID_OPTIONS_START + 8)
-#define RID_SFXQB_DEL_IGNORELIST (RID_OPTIONS_START + 9)
#define RID_SFXQB_SET_LANGUAGE (RID_OPTIONS_START + 10)
-#define RID_ITEMLIST_LINGU (RID_OPTIONS_START + 11)
#define RID_SFXPAGE_PRINTOPTIONS (RID_OPTIONS_START + 12)
#define RID_STR_NEW_TASK (RID_SFX_DOC_START+ 76)
diff --git a/sfx2/inc/sfx2/sfxbasemodel.hxx b/sfx2/inc/sfx2/sfxbasemodel.hxx
index d0978ebc1e5f..017486d251de 100644
--- a/sfx2/inc/sfx2/sfxbasemodel.hxx
+++ b/sfx2/inc/sfx2/sfxbasemodel.hxx
@@ -44,6 +44,7 @@
#include
#include
#include
+#include
#include
@@ -97,9 +98,9 @@
#include
//________________________________________________________________________________________________________
-#if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_31)
-#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_31
-#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 31
+#if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_32)
+#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_32
+#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 32
#include
#endif
@@ -238,11 +239,12 @@ namespace sfx { namespace intern {
SfxListener
*/
-typedef ::comphelper::WeakImplHelper31 < XCHILD
+typedef ::comphelper::WeakImplHelper32 < XCHILD
, XDOCUMENTINFOSUPPLIER
, ::com::sun::star::document::XDocumentPropertiesSupplier
, ::com::sun::star::rdf::XDocumentMetadataAccess
, ::com::sun::star::document::XDocumentRecovery
+ , ::com::sun::star::document::XUndoManagerSupplier
, XEVENTBROADCASTER
, XDOCUMENTEVENTBROADCASTER
, XEVENTLISTENER
@@ -1320,6 +1322,9 @@ public:
::com::sun::star::io::IOException,
::com::sun::star::lang::WrappedTargetException );
+ // css.document.XUndoManagerSupplier
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoManager > SAL_CALL getUndoManager( ) throw (::com::sun::star::uno::RuntimeException);
+
//____________________________________________________________________________________________________
// ::com::sun::star::rdf::XNode:
@@ -1484,22 +1489,11 @@ public:
SfxObjectShell* GetObjectShell() const ;
SAL_DLLPRIVATE SfxObjectShell* impl_getObjectShell() const ;
- /**___________________________________________________________________________________________________
- @short -
- @descr -
-
- @seealso -
-
- @param -
-
- @return -
-
- @onerror -
- */
-
SAL_DLLPRIVATE sal_Bool impl_isDisposed() const ;
sal_Bool IsInitialized() const;
+ sal_Bool IsDisposed() const { return impl_isDisposed(); }
void MethodEntryCheck( const bool i_mustBeInitialized ) const;
+ ::osl::Mutex& getMutex() const { return m_aMutex; }
::com::sun::star::uno::Reference < ::com::sun::star::container::XIndexAccess > SAL_CALL getViewData() throw (::com::sun::star::uno::RuntimeException);
void SAL_CALL setViewData( const ::com::sun::star::uno::Reference < ::com::sun::star::container::XIndexAccess >& aData ) throw (::com::sun::star::uno::RuntimeException);
@@ -1575,6 +1569,44 @@ private:
} ; // class SfxBaseModel
+/** base class for sub components of an SfxBaseModel, which share their ref count and lifetime with the SfxBaseModel
+*/
+class SFX2_DLLPUBLIC SfxModelSubComponent
+{
+public:
+ /** checks whether the instance is alive, i.e. properly initialized, and not yet disposed
+ */
+ void MethodEntryCheck()
+ {
+ m_rModel.MethodEntryCheck( true );
+ }
+
+ // called when the SfxBaseModel which the component is superordinate of is being disposed
+ virtual void disposing();
+
+protected:
+ SfxModelSubComponent( SfxBaseModel& i_model )
+ :m_rModel( i_model )
+ {
+ }
+ virtual ~SfxModelSubComponent();
+
+ // helpers for implementing XInterface - delegates ref counting to the SfxBaseModel
+ void acquire() { m_rModel.acquire(); }
+ void release() { m_rModel.release(); }
+
+ bool isDisposed() const { return m_rModel.IsDisposed(); }
+
+protected:
+ const SfxBaseModel& getBaseModel() const { return m_rModel; }
+ SfxBaseModel& getBaseModel() { return m_rModel; }
+
+ ::osl::Mutex& getMutex() { return m_rModel.getMutex(); }
+
+private:
+ SfxBaseModel& m_rModel;
+};
+
class SFX2_DLLPUBLIC SfxModelGuard
{
public:
@@ -1591,17 +1623,27 @@ public:
{
i_rModel.MethodEntryCheck( i_eState != E_INITIALIZING );
}
+ SfxModelGuard( SfxModelSubComponent& i_rSubComponent )
+ :m_aGuard( Application::GetSolarMutex() )
+ {
+ i_rSubComponent.MethodEntryCheck();
+ }
~SfxModelGuard()
{
}
+ void reset()
+ {
+ m_aGuard.reset();
+ }
+
void clear()
{
m_aGuard.clear();
}
private:
- ::vos::OClearableGuard m_aGuard;
+ ::osl::ResettableGuard< ::vos::IMutex > m_aGuard;
};
#undef css
diff --git a/sfx2/inc/sfx2/sfxcommands.h b/sfx2/inc/sfx2/sfxcommands.h
old mode 100644
new mode 100755
index bdf27baac7b3..035f2f187bb8
--- a/sfx2/inc/sfx2/sfxcommands.h
+++ b/sfx2/inc/sfx2/sfxcommands.h
@@ -1,345 +1,342 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- *
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-#ifndef SFX2_SFXCOMMANDS_HRC
-#define SFX2_SFXCOMMANDS_HRC
-
-#define CMD_SID_VIEWSHELL0 ".uno:_SwitchViewShell0"
-#define CMD_SID_VIEWSHELL1 ".uno:_SwitchViewShell1"
-#define CMD_SID_VIEWSHELL2 ".uno:_SwitchViewShell2"
-#define CMD_SID_VIEWSHELL3 ".uno:_SwitchViewShell3"
-#define CMD_SID_VIEWSHELL4 ".uno:_SwitchViewShell4"
-#define CMD_SID_ABOUT ".uno:About"
-#define CMD_SID_ACTIVATE ".uno:Activate"
-#define CMD_SID_HELPBALLOONS ".uno:ActiveHelp"
-#define CMD_SID_STYLE_FAMILY ".uno:ActualStyleFamily"
-#define CMD_SID_NEWDOC ".uno:NewDoc"
-#define CMD_SID_CREATELINK ".uno:AddBookmark"
-#define CMD_SID_NEWDOCDIRECT ".uno:AddDirect"
-#define CMD_SID_TEMPLATE_ADDRESSBOKSOURCE ".uno:AddressBookSource"
-#define CMD_SID_BASICIDE_ADDWATCH ".uno:AddWatch"
-#define CMD_SID_DOCINFO_AUTHOR ".uno:Author"
-#define CMD_SID_AUTOHIDE ".uno:AutoHide"
-#define CMD_SID_AUTOPILOTMENU ".uno:AutoPilotMenu"
-#define CMD_SID_GALLERY_BG_BRUSH ".uno:BackgroundImage"
-#define CMD_SID_BACKSPACE ".uno:Backspace"
-#define CMD_SID_BASICBREAK ".uno:BasicBreak"
-#define CMD_SID_BASICIDE_APPEAR ".uno:BasicIDEAppear"
-#define CMD_SID_BASICSTEPINTO ".uno:BasicStepInto"
-#define CMD_SID_BASICSTEPOUT ".uno:BasicStepOut"
-#define CMD_SID_BASICSTEPOVER ".uno:BasicStepOver"
-#define CMD_SID_BASICSTOP ".uno:BasicStop"
-#define CMD_SID_BROWSER ".uno:Beamer"
-#define CMD_SID_BASICIDE_BRKPNTSCHANGED ".uno:BreakPointsChanged"
-#define CMD_SID_BROWSE_BACKWARD ".uno:BrowseBackward"
-#define CMD_SID_BROWSE_FORWARD ".uno:BrowseForward"
-#define CMD_SID_BROWSER_MODE ".uno:BrowseView"
-#define CMD_SID_BUILD_VERSION ".uno:BuildVersion"
-#define CMD_SID_CAPTION ".uno:Caption"
-#define CMD_SID_STYLE_FAMILY1 ".uno:CharStyle"
-#define CMD_SID_CHECK_KEY ".uno:CheckKey"
-#define CMD_SID_BASICIDE_CHOOSEMACRO ".uno:ChooseMacro"
-#define CMD_SID_CLEARHISTORY ".uno:ClearHistory"
-#define CMD_SID_CLOSEWINS ".uno:CloseWins"
-#define CMD_SID_CLOSEDOCS ".uno:CloseDocs"
-#define CMD_SID_CLOSEDOC ".uno:CloseDoc"
-#define CMD_SID_CLOSEWIN ".uno:CloseWin"
-#define CMD_SID_CLOSING ".uno:Closing"
-#define CMD_SID_DOCINFO_COMMENTS ".uno:Comments"
-#define CMD_SID_OFFICE_COMMERCIAL_USE ".uno:CommercialUse"
-#define CMD_SID_DOCUMENT_COMPARE ".uno:CompareDocuments"
-#define CMD_SID_BASICCOMPILE ".uno:CompileBasic"
-#define CMD_SID_CONFIG ".uno:ConfigureDialog"
-#define CMD_SID_CONTEXT ".uno:Context"
-#define CMD_SID_COPY ".uno:Copy"
-#define CMD_SID_CRASH ".uno:Crash"
-#define CMD_SID_BASICIDE_CREATEMACRO ".uno:CreateMacro"
-#define CMD_SID_CURRENT_URL ".uno:CurrentURL"
-#define CMD_SID_CURSORENDOFSCREEN ".uno:CursorEndOfScreen"
-#define CMD_SID_CURSORTOPOFSCREEN ".uno:CursorTopOfScreen"
-#define CMD_SID_OFFICE_CUSTOMERNUMBER ".uno:CustomerNumber"
-#define CMD_SID_CUT ".uno:Cut"
-#define CMD_SID_DEFAULTFILEPATH ".uno:DefaultFilePath"
-#define CMD_SID_DEFAULTFILENAME ".uno:DefaultFileName"
-#define CMD_SID_DELETE ".uno:Delete"
-#define CMD_SID_BASICIDE_DELETECURRENT ".uno:DeleteCurrent"
-#define CMD_SID_STYLE_DELETE ".uno:DeleteStyle"
-#define CMD_SID_STYLE_DESIGNER ".uno:DesignerDialog"
-#define CMD_SID_STYLE_DRAGHIERARCHIE ".uno:DragHierarchy"
-#define CMD_SID_EDITDOC ".uno:EditDoc"
-#define CMD_SID_BASICIDE_EDITMACRO ".uno:EditMacro"
-#define CMD_SID_STYLE_EDIT ".uno:EditStyle"
-#define CMD_FID_SEARCH_NOW ".uno:ExecuteSearch"
-#define CMD_SID_EXTENDEDHELP ".uno:ExtendedHelp"
-#define CMD_SID_FILE_NAME ".uno:FileName"
-#define CMD_SID_FOCUSURLBOX ".uno:FocusUrlBox"
-#define CMD_SID_FORMATMENU ".uno:FormatMenu"
-#define CMD_SID_STYLE_FAMILY3 ".uno:FrameStyle"
-#define CMD_SID_FRAMETITLE ".uno:FrameTitle"
-#define CMD_SID_PROGFILENAME ".uno:FullName"
-#define CMD_SID_DOCFULLNAME ".uno:FullName"
-#define CMD_SID_WIN_FULLSCREEN ".uno:FullScreen"
-#define CMD_SID_FILLFRAME ".uno:GetFrameWindow"
-#define CMD_SID_CURSORDOWN ".uno:GoDown"
-#define CMD_SID_CURSORPAGEDOWN ".uno:GoDownBlock"
-#define CMD_SID_CURSORPAGEDOWN_SEL ".uno:GoDownBlockSel"
-#define CMD_SID_CURSORDOWN_SEL ".uno:GoDownSel"
-#define CMD_SID_CURSORLEFT ".uno:GoLeft"
-#define CMD_SID_CURSORPAGELEFT ".uno:GoLeftBlock"
-#define CMD_SID_CURSORPAGELEFT_SEL ".uno:GoLeftBlockSel"
-#define CMD_SID_CURSORLEFT_SEL ".uno:GoLeftSel"
-#define CMD_SID_CURSORRIGHT ".uno:GoRight"
-#define CMD_SID_CURSORRIGHT_SEL ".uno:GoRightSel"
-#define CMD_SID_CURSORENDOFFILE ".uno:GoToEndOfData"
-#define CMD_SID_CURSORENDOFFILE_SEL ".uno:GoToEndOfDataSel"
-#define CMD_SID_CURSOREND ".uno:GoToEndOfRow"
-#define CMD_SID_CURSOREND_SEL ".uno:GoToEndOfRowSel"
-#define CMD_SID_CURSORTOPOFFILE ".uno:GoToStart"
-#define CMD_SID_CURSORHOME ".uno:GoToStartOfRow"
-#define CMD_SID_CURSORHOME_SEL ".uno:GoToStartOfRowSel"
-#define CMD_SID_CURSORTOPOFFILE_SEL ".uno:GoToStartSel"
-#define CMD_SID_CURSORUP ".uno:GoUp"
-#define CMD_SID_CURSORPAGEUP ".uno:GoUpBlock"
-#define CMD_SID_CURSORPAGEUP_SEL ".uno:GoUpBlockSel"
-#define CMD_SID_CURSORUP_SEL ".uno:GoUpSel"
-#define CMD_SID_HELP_ANNOTATE ".uno:HelpAnnotate"
-#define CMD_SID_HELP_BOOKMARK ".uno:HelpBookmark"
-#define CMD_SID_HELP_HELPFILEBOX ".uno:HelpChooseFile"
-#define CMD_SID_HELP_DOWNLOAD ".uno:HelpDownload"
-#define CMD_SID_HELP_PI ".uno:HelperDialog"
-#define CMD_SID_HELPINDEX ".uno:HelpIndex"
-#define CMD_SID_HELPMENU ".uno:HelpMenu"
-#define CMD_SID_HELPONHELP ".uno:HelpOnHelp"
-#define CMD_SID_HELP_SEARCH ".uno:HelpSearch"
-#define CMD_SID_HELPTIPS ".uno:HelpTip"
-#define CMD_SID_HELP_ZOOMIN ".uno:HelpZoomIn"
-#define CMD_SID_HELP_ZOOMOUT ".uno:HelpZoomOut"
-#define CMD_SID_BASICIDE_HIDECURPAGE ".uno:HideCurPage"
-#define CMD_SID_HYPERLINK_DIALOG ".uno:HyperlinkDialog"
-#define CMD_SID_INSERTDOC ".uno:InsertDoc"
-#define CMD_SID_HYPERLINK_INSERT ".uno:InsertHyperlink"
-#define CMD_SID_INSERT_FLOATINGFRAME ".uno:InsertObjectFloatingFrame"
-#define CMD_SID_INTERNET_ONLINE ".uno:InternetOnline"
-#define CMD_SID_INTERNET_SEARCH ".uno:InternetSearch"
-#define CMD_SID_DOC_LOADING ".uno:IsLoading"
-#define CMD_SID_IMG_LOADING ".uno:IsLoadingImages"
-#define CMD_SID_PRINTOUT ".uno:IsPrinting"
-#define CMD_SID_JUMPTOMARK ".uno:JumpToMark"
-#define CMD_SID_DOCINFO_KEYWORDS ".uno:Keywords"
-#define CMD_SID_BASICIDE_LIBLOADED ".uno:LibLoaded"
-#define CMD_SID_BASICIDE_LIBREMOVED ".uno:LibRemoved"
-#define CMD_SID_BASICIDE_LIBSELECTED ".uno:LibSelect"
-#define CMD_SID_BASICIDE_LIBSELECTOR ".uno:LibSelector"
-#define CMD_SID_OFFICE_PLK ".uno:LicenceKey"
-#define CMD_SID_CONFIGACCEL ".uno:LoadAccel"
-#define CMD_SID_BASICLOAD ".uno:LoadBasic"
-#define CMD_SID_LOADCONFIG ".uno:LoadConfiguration"
-#define CMD_SID_CONFIGEVENT ".uno:LoadEvents"
-#define CMD_SID_CONFIGMENU ".uno:LoadMenu"
-#define CMD_SID_CONFIGSTATUSBAR ".uno:LoadStatusBar"
-#define CMD_SID_TOOLBOXOPTIONS ".uno:LoadToolBox"
-#define CMD_SID_LOGOUT ".uno:Logout"
-#define CMD_SID_SCRIPTORGANIZER ".uno:ScriptOrganizer"
-#define CMD_SID_MACROORGANIZER ".uno:MacroOrganizer"
-#define CMD_SID_RUNMACRO ".uno:RunMacro"
-#define CMD_SID_BASICCHOOSER ".uno:MacroDialog"
-#define CMD_SID_MAIL_NOTIFY ".uno:MailReceipt"
-#define CMD_SID_MAIL_CHILDWIN ".uno:MailWindow"
-#define CMD_SID_BASICIDE_MATCHGROUP ".uno:MatchGroup"
-#define CMD_SID_TOGGLE_MENUBAR ".uno:MenuBarVisible"
-#define CMD_SID_DOCUMENT_MERGE ".uno:MergeDocuments"
-#define CMD_SID_ATTR_METRIC ".uno:MetricUnit"
-#define CMD_SID_MODIFIED ".uno:Modified"
-#define CMD_SID_DOC_MODIFIED ".uno:ModifiedStatus"
-#define CMD_SID_BASICIDE_MODULEDLG ".uno:ModuleDialog"
-#define CMD_SID_BASICIDE_NAMECHANGEDONTAB ".uno:NameChangedOnTab"
-#define CMD_SID_NAVIGATOR ".uno:Navigator"
-#define CMD_SID_RESTORE_EDITING_VIEW ".uno:RestoreEditingView"
-#define CMD_SID_BASICIDE_NEWDIALOG ".uno:NewDialog"
-#define CMD_SID_BASICIDE_NEWMODULE ".uno:NewModule"
-#define CMD_SID_CREATE_BASICOBJECT ".uno:NewObject"
-#define CMD_SID_STYLE_NEW ".uno:NewStyle"
-#define CMD_SID_NEWWINDOW ".uno:NewWindow"
-#define CMD_SID_BASICIDE_OBJCAT ".uno:ObjectCatalog"
-#define CMD_SID_OBJECT ".uno:ObjectMenue"
-#define CMD_SID_OLD_PALK ".uno:OldPALK"
-#define CMD_SID_OPENDOC ".uno:Open"
-#define CMD_SID_WEBHTML ".uno:WebHtml"
-#define CMD_SID_OPENHYPERLINK ".uno:OpenHyperlink"
-#define CMD_SID_DOCINFO_TITLE ".uno:DocInfoTitle"
-#define CMD_SID_OPENTEMPLATE ".uno:OpenTemplate"
-#define CMD_SID_OPENURL ".uno:OpenUrl"
-#define CMD_SID_OPTIONS ".uno:Options"
-#define CMD_SID_ORGANIZER ".uno:Organizer"
-#define CMD_SID_STYLE_FAMILY4 ".uno:PageStyle"
-#define CMD_SID_STYLE_FAMILY2 ".uno:ParaStyle"
-#define CMD_SID_PARTWIN ".uno:PartWindow"
-#define CMD_SID_PASTE ".uno:Paste"
-#define CMD_SID_CLIPBOARD_FORMAT_ITEMS ".uno:ClipboardFormatItems"
-#define CMD_SID_PASTE_SPECIAL ".uno:PasteSpecial"
-#define CMD_SID_DOCPATH ".uno:DocPath"
-#define CMD_SID_PICKLIST ".uno:PickList"
-#define CMD_SID_PLAYMACRO ".uno:PlayMacro"
-#define CMD_SID_PLUGINS_ACTIVE ".uno:PlugInsActive"
-#define CMD_SID_PRINTDOC ".uno:Print"
-#define CMD_SID_PRINTDOCDIRECT ".uno:PrintDefault"
-#define CMD_SID_PRINTER_NAME ".uno:Printer"
-#define CMD_SID_SETUPPRINTER ".uno:PrinterSetup"
-#define CMD_SID_PRINTPREVIEW ".uno:PrintPreview"
-#define CMD_SID_OFFICE_PRIVATE_USE ".uno:PrivateUse"
-#define CMD_SID_DOCINFO ".uno:SetDocumentProperties"
-#define CMD_SID_QUITAPP ".uno:Quit"
-#define CMD_SID_DOC_READONLY ".uno:ReadOnly"
-#define CMD_SID_RECORDMACRO ".uno:MacroRecorder"
-#define CMD_SID_STOP_RECORDING ".uno:StopRecording"
-#define CMD_SID_RECORDING_FLOATWINDOW ".uno:MacroRecordingFloat"
-#define CMD_SID_REDO ".uno:Redo"
-#define CMD_SID_DELETE_BASICOBJECT ".uno:ReleaseObject"
-#define CMD_SID_RELOAD ".uno:Reload"
-#define CMD_SID_BASICIDE_REMOVEWATCH ".uno:RemoveWatch"
-#define CMD_SID_BASICIDE_RENAMECURRENT ".uno:RenameCurrent"
-#define CMD_SID_REPAINT ".uno:Repaint"
-#define CMD_SID_REPEAT ".uno:RepeatAction"
-#define CMD_SID_RUBY_DIALOG ".uno:RubyDialog"
-#define CMD_SID_BASICRUN ".uno:RunBasic"
-#define CMD_SID_STARTSW ".uno:RunStarWriter"
-#define CMD_SID_SAVEDOC ".uno:Save"
-#define CMD_SID_SAVEDOCS ".uno:SaveAll"
-#define CMD_SID_SAVEASDOC ".uno:SaveAs"
-#define CMD_SID_DOCTEMPLATE ".uno:SaveAsTemplate"
-#define CMD_SID_BASICSAVEAS ".uno:SaveBasicAs"
-#define CMD_SID_EXPORT_DIALOG ".uno:ExportDialog"
-#define CMD_SID_IMPORT_DIALOG ".uno:ImportDialog"
-#define CMD_SID_SAVECONFIG ".uno:SaveConfiguration"
-#define CMD_SID_DOC_SAVED ".uno:Saved"
-#define CMD_SID_BASICIDE_SBXDELETED ".uno:SbxDeleted"
-#define CMD_SID_BASICIDE_SBXINSERTED ".uno:SbxInserted"
-#define CMD_SID_BASICIDE_SBXRENAMED ".uno:SbxRenamed"
-#define CMD_SID_MAIL_SCROLLBODY_PAGEDOWN ".uno:ScrollBodyPageDown"
-#define CMD_SID_SEARCH_DLG ".uno:SearchDialog"
-#define CMD_SID_SEARCH_OPTIONS ".uno:SearchOptions"
-#define CMD_SID_SEARCH_ITEM ".uno:SearchProperties"
-#define CMD_SID_SELECTALL ".uno:SelectAll"
-#define CMD_FN_FAX ".uno:SendFax"
-#define CMD_SID_MAIL_SENDDOC ".uno:SendMail"
-#define CMD_SID_MAIL_SENDDOCASPDF ".uno:SendMailDocAsPDF"
-#define CMD_SID_MAIL_SENDDOCASFORMAT ".uno:SendMailDocAsFormat"
-#define CMD_SID_MAIL_SENDDOCASMS ".uno:SendMailDocAsMS"
-#define CMD_SID_MAIL_SENDDOCASOOO ".uno:SendMailDocAsOOo"
-#define CMD_SID_SETOPTIONS ".uno:SetOptions"
-#define CMD_SID_OFFICE_PALK ".uno:SetPALK"
-#define CMD_SID_SHOW_BROWSER ".uno:ShowBrowser"
-#define CMD_SID_SHOWPOPUPS ".uno:ShowPopups"
-#define CMD_SID_BASICIDE_SHOWSBX ".uno:ShowSbx"
-#define CMD_SID_SOURCEVIEW ".uno:SourceView"
-#define CMD_SID_ONLINE_REGISTRATION_DLG ".uno:StartRegistrationDialog"
-#define CMD_SID_STATUSBARTEXT ".uno:StatusBar"
-#define CMD_SID_TOGGLESTATUSBAR ".uno:StatusBarVisible"
-#define CMD_SID_BASICIDE_STAT_DATE ".uno:StatusGetDate"
-#define CMD_SID_BASICIDE_STAT_POS ".uno:StatusGetPosition"
-#define CMD_SID_BASICIDE_STAT_TITLE ".uno:StatusGetTitle"
-#define CMD_SID_BASICIDE_STOREALLMODULESOURCES ".uno:StoreAllModuleSources"
-#define CMD_SID_BASICIDE_STOREMODULESOURCE ".uno:StoreModuleSource"
-#define CMD_SID_STYLE_APPLY ".uno:StyleApplyState"
-#define CMD_SID_STYLE_CATALOG ".uno:StyleCatalog"
-#define CMD_SID_STYLE_NEW_BY_EXAMPLE ".uno:StyleNewByExample"
-#define CMD_SID_STYLE_UPDATE_BY_EXAMPLE ".uno:StyleUpdateByExample"
-#define CMD_SID_STYLE_WATERCAN ".uno:StyleWatercanMode"
-#define CMD_SID_VIEWSHELL ".uno:SwitchViewShell"
-#define CMD_SID_TASKBAR ".uno:TaskBarVisible"
-#define CMD_SID_STYLE_FAMILY5 ".uno:ListStyle"
-#define CMD_SID_TIPWINDOW ".uno:TipsDialog"
-#define CMD_SID_DOCTITLE ".uno:Title"
-#define CMD_SID_TITLE ".uno:Title"
-#define CMD_SID_BASICIDE_TOGGLEBRKPNT ".uno:ToggleBreakPoint"
-#define CMD_SID_BASICIDE_SHOWWINDOW ".uno:BasicIDEShowWindow"
-#define CMD_SID_EDITMACRO ".uno:ToolsMacroEdit"
-#define CMD_SID_UNDO ".uno:Undo"
-#define CMD_SID_FORMATPAINTBRUSH ".uno:FormatPaintbrush"
-#define CMD_SID_ATTR_UNDO_COUNT ".uno:UndoCount"
-#define CMD_SID_BASICIDE_UPDATEALLMODULESOURCES ".uno:UpdateAllModuleSources"
-#define CMD_SID_BASICIDE_UPDATEMODULESOURCE ".uno:UpdateModuleSource"
-#define CMD_SID_BASICIDE_MANAGEBRKPNTS ".uno:ManageBreakPoints"
-#define CMD_SID_BASICIDE_TOGGLEBRKPNTENABLED ".uno:ToggleBreakPointEnabled"
-#define CMD_SID_UPDATE_VERSION ".uno:UpdateVersion"
-#define CMD_SID_VERSION ".uno:VersionDialog"
-#define CMD_SID_SIGNATURE ".uno:Signature"
-#define CMD_SID_MACRO_SIGNATURE ".uno:MacroSignature"
-#define CMD_SID_VERSION_VISIBLE ".uno:VersionVisible"
-#define CMD_SID_VIEW_DATA_SOURCE_BROWSER ".uno:ViewDataSourceBrowser"
-#define CMD_SID_WIN_VISIBLE ".uno:WinVisible"
-#define CMD_SID_MDIWINDOWLIST ".uno:WindowList"
-#define CMD_SID_ZOOM_IN ".uno:ZoomMinus"
-#define CMD_SID_ZOOM ".uno:Zooming"
-#define CMD_SID_ZOOM_NEXT ".uno:ZoomNext"
-#define CMD_SID_ZOOM_OUT ".uno:ZoomPlus"
-#define CMD_SID_ZOOM_PREV ".uno:ZoomPrevious"
-#define CMD_SID_ZOOM_TOOLBOX ".uno:ZoomToolBox"
-#define CMD_SID_EXPORTDOC ".uno:ExportTo"
-#define CMD_SID_EXPORTDOCASPDF ".uno:ExportToPDF"
-#define CMD_SID_DIRECTEXPORTDOCASPDF ".uno:ExportDirectToPDF"
-#define CMD_SID_IMAGE_ORIENTATION ".uno:ImageOrientation"
-#define CMD_SID_SAVE_VERSION_ON_CLOSE ".uno:SaveVersionOnClose"
-#define CMD_SID_ADDONS ".uno:Addons"
-#define CMD_SID_SHOW_IME_STATUS_WINDOW ".uno:ShowImeStatusWindow"
-#define CMD_SID_UPDATE_CONFIG ".uno:UpdateConfiguration"
-#define CMD_SID_HELP_SUPPORTPAGE ".uno:HelpSupport"
-#define CMD_SID_HELP_TUTORIALS ".uno:HelpTutorials"
-#define CMD_SID_ADDONHELP ".uno:AddonHelp"
-#define CMD_SID_FORMATMENUSTATE ".uno:FormatMenuState"
-#define CMD_SID_INET_DLG ".uno:InternetDialog"
-#define CMD_SID_ONLINE_REGISTRATION ".uno:OnlineRegistrationDlg"
-#define CMD_SID_OFFICE_CHECK_PLZ ".uno:CheckPLZ"
-#define CMD_SID_ADDRESS_DATA_SOURCE ".uno:AutoPilotAddressDataSource"
-#define CMD_FN_BUSINESS_CARD ".uno:InsertBusinessCard"
-#define CMD_FN_LABEL ".uno:InsertLabels"
-#define CMD_FN_XFORMS_INIT ".uno:NewXForms"
-#define CMD_SID_SD_AUTOPILOT ".uno:AutoPilotPresentations"
-#define CMD_SID_NEWSD ".uno:NewPresentation"
-#define CMD_SID_COMP_BIBLIOGRAPHY ".uno:BibliographyComponent"
-#define CMD_SID_MINIMIZED ".uno:Minimized"
-#define CMD_SID_AUTO_CORRECT_DLG ".uno:AutoCorrectDlg"
-#define CMD_SID_OPTIONS_TREEDIALOG ".uno:OptionsTreeDialog"
-#define CMD_SID_TERMINATE_INPLACEACTIVATION ".uno:TerminateInplaceActivation"
-#define CMD_SID_RECENTFILELIST ".uno:RecentFileList"
-#define CMD_SID_AVAILABLE_TOOLBARS ".uno:AvailableToolbars"
-#define CMD_SID_AVMEDIA_PLAYER ".uno:AVMediaPlayer"
-#define CMD_SID_INSERT_AVMEDIA ".uno:InsertAVMedia"
-#define CMD_SID_MORE_DICTIONARIES ".uno:MoreDictionaries"
-#define CMD_SID_ACTIVATE_STYLE_APPLY ".uno:ActivateStyleApply"
-#define CMD_SID_DOCKWIN_0 ".uno:DockingWindow0"
-#define CMD_SID_DOCKWIN_1 ".uno:DockingWindow1"
-#define CMD_SID_DOCKWIN_2 ".uno:DockingWindow2"
-#define CMD_SID_DOCKWIN_3 ".uno:DockingWindow3"
-#define CMD_SID_DOCKWIN_4 ".uno:DockingWindow4"
-#define CMD_SID_DOCKWIN_5 ".uno:DockingWindow5"
-#define CMD_SID_DOCKWIN_6 ".uno:DockingWindow6"
-#define CMD_SID_DOCKWIN_7 ".uno:DockingWindow7"
-#define CMD_SID_DOCKWIN_8 ".uno:DockingWindow8"
-#define CMD_SID_DOCKWIN_9 ".uno:DockingWindow9"
-#define CMD_SID_PASTE_UNFORMATTED ".uno:PasteUnformatted"
-
-#endif
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef SFX2_SFXCOMMANDS_HRC
+#define SFX2_SFXCOMMANDS_HRC
+
+#define CMD_SID_VIEWSHELL0 ".uno:_SwitchViewShell0"
+#define CMD_SID_VIEWSHELL1 ".uno:_SwitchViewShell1"
+#define CMD_SID_VIEWSHELL2 ".uno:_SwitchViewShell2"
+#define CMD_SID_VIEWSHELL3 ".uno:_SwitchViewShell3"
+#define CMD_SID_VIEWSHELL4 ".uno:_SwitchViewShell4"
+#define CMD_SID_ABOUT ".uno:About"
+#define CMD_SID_ACTIVATE ".uno:Activate"
+#define CMD_SID_HELPBALLOONS ".uno:ActiveHelp"
+#define CMD_SID_STYLE_FAMILY ".uno:ActualStyleFamily"
+#define CMD_SID_NEWDOC ".uno:NewDoc"
+#define CMD_SID_CREATELINK ".uno:AddBookmark"
+#define CMD_SID_NEWDOCDIRECT ".uno:AddDirect"
+#define CMD_SID_TEMPLATE_ADDRESSBOKSOURCE ".uno:AddressBookSource"
+#define CMD_SID_BASICIDE_ADDWATCH ".uno:AddWatch"
+#define CMD_SID_DOCINFO_AUTHOR ".uno:Author"
+#define CMD_SID_AUTOHIDE ".uno:AutoHide"
+#define CMD_SID_AUTOPILOTMENU ".uno:AutoPilotMenu"
+#define CMD_SID_GALLERY_BG_BRUSH ".uno:BackgroundImage"
+#define CMD_SID_BACKSPACE ".uno:Backspace"
+#define CMD_SID_BASICBREAK ".uno:BasicBreak"
+#define CMD_SID_BASICIDE_APPEAR ".uno:BasicIDEAppear"
+#define CMD_SID_BASICSTEPINTO ".uno:BasicStepInto"
+#define CMD_SID_BASICSTEPOUT ".uno:BasicStepOut"
+#define CMD_SID_BASICSTEPOVER ".uno:BasicStepOver"
+#define CMD_SID_BASICSTOP ".uno:BasicStop"
+#define CMD_SID_BROWSER ".uno:Beamer"
+#define CMD_SID_BASICIDE_BRKPNTSCHANGED ".uno:BreakPointsChanged"
+#define CMD_SID_BROWSE_BACKWARD ".uno:BrowseBackward"
+#define CMD_SID_BROWSE_FORWARD ".uno:BrowseForward"
+#define CMD_SID_BROWSER_MODE ".uno:BrowseView"
+#define CMD_SID_BUILD_VERSION ".uno:BuildVersion"
+#define CMD_SID_CAPTION ".uno:Caption"
+#define CMD_SID_STYLE_FAMILY1 ".uno:CharStyle"
+#define CMD_SID_CHECK_KEY ".uno:CheckKey"
+#define CMD_SID_BASICIDE_CHOOSEMACRO ".uno:ChooseMacro"
+#define CMD_SID_CLEARHISTORY ".uno:ClearHistory"
+#define CMD_SID_CLOSEWINS ".uno:CloseWins"
+#define CMD_SID_CLOSEDOCS ".uno:CloseDocs"
+#define CMD_SID_CLOSEDOC ".uno:CloseDoc"
+#define CMD_SID_CLOSEWIN ".uno:CloseWin"
+#define CMD_SID_CLOSING ".uno:Closing"
+#define CMD_SID_DOCINFO_COMMENTS ".uno:Comments"
+#define CMD_SID_OFFICE_COMMERCIAL_USE ".uno:CommercialUse"
+#define CMD_SID_DOCUMENT_COMPARE ".uno:CompareDocuments"
+#define CMD_SID_BASICCOMPILE ".uno:CompileBasic"
+#define CMD_SID_CONFIG ".uno:ConfigureDialog"
+#define CMD_SID_CONTEXT ".uno:Context"
+#define CMD_SID_COPY ".uno:Copy"
+#define CMD_SID_CRASH ".uno:Crash"
+#define CMD_SID_BASICIDE_CREATEMACRO ".uno:CreateMacro"
+#define CMD_SID_CURRENT_URL ".uno:CurrentURL"
+#define CMD_SID_CURSORENDOFSCREEN ".uno:CursorEndOfScreen"
+#define CMD_SID_CURSORTOPOFSCREEN ".uno:CursorTopOfScreen"
+#define CMD_SID_OFFICE_CUSTOMERNUMBER ".uno:CustomerNumber"
+#define CMD_SID_CUT ".uno:Cut"
+#define CMD_SID_DEFAULTFILEPATH ".uno:DefaultFilePath"
+#define CMD_SID_DEFAULTFILENAME ".uno:DefaultFileName"
+#define CMD_SID_DELETE ".uno:Delete"
+#define CMD_SID_BASICIDE_DELETECURRENT ".uno:DeleteCurrent"
+#define CMD_SID_STYLE_DELETE ".uno:DeleteStyle"
+#define CMD_SID_STYLE_DESIGNER ".uno:DesignerDialog"
+#define CMD_SID_STYLE_DRAGHIERARCHIE ".uno:DragHierarchy"
+#define CMD_SID_EDITDOC ".uno:EditDoc"
+#define CMD_SID_BASICIDE_EDITMACRO ".uno:EditMacro"
+#define CMD_SID_STYLE_EDIT ".uno:EditStyle"
+#define CMD_FID_SEARCH_NOW ".uno:ExecuteSearch"
+#define CMD_SID_EXTENDEDHELP ".uno:ExtendedHelp"
+#define CMD_SID_FILE_NAME ".uno:FileName"
+#define CMD_SID_FOCUSURLBOX ".uno:FocusUrlBox"
+#define CMD_SID_FORMATMENU ".uno:FormatMenu"
+#define CMD_SID_STYLE_FAMILY3 ".uno:FrameStyle"
+#define CMD_SID_FRAMETITLE ".uno:FrameTitle"
+#define CMD_SID_PROGFILENAME ".uno:FullName"
+#define CMD_SID_DOCFULLNAME ".uno:FullName"
+#define CMD_SID_WIN_FULLSCREEN ".uno:FullScreen"
+#define CMD_SID_FILLFRAME ".uno:GetFrameWindow"
+#define CMD_SID_CURSORDOWN ".uno:GoDown"
+#define CMD_SID_CURSORPAGEDOWN ".uno:GoDownBlock"
+#define CMD_SID_CURSORPAGEDOWN_SEL ".uno:GoDownBlockSel"
+#define CMD_SID_CURSORDOWN_SEL ".uno:GoDownSel"
+#define CMD_SID_CURSORLEFT ".uno:GoLeft"
+#define CMD_SID_CURSORPAGELEFT ".uno:GoLeftBlock"
+#define CMD_SID_CURSORPAGELEFT_SEL ".uno:GoLeftBlockSel"
+#define CMD_SID_CURSORLEFT_SEL ".uno:GoLeftSel"
+#define CMD_SID_CURSORRIGHT ".uno:GoRight"
+#define CMD_SID_CURSORRIGHT_SEL ".uno:GoRightSel"
+#define CMD_SID_CURSORENDOFFILE ".uno:GoToEndOfData"
+#define CMD_SID_CURSORENDOFFILE_SEL ".uno:GoToEndOfDataSel"
+#define CMD_SID_CURSOREND ".uno:GoToEndOfRow"
+#define CMD_SID_CURSOREND_SEL ".uno:GoToEndOfRowSel"
+#define CMD_SID_CURSORTOPOFFILE ".uno:GoToStart"
+#define CMD_SID_CURSORHOME ".uno:GoToStartOfRow"
+#define CMD_SID_CURSORHOME_SEL ".uno:GoToStartOfRowSel"
+#define CMD_SID_CURSORTOPOFFILE_SEL ".uno:GoToStartSel"
+#define CMD_SID_CURSORUP ".uno:GoUp"
+#define CMD_SID_CURSORPAGEUP ".uno:GoUpBlock"
+#define CMD_SID_CURSORPAGEUP_SEL ".uno:GoUpBlockSel"
+#define CMD_SID_CURSORUP_SEL ".uno:GoUpSel"
+#define CMD_SID_HELP_ANNOTATE ".uno:HelpAnnotate"
+#define CMD_SID_HELP_BOOKMARK ".uno:HelpBookmark"
+#define CMD_SID_HELP_HELPFILEBOX ".uno:HelpChooseFile"
+#define CMD_SID_HELP_DOWNLOAD ".uno:HelpDownload"
+#define CMD_SID_HELP_PI ".uno:HelperDialog"
+#define CMD_SID_HELPINDEX ".uno:HelpIndex"
+#define CMD_SID_HELPMENU ".uno:HelpMenu"
+#define CMD_SID_HELPONHELP ".uno:HelpOnHelp"
+#define CMD_SID_HELP_SEARCH ".uno:HelpSearch"
+#define CMD_SID_HELPTIPS ".uno:HelpTip"
+#define CMD_SID_HELP_ZOOMIN ".uno:HelpZoomIn"
+#define CMD_SID_HELP_ZOOMOUT ".uno:HelpZoomOut"
+#define CMD_SID_BASICIDE_HIDECURPAGE ".uno:HideCurPage"
+#define CMD_SID_HYPERLINK_DIALOG ".uno:HyperlinkDialog"
+#define CMD_SID_INSERTDOC ".uno:InsertDoc"
+#define CMD_SID_HYPERLINK_INSERT ".uno:InsertHyperlink"
+#define CMD_SID_INSERT_FLOATINGFRAME ".uno:InsertObjectFloatingFrame"
+#define CMD_SID_INTERNET_ONLINE ".uno:InternetOnline"
+#define CMD_SID_INTERNET_SEARCH ".uno:InternetSearch"
+#define CMD_SID_DOC_LOADING ".uno:IsLoading"
+#define CMD_SID_IMG_LOADING ".uno:IsLoadingImages"
+#define CMD_SID_PRINTOUT ".uno:IsPrinting"
+#define CMD_SID_JUMPTOMARK ".uno:JumpToMark"
+#define CMD_SID_DOCINFO_KEYWORDS ".uno:Keywords"
+#define CMD_SID_BASICIDE_LIBLOADED ".uno:LibLoaded"
+#define CMD_SID_BASICIDE_LIBREMOVED ".uno:LibRemoved"
+#define CMD_SID_BASICIDE_LIBSELECTED ".uno:LibSelect"
+#define CMD_SID_BASICIDE_LIBSELECTOR ".uno:LibSelector"
+#define CMD_SID_OFFICE_PLK ".uno:LicenceKey"
+#define CMD_SID_CONFIGACCEL ".uno:LoadAccel"
+#define CMD_SID_BASICLOAD ".uno:LoadBasic"
+#define CMD_SID_LOADCONFIG ".uno:LoadConfiguration"
+#define CMD_SID_CONFIGEVENT ".uno:LoadEvents"
+#define CMD_SID_CONFIGMENU ".uno:LoadMenu"
+#define CMD_SID_CONFIGSTATUSBAR ".uno:LoadStatusBar"
+#define CMD_SID_TOOLBOXOPTIONS ".uno:LoadToolBox"
+#define CMD_SID_LOGOUT ".uno:Logout"
+#define CMD_SID_SCRIPTORGANIZER ".uno:ScriptOrganizer"
+#define CMD_SID_MACROORGANIZER ".uno:MacroOrganizer"
+#define CMD_SID_RUNMACRO ".uno:RunMacro"
+#define CMD_SID_BASICCHOOSER ".uno:MacroDialog"
+#define CMD_SID_MAIL_NOTIFY ".uno:MailReceipt"
+#define CMD_SID_MAIL_CHILDWIN ".uno:MailWindow"
+#define CMD_SID_BASICIDE_MATCHGROUP ".uno:MatchGroup"
+#define CMD_SID_TOGGLE_MENUBAR ".uno:MenuBarVisible"
+#define CMD_SID_DOCUMENT_MERGE ".uno:MergeDocuments"
+#define CMD_SID_ATTR_METRIC ".uno:MetricUnit"
+#define CMD_SID_MODIFIED ".uno:Modified"
+#define CMD_SID_DOC_MODIFIED ".uno:ModifiedStatus"
+#define CMD_SID_BASICIDE_MODULEDLG ".uno:ModuleDialog"
+#define CMD_SID_BASICIDE_NAMECHANGEDONTAB ".uno:NameChangedOnTab"
+#define CMD_SID_NAVIGATOR ".uno:Navigator"
+#define CMD_SID_RESTORE_EDITING_VIEW ".uno:RestoreEditingView"
+#define CMD_SID_BASICIDE_NEWDIALOG ".uno:NewDialog"
+#define CMD_SID_BASICIDE_NEWMODULE ".uno:NewModule"
+#define CMD_SID_CREATE_BASICOBJECT ".uno:NewObject"
+#define CMD_SID_STYLE_NEW ".uno:NewStyle"
+#define CMD_SID_NEWWINDOW ".uno:NewWindow"
+#define CMD_SID_BASICIDE_OBJCAT ".uno:ObjectCatalog"
+#define CMD_SID_OBJECT ".uno:ObjectMenue"
+#define CMD_SID_OLD_PALK ".uno:OldPALK"
+#define CMD_SID_OPENDOC ".uno:Open"
+#define CMD_SID_WEBHTML ".uno:WebHtml"
+#define CMD_SID_OPENHYPERLINK ".uno:OpenHyperlink"
+#define CMD_SID_DOCINFO_TITLE ".uno:DocInfoTitle"
+#define CMD_SID_OPENTEMPLATE ".uno:OpenTemplate"
+#define CMD_SID_OPENURL ".uno:OpenUrl"
+#define CMD_SID_OPTIONS ".uno:Options"
+#define CMD_SID_ORGANIZER ".uno:Organizer"
+#define CMD_SID_STYLE_FAMILY4 ".uno:PageStyle"
+#define CMD_SID_STYLE_FAMILY2 ".uno:ParaStyle"
+#define CMD_SID_PARTWIN ".uno:PartWindow"
+#define CMD_SID_PASTE ".uno:Paste"
+#define CMD_SID_CLIPBOARD_FORMAT_ITEMS ".uno:ClipboardFormatItems"
+#define CMD_SID_PASTE_SPECIAL ".uno:PasteSpecial"
+#define CMD_SID_DOCPATH ".uno:DocPath"
+#define CMD_SID_PICKLIST ".uno:PickList"
+#define CMD_SID_PLUGINS_ACTIVE ".uno:PlugInsActive"
+#define CMD_SID_PRINTDOC ".uno:Print"
+#define CMD_SID_PRINTDOCDIRECT ".uno:PrintDefault"
+#define CMD_SID_PRINTER_NAME ".uno:Printer"
+#define CMD_SID_SETUPPRINTER ".uno:PrinterSetup"
+#define CMD_SID_PRINTPREVIEW ".uno:PrintPreview"
+#define CMD_SID_OFFICE_PRIVATE_USE ".uno:PrivateUse"
+#define CMD_SID_DOCINFO ".uno:SetDocumentProperties"
+#define CMD_SID_QUITAPP ".uno:Quit"
+#define CMD_SID_DOC_READONLY ".uno:ReadOnly"
+#define CMD_SID_RECORDMACRO ".uno:MacroRecorder"
+#define CMD_SID_STOP_RECORDING ".uno:StopRecording"
+#define CMD_SID_RECORDING_FLOATWINDOW ".uno:MacroRecordingFloat"
+#define CMD_SID_REDO ".uno:Redo"
+#define CMD_SID_DELETE_BASICOBJECT ".uno:ReleaseObject"
+#define CMD_SID_RELOAD ".uno:Reload"
+#define CMD_SID_BASICIDE_REMOVEWATCH ".uno:RemoveWatch"
+#define CMD_SID_BASICIDE_RENAMECURRENT ".uno:RenameCurrent"
+#define CMD_SID_REPAINT ".uno:Repaint"
+#define CMD_SID_REPEAT ".uno:RepeatAction"
+#define CMD_SID_RUBY_DIALOG ".uno:RubyDialog"
+#define CMD_SID_BASICRUN ".uno:RunBasic"
+#define CMD_SID_SAVEDOC ".uno:Save"
+#define CMD_SID_SAVEDOCS ".uno:SaveAll"
+#define CMD_SID_SAVEASDOC ".uno:SaveAs"
+#define CMD_SID_DOCTEMPLATE ".uno:SaveAsTemplate"
+#define CMD_SID_BASICSAVEAS ".uno:SaveBasicAs"
+#define CMD_SID_EXPORT_DIALOG ".uno:ExportDialog"
+#define CMD_SID_IMPORT_DIALOG ".uno:ImportDialog"
+#define CMD_SID_SAVECONFIG ".uno:SaveConfiguration"
+#define CMD_SID_DOC_SAVED ".uno:Saved"
+#define CMD_SID_BASICIDE_SBXDELETED ".uno:SbxDeleted"
+#define CMD_SID_BASICIDE_SBXINSERTED ".uno:SbxInserted"
+#define CMD_SID_BASICIDE_SBXRENAMED ".uno:SbxRenamed"
+#define CMD_SID_MAIL_SCROLLBODY_PAGEDOWN ".uno:ScrollBodyPageDown"
+#define CMD_SID_SEARCH_DLG ".uno:SearchDialog"
+#define CMD_SID_SEARCH_OPTIONS ".uno:SearchOptions"
+#define CMD_SID_SEARCH_ITEM ".uno:SearchProperties"
+#define CMD_SID_SELECTALL ".uno:SelectAll"
+#define CMD_FN_FAX ".uno:SendFax"
+#define CMD_SID_MAIL_SENDDOC ".uno:SendMail"
+#define CMD_SID_MAIL_SENDDOCASPDF ".uno:SendMailDocAsPDF"
+#define CMD_SID_MAIL_SENDDOCASFORMAT ".uno:SendMailDocAsFormat"
+#define CMD_SID_MAIL_SENDDOCASMS ".uno:SendMailDocAsMS"
+#define CMD_SID_MAIL_SENDDOCASOOO ".uno:SendMailDocAsOOo"
+#define CMD_SID_SETOPTIONS ".uno:SetOptions"
+#define CMD_SID_OFFICE_PALK ".uno:SetPALK"
+#define CMD_SID_SHOW_BROWSER ".uno:ShowBrowser"
+#define CMD_SID_SHOWPOPUPS ".uno:ShowPopups"
+#define CMD_SID_BASICIDE_SHOWSBX ".uno:ShowSbx"
+#define CMD_SID_SOURCEVIEW ".uno:SourceView"
+#define CMD_SID_ONLINE_REGISTRATION_DLG ".uno:StartRegistrationDialog"
+#define CMD_SID_STATUSBARTEXT ".uno:StatusBar"
+#define CMD_SID_TOGGLESTATUSBAR ".uno:StatusBarVisible"
+#define CMD_SID_BASICIDE_STAT_DATE ".uno:StatusGetDate"
+#define CMD_SID_BASICIDE_STAT_POS ".uno:StatusGetPosition"
+#define CMD_SID_BASICIDE_STAT_TITLE ".uno:StatusGetTitle"
+#define CMD_SID_BASICIDE_STOREALLMODULESOURCES ".uno:StoreAllModuleSources"
+#define CMD_SID_BASICIDE_STOREMODULESOURCE ".uno:StoreModuleSource"
+#define CMD_SID_STYLE_APPLY ".uno:StyleApplyState"
+#define CMD_SID_STYLE_CATALOG ".uno:StyleCatalog"
+#define CMD_SID_STYLE_NEW_BY_EXAMPLE ".uno:StyleNewByExample"
+#define CMD_SID_STYLE_UPDATE_BY_EXAMPLE ".uno:StyleUpdateByExample"
+#define CMD_SID_STYLE_WATERCAN ".uno:StyleWatercanMode"
+#define CMD_SID_VIEWSHELL ".uno:SwitchViewShell"
+#define CMD_SID_TASKBAR ".uno:TaskBarVisible"
+#define CMD_SID_STYLE_FAMILY5 ".uno:ListStyle"
+#define CMD_SID_TIPWINDOW ".uno:TipsDialog"
+#define CMD_SID_DOCTITLE ".uno:Title"
+#define CMD_SID_TITLE ".uno:Title"
+#define CMD_SID_BASICIDE_TOGGLEBRKPNT ".uno:ToggleBreakPoint"
+#define CMD_SID_BASICIDE_SHOWWINDOW ".uno:BasicIDEShowWindow"
+#define CMD_SID_UNDO ".uno:Undo"
+#define CMD_SID_FORMATPAINTBRUSH ".uno:FormatPaintbrush"
+#define CMD_SID_ATTR_UNDO_COUNT ".uno:UndoCount"
+#define CMD_SID_BASICIDE_UPDATEALLMODULESOURCES ".uno:UpdateAllModuleSources"
+#define CMD_SID_BASICIDE_UPDATEMODULESOURCE ".uno:UpdateModuleSource"
+#define CMD_SID_BASICIDE_MANAGEBRKPNTS ".uno:ManageBreakPoints"
+#define CMD_SID_BASICIDE_TOGGLEBRKPNTENABLED ".uno:ToggleBreakPointEnabled"
+#define CMD_SID_UPDATE_VERSION ".uno:UpdateVersion"
+#define CMD_SID_VERSION ".uno:VersionDialog"
+#define CMD_SID_SIGNATURE ".uno:Signature"
+#define CMD_SID_MACRO_SIGNATURE ".uno:MacroSignature"
+#define CMD_SID_VERSION_VISIBLE ".uno:VersionVisible"
+#define CMD_SID_VIEW_DATA_SOURCE_BROWSER ".uno:ViewDataSourceBrowser"
+#define CMD_SID_WIN_VISIBLE ".uno:WinVisible"
+#define CMD_SID_MDIWINDOWLIST ".uno:WindowList"
+#define CMD_SID_ZOOM_IN ".uno:ZoomMinus"
+#define CMD_SID_ZOOM ".uno:Zooming"
+#define CMD_SID_ZOOM_NEXT ".uno:ZoomNext"
+#define CMD_SID_ZOOM_OUT ".uno:ZoomPlus"
+#define CMD_SID_ZOOM_PREV ".uno:ZoomPrevious"
+#define CMD_SID_ZOOM_TOOLBOX ".uno:ZoomToolBox"
+#define CMD_SID_EXPORTDOC ".uno:ExportTo"
+#define CMD_SID_EXPORTDOCASPDF ".uno:ExportToPDF"
+#define CMD_SID_DIRECTEXPORTDOCASPDF ".uno:ExportDirectToPDF"
+#define CMD_SID_IMAGE_ORIENTATION ".uno:ImageOrientation"
+#define CMD_SID_SAVE_VERSION_ON_CLOSE ".uno:SaveVersionOnClose"
+#define CMD_SID_ADDONS ".uno:Addons"
+#define CMD_SID_SHOW_IME_STATUS_WINDOW ".uno:ShowImeStatusWindow"
+#define CMD_SID_UPDATE_CONFIG ".uno:UpdateConfiguration"
+#define CMD_SID_HELP_SUPPORTPAGE ".uno:HelpSupport"
+#define CMD_SID_HELP_TUTORIALS ".uno:HelpTutorials"
+#define CMD_SID_ADDONHELP ".uno:AddonHelp"
+#define CMD_SID_FORMATMENUSTATE ".uno:FormatMenuState"
+#define CMD_SID_INET_DLG ".uno:InternetDialog"
+#define CMD_SID_ONLINE_REGISTRATION ".uno:OnlineRegistrationDlg"
+#define CMD_SID_OFFICE_CHECK_PLZ ".uno:CheckPLZ"
+#define CMD_SID_ADDRESS_DATA_SOURCE ".uno:AutoPilotAddressDataSource"
+#define CMD_FN_BUSINESS_CARD ".uno:InsertBusinessCard"
+#define CMD_FN_LABEL ".uno:InsertLabels"
+#define CMD_FN_XFORMS_INIT ".uno:NewXForms"
+#define CMD_SID_SD_AUTOPILOT ".uno:AutoPilotPresentations"
+#define CMD_SID_NEWSD ".uno:NewPresentation"
+#define CMD_SID_COMP_BIBLIOGRAPHY ".uno:BibliographyComponent"
+#define CMD_SID_MINIMIZED ".uno:Minimized"
+#define CMD_SID_AUTO_CORRECT_DLG ".uno:AutoCorrectDlg"
+#define CMD_SID_OPTIONS_TREEDIALOG ".uno:OptionsTreeDialog"
+#define CMD_SID_TERMINATE_INPLACEACTIVATION ".uno:TerminateInplaceActivation"
+#define CMD_SID_RECENTFILELIST ".uno:RecentFileList"
+#define CMD_SID_AVAILABLE_TOOLBARS ".uno:AvailableToolbars"
+#define CMD_SID_AVMEDIA_PLAYER ".uno:AVMediaPlayer"
+#define CMD_SID_INSERT_AVMEDIA ".uno:InsertAVMedia"
+#define CMD_SID_MORE_DICTIONARIES ".uno:MoreDictionaries"
+#define CMD_SID_ACTIVATE_STYLE_APPLY ".uno:ActivateStyleApply"
+#define CMD_SID_DOCKWIN_0 ".uno:DockingWindow0"
+#define CMD_SID_DOCKWIN_1 ".uno:DockingWindow1"
+#define CMD_SID_DOCKWIN_2 ".uno:DockingWindow2"
+#define CMD_SID_DOCKWIN_3 ".uno:DockingWindow3"
+#define CMD_SID_DOCKWIN_4 ".uno:DockingWindow4"
+#define CMD_SID_DOCKWIN_5 ".uno:DockingWindow5"
+#define CMD_SID_DOCKWIN_6 ".uno:DockingWindow6"
+#define CMD_SID_DOCKWIN_7 ".uno:DockingWindow7"
+#define CMD_SID_DOCKWIN_8 ".uno:DockingWindow8"
+#define CMD_SID_DOCKWIN_9 ".uno:DockingWindow9"
+#define CMD_SID_PASTE_UNFORMATTED ".uno:PasteUnformatted"
+
+#endif
diff --git a/sfx2/inc/sfx2/sfxsids.hrc b/sfx2/inc/sfx2/sfxsids.hrc
index 561a41b04387..17d47097fb46 100644
--- a/sfx2/inc/sfx2/sfxsids.hrc
+++ b/sfx2/inc/sfx2/sfxsids.hrc
@@ -522,41 +522,29 @@
#define SID_CURSORTOPOFSCREEN (SID_SFX_START + 744)
#define SID_CURSORHOME (SID_SFX_START + 745)
#define SID_CURSOREND (SID_SFX_START + 746)
-#define SID_SCROLLDOWN (SID_SFX_START + 751)
-#define SID_SCROLLUP (SID_SFX_START + 752)
#define SID_FORMATMENU (SID_SFX_START + 780)
#define SID_OBJECTMENU0 SID_FORMATMENU
#define SID_OBJECTMENU1 (SID_SFX_START + 781)
#define SID_OBJECTMENU2 (SID_SFX_START + 782)
#define SID_OBJECTMENU3 (SID_SFX_START + 783)
#define SID_OBJECTMENU_LAST SID_OBJECTMENU3
-#define SID_EDITMENU (SID_SFX_START + 790)
#define SID_FORMATMENUSTATE (SID_SFX_START + 791)
// default-ids for macros
#define SID_RECORDING_FLOATWINDOW (SID_SFX_START + 800)
#define SID_RECORDMACRO (SID_SFX_START + 1669)
-#define SID_PLAYMACRO (SID_SFX_START + 801)
-#define SID_EDITMACRO (SID_SFX_START + 802)
-#define SID_MACROLIBMANAGER (SID_SFX_START + 803)
-#define SID_LOADMACROLIB (SID_SFX_START + 804)
-#define SID_RELEASEMACROLIB (SID_SFX_START + 805)
-#define SID_BASICNAME (SID_SFX_START + 806)
-#define SID_LIBNAME (SID_SFX_START + 807)
-#define SID_MODULENAME (SID_SFX_START + 808)
-#define SID_STATEMENT (SID_SFX_START + 810)
+ // FREE: SID_SFX_START + 801
+ // FREE: SID_SFX_START + 802
+ // FREE: SID_SFX_START + 803
+ // FREE: SID_SFX_START + 804
+ // FREE: SID_SFX_START + 805
+ // FREE: SID_SFX_START + 806
+ // FREE: SID_SFX_START + 807
+ // FREE: SID_SFX_START + 808
+ // FREE: SID_SFX_START + 809
+ // FREE: SID_SFX_START + 810
#define SID_ASYNCHRON (SID_SFX_START + 811)
-#define SID_START_APP (SID_SFX_START + 820)
-#define SID_START_BEGIN (SID_SFX_START + 821)
-#define SID_STARTSW SID_START_BEGIN
-#define SID_STARTSC (SID_START_BEGIN + 1)
-#define SID_STARTSD (SID_START_BEGIN + 2)
-#define SID_STARTSIM (SID_START_BEGIN + 3)
-#define SID_STARTSCH (SID_START_BEGIN + 4)
-#define SID_STARTSMA (SID_START_BEGIN + 5)
-#define SID_START_END SID_STARTSMA
-
// default-ids for configuration
#define SID_RESTOREMENU (SID_SFX_START + 901)
#define SID_RESTOREACCELS (SID_SFX_START + 902)
@@ -622,11 +610,9 @@
#define SID_OBJECTRESIZE (SID_SFX_START + 1000)
#define SID_INSERT_TEXT (SID_SFX_START + 1001)
-#define SID_MACRO_START (SID_SFX_START + 1002)
-#define SID_MACRO_END (SID_SFX_START + 1100)
-#define SID_EVENTCONFIG (SID_MACRO_END + 1)
-#define SID_VERB_START (SID_MACRO_END + 2)
-#define SID_VERB_END (SID_MACRO_END + 21)
+#define SID_EVENTCONFIG (SID_SFX_START + 1101)
+#define SID_VERB_START (SID_SFX_START + 1100)
+#define SID_VERB_END (SID_SFX_START + 1121)
#define SID_BROWSER_TASK (SID_MACRO_END + 22)
diff --git a/sfx2/inc/sfx2/shell.hxx b/sfx2/inc/sfx2/shell.hxx
index ceec7c05c719..40c2a7fc42fc 100644
--- a/sfx2/inc/sfx2/shell.hxx
+++ b/sfx2/inc/sfx2/shell.hxx
@@ -65,12 +65,16 @@ class SfxShellSubObject;
class SfxDispatcher;
class SfxViewFrame;
class SfxSlot;
-class SfxUndoManager;
class SfxRepeatTarget;
class SbxVariable;
class SbxBase;
class SfxBindings;
+namespace svl
+{
+ class IUndoManager;
+}
+
//====================================================================
enum SfxInterfaceId
@@ -162,7 +166,7 @@ class SFX2_DLLPUBLIC SfxShell: public SfxBroadcaster
SfxShell_Impl* pImp;
SfxItemPool* pPool;
- SfxUndoManager* pUndoMgr;
+ ::svl::IUndoManager* pUndoMgr;
private:
SfxShell( const SfxShell & ); // n.i.
@@ -212,8 +216,9 @@ public:
inline SfxItemPool& GetPool() const;
inline void SetPool( SfxItemPool *pNewPool ) ;
- virtual SfxUndoManager* GetUndoManager();
- void SetUndoManager( SfxUndoManager *pNewUndoMgr );
+ virtual ::svl::IUndoManager*
+ GetUndoManager();
+ void SetUndoManager( ::svl::IUndoManager *pNewUndoMgr );
SfxRepeatTarget* GetRepeatTarget() const;
void SetRepeatTarget( SfxRepeatTarget *pTarget );
diff --git a/sfx2/inc/sfx2/viewsh.hxx b/sfx2/inc/sfx2/viewsh.hxx
index 042974d87123..6e613cce0176 100644
--- a/sfx2/inc/sfx2/viewsh.hxx
+++ b/sfx2/inc/sfx2/viewsh.hxx
@@ -214,6 +214,7 @@ public:
virtual String GetSelectionText( sal_Bool bCompleteWords = sal_False );
virtual sal_Bool HasSelection( sal_Bool bText = sal_True ) const;
virtual SdrView* GetDrawView() const;
+
void SetSubShell( SfxShell *pShell );
SfxShell* GetSubShell() const { return pSubShell; }
void AddSubShell( SfxShell& rShell );
diff --git a/sfx2/prj/build.lst b/sfx2/prj/build.lst
index 76f87fa844c8..dc0b094ac4fb 100644
--- a/sfx2/prj/build.lst
+++ b/sfx2/prj/build.lst
@@ -1,12 +1,5 @@
-sf sfx2 : l10n idl basic xmlscript framework readlicense_oo shell setup_native sax SYSTRAY_GTK:libegg LIBXML2:libxml2 LIBXSLT:libxslt NULL
-sf sfx2 usr1 - all sf_mkout NULL
-sf sfx2\prj nmake - all sf_prj NULL
-sf sfx2\qa\cppunit nmake - all sf_qa_cppunit NULL
-sf sfx2\qa\unoapi nmake - all sf_qa_unoapi NULL
-
-# fails on unxsoli4
-# sf sfx2\qa\complex\standalonedocumentinfo nmake - all sf_qa_complex_standalonedocumentinfo sf_util NULL
-
-# sf sfx2\qa\complex\framework nmake - all sf_qa_complex_framework sf_qa_complex_framework_dochelper NULL
-# sf sfx2\qa\complex\docinfo nmake - all sf_qa_complex_docinfo sf_util NULL
-
+sf sfx2 : l10n idl basic xmlscript framework readlicense_oo shell setup_native sax SYSTRAY_GTK:libegg LIBXML2:libxml2 LIBXSLT:libxslt test NULL
+sf sfx2 usr1 - all sf_mkout NULL
+sf sfx2\prj nmake - all sf_prj NULL
+sf sfx2\qa\cppunit nmake - all sf_qa_cppunit NULL
+sf sfx2\qa\unoapi nmake - all sf_qa_unoapi NULL
diff --git a/sfx2/qa/complex/docinfo/DocumentProperties.java b/sfx2/qa/complex/sfx2/DocumentInfo.java
similarity index 95%
rename from sfx2/qa/complex/docinfo/DocumentProperties.java
rename to sfx2/qa/complex/sfx2/DocumentInfo.java
index 0c4eb44c4a35..ca7ae8b1dda0 100644
--- a/sfx2/qa/complex/docinfo/DocumentProperties.java
+++ b/sfx2/qa/complex/sfx2/DocumentInfo.java
@@ -24,9 +24,9 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.docinfo;
+package complex.sfx2;
-import com.sun.star.beans.*;
+import com.sun.star.beans.PropertyAttribute;
import com.sun.star.beans.Property;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertyContainer;
@@ -49,22 +49,17 @@ import util.WriterTools;
import org.junit.After;
import org.junit.AfterClass;
-// import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.OfficeConnection;
import static org.junit.Assert.*;
-public class DocumentProperties
+public class DocumentInfo
{
-
XMultiServiceFactory m_xMSF = null;
XTextDocument xTextDoc = null;
XTextDocument xTextDocSecond = null;
-// public String[] getTestMethodNames() {
-// return new String[] {"checkDocInfo", "cleanup"};
-// }
@Test public void checkDocInfo()
{
m_xMSF = getMSF();
@@ -349,14 +344,18 @@ public class DocumentProperties
// setup and close connections
@BeforeClass public static void setUpConnection() throws Exception
{
- System.out.println("setUpConnection()");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + DocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.setUp();
}
@AfterClass public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
- System.out.println("tearDownConnection()");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + DocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.tearDown();
}
private static final OfficeConnection connection = new OfficeConnection();
diff --git a/sfx2/qa/complex/framework/DocumentMetadataAccessTest.java b/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java
similarity index 87%
rename from sfx2/qa/complex/framework/DocumentMetadataAccessTest.java
rename to sfx2/qa/complex/sfx2/DocumentMetadataAccess.java
index 3f61cb21b3dd..d145b9028473 100644
--- a/sfx2/qa/complex/framework/DocumentMetadataAccessTest.java
+++ b/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java
@@ -25,9 +25,27 @@
*
************************************************************************/
-package complex.framework;
+package complex.sfx2;
// import complexlib.ComplexTestCase;
+import com.sun.star.beans.Pair;
+import com.sun.star.rdf.Literal;
+import com.sun.star.rdf.XLiteral;
+import com.sun.star.rdf.XNamedGraph;
+import com.sun.star.rdf.BlankNode;
+import com.sun.star.rdf.XQuerySelectResult;
+import com.sun.star.rdf.XNode;
+import com.sun.star.rdf.XDocumentRepository;
+import com.sun.star.rdf.XMetadatable;
+import com.sun.star.rdf.Statement;
+import com.sun.star.rdf.FileFormat;
+import com.sun.star.rdf.URIs;
+import com.sun.star.rdf.URI;
+import com.sun.star.rdf.XDocumentMetadataAccess;
+import com.sun.star.rdf.XRepositorySupplier;
+import com.sun.star.rdf.XRepository;
+import com.sun.star.rdf.XBlankNode;
+import com.sun.star.rdf.XURI;
import helper.StreamSimulator;
import com.sun.star.uno.UnoRuntime;
@@ -41,7 +59,6 @@ import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.WrappedTargetRuntimeException;
import com.sun.star.beans.XPropertySet;
import com.sun.star.beans.PropertyValue;
-import com.sun.star.beans.Pair;
import com.sun.star.beans.StringPair;
import com.sun.star.container.XEnumerationAccess;
import com.sun.star.container.XEnumeration;
@@ -51,7 +68,7 @@ import com.sun.star.frame.XStorable;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextRange;
import com.sun.star.text.XText;
-import com.sun.star.rdf.*;
+import complex.sfx2.tools.TestDocument;
import lib.TestParameters;
@@ -73,7 +90,7 @@ import static org.junit.Assert.*;
*
* @author mst
*/
-public class DocumentMetadataAccessTest
+public class DocumentMetadataAccess
{
XMultiServiceFactory xMSF;
XComponentContext xContext;
@@ -196,22 +213,22 @@ public class DocumentMetadataAccessTest
PropertyValue[] loadProps = new PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "Hidden";
- loadProps[0].Value = new Boolean(true);
+ loadProps[0].Value = true;
xComp = util.DesktopTools.openNewDoc(xMSF, "swriter", loadProps);
XTextDocument xText = UnoRuntime.queryInterface(XTextDocument.class, xComp);
- XRepositorySupplier xRS = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
- assertNotNull("xRS null", xRS);
- XDocumentMetadataAccess xDMA = UnoRuntime.queryInterface(XDocumentMetadataAccess.class, xRS);
- assertNotNull("xDMA null", xDMA);
- xRep = xRS.getRDFRepository();
+ XRepositorySupplier xRepoSupplier = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
+ assertNotNull("xRS null", xRepoSupplier);
+ XDocumentMetadataAccess xDocMDAccess = UnoRuntime.queryInterface(XDocumentMetadataAccess.class, xRepoSupplier);
+ assertNotNull("xDMA null", xDocMDAccess);
+ xRep = xRepoSupplier.getRDFRepository();
assertNotNull("xRep null", xRep);
System.out.println("...done");
System.out.println("Checking that new repository is initialized...");
- XURI xBaseURI = (XURI) xDMA;
+ XURI xBaseURI = (XURI) xDocMDAccess;
String baseURI = xBaseURI.getStringValue();
assertNotNull("new: baseURI", xBaseURI );
assertTrue("new: baseURI", !xBaseURI.getStringValue().equals(""));
@@ -235,79 +252,79 @@ public class DocumentMetadataAccessTest
XMetadatable xM = (XMetadatable) xTR;
try {
- xDMA.getElementByURI(null);
+ xDocMDAccess.getElementByURI(null);
fail("getElementByURI: null allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.getMetadataGraphsWithType(null);
+ xDocMDAccess.getMetadataGraphsWithType(null);
fail("getMetadataGraphsWithType: null URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("", new XURI[0]);
+ xDocMDAccess.addMetadataFile("", new XURI[0]);
fail("addMetadataFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("/foo", new XURI[0]);
+ xDocMDAccess.addMetadataFile("/foo", new XURI[0]);
fail("addMetadataFile: absolute filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("fo\"o", new XURI[0]);
+ xDocMDAccess.addMetadataFile("fo\"o", new XURI[0]);
fail("addMetadataFile: invalid filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("../foo", new XURI[0]);
+ xDocMDAccess.addMetadataFile("../foo", new XURI[0]);
fail("addMetadataFile: filename with .. allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("foo/../../bar", new XURI[0]);
+ xDocMDAccess.addMetadataFile("foo/../../bar", new XURI[0]);
fail("addMetadataFile: filename with nest .. allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("foo/././bar", new XURI[0]);
+ xDocMDAccess.addMetadataFile("foo/././bar", new XURI[0]);
fail("addMetadataFile: filename with nest . allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("content.xml", new XURI[0]);
+ xDocMDAccess.addMetadataFile("content.xml", new XURI[0]);
fail("addMetadataFile: content.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("styles.xml", new XURI[0]);
+ xDocMDAccess.addMetadataFile("styles.xml", new XURI[0]);
fail("addMetadataFile: styles.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("meta.xml", new XURI[0]);
+ xDocMDAccess.addMetadataFile("meta.xml", new XURI[0]);
fail("addMetadataFile: meta.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("settings.xml", new XURI[0]);
+ xDocMDAccess.addMetadataFile("settings.xml", new XURI[0]);
fail("addMetadataFile: settings.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.importMetadataFile(FileFormat.RDF_XML, null, "foo",
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML, null, "foo",
foo, new XURI[0]);
fail("importMetadataFile: null stream allowed");
} catch (IllegalArgumentException e) {
@@ -317,7 +334,7 @@ public class DocumentMetadataAccessTest
final String sEmptyRDF = TestDocument.getUrl("empty.rdf");
try {
XInputStream xFooIn = new StreamSimulator(sEmptyRDF, true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML, xFooIn, "",
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML, xFooIn, "",
foo, new XURI[0]);
fail("importMetadataFile: empty filename allowed");
} catch (IllegalArgumentException e) {
@@ -326,7 +343,7 @@ public class DocumentMetadataAccessTest
try {
XInputStream xFooIn =
new StreamSimulator(sEmptyRDF, true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML, xFooIn, "meta.xml",
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML, xFooIn, "meta.xml",
foo, new XURI[0]);
fail("importMetadataFile: meta.xml filename allowed");
} catch (IllegalArgumentException e) {
@@ -335,7 +352,7 @@ public class DocumentMetadataAccessTest
try {
XInputStream xFooIn =
new StreamSimulator(sEmptyRDF, true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML,
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML,
xFooIn, "foo", null, new XURI[0]);
fail("importMetadataFile: null base URI allowed");
} catch (IllegalArgumentException e) {
@@ -344,62 +361,62 @@ public class DocumentMetadataAccessTest
try {
XInputStream xFooIn =
new StreamSimulator(sEmptyRDF, true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML,
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML,
xFooIn, "foo", rdf_type, new XURI[0]);
fail("importMetadataFile: non-absolute base URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.removeMetadataFile(null);
+ xDocMDAccess.removeMetadataFile(null);
fail("removeMetadataFile: null URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addContentOrStylesFile("");
+ xDocMDAccess.addContentOrStylesFile("");
fail("addContentOrStylesFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addContentOrStylesFile("/content.xml");
+ xDocMDAccess.addContentOrStylesFile("/content.xml");
fail("addContentOrStylesFile: absolute filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addContentOrStylesFile("foo.rdf");
+ xDocMDAccess.addContentOrStylesFile("foo.rdf");
fail("addContentOrStylesFile: invalid filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.removeContentOrStylesFile("");
+ xDocMDAccess.removeContentOrStylesFile("");
fail("removeContentOrStylesFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.loadMetadataFromStorage(null, foo, null);
+ xDocMDAccess.loadMetadataFromStorage(null, foo, null);
fail("loadMetadataFromStorage: null storage allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.storeMetadataToStorage(null/*, base*/);
+ xDocMDAccess.storeMetadataToStorage(null/*, base*/);
fail("storeMetadataToStorage: null storage allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.loadMetadataFromMedium(new PropertyValue[0]);
+ xDocMDAccess.loadMetadataFromMedium(new PropertyValue[0]);
fail("loadMetadataFromMedium: empty medium allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.storeMetadataToMedium(new PropertyValue[0]);
+ xDocMDAccess.storeMetadataToMedium(new PropertyValue[0]);
fail("storeMetadataToMedium: empty medium allowed");
} catch (IllegalArgumentException e) {
// ignore
@@ -409,26 +426,26 @@ public class DocumentMetadataAccessTest
System.out.println("Checking file addition/removal...");
- xDMA.removeContentOrStylesFile(contentPath);
+ xDocMDAccess.removeContentOrStylesFile(contentPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
assertTrue("removeContentOrStylesFile (content)",
eq(xStmtsEnum, new Statement[] {
manifestStmts[0], manifestStmts[2], manifestStmts[4]
}));
- xDMA.addContentOrStylesFile(contentPath);
+ xDocMDAccess.addContentOrStylesFile(contentPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
assertTrue("addContentOrStylesFile (content)",
eq(xStmtsEnum, manifestStmts));
- xDMA.removeContentOrStylesFile(stylesPath);
+ xDocMDAccess.removeContentOrStylesFile(stylesPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
assertTrue("removeContentOrStylesFile (styles)",
eq(xStmtsEnum, new Statement[] {
manifestStmts[0], manifestStmts[1], manifestStmts[3]
}));
- xDMA.addContentOrStylesFile(stylesPath);
+ xDocMDAccess.addContentOrStylesFile(stylesPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
assertTrue("addContentOrStylesFile (styles)",
eq(xStmtsEnum, manifestStmts));
@@ -441,19 +458,19 @@ public class DocumentMetadataAccessTest
new Statement(xFoo, rdf_type, pkg_MetadataFile, manifest);
Statement xM_FooTypeBar =
new Statement(xFoo, rdf_type, bar, manifest);
- xDMA.addMetadataFile(fooPath, new XURI[] { bar });
+ xDocMDAccess.addMetadataFile(fooPath, new XURI[] { bar });
xStmtsEnum = xManifest.getStatements(null, null, null);
assertTrue("addMetadataFile",
eq(xStmtsEnum, merge(manifestStmts, new Statement[] {
xM_BaseHaspartFoo, xM_FooTypeMetadata, xM_FooTypeBar
})));
- XURI[] graphsBar = xDMA.getMetadataGraphsWithType(bar);
+ XURI[] graphsBar = xDocMDAccess.getMetadataGraphsWithType(bar);
assertTrue("getMetadataGraphsWithType",
graphsBar.length == 1 && eq(graphsBar[0], xFoo));
- xDMA.removeMetadataFile(xFoo);
+ xDocMDAccess.removeMetadataFile(xFoo);
xStmtsEnum = xManifest.getStatements(null, null, null);
assertTrue("removeMetadataFile",
eq(xStmtsEnum, manifestStmts));
@@ -468,7 +485,7 @@ public class DocumentMetadataAccessTest
XURI uri;
XMetadatable xMeta;
- xMeta = xDMA.getElementByURI(xMeta1);
+ xMeta = xDocMDAccess.getElementByURI(xMeta1);
assertTrue("getElementByURI: null", null != xMeta);
String XmlId = xMeta.getMetadataReference().Second;
String XmlId1 = xMeta1.getMetadataReference().Second;
@@ -483,7 +500,7 @@ public class DocumentMetadataAccessTest
fooBarPath);
Statement[] metadataStmts = getMetadataFileStmts(xBaseURI,
fooBarPath);
- xDMA.addMetadataFile(fooBarPath, new XURI[0]);
+ xDocMDAccess.addMetadataFile(fooBarPath, new XURI[0]);
xStmtsEnum = xRep.getStatements(null, null, null);
assertTrue("addMetadataFile",
eq(xStmtsEnum, merge(manifestStmts, metadataStmts )));
@@ -520,15 +537,15 @@ public class DocumentMetadataAccessTest
xStmtsEnum = xRep.getStatements(null, null, null);
XURI[] graphs = xRep.getGraphNames();
- xDMA.storeMetadataToMedium(args);
+ xDocMDAccess.storeMetadataToMedium(args);
// this should re-init
- xDMA.loadMetadataFromMedium(argsEmptyNoContent);
- xRep = xRS.getRDFRepository();
+ xDocMDAccess.loadMetadataFromMedium(argsEmptyNoContent);
+ xRep = xRepoSupplier.getRDFRepository();
assertTrue("xRep null", null != xRep);
assertTrue("baseURI still tdoc?",
- !baseURI.equals(xDMA.getStringValue()));
- Statement[] manifestStmts2 = getManifestStmts((XURI) xDMA);
+ !baseURI.equals(xDocMDAccess.getStringValue()));
+ Statement[] manifestStmts2 = getManifestStmts((XURI) xDocMDAccess);
xStmtsEnum = xRep.getStatements(null, null, null);
// there is no content or styles file in here, so we have just
// the package stmt
@@ -536,29 +553,29 @@ public class DocumentMetadataAccessTest
eq(xStmtsEnum, new Statement[] { manifestStmts2[0] }));
// this should re-init
- xDMA.loadMetadataFromMedium(argsEmpty);
- xRep = xRS.getRDFRepository();
+ xDocMDAccess.loadMetadataFromMedium(argsEmpty);
+ xRep = xRepoSupplier.getRDFRepository();
assertTrue("xRep null", null != xRep);
assertTrue("baseURI still tdoc?",
- !baseURI.equals(xDMA.getStringValue()));
- Statement[] manifestStmts3 = getManifestStmts((XURI) xDMA);
+ !baseURI.equals(xDocMDAccess.getStringValue()));
+ Statement[] manifestStmts3 = getManifestStmts((XURI) xDocMDAccess);
xStmtsEnum = xRep.getStatements(null, null, null);
assertTrue("loadMetadataFromMedium (no metadata)",
eq(xStmtsEnum, manifestStmts3));
- xDMA.loadMetadataFromMedium(args);
- xRep = xRS.getRDFRepository();
+ xDocMDAccess.loadMetadataFromMedium(args);
+ xRep = xRepoSupplier.getRDFRepository();
assertTrue("xRep null", null != xRep);
- Statement[] manifestStmts4 = getManifestStmts((XURI) xDMA);
- Statement[] metadataStmts4 = getMetadataFileStmts((XURI) xDMA,
+ Statement[] manifestStmts4 = getManifestStmts((XURI) xDocMDAccess);
+ Statement[] metadataStmts4 = getMetadataFileStmts((XURI) xDocMDAccess,
fooBarPath);
xStmtsEnum = xRep.getStatements(null, null, null);
assertTrue("some graph(s) not reloaded",
graphs.length == xRep.getGraphNames().length);
- XURI xFoobar4 = URI.createNS(xContext, xDMA.getStringValue(),
+ XURI xFoobar4 = URI.createNS(xContext, xDocMDAccess.getStringValue(),
fooBarPath);
Statement xFoobar_FooBarFoo4 =
new Statement(foo, bar, foo, xFoobar4);
@@ -572,7 +589,7 @@ public class DocumentMetadataAccessTest
String f = tempDir + "TESTPARA.odt";
- XStorable xStor = UnoRuntime.queryInterface(XStorable.class, xRS);
+ XStorable xStor = UnoRuntime.queryInterface(XStorable.class, xRepoSupplier);
xStor.storeToURL(f, new PropertyValue[0]);
@@ -656,17 +673,17 @@ public class DocumentMetadataAccessTest
PropertyValue[] loadProps = new PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "Hidden";
- loadProps[0].Value = new Boolean(true);
+ loadProps[0].Value = true;
xComp = util.DesktopTools.loadDoc(xMSF, file, loadProps);
- XRepositorySupplier xRS = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
- assertTrue("xRS null", null != xRS);
+ XRepositorySupplier xRepoSupplier = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
+ assertTrue("xRS null", null != xRepoSupplier);
- XDocumentRepository xRep = UnoRuntime.queryInterface(XDocumentRepository.class, xRS.getRDFRepository());
- assertTrue("xRep null", null != xRep);
+ XDocumentRepository xDocRepository = UnoRuntime.queryInterface(XDocumentRepository.class, xRepoSupplier.getRDFRepository());
+ assertTrue("xRep null", null != xDocRepository);
XTextDocument xTextDoc = UnoRuntime.queryInterface(XTextDocument.class, xComp);
@@ -684,7 +701,7 @@ public class DocumentMetadataAccessTest
Statement x_FooBarLit1 = new Statement(foo, bar, mkLit("1"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 1",
!result.Second &&
eq(result.First, new Statement[] {
@@ -693,7 +710,7 @@ public class DocumentMetadataAccessTest
Statement x_FooBarLit2 = new Statement(foo, bar, mkLit("2"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 2",
!result.Second &&
eq(result.First, new Statement[] {
@@ -703,7 +720,7 @@ public class DocumentMetadataAccessTest
Statement x_BlankBarLit3 =
new Statement(blank1, bar, mkLit("3"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 3",
!result.Second &&
eq(result.First, new Statement[] {
@@ -714,7 +731,7 @@ public class DocumentMetadataAccessTest
Statement x_BlankBarLit4 =
new Statement(blank2, bar, mkLit("4"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 4",
!result.Second &&
eq(result.First, new Statement[] {
@@ -725,7 +742,7 @@ public class DocumentMetadataAccessTest
Statement x_BlankBarLit5 =
new Statement(blank1, bar, mkLit("5"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 5",
!result.Second &&
eq(result.First, new Statement[] {
@@ -741,7 +758,7 @@ public class DocumentMetadataAccessTest
Statement x_FooBarLit6 = new Statement(foo, bar, mkLit("6"), null);
Statement x_FooBazLit6 = new Statement(foo, baz, mkLit("6"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 6",
!result.Second &&
eq(result.First, new Statement[] {
@@ -752,7 +769,7 @@ public class DocumentMetadataAccessTest
Statement x_FooBazLit7 = new Statement(foo, baz, mkLit("7"), null);
Statement x_FooFooLit7 = new Statement(foo, foo, mkLit("7"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 7",
!result.Second &&
eq(result.First, new Statement[] {
@@ -765,7 +782,7 @@ public class DocumentMetadataAccessTest
Statement x_FooBarLittype = new Statement(foo, bar, lit_type, null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 8",
result.Second &&
eq(result.First, new Statement[] {
@@ -773,7 +790,7 @@ public class DocumentMetadataAccessTest
}));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 9",
result.Second &&
eq(result.First, new Statement[] {
@@ -781,7 +798,7 @@ public class DocumentMetadataAccessTest
}));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 10",
result.Second &&
eq(result.First, new Statement[] {
@@ -791,7 +808,7 @@ public class DocumentMetadataAccessTest
Statement x_FooBarLit11
= new Statement(foo, bar, mkLit("11", bar), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 11",
!result.Second &&
eq(result.First, new Statement[] {
@@ -802,7 +819,7 @@ public class DocumentMetadataAccessTest
Statement x_FileBarLit12 =
new Statement(xFile, bar, mkLit("12"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 12",
!result.Second &&
eq(result.First, new Statement[] {
@@ -810,7 +827,7 @@ public class DocumentMetadataAccessTest
}));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 13",
result.Second &&
eq(result.First, new Statement[] {
@@ -820,7 +837,7 @@ public class DocumentMetadataAccessTest
Statement x_FooLabelLit14 =
new Statement(foo, rdfs_label, mkLit("14"), null);
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 14",
result.Second &&
eq(result.First, new Statement[] {
@@ -828,33 +845,33 @@ public class DocumentMetadataAccessTest
}));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 15", eq(result.First, new Statement[] { } ));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 16", eq(result.First, new Statement[] { } ));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 17", eq(result.First, new Statement[] { } ));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 18", eq(result.First, new Statement[] { } ));
xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 19", eq(result.First, new Statement[] { } ));
xPara = UnoRuntime.queryInterface(
XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 20", eq(result.First, new Statement[] { } ));
xPara = UnoRuntime.queryInterface(
XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
+ result = xDocRepository.getStatementRDFa(xPara);
assertTrue("RDFa: 21", eq(result.First, new Statement[] { } ));
System.out.println("...done");
@@ -889,7 +906,7 @@ public class DocumentMetadataAccessTest
public void report(Exception e) {
System.out.println("Exception occurred:");
- e.printStackTrace();
+ e.printStackTrace(System.out);
report2(e);
fail();
}
@@ -1275,14 +1292,18 @@ public class DocumentMetadataAccessTest
// setup and close connections
@BeforeClass public static void setUpConnection() throws Exception {
- System.out.println("setUpConnection()");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + DocumentMetadataAccess.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.setUp();
}
@AfterClass public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
- System.out.println("tearDownConnection() DocumentMetadataAccessTest");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + DocumentMetadataAccess.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.tearDown();
}
diff --git a/sfx2/qa/complex/framework/DocumentPropertiesTest.java b/sfx2/qa/complex/sfx2/DocumentProperties.java
similarity index 95%
rename from sfx2/qa/complex/framework/DocumentPropertiesTest.java
rename to sfx2/qa/complex/sfx2/DocumentProperties.java
index 20a0746c8322..01ccaa21619b 100644
--- a/sfx2/qa/complex/framework/DocumentPropertiesTest.java
+++ b/sfx2/qa/complex/sfx2/DocumentProperties.java
@@ -25,9 +25,10 @@
*
************************************************************************/
-package complex.framework;
+package complex.sfx2;
+import complex.sfx2.tools.TestDocument;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.lang.XInitialization;
@@ -53,7 +54,6 @@ import com.sun.star.document.XDocumentProperties;
import org.junit.After;
import org.junit.AfterClass;
-import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.OfficeConnection;
@@ -66,12 +66,8 @@ import static org.junit.Assert.*;
*
* @author mst
*/
-public class DocumentPropertiesTest
+public class DocumentProperties
{
-// public String[] getTestMethodNames () {
-// return new String[] { "check", "cleanup" };
-// }
-
@After public void cleanup() {
// nothing to do
}
@@ -80,7 +76,7 @@ public class DocumentPropertiesTest
class Listener implements XModifyListener {
private boolean m_Called;
- public Listener() {
+ Listener() {
m_Called = false;
}
@@ -235,8 +231,7 @@ public class DocumentPropertiesTest
new NamedValue("PageCount", new Integer(1))));
XPropertyContainer udpc = xDP.getUserDefinedProperties();
- XPropertySet udps = (XPropertySet) UnoRuntime.queryInterface(
- XPropertySet.class, udpc);
+ XPropertySet udps = UnoRuntime.queryInterface( XPropertySet.class, udpc );
assertTrue("UserDefined 1", "Dies ist ein wichtiger Hinweis"
.equals(udps.getPropertyValue("Hinweis")));
assertTrue("UserDefined 2", ("Kann Spuren von N"
@@ -366,8 +361,7 @@ public class DocumentPropertiesTest
dur.Seconds = 555;
dur.MilliSeconds = 444;
- udpc.addProperty("Frobnicate", PropertyAttribute.REMOVEABLE,
- new Boolean(b));
+ udpc.addProperty("Frobnicate", PropertyAttribute.REMOVEABLE, b);
udpc.addProperty("FrobDuration", PropertyAttribute.REMOVEABLE, dur);
udpc.addProperty("FrobDuration2", PropertyAttribute.REMOVEABLE, t);
udpc.addProperty("FrobEndDate", PropertyAttribute.REMOVEABLE, date);
@@ -433,8 +427,7 @@ public class DocumentPropertiesTest
System.out.println("Checking user-defined meta-data from stored file...");
udpc = xDP.getUserDefinedProperties();
- udps = (XPropertySet) UnoRuntime.queryInterface(
- XPropertySet.class, udpc);
+ udps = UnoRuntime.queryInterface( XPropertySet.class, udpc );
assertTrue("UserDefined bool", new Boolean(b).equals(
udps.getPropertyValue("Frobnicate")));
@@ -467,8 +460,7 @@ public class DocumentPropertiesTest
System.out.println("Checking notification listener interface...");
Listener listener = new Listener();
- XModifyBroadcaster xMB = (XModifyBroadcaster)
- UnoRuntime.queryInterface(XModifyBroadcaster.class, xDP);
+ XModifyBroadcaster xMB = UnoRuntime.queryInterface( XModifyBroadcaster.class, xDP );
xMB.addModifyListener(listener);
xDP.setAuthor("not me");
assertTrue("Listener Author", listener.reset());
@@ -542,20 +534,24 @@ public class DocumentPropertiesTest
private XMultiServiceFactory getMSF()
{
- final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface( XMultiServiceFactory.class, connection.getComponentContext().getServiceManager() );
return xMSF1;
}
// setup and close connections
@BeforeClass public static void setUpConnection() throws Exception {
- System.out.println("setUpConnection()");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + DocumentProperties.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.setUp();
}
@AfterClass public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
- System.out.println("tearDownConnection() DocumentPropertiesTest");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + DocumentProperties.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.tearDown();
}
diff --git a/sfx2/qa/complex/framework/CheckGlobalEventBroadcaster_writer1.java b/sfx2/qa/complex/sfx2/GlobalEventBroadcaster.java
similarity index 96%
rename from sfx2/qa/complex/framework/CheckGlobalEventBroadcaster_writer1.java
rename to sfx2/qa/complex/sfx2/GlobalEventBroadcaster.java
index c6dc073095b1..41bd66ccb5b9 100644
--- a/sfx2/qa/complex/framework/CheckGlobalEventBroadcaster_writer1.java
+++ b/sfx2/qa/complex/sfx2/GlobalEventBroadcaster.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.framework;
+package complex.sfx2;
import com.sun.star.awt.XWindow;
import com.sun.star.document.XEventBroadcaster;
@@ -33,7 +33,7 @@ import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.text.XTextDocument;
import com.sun.star.uno.UnoRuntime;
-import complex.framework.DocHelper.WriterHelper;
+import complex.sfx2.tools.WriterHelper;
import java.util.ArrayList;
@@ -53,7 +53,7 @@ import static org.junit.Assert.*;
* it will add an XEventListener and verify the Events
* raised when opening/changing and closing Office Documents
*/
-public class CheckGlobalEventBroadcaster_writer1 {
+public class GlobalEventBroadcaster {
XMultiServiceFactory m_xMSF = null;
XEventBroadcaster m_xEventBroadcaster = null;
ArrayList notifyEvents = new ArrayList();
@@ -61,12 +61,6 @@ public class CheckGlobalEventBroadcaster_writer1 {
XSpreadsheetDocument xSheetDoc;
XEventListener m_xEventListener = new EventListenerImpl();
-// public String[] getTestMethodNames() {
-// return new String[] {
-// "initialize", "checkWriter", "cleanup"
-// };
-// }
-
@Before public void initialize() {
m_xMSF = getMSF();
System.out.println("check wether there is a valid MultiServiceFactory");
@@ -79,7 +73,6 @@ public class CheckGlobalEventBroadcaster_writer1 {
"Create an instance of com.sun.star.frame.GlobalEventBroadcaster");
Object GlobalEventBroadcaster = null;
- Object dispatcher = null;
try {
GlobalEventBroadcaster = m_xMSF.createInstance(
@@ -116,7 +109,6 @@ public class CheckGlobalEventBroadcaster_writer1 {
WriterHelper wHelper = new WriterHelper(m_xMSF);
String[] expected;
- boolean locRes = true;
System.out.println("opening an empty writer doc");
notifyEvents.clear();
{
diff --git a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java b/sfx2/qa/complex/sfx2/StandaloneDocumentInfo.java
similarity index 78%
rename from sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java
rename to sfx2/qa/complex/sfx2/StandaloneDocumentInfo.java
index 29fcaba8cb7a..1e9cbb1f4738 100644
--- a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java
+++ b/sfx2/qa/complex/sfx2/StandaloneDocumentInfo.java
@@ -24,10 +24,12 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
+package complex.sfx2;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
+import complex.sfx2.standalonedocinfo.StandaloneDocumentInfoTest;
+import complex.sfx2.standalonedocinfo.Test01;
import org.junit.After;
import org.junit.AfterClass;
@@ -40,18 +42,9 @@ import static org.junit.Assert.*;
/* Document here
*/
-public class StandaloneDocumentInfoUnitTest {
+public class StandaloneDocumentInfo {
private XMultiServiceFactory m_xMSF = null;
-// public String[] getTestMethodNames() {
-// return new String[] {
-// "ExecuteTest01"};
-// }
-
-// public String[] getTestObjectNames() {
-// return new String[] {"StandaloneDocumentInfoUnitTest"};
-// }
-
@Before public void before() {
try {
m_xMSF = getMSF();
@@ -82,15 +75,20 @@ public class StandaloneDocumentInfoUnitTest {
}
// setup and close connections
- @BeforeClass public static void setUpConnection() throws Exception {
- System.out.println("setUpConnection()");
+ @BeforeClass public static void setUpConnection() throws Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + StandaloneDocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.setUp();
}
@AfterClass public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
- System.out.println("tearDownConnection()");
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + StandaloneDocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
connection.tearDown();
}
diff --git a/sfx2/qa/complex/sfx2/UndoManager.java b/sfx2/qa/complex/sfx2/UndoManager.java
new file mode 100755
index 000000000000..ab1b9de910b8
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/UndoManager.java
@@ -0,0 +1,1464 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package complex.sfx2;
+
+import com.sun.star.accessibility.XAccessible;
+import com.sun.star.accessibility.XAccessibleAction;
+import com.sun.star.awt.Point;
+import com.sun.star.awt.Size;
+import com.sun.star.awt.XControl;
+import com.sun.star.awt.XControlModel;
+import com.sun.star.beans.NamedValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.container.NoSuchElementException;
+import com.sun.star.container.XChild;
+import com.sun.star.container.XIndexContainer;
+import com.sun.star.container.XNameContainer;
+import com.sun.star.container.XNameReplace;
+import com.sun.star.container.XSet;
+import com.sun.star.document.EmptyUndoStackException;
+import com.sun.star.document.UndoContextNotClosedException;
+import com.sun.star.document.UndoFailedException;
+import com.sun.star.document.UndoManagerEvent;
+import com.sun.star.document.XEmbeddedScripts;
+import com.sun.star.document.XEventsSupplier;
+import com.sun.star.document.XUndoAction;
+import com.sun.star.lang.EventObject;
+import com.sun.star.lang.IndexOutOfBoundsException;
+import com.sun.star.lang.XEventListener;
+import java.lang.reflect.InvocationTargetException;
+import org.openoffice.test.tools.OfficeDocument;
+import com.sun.star.document.XUndoManagerSupplier;
+import com.sun.star.document.XUndoManager;
+import com.sun.star.document.XUndoManagerListener;
+import com.sun.star.drawing.XControlShape;
+import com.sun.star.drawing.XDrawPage;
+import com.sun.star.drawing.XDrawPageSupplier;
+import com.sun.star.drawing.XShapes;
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XServiceInfo;
+import com.sun.star.lang.XSingleComponentFactory;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.script.ScriptEventDescriptor;
+import com.sun.star.script.XEventAttacherManager;
+import com.sun.star.script.XLibraryContainer;
+import com.sun.star.task.XJob;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.util.InvalidStateException;
+import com.sun.star.util.NotLockedException;
+import com.sun.star.view.XControlAccess;
+import complex.sfx2.undo.CalcDocumentTest;
+import complex.sfx2.undo.ChartDocumentTest;
+import complex.sfx2.undo.DocumentTest;
+import complex.sfx2.undo.DrawDocumentTest;
+import complex.sfx2.undo.ImpressDocumentTest;
+import complex.sfx2.undo.WriterDocumentTest;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Stack;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.openoffice.test.OfficeConnection;
+import org.openoffice.test.tools.DocumentType;
+import org.openoffice.test.tools.SpreadsheetDocument;
+
+/**
+ * Unit test for the UndoManager API
+ *
+ * @author frank.schoenheit@oracle.com
+ */
+public class UndoManager
+{
+ // -----------------------------------------------------------------------------------------------------------------
+ @Before
+ public void beforeTest() throws com.sun.star.uno.Exception
+ {
+ m_currentTestCase = null;
+ m_currentDocument = null;
+ m_undoListener = null;
+
+ // at our service factory, insert a new factory for our CallbackComponent
+ // this will allow the Basic code in our test documents to call back into this test case
+ // here, by just instantiating this service
+ final XSet globalFactory = UnoRuntime.queryInterface( XSet.class, getORB() );
+ m_callbackFactory = new CallbackComponentFactory();
+ globalFactory.insert( m_callbackFactory );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkWriterUndo() throws Exception
+ {
+ m_currentTestCase = new WriterDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkCalcUndo() throws Exception
+ {
+ m_currentTestCase = new CalcDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkDrawUndo() throws Exception
+ {
+ m_currentTestCase = new DrawDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkImpressUndo() throws Exception
+ {
+ m_currentTestCase = new ImpressDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkChartUndo() throws Exception
+ {
+ m_currentTestCase = new ChartDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkBrokenScripts() throws com.sun.star.uno.Exception, InterruptedException
+ {
+ System.out.println( "testing: broken scripts" );
+
+ m_currentDocument = OfficeDocument.blankDocument( getORB(), DocumentType.CALC );
+ m_undoListener = new UndoListener();
+ getUndoManager().addUndoManagerListener( m_undoListener );
+
+ impl_setupBrokenBasicScript();
+ final String scriptURI = "vnd.sun.star.script:default.callbacks.brokenScript?language=Basic&location=document";
+
+ // .............................................................................................................
+ // scenario 1: Pressing a button which is bound to execute the script
+ // (This is one of the many cases where SfxObjectShell::CallXScript is invoked)
+
+ // set up the button
+ final XPropertySet buttonModel = impl_setupButton();
+ buttonModel.setPropertyValue( "Label", "exec broken script" );
+ impl_assignScript( buttonModel, "XActionListener", "actionPerformed",
+ scriptURI );
+
+ // switch the doc's view to form alive mode (so the button will actually work)
+ m_currentDocument.getCurrentView().dispatch( ".uno:SwitchControlDesignMode" );
+
+ // click the button
+ m_callbackCalled = false;
+ impl_clickButton( buttonModel );
+ // the macro is executed asynchronously by the button, so wait at most 2 seconds for the callback to be
+ // triggered
+ impl_waitFor( m_callbackCondition, 2000 );
+ // check the callback has actually been called
+ assertTrue( "clicking the test button did not work as expected - basic script not called", m_callbackCalled );
+
+ // again, since the script is executed asynchronously, we might arrive here while its execution
+ // is not completely finished. Give OOo another (at most) 2 seconds to finish it.
+ m_undoListener.waitForAllContextsClosed( 20000 );
+ // assure that the Undo Context Depth of the doc is still "0": The Basic script entered such a
+ // context, and didn't close it (thus it is broken), but the application framework should have
+ // auto-closed the context after the macro finished.
+ assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
+
+ // .............................................................................................................
+ // scenario 2: dispatching the script URL. Technically, this is equivalent to configuring the
+ // script into a menu or toolbar, and selecting the respective menu/toolbar item
+ m_callbackCalled = false;
+ m_currentDocument.getCurrentView().dispatch( scriptURI );
+ assertTrue( "dispatching the Script URL did not work as expected - basic script not called", m_callbackCalled );
+ // same as above: The script didn't close the context, but the OOo framework should have
+ assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
+
+ // .............................................................................................................
+ // scenario 3: assigning the script to some document event, and triggering this event
+ final XEventsSupplier eventSupplier = UnoRuntime.queryInterface( XEventsSupplier.class, m_currentDocument.getDocument() );
+ final XNameReplace events = UnoRuntime.queryInterface( XNameReplace.class, eventSupplier.getEvents() );
+ final NamedValue[] scriptDescriptor = new NamedValue[] {
+ new NamedValue( "EventType", "Script" ),
+ new NamedValue( "Script", scriptURI )
+ };
+ events.replaceByName( "OnViewCreated", scriptDescriptor );
+
+ // The below doesn't work: event notification is broken in m96, see http://www.openoffice.org/issues/show_bug.cgi?id=116313
+/* m_callbackCalled = false;
+ m_currentDocument.getCurrentView().dispatch( ".uno:NewWindow" );
+ assertTrue( "triggering an event did not work as expected - basic script not called", m_callbackCalled );
+ // same as above: The script didn't close the context, but the OOo framework should have
+ assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
+ */
+
+ // .............................................................................................................
+ // scenario 4: let the script enter an Undo context, but not close it, as usual.
+ // Additionally, let the script close the document - the OOo framework code which cares for
+ // auto-closing of Undo contexts should survive this, ideally ...
+ m_closeAfterCallback = true;
+ m_callbackCalled = false;
+ m_currentDocument.getCurrentView().dispatch( scriptURI );
+ assertTrue( m_callbackCalled );
+ assertTrue( "The Basic script should have closed the document.", m_undoListener.isDisposed() );
+ m_currentDocument = null;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkSerialization() throws com.sun.star.uno.Exception, InterruptedException
+ {
+ System.out.println( "testing: request serialization" );
+
+ m_currentDocument = OfficeDocument.blankDocument( getORB(), DocumentType.CALC );
+ final XUndoManager undoManager = getUndoManager();
+
+ final int threadCount = 10;
+ final int actionsPerThread = 10;
+ final int actionCount = threadCount * actionsPerThread;
+
+ // add some actions to the UndoManager, each knowing its position on the stack
+ final Object lock = new Object();
+ final Integer actionsUndone[] = new Integer[] { 0 };
+ for ( int i=actionCount; i>0; )
+ undoManager.addUndoAction( new CountingUndoAction( --i, lock, actionsUndone ) );
+
+ // some concurrent threads which undo the actions
+ Thread[] threads = new Thread[threadCount];
+ for ( int i=0; i
+ m_activeUndoContexts = new Stack();
+ private String m_mostRecentlyAddedAction = null;
+ private String m_mostRecentlyUndone = null;
+ private final Object m_allContextsClosedCondition = new Object();
+ };
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_checkUndo() throws Exception
+ {
+ System.out.println( "testing: " + m_currentTestCase.getDocumentDescription() );
+ m_currentDocument = m_currentTestCase.getDocument();
+ m_currentTestCase.initializeDocument();
+ m_currentTestCase.verifyInitialDocumentState();
+
+ final XUndoManager undoManager = getUndoManager();
+ undoManager.clear();
+ assertFalse( "clearing the Undo manager should result in the impossibility to undo anything", undoManager.isUndoPossible() );
+ assertFalse( "clearing the Undo manager should result in the impossibility to redo anything", undoManager.isRedoPossible() );
+
+ m_undoListener = new UndoListener();
+ undoManager.addUndoManagerListener( m_undoListener );
+
+ impl_testSingleModification( undoManager );
+ impl_testMultipleModifications( undoManager );
+ impl_testCustomUndoActions( undoManager );
+ impl_testLocking( undoManager );
+ impl_testNestedContexts( undoManager );
+ impl_testErrorHandling( undoManager );
+ impl_testContextHandling( undoManager );
+ impl_testStackHandling( undoManager );
+ impl_testClearance( undoManager );
+ impl_testHiddenContexts( undoManager );
+
+ // close the document, ensure the Undo manager listener gets notified
+ m_currentTestCase.closeDocument();
+ m_currentTestCase = null;
+ m_currentDocument = null;
+ assertTrue( "document is closed, but the UndoManagerListener has not been notified of the disposal", m_undoListener.isDisposed() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testSingleModification( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ m_currentTestCase.doSingleModification();
+ m_currentTestCase.verifySingleModificationDocumentState();
+
+ // undo the modification, ensure the listener got the proper notifications
+ assertEquals( "We did not yet do a undo!", 0, m_undoListener.getUndoActionCount() );
+ i_undoManager.undo();
+ assertEquals( "A simple undo does not result in the proper Undo count.",
+ 1, m_undoListener.getUndoActionCount() );
+
+ // verify the document is in its initial state, again
+ m_currentTestCase.verifyInitialDocumentState();
+
+ // redo the modification, ensure the listener got the proper notifications
+ assertEquals( "did not yet do a redo!", 0, m_undoListener.getRedoActionCount() );
+ i_undoManager.redo();
+ assertEquals( "did a redo, but got no notification of it!", 1, m_undoListener.getRedoActionCount() );
+ // ensure the document is in the proper state, again
+ m_currentTestCase.verifySingleModificationDocumentState();
+
+ // now do an Undo via the UI (aka the dispatch API), and see if this works, and notifies the listener as
+ // expected
+ m_currentTestCase.getDocument().getCurrentView().dispatch( ".uno:Undo" );
+ m_currentTestCase.verifyInitialDocumentState();
+ assertEquals( "UI-Undo does not notify the listener", 2, m_undoListener.getUndoActionCount() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testMultipleModifications( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ m_undoListener.reset();
+ assertEquals( "unexpected initial undo context depth", 0, m_undoListener.getCurrentUndoContextDepth() );
+ i_undoManager.enterUndoContext( "Batch Changes" );
+ assertEquals( "unexpected undo context depth after entering a context",
+ 1, m_undoListener.getCurrentUndoContextDepth() );
+ assertEquals( "entering an Undo context has not been notified properly",
+ "Batch Changes", m_undoListener.getCurrentUndoContextTitle() );
+
+ final int modifications = m_currentTestCase.doMultipleModifications();
+ assertEquals( "unexpected number of undo actions while doing batch changes to the document",
+ modifications, m_undoListener.getUndoActionsAdded() );
+ assertEquals( "seems the document operations touched the undo context depth",
+ 1, m_undoListener.getCurrentUndoContextDepth() );
+
+ i_undoManager.leaveUndoContext();
+ assertEquals( "unexpected undo context depth after leaving the last context",
+ 0, m_undoListener.getCurrentUndoContextDepth() );
+ assertEquals( "no Undo done, yet - still the listener has been notified of an Undo action",
+ 0, m_undoListener.getUndoActionCount() );
+
+ i_undoManager.undo();
+ assertEquals( "Just did an undo - the listener should have been notified", 1, m_undoListener.getUndoActionCount() );
+ m_currentTestCase.verifyInitialDocumentState();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testCustomUndoActions( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.clear();
+ m_undoListener.reset();
+ assertFalse( "undo stack not empty after clearing the undo manager", i_undoManager.isUndoPossible() );
+ assertFalse( "redo stack not empty after clearing the undo manager", i_undoManager.isRedoPossible() );
+ assertArrayEquals( ">0 descriptions for an empty undo stack?",
+ new String[0], i_undoManager.getAllUndoActionTitles() );
+ assertArrayEquals( ">0 descriptions for an empty redo stack?",
+ new String[0], i_undoManager.getAllRedoActionTitles() );
+
+ // add two actions, one directly, one within a context
+ final CustomUndoAction action1 = new CustomUndoAction( "UndoAction1" );
+ i_undoManager.addUndoAction( action1 );
+ assertEquals( "Adding an undo action not observed by the listener", 1, m_undoListener.getUndoActionsAdded() );
+ assertEquals( "Adding an undo action did not notify the proper title",
+ action1.getTitle(), m_undoListener.getMostRecentlyAddedActionTitle() );
+ final String contextTitle = "Undo Context";
+ i_undoManager.enterUndoContext( contextTitle );
+ final CustomUndoAction action2 = new CustomUndoAction( "UndoAction2" );
+ i_undoManager.addUndoAction( action2 );
+ assertEquals( "Adding an undo action not observed by the listener",
+ 2, m_undoListener.getUndoActionsAdded() );
+ assertEquals( "Adding an undo action did not notify the proper title",
+ action2.getTitle(), m_undoListener.getMostRecentlyAddedActionTitle() );
+ i_undoManager.leaveUndoContext();
+
+ // see if the manager has proper descriptions
+ assertArrayEquals( "unexpected Redo descriptions after adding two actions",
+ new String[0], i_undoManager.getAllRedoActionTitles() );
+ assertArrayEquals( "unexpected Undo descriptions after adding two actions",
+ new String[]{contextTitle, action1.getTitle()}, i_undoManager.getAllUndoActionTitles() );
+
+ // undo one action
+ i_undoManager.undo();
+ assertEquals( "improper action title notified during programmatic Undo",
+ contextTitle, m_undoListener.getMostRecentlyUndoneTitle() );
+ assertTrue( "nested custom undo action has not been undone as expected", action2.undoCalled() );
+ assertFalse( "nested custom undo action has not been undone as expected", action1.undoCalled() );
+ assertArrayEquals( "unexpected Redo descriptions after undoing a nested custom action",
+ new String[]{contextTitle}, i_undoManager.getAllRedoActionTitles() );
+ assertArrayEquals( "unexpected Undo descriptions after undoing a nested custom action",
+ new String[]{action1.getTitle()}, i_undoManager.getAllUndoActionTitles() );
+
+ // undo the second action, via UI dispatches
+ m_currentTestCase.getDocument().getCurrentView().dispatch( ".uno:Undo" );
+ assertEquals( "improper action title notified during UI Undo", action1.getTitle(), m_undoListener.getMostRecentlyUndoneTitle() );
+ assertTrue( "nested custom undo action has not been undone as expected", action1.undoCalled() );
+ assertArrayEquals( "unexpected Redo descriptions after undoing the second custom action",
+ new String[]{action1.getTitle(), contextTitle}, i_undoManager.getAllRedoActionTitles() );
+ assertArrayEquals( "unexpected Undo descriptions after undoing the second custom action",
+ new String[0], i_undoManager.getAllUndoActionTitles() );
+
+ // check the actions are disposed when the stacks are cleared
+ i_undoManager.clear();
+ assertTrue( action1.disposed() && action2.disposed() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testLocking( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // implicit Undo actions, triggered by changes to the document
+ assertFalse( "unexpected initial locking state", i_undoManager.isLocked() );
+ i_undoManager.lock();
+ assertTrue( "just locked the manager, why does it lie?", i_undoManager.isLocked() );
+ m_currentTestCase.doSingleModification();
+ assertEquals( "when the Undo manager is locked, no implicit additions should happen",
+ 0, m_undoListener.getUndoActionsAdded() );
+ i_undoManager.unlock();
+ assertEquals( "unlock is not expected to add collected actions - they should be discarded",
+ 0, m_undoListener.getUndoActionsAdded() );
+ assertFalse( "just unlocked the manager, why does it lie?", i_undoManager.isLocked() );
+
+ // explicit Undo actions
+ i_undoManager.lock();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.unlock();
+ assertEquals( "explicit Undo actions are expected to be ignored when the manager is locked",
+ 0, m_undoListener.getUndoActionsAdded() );
+
+ // Undo contexts while being locked
+ i_undoManager.lock();
+ i_undoManager.enterUndoContext( "Dummy Context" );
+ i_undoManager.enterHiddenUndoContext();
+ assertEquals( "entering Undo contexts should be ignored when the manager is locked", 0, m_undoListener.getCurrentUndoContextDepth() );
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ i_undoManager.unlock();
+
+ // |unlock| error handling
+ assertFalse( "internal error: manager should not be locked at this point in time", i_undoManager.isLocked() );
+ boolean caughtExpected = false;
+ try { i_undoManager.unlock(); } catch ( final NotLockedException e ) { caughtExpected = true; }
+ assertTrue( "unlocking the manager when it is not locked should throw", caughtExpected );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testContextHandling( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ // .............................................................................................................
+ // part I: non-empty contexts
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // put one action on the undo and one on the redo stack, as precondition for the following tests
+ final XUndoAction undoAction1 = new CustomUndoAction( "Undo Action 1" );
+ i_undoManager.addUndoAction( undoAction1 );
+ final XUndoAction undoAction2 = new CustomUndoAction( "Undo Action 2" );
+ i_undoManager.addUndoAction( undoAction2 );
+ i_undoManager.undo();
+ assertTrue( "precondition for context handling tests not met (1)", i_undoManager.isUndoPossible() );
+ assertTrue( "precondition for context handling tests not met (2)", i_undoManager.isRedoPossible() );
+ assertArrayEquals( new String[] { undoAction1.getTitle() }, i_undoManager.getAllUndoActionTitles() );
+ assertArrayEquals( new String[] { undoAction2.getTitle() }, i_undoManager.getAllRedoActionTitles() );
+
+ final String[] expectedRedoActionComments = new String[] { undoAction2.getTitle() };
+ assertArrayEquals( expectedRedoActionComments, i_undoManager.getAllRedoActionTitles() );
+
+ // enter a context
+ i_undoManager.enterUndoContext( "Undo Context" );
+ // this should not (yet) touch the redo stack
+ assertArrayEquals( expectedRedoActionComments, i_undoManager.getAllRedoActionTitles() );
+ assertEquals( "unexpected undo context depth after entering a context", 1, m_undoListener.getCurrentUndoContextDepth() );
+ // add a single action
+ XUndoAction undoAction3 = new CustomUndoAction( "Undo Action 3" );
+ i_undoManager.addUndoAction( undoAction3 );
+ // still, the redo stack should be untouched - added at a lower level does not affect it at all
+ assertArrayEquals( expectedRedoActionComments, i_undoManager.getAllRedoActionTitles() );
+
+ // while the context is open, its title should already contribute to the stack, ...
+ assertEquals( "Undo Context", i_undoManager.getCurrentUndoActionTitle() );
+ // ... getAllUndo/RedoActionTitles should operate on the top level, not on the level defined by the open
+ // context, ...
+ assertArrayEquals( new String[] { "Undo Context", undoAction1.getTitle() },
+ i_undoManager.getAllUndoActionTitles() );
+ // ... but Undo and Redo should be impossible as long as the context is open
+ assertFalse( i_undoManager.isUndoPossible() );
+ assertFalse( i_undoManager.isRedoPossible() );
+
+ // leave the context, check the listener has been notified properly, and the notified context depth is correct
+ i_undoManager.leaveUndoContext();
+ assertTrue( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ assertFalse( m_undoListener.hasContextBeenCancelled() );
+ assertEquals( "unexpected undo context depth leaving a non-empty context", 0, m_undoListener.getCurrentUndoContextDepth() );
+ // leaving a non-empty context should have cleare the redo stack
+ assertArrayEquals( new String[0], i_undoManager.getAllRedoActionTitles() );
+ assertTrue( m_undoListener.wasRedoStackCleared() );
+
+ // .............................................................................................................
+ // part II: empty contexts
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // enter a context, leave it immediately without adding an action to it
+ i_undoManager.enterUndoContext( "Undo Context" );
+ i_undoManager.leaveUndoContext();
+ assertFalse( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ assertTrue( m_undoListener.hasContextBeenCancelled() );
+ assertFalse( "leaving an empty context should silently remove it, and not contribute to the stack",
+ i_undoManager.isUndoPossible() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testNestedContexts( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+ i_undoManager.enterUndoContext( "context 1" );
+ i_undoManager.enterUndoContext( "context 1.1" );
+ final CustomUndoAction action1 = new CustomUndoAction( "action 1.1.1" );
+ i_undoManager.addUndoAction( action1 );
+ i_undoManager.enterUndoContext( "context 1.1.2" );
+ final CustomUndoAction action2 = new CustomUndoAction( "action 1.1.2.1" );
+ i_undoManager.addUndoAction( action2 );
+ i_undoManager.leaveUndoContext();
+ final CustomUndoAction action3 = new CustomUndoAction( "action 1.1.3" );
+ i_undoManager.addUndoAction( action3 );
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ final CustomUndoAction action4 = new CustomUndoAction( "action 1.2" );
+ i_undoManager.addUndoAction( action4 );
+
+ i_undoManager.undo();
+ assertEquals( "undoing a single action notifies a wrong title", action4.getTitle(), m_undoListener.getMostRecentlyUndoneTitle() );
+ assertTrue( "custom Undo not called", action4.undoCalled() );
+ assertFalse( "too many custom Undos called", action1.undoCalled() || action2.undoCalled() || action3.undoCalled() );
+ i_undoManager.undo();
+ assertTrue( "nested actions not properly undone", action1.undoCalled() && action2.undoCalled() && action3.undoCalled() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testErrorHandling( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // try retrieving the comments for the current Undo/Redo - this should fail
+ boolean caughtExpected = false;
+ try { i_undoManager.getCurrentUndoActionTitle(); }
+ catch( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "trying the title of the current Undo action is expected to fail for an empty stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.getCurrentRedoActionTitle(); }
+ catch( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "trying the title of the current Redo action is expected to fail for an empty stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.undo(); } catch ( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "undo should throw if no Undo action is on the stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.redo(); } catch ( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "redo should throw if no Redo action is on the stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.leaveUndoContext(); } catch ( final InvalidStateException e ) { caughtExpected = true; }
+ assertTrue( "leaveUndoContext should throw if no context is currently open", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.addUndoAction( null ); } catch ( com.sun.star.lang.IllegalArgumentException e ) { caughtExpected = true; }
+ assertTrue( "adding a NULL action should be rejected", caughtExpected );
+
+ i_undoManager.reset();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.undo();
+ i_undoManager.enterUndoContext( "Undo Context" );
+ // those methods should fail when a context is open:
+ final String[] methodNames = new String[] { "undo", "redo", "clear", "clearRedo" };
+ for ( int i=0; i 0 (the above test was for nesting level == 0)?
+ caughtExpected = false;
+ try { i_undoManager.enterHiddenUndoContext(); }
+ catch( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "at a nesting level > 0, denied hidden contexts does not work as expected", caughtExpected );
+ final CustomUndoAction action3 = new CustomUndoAction( "action 3" );
+ i_undoManager.addUndoAction( action3 );
+ i_undoManager.enterHiddenUndoContext();
+ assertEquals( "mixed hidden/normal context do are not properly notified", 4, m_undoListener.getCurrentUndoContextDepth() );
+ i_undoManager.leaveUndoContext();
+ assertTrue( "the left context was empty - why wasn't 'cancelled' notified?", m_undoListener.hasContextBeenCancelled() );
+ assertFalse( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ i_undoManager.undo();
+ assertFalse( "one action too much has been undone", action0.undoCalled() );
+ assertTrue( action1.undoCalled() );
+ assertTrue( action2.undoCalled() );
+ assertTrue( action3.undoCalled() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private XComponentContext getContext()
+ {
+ return m_connection.getComponentContext();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private XMultiServiceFactory getORB()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(
+ XMultiServiceFactory.class, getContext().getServiceManager() );
+ return xMSF1;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @BeforeClass
+ public static void setUpConnection() throws Exception
+ {
+ System.out.println( "--------------------------------------------------------------------------------" );
+ System.out.println( "starting class: " + UndoManager.class.getName() );
+ System.out.println( "connecting ..." );
+ m_connection.setUp();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @AfterClass
+ public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println();
+ System.out.println( "tearing down connection" );
+ m_connection.tearDown();
+ System.out.println( "finished class: " + UndoManager.class.getName() );
+ System.out.println( "--------------------------------------------------------------------------------" );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static class CustomUndoAction implements XUndoAction, XComponent
+ {
+ CustomUndoAction()
+ {
+ m_title = "Custom Undo Action";
+ }
+
+ CustomUndoAction( final String i_title )
+ {
+ m_title = i_title;
+ }
+
+ public String getTitle()
+ {
+ return m_title;
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ m_undoCalled = true;
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ m_redoCalled = true;
+ }
+
+ public void dispose()
+ {
+ m_disposed = true;
+ }
+
+ public void addEventListener( XEventListener xl )
+ {
+ fail( "addEventListener is not expected to be called in the course of this test" );
+ }
+
+ public void removeEventListener( XEventListener xl )
+ {
+ fail( "removeEventListener is not expected to be called in the course of this test" );
+ }
+
+ boolean undoCalled() { return m_undoCalled; }
+ boolean redoCalled() { return m_redoCalled; }
+ boolean disposed() { return m_disposed; }
+
+ private final String m_title;
+ private boolean m_undoCalled = false;
+ private boolean m_redoCalled = false;
+ private boolean m_disposed = false;
+ }
+
+ private static short FAIL_UNDO = 1;
+ private static short FAIL_REDO = 2;
+
+ private static class FailingUndoAction implements XUndoAction
+ {
+ FailingUndoAction( final short i_failWhich )
+ {
+ m_failWhich = i_failWhich;
+ }
+
+ public String getTitle()
+ {
+ return "failing undo";
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ if ( m_failWhich != FAIL_REDO )
+ impl_throw();
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ if ( m_failWhich != FAIL_UNDO )
+ impl_throw();
+ }
+
+ private void impl_throw() throws UndoFailedException
+ {
+ throw new UndoFailedException();
+ }
+
+ private final short m_failWhich;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static class CountingUndoAction implements XUndoAction
+ {
+ CountingUndoAction( final int i_expectedOrder, final Object i_lock, final Integer[] i_actionsUndoneCounter )
+ {
+ m_expectedOrder = i_expectedOrder;
+ m_lock = i_lock;
+ m_actionsUndoneCounter = i_actionsUndoneCounter;
+ }
+
+ public String getTitle()
+ {
+ return "Counting Undo Action";
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ synchronized( m_lock )
+ {
+ assertEquals( "Undo action called out of order", m_expectedOrder, m_actionsUndoneCounter[0].intValue() );
+ ++m_actionsUndoneCounter[0];
+ }
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ fail( "CountingUndoAction.redo is not expected to be called in this test." );
+ }
+ private final int m_expectedOrder;
+ private final Object m_lock;
+ private Integer[] m_actionsUndoneCounter;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static String getCallbackUndoContextTitle()
+ {
+ return "Some Unfinished Undo Context";
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static String getCallbackComponentServiceName()
+ {
+ return "org.openoffice.complex.sfx2.Callback";
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ /**
+ * a factory for a callback component which, at OOo runtime, is inserted into OOo's "component repository"
+ */
+ private class CallbackComponentFactory implements XSingleComponentFactory, XServiceInfo, XComponent
+ {
+ public Object createInstanceWithContext( XComponentContext i_context ) throws com.sun.star.uno.Exception
+ {
+ return new CallbackComponent();
+ }
+
+ public Object createInstanceWithArgumentsAndContext( Object[] i_arguments, XComponentContext i_context ) throws com.sun.star.uno.Exception
+ {
+ return createInstanceWithContext( i_context );
+ }
+
+ public String getImplementationName()
+ {
+ return "org.openoffice.complex.sfx2.CallbackComponent";
+ }
+
+ public boolean supportsService( String i_serviceName )
+ {
+ return i_serviceName.equals( getCallbackComponentServiceName() );
+ }
+
+ public String[] getSupportedServiceNames()
+ {
+ return new String[] { getCallbackComponentServiceName() };
+ }
+
+ public void dispose()
+ {
+ final EventObject event = new EventObject( this );
+
+ final ArrayList eventListenersCopy = (ArrayList)m_eventListeners.clone();
+ final Iterator iter = eventListenersCopy.iterator();
+ while ( iter.hasNext() )
+ {
+ ((XEventListener)iter.next()).disposing( event );
+ }
+ }
+
+ public void addEventListener( XEventListener i_listener )
+ {
+ if ( i_listener != null )
+ m_eventListeners.add( i_listener );
+ }
+
+ public void removeEventListener( XEventListener i_listener )
+ {
+ m_eventListeners.remove( i_listener );
+ }
+
+ private final ArrayList m_eventListeners = new ArrayList();
+ };
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private class CallbackComponent implements XJob, XTypeProvider
+ {
+ CallbackComponent()
+ {
+ }
+
+ public Object execute( NamedValue[] i_parameters ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception
+ {
+ // this method is called from within the Basic script which is to check whether the OOo framework
+ // properly cleans up unfinished Undo contexts. It is called immediately after the context has been
+ // entered, so verify the expected Undo manager state.
+ assertEquals( getCallbackUndoContextTitle(), m_undoListener.getCurrentUndoContextTitle() );
+ assertEquals( 1, m_undoListener.getCurrentUndoContextDepth() );
+
+ synchronized( m_callbackCondition )
+ {
+ m_callbackCalled = true;
+ m_callbackCondition.notifyAll();
+ }
+ return m_closeAfterCallback ? "close" : "";
+ }
+
+ public Type[] getTypes()
+ {
+ final Class interfaces[] = getClass().getInterfaces();
+ Type types[] = new Type[ interfaces.length ];
+ for ( int i = 0; i < interfaces.length; ++i )
+ types[i] = new Type(interfaces[i]);
+ return types;
+ }
+
+ public byte[] getImplementationId()
+ {
+ return getClass().toString().getBytes();
+ }
+ }
+
+ private static final OfficeConnection m_connection = new OfficeConnection();
+ private DocumentTest m_currentTestCase;
+ private OfficeDocument m_currentDocument;
+ private UndoListener m_undoListener;
+ private CallbackComponentFactory m_callbackFactory = null;
+ private boolean m_callbackCalled = false;
+ private boolean m_closeAfterCallback = false;
+ private final Object m_callbackCondition = new Object();
+}
diff --git a/connectivity/qa/connectivity/makefile.mk b/sfx2/qa/complex/sfx2/makefile.mk
similarity index 53%
rename from connectivity/qa/connectivity/makefile.mk
rename to sfx2/qa/complex/sfx2/makefile.mk
index 785f20692da3..20b170fba3b4 100644
--- a/connectivity/qa/connectivity/makefile.mk
+++ b/sfx2/qa/complex/sfx2/makefile.mk
@@ -25,41 +25,60 @@
#
#*************************************************************************
-PRJ = ..$/..
-TARGET = GeneralTest
-PRJNAME = connectivity
-PACKAGE = complex$/connectivity
+.IF "$(OOO_JUNIT_JAR)" == ""
+nothing .PHONY:
+ @echo -----------------------------------------------------
+ @echo - JUnit not available, not building anything
+ @echo -----------------------------------------------------
+.ELSE # IF "$(OOO_JUNIT_JAR)" != ""
+
+PRJ = ../../..
+PRJNAME = sfx2
+TARGET = qa_complex
+PACKAGE = complex/sfx2
# --- Settings -----------------------------------------------------
.INCLUDE: settings.mk
#----- compile .java files -----------------------------------------
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-JAVAFILES =\
- $(TARGET).java
-
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
+JARFILES = OOoRunnerLight.jar ridl.jar test.jar test-tools.jar unoil.jar
+EXTRAJARFILES = $(OOO_JUNIT_JAR)
+JAVAFILES = $(shell @$(FIND) . -name "*.java") \
-#----- make a jar from compiled files ------------------------------
+#----- create a jar from compiled files ----------------------------
-MAXLINELENGTH = 100000
-
-JARCLASSDIRS = $(PACKAGE)
JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
+
+#----- JUnit tests class -------------------------------------------
+
+JAVATESTFILES = \
+ DocumentInfo.java \
+ DocumentProperties.java \
+ StandaloneDocumentInfo.java \
+ DocumentMetadataAccess.java \
+ UndoManager.java \
+
+# disabled: #i115674#
+# GlobalEventBroadcaster.java \
# --- Targets ------------------------------------------------------
-.IF "$(depend)" == ""
+.INCLUDE: target.mk
+
ALL : ALLTAR
-.ELSE
-ALL: ALLDEP
-.ENDIF
-.INCLUDE : target.mk
+# --- subsequent tests ---------------------------------------------
+.IF "$(OOO_SUBSEQUENT_TESTS)" != ""
-run:
- java -cp $(CLASSPATH)$(PATH_SEPERATOR)$(SOLARBINDIR)$/OOoRunner.jar org.openoffice.Runner -TestBase java_complex -o complex.connectivity.$(TARGET)
+.INCLUDE: installationtest.mk
+ALLTAR : javatest
+
+ # Sample how to debug
+ # JAVAIFLAGS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9003,suspend=y
+
+.END # "$(OOO_SUBSEQUENT_TESTS)" == ""
+
+.END # ELSE "$(OOO_JUNIT_JAR)" != ""
diff --git a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java b/sfx2/qa/complex/sfx2/standalonedocinfo/StandaloneDocumentInfoTest.java
similarity index 96%
rename from sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java
rename to sfx2/qa/complex/sfx2/standalonedocinfo/StandaloneDocumentInfoTest.java
index f5512bf9723b..d255f3d16822 100644
--- a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java
+++ b/sfx2/qa/complex/sfx2/standalonedocinfo/StandaloneDocumentInfoTest.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
+package complex.sfx2.standalonedocinfo;
public interface StandaloneDocumentInfoTest {
boolean test();
diff --git a/sfx2/qa/complex/standalonedocumentinfo/Test01.java b/sfx2/qa/complex/sfx2/standalonedocinfo/Test01.java
similarity index 97%
rename from sfx2/qa/complex/standalonedocumentinfo/Test01.java
rename to sfx2/qa/complex/sfx2/standalonedocinfo/Test01.java
index 2f9a6266b4e2..bf54bb4ca90b 100644
--- a/sfx2/qa/complex/standalonedocumentinfo/Test01.java
+++ b/sfx2/qa/complex/sfx2/standalonedocinfo/Test01.java
@@ -24,8 +24,10 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
+package complex.sfx2.standalonedocinfo;
+import complex.sfx2.standalonedocinfo.TestHelper;
+import complex.sfx2.standalonedocinfo.StandaloneDocumentInfoTest;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.document.XStandaloneDocumentInfo;
import com.sun.star.io.XTempFile;
diff --git a/sfx2/qa/complex/standalonedocumentinfo/TestHelper.java b/sfx2/qa/complex/sfx2/standalonedocinfo/TestHelper.java
similarity index 97%
rename from sfx2/qa/complex/standalonedocumentinfo/TestHelper.java
rename to sfx2/qa/complex/sfx2/standalonedocinfo/TestHelper.java
index f6d63e1b7793..a650ce9bb2e4 100644
--- a/sfx2/qa/complex/standalonedocumentinfo/TestHelper.java
+++ b/sfx2/qa/complex/sfx2/standalonedocinfo/TestHelper.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
+package complex.sfx2.standalonedocinfo;
public class TestHelper {
diff --git a/sfx2/qa/complex/framework/testdocuments/CUSTOM.odt b/sfx2/qa/complex/sfx2/testdocuments/CUSTOM.odt
similarity index 100%
rename from sfx2/qa/complex/framework/testdocuments/CUSTOM.odt
rename to sfx2/qa/complex/sfx2/testdocuments/CUSTOM.odt
diff --git a/sfx2/qa/complex/framework/testdocuments/TEST.odt b/sfx2/qa/complex/sfx2/testdocuments/TEST.odt
similarity index 100%
rename from sfx2/qa/complex/framework/testdocuments/TEST.odt
rename to sfx2/qa/complex/sfx2/testdocuments/TEST.odt
diff --git a/sfx2/qa/complex/framework/testdocuments/TESTRDFA.odt b/sfx2/qa/complex/sfx2/testdocuments/TESTRDFA.odt
similarity index 100%
rename from sfx2/qa/complex/framework/testdocuments/TESTRDFA.odt
rename to sfx2/qa/complex/sfx2/testdocuments/TESTRDFA.odt
diff --git a/sfx2/qa/complex/framework/testdocuments/empty.rdf b/sfx2/qa/complex/sfx2/testdocuments/empty.rdf
similarity index 100%
rename from sfx2/qa/complex/framework/testdocuments/empty.rdf
rename to sfx2/qa/complex/sfx2/testdocuments/empty.rdf
diff --git a/sfx2/qa/complex/framework/DialogThread.java b/sfx2/qa/complex/sfx2/tools/DialogThread.java
similarity index 79%
rename from sfx2/qa/complex/framework/DialogThread.java
rename to sfx2/qa/complex/sfx2/tools/DialogThread.java
index 7151ccbb292d..e67e65f218db 100644
--- a/sfx2/qa/complex/framework/DialogThread.java
+++ b/sfx2/qa/complex/sfx2/tools/DialogThread.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.framework.DocHelper;
+package complex.sfx2.tools;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XController;
@@ -37,9 +37,6 @@ import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.URL;
import com.sun.star.util.XURLTransformer;
-import java.lang.Thread;
-
-
/**
* This class opens a given dialog in a separate Thread by dispatching an url
*
@@ -55,21 +52,17 @@ public class DialogThread extends Thread {
this.m_url = url;
}
+ @Override
public void run() {
- XModel aModel = (XModel) UnoRuntime.queryInterface(XModel.class,
- m_xDoc);
+ XModel aModel = UnoRuntime.queryInterface( XModel.class, m_xDoc );
XController xController = aModel.getCurrentController();
//Opening Dialog
try {
- XDispatchProvider xDispProv = (XDispatchProvider) UnoRuntime.queryInterface(
- XDispatchProvider.class,
- xController.getFrame());
- XURLTransformer xParser = (com.sun.star.util.XURLTransformer) UnoRuntime.queryInterface(
- XURLTransformer.class,
- m_xMSF.createInstance(
- "com.sun.star.util.URLTransformer"));
+ XDispatchProvider xDispProv = UnoRuntime.queryInterface( XDispatchProvider.class, xController.getFrame() );
+ XURLTransformer xParser = UnoRuntime.queryInterface( XURLTransformer.class,
+ m_xMSF.createInstance( "com.sun.star.util.URLTransformer" ) );
// Because it's an in/out parameter
// we must use an array of URL objects.
diff --git a/sfx2/qa/complex/framework/TestDocument.java b/sfx2/qa/complex/sfx2/tools/TestDocument.java
similarity index 95%
rename from sfx2/qa/complex/framework/TestDocument.java
rename to sfx2/qa/complex/sfx2/tools/TestDocument.java
index 8cc6ef7756b1..120dca978bba 100644
--- a/sfx2/qa/complex/framework/TestDocument.java
+++ b/sfx2/qa/complex/sfx2/tools/TestDocument.java
@@ -25,12 +25,12 @@
*
************************************************************************/
-package complex.framework;
+package complex.sfx2.tools;
import java.io.File;
import org.openoffice.test.OfficeFileUrl;
-final class TestDocument {
+public final class TestDocument {
public static String getUrl(String name) {
return OfficeFileUrl.getAbsolute(new File("testdocuments", name));
}
diff --git a/sfx2/qa/complex/framework/WriterHelper.java b/sfx2/qa/complex/sfx2/tools/WriterHelper.java
similarity index 89%
rename from sfx2/qa/complex/framework/WriterHelper.java
rename to sfx2/qa/complex/sfx2/tools/WriterHelper.java
index d3f19703bb9d..4767028572bb 100644
--- a/sfx2/qa/complex/framework/WriterHelper.java
+++ b/sfx2/qa/complex/sfx2/tools/WriterHelper.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.framework.DocHelper;
+package complex.sfx2.tools;
import com.sun.star.accessibility.AccessibleRole;
import com.sun.star.accessibility.XAccessible;
@@ -40,7 +40,6 @@ import com.sun.star.text.XTextDocument;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.XCloseable;
-import complex.framework.DocHelper.DialogThread;
import java.io.PrintWriter;
import util.AccessibilityTools;
@@ -104,13 +103,12 @@ public class WriterHelper {
if (createButton.length() > 1) {
XExtendedToolkit tk = getToolkit();
- AccessibilityTools at = new AccessibilityTools();
Object atw = tk.getActiveTopWindow();
XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- XAccessible xRoot = at.getAccessibleObject(xWindow);
- XAccessibleContext buttonContext = at.getAccessibleObjectForRole(
+ XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWindow);
+ XAccessibleContext buttonContext = AccessibilityTools.getAccessibleObjectForRole(
xRoot,
AccessibleRole.PUSH_BUTTON,
createButton);
@@ -154,28 +152,26 @@ public class WriterHelper {
public XTextDocument DocByAutopilot(XMultiServiceFactory msf,
int[] indexes, boolean destroyLocal,
String bName) {
- XTextDocument xLocalDoc = WriterTools.createTextDoc(m_xMSF);
+ XTextDocument xTextDoc = WriterTools.createTextDoc(m_xMSF);
Object toolkit = null;
try {
toolkit = msf.createInstance("com.sun.star.awt.Toolkit");
} catch (com.sun.star.uno.Exception e) {
- e.printStackTrace();
+ e.printStackTrace( System.err );
}
XExtendedToolkit tk = UnoRuntime.queryInterface(XExtendedToolkit.class, toolkit);
shortWait();
- AccessibilityTools at = new AccessibilityTools();
-
Object atw = tk.getActiveTopWindow();
XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- XAccessible xRoot = at.getAccessibleObject(xWindow);
+ XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWindow);
- XAccessibleContext ARoot = at.getAccessibleObjectForRole(xRoot,
+ XAccessibleContext ARoot = AccessibilityTools.getAccessibleObjectForRole(xRoot,
AccessibleRole.MENU_BAR);
XAccessibleSelection sel = UnoRuntime.queryInterface(XAccessibleSelection.class, ARoot);
@@ -196,11 +192,11 @@ public class WriterHelper {
xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- xRoot = at.getAccessibleObject(xWindow);
+ xRoot = AccessibilityTools.getAccessibleObject(xWindow);
//at.printAccessibleTree(new PrintWriter(System.out),xRoot);
- XAccessibleAction action = UnoRuntime.queryInterface(XAccessibleAction.class, at.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, bName));
+ XAccessibleAction action = UnoRuntime.queryInterface(XAccessibleAction.class, AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, bName));
try {
action.doAccessibleAction(0);
@@ -213,11 +209,11 @@ public class WriterHelper {
xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- xRoot = at.getAccessibleObject(xWindow);
+ xRoot = AccessibilityTools.getAccessibleObject(xWindow);
- at.printAccessibleTree(new PrintWriter(System.out),xRoot);
+ AccessibilityTools.printAccessibleTree(new PrintWriter(System.out),xRoot);
- action = UnoRuntime.queryInterface(XAccessibleAction.class, at.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, "Yes"));
+ action = UnoRuntime.queryInterface(XAccessibleAction.class, AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, "Yes"));
try {
if (action != null) action.doAccessibleAction(0);
@@ -231,7 +227,7 @@ public class WriterHelper {
XTextDocument returnDoc = UnoRuntime.queryInterface(XTextDocument.class, xDesktop.getCurrentComponent());
if (destroyLocal) {
- closeDoc(xLocalDoc);
+ closeDoc(xTextDoc);
}
return returnDoc;
@@ -259,7 +255,7 @@ public class WriterHelper {
toolkit = m_xMSF.createInstance("com.sun.star.awt.Toolkit");
} catch (com.sun.star.uno.Exception e) {
System.out.println("Couldn't get toolkit");
- e.printStackTrace();
+ e.printStackTrace( System.err );
}
XExtendedToolkit tk = UnoRuntime.queryInterface(XExtendedToolkit.class, toolkit);
@@ -277,7 +273,7 @@ public class WriterHelper {
desk = m_xMSF.createInstance("com.sun.star.frame.Desktop");
} catch (com.sun.star.uno.Exception e) {
System.out.println("Couldn't get desktop");
- e.printStackTrace();
+ e.printStackTrace( System.err );
}
XDesktop xDesktop = UnoRuntime.queryInterface(XDesktop.class, desk);
diff --git a/sfx2/qa/complex/sfx2/undo/CalcDocumentTest.java b/sfx2/qa/complex/sfx2/undo/CalcDocumentTest.java
new file mode 100755
index 000000000000..34825fdbada9
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/CalcDocumentTest.java
@@ -0,0 +1,96 @@
+package complex.sfx2.undo;
+
+import org.openoffice.test.tools.SpreadsheetDocument;
+import com.sun.star.table.XCellRange;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.table.XCell;
+import com.sun.star.uno.UnoRuntime;
+import org.openoffice.test.tools.DocumentType;
+import static org.junit.Assert.*;
+
+/**
+ * implements the {@link DocumentTest} interface on top of a spreadsheet document
+ * @author frank.schoenheit@oracle.com
+ */
+public class CalcDocumentTest extends DocumentTestBase
+{
+ public CalcDocumentTest( final XMultiServiceFactory i_orb ) throws Exception
+ {
+ super( i_orb, DocumentType.CALC );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "spreadsheet document";
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ cellA1.setValue( INIT_VALUE );
+ assertEquals( "initializing the cell value didn't work", cellA1.getValue(), INIT_VALUE, 0 );
+
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+
+ for ( int i=0; i<12; ++i )
+ {
+ XCell cell = range.getCellByPosition( 1, i );
+ cell.setFormula( "" );
+ }
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ assertEquals( "initial cell value not as expected", INIT_VALUE, cellA1.getValue(), 0 );
+ cellA1.setValue( MODIFIED_VALUE );
+ assertEquals( "modified cell value not as expected", MODIFIED_VALUE, cellA1.getValue(), 0 );
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ assertEquals( "cell A1 doesn't have its initial value", INIT_VALUE, cellA1.getValue(), 0 );
+
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+ for ( int i=0; i<12; ++i )
+ {
+ final XCell cell = range.getCellByPosition( 1, i );
+ assertEquals( "Cell B" + (i+1) + " not having its initial value (an empty string)", "", cell.getFormula() );
+ }
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ assertEquals( "cell A1 doesn't have the value which we gave it", MODIFIED_VALUE, cellA1.getValue(), 0 );
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+
+ final String[] months = new String[] {
+ "January", "February", "March", "April", "May", "June", "July", "August",
+ "September", "October", "November", "December" };
+ for ( int i=0; i<12; ++i )
+ {
+ final XCell cell = range.getCellByPosition( 1, i );
+ cell.setFormula( months[i] );
+ }
+ return 12;
+ }
+
+ private XCell getCellA1() throws com.sun.star.uno.Exception
+ {
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+ return range.getCellByPosition( 0, 0 );
+ }
+
+ private static final double INIT_VALUE = 100.0;
+ private static final double MODIFIED_VALUE = 200.0;
+}
diff --git a/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java b/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java
new file mode 100755
index 000000000000..7c8421ec6e5b
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java
@@ -0,0 +1,277 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ *************************************************************************/
+
+package complex.sfx2.undo;
+
+import com.sun.star.chart2.XAxis;
+import com.sun.star.chart2.XCoordinateSystem;
+import com.sun.star.chart2.XCoordinateSystemContainer;
+import com.sun.star.awt.Size;
+import com.sun.star.beans.NamedValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.chart2.XChartDocument;
+import com.sun.star.chart2.XDiagram;
+import com.sun.star.container.XIndexAccess;
+import com.sun.star.document.UndoFailedException;
+import com.sun.star.document.XUndoAction;
+import com.sun.star.document.XUndoManager;
+import com.sun.star.document.XUndoManagerSupplier;
+import com.sun.star.drawing.XShape;
+import com.sun.star.embed.EmbedStates;
+import com.sun.star.embed.EmbedVerbs;
+import com.sun.star.embed.VerbDescriptor;
+import com.sun.star.embed.WrongStateException;
+import com.sun.star.embed.XEmbeddedObject;
+import com.sun.star.embed.XStateChangeBroadcaster;
+import com.sun.star.embed.XStateChangeListener;
+import com.sun.star.lang.EventObject;
+import com.sun.star.lang.IndexOutOfBoundsException;
+import com.sun.star.lang.WrappedTargetException;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.text.XTextContent;
+import com.sun.star.text.XTextRange;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.view.XSelectionSupplier;
+import org.openoffice.test.tools.DocumentType;
+import org.openoffice.test.tools.OfficeDocument;
+import static org.junit.Assert.*;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+public class ChartDocumentTest implements DocumentTest
+{
+ public ChartDocumentTest( final XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception, InterruptedException
+ {
+ m_textDocument = OfficeDocument.blankDocument( i_orb, DocumentType.WRITER );
+
+ // create a OLE shape in the document
+ final XMultiServiceFactory factory = UnoRuntime.queryInterface( XMultiServiceFactory.class, m_textDocument.getDocument() );
+ final String shapeServiceName = "com.sun.star.text.TextEmbeddedObject";
+ final XPropertySet shapeProps = UnoRuntime.queryInterface( XPropertySet.class, factory.createInstance( shapeServiceName ) );
+ shapeProps.setPropertyValue("CLSID", "12dcae26-281f-416f-a234-c3086127382e");
+
+ final XShape shape = UnoRuntime.queryInterface( XShape.class, shapeProps );
+ shape.setSize( new Size( 16000, 9000 ) );
+
+ final XTextContent chartTextContent = UnoRuntime.queryInterface( XTextContent.class, shapeProps );
+
+ final XSelectionSupplier selSupplier = UnoRuntime.queryInterface( XSelectionSupplier.class,
+ m_textDocument.getCurrentView().getController() );
+ final Object selection = selSupplier.getSelection();
+ final XTextRange textRange = getAssociatedTextRange( selection );
+ if ( textRange == null )
+ throw new RuntimeException( "can't locate a text range" );
+
+ // insert the chart
+ textRange.getText().insertTextContent(textRange, chartTextContent, false);
+
+ // retrieve the chart model
+ XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, shapeProps.getPropertyValue( "Model" ) );
+ m_chartDocument = new OfficeDocument( i_orb, chartDoc );
+
+ // actually activate the object
+ final XEmbeddedObject embeddedChart = UnoRuntime.queryInterface( XEmbeddedObject.class,
+ shapeProps.getPropertyValue( "EmbeddedObject" ) );
+ embeddedChart.doVerb( EmbedVerbs.MS_OLEVERB_SHOW );
+
+ final int state = embeddedChart.getCurrentState();
+ if ( state != EmbedStates.UI_ACTIVE )
+ fail( "unable to activate the embedded chart" );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "chart document";
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+ wallProperties.setPropertyValue( "FillStyle", com.sun.star.drawing.FillStyle.SOLID );
+ wallProperties.setPropertyValue( "FillColor", 0x00FFFFFF );
+ }
+
+ public void closeDocument()
+ {
+ m_textDocument.close();
+ }
+
+ private XPropertySet impl_getWallProperties()
+ {
+ final XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, m_chartDocument.getDocument() );
+ final XDiagram diagram = chartDoc.getFirstDiagram();
+ final XPropertySet wallProperties = diagram.getWall();
+ return wallProperties;
+ }
+
+ private XPropertySet impl_getYAxisProperties()
+ {
+ XPropertySet axisProperties = null;
+ try
+ {
+ final XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, m_chartDocument.getDocument() );
+ final XDiagram diagram = chartDoc.getFirstDiagram();
+ final XCoordinateSystemContainer coordContainer = UnoRuntime.queryInterface( XCoordinateSystemContainer.class, diagram );
+ final XCoordinateSystem[] coordSystems = coordContainer.getCoordinateSystems();
+ final XCoordinateSystem coordSystem = coordSystems[0];
+ final XAxis primaryYAxis = coordSystem.getAxisByDimension( 1, 0 );
+ axisProperties = UnoRuntime.queryInterface( XPropertySet.class, primaryYAxis );
+ }
+ catch ( Exception ex )
+ {
+ fail( "internal error: could not retrieve primary Y axis properties" );
+ }
+ return axisProperties;
+ }
+
+ private XUndoManager impl_getUndoManager()
+ {
+ final XUndoManagerSupplier undoManagerSupp = UnoRuntime.queryInterface( XUndoManagerSupplier.class, m_chartDocument.getDocument() );
+ final XUndoManager undoManager = undoManagerSupp.getUndoManager();
+ return undoManager;
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+
+ // simulate an Undo action, as long as the chart implementation doesn't add Undo actions itself
+ final XUndoManager undoManager = impl_getUndoManager();
+ undoManager.addUndoAction( new PropertyUndoAction( wallProperties, "FillColor", 0xCCFF44 ) );
+ // (the UndoAction will actually set the property value)
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+ assertEquals( 0x00FFFFFF, ((Integer)wallProperties.getPropertyValue( "FillColor" )).intValue() );
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+ assertEquals( 0xCCFF44, ((Integer)wallProperties.getPropertyValue( "FillColor" )).intValue() );
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet axisProperties = impl_getYAxisProperties();
+
+ final XUndoManager undoManager = impl_getUndoManager();
+ undoManager.addUndoAction( new PropertyUndoAction( axisProperties, "LineWidth", 300 ) );
+ undoManager.addUndoAction( new PropertyUndoAction( axisProperties, "LineColor", 0x000000 ) );
+
+ return 2;
+ }
+
+ public OfficeDocument getDocument()
+ {
+ return m_chartDocument;
+ }
+
+ private XTextRange getAssociatedTextRange( final Object i_object ) throws WrappedTargetException, IndexOutOfBoundsException
+ {
+ // possible cases:
+ // 1. a container of other objects - e.g. selection of 0 to n text portions, or 1 to n drawing objects
+ final XIndexAccess indexer = UnoRuntime.queryInterface( XIndexAccess.class, i_object );
+ if ((indexer != null) && indexer.getCount() > 0) {
+ final int count = indexer.getCount();
+ for (int i = 0; i < count; ++i) {
+ final XTextRange range = getAssociatedTextRange( indexer.getByIndex(i) );
+ if (range != null) {
+ return range;
+ }
+ }
+ }
+ // 2. another TextContent, having an anchor we can use
+ final XTextContent textContent = UnoRuntime.queryInterface(XTextContent.class, i_object);
+ if (textContent != null) {
+ final XTextRange range = textContent.getAnchor();
+ if (range != null) {
+ return range;
+ }
+ }
+
+ // an object which supports XTextRange directly
+ final XTextRange range = UnoRuntime.queryInterface(XTextRange.class, i_object);
+ if (range != null) {
+ return range;
+ }
+
+ return null;
+ }
+
+ private static class PropertyUndoAction implements XUndoAction
+ {
+ PropertyUndoAction( final XPropertySet i_component, final String i_propertyName, final Object i_newValue ) throws com.sun.star.uno.Exception
+ {
+ m_component = i_component;
+ m_propertyName = i_propertyName;
+ m_newValue = i_newValue;
+
+ m_oldValue = i_component.getPropertyValue( m_propertyName );
+ i_component.setPropertyValue( m_propertyName, m_newValue );
+ }
+
+ public String getTitle()
+ {
+ return "some dummy Undo Action";
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ try
+ {
+ m_component.setPropertyValue( m_propertyName, m_oldValue );
+ }
+ catch ( com.sun.star.uno.Exception ex )
+ {
+ throw new UndoFailedException( "", this, ex );
+ }
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ try
+ {
+ m_component.setPropertyValue( m_propertyName, m_newValue );
+ }
+ catch ( com.sun.star.uno.Exception ex )
+ {
+ throw new UndoFailedException( "", this, ex );
+ }
+ }
+
+ private final XPropertySet m_component;
+ private final String m_propertyName;
+ private final Object m_oldValue;
+ private final Object m_newValue;
+ }
+
+ private final OfficeDocument m_textDocument;
+ private final OfficeDocument m_chartDocument;
+}
diff --git a/sfx2/qa/complex/sfx2/undo/DocumentTest.java b/sfx2/qa/complex/sfx2/undo/DocumentTest.java
new file mode 100755
index 000000000000..d6de90884673
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/DocumentTest.java
@@ -0,0 +1,61 @@
+package complex.sfx2.undo;
+
+import org.openoffice.test.tools.OfficeDocument;
+
+/**
+ * wrapper around an OfficeDocument, for running a standardized test procedure (related do Undo functionality)
+ * on the document.
+ *
+ * @author frank.schoenheit@oracle.com
+ */
+public interface DocumentTest
+{
+ /**
+ * returns a human-readable description for the document/type which the tests operates on
+ */
+ public String getDocumentDescription();
+
+ /**
+ * initializes the document to a state where the subsequent tests can be ran
+ */
+ public void initializeDocument() throws com.sun.star.uno.Exception;
+
+ /**
+ * closes the document which the test is based on
+ */
+ public void closeDocument();
+
+ /**
+ * does a simple modification to the document, which results in one Undo action being auto-generated
+ * by the OOo implementation
+ */
+ public void doSingleModification() throws com.sun.star.uno.Exception;
+
+ /**
+ * verifies the document is in the same state as after {@link #initializeDocument}
+ */
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception;
+
+ /**
+ * verifies the document is in the state as expected after {@link #doSingleModification}
+ * @throws com.sun.star.uno.Exception
+ */
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception;
+
+ /**
+ * does multiple modifications do the document, which would normally result in multiple Undo actions.
+ *
+ * The test framework will encapsulate the call into an {@link XUndoManager.enterUndoContext()} and
+ * {@link XUndoManager.leaveUndoContext()} call.
+ *
+ * @return
+ * the number of modifications done to the document. The caller assumes (and asserts) that the number
+ * of actions on the Undo stack equals this number.
+ */
+ public int doMultipleModifications() throws com.sun.star.uno.Exception;
+
+ /**
+ * returns the document which the test operates on
+ */
+ public OfficeDocument getDocument();
+}
diff --git a/sfx2/qa/complex/sfx2/undo/DocumentTestBase.java b/sfx2/qa/complex/sfx2/undo/DocumentTestBase.java
new file mode 100755
index 000000000000..11adc80c2e85
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/DocumentTestBase.java
@@ -0,0 +1,29 @@
+package complex.sfx2.undo;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.Exception;
+import org.openoffice.test.tools.DocumentType;
+import org.openoffice.test.tools.OfficeDocument;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+abstract class DocumentTestBase implements DocumentTest
+{
+ DocumentTestBase( final XMultiServiceFactory i_orb, final DocumentType i_docType ) throws Exception
+ {
+ m_document = OfficeDocument.blankDocument( i_orb, i_docType );
+ }
+
+ public OfficeDocument getDocument()
+ {
+ return m_document;
+ }
+
+ public void closeDocument()
+ {
+ m_document.close();
+ }
+
+ protected final OfficeDocument m_document;
+}
diff --git a/connectivity/qa/connectivity/GeneralTest.java b/sfx2/qa/complex/sfx2/undo/DrawDocumentTest.java
old mode 100644
new mode 100755
similarity index 54%
rename from connectivity/qa/connectivity/GeneralTest.java
rename to sfx2/qa/complex/sfx2/undo/DrawDocumentTest.java
index a69ac5c1048f..d98e1372dea5
--- a/connectivity/qa/connectivity/GeneralTest.java
+++ b/sfx2/qa/complex/sfx2/undo/DrawDocumentTest.java
@@ -1,5 +1,4 @@
/*************************************************************************
- *
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
@@ -23,40 +22,25 @@
*
* for a copy of the LGPLv3 License.
*
- ************************************************************************/
-package complex.connectivity;
+ *************************************************************************/
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.sdbc.*;
+package complex.sfx2.undo;
import com.sun.star.lang.XMultiServiceFactory;
+import org.openoffice.test.tools.DocumentType;
-import complexlib.ComplexTestCase;
-
-
-//import complex.connectivity.DBaseStringFunctions;
-
-public class GeneralTest extends ComplexTestCase {
-
- public String[] getTestMethodNames() {
- return new String[] { "test" };
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+public class DrawDocumentTest extends DrawingOrPresentationDocumentTest
+{
+ public DrawDocumentTest( XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, DocumentType.DRAWING );
}
- public String getTestObjectName() {
- return "GeneralTest";
- }
- public void assure2(String s,boolean b){
- assure(s,b);
- }
-
- public void test() throws com.sun.star.uno.Exception,com.sun.star.beans.UnknownPropertyException {
- try
- {
- XDriverManager driverManager = UnoRuntime.queryInterface( XDriverManager.class, ((XMultiServiceFactory)param.getMSF()).createInstance( "com.sun.star.sdbc.DriverManager" ) );
- String databaseURL = "sdbc:calc:singin' in the rain" ;
- XConnection catalogConnection = driverManager.getConnection(databaseURL);
- failed();
- }
- catch(SQLException e){}
+ public String getDocumentDescription()
+ {
+ return "drawing document";
}
}
diff --git a/sfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java b/sfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java
new file mode 100755
index 000000000000..916e1908e93d
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java
@@ -0,0 +1,196 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package complex.sfx2.undo;
+
+import com.sun.star.awt.Rectangle;
+import com.sun.star.document.XUndoManager;
+import com.sun.star.document.XUndoManagerSupplier;
+import com.sun.star.document.XUndoAction;
+import com.sun.star.awt.Point;
+import com.sun.star.awt.Size;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.drawing.CircleKind;
+import com.sun.star.drawing.XDrawPages;
+import com.sun.star.drawing.XDrawPagesSupplier;
+import com.sun.star.drawing.XShape;
+import com.sun.star.drawing.XShapes;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+import org.openoffice.test.tools.DocumentType;
+import static org.junit.Assert.*;
+
+/**
+ * implements the {@link DocumentTest} interface on top of a drawing document
+ * @author frank.schoenheit@oracle.com
+ */
+public abstract class DrawingOrPresentationDocumentTest extends DocumentTestBase
+{
+ public DrawingOrPresentationDocumentTest( XMultiServiceFactory i_orb, final DocumentType i_docType ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, i_docType );
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ // remove all shapes - Impress has two default shapes in a new doc; just get rid of them
+ final XShapes firstPageShapes = getFirstPageShapes();
+ while ( firstPageShapes.getCount() > 0 )
+ firstPageShapes.remove( UnoRuntime.queryInterface( XShape.class, firstPageShapes.getByIndex( 0 ) ) );
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ // add a simple centered shape to the first page
+ Rectangle pagePlayground = impl_getFirstPagePlayground();
+ impl_createCircleShape(
+ ( pagePlayground.X + ( pagePlayground.Width - BIG_CIRCLE_SIZE ) / 2 ),
+ ( pagePlayground.Y + ( pagePlayground.Height - BIG_CIRCLE_SIZE ) / 2 ),
+ BIG_CIRCLE_SIZE,
+ FILL_COLOR
+ );
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XShapes firstPageShapes = getFirstPageShapes();
+ assertEquals( "there should be no shapes at all", 0, firstPageShapes.getCount() );
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XShapes firstPageShapes = getFirstPageShapes();
+ assertEquals( "there should be one shape, not more, not less", 1, firstPageShapes.getCount() );
+
+ final Object shape = firstPageShapes.getByIndex(0);
+ verifyShapeGeometry( shape, BIG_CIRCLE_SIZE, BIG_CIRCLE_SIZE );
+ final XPropertySet shapeProps = UnoRuntime.queryInterface( XPropertySet.class, shape );
+ assertEquals( "wrong circle tpye", CIRCLE_TYPE.getValue(), ((CircleKind)shapeProps.getPropertyValue( "CircleKind" )).getValue() );
+ //assertEquals( "wrong circle fill color", FILL_COLOR, ((Integer)shapeProps.getPropertyValue( "FillColor" )).intValue() );
+ // disable this particular check: A bug in the drawing layer API restores the FillColor to its
+ // default value upon re-insertion. This is issue #i115080#
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ // add a simple centered shape to the first page
+ Rectangle pagePlayground = impl_getFirstPagePlayground();
+ impl_createCircleShape(
+ pagePlayground.X,
+ pagePlayground.Y,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ impl_createCircleShape(
+ pagePlayground.X + pagePlayground.Width - SMALL_CIRCLE_SIZE,
+ pagePlayground.Y,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ impl_createCircleShape(
+ pagePlayground.X,
+ pagePlayground.Y + pagePlayground.Height - SMALL_CIRCLE_SIZE,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ impl_createCircleShape(
+ pagePlayground.X + pagePlayground.Width - SMALL_CIRCLE_SIZE,
+ pagePlayground.Y + pagePlayground.Height - SMALL_CIRCLE_SIZE,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ return 4;
+ }
+
+ private void impl_createCircleShape( final int i_x, final int i_y, final int i_size, final int i_color ) throws com.sun.star.uno.Exception
+ {
+ final XPropertySet shapeProps = getDocument().createInstance( "com.sun.star.drawing.EllipseShape", XPropertySet.class );
+ shapeProps.setPropertyValue( "CircleKind", CIRCLE_TYPE );
+ shapeProps.setPropertyValue( "FillColor", i_color );
+
+ final XShape shape = UnoRuntime.queryInterface( XShape.class, shapeProps );
+ final Size shapeSize = new Size( i_size, i_size );
+ shape.setSize( shapeSize );
+ final Point shapePos = new Point( i_x, i_y );
+ shape.setPosition( shapePos );
+
+ final XShapes pageShapes = UnoRuntime.queryInterface( XShapes.class, getFirstPageShapes() );
+ pageShapes.add( shape );
+
+ // Sadly, Draw/Impress currently do not create Undo actions for programmatic changes to the document.
+ // Which renders the test here slightly useless ... unless we fake the Undo actions ourself.
+ final XUndoManagerSupplier suppUndoManager = UnoRuntime.queryInterface( XUndoManagerSupplier.class, getDocument().getDocument() );
+ final XUndoManager undoManager = suppUndoManager.getUndoManager();
+ undoManager.addUndoAction( new ShapeInsertionUndoAction( shape, pageShapes ) );
+ }
+
+ private Rectangle impl_getFirstPagePlayground() throws com.sun.star.uno.Exception
+ {
+ final XShapes firstPageShapes = getFirstPageShapes();
+ final XPropertySet firstPageProps = UnoRuntime.queryInterface( XPropertySet.class, firstPageShapes );
+ final int pageWidth = ((Integer)firstPageProps.getPropertyValue( "Width" )).intValue();
+ final int pageHeight = ((Integer)firstPageProps.getPropertyValue( "Height" )).intValue();
+ final int borderLeft = ((Integer)firstPageProps.getPropertyValue( "BorderLeft" )).intValue();
+ final int borderTop = ((Integer)firstPageProps.getPropertyValue( "BorderTop" )).intValue();
+ final int borderRight = ((Integer)firstPageProps.getPropertyValue( "BorderRight" )).intValue();
+ final int borderBottom = ((Integer)firstPageProps.getPropertyValue( "BorderBottom" )).intValue();
+ return new Rectangle( borderLeft, borderTop, pageWidth - borderLeft - borderRight, pageHeight - borderTop - borderBottom );
+ }
+
+ /**
+ * returns the XShapes interface of the first page of our drawing document
+ */
+ private XShapes getFirstPageShapes() throws com.sun.star.uno.Exception
+ {
+ final XDrawPagesSupplier suppPages = UnoRuntime.queryInterface( XDrawPagesSupplier.class, getDocument().getDocument() );
+ final XDrawPages pages = suppPages.getDrawPages();
+ return UnoRuntime.queryInterface( XShapes.class, pages.getByIndex( 0 ) );
+ }
+
+ /**
+ * verifies the given shape has the given size
+ */
+ private void verifyShapeGeometry( final Object i_shapeObject, final int i_expectedWidth, final int i_expectedHeight )
+ throws com.sun.star.uno.Exception
+ {
+ final XShape shape = UnoRuntime.queryInterface( XShape.class, i_shapeObject );
+ final Size shapeSize = shape.getSize();
+ assertEquals( "unexpected shape width", i_expectedWidth, shapeSize.Width );
+ assertEquals( "unexpected shape height", i_expectedHeight, shapeSize.Height );
+ }
+
+ private static class ShapeInsertionUndoAction implements XUndoAction
+ {
+ ShapeInsertionUndoAction( final XShape i_shape, final XShapes i_shapeCollection )
+ {
+ m_shape = i_shape;
+ m_shapeCollection = i_shapeCollection;
+ }
+
+ public String getTitle()
+ {
+ return "insert shape";
+ }
+
+ public void undo()
+ {
+ m_shapeCollection.remove( m_shape );
+ }
+
+ public void redo()
+ {
+ m_shapeCollection.add( m_shape );
+ }
+
+ private final XShape m_shape;
+ private final XShapes m_shapeCollection;
+ }
+
+ private static CircleKind CIRCLE_TYPE = CircleKind.FULL;
+ private static int FILL_COLOR = 0xCC2244;
+ private static int ALTERNATE_FILL_COLOR = 0x44CC22;
+ private static int BIG_CIRCLE_SIZE = 5000;
+ private static int SMALL_CIRCLE_SIZE = 2000;
+}
diff --git a/sfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java b/sfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java
new file mode 100755
index 000000000000..c15fc760e0c3
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java
@@ -0,0 +1,46 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ *
+ * for a copy of the LGPLv3 License.
+ *
+ *************************************************************************/
+
+package complex.sfx2.undo;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import org.openoffice.test.tools.DocumentType;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+public class ImpressDocumentTest extends DrawingOrPresentationDocumentTest
+{
+ public ImpressDocumentTest( XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, DocumentType.PRESENTATION );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "presentation document";
+ }
+}
diff --git a/sfx2/qa/complex/sfx2/undo/WriterDocumentTest.java b/sfx2/qa/complex/sfx2/undo/WriterDocumentTest.java
new file mode 100755
index 000000000000..702fb85ebb11
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/WriterDocumentTest.java
@@ -0,0 +1,104 @@
+package complex.sfx2.undo;
+
+import com.sun.star.text.XTextRange;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.table.XCell;
+import com.sun.star.table.XCellRange;
+import com.sun.star.text.XTextCursor;
+import com.sun.star.text.XTextTable;
+import com.sun.star.text.XText;
+import com.sun.star.text.XTextDocument;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+import org.openoffice.test.tools.DocumentType;
+import static org.junit.Assert.*;
+
+/**
+ * implements the {@link DocumentTest} interface on top of a spreadsheet document
+ * @author frank.schoenheit@oracle.com
+ */
+public class WriterDocumentTest extends DocumentTestBase
+{
+ public WriterDocumentTest( final XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, DocumentType.WRITER );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "text document";
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ // TODO?
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+ docText.setString( s_blindText );
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+ assertEquals( "document should be empty", "", docText.getString() );
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+ assertEquals( "blind text not found", s_blindText, docText.getString() );
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+
+ int expectedUndoActions = 0;
+
+ // create a cursor
+ final XTextCursor cursor = docText.createTextCursor();
+
+ // create a table
+ final XTextTable textTable = UnoRuntime.queryInterface( XTextTable.class,
+ getDocument().createInstance( "com.sun.star.text.TextTable" ) );
+ textTable.initialize( 3, 3 );
+ final XPropertySet tableProps = UnoRuntime.queryInterface( XPropertySet.class, textTable );
+ tableProps.setPropertyValue( "BackColor", 0xCCFF44 );
+
+ // insert the table into the doc
+ docText.insertTextContent( cursor, textTable, false );
+ ++expectedUndoActions; //FIXME this will create 2 actions! currently the event is sent for every individual action; should it be sent for top-level actions only? how many internal actions are created is an implementation detail!
+ ++expectedUndoActions;
+
+ // write some content into the center cell
+ final XCellRange cellRange = UnoRuntime.queryInterface( XCellRange.class, textTable );
+ final XCell centerCell = cellRange.getCellByPosition( 1, 1 );
+ final XTextRange cellText = UnoRuntime.queryInterface( XTextRange.class, centerCell );
+ cellText.setString( "Undo Manager API Test" );
+ ++expectedUndoActions;
+
+ // give it another color
+ final XPropertySet cellProps = UnoRuntime.queryInterface( XPropertySet.class, centerCell );
+ cellProps.setPropertyValue( "BackColor", 0x44CCFF );
+ ++expectedUndoActions;
+
+ return expectedUndoActions;
+ }
+
+ private static final String s_blindText =
+ "Lorem ipsum dolor. Sit amet penatibus. A cum turpis. Aenean ac eu. " +
+ "Ligula est urna nulla vestibulum ullamcorper. Nec sit in amet tincidunt mus. " +
+ "Tellus sagittis mi. Suscipit cursus in vestibulum in eros ipsum felis cursus lectus " +
+ "nunc quis condimentum in risus nec wisi aenean luctus hendrerit magna habitasse commodo orci. " +
+ "Nisl etiam quis. Vestibulum justo eleifend aliquet luctus sed turpis volutpat ullamcorper " +
+ "aliquam penatibus sagittis pede tincidunt egestas. Nibh massa lectus. Sem mattis purus morbi " +
+ "scelerisque turpis donec urna phasellus. Quis at lacus. Viverra mauris mollis. " +
+ "Dolor tincidunt condimentum.";
+}
diff --git a/sfx2/qa/complex/tests.sce b/sfx2/qa/complex/tests.sce
deleted file mode 100644
index c38852927ede..000000000000
--- a/sfx2/qa/complex/tests.sce
+++ /dev/null
@@ -1,3 +0,0 @@
--o complex.framework.DocumentMetaData
--o complex.framework.DocumentMetadataAccessTest
-#-o complex.framework.CheckGlobalEventBroadcaster_writer1
diff --git a/sfx2/sdi/docslots.sdi b/sfx2/sdi/docslots.sdi
index d16239535193..0e4a302d9d13 100644
--- a/sfx2/sdi/docslots.sdi
+++ b/sfx2/sdi/docslots.sdi
@@ -171,11 +171,6 @@ interface OfficeDocument : Document
[
StateMethod = StateProps_Impl ;
]
- SID_PLAYMACRO // ole(no) api(final/play/norec)
- [
- ExecMethod = ExecProps_Impl ;
- StateMethod = StateProps_Impl ;
- ]
SID_VERSION
[
ExecMethod = ExecFile_Impl;
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index aadd57185880..a9c5ca6e7330 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -4634,31 +4634,6 @@ SfxVoidItem PickList SID_PICKLIST
GroupId = GID_APPLICATION;
]
-//--------------------------------------------------------------------------
-SfxBoolItem PlayMacro SID_PLAYMACRO
-(SfxStringItem Statement SID_STATEMENT,SfxBoolItem Asynchron SID_ASYNCHRON)
-[
- /* flags: */
- AutoUpdate = TRUE,
- Cachable = Cachable,
- FastCall = FALSE,
- HasCoreId = FALSE,
- HasDialog = FALSE,
- ReadOnlyDoc = TRUE,
- Toggle = FALSE,
- Container = TRUE,
- RecordAbsolute = FALSE,
- NoRecord;
- Synchron;
-
- /* config: */
- AccelConfig = FALSE,
- MenuConfig = FALSE,
- StatusBarConfig = FALSE,
- ToolBoxConfig = FALSE,
- GroupId = GID_MACRO;
-]
-
//--------------------------------------------------------------------------
SfxBoolItem PlugInsActive SID_PLUGINS_ACTIVE
@@ -5237,31 +5212,6 @@ SfxVoidItem RunBasic SID_BASICRUN
GroupId = GID_MACRO;
]
-//--------------------------------------------------------------------------
-SfxVoidItem RunStarWriter SID_STARTSW
-()
-[
- /* flags: */
- AutoUpdate = FALSE,
- Cachable = Cachable,
- FastCall = FALSE,
- HasCoreId = FALSE,
- HasDialog = FALSE,
- ReadOnlyDoc = TRUE,
- Toggle = FALSE,
- Container = TRUE,
- RecordAbsolute = FALSE,
- RecordPerSet;
- Asynchron;
-
- /* config: */
- AccelConfig = FALSE,
- MenuConfig = FALSE,
- StatusBarConfig = FALSE,
- ToolBoxConfig = FALSE,
- GroupId = GID_APPLICATION;
-]
-
//--------------------------------------------------------------------------
SfxBoolItem Save SID_SAVEDOC
(SfxStringItem VersionComment SID_DOCINFO_COMMENTS,SfxStringItem Author SID_DOCINFO_AUTHOR)
@@ -6569,31 +6519,6 @@ SfxVoidItem BasicIDEShowWindow SID_BASICIDE_SHOWWINDOW
GroupId = GID_APPLICATION;
]
-//--------------------------------------------------------------------------
-SfxVoidItem ToolsMacroEdit SID_EDITMACRO
-()
-[
- /* flags: */
- AutoUpdate = FALSE,
- Cachable = Cachable,
- FastCall = FALSE,
- HasCoreId = FALSE,
- HasDialog = TRUE,
- ReadOnlyDoc = TRUE,
- Toggle = FALSE,
- Container = TRUE,
- RecordAbsolute = FALSE,
- RecordPerSet;
- Synchron;
-
- /* config: */
- AccelConfig = TRUE,
- MenuConfig = TRUE,
- StatusBarConfig = FALSE,
- ToolBoxConfig = TRUE,
- GroupId = GID_MACRO;
-]
-
//--------------------------------------------------------------------------
SfxVoidItem Undo SID_UNDO
( SfxUInt16Item Undo SID_UNDO )
diff --git a/sfx2/source/appl/app.cxx b/sfx2/source/appl/app.cxx
index 583dc915b192..6a1f58c6de33 100644
--- a/sfx2/source/appl/app.cxx
+++ b/sfx2/source/appl/app.cxx
@@ -41,6 +41,8 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -831,3 +833,7 @@ void SfxApplication::MacroOrganizer( sal_Int16 nTabId )
pSymbol( nTabId );
}
+ErrCode SfxApplication::CallBasic( const String& rCode, BasicManager* pMgr, SbxArray* pArgs, SbxValue* pRet )
+{
+ return pMgr->ExecuteMacro( rCode, pArgs, pRet);
+}
diff --git a/sfx2/source/appl/app.hrc b/sfx2/source/appl/app.hrc
index dca172269443..ff01fd358d4d 100644
--- a/sfx2/source/appl/app.hrc
+++ b/sfx2/source/appl/app.hrc
@@ -32,11 +32,6 @@
// #defines *****************************************************************
#define ACC_IBM (RID_SFX_APP_START+2)
-#define MSG_ERR_WRITE_CFG (RID_SFX_APP_START+2)
-#define MSG_ERR_READ_CFG (RID_SFX_APP_START+3)
-#define MSG_ERR_OPEN_CFG (RID_SFX_APP_START+4)
-#define MSG_ERR_FILETYPE_CFG (RID_SFX_APP_START+5)
-#define MSG_ERR_VERSION_CFG (RID_SFX_APP_START+6)
#define MSG_ERR_NO_WEBBROWSER_FOUND (RID_SFX_APP_START+7)
// Note: no longer in use
@@ -45,101 +40,22 @@
#define MSG_ISPRINTING_QUERYABORT (RID_SFX_APP_START+9)
#define MSG_CANT_QUIT (RID_SFX_APP_START+10)
#define STR_ISMODIFIED (RID_SFX_APP_START+11)
-#define STR_AUTOSAVE (RID_SFX_APP_START+12)
-#define STR_MAIL (RID_SFX_APP_START+13)
-#define MSG_ERR_WRITE_SBL (RID_SFX_APP_START+14)
-#define MSG_IS_SERVER (RID_SFX_APP_START+15)
-
-#define STR_RESEXCEPTION (RID_SFX_APP_START+21)
-#define STR_SYSRESEXCEPTION (RID_SFX_APP_START+22)
-#define STR_DOUBLEEXCEPTION (RID_SFX_APP_START+23)
-#define STR_RESWARNING (RID_SFX_APP_START+24)
-#define STR_ERR_NOTEMPLATE (RID_SFX_APP_START+27)
-#define STR_RECOVER_TITLE (RID_SFX_APP_START+28)
-#define STR_RECOVER_QUERY (RID_SFX_APP_START+29)
-#define STR_RECOVER_PREPARED (RID_SFX_APP_START+30)
-#define MSG_ERR_SOINIT (RID_SFX_APP_START+31)
-
-#define MSG_IOERR_FILE_NOT_FOUND (RID_SFX_APP_START+32)
-#define MSG_IOERR_PATH_NOT_FOUND (RID_SFX_APP_START+33)
-#define MSG_IOERR_TOO_MANY_OPEN_FILES (RID_SFX_APP_START+34)
-#define MSG_IOERR_ACCESS_DENIED (RID_SFX_APP_START+35)
-#define MSG_IOERR_INVALID_ACCESS (RID_SFX_APP_START+36)
-#define MSG_IOERR_INVALID_HANDLE (RID_SFX_APP_START+37)
-#define MSG_IOERR_CANNOT_MAKE (RID_SFX_APP_START+38)
-#define MSG_IOERR_SHARING (RID_SFX_APP_START+39)
-#define MSG_IOERR_INVALID_PARAMETER (RID_SFX_APP_START+40)
-#define MSG_IOERR_GENERAL (RID_SFX_APP_START+41)
#define RID_FULLSCREENTOOLBOX (RID_SFX_APP_START+42)
#define RID_RECORDINGTOOLBOX (RID_SFX_APP_START+43)
#define RID_ENVTOOLBOX (RID_SFX_APP_START+44)
#define STR_QUITAPP (RID_SFX_APP_START+59)
-#define STR_EXITANDRETURN (RID_SFX_APP_START+60)
-#define STR_ERR_NOFILE (RID_SFX_APP_START+61)
-#define STR_EXTHELPSTATUS (RID_SFX_APP_START+62)
-
-#define STR_ADDRESS_NAME (RID_SFX_APP_START+65)
#define RID_STR_HLPFILENOTEXIST (RID_SFX_APP_START+68)
-#define RID_STR_HLPAPPNOTSTARTED (RID_SFX_APP_START+69)
-
-#define STR_NODOUBLE (RID_SFX_APP_START+75)
-#define STR_NOPRINTER (RID_SFX_APP_START+76)
-
-#define MSG_SIGNAL (RID_SFX_APP_START+77)
#define RID_STR_HELP (RID_SFX_APP_START+79)
#define RID_STR_NOAUTOSTARTHELPAGENT (RID_SFX_APP_START+80)
#define RID_HELPBAR (RID_SFX_APP_START+81)
#define RID_SPECIALCONFIG_ERROR (RID_SFX_APP_START+82)
-#define STR_MEMINFO_HEADER (RID_SFX_APP_START+84)
-#define STR_MEMINFO_FOOTER (RID_SFX_APP_START+85)
-#define STR_MEMINFO_OBJINFO (RID_SFX_APP_START+86)
-
-#define RID_PLUGIN (RID_SFX_APP_START+87)
-
-#define RID_WARN_POST_MAILTO (RID_SFX_APP_START+88)
-
-#define RID_STR_NOWELCOMESCREEN (RID_SFX_APP_START+91)
-
-// --> PB 2004-08-20 #i33095#
-/* obsolete
-#define STR_EDITOBJECT (RID_SFX_APP_START+92)
-#define STR_OPENOBJECT (RID_SFX_APP_START+93)
-*/
-
-#define STR_CORRUPT_INSTALLATION (RID_SFX_APP_START+94)
-#define IDS_SBERR_STOREREF (RID_SFX_APP_START+97)
-
#define CONFIG_PATH_START (RID_SFX_APP_START+98)
-#define STR_KEY_ADDINS_PATH (CONFIG_PATH_START+0)
-#define STR_KEY_AUTOCORRECT_DIR (CONFIG_PATH_START+1)
-#define STR_KEY_GLOSSARY_PATH (CONFIG_PATH_START+2)
-#define STR_KEY_BACKUP_PATH (CONFIG_PATH_START+3)
-#define STR_KEY_BASIC_PATH (CONFIG_PATH_START+4)
-#define STR_KEY_BITMAP_PATH (CONFIG_PATH_START+5)
-#define STR_KEY_CONFIG_DIR (CONFIG_PATH_START+6)
-#define STR_KEY_DICTIONARY_PATH (CONFIG_PATH_START+7)
-#define STR_KEY_FAVORITES_DIR (CONFIG_PATH_START+8)
-#define STR_KEY_FILTER_PATH (CONFIG_PATH_START+9)
-#define STR_KEY_GALLERY_DIR (CONFIG_PATH_START+10)
-#define STR_KEY_GRAPHICS_PATH (CONFIG_PATH_START+11)
-#define STR_KEY_HELP_DIR (CONFIG_PATH_START+12)
-#define STR_KEY_LINGUISTIC_DIR (CONFIG_PATH_START+13)
-#define STR_KEY_MODULES_PATH (CONFIG_PATH_START+14)
-#define STR_KEY_PALETTE_PATH (CONFIG_PATH_START+15)
-#define STR_KEY_PLUGINS_PATH (CONFIG_PATH_START+16)
-#define STR_KEY_STORAGE_DIR (CONFIG_PATH_START+17)
-#define STR_KEY_TEMP_PATH (CONFIG_PATH_START+18)
-#define STR_KEY_TEMPLATE_PATH (CONFIG_PATH_START+19)
-#define STR_KEY_USERCONFIG_PATH (CONFIG_PATH_START+20)
-#define STR_KEY_USERDICTIONARY_DIR (CONFIG_PATH_START+21)
-#define STR_KEY_WORK_PATH (CONFIG_PATH_START+22)
-
#define WIN_HELPINDEX (RID_SFX_APP_START+99)
#define TP_HELP_CONTENT (RID_SFX_APP_START+100)
#define TP_HELP_INDEX (RID_SFX_APP_START+101)
@@ -168,11 +84,6 @@
#define IMG_HELP_CONTENT_DOC_HC (RID_SFX_APP_START+125) // image
-#define IMG_MISSING_1 (RID_SFX_APP_START+126) // image
-#define IMG_MISSING_2 (RID_SFX_APP_START+127) // image
-#define IMG_MISSING_3 (RID_SFX_APP_START+128) // image
-#define IMG_MISSING_4 (RID_SFX_APP_START+129) // image
-
#define STR_HELP_WINDOW_TITLE (RID_SFX_APP_START+125) // string
#define STR_HELP_BUTTON_INDEX_ON (RID_SFX_APP_START+126)
@@ -236,8 +147,6 @@
#define RID_SECURITY_WARNING_HYPERLINK (RID_SFX_APP_START + 180)
#define RID_SECURITY_WARNING_TITLE (RID_SFX_APP_START + 181)
-#define RID_INVALID_URL_MSG (RID_SFX_APP_START + 182)
-#define RID_INVALID_URL_TITLE (RID_SFX_APP_START + 183)
#define RID_DESKTOP (RID_SFX_APP_START + 184)
// #define RID_XMLSEC_WARNING_BROKENSIGNATURE (RID_SFX_APP_START + 185)
diff --git a/sfx2/source/appl/app.src b/sfx2/source/appl/app.src
index f8a387bba79b..fa5a1fc1c335 100644
--- a/sfx2/source/appl/app.src
+++ b/sfx2/source/appl/app.src
@@ -75,60 +75,6 @@ InfoBox RID_DOCALREADYLOADED_DLG
Message [ en-US ] = "Document already open." ;
};
-ErrorBox RID_CANTLOADDOC_DLG
-{
- Message [ en-US ] = "Cannot open document." ;
-};
-
-ErrorBox MSG_ERR_READ_CFG
-{
- BUTTONS = WB_OK ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "Error reading configuration file." ;
-};
-
-ErrorBox MSG_ERR_WRITE_CFG
-{
- BUTTONS = WB_OK ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "Error writing configuration file." ;
-};
-
-ErrorBox MSG_ERR_OPEN_CFG
-{
- BUTTONS = WB_OK ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "Error opening configuration file." ;
-};
-
-ErrorBox MSG_ERR_FILETYPE_CFG
-{
- BUTTONS = WB_OK ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "File is not a configuration file." ;
-};
-
-ErrorBox MSG_ERR_VERSION_CFG
-{
- BUTTONS = WB_OK ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "Configuration file contains the wrong version." ;
-};
-
-ErrorBox MSG_ERR_WRITE_SBL
-{
- BUTTONS = WB_OK ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "Error recording BASIC library in\n'@'." ;
-};
-
-ErrorBox MSG_SIGNAL
-{
- BUTTONS = WB_YES_NO ;
- DEFBUTTON = WB_DEF_YES ;
- Message [ en-US ] = "An unexpected program error has occurred.\n\nDo you want to try to save your changes in all open documents before the program is terminated?" ;
-};
-
ErrorBox MSG_ERR_NO_WEBBROWSER_FOUND
{
BUTTONS = WB_OK ;
@@ -141,89 +87,6 @@ Resource SID_UNKNOWN
String 1 "-" ;
};
-Resource BMP_SFX_COLOR
-{
- ExtraData =
- {
- SID_NEWDOC; // 043
- SID_OPENDOC; // 044
- SID_CLOSEDOC; // 045
- SID_RELOAD; // 046
- SID_SAVEASDOC; // 047
- SID_PRINTDOC; // 051
- SID_SETUPPRINTER; // 053
- SID_QUITAPP; // 054
- SID_UNDO; // 055
- SID_REDO; // 056
- SID_REPEAT; // 057
- SID_CUT; // 058
- SID_COPY; // 059
- SID_PASTE; // 060
- SID_DELETE; // 061
- SID_SELECTALL; // 062
- SID_SAVEDOC; // 063 vormals 046
- SID_EXITANDRETURN; // 064 vormals 054
- SID_RECORDMACRO; // 095
- SID_EDITMACRO; // 096
- SID_HELPMENU; // 098
- SID_CONFIG; // 123
- SID_CONFIGTOOLBOX; // 124
- 0;
- };
- Bitmap BMP_SFX_SMALL { File = "sco.bmp" ; };
- Bitmap BMP_SFX_LARGE { File = "lco.bmp" ; };
-};
-
-Resource BMP_SFX_MONO
-{
- ExtraData =
- {
- SID_NEWDOC; // 043
- SID_OPENDOC; // 044
- SID_CLOSEDOC; // 045
- SID_RELOAD; // 046
- SID_SAVEASDOC; // 047
- SID_PRINTDOC; // 051
- SID_SETUPPRINTER; // 053
- SID_QUITAPP; // 054
- SID_UNDO; // 055
- SID_REDO; // 056
- SID_REPEAT; // 057
- SID_CUT; // 058
- SID_COPY; // 059
- SID_PASTE; // 060
- SID_DELETE; // 061
- SID_SELECTALL; // 062
- SID_SAVEDOC; // 063 vormals 046
- SID_EXITANDRETURN; // 064 vormals 054
- SID_RECORDMACRO; // 095
- SID_EDITMACRO; // 096
- SID_HELPMENU; // 098
- SID_CONFIG; // 123
- SID_CONFIGTOOLBOX; // 124
- 0;
- };
- Bitmap BMP_SFX_SMALL { File = "smo.bmp" ; };
- Bitmap BMP_SFX_LARGE { File = "lmo.bmp" ; };
-};
-
-WarningBox RID_WARN_POST_MAILTO
-{
- BUTTONS = WB_OK_CANCEL ;
- DEFBUTTON = WB_DEF_OK ;
- Message [ en-US ] = "A form is to be sent by e-mail.\nThis means that the receiver will get to see your e-mail address." ;
-};
-
-String STR_RECOVER_TITLE
-{
- Text [ en-US ] = "File Recovery" ;
-};
-
-String STR_RECOVER_QUERY
-{
- Text [ en-US ] = "Should the file \"$1\" be restored?" ;
-};
-
String GID_INTERN
{
Text [ en-US ] = "Internal" ;
@@ -354,155 +217,16 @@ String GID_CONTROLS
Text [ en-US ] = "Controls" ;
};
-TabDialog SID_OPTIONS
-{
- OutputSize = TRUE ;
- SVLook = TRUE ;
- Size = MAP_APPFONT ( 244 , 155 ) ;
- Text [ en-US ] = "Options" ;
- Moveable = TRUE ;
- Closeable = TRUE ;
- TabControl 1
- {
- SVLook = TRUE ;
- Pos = MAP_APPFONT ( 3 , 15 ) ;
- Size = MAP_APPFONT ( 221 , 130 ) ;
- PageList =
- {
- PageItem
- {
- Identifier = RID_SFXPAGE_GENERAL ;
- Text [ en-US ] = "General" ;
- PageResID = 256 ;
- };
- PageItem
- {
- Identifier = RID_SFXPAGE_SAVE ;
- Text [ en-US ] = "Save" ;
- PageResID = 257 ;
- };
- PageItem
- {
- Identifier = RID_SFXPAGE_PATH ;
- Text [ en-US ] = "Paths" ;
- PageResID = 258 ;
- };
- PageItem
- {
- Identifier = RID_SFXPAGE_SPELL ;
- Text [ en-US ] = "Spellcheck" ;
- PageResID = 259 ;
- };
- };
- };
-};
-
InfoBox MSG_CANT_QUIT
{
Message [ en-US ] = "The application cannot be terminated at the moment.\nPlease wait until all print jobs and/or\nOLE actions have finished and close all dialogs." ;
};
-QueryBox MSG_IS_SERVER
-{
- Buttons = WB_YES_NO ;
- DefButton = WB_DEF_NO ;
- Message [ en-US ] = "This application is as object or print server active.\nDo you want to terminate anyway?" ;
-};
-
-String STR_NODOUBLE
-{
- Text [ en-US ] = "%PRODUCTNAME cannot be started more than once." ;
-};
-
-String STR_NOPRINTER
-{
- Text [ en-US ] = "Some %PRODUCTNAME functions will not work properly without a printer driver.\nPlease install a printer driver." ;
-};
-
String STR_ISMODIFIED
{
Text [ en-US ] = "Do you want to save the changes to %1?" ;
};
-String STR_AUTOSAVE
-{
- Text [ en-US ] = "AutoSave" ;
-};
-
-String STR_RESWARNING
-{
- Text [ en-US ] = "Limited system resources. Please quit other applications or close some windows before continuing." ;
-};
-String STR_RESEXCEPTION
-{
- Text [ en-US ] = "There are files missing. Please check application setup." ;
-};
-
-String STR_DOUBLEEXCEPTION
-{
- Text [ en-US ] = "Another error occurred during the save recovery.\nPossibly, the data could not be entirely saved." ;
-};
-
-String STR_SYSRESEXCEPTION
-{
- Text [ en-US ] = "System resources exhausted. Please restart the application." ;
-};
-
-ErrorBox MSG_ERR_SOINIT
-{
- Message [ en-US ] = "Error initializing object-system." ;
-};
-
-String MSG_IOERR_FILE_NOT_FOUND
-{
- Text [ en-US ] = "The file $(FILE) doesn't exist." ;
-};
-
-String MSG_IOERR_PATH_NOT_FOUND
-{
- Text [ en-US ] = "The path to file $(FILE) doesn't exist." ;
-};
-
-String MSG_IOERR_TOO_MANY_OPEN_FILES
-{
- Text [ en-US ] = "The file $(FILE) could not be opened,\nbecause too many files are open.\nPlease close some files and try again." ;
-};
-
-String MSG_IOERR_ACCESS_DENIED
-{
- Text [ en-US ] = "The file $(FILE) could not be opened due to missing access rights." ;
-};
-
-String MSG_IOERR_INVALID_ACCESS
-{
- Text [ en-US ] = "The file $(FILE) could not be accessed." ;
-};
-
-String MSG_IOERR_INVALID_HANDLE
-{
- Text [ en-US ] = "The file $(FILE) could not be opened due to an invalid file handle." ;
-};
-
-String MSG_IOERR_CANNOT_MAKE
-{
- Text [ en-US ] = "The file $(FILE) could not be created." ;
-};
-
-String MSG_IOERR_SHARING
-{
- Text [ en-US ] = "Error by shared access to $(FILE)." ;
-};
-
-String MSG_IOERR_INVALID_PARAMETER
-{
- Text [ en-US ] = "" ;
-};
-
-String MSG_IOERR_GENERAL
-{
- Text [ en-US ] = "General I/O error accessing $(FILE)." ;
-};
-
String RID_FULLSCREENTOOLBOX
{
Text = "" ;
@@ -538,41 +262,11 @@ ToolBox RID_FULLSCREENTOOLBOX
};
};
-String STR_ERR_NOTEMPLATE
-{
- Text [ en-US ] = "The selected template has an incorrect format" ;
-};
-
-String STR_ERR_NOFILE
-{
- Text [ en-US ] = "Can't open file $." ;
-};
-
String STR_QUITAPP
{
Text [ en-US ] = "E~xit" ;
};
-String STR_EXITANDRETURN
-{
- Text [ en-US ] = "E~xit & return to " ;
-};
-
-String STR_EXTHELPSTATUS
-{
- Text [ en-US ] = "Select a command or click to select a theme." ;
-};
-
-String STR_MAIL
-{
- Text [ en-US ] = "Mail" ;
-};
-
-String STR_ADDRESS_NAME
-{
- Text [ en-US ] = "Addresses" ;
-};
-
String RID_STR_HELP
{
Text [ en-US ] = "Help" ;
@@ -583,11 +277,6 @@ String RID_STR_NOAUTOSTARTHELPAGENT
Text [ en-US ] = "No automatic start at 'XX'" ;
};
-String RID_STR_NOWELCOMESCREEN
-{
- Text [ en-US ] = "Don't display tips" ;
-};
-
String RID_HELPBAR
{
Text [ en-US ] = "Help Bar" ;
@@ -653,11 +342,6 @@ String RID_STR_HLPFILENOTEXIST
Text [ en-US ] = "The help file for this topic is not installed." ;
};
-String RID_STR_HLPAPPNOTSTARTED
-{
- Text [ en-US ] = "The help system could not be started" ;
-};
-
//----------------------------------------------------------------------------
String RID_ENVTOOLBOX
@@ -670,129 +354,6 @@ String RID_SPECIALCONFIG_ERROR
Text [ en-US ] = "An error has occurred in the special configuration.\nPlease contact your administrator." ;
};
-String STR_MEMINFO_HEADER
-{
-};
-
-String STR_MEMINFO_FOOTER
-{
- Text = "" ;
-};
-
-String STR_MEMINFO_OBJINFO
-{
- Text = "