[Libreoffice-commits] core.git: Branch 'private/kohei/xlsx-import-speedup' - 100 commits - accessibility/Module_accessibility.mk bin/findunusedcode chart2/AllLangResTarget_chartcontroller.mk chart2/source chart2/uiconfig chart2/UIConfig_chart2.mk comphelper/source config_host.mk.in configmgr/source configure.ac connectivity/source cppcanvas/source cpputools/source cui/uiconfig dbaccess/source desktop/Library_spl.mk desktop/Library_spl_unx.mk desktop/Module_desktop.mk desktop/source desktop/unx drawinglayer/source editeng/source extensions/source filter/source formula/source framework/source .gitignore helpcontent2 i18nlangtag/source i18npool/source icon-themes/galaxy icon-themes/hicontrast idl/source include/formula include/oox include/sal include/sax include/svl include/unotools ios/CustomTarget_MobileLibreOffice_app.mk ios/iosremote ios/MobileLibreOffice ios/Module_ios.mk ios/shared jvmfwk/source l10ntools/source linguistic/source Makefile.in odk/examples offapi/com oox/source padmin/so urce postprocess/Rdb_services.mk reportdesign/source Repository.mk rsc/source sal/osl sal/rtl sax/source sc/inc scp2/source sc/qa scripting/source sc/source sdext/source sd/source sfx2/source shell/source slideshow/source solenv/gbuild stoc/source stoc/test svgio/source svtools/source svx/source sw/inc sw/qa sw/source translations ucb/source udkapi/com unotools/source vcl/generic vcl/source vcl/unx vcl/win winaccessibility/inc winaccessibility/source wizards/com writerfilter/source xmloff/source
Kohei Yoshida
kohei.yoshida at collabora.com
Fri Nov 22 15:29:23 PST 2013
Rebased ref, commits from common ancestor:
commit 5a03478d2b7a176dafeb8d7a12ba1d0019ce2600
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Nov 22 18:28:26 2013 -0500
Add hook to optionally enable threaded sheet stream parsing.
Threaded version still not working as the fast parser deadlocks during
threaded parsing.
Change-Id: I3d402a22a394d7d0d7edf96590ae039506928fde
diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index 30f0f34..3a2a443 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -51,6 +51,12 @@
#include <comphelper/processfactory.hxx>
#include <officecfg/Office/Calc.hxx>
+#include <salhelper/thread.hxx>
+#include <osl/conditn.hxx>
+
+#include <queue>
+#include <boost/scoped_ptr.hpp>
+
#include "oox/ole/vbaproject.hxx"
namespace oox {
@@ -194,6 +200,191 @@ const RecordInfo* WorkbookFragment::getRecordInfos() const
return spRecInfos;
}
+namespace {
+
+class WorkerThread;
+
+typedef std::pair<WorksheetGlobalsRef, FragmentHandlerRef> SheetFragmentHandler;
+typedef std::vector<SheetFragmentHandler> SheetFragmentVector;
+typedef rtl::Reference<WorkerThread> WorkerThreadRef;
+
+struct WorkerThreadData
+{
+ osl::Mutex maMtx;
+ std::vector<WorkerThreadRef> maThreads;
+};
+
+struct IdleWorkerThreadData
+{
+ osl::Mutex maMtx;
+ osl::Condition maCondAdded;
+ std::queue<WorkerThread*> maThreads;
+};
+
+struct
+{
+ boost::scoped_ptr<WorkerThreadData> mpWorkerThreads;
+ boost::scoped_ptr<IdleWorkerThreadData> mpIdleThreads;
+
+} aThreadGlobals;
+
+enum WorkerAction
+{
+ None = 0,
+ TerminateThread,
+ Work
+};
+
+class WorkerThread : public salhelper::Thread
+{
+ WorkbookFragment& mrWorkbookHandler;
+ size_t mnID;
+ FragmentHandlerRef mxHandler;
+ osl::Mutex maMtxAction;
+ osl::Condition maCondActionChanged;
+ WorkerAction meAction;
+public:
+ WorkerThread( WorkbookFragment& rWorkbookHandler, size_t nID ) :
+ salhelper::Thread("sheet-import-worker-thread"),
+ mrWorkbookHandler(rWorkbookHandler), mnID(nID), meAction(None) {}
+
+ virtual void execute()
+ {
+ announceIdle();
+
+ // Keep looping until the terminate request is set.
+ for (maCondActionChanged.wait(); true; maCondActionChanged.wait())
+ {
+ osl::MutexGuard aGuard(maMtxAction);
+ if (!maCondActionChanged.check())
+ // Wait again.
+ continue;
+
+ maCondActionChanged.reset();
+
+ if (meAction == TerminateThread)
+ // End the thread.
+ return;
+
+ if (meAction != Work)
+ continue;
+
+#if 0
+ // TODO : This still deadlocks in the fast parser code.
+ mrWorkbookHandler.importOoxFragment(mxHandler);
+#else
+ double val = rand() / static_cast<double>(RAND_MAX);
+ val *= 1000000; // normalize to 1 second.
+ val *= 1.5; // inflate it a bit.
+ usleep(val); // pretend to be working while asleep.
+#endif
+ announceIdle();
+ }
+ }
+
+ void announceIdle()
+ {
+ // Set itself idle to receive a new task from the main thread.
+ osl::MutexGuard aGuard(aThreadGlobals.mpIdleThreads->maMtx);
+ aThreadGlobals.mpIdleThreads->maThreads.push(this);
+ aThreadGlobals.mpIdleThreads->maCondAdded.set();
+ }
+
+ void terminate()
+ {
+ osl::MutexGuard aGuard(maMtxAction);
+ meAction = TerminateThread;
+ maCondActionChanged.set();
+ }
+
+ void assign( const FragmentHandlerRef& rHandler )
+ {
+ osl::MutexGuard aGuard(maMtxAction);
+ mxHandler = rHandler;
+ meAction = Work;
+ maCondActionChanged.set();
+ }
+};
+
+void importSheetFragments( WorkbookFragment& rWorkbookHandler, SheetFragmentVector& rSheets )
+{
+#if 0 // threaded version
+ size_t nThreadCount = 3;
+ if (nThreadCount > rSheets.size())
+ nThreadCount = rSheets.size();
+
+ // Create new thread globals.
+ aThreadGlobals.mpWorkerThreads.reset(new WorkerThreadData);
+ aThreadGlobals.mpIdleThreads.reset(new IdleWorkerThreadData);
+
+ SheetFragmentVector::iterator it = rSheets.begin(), itEnd = rSheets.end();
+
+ {
+ // Initialize worker threads.
+ osl::MutexGuard aGuard(aThreadGlobals.mpWorkerThreads->maMtx);
+ for (size_t i = 0; i < nThreadCount; ++i)
+ {
+ WorkerThreadRef pThread(new WorkerThread(rWorkbookHandler, i));
+ aThreadGlobals.mpWorkerThreads->maThreads.push_back(pThread);
+ pThread->launch();
+ }
+ }
+
+ for (aThreadGlobals.mpIdleThreads->maCondAdded.wait(); true; aThreadGlobals.mpIdleThreads->maCondAdded.wait())
+ {
+ osl::MutexGuard aGuard(aThreadGlobals.mpIdleThreads->maMtx);
+ if (!aThreadGlobals.mpIdleThreads->maCondAdded.check())
+ // Wait again.
+ continue;
+
+ aThreadGlobals.mpIdleThreads->maCondAdded.reset();
+
+ // Assign work to all idle threads.
+ while (!aThreadGlobals.mpIdleThreads->maThreads.empty())
+ {
+ if (it == itEnd)
+ break;
+
+ WorkerThread* p = aThreadGlobals.mpIdleThreads->maThreads.front();
+ aThreadGlobals.mpIdleThreads->maThreads.pop();
+ p->assign(it->second);
+ ++it;
+ }
+
+ if (it == itEnd)
+ {
+ // Clean up the globals before existing.
+ break;
+ }
+ }
+
+ {
+ // Terminate all worker threads.
+ osl::MutexGuard aGuard(aThreadGlobals.mpWorkerThreads->maMtx);
+ for (size_t i = 0, n = aThreadGlobals.mpWorkerThreads->maThreads.size(); i < n; ++i)
+ {
+ WorkerThreadRef pWorker = aThreadGlobals.mpWorkerThreads->maThreads[i];
+ pWorker->terminate();
+ if (pWorker.is())
+ pWorker->join();
+ }
+ }
+
+ // Delete all thread globals.
+ aThreadGlobals.mpWorkerThreads.reset();
+ aThreadGlobals.mpIdleThreads.reset();
+
+#else // non-threaded version
+ for( SheetFragmentVector::iterator it = rSheets.begin(), itEnd = rSheets.end(); it != itEnd; ++it)
+ {
+ // import the sheet fragment
+ rWorkbookHandler.importOoxFragment(it->second);
+ }
+#endif
+}
+
+}
+
void WorkbookFragment::finalizeImport()
{
ISegmentProgressBarRef xGlobalSegment = getProgressBar().createSegment( PROGRESS_LENGTH_GLOBALS );
@@ -229,8 +420,6 @@ void WorkbookFragment::finalizeImport()
fragments for all sheets that are needed before the cell formulas are
loaded. Additionally, the instances of the WorkbookGlobals structures
have to be stored for every sheet. */
- typedef ::std::pair< WorksheetGlobalsRef, FragmentHandlerRef > SheetFragmentHandler;
- typedef ::std::vector< SheetFragmentHandler > SheetFragmentVector;
SheetFragmentVector aSheetFragments;
std::vector<WorksheetHelper*> maHelpers;
WorksheetBuffer& rWorksheets = getWorksheets();
@@ -315,11 +504,7 @@ void WorkbookFragment::finalizeImport()
}
// load all worksheets
- for( SheetFragmentVector::iterator aIt = aSheetFragments.begin(), aEnd = aSheetFragments.end(); aIt != aEnd; ++aIt )
- {
- // import the sheet fragment
- importOoxFragment( aIt->second );
- }
+ importSheetFragments(*this, aSheetFragments);
for( std::vector<WorksheetHelper*>::iterator aIt = maHelpers.begin(), aEnd = maHelpers.end(); aIt != aEnd; ++aIt )
{
commit 6087da0dd402013b7d67fe6754081e647fdc5f8c
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 20:32:46 2013 -0500
getChar() to return a null-terminated char array.
No need to fetch string size with this change.
Change-Id: Iae5f6c60430fc57985a0fec5bfec59727e5a8f0f
diff --git a/include/oox/helper/attributelist.hxx b/include/oox/helper/attributelist.hxx
index 78ea83e..e22e816 100644
--- a/include/oox/helper/attributelist.hxx
+++ b/include/oox/helper/attributelist.hxx
@@ -75,12 +75,6 @@ public:
class OOX_DLLPUBLIC AttributeList
{
public:
- struct Char
- {
- const char* mpPos;
- size_t mnSize;
- };
-
explicit AttributeList(
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& rxAttribs );
@@ -138,7 +132,7 @@ public:
passed default string if the attribute is missing. */
OUString getXString( sal_Int32 nAttrToken, const OUString& rDefault ) const;
- Char getChar( sal_Int32 nAttrToken ) const;
+ const char* getChar( sal_Int32 nAttrToken ) const;
/** Returns the double value of the specified attribute, or the passed
diff --git a/include/sax/fastattribs.hxx b/include/sax/fastattribs.hxx
index f47da07..42b285c 100644
--- a/include/sax/fastattribs.hxx
+++ b/include/sax/fastattribs.hxx
@@ -76,7 +76,7 @@ public:
// performance sensitive shortcuts to avoid allocation ...
bool getAsInteger( sal_Int32 nToken, sal_Int32 &rInt);
bool getAsDouble( sal_Int32 nToken, double &rDouble);
- bool getAsChar( sal_Int32 nToken, const char*& rPos, size_t& rLen ) const;
+ bool getAsChar( sal_Int32 nToken, const char*& rPos ) const;
// XFastAttributeList
virtual ::sal_Bool SAL_CALL hasAttribute( ::sal_Int32 Token ) throw (::com::sun::star::uno::RuntimeException);
diff --git a/oox/source/helper/attributelist.cxx b/oox/source/helper/attributelist.cxx
index e57dd1d..2efc3a3 100644
--- a/oox/source/helper/attributelist.cxx
+++ b/oox/source/helper/attributelist.cxx
@@ -261,16 +261,14 @@ OUString AttributeList::getXString( sal_Int32 nAttrToken, const OUString& rDefau
return getXString( nAttrToken ).get( rDefault );
}
-AttributeList::Char AttributeList::getChar( sal_Int32 nAttrToken ) const
+const char* AttributeList::getChar( sal_Int32 nAttrToken ) const
{
- Char aRet;
- bool bValid = getAttribList()->getAsChar(nAttrToken, aRet.mpPos, aRet.mnSize);
+ const char* p = NULL;
+ bool bValid = getAttribList()->getAsChar(nAttrToken, p);
if (!bValid)
- {
- aRet.mpPos = NULL;
- aRet.mnSize = 0;
- }
- return aRet;
+ p = NULL;
+
+ return p;
}
double AttributeList::getDouble( sal_Int32 nAttrToken, double fDefault ) const
diff --git a/sax/source/tools/fastattribs.cxx b/sax/source/tools/fastattribs.cxx
index 17b9a3f..ee65cc6 100644
--- a/sax/source/tools/fastattribs.cxx
+++ b/sax/source/tools/fastattribs.cxx
@@ -157,7 +157,7 @@ bool FastAttributeList::getAsDouble( sal_Int32 nToken, double &rDouble)
return false;
}
-bool FastAttributeList::getAsChar( sal_Int32 nToken, const char*& rPos, size_t& rLen ) const
+bool FastAttributeList::getAsChar( sal_Int32 nToken, const char*& rPos ) const
{
for (size_t i = 0, n = maAttributeTokens.size(); i < n; ++i)
{
@@ -166,12 +166,6 @@ bool FastAttributeList::getAsChar( sal_Int32 nToken, const char*& rPos, size_t&
sal_Int32 nOffset = maAttributeValues[i];
rPos = mpChunk + nOffset;
-
- if (i + 1 < maAttributeValues.size())
- rLen = maAttributeValues[i+1] - nOffset - 1;
- else
- rLen = mnChunkLength - nOffset - 1;
-
return true;
}
diff --git a/sc/source/filter/inc/addressconverter.hxx b/sc/source/filter/inc/addressconverter.hxx
index 886e074..36f8599 100644
--- a/sc/source/filter/inc/addressconverter.hxx
+++ b/sc/source/filter/inc/addressconverter.hxx
@@ -214,7 +214,7 @@ public:
sal_Int32 nLength = SAL_MAX_INT32 );
static bool parseOoxAddress2d(
- sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr, sal_Int32 nStrLen );
+ sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr );
/** Tries to parse the passed string for a 2d cell range in A1 notation.
@@ -320,8 +320,7 @@ public:
sal_Int16 nSheet );
bool convertToCellAddressUnchecked(
- com::sun::star::table::CellAddress& orAddress,
- const char* pStr, size_t nStrLen, sal_Int16 nSheet ) const;
+ com::sun::star::table::CellAddress& orAddress, const char* pStr, sal_Int16 nSheet ) const;
/** Tries to convert the passed string to a single cell address.
@@ -340,7 +339,7 @@ public:
bool convertToCellAddress(
com::sun::star::table::CellAddress& rAddress,
- const char* pStr, size_t nStrLen, sal_Int16 nSheet, bool bTrackOverflow );
+ const char* pStr, sal_Int16 nSheet, bool bTrackOverflow );
/** Returns a valid cell address by moving it into allowed dimensions.
diff --git a/sc/source/filter/oox/addressconverter.cxx b/sc/source/filter/oox/addressconverter.cxx
index b9dbc53..59028ba 100644
--- a/sc/source/filter/oox/addressconverter.cxx
+++ b/sc/source/filter/oox/addressconverter.cxx
@@ -226,16 +226,13 @@ bool AddressConverter::parseOoxAddress2d(
return (ornColumn >= 0) && (ornRow >= 0);
}
-bool AddressConverter::parseOoxAddress2d(
- sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr, sal_Int32 nStrLen )
+bool AddressConverter::parseOoxAddress2d( sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr )
{
ornColumn = ornRow = 0;
- const char* pStrEnd = pStr + nStrLen;
-
enum { STATE_COL, STATE_ROW } eState = STATE_COL;
- while (pStr < pStrEnd)
+ while (*pStr)
{
char cChar = *pStr;
switch( eState )
@@ -356,11 +353,10 @@ bool AddressConverter::convertToCellAddressUnchecked( CellAddress& orAddress,
}
bool AddressConverter::convertToCellAddressUnchecked(
- com::sun::star::table::CellAddress& orAddress,
- const char* pStr, size_t nStrLen, sal_Int16 nSheet ) const
+ com::sun::star::table::CellAddress& orAddress, const char* pStr, sal_Int16 nSheet ) const
{
orAddress.Sheet = nSheet;
- return parseOoxAddress2d(orAddress.Column, orAddress.Row, pStr, nStrLen);
+ return parseOoxAddress2d(orAddress.Column, orAddress.Row, pStr);
}
bool AddressConverter::convertToCellAddress( CellAddress& orAddress,
@@ -373,9 +369,9 @@ bool AddressConverter::convertToCellAddress( CellAddress& orAddress,
bool AddressConverter::convertToCellAddress(
com::sun::star::table::CellAddress& rAddress,
- const char* pStr, size_t nStrLen, sal_Int16 nSheet, bool bTrackOverflow )
+ const char* pStr, sal_Int16 nSheet, bool bTrackOverflow )
{
- if (!convertToCellAddressUnchecked(rAddress, pStr, nStrLen, nSheet))
+ if (!convertToCellAddressUnchecked(rAddress, pStr, nSheet))
return false;
return checkCellAddress(rAddress, bTrackOverflow);
diff --git a/sc/source/filter/oox/sheetdatacontext.cxx b/sc/source/filter/oox/sheetdatacontext.cxx
index ca55119..5170234 100644
--- a/sc/source/filter/oox/sheetdatacontext.cxx
+++ b/sc/source/filter/oox/sheetdatacontext.cxx
@@ -311,18 +311,16 @@ void SheetDataContext::importRow( const AttributeList& rAttribs )
bool SheetDataContext::importCell( const AttributeList& rAttribs )
{
bool bValid = true;
- AttributeList::Char aChar = rAttribs.getChar(XML_r);
+ const char* p = rAttribs.getChar(XML_r);
- if (!aChar.mpPos)
+ if (!p)
{
++mnCol;
maCellData.maCellAddr = CellAddress( mnSheet, mnCol, mnRow );
}
else
{
- bValid = mrAddressConv.convertToCellAddress(
- maCellData.maCellAddr, aChar.mpPos, aChar.mnSize, mnSheet, true);
-
+ bValid = mrAddressConv.convertToCellAddress(maCellData.maCellAddr, p, mnSheet, true);
mnCol = maCellData.maCellAddr.Column;
}
commit 151beeb0b234512768080da3441ebe40a46cd861
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 16:46:57 2013 -0500
Set default cell style directly, without UNO API.
This also avoids unnecessary row height adjustments.
Change-Id: Icfecf0a5fdf7ef18db368ebadcf9d0b8700c0b65
diff --git a/sc/inc/documentimport.hxx b/sc/inc/documentimport.hxx
index d2aa994..222908e 100644
--- a/sc/inc/documentimport.hxx
+++ b/sc/inc/documentimport.hxx
@@ -23,6 +23,7 @@ class ScColumn;
class ScAddress;
class ScTokenArray;
class ScFormulaCell;
+class ScStyleSheet;
struct ScSetStringParam;
struct ScTabOpParam;
struct ScDocumentImportImpl;
@@ -50,6 +51,11 @@ public:
void setDefaultNumericScript(sal_uInt16 nScript);
/**
+ * Apply specified cell style to an entire sheet.
+ */
+ void setCellStyleToSheet(SCTAB nTab, const ScStyleSheet& rStyle);
+
+ /**
* @param rName sheet name.
*
* @return 0-based sheet index, or -1 in case no sheet is found by
diff --git a/sc/source/core/data/documentimport.cxx b/sc/source/core/data/documentimport.cxx
index 7138795..3ca06c5 100644
--- a/sc/source/core/data/documentimport.cxx
+++ b/sc/source/core/data/documentimport.cxx
@@ -58,6 +58,15 @@ void ScDocumentImport::setDefaultNumericScript(sal_uInt16 nScript)
mpImpl->mnDefaultScriptNumeric = nScript;
}
+void ScDocumentImport::setCellStyleToSheet(SCTAB nTab, const ScStyleSheet& rStyle)
+{
+ ScTable* pTab = mpImpl->mrDoc.FetchTable(nTab);
+ if (!pTab)
+ return;
+
+ pTab->ApplyStyleArea(0, 0, MAXCOL, MAXROW, rStyle);
+}
+
SCTAB ScDocumentImport::getSheetIndex(const OUString& rName) const
{
SCTAB nTab = -1;
diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index 6d0ea85..e3a4c89 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -70,6 +70,8 @@
#include "tokenarray.hxx"
#include "tablebuffer.hxx"
#include "documentimport.hxx"
+#include "stlsheet.hxx"
+#include "stlpool.hxx"
#include <svl/stritem.hxx>
#include <editeng/editobj.hxx>
@@ -938,8 +940,14 @@ void WorksheetGlobals::setRowModel( const RowModel& rModel )
void WorksheetGlobals::initializeWorksheetImport()
{
// set default cell style for unused cells
- PropertySet aPropSet( mxSheet );
- aPropSet.setProperty( PROP_CellStyle, getStyles().getDefaultStyleName() );
+ ScDocumentImport& rDoc = getDocImport();
+
+ ScStyleSheet* pStyleSheet =
+ static_cast<ScStyleSheet*>(rDoc.getDoc().GetStyleSheetPool()->Find(
+ getStyles().getDefaultStyleName(), SFX_STYLE_FAMILY_PARA));
+
+ if (pStyleSheet)
+ rDoc.setCellStyleToSheet(getSheetIndex(), *pStyleSheet);
/* Remember the current sheet index in global data, needed by global
objects, e.g. the chart converter. */
commit 3797e61e5eb15b9dee9c55afe95013f134ac2d5d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 15:08:48 2013 -0500
More removal of UNO API for setting document properties.
Change-Id: I8c68308394a64eee0985d7d1f8c8b34637a6da74
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 80d724b..49fd571 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1126,7 +1126,7 @@ public:
bool IsUndo() const { return bIsUndo; }
bool IsClipboard() const { return bIsClip; }
bool IsUndoEnabled() const { return mbUndoEnabled; }
- void EnableUndo( bool bVal );
+ SC_DLLPUBLIC void EnableUndo( bool bVal );
bool IsAdjustHeightEnabled() const { return mbAdjustHeightEnabled; }
void EnableAdjustHeight( bool bVal ) { mbAdjustHeightEnabled = bVal; }
diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx
index 022f342..abafb20 100644
--- a/sc/source/filter/inc/workbookhelper.hxx
+++ b/sc/source/filter/inc/workbookhelper.hxx
@@ -56,6 +56,7 @@ namespace oox { namespace core {
} }
class ScDocument;
+class ScDocShell;
class ScDocumentImport;
class ScEditEngineDefaulter;
@@ -152,6 +153,7 @@ public:
ScDocument& getScDocument();
const ScDocument& getScDocument() const;
+ ScDocShell& getDocShell();
ScDocumentImport& getDocImport();
ScEditEngineDefaulter& getEditEngine() const;
diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index fc3c2aa..30f0f34 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -338,7 +338,7 @@ void WorkbookFragment::finalizeImport()
// Recalculate formula cells.
ScDocument& rDoc = getScDocument();
- ScDocShell* pDocSh = static_cast<ScDocShell*>(rDoc.GetDocumentShell());
+ ScDocShell& rDocSh = getDocShell();
Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
ScRecalcOptions nRecalcMode =
static_cast<ScRecalcOptions>(officecfg::Office::Calc::Formula::Load::OOXMLRecalcMode::get(xContext));
@@ -349,7 +349,7 @@ void WorkbookFragment::finalizeImport()
{
// Ask the user if full re-calculation is desired.
QueryBox aBox(
- pDocSh->GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
+ rDocSh.GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
ScGlobal::GetRscString(STR_QUERY_FORMULA_RECALC_ONLOAD_XLS));
aBox.SetCheckBoxText(ScGlobal::GetRscString(STR_ALWAYS_PERFORM_SELECTED));
@@ -373,7 +373,7 @@ void WorkbookFragment::finalizeImport()
bHardRecalc = true;
if (bHardRecalc)
- pDocSh->DoHardRecalc(false);
+ rDocSh.DoHardRecalc(false);
else
rDoc.CalcFormulaTree(false, true, false);
}
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index a27998e..33270e5 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -72,6 +72,7 @@
#include "datauno.hxx"
#include "globalnames.hxx"
#include "documentimport.hxx"
+#include "drwlayer.hxx"
#include "formulabuffer.hxx"
#include "vcl/mapmod.hxx"
@@ -150,6 +151,7 @@ public:
ScDocument& getScDocument() { return *mpDoc; }
const ScDocument& getScDocument() const { return *mpDoc; }
+ ScDocShell& getDocShell();
ScDocumentImport& getDocImport();
/** Returns a reference to the source/target spreadsheet document model. */
@@ -305,6 +307,7 @@ private:
rtl_TextEncoding meTextEnc; /// BIFF byte string text encoding.
bool mbHasCodePage; /// True = CODEPAGE record exists in imported stream.
ScDocument* mpDoc;
+ ScDocShell* mpDocShell;
boost::scoped_ptr<ScDocumentImport> mxDocImport;
};
@@ -316,7 +319,8 @@ WorkbookGlobals::WorkbookGlobals( ExcelFilter& rFilter ) :
meFilterType( FILTER_OOXML ),
mpOoxFilter( &rFilter ),
meBiff( BIFF_UNKNOWN ),
- mpDoc( NULL )
+ mpDoc(NULL),
+ mpDocShell(NULL)
{
// register at the filter, needed for virtual callbacks (even during construction)
mrExcelFilter.registerWorkbookGlobals( *this );
@@ -329,6 +333,11 @@ WorkbookGlobals::~WorkbookGlobals()
mrExcelFilter.unregisterWorkbookGlobals();
}
+ScDocShell& WorkbookGlobals::getDocShell()
+{
+ return *mpDocShell;
+}
+
ScDocumentImport& WorkbookGlobals::getDocImport()
{
return *mxDocImport;
@@ -534,11 +543,10 @@ void WorkbookGlobals::initialize( bool bWorkbookFile )
if (mxDoc.get())
{
ScModelObj* pModel = dynamic_cast<ScModelObj*>(mxDoc.get());
- ScDocShell* pDocShell = NULL;
if (pModel)
- pDocShell = static_cast<ScDocShell*>(pModel->GetEmbeddedObject());
- if (pDocShell)
- mpDoc = pDocShell->GetDocument();
+ mpDocShell = static_cast<ScDocShell*>(pModel->GetEmbeddedObject());
+ if (mpDocShell)
+ mpDoc = mpDocShell->GetDocument();
}
if (!mpDoc)
@@ -578,19 +586,16 @@ void WorkbookGlobals::initialize( bool bWorkbookFile )
// set some document properties needed during import
if( mrBaseFilter.isImportFilter() )
{
- PropertySet aPropSet( mxDoc );
// enable editing read-only documents (e.g. from read-only files)
- aPropSet.setProperty( PROP_IsChangeReadOnlyEnabled, true );
+ mpDoc->EnableChangeReadOnly(true);
// #i76026# disable Undo while loading the document
- aPropSet.setProperty( PROP_IsUndoEnabled, false );
+ mpDoc->EnableUndo(false);
// #i79826# disable calculating automatic row height while loading the document
- aPropSet.setProperty( PROP_IsAdjustHeightEnabled, false );
+ mpDoc->EnableAdjustHeight(true);
// disable automatic update of linked sheets and DDE links
- aPropSet.setProperty( PROP_IsExecuteLinkEnabled, false );
+ mpDoc->EnableExecuteLink(false);
// #i79890# disable automatic update of defined names
- Reference< XActionLockable > xLockable( aPropSet.getAnyProperty( PROP_NamedRanges ), UNO_QUERY );
- if( xLockable.is() )
- xLockable->addActionLock();
+ mpDoc->CompileNameFormula(true);
//! TODO: localize progress bar text
mxProgressBar.reset( new SegmentProgressBar( mrBaseFilter.getStatusIndicator(), "Loading..." ) );
@@ -598,7 +603,7 @@ void WorkbookGlobals::initialize( bool bWorkbookFile )
//prevent unnecessary broadcasts and "half way listeners" as
//is done in ScDocShell::BeforeXMLLoading() for ods
- getScDocument().SetInsertingFromOtherDoc(true);
+ mpDoc->SetInsertingFromOtherDoc(true);
}
else if( mrBaseFilter.isExportFilter() )
{
@@ -625,26 +630,28 @@ void WorkbookGlobals::finalize()
// set some document properties needed after import
if( mrBaseFilter.isImportFilter() )
{
- PropertySet aPropSet( mxDoc );
// #i74668# do not insert default sheets
- aPropSet.setProperty( PROP_IsLoaded, true );
+ mpDocShell->SetEmpty(false);
// #i79890# Compile named ranges before re-enabling row height adjustment. (no idea why).
mpDoc->CompileNameFormula(false);
// enable automatic update of linked sheets and DDE links
- aPropSet.setProperty( PROP_IsExecuteLinkEnabled, true );
+ mpDoc->EnableExecuteLink(true);
// #i79826# enable updating automatic row height after loading the document
- aPropSet.setProperty( PROP_IsAdjustHeightEnabled, true );
+ mpDoc->EnableAdjustHeight(true);
// #i76026# enable Undo after loading the document
- aPropSet.setProperty( PROP_IsUndoEnabled, true );
+ mpDoc->EnableUndo(true);
+
// disable editing read-only documents (e.g. from read-only files)
- aPropSet.setProperty( PROP_IsChangeReadOnlyEnabled, false );
+ mpDoc->EnableChangeReadOnly(false);
// #111099# open forms in alive mode (has no effect, if no controls in document)
- aPropSet.setProperty( PROP_ApplyFormDesignMode, false );
+ ScDrawLayer* pModel = mpDoc->GetDrawLayer();
+ if (pModel)
+ pModel->SetOpenInDesignMode(false);
//stop preventing establishment of listeners as is done in
//ScDocShell::AfterXMLLoading() for ods
- getScDocument().SetInsertingFromOtherDoc(false);
+ mpDoc->SetInsertingFromOtherDoc(false);
getDocImport().finalize();
}
}
@@ -745,6 +752,11 @@ const ScDocument& WorkbookHelper::getScDocument() const
return mrBookGlob.getScDocument();
}
+ScDocShell& WorkbookHelper::getDocShell()
+{
+ return mrBookGlob.getDocShell();
+}
+
ScDocumentImport& WorkbookHelper::getDocImport()
{
return mrBookGlob.getDocImport();
commit 0762f059c49289d56010d667fd2311d349f5d383
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 14:23:32 2013 -0500
Call the method directly via ScDocument, not via obscure UNO API.
Change-Id: I27628314337ae4df31420d63d7c09148369a6759
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 68e57d2..80d724b 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1920,7 +1920,7 @@ public:
void CompileDBFormula();
void CompileDBFormula( bool bCreateFormulaString );
- void CompileNameFormula( bool bCreateFormulaString );
+ SC_DLLPUBLIC void CompileNameFormula( bool bCreateFormulaString );
void CompileColRowNameFormula();
/** Maximum string length of a column, e.g. for dBase export.
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 240677b..65d6c88 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -3198,7 +3198,6 @@ void ScColumn::CompileNameFormula( bool bCreateFormulaString )
{
CompileNameFormulaHandler aFunc(bCreateFormulaString);
sc::ProcessFormula(maCells, aFunc);
- RegroupFormulaCells();
}
void ScColumn::CompileColRowNameFormula()
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index 31dd5bd..a27998e 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -628,10 +628,8 @@ void WorkbookGlobals::finalize()
PropertySet aPropSet( mxDoc );
// #i74668# do not insert default sheets
aPropSet.setProperty( PROP_IsLoaded, true );
- // #i79890# enable automatic update of defined names (before IsAdjustHeightEnabled!)
- Reference< XActionLockable > xLockable( aPropSet.getAnyProperty( PROP_NamedRanges ), UNO_QUERY );
- if( xLockable.is() )
- xLockable->removeActionLock();
+ // #i79890# Compile named ranges before re-enabling row height adjustment. (no idea why).
+ mpDoc->CompileNameFormula(false);
// enable automatic update of linked sheets and DDE links
aPropSet.setProperty( PROP_IsExecuteLinkEnabled, true );
// #i79826# enable updating automatic row height after loading the document
commit 79ceef879205c428bbb87e729a2d3ba68d6e6a0f
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 13:44:45 2013 -0500
Shrink class sizes a bit.
Change-Id: I2561ede5a42ad1f0f3bb74f7b9375f87010eddc3
diff --git a/sc/source/filter/inc/worksheethelper.hxx b/sc/source/filter/inc/worksheethelper.hxx
index 8cda876..bbcd152 100644
--- a/sc/source/filter/inc/worksheethelper.hxx
+++ b/sc/source/filter/inc/worksheethelper.hxx
@@ -83,9 +83,9 @@ struct ColumnModel
double mfWidth; /// Column width in number of characters.
sal_Int32 mnXfId; /// Column default formatting.
sal_Int32 mnLevel; /// Column outline level.
- bool mbShowPhonetic; /// True = cells in column show phonetic settings.
- bool mbHidden; /// True = column is hidden.
- bool mbCollapsed; /// True = column outline is collapsed.
+ bool mbShowPhonetic:1; /// True = cells in column show phonetic settings.
+ bool mbHidden:1; /// True = column is hidden.
+ bool mbCollapsed:1; /// True = column outline is collapsed.
explicit ColumnModel();
@@ -103,13 +103,13 @@ struct RowModel
double mfHeight; /// Row height in points.
sal_Int32 mnXfId; /// Row default formatting (see mbIsFormatted).
sal_Int32 mnLevel; /// Row outline level.
- bool mbCustomHeight; /// True = row has custom height.
- bool mbCustomFormat; /// True = cells in row have explicit formatting.
- bool mbShowPhonetic; /// True = cells in row show phonetic settings.
- bool mbHidden; /// True = row is hidden.
- bool mbCollapsed; /// True = row outline is collapsed.
- bool mbThickTop; /// True = row has extra space above text.
- bool mbThickBottom; /// True = row has extra space below text.
+ bool mbCustomHeight:1; /// True = row has custom height.
+ bool mbCustomFormat:1; /// True = cells in row have explicit formatting.
+ bool mbShowPhonetic:1; /// True = cells in row show phonetic settings.
+ bool mbHidden:1; /// True = row is hidden.
+ bool mbCollapsed:1; /// True = row outline is collapsed.
+ bool mbThickTop:1; /// True = row has extra space above text.
+ bool mbThickBottom:1; /// True = row has extra space below text.
explicit RowModel();
@@ -159,10 +159,10 @@ struct ValidationModel
sal_Int32 mnType;
sal_Int32 mnOperator;
sal_Int32 mnErrorStyle;
- bool mbShowInputMsg;
- bool mbShowErrorMsg;
- bool mbNoDropDown;
- bool mbAllowBlank;
+ bool mbShowInputMsg:1;
+ bool mbShowErrorMsg:1;
+ bool mbNoDropDown:1;
+ bool mbAllowBlank:1;
explicit ValidationModel();
commit 3a22d789c22452b6a481c331db680a6b9d87a8ca
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 12:18:56 2013 -0500
Avoid re-drawing progress bar too frequently.
Change-Id: I01dcd6d421c1f648b4cd8413e3baf50fd26d4c8f
diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index 0ff9293..6d0ea85 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -96,12 +96,14 @@ namespace {
void lclUpdateProgressBar( const ISegmentProgressBarRef& rxProgressBar, const CellRangeAddress& rUsedArea, sal_Int32 nRow )
{
- if( rxProgressBar.get() && (rUsedArea.StartRow <= nRow) && (nRow <= rUsedArea.EndRow) )
- {
- double fPosition = static_cast< double >( nRow - rUsedArea.StartRow + 1 ) / (rUsedArea.EndRow - rUsedArea.StartRow + 1);
- if( rxProgressBar->getPosition() < fPosition )
- rxProgressBar->setPosition( fPosition );
- }
+ if (!rxProgressBar || nRow < rUsedArea.StartRow || rUsedArea.EndRow < nRow)
+ return;
+
+ double fCurPos = rxProgressBar->getPosition();
+ double fNewPos = static_cast<double>(nRow - rUsedArea.StartRow + 1.0) / (rUsedArea.EndRow - rUsedArea.StartRow + 1.0);
+ if (fCurPos < fNewPos && (fNewPos - fCurPos) > 0.3)
+ // Try not to re-draw progress bar too frequently.
+ rxProgressBar->setPosition(fNewPos);
}
void lclUpdateProgressBar( const ISegmentProgressBarRef& rxProgressBar, double fPosition )
commit 5db19a417952381fc6349b9691c581090d7d2679
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Thu Nov 21 09:43:46 2013 -0500
Compiler warning.
Change-Id: I66b16e9767369fd54611f92d66cd1b43f4e8c5a8
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 3f5731b..7526741 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -782,7 +782,7 @@ void DrawingML::WriteRunProperties( Reference< XPropertySet > rRun, sal_Bool bIs
mAny >>= nCharEscapement;
if( nCharEscapement && GETAD( CharEscapementHeight ) ) {
- sal_uInt32 nCharEscapementHeight;
+ sal_uInt32 nCharEscapementHeight = 0;
mAny >>= nCharEscapementHeight;
nSize = (nSize * nCharEscapementHeight) / 100;
// MSO uses default ~58% size
commit 8cef6c7ec67aec88b339ca647e784afbabf190f8
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Nov 22 13:20:12 2013 +0000
Related: fdo#41169 fix GTK non-Latin keyboard layout with Latin shortcuts
See also rhbz#958300
Change-Id: I5c3cf9652adb7b1c9ec53a32ed39f231a09ae1d7
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 5651dcf..de96dbd 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -335,6 +335,14 @@ static sal_uInt16 GetKeyCode( guint keyval )
return nCode;
}
+static guint GetKeyValFor(GdkKeymap* pKeyMap, guint16 hardware_keycode, guint8 group)
+{
+ guint updated_keyval = 0;
+ gdk_keymap_translate_keyboard_state(pKeyMap, hardware_keycode,
+ (GdkModifierType)0, group, &updated_keyval, NULL, NULL, NULL);
+ return updated_keyval;
+}
+
// F10 means either KEY_F10 or KEY_MENU, which has to be decided
// in the independent part.
struct KeyAlternate
@@ -385,7 +393,7 @@ struct DamageTracker : public basebmp::IBitmapDeviceDamageTracker
void GtkSalFrame::doKeyCallback( guint state,
guint keyval,
guint16 hardware_keycode,
- guint8 /*group*/,
+ guint8 group,
guint32 time,
sal_Unicode aOrigCode,
bool bDown,
@@ -417,33 +425,48 @@ void GtkSalFrame::doKeyCallback( guint state,
}
#endif
- /* #i42122# translate all keys with Ctrl and/or Alt to group 0
- * else shortcuts (e.g. Ctrl-o) will not work but be inserted by
- * the application
- */
- /* #i52338# do this for all keys that the independent part has no key code for
- */
+ /*
+ * #i42122# translate all keys with Ctrl and/or Alt to group 0 else
+ * shortcuts (e.g. Ctrl-o) will not work but be inserted by the
+ * application
+ *
+ * #i52338# do this for all keys that the independent part has no key code
+ * for
+ *
+ * fdo#41169 rather than use group 0, detect if there is a group which can
+ * be used to input Latin text and use that if possible
+ */
aEvent.mnCode = GetKeyCode( keyval );
if( aEvent.mnCode == 0 )
{
- // check other mapping
- gint eff_group, level;
- GdkModifierType consumed;
- guint updated_keyval = 0;
- // use gdk_keymap_get_default instead of NULL;
- // workaround a crahs fixed in gtk 2.4
- if( gdk_keymap_translate_keyboard_state( gdk_keymap_get_default(),
- hardware_keycode,
- (GdkModifierType)0,
- 0,
- &updated_keyval,
- &eff_group,
- &level,
- &consumed ) )
+ gint best_group = SAL_MAX_INT32;
+
+ // Try and find Latin layout
+ GdkKeymap* keymap = gdk_keymap_get_default();
+ GdkKeymapKey *keys;
+ gint n_keys;
+ if (gdk_keymap_get_entries_for_keyval(keymap, GDK_A, &keys, &n_keys))
{
- aEvent.mnCode = GetKeyCode( updated_keyval );
+ // Find the lowest group that supports Latin layout
+ for (gint i = 0; i < n_keys; ++i)
+ {
+ if (keys[i].level != 0 && keys[i].level != 1)
+ continue;
+ best_group = std::min(best_group, keys[i].group);
+ if (best_group == 0)
+ break;
+ }
+ g_free(keys);
}
+
+ //Unavailable, go with original group then I suppose
+ if (best_group == SAL_MAX_INT32)
+ best_group = group;
+
+ guint updated_keyval = GetKeyValFor(keymap, hardware_keycode, best_group);
+ aEvent.mnCode = GetKeyCode(updated_keyval);
}
+
aEvent.mnCode |= GetKeyModCode( state );
if( bDown )
commit 48c29ef3f8214b21833a88adf02c1e1998f27b68
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 15:08:30 2013 +0200
Now we can re-add CustomTarget_MobileLibreOffice_app
Change-Id: Iefb00e72f2700503ea33a28c9f7e2150f0d1e06e
diff --git a/ios/Module_ios.mk b/ios/Module_ios.mk
index d70e277..671e9f3 100644
--- a/ios/Module_ios.mk
+++ b/ios/Module_ios.mk
@@ -13,6 +13,7 @@ ifeq ($(OS),IOS)
$(eval $(call gb_Module_add_targets,ios,\
Executable_LibreOffice \
CustomTarget_LibreOffice_app \
+ CustomTarget_MobileLibreOffice_app \
))
endif
commit 542dee77d483e10fcd540abc04cee9fa727b6c63
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 15:01:51 2013 +0200
Schemes don't exist in a clean tree, so use targets
The intent hopefully is that the MobileLibreOffice project should be
buildable in a freshly cloned or otherwise clean tree, where Xcode has
not been used interactively (which automatically creates a scheme for
each target, it seems).
Change-Id: I690513ecf54bb824dd3c3b0ef1735cc5cdff6d60
diff --git a/ios/CustomTarget_MobileLibreOffice_app.mk b/ios/CustomTarget_MobileLibreOffice_app.mk
index 76b3e75..404d797 100644
--- a/ios/CustomTarget_MobileLibreOffice_app.mk
+++ b/ios/CustomTarget_MobileLibreOffice_app.mk
@@ -15,7 +15,8 @@ BUILDID :=$(shell cd $(SRCDIR) && git log -1 --format=%H)
#- Macros ---------------------------------------------------------------------
define MobileLibreOfficeXcodeBuild
- CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -scheme MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
+ CC=;xcodebuild -project shared/ios_sharedlo.xcodeproj -target ios_sharedlo -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
+ CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -target MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
endef
#- Targets --------------------------------------------------------------------
commit 86c12faeb68b1e952118436c00f55a19b33866fc
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 13:45:29 2013 +0200
No lib_link directory is used any more
Change-Id: Ic21750744794b4721c28f4e2b23e5e5ca5d74db5
diff --git a/ios/MobileLibreOffice/.gitignore b/ios/MobileLibreOffice/.gitignore
index 85f0b5d..289939e 100644
--- a/ios/MobileLibreOffice/.gitignore
+++ b/ios/MobileLibreOffice/.gitignore
@@ -1,2 +1 @@
-/lib_link
/resource_link
commit e434c1ce0557454ef4cdd98435c5c0b1d5181bcf
Author: Winfried Donkers <winfrieddonkers at libreoffice.org>
Date: Thu Nov 21 11:16:43 2013 +0100
fdo#71722 add Excel 2010 functions
EXPON.DIST, HYPGEOM.DIST, POISSON.DIST, WEIBULL.DIST
Change-Id: Ib9f648739ec0af90cdf2f576c7f548a6acb7b4a6
Reviewed-on: https://gerrit.libreoffice.org/6748
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Eike Rathke <erack at redhat.com>
diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src
index 609928b..afb1d15 100644
--- a/formula/source/core/resource/core_resource.src
+++ b/formula/source/core/resource/core_resource.src
@@ -195,9 +195,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_B { Text = "BINOM.DIST.RANGE" ; };
String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+ String SC_OPCODE_EXP_DIST_MS { Text = "COM.MICROSOFT.EXPON.DIST" ; };
String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
String SC_OPCODE_BINOM_DIST_MS { Text = "COM.MICROSOFT.BINOM.DIST" ; };
String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+ String SC_OPCODE_POISSON_DIST_MS { Text = "COM.MICROSOFT.POISSON.DIST" ; };
String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
String SC_OPCODE_KOMBIN_2 { Text = "COMBINA" ; };
String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -281,6 +283,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_MATRIX_UNIT { Text = "MUNIT" ; };
String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+ String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "COM.MICROSOFT.HYPGEOM.DIST" ; };
String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
String SC_OPCODE_T_DIST { Text = "LEGACY.TDIST" ; };
String SC_OPCODE_F_DIST { Text = "LEGACY.FDIST" ; };
@@ -289,6 +292,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_CHI_DIST { Text = "LEGACY.CHIDIST" ; };
String SC_OPCODE_CHI_DIST_MS { Text = "COM.MICROSOFT.CHISQ.DIST.RT" ; };
String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+ String SC_OPCODE_WEIBULL_MS { Text = "COM.MICROSOFT.WEIBULL.DIST" ; };
String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
String SC_OPCODE_BINOM_INV { Text = "COM.MICROSOFT.BINOM.INV" ; };
@@ -563,9 +567,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_B { Text = "B" ; };
String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+ String SC_OPCODE_EXP_DIST_MS { Text = "_xlfn.EXPON.DIST" ; };
String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
String SC_OPCODE_BINOM_DIST_MS { Text = "_xlfn.BINOM.DIST" ; };
String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+ String SC_OPCODE_POISSON_DIST_MS { Text = "_xlfn.POISSON.DIST" ; };
String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
String SC_OPCODE_KOMBIN_2 { Text = "_xlfn.COMBINA" ; };
String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -649,6 +655,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_MATRIX_UNIT { Text = "_xlfn.MUNIT" ; };
String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+ String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "_xlfn.HYPGEOM.DIST" ; };
String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
String SC_OPCODE_T_DIST { Text = "TDIST" ; };
String SC_OPCODE_F_DIST { Text = "FDIST" ; };
@@ -657,6 +664,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
String SC_OPCODE_CHI_DIST_MS { Text = "_xlfn.CHISQ.DIST.RT" ; };
String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+ String SC_OPCODE_WEIBULL_MS { Text = "_xlfn.WEIBULL.DIST" ; };
String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
String SC_OPCODE_BINOM_INV { Text = "_xlfn.BINOM.INV" ; };
@@ -933,9 +941,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_B { Text = "B" ; };
String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+ String SC_OPCODE_EXP_DIST_MS { Text = "EXPON.DIST" ; };
String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
String SC_OPCODE_BINOM_DIST_MS { Text = "BINOM.DIST" ; };
String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+ String SC_OPCODE_POISSON_DIST_MS { Text = "POISSON.DIST" ; };
String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
String SC_OPCODE_KOMBIN_2 { Text = "COMBINA" ; };
String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -1019,6 +1029,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_MATRIX_UNIT { Text = "MUNIT" ; };
String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+ String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "HYPGEOM.DIST" ; };
String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
String SC_OPCODE_T_DIST { Text = "TDIST" ; };
String SC_OPCODE_F_DIST { Text = "FDIST" ; };
@@ -1027,6 +1038,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
String SC_OPCODE_CHI_DIST_MS { Text = "CHISQ.DIST.RT" ; };
String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+ String SC_OPCODE_WEIBULL_MS { Text = "WEIBULL.DIST" ; };
String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
String SC_OPCODE_BINOM_INV { Text = "BINOM.INV" ; };
@@ -1743,6 +1755,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "EXPONDIST" ;
};
+ String SC_OPCODE_EXP_DIST_MS
+ {
+ Text [ en-US ] = "EXPON.DIST" ;
+ };
String SC_OPCODE_BINOM_DIST
{
Text [ en-US ] = "BINOMDIST" ;
@@ -1755,6 +1771,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "POISSON" ;
};
+ String SC_OPCODE_POISSON_DIST_MS
+ {
+ Text [ en-US ] = "POISSON.DIST" ;
+ };
String SC_OPCODE_KOMBIN
{
Text [ en-US ] = "COMBIN" ;
@@ -2088,6 +2108,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "HYPGEOMDIST" ;
};
+ String SC_OPCODE_HYP_GEOM_DIST_MS
+ {
+ Text [ en-US ] = "HYPGEOM.DIST" ;
+ };
String SC_OPCODE_LOG_NORM_DIST
{
Text [ en-US ] = "LOGNORMDIST" ;
@@ -2120,6 +2144,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "WEIBULL" ;
};
+ String SC_OPCODE_WEIBULL_MS
+ {
+ Text [ en-US ] = "WEIBULL.DIST" ;
+ };
String SC_OPCODE_NEG_BINOM_VERT
{
Text [ en-US ] = "NEGBINOMDIST" ;
diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index 4f2f4e6..9bda945 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -430,8 +430,12 @@
#define SC_OPCODE_F_INV_LT 432
#define SC_OPCODE_F_INV_RT 433
#define SC_OPCODE_F_TEST_MS 434
+#define SC_OPCODE_EXP_DIST_MS 435
+#define SC_OPCODE_HYP_GEOM_DIST_MS 436
+#define SC_OPCODE_POISSON_DIST_MS 437
+#define SC_OPCODE_WEIBULL_MS 438
-#define SC_OPCODE_STOP_2_PAR 435 /* last function with two or more parameters' OpCode + 1 */
+#define SC_OPCODE_STOP_2_PAR 439 /* last function with two or more parameters' OpCode + 1 */
#define SC_OPCODE_STOP_FUNCTION SC_OPCODE_STOP_2_PAR /* last function's OpCode + 1 */
#define SC_OPCODE_LAST_OPCODE_ID (SC_OPCODE_STOP_FUNCTION - 1) /* last OpCode */
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index b5953f7..58f3d41 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -229,10 +229,12 @@ enum OpCodeEnum
ocB = SC_OPCODE_B,
ocNormDist = SC_OPCODE_NORM_DIST,
ocExpDist = SC_OPCODE_EXP_DIST,
+ ocExpDist_MS = SC_OPCODE_EXP_DIST_MS,
ocBinomDist = SC_OPCODE_BINOM_DIST,
ocBinomDist_MS = SC_OPCODE_BINOM_DIST_MS,
ocBinomInv = SC_OPCODE_BINOM_INV,
ocPoissonDist = SC_OPCODE_POISSON_DIST,
+ ocPoissonDist_MS = SC_OPCODE_POISSON_DIST_MS,
ocKombin = SC_OPCODE_KOMBIN,
ocKombin2 = SC_OPCODE_KOMBIN_2,
ocVariationen = SC_OPCODE_VARIATIONEN,
@@ -323,6 +325,7 @@ enum OpCodeEnum
ocBackSolver = SC_OPCODE_BACK_SOLVER,
// Statistical functions
ocHypGeomDist = SC_OPCODE_HYP_GEOM_DIST,
+ ocHypGeomDist_MS = SC_OPCODE_HYP_GEOM_DIST_MS,
ocLogNormDist = SC_OPCODE_LOG_NORM_DIST,
ocTDist = SC_OPCODE_T_DIST,
ocFDist = SC_OPCODE_F_DIST,
@@ -335,6 +338,7 @@ enum OpCodeEnum
ocChiSqInv = SC_OPCODE_CHISQ_INV,
ocChiSqInv_MS = SC_OPCODE_CHISQ_INV_MS,
ocWeibull = SC_OPCODE_WEIBULL,
+ ocWeibull_MS = SC_OPCODE_WEIBULL_MS,
ocNegBinomVert = SC_OPCODE_NEG_BINOM_VERT,
ocKritBinom = SC_OPCODE_KRIT_BINOM,
ocKurt = SC_OPCODE_KURT,
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 5547551..e1c2dac 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -700,5 +700,9 @@
#define HID_FUNC_F_INV_LT "SC_HID_FUNC_F_INV_LT"
#define HID_FUNC_F_INV_RT "SC_HID_FUNC_F_INV_RT"
#define HID_FUNC_F_TEST_MS "SC_HID_FUNC_F_TEST_MS"
+#define HID_FUNC_EXP_DIST_MS "SC_HID_FUNC_EXP_DIST_MS"
+#define HID_FUNC_HYP_GEOM_DIST_MS "SC_HID_FUNC_HYP_GEOM_DIST_MS"
+#define HID_FUNC_POISSON_DIST_MS "SC_HID_FUNC_POISSON_DIST_MS"
+#define HID_FUNC_WEIBULL_DIST_MS "SC_HID_FUNC_WEIBULL_DIST_MS"
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 8d30157..97a8d70 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2388,6 +2388,7 @@ void Test::testFunctionLists()
"COVARIANCE.S",
"CRITBINOM",
"DEVSQ",
+ "EXPON.DIST",
"EXPONDIST",
"F.DIST",
"F.DIST.RT",
@@ -2407,6 +2408,7 @@ void Test::testFunctionLists()
"GAUSS",
"GEOMEAN",
"HARMEAN",
+ "HYPGEOM.DIST",
"HYPGEOMDIST",
"INTERCEPT",
"KURT",
@@ -2431,6 +2433,7 @@ void Test::testFunctionLists()
"PERMUTATIONA",
"PHI",
"POISSON",
+ "POISSON.DIST",
"PROB",
"QUARTILE",
"RANK",
@@ -2458,6 +2461,7 @@ void Test::testFunctionLists()
"VARP",
"VARPA",
"WEIBULL",
+ "WEIBULL.DIST",
"ZTEST",
0
};
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index dc8c8b4..e8eefa3 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -725,6 +725,7 @@ double GetLogGamma(double x);
double GetBeta(double fAlpha, double fBeta);
double GetLogBeta(double fAlpha, double fBeta);
double GetBinomDistPMF(double x, double n, double p); //probability mass function
+double GetHypGeomDist( double x, double n, double M, double N );
void ScLogGamma();
void ScGamma();
void ScPhi();
@@ -745,6 +746,7 @@ void ScVariationen();
void ScVariationen2();
void ScB();
void ScHypGeomDist();
+void ScHypGeomDist_MS();
void ScLogNormDist();
void ScLogNormInv();
void ScTDist();
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 515530b..0cb0cc8 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -1738,12 +1738,6 @@ static void lcl_PutFactorialElements( ::std::vector< double >& cn, double fLower
/** Calculates a value of the hypergeometric distribution.
- The algorithm is designed to avoid unnecessary multiplications and division
- by expanding all factorial elements (9 of them). It is done by excluding
- those ranges that overlap in the numerator and the denominator. This allows
- for a fast calculation for large values which would otherwise cause an overflow
- in the intermediate values.
-
@author Kohei Yoshida <kohei at openoffice.org>
@see #i47296#
@@ -1751,8 +1745,6 @@ static void lcl_PutFactorialElements( ::std::vector< double >& cn, double fLower
*/
void ScInterpreter::ScHypGeomDist()
{
- const size_t nMaxArraySize = 500000; // arbitrary max array size
-
if ( !MustHaveParamCount( GetByte(), 4 ) )
return;
@@ -1767,6 +1759,63 @@ void ScInterpreter::ScHypGeomDist()
return;
}
+ PushDouble( GetHypGeomDist( x, n, M, N ) );
+}
+
+/** Calculates a value of the hypergeometric distribution (Excel 2010 function).
+
+ This function has an extra argument bCumulative as compared to ScHypGeomDist(),
+ which only calculates the non-cumulative distribution.
+
+ @see fdo#71722
+*/
+void ScInterpreter::ScHypGeomDist_MS()
+{
+ if ( !MustHaveParamCount( GetByte(), 5 ) )
+ return;
+
+ bool bCumulative = GetBool();
+ double N = ::rtl::math::approxFloor(GetDouble());
+ double M = ::rtl::math::approxFloor(GetDouble());
+ double n = ::rtl::math::approxFloor(GetDouble());
+ double x = ::rtl::math::approxFloor(GetDouble());
+
+ if( (x < 0.0) || (n < x) || (M < x) || (N < n) || (N < M) || (x < n - N + M) )
+ {
+ PushIllegalArgument();
+ return;
+ }
+
+ if ( bCumulative )
+ {
+ double fVal = 0.0;
+
+ for ( int i = 0; i <= x && !nGlobalError; i++ )
+ fVal += GetHypGeomDist( i, n, M, N );
+
+ PushDouble( fVal );
+ }
+ else
+ PushDouble( GetHypGeomDist( x, n, M, N ) );
+}
+
+/** Calculates a value of the hypergeometric distribution.
+
+ The algorithm is designed to avoid unnecessary multiplications and division
+ by expanding all factorial elements (9 of them). It is done by excluding
+ those ranges that overlap in the numerator and the denominator. This allows
+ for a fast calculation for large values which would otherwise cause an overflow
+ in the intermediate values.
+
+ @author Kohei Yoshida <kohei at openoffice.org>
+
+ @see #i47296#
+
+ */
+double ScInterpreter::GetHypGeomDist( double x, double n, double M, double N )
+{
+ const size_t nMaxArraySize = 500000; // arbitrary max array size
+
typedef ::std::vector< double > HypContainer;
HypContainer cnNumer, cnDenom;
@@ -1775,7 +1824,7 @@ void ScInterpreter::ScHypGeomDist()
if ( nEstContainerSize > nMaxSize )
{
PushNoValue();
- return;
+ return 0;
}
cnNumer.reserve( nEstContainerSize + 10 );
cnDenom.reserve( nEstContainerSize + 10 );
@@ -1959,7 +2008,7 @@ void ScInterpreter::ScHypGeomDist()
fFactor *= fEnum / fDenom;
}
- PushDouble(fFactor);
+ return fFactor;
}
void ScInterpreter::ScGammaDist()
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 38d73b0..d230ac8 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4099,15 +4099,18 @@ StackVar ScInterpreter::Interpret()
case ocMatRef : ScMatRef(); break;
case ocB : ScB(); break;
case ocNormDist : ScNormDist(); break;
- case ocExpDist : ScExpDist(); break;
+ case ocExpDist :
+ case ocExpDist_MS : ScExpDist(); break;
case ocBinomDist :
case ocBinomDist_MS : ScBinomDist(); break;
- case ocPoissonDist : ScPoissonDist(); break;
+ case ocPoissonDist :
+ case ocPoissonDist_MS : ScPoissonDist(); break;
case ocKombin : ScKombin(); break;
case ocKombin2 : ScKombin2(); break;
case ocVariationen : ScVariationen(); break;
case ocVariationen2 : ScVariationen2(); break;
case ocHypGeomDist : ScHypGeomDist(); break;
+ case ocHypGeomDist_MS : ScHypGeomDist_MS(); break;
case ocLogNormDist : ScLogNormDist(); break;
case ocTDist : ScTDist(); break;
case ocFDist :
@@ -4127,7 +4130,8 @@ StackVar ScInterpreter::Interpret()
case ocMedian : ScMedian(); break;
case ocGeoMean : ScGeoMean(); break;
case ocHarMean : ScHarMean(); break;
- case ocWeibull : ScWeibull(); break;
+ case ocWeibull :
+ case ocWeibull_MS : ScWeibull(); break;
case ocBinomInv :
case ocKritBinom : ScCritBinom(); break;
case ocNegBinomVert : ScNegBinomDist(); break;
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index b525d75..67d21ee 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -429,28 +429,32 @@ static const XclFunctionInfo saFuncTable_Oox[] =
*/
static const XclFunctionInfo saFuncTable_2010[] =
{
- EXC_FUNCENTRY_V_VA( ocCovarianceP, 2, 2, 0, "COVARIANCE.P" ),
- EXC_FUNCENTRY_V_VA( ocCovarianceS, 2, 2, 0, "COVARIANCE.S" ),
- EXC_FUNCENTRY_V_RX( ocStDevP_MS, 1, MX, 0, "STDEV.P" ),
- EXC_FUNCENTRY_V_RX( ocStDevS, 1, MX, 0, "STDEV.S" ),
- EXC_FUNCENTRY_V_RX( ocVarP_MS, 1, MX, 0, "VAR.P" ),
- EXC_FUNCENTRY_V_RX( ocVarS, 1, MX, 0, "VAR.S" ),
- EXC_FUNCENTRY_V_VR( ocBetaDist_MS, 4, 6, 0, "BETA.DIST" ),
- EXC_FUNCENTRY_V_VR( ocBetaInv_MS, 3, 5, 0, "BETA.INV" ),
- EXC_FUNCENTRY_V_VR( ocBinomDist_MS, 4, 4, 0, "BINOM.DIST" ),
- EXC_FUNCENTRY_V_VR( ocBinomInv, 3, 3, 0, "BINOM.INV" ),
- EXC_FUNCENTRY_V_VR( ocChiSqDist_MS, 3, 3, 0, "CHISQ.DIST" ),
- EXC_FUNCENTRY_V_VR( ocChiSqInv_MS, 2, 2, 0, "CHISQ.INV" ),
- EXC_FUNCENTRY_V_VR( ocChiDist_MS, 2, 2, 0, "CHISQ.DIST.RT" ),
- EXC_FUNCENTRY_V_VR( ocChiInv_MS, 2, 2, 0, "CHISQ.INV.RT" ),
- EXC_FUNCENTRY_V_VR( ocChiTest_MS, 2, 2, 0, "CHISQ.TEST" ),
- EXC_FUNCENTRY_V_VR( ocConfidence_N, 3, 3, 0, "CONFIDENCE.NORM" ),
- EXC_FUNCENTRY_V_VR( ocConfidence_T, 3, 3, 0, "CONFIDENCE.T" ),
- EXC_FUNCENTRY_V_VR( ocFDist_LT, 4, 4, 0, "F.DIST" ),
- EXC_FUNCENTRY_V_VR( ocFDist_RT, 3, 3, 0, "F.DIST.RT" ),
- EXC_FUNCENTRY_V_VR( ocFInv_LT, 3, 3, 0, "F.INV" ),
- EXC_FUNCENTRY_V_VR( ocFInv_RT, 3, 3, 0, "F.INV.RT" ),
- EXC_FUNCENTRY_V_VR( ocFTest_MS, 2, 2, 0, "F.TEST" )
+ EXC_FUNCENTRY_V_VA( ocCovarianceP, 2, 2, 0, "COVARIANCE.P" ),
+ EXC_FUNCENTRY_V_VA( ocCovarianceS, 2, 2, 0, "COVARIANCE.S" ),
+ EXC_FUNCENTRY_V_RX( ocStDevP_MS, 1, MX, 0, "STDEV.P" ),
+ EXC_FUNCENTRY_V_RX( ocStDevS, 1, MX, 0, "STDEV.S" ),
+ EXC_FUNCENTRY_V_RX( ocVarP_MS, 1, MX, 0, "VAR.P" ),
+ EXC_FUNCENTRY_V_RX( ocVarS, 1, MX, 0, "VAR.S" ),
+ EXC_FUNCENTRY_V_VR( ocBetaDist_MS, 4, 6, 0, "BETA.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocBetaInv_MS, 3, 5, 0, "BETA.INV" ),
+ EXC_FUNCENTRY_V_VR( ocBinomDist_MS, 4, 4, 0, "BINOM.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocBinomInv, 3, 3, 0, "BINOM.INV" ),
+ EXC_FUNCENTRY_V_VR( ocChiSqDist_MS, 3, 3, 0, "CHISQ.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocChiSqInv_MS, 2, 2, 0, "CHISQ.INV" ),
+ EXC_FUNCENTRY_V_VR( ocChiDist_MS, 2, 2, 0, "CHISQ.DIST.RT" ),
+ EXC_FUNCENTRY_V_VR( ocChiInv_MS, 2, 2, 0, "CHISQ.INV.RT" ),
+ EXC_FUNCENTRY_V_VR( ocChiTest_MS, 2, 2, 0, "CHISQ.TEST" ),
+ EXC_FUNCENTRY_V_VR( ocConfidence_N, 3, 3, 0, "CONFIDENCE.NORM" ),
+ EXC_FUNCENTRY_V_VR( ocConfidence_T, 3, 3, 0, "CONFIDENCE.T" ),
+ EXC_FUNCENTRY_V_VR( ocFDist_LT, 4, 4, 0, "F.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocFDist_RT, 3, 3, 0, "F.DIST.RT" ),
+ EXC_FUNCENTRY_V_VR( ocFInv_LT, 3, 3, 0, "F.INV" ),
+ EXC_FUNCENTRY_V_VR( ocFInv_RT, 3, 3, 0, "F.INV.RT" ),
+ EXC_FUNCENTRY_V_VR( ocFTest_MS, 2, 2, 0, "F.TEST" ),
+ EXC_FUNCENTRY_V_VR( ocExpDist_MS, 3, 3, 0, "EXPON.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocHypGeomDist_MS, 5, 5, 0, "HYPGEOM.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocPoissonDist_MS, 3, 3, 0, "POISSON.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocWeibull_MS, 4, 4, 0, "WEIBULL.DIST" )
};
/** Functions new in Excel 2013.
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index b2376f4..ef8c926 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -768,7 +768,11 @@ static const FunctionData saFuncTable2010[] =
{ "COM.MICROSOFT.F.DIST.RT", "F.DIST.RT", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "COM.MICROSOFT.F.INV", "F.INV", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "COM.MICROSOFT.F.INV.RT", "F.INV.RT", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
- { "COM.MICROSOFT.F.TEST", "F.TEST", NOID, NOID, 2, 2, V, { VA }, FUNCFLAG_MACROCALL_NEW }
+ { "COM.MICROSOFT.F.TEST", "F.TEST", NOID, NOID, 2, 2, V, { VA }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.EXPON.DIST", "EXPON.DIST", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.HYPGEOM.DIST", "HYPGEOM.DIST", NOID, NOID, 5, 5, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.POISSON.DIST", "POISSON.DIST", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.WEIBULL.DIST", "WEIBULL.DIST", NOID, NOID, 4, 4, V, { VR }, FUNCFLAG_MACROCALL_NEW }
};
/** Functions new in Excel 2013.
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 36dee21..ba670a4 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -6295,6 +6295,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "0 or FALSE calculates the probability density function. Any other value or TRUE or omitted calculates the cumulative distribution function." ;
};
};
+ // -=*# Resource for function POISSON.DIST #*=-
+ Resource SC_OPCODE_POISSON_DIST_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Returns the Poisson distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_POISSON_DIST_MS );
+ 3; 0; 0; 1;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Number" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The value for which the Poisson distribution is to be calculated." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "mean" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "Mean. The mean value of the Poisson distribution." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "Cumulative" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "0 or FALSE calculates the probability density function. Any other value or TRUE or omitted calculates the cumulative distribution function." ;
+ };
+ };
// -=*# Resource for function NORMVERT #*=-
Resource SC_OPCODE_NORM_DIST
{
@@ -6559,6 +6599,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
};
};
+ // -=*# Resource for function EXPON.DIST #*=-
+ Resource SC_OPCODE_EXP_DIST_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Values of the exponential distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_EXP_DIST_MS );
+ 3; 0; 0; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Number" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The value to which the exponential distribution is to be calculated." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "lambda" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "The parameters of the exponential distribution." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "C" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
+ };
+ };
// -=*# Resource for function GAMMAVERT #*=-
Resource SC_OPCODE_GAMMA_DIST
{
@@ -6985,6 +7065,54 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
};
};
+ // -=*# Resource for function WEIBULL.DIST #*=-
+ Resource SC_OPCODE_WEIBULL_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Returns the values of the Weibull distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_WEIBULL_DIST_MS );
+ 4; 0; 0; 0; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Number" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The value for which the Weibull distribution is to be calculated." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "Alpha" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "The Alpha parameter of the Weibull distribution." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "beta" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "The Beta parameter of the Weibull distribution." ;
+ };
+ String 8 // Name of Parameter 4
+ {
+ Text [ en-US ] = "C" ;
+ };
+ String 9 // Description of Parameter 4
+ {
+ Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
+ };
+ };
// -=*# Resource for function HYPGEOMVERT #*=-
Resource SC_OPCODE_HYP_GEOM_DIST
{
@@ -7033,6 +7161,62 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "The population size." ;
};
};
+ // -=*# Resource for function HYPGEOM.DIST #*=-
+ Resource SC_OPCODE_HYP_GEOM_DIST_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Values of the hypergeometric distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_HYP_GEOM_DIST_MS );
+ 5; 0; 0; 0; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "X" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The number of successes in the sample." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "n_sample" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "The size of the sample." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "successes" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "The number of successes in the population." ;
+ };
+ String 8 // Name of Parameter 4
+ {
+ Text [ en-US ] = "n_population" ;
+ };
+ String 9 // Description of Parameter 4
+ {
+ Text [ en-US ] = "The population size." ;
+ };
+ String 10 // Name of Parameter 5
+ {
+ Text [ en-US ] = "C" ;
+ };
+ String 11 // Description of Parameter 5
+ {
+ Text [ en-US ] = "Cumulated. TRUE calculates the probabilty mass function, FALSE the cumulative distribution function." ;
+ };
+ };
// -=*# Resource for function TVERT #*=-
Resource SC_OPCODE_T_DIST
{
commit 5238d79a7c3067b182cbce51e2118a6fa336899a
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 13:33:14 2013 +0200
Use hidden visibility as in the LO code here, too
Otherwise we get tons of (as such, in our case harmless) warnings from
the linker about mismatches.
Change-Id: I826d9e065bae59cdd213131163b31b2099806dd3
diff --git a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
index 9d289b9..2c92795 100644
--- a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
+++ b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
@@ -545,7 +545,7 @@
"MLO_APP_ROLE=LO_APP",
"DEBUG=1",
);
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
@@ -582,6 +582,7 @@
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_PREPROCESSOR_DEFINITIONS = "MLO_APP_ROLE=LO_APP";
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
@@ -660,7 +661,7 @@
"MLO_APP_ROLE=TILE_TESTER",
"DEBUG=1",
);
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
commit de4af9183c09cc5ccc05198e456f3916376835f9
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 13:32:35 2013 +0200
Don't redirect output to /dev/null if verbosity is requested
Change-Id: Idccc7cc8e9f81576bb24fec0a49144c0fcc16fd5
diff --git a/ios/CustomTarget_MobileLibreOffice_app.mk b/ios/CustomTarget_MobileLibreOffice_app.mk
index 87783fa..76b3e75 100644
--- a/ios/CustomTarget_MobileLibreOffice_app.mk
+++ b/ios/CustomTarget_MobileLibreOffice_app.mk
@@ -15,7 +15,7 @@ BUILDID :=$(shell cd $(SRCDIR) && git log -1 --format=%H)
#- Macros ---------------------------------------------------------------------
define MobileLibreOfficeXcodeBuild
- CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -scheme MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) >/dev/null
+ CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -scheme MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
endef
#- Targets --------------------------------------------------------------------
commit b9a3acb44c44cad1716be320f159dc793e6fa07a
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 12:58:10 2013 +0200
Use the CLANG_CXX_LIBRARY from lo.xcconfig
Change-Id: Id6424157d2a9ba2a4ab987cd8aafd9c7de52f836
diff --git a/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj b/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj
index 8c68aca..e806d6b 100644
--- a/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj
+++ b/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj
@@ -825,7 +825,6 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "compiler-default";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -874,7 +873,6 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "compiler-default";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -953,7 +951,6 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "compiler-default";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
diff --git a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
index 679a2a7..9d289b9 100644
--- a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
+++ b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
@@ -530,7 +530,6 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "compiler-default";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -573,7 +572,6 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "compiler-default";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -647,7 +645,6 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = armv7;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "compiler-default";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
commit 27c7db9a7365827fecb0cb72f3b27da9f935c4a2
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Nov 22 12:42:58 2013 +0200
Some whitespace cleanup, avoids Emacs warning
Change-Id: I5b2c5a249c0446d69ac19d11e0d5e038983f0be8
diff --git a/ios/CustomTarget_MobileLibreOffice_app.mk b/ios/CustomTarget_MobileLibreOffice_app.mk
index 300d67f..87783fa 100644
--- a/ios/CustomTarget_MobileLibreOffice_app.mk
+++ b/ios/CustomTarget_MobileLibreOffice_app.mk
@@ -11,7 +11,7 @@
LO_XCCONFIG := lo.xcconfig
DEST_RESOURCE := MobileLibreOffice/resource_link
BUILDID :=$(shell cd $(SRCDIR) && git log -1 --format=%H)
-
+
#- Macros ---------------------------------------------------------------------
define MobileLibreOfficeXcodeBuild
@@ -56,14 +56,14 @@ MobileLibreOffice_setup:
$(WORKDIR)/UnpackedTarball/icu/source/lib \
$(WORKDIR)/UnpackedTarball/openssl; do \
flags=''; \
- for lib in $$path/lib*.a; do \
- if [ ! -r $$lib ]; then \
- continue; \
- fi; \
- base="$${lib##*/lib}"; \
- base=$${base%\.a}; \
- flags+=" -l$${base}"; \
- done; \
+ for lib in $$path/lib*.a; do \
+ if [ ! -r $$lib ]; then \
+ continue; \
+ fi; \
+ base="$${lib##*/lib}"; \
+ base=$${base%\.a}; \
+ flags+=" -l$${base}"; \
+ done; \
if [ "$$flags" ]; then \
all_flags+=" -L$$path $$flags"; \
fi; \
@@ -91,10 +91,10 @@ MobileLibreOffice_setup:
# soffice.cfg
mkdir -p $(DEST_RESOURCE)/share/config
cp -R $(INSTDIR)/share/config/soffice.cfg $(DEST_RESOURCE)/share/config
-
+
# "registry"
cp -R $(INSTDIR)/share/registry $(DEST_RESOURCE)/share
-
+
# Set up rc, the "inifile". See getIniFileName_Impl().
file=$(DEST_RESOURCE)/rc; \
echo '[Bootstrap]' > $$file; \
@@ -127,7 +127,7 @@ MobileLibreOffice_setup:
echo "buildid=$(BUILDID)" >> $$file; \
echo 'ProductMajor=360' >> $$file; \
echo 'ProductMinor=1' >> $$file;
-
+
#==============================================================================
# Clean
$(call gb_CustomTarget_get_clean_target,ios/MobileLibreOffice):
commit 75675f13347e3d15947e8cfba7d81e34148fa11e
Author: Michael Stahl <mstahl at redhat.com>
Date: Fri Nov 22 12:27:43 2013 +0100
helpcontent2: revert accidental reset
Change-Id: Ia33fae872cf52d14a3faa186a4792d1e91b7962d
diff --git a/helpcontent2 b/helpcontent2
index 39abc00..35006f4 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 39abc00ac7423fdf1d0b60229a1a0cd3fe300801
+Subproject commit 35006f482c02c41bd4eb8fdc9a29f804d6a3b672
commit fc87d57f04132658e1c3481e92fe36e1183423ed
Author: Noel Grandin <noel at peralex.com>
Date: Fri Nov 22 11:13:17 2013 +0200
replace OUString::reverseCompareTo("xxx") with operator==
operator== with OUString and literal internally does a reverse-compare
(via OUString::equalsAsciiL) anyway, so no need to keep explicit calls
to OUString::reverseCompareTo with literal argument
Change-Id: I799d9bcd0d5c308a9547ce7cacb2db6042fdb643
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 16da8f8..3dac9dd 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2862,7 +2862,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
SdrModel* pModel = ( m_pDrawModelWrapper ? &m_pDrawModelWrapper->getSdrModel() : NULL );
if ( pModel )
{
- if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.DashTable" ) == 0 )
+ if ( aServiceSpecifier == "com.sun.star.drawing.DashTable" )
{
if ( !m_xDashTable.is() )
{
@@ -2870,7 +2870,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
}
return m_xDashTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.GradientTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.GradientTable" )
{
if ( !m_xGradientTable.is() )
{
@@ -2878,7 +2878,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
}
return m_xGradientTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.HatchTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.HatchTable" )
{
if ( !m_xHatchTable.is() )
{
@@ -2886,7 +2886,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
}
return m_xHatchTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.BitmapTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.BitmapTable" )
{
if ( !m_xBitmapTable.is() )
{
@@ -2894,7 +2894,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
}
return m_xBitmapTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.TransparencyGradientTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.TransparencyGradientTable" )
{
if ( !m_xTransGradientTable.is() )
{
@@ -2902,7 +2902,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
}
return m_xTransGradientTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.MarkerTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.MarkerTable" )
{
if ( !m_xMarkerTable.is() )
{
diff --git a/editeng/source/xml/xmltxtexp.cxx b/editeng/source/xml/xmltxtexp.cxx
index eed1c2c..6d3523c 100644
--- a/editeng/source/xml/xmltxtexp.cxx
+++ b/editeng/source/xml/xmltxtexp.cxx
@@ -226,13 +226,13 @@ SvxSimpleUnoModel::~SvxSimpleUnoModel()
uno::Reference< uno::XInterface > SAL_CALL SvxSimpleUnoModel::createInstance( const OUString& aServiceSpecifier )
throw(uno::Exception, uno::RuntimeException)
{
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.text.NumberingRules" ) )
+ if( aServiceSpecifier == "com.sun.star.text.NumberingRules" )
{
return uno::Reference< uno::XInterface >(
SvxCreateNumRule(), uno::UNO_QUERY );
}
- if ( (0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.text.textfield.DateTime" ))
- || (0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.text.TextField.DateTime" ))
+ if ( aServiceSpecifier == "com.sun.star.text.textfield.DateTime"
+ || aServiceSpecifier == "com.sun.star.text.TextField.DateTime"
)
{
return (::cppu::OWeakObject * )new SvxUnoTextField( text::textfield::Type::DATE );
diff --git a/filter/source/flash/swfexporter.cxx b/filter/source/flash/swfexporter.cxx
index 85c18b4..5382f84 100644
--- a/filter/source/flash/swfexporter.cxx
+++ b/filter/source/flash/swfexporter.cxx
@@ -545,12 +545,12 @@ void FlashExporter::exportShape( Reference< XShape >& xShape, bool bMaster )
if( bMaster )
{
OUString aShapeType( xShape->getShapeType() );
- if( (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.TitleTextShape" )) ||
- (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.OutlinerShape" )) ||
- (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.HeaderShape" )) ||
- (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.FooterShape" )) ||
- (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.SlideNumberShape" )) ||
- (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.DateTimeShape" )))
+ if( aShapeType == "com.sun.star.presentation.TitleTextShape" ||
+ aShapeType == "com.sun.star.presentation.OutlinerShape" ||
+ aShapeType == "com.sun.star.presentation.HeaderShape" ||
+ aShapeType == "com.sun.star.presentation.FooterShape" ||
+ aShapeType == "com.sun.star.presentation.SlideNumberShape" ||
+ aShapeType == "com.sun.star.presentation.DateTimeShape" )
return;
}
}
diff --git a/helpcontent2 b/helpcontent2
index 35006f4..39abc00 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 35006f482c02c41bd4eb8fdc9a29f804d6a3b672
+Subproject commit 39abc00ac7423fdf1d0b60229a1a0cd3fe300801
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 36412be..fb8f2a9 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -393,35 +393,35 @@ void lcl_fillCategoriesIntoStringVector(
sal_Int32 lcl_getChartType( const OUString& sChartType )
{
chart::TypeId eChartTypeId = chart::TYPEID_UNKNOWN;
- if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.BarDiagram" ))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.ColumnChartType" )))
+ if( sChartType == "com.sun.star.chart.BarDiagram"
+ || sChartType == "com.sun.star.chart2.ColumnChartType" )
eChartTypeId = chart::TYPEID_BAR;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.AreaDiagram" ))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.AreaChartType" ) ) )
+ else if( sChartType == "com.sun.star.chart.AreaDiagram"
+ || sChartType == "com.sun.star.chart2.AreaChartType" )
eChartTypeId = chart::TYPEID_AREA;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.LineDiagram" ))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.LineChartType" ) ) )
+ else if( sChartType == "com.sun.star.chart.LineDiagram"
+ || sChartType == "com.sun.star.chart2.LineChartType" )
eChartTypeId = chart::TYPEID_LINE;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.PieDiagram" ))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.PieChartType") ) )
+ else if( sChartType == "com.sun.star.chart.PieDiagram"
+ || sChartType == "com.sun.star.chart2.PieChartType" )
eChartTypeId = chart::TYPEID_PIE;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.DonutDiagram"))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.DonutChartType") ) )
+ else if( sChartType == "com.sun.star.chart.DonutDiagram"
+ || sChartType == "com.sun.star.chart2.DonutChartType" )
eChartTypeId = chart::TYPEID_DOUGHNUT;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.XYDiagram"))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.ScatterChartType") ) )
+ else if( sChartType == "com.sun.star.chart.XYDiagram"
+ || sChartType == "com.sun.star.chart2.ScatterChartType" )
eChartTypeId = chart::TYPEID_SCATTER;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.NetDiagram"))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.NetChartType") ) )
+ else if( sChartType == "com.sun.star.chart.NetDiagram"
+ || sChartType == "com.sun.star.chart2.NetChartType" )
eChartTypeId = chart::TYPEID_RADARLINE;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.FilledNetDiagram"))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.FilledNetChartType") ) )
+ else if( sChartType == "com.sun.star.chart.FilledNetDiagram"
+ || sChartType == "com.sun.star.chart2.FilledNetChartType" )
eChartTypeId = chart::TYPEID_RADARAREA;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.StockDiagram"))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.CandleStickChartType") ) )
+ else if( sChartType == "com.sun.star.chart.StockDiagram"
+ || sChartType == "com.sun.star.chart2.CandleStickChartType" )
eChartTypeId = chart::TYPEID_STOCK;
- else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.BubbleDiagram"))
- || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.BubbleChartType") ) )
+ else if( sChartType == "com.sun.star.chart.BubbleDiagram"
+ || sChartType == "com.sun.star.chart2.BubbleChartType" )
eChartTypeId = chart::TYPEID_BUBBLE;
return eChartTypeId;
diff --git a/reportdesign/source/core/api/ReportDefinition.cxx b/reportdesign/source/core/api/ReportDefinition.cxx
index 023b0a9..1afdeb6 100644
--- a/reportdesign/source/core/api/ReportDefinition.cxx
+++ b/reportdesign/source/core/api/ReportDefinition.cxx
@@ -2236,9 +2236,9 @@ uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstance( co
{
xShape.set(m_aProps->m_xContext->getServiceManager()->createInstanceWithContext(aServiceSpecifier,m_aProps->m_xContext),uno::UNO_QUERY);
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.style.PageStyle" ) == 0 ||
- aServiceSpecifier.reverseCompareTo( "com.sun.star.style.FrameStyle" ) == 0 ||
- aServiceSpecifier.reverseCompareTo( "com.sun.star.style.GraphicStyle" ) == 0
+ else if ( aServiceSpecifier == "com.sun.star.style.PageStyle" ||
+ aServiceSpecifier == "com.sun.star.style.FrameStyle" ||
+ aServiceSpecifier == "com.sun.star.style.GraphicStyle"
)
{
uno::Reference< style::XStyle> xStyle = new OStyle();
@@ -2249,72 +2249,72 @@ uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstance( co
return xStyle.get();
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.Settings" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.document.Settings" )
{
uno::Reference<beans::XPropertySet> xProp = new OStyle();
return xProp.get();
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.Defaults" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.Defaults" )
{
uno::Reference<beans::XPropertySet> xProp = new OStyle();
return xProp.get();
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.GradientTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.GradientTable" )
{
if ( !m_pImpl->m_xGradientTable.is() )
m_pImpl->m_xGradientTable.set(SvxUnoGradientTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
return m_pImpl->m_xGradientTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.HatchTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.HatchTable" )
{
if ( !m_pImpl->m_xHatchTable.is() )
m_pImpl->m_xHatchTable.set(SvxUnoHatchTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
return m_pImpl->m_xHatchTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.BitmapTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.BitmapTable" )
{
if ( !m_pImpl->m_xBitmapTable.is() )
m_pImpl->m_xBitmapTable.set(SvxUnoBitmapTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
return m_pImpl->m_xBitmapTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.TransparencyGradientTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.TransparencyGradientTable" )
{
if ( !m_pImpl->m_xTransparencyGradientTable.is() )
m_pImpl->m_xTransparencyGradientTable.set(SvxUnoTransGradientTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
return m_pImpl->m_xTransparencyGradientTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.DashTable" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.drawing.DashTable" )
{
if ( !m_pImpl->m_xDashTable.is() )
m_pImpl->m_xDashTable.set(SvxUnoDashTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
return m_pImpl->m_xDashTable;
}
- else if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.MarkerTable" ) )
+ else if( aServiceSpecifier == "com.sun.star.drawing.MarkerTable" )
{
if( !m_pImpl->m_xMarkerTable.is() )
m_pImpl->m_xMarkerTable.set(SvxUnoMarkerTable_createInstance( m_pImpl->m_pReportModel.get() ),uno::UNO_QUERY);
return m_pImpl->m_xMarkerTable;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ImportEmbeddedObjectResolver" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.document.ImportEmbeddedObjectResolver" )
return static_cast< ::cppu::OWeakObject* >(SvXMLEmbeddedObjectHelper::Create( m_pImpl->m_xStorage,*this, EMBEDDEDOBJECTHELPER_MODE_READ ));
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ExportEmbeddedObjectResolver" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.document.ExportEmbeddedObjectResolver" )
return static_cast< ::cppu::OWeakObject* >(SvXMLEmbeddedObjectHelper::Create( m_pImpl->m_xStorage,*this, EMBEDDEDOBJECTHELPER_MODE_WRITE ));
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ImportGraphicObjectResolver" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.document.ImportGraphicObjectResolver" )
{
SvXMLGraphicHelper* pGraphicHelper = SvXMLGraphicHelper::Create(m_pImpl->m_xStorage,GRAPHICHELPER_MODE_WRITE);
uno::Reference< uno::XInterface> xRet(static_cast< ::cppu::OWeakObject* >(pGraphicHelper));
pGraphicHelper->release();
return xRet;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ExportGraphicObjectResolver" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.document.ExportGraphicObjectResolver" )
{
SvXMLGraphicHelper* pGraphicHelper = SvXMLGraphicHelper::Create(m_pImpl->m_xStorage,GRAPHICHELPER_MODE_WRITE);
uno::Reference< uno::XInterface> xRet(static_cast< ::cppu::OWeakObject* >(pGraphicHelper));
pGraphicHelper->release();
return xRet;
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.chart2.data.DataProvider" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.chart2.data.DataProvider" )
{
uno::Reference<chart2::data::XDatabaseDataProvider> xDataProvider(chart2::data::DatabaseDataProvider::createWithConnection( m_aProps->m_xContext, m_pImpl->m_xActiveConnection ));
xDataProvider->setRowLimit(10);
@@ -2323,7 +2323,7 @@ uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstance( co
xChild->setParent(*this);
return uno::Reference< uno::XInterface >(xDataProvider,uno::UNO_QUERY);
}
- else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.xml.NamespaceMap" ) == 0 )
+ else if ( aServiceSpecifier == "com.sun.star.xml.NamespaceMap" )
{
if ( !m_pImpl->m_xXMLNamespaceMap.is() )
m_pImpl->m_xXMLNamespaceMap = comphelper::NameContainer_createInstance( ::getCppuType( (const OUString*) 0 ) ).get();
diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index 9d2a011..aaf70b7 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -824,59 +824,59 @@ css::uno::Reference<css::uno::XInterface> SdXImpressDocument::create(
if( NULL == mpDoc )
throw lang::DisposedException();
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.DashTable" ) )
+ if( aServiceSpecifier == "com.sun.star.drawing.DashTable" )
{
if( !mxDashTable.is() )
mxDashTable = SvxUnoDashTable_createInstance( mpDoc );
return mxDashTable;
}
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.GradientTable" ) )
+ if( aServiceSpecifier == "com.sun.star.drawing.GradientTable" )
{
if( !mxGradientTable.is() )
mxGradientTable = SvxUnoGradientTable_createInstance( mpDoc );
return mxGradientTable;
}
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.HatchTable" ) )
+ if( aServiceSpecifier == "com.sun.star.drawing.HatchTable" )
{
if( !mxHatchTable.is() )
mxHatchTable = SvxUnoHatchTable_createInstance( mpDoc );
return mxHatchTable;
}
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.BitmapTable" ) )
+ if( aServiceSpecifier == "com.sun.star.drawing.BitmapTable" )
{
if( !mxBitmapTable.is() )
mxBitmapTable = SvxUnoBitmapTable_createInstance( mpDoc );
return mxBitmapTable;
}
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.TransparencyGradientTable" ) )
+ if( aServiceSpecifier == "com.sun.star.drawing.TransparencyGradientTable" )
{
if( !mxTransGradientTable.is() )
mxTransGradientTable = SvxUnoTransGradientTable_createInstance( mpDoc );
return mxTransGradientTable;
}
- if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.MarkerTable" ) )
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list