[Libreoffice-commits] .: 7 commits - sc/inc sc/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Wed Feb 8 15:33:21 PST 2012
sc/inc/collect.hxx | 87 ++++---
sc/inc/column.hxx | 6
sc/inc/document.hxx | 26 +-
sc/inc/dpobject.hxx | 4
sc/inc/table.hxx | 6
sc/inc/validat.hxx | 10
sc/source/core/data/column3.cxx | 97 ++++----
sc/source/core/data/documen3.cxx | 78 ++++--
sc/source/core/data/dpobject.cxx | 10
sc/source/core/data/table3.cxx | 6
sc/source/core/data/validat.cxx | 35 +--
sc/source/core/tool/collect.cxx | 216 +++++++------------
sc/source/ui/app/inputhdl.cxx | 428 +++++++++++++++++++++++---------------
sc/source/ui/dbgui/filtdlg.cxx | 66 ++---
sc/source/ui/dbgui/pfiltdlg.cxx | 22 -
sc/source/ui/drawfunc/drawsh.cxx | 4
sc/source/ui/formdlg/dwfunctr.cxx | 2
sc/source/ui/inc/filtdlg.hxx | 3
sc/source/ui/inc/inputhdl.hxx | 20 +
sc/source/ui/inc/pfiltdlg.hxx | 4
sc/source/ui/view/gridwin.cxx | 106 ++++-----
21 files changed, 656 insertions(+), 580 deletions(-)
New commits:
commit 74c5c3b4ecd1dfdf83e6bb14db79cf57e7bd6574
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Wed Feb 8 16:42:50 2012 -0500
Move this typedef back into collect.hxx for now.
diff --git a/sc/inc/collect.hxx b/sc/inc/collect.hxx
index 2eb223b..d175fa3 100644
--- a/sc/inc/collect.hxx
+++ b/sc/inc/collect.hxx
@@ -172,6 +172,8 @@ public:
bool operator() (const TypedStrData& r) const;
};
+typedef std::set<TypedStrData, TypedStrData::LessCaseSensitive> ScTypedCaseStrSet;
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 004d8e9..2e89c83 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -44,6 +44,7 @@
#include "formula/grammar.hxx"
#include <com/sun/star/chart2/XChartDocument.hpp>
#include "scdllapi.h"
+#include "collect.hxx"
#include <memory>
#include <map>
diff --git a/sc/inc/types.hxx b/sc/inc/types.hxx
index 25fe66b..bb454a9 100644
--- a/sc/inc/types.hxx
+++ b/sc/inc/types.hxx
@@ -29,8 +29,6 @@
#ifndef __SC_TYPES_HXX__
#define __SC_TYPES_HXX__
-#include "collect.hxx"
-
#include <boost/intrusive_ptr.hpp>
class ScMatrix;
@@ -38,8 +36,6 @@ class ScMatrix;
typedef ::boost::intrusive_ptr<ScMatrix> ScMatrixRef;
typedef ::boost::intrusive_ptr<const ScMatrix> ScConstMatrixRef;
-typedef std::set<TypedStrData, TypedStrData::LessCaseSensitive> ScTypedCaseStrSet;
-
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx
index e27891a..1ecb5fa 100644
--- a/sc/source/ui/inc/inputhdl.hxx
+++ b/sc/source/ui/inc/inputhdl.hxx
@@ -31,7 +31,7 @@
#include "global.hxx"
#include "address.hxx"
-#include "types.hxx"
+#include "collect.hxx"
#include <tools/fract.hxx>
#include <tools/gen.hxx>
@@ -49,7 +49,6 @@ class ScEditEngineDefaulter;
class EditView;
class EditTextObject;
class ScInputHdlState;
-class TypedStrData;
class ScRangeFindList;
class Timer;
class KeyEvent;
commit caafd2efcc104d1ce298151db908be37366ae4fc
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Wed Feb 8 16:35:15 2012 -0500
Fixed a link error.
diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx
index 992f296..bcdd694 100644
--- a/sc/source/ui/drawfunc/drawsh.cxx
+++ b/sc/source/ui/drawfunc/drawsh.cxx
@@ -309,8 +309,8 @@ void ScDrawShell::ExecuteMacroAssign( SdrObject* pObj, Window* pWin )
if ( !pInfo->GetMacro().isEmpty() )
{
SvxMacroTableDtor aTab;
- String sMacro( pInfo->GetMacro() );
- aTab.Insert( SFX_EVENT_MOUSECLICK_OBJECT, new SvxMacro( sMacro, String() ) );
+ rtl::OUString sMacro = pInfo->GetMacro();
+ aTab.Insert(SFX_EVENT_MOUSECLICK_OBJECT, new SvxMacro(sMacro, rtl::OUString()));
aItem.SetMacroTable( aTab );
}
commit 814c4e1c1c8350652b55a21597996d4755f911d4
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Wed Feb 8 15:37:49 2012 -0500
std::unique must be followed by erase() to really remove duplicates.
It's even mentioned in Effective STL.
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 3b8be7a..ba618a0 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -88,6 +88,28 @@
using namespace com::sun::star;
+namespace {
+
+void sortAndRemoveDuplicates(std::vector<TypedStrData>& rStrings, bool bCaseSens)
+{
+ if (bCaseSens)
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
+ std::vector<TypedStrData>::iterator it =
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
+ rStrings.erase(it, rStrings.end());
+ }
+ else
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
+ std::vector<TypedStrData>::iterator it =
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
+ rStrings.erase(it, rStrings.end());
+ }
+}
+
+}
+
void ScDocument::GetAllTabRangeNames(ScRangeName::TabNameCopyMap& rNames) const
{
ScRangeName::TabNameCopyMap aNames;
@@ -1470,17 +1492,7 @@ bool ScDocument::GetFilterEntries(
maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates );
}
- if (aParam.bCaseSens)
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
- }
- else
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
- }
-
+ sortAndRemoveDuplicates(rStrings, aParam.bCaseSens);
return true;
}
}
@@ -1499,16 +1511,7 @@ bool ScDocument::GetFilterEntriesArea(
if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
{
maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates );
- if (bCaseSens)
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
- }
- else
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
- }
+ sortAndRemoveDuplicates(rStrings, bCaseSens);
return true;
}
@@ -1535,18 +1538,8 @@ bool ScDocument::GetDataEntries(
if( pData && pData->FillSelectionList( rStrings, ScAddress( nCol, nRow, nTab ) ) )
{
if (pData->GetListType() == ValidListType::SORTEDASCENDING)
- {
- if (bCaseSens)
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
- }
- else
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
- }
- }
+ sortAndRemoveDuplicates(rStrings, bCaseSens);
+
return true;
}
}
@@ -1561,16 +1554,7 @@ bool ScDocument::GetDataEntries(
std::set<TypedStrData> aStrings;
bool bRet = maTabs[nTab]->GetDataEntries(nCol, nRow, aStrings, bLimit);
rStrings.insert(rStrings.end(), aStrings.begin(), aStrings.end());
- if (bCaseSens)
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
- }
- else
- {
- std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
- std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
- }
+ sortAndRemoveDuplicates(rStrings, bCaseSens);
return bRet;
}
commit 1d5400285e1fe4e8754cb9ec32d031a08d1dcd1c
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Wed Feb 8 15:22:47 2012 -0500
getExactMatch() should return the original string when no match is found.
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index af09820..000625e 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -194,7 +194,7 @@ rtl::OUString getExactMatch(const ScTypedCaseStrSet& rDataSet, const rtl::OUStri
return rData.GetString();
}
- return rtl::OUString();
+ return rString;
}
void removeChars(rtl::OUString& rStr, sal_Unicode c)
@@ -2203,7 +2203,7 @@ void ScInputHandler::DataChanged( sal_Bool bFromTopNotify )
pTopView->ShowCursor();
}
- bModified = sal_True;
+ bModified = true;
bSelIsRef = false;
if ( pRangeFindList && !bInRangeUpdate )
@@ -3844,7 +3844,7 @@ void ScInputHandler::InputSetSelection( xub_StrLen nStart, xub_StrLen nEnd )
if (pView)
pView->SetSelection( ESelection(0,nStart, 0,nEnd) );
- bModified = sal_True;
+ bModified = true;
}
//------------------------------------------------------------------------
@@ -3872,7 +3872,7 @@ void ScInputHandler::InputReplaceSelection( const String& rStr )
pView->SetSelection( ESelection(0,nFormSelStart, 0,nFormSelEnd) );
pView->SetEditEngineUpdateMode( sal_True );
}
- bModified = sal_True;
+ bModified = true;
}
//------------------------------------------------------------------------
commit 8ff0331bff9db9206e27558aca3958b65afb044b
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Wed Feb 8 15:08:29 2012 -0500
Move away from TypedScStrCollection in favor of STL's.
diff --git a/sc/inc/collect.hxx b/sc/inc/collect.hxx
index 08aa756..2eb223b 100644
--- a/sc/inc/collect.hxx
+++ b/sc/inc/collect.hxx
@@ -42,8 +42,7 @@
#define MAXDELTA 1024
#define SCPOS_INVALID USHRT_MAX
-#define SC_STRTYPE_VALUE 0
-#define SC_STRTYPE_STANDARD 1
+#include <boost/ptr_container/ptr_set.hpp>
class ScDocument;
@@ -113,9 +112,8 @@ public:
// TypedScStrCollection: wie ScStrCollection, nur, dass Zahlen vor Strings
// sortiert werden
-class TypedStrData : public ScDataObject
+class TypedStrData
{
- friend class TypedScStrCollection;
public:
enum StringType {
Value = 0,
@@ -130,39 +128,48 @@ public:
TypedStrData( const TypedStrData& rCpy );
- virtual ScDataObject* Clone() const;
-
bool IsStrData() const;
SC_DLLPUBLIC const rtl::OUString& GetString() const;
double GetValue() const;
+ StringType GetStringType() const;
-private:
- rtl::OUString maStrValue;
- double mfValue;
- StringType meStrType; // 0 = Value
-};
+ struct LessCaseSensitive : std::binary_function<TypedStrData, TypedStrData, bool>
+ {
+ bool operator() (const TypedStrData& left, const TypedStrData& right) const;
+ };
-class SC_DLLPUBLIC TypedScStrCollection : public ScSortedCollection
-{
-private:
- sal_Bool bCaseSensitive;
+ struct LessCaseInsensitive : std::binary_function<TypedStrData, TypedStrData, bool>
+ {
+ bool operator() (const TypedStrData& left, const TypedStrData& right) const;
+ };
-public:
- TypedScStrCollection( sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = false );
+ struct EqualCaseSensitive : std::binary_function<TypedStrData, TypedStrData, bool>
+ {
+ bool operator() (const TypedStrData& left, const TypedStrData& right) const;
+ };
- TypedScStrCollection( const TypedScStrCollection& rCpy )
- : ScSortedCollection( rCpy ) { bCaseSensitive = rCpy.bCaseSensitive; }
- ~TypedScStrCollection();
+ struct EqualCaseInsensitive : std::binary_function<TypedStrData, TypedStrData, bool>
+ {
+ bool operator() (const TypedStrData& left, const TypedStrData& right) const;
+ };
- virtual ScDataObject* Clone() const;
- virtual short Compare( ScDataObject* pKey1, ScDataObject* pKey2 ) const;
+ bool operator== (const TypedStrData& r) const;
+ bool operator< (const TypedStrData& r) const;
- TypedStrData* operator[]( const sal_uInt16 nIndex) const;
- void SetCaseSensitive( sal_Bool bSet );
+private:
+ rtl::OUString maStrValue;
+ double mfValue;
+ StringType meStrType;
+};
- sal_Bool FindText( const String& rStart, String& rResult, sal_uInt16& rPos, sal_Bool bBack ) const;
- sal_Bool GetExactMatch( String& rString ) const;
+class FindTypedStrData : std::unary_function<TypedStrData, bool>
+{
+ TypedStrData maVal;
+ bool mbCaseSens;
+public:
+ FindTypedStrData(const TypedStrData& rVal, bool bCaseSens);
+ bool operator() (const TypedStrData& r) const;
};
#endif
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 2f58a92..e5e78f3 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -62,7 +62,7 @@ class ScMarkData;
class ScPatternAttr;
class ScStyleSheet;
class SvtBroadcaster;
-class TypedScStrCollection;
+class TypedStrData;
class ScProgress;
class ScPostIt;
struct ScFunctionData;
@@ -379,8 +379,8 @@ public:
/// Including current, may return -1
SCsROW GetNextUnprotected( SCROW nRow, bool bUp ) const;
- void GetFilterEntries(SCROW nStartRow, SCROW nEndRow, TypedScStrCollection& rStrings, bool& rHasDates);
- bool GetDataEntries(SCROW nRow, TypedScStrCollection& rStrings, bool bLimit);
+ void GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<TypedStrData>& rStrings, bool& rHasDates);
+ bool GetDataEntries(SCROW nRow, std::set<TypedStrData>& rStrings, bool bLimit);
void UpdateInsertTabAbs(SCTAB nNewPos);
bool TestTabRefAbs(SCTAB nTable);
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index b402ac8..004d8e9 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -118,7 +118,6 @@ class ScTokenArray;
class ScValidationData;
class ScValidationDataList;
class ScViewOptions;
-class TypedScStrCollection;
class ScChangeTrack;
class ScEditEngineDefaulter;
class ScFieldEditEngine;
@@ -1479,13 +1478,23 @@ public:
SCTAB nTab, ScQueryParam& rQueryParam );
void GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, rtl::OUString& rStr);
- bool GetFilterEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
- bool bFilter, TypedScStrCollection& rStrings, bool& rHasDates);
- SC_DLLPUBLIC bool GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow,
- SCTAB nTab, TypedScStrCollection& rStrings, bool& rHasDates );
- bool GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
- TypedScStrCollection& rStrings, bool bLimit = false );
- bool GetFormulaEntries( TypedScStrCollection& rStrings );
+ /**
+ * Get a list of unique strings to use in filtering criteria. The string
+ * values are sorted, and there are no duplicate values in the list. The
+ * data range to use to populate the filter entries is inferred from the
+ * database range that contains the specified cell position.
+ */
+ bool GetFilterEntries(
+ SCCOL nCol, SCROW nRow, SCTAB nTab, bool bFilter, std::vector<TypedStrData>& rStrings, bool& rHasDates);
+
+ SC_DLLPUBLIC bool GetFilterEntriesArea(
+ SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bCaseSens,
+ std::vector<TypedStrData>& rStrings, bool& rHasDates);
+
+ bool GetDataEntries(
+ SCCOL nCol, SCROW nRow, SCTAB nTab, bool bCaseSens,
+ std::vector<TypedStrData>& rStrings, bool bLimit = false );
+ bool GetFormulaEntries( ScTypedCaseStrSet& rStrings );
bool HasAutoFilter( SCCOL nCol, SCROW nRow, SCTAB nTab );
diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx
index 79b5a67..121b614 100644
--- a/sc/inc/dpobject.hxx
+++ b/sc/inc/dpobject.hxx
@@ -38,6 +38,7 @@
#include <com/sun/star/sheet/XDimensionsSupplier.hpp>
#include <set>
+#include <vector>
#include <boost/ptr_container/ptr_list.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
@@ -64,7 +65,6 @@ class ScPivotCollection;
struct ScPivotParam;
struct ScImportSourceDesc;
class ScSheetSourceDesc;
-class TypedScStrCollection;
struct PivotField;
class ScDPCacheTable;
class ScDPTableData;
@@ -192,7 +192,7 @@ public:
void GetMemberResultNames(ScDPUniqueStringSet& rNames, long nDimension);
- void FillPageList( TypedScStrCollection& rStrings, long nField );
+ void FillPageList( std::vector<rtl::OUString>& rStrings, long nField );
void ToggleDetails(const ::com::sun::star::sheet::DataPilotTableHeaderData& rElemDesc, ScDPObject* pDestObj);
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 4f1fe38..2bae993 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -761,9 +761,9 @@ public:
SCSIZE Query(ScQueryParam& rQueryParam, bool bKeepSub);
bool CreateQueryParam(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam& rQueryParam);
- void GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, TypedScStrCollection& rStrings, bool& rHasDates);
- void GetFilteredFilterEntries( SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, TypedScStrCollection& rStrings, bool& rHasDates );
- bool GetDataEntries(SCCOL nCol, SCROW nRow, TypedScStrCollection& rStrings, bool bLimit);
+ void GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, std::vector<TypedStrData>& rStrings, bool& rHasDates);
+ void GetFilteredFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, std::vector<TypedStrData>& rStrings, bool& rHasDates );
+ bool GetDataEntries(SCCOL nCol, SCROW nRow, std::set<TypedStrData>& rStrings, bool bLimit);
bool HasColHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow );
bool HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow );
diff --git a/sc/inc/types.hxx b/sc/inc/types.hxx
index bb454a9..25fe66b 100644
--- a/sc/inc/types.hxx
+++ b/sc/inc/types.hxx
@@ -29,6 +29,8 @@
#ifndef __SC_TYPES_HXX__
#define __SC_TYPES_HXX__
+#include "collect.hxx"
+
#include <boost/intrusive_ptr.hpp>
class ScMatrix;
@@ -36,6 +38,8 @@ class ScMatrix;
typedef ::boost::intrusive_ptr<ScMatrix> ScMatrixRef;
typedef ::boost::intrusive_ptr<const ScMatrix> ScConstMatrixRef;
+typedef std::set<TypedStrData, TypedStrData::LessCaseSensitive> ScTypedCaseStrSet;
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/validat.hxx b/sc/inc/validat.hxx
index 13e4aed..44bc37a 100644
--- a/sc/inc/validat.hxx
+++ b/sc/inc/validat.hxx
@@ -37,7 +37,7 @@ namespace ValidListType = ::com::sun::star::sheet::TableValidationVisibility;
class ScPatternAttr;
class ScTokenArray;
-class TypedScStrCollection;
+class TypedStrData;
enum ScValidationMode
{
@@ -131,7 +131,7 @@ public:
@descr Fills the list only, if this is a list validation and IsShowList() is enabled.
@param rStrings (out-param) The string list to fill with list validation entires.
@return true = rStrings has been filled with at least one entry. */
- bool FillSelectionList( TypedScStrCollection& rStrings, const ScAddress& rPos ) const;
+ bool FillSelectionList(std::vector<TypedStrData>& rStrings, const ScAddress& rPos) const;
// with string: during input, with cell: for detective / RC_FORCED
sal_Bool IsDataValid( const String& rTest, const ScPatternAttr& rPattern,
@@ -165,9 +165,9 @@ private:
@param rTokArr Formula token array.
@param rMatch (out-param) the index of the first item that matched, -1 if nothing matched.
@return true = Cell range found, rRange is valid, or an error entry stuffed into the list if pCell==NULL. */
- bool GetSelectionFromFormula( TypedScStrCollection* pStrings,
- ScBaseCell* pCell, const ScAddress& rPos,
- const ScTokenArray& rTokArr, int& rMatch ) const;
+ bool GetSelectionFromFormula(
+ std::vector<TypedStrData>* pStrings, ScBaseCell* pCell, const ScAddress& rPos,
+ const ScTokenArray& rTokArr, int& rMatch) const;
/** Tests, if pCell is equal to what the passed token array represents. */
bool IsEqualToTokenArray( ScBaseCell* pCell, const ScAddress& rPos, const ScTokenArray& rTokArr ) const;
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 113b8ae..c62f9f2 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -1516,77 +1516,76 @@ bool ScColumn::SetString( SCROW nRow, SCTAB nTabP, const String& rString,
}
-void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, TypedScStrCollection& rStrings, bool& rHasDates)
+void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<TypedStrData>& rStrings, bool& rHasDates)
{
bool bHasDates = false;
SvNumberFormatter* pFormatter = pDocument->GetFormatTable();
rtl::OUString aString;
- SCROW nRow = 0;
SCSIZE nIndex;
Search( nStartRow, nIndex );
- while ( (nIndex < maItems.size()) ? ((nRow=maItems[nIndex].nRow) <= nEndRow) : false )
+ for (; nIndex < maItems.size(); ++nIndex)
{
+ SCROW nRow = maItems[nIndex].nRow;
+ if (nRow > nEndRow)
+ break;
+
ScBaseCell* pCell = maItems[nIndex].pCell;
- TypedStrData* pData = NULL;
sal_uLong nFormat = GetNumberFormat( nRow );
ScCellFormat::GetInputString( pCell, nFormat, aString, *pFormatter );
if ( pDocument->HasStringData( nCol, nRow, nTab ) )
- pData = new TypedStrData( aString );
- else
{
- double nValue = 0.0;
+ rStrings.push_back(TypedStrData(aString));
+ continue;
+ }
- switch ( pCell->GetCellType() )
- {
- case CELLTYPE_VALUE:
- nValue = ((ScValueCell*)pCell)->GetValue();
- break;
+ double nValue = 0.0;
- case CELLTYPE_FORMULA:
- {
- ScFormulaCell* pFC = static_cast<ScFormulaCell*>(pCell);
- sal_uInt16 nErr = pFC->GetErrCode();
- if (nErr)
- {
- // Error cell is evaluated as string (for now).
- String aErr = ScGlobal::GetErrorString(nErr);
- if (aErr.Len())
- pData = new TypedStrData(aErr);
- }
- else
- nValue = pFC->GetValue();
- }
+ switch ( pCell->GetCellType() )
+ {
+ case CELLTYPE_VALUE:
+ nValue = ((ScValueCell*)pCell)->GetValue();
break;
- default:
- ;
- }
-
- if (!pData)
+ case CELLTYPE_FORMULA:
{
- if (pFormatter)
+ ScFormulaCell* pFC = static_cast<ScFormulaCell*>(pCell);
+ sal_uInt16 nErr = pFC->GetErrCode();
+ if (nErr)
{
- short nType = pFormatter->GetType(nFormat);
- if ((nType & NUMBERFORMAT_DATE) && !(nType & NUMBERFORMAT_TIME))
+ // Error cell is evaluated as string (for now).
+ String aErr = ScGlobal::GetErrorString(nErr);
+ if (aErr.Len())
{
- // special case for date values. Disregard the time
- // element if the number format is of date type.
- nValue = ::rtl::math::approxFloor(nValue);
- bHasDates = true;
+ rStrings.push_back(TypedStrData(aErr));
+ continue;
}
}
- pData = new TypedStrData(aString, nValue, TypedStrData::Value);
+ else
+ nValue = pFC->GetValue();
}
+ break;
+
+ default:
+ ;
}
- if ( !rStrings.Insert( pData ) )
- delete pData; // doppelt
+ if (pFormatter)
+ {
+ short nType = pFormatter->GetType(nFormat);
+ if ((nType & NUMBERFORMAT_DATE) && !(nType & NUMBERFORMAT_TIME))
+ {
+ // special case for date values. Disregard the time
+ // element if the number format is of date type.
+ nValue = ::rtl::math::approxFloor(nValue);
+ bHasDates = true;
+ }
+ }
- ++nIndex;
+ rStrings.push_back(TypedStrData(aString, nValue, TypedStrData::Value));
}
rHasDates = bHasDates;
@@ -1602,7 +1601,7 @@ void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, TypedScStrCollec
#define DATENT_SEARCH 2000
-bool ScColumn::GetDataEntries(SCROW nStartRow, TypedScStrCollection& rStrings, bool bLimit)
+bool ScColumn::GetDataEntries(SCROW nStartRow, std::set<TypedStrData>& rStrings, bool bLimit)
{
sal_Bool bFound = false;
SCSIZE nThisIndex;
@@ -1633,10 +1632,8 @@ bool ScColumn::GetDataEntries(SCROW nStartRow, TypedScStrCollection& rStrings, b
else
((ScEditCell*)pCell)->GetString(aString);
- TypedStrData* pData = new TypedStrData(aString);
- if ( !rStrings.Insert( pData ) )
- delete pData; // doppelt
- else if ( bLimit && rStrings.GetCount() >= DATENT_MAX )
+ bool bInserted = rStrings.insert(TypedStrData(aString)).second;
+ if (bInserted && bLimit && rStrings.size() >= DATENT_MAX)
break; // Maximum erreicht
bFound = true;
@@ -1658,10 +1655,8 @@ bool ScColumn::GetDataEntries(SCROW nStartRow, TypedScStrCollection& rStrings, b
else
((ScEditCell*)pCell)->GetString(aString);
- TypedStrData* pData = new TypedStrData(aString);
- if ( !rStrings.Insert( pData ) )
- delete pData; // doppelt
- else if ( bLimit && rStrings.GetCount() >= DATENT_MAX )
+ bool bInserted = rStrings.insert(TypedStrData(aString)).second;
+ if (bInserted && bLimit && rStrings.size() >= DATENT_MAX)
break; // Maximum erreicht
bFound = true;
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 631d721..3b8be7a 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -1425,7 +1425,7 @@ bool ScDocument::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol,
//
bool ScDocument::GetFilterEntries(
- SCCOL nCol, SCROW nRow, SCTAB nTab, bool bFilter, TypedScStrCollection& rStrings, bool& rHasDates)
+ SCCOL nCol, SCROW nRow, SCTAB nTab, bool bFilter, std::vector<TypedStrData>& rStrings, bool& rHasDates)
{
if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && pDBCollection )
{
@@ -1445,7 +1445,6 @@ bool ScDocument::GetFilterEntries(
ScQueryParam aParam;
pDBData->GetQueryParam( aParam );
- rStrings.SetCaseSensitive( aParam.bCaseSens );
// return all filter entries, if a filter condition is connected with a boolean OR
if ( bFilter )
@@ -1471,6 +1470,17 @@ bool ScDocument::GetFilterEntries(
maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates );
}
+ if (aParam.bCaseSens)
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
+ }
+ else
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
+ }
+
return true;
}
}
@@ -1482,12 +1492,23 @@ bool ScDocument::GetFilterEntries(
// GetFilterEntriesArea - Eintraege fuer Filter-Dialog
//
-bool ScDocument::GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow,
- SCTAB nTab, TypedScStrCollection& rStrings, bool& rHasDates )
+bool ScDocument::GetFilterEntriesArea(
+ SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bCaseSens,
+ std::vector<TypedStrData>& rStrings, bool& rHasDates)
{
if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
{
maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates );
+ if (bCaseSens)
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
+ }
+ else
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
+ }
return true;
}
@@ -1498,8 +1519,9 @@ bool ScDocument::GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRo
// GetDataEntries - Eintraege fuer Auswahlliste-Listbox (keine Zahlen / Formeln)
//
-bool ScDocument::GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
- TypedScStrCollection& rStrings, bool bLimit )
+bool ScDocument::GetDataEntries(
+ SCCOL nCol, SCROW nRow, SCTAB nTab, bool bCaseSens,
+ std::vector<TypedStrData>& rStrings, bool bLimit )
{
if( !bLimit )
{
@@ -1511,23 +1533,53 @@ bool ScDocument::GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
{
const ScValidationData* pData = GetValidationEntry( nValidation );
if( pData && pData->FillSelectionList( rStrings, ScAddress( nCol, nRow, nTab ) ) )
+ {
+ if (pData->GetListType() == ValidListType::SORTEDASCENDING)
+ {
+ if (bCaseSens)
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
+ }
+ else
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
+ }
+ }
return true;
+ }
}
}
- return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->GetDataEntries( nCol, nRow, rStrings, bLimit );
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()))
+ return false;
+
+ if (!maTabs[nTab])
+ return false;
+
+ std::set<TypedStrData> aStrings;
+ bool bRet = maTabs[nTab]->GetDataEntries(nCol, nRow, aStrings, bLimit);
+ rStrings.insert(rStrings.end(), aStrings.begin(), aStrings.end());
+ if (bCaseSens)
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseSensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseSensitive());
+ }
+ else
+ {
+ std::sort(rStrings.begin(), rStrings.end(), TypedStrData::LessCaseInsensitive());
+ std::unique(rStrings.begin(), rStrings.end(), TypedStrData::EqualCaseInsensitive());
+ }
+
+ return bRet;
}
//
// GetFormulaEntries - Eintraege fuer Formel-AutoEingabe
//
-// Funktionen werden als 1 schon vom InputHandler eingefuegt
-#define SC_STRTYPE_NAMES 2
-#define SC_STRTYPE_DBNAMES 3
-#define SC_STRTYPE_HEADERS 4
-
-bool ScDocument::GetFormulaEntries( TypedScStrCollection& rStrings )
+bool ScDocument::GetFormulaEntries( ScTypedCaseStrSet& rStrings )
{
//
// Bereichsnamen
@@ -1537,11 +1589,7 @@ bool ScDocument::GetFormulaEntries( TypedScStrCollection& rStrings )
{
ScRangeName::const_iterator itr = pRangeName->begin(), itrEnd = pRangeName->end();
for (; itr != itrEnd; ++itr)
- {
- TypedStrData* pNew = new TypedStrData(itr->second->GetName(), 0.0, TypedStrData::Name);
- if (!rStrings.Insert(pNew))
- delete pNew;
- }
+ rStrings.insert(TypedStrData(itr->second->GetName(), 0.0, TypedStrData::Name));
}
//
@@ -1553,11 +1601,7 @@ bool ScDocument::GetFormulaEntries( TypedScStrCollection& rStrings )
const ScDBCollection::NamedDBs& rDBs = pDBCollection->getNamedDBs();
ScDBCollection::NamedDBs::const_iterator itr = rDBs.begin(), itrEnd = rDBs.end();
for (; itr != itrEnd; ++itr)
- {
- TypedStrData* pNew = new TypedStrData(itr->GetName(), 0.0, TypedStrData::DbName);
- if ( !rStrings.Insert(pNew) )
- delete pNew;
- }
+ rStrings.insert(TypedStrData(itr->GetName(), 0.0, TypedStrData::DbName));
}
//
@@ -1580,9 +1624,7 @@ bool ScDocument::GetFormulaEntries( TypedScStrCollection& rStrings )
if ( pCell->HasStringData() )
{
rtl::OUString aStr = pCell->GetStringData();
- TypedStrData* pNew = new TypedStrData(aStr, 0.0, TypedStrData::Header);
- if ( !rStrings.Insert(pNew) )
- delete pNew;
+ rStrings.insert(TypedStrData(aStr, 0.0, TypedStrData::Header));
}
}
}
diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx
index 7458fca..828f58e 100644
--- a/sc/source/core/data/dpobject.cxx
+++ b/sc/source/core/data/dpobject.cxx
@@ -979,7 +979,7 @@ long ScDPObject::GetDimCount()
return nRet;
}
-void ScDPObject::FillPageList( TypedScStrCollection& rStrings, long nField )
+void ScDPObject::FillPageList( std::vector<rtl::OUString>& rStrings, long nField )
{
//! merge members access with ToggleDetails?
@@ -1060,16 +1060,12 @@ void ScDPObject::FillPageList( TypedScStrCollection& rStrings, long nField )
if (bVisible)
{
// use the order from getElementNames
- TypedStrData* pData = new TypedStrData( pNameArr[nPos] );
- if ( !rStrings.AtInsert( rStrings.GetCount(), pData ) )
- delete pData;
+ rStrings.push_back(pNameArr[nPos]);
}
}
// add "-all-" entry to the top (unsorted)
- TypedStrData* pAllData = new TypedStrData( String( ScResId( SCSTR_ALL ) ) ); //! separate string? (also output)
- if ( !rStrings.AtInsert( 0, pAllData ) )
- delete pAllData;
+ rStrings.insert(rStrings.begin(), ScResId::toString(ScResId(SCSTR_ALL)));
}
void ScDPObject::GetHeaderPositionData(const ScAddress& rPos, DataPilotTableHeaderData& rData)
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index a1ed9b9..11aed0c 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -2108,13 +2108,13 @@ bool ScTable::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL /* nEndCol *
return true;
}
-void ScTable::GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, TypedScStrCollection& rStrings, bool& rHasDates)
+void ScTable::GetFilterEntries(SCCOL nCol, SCROW nRow1, SCROW nRow2, std::vector<TypedStrData>& rStrings, bool& rHasDates)
{
aCol[nCol].GetFilterEntries( nRow1, nRow2, rStrings, rHasDates );
}
void ScTable::GetFilteredFilterEntries(
- SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, TypedScStrCollection& rStrings, bool& rHasDates )
+ SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScQueryParam& rParam, std::vector<TypedStrData>& rStrings, bool& rHasDates)
{
// remove the entry for this column from the query parameter
ScQueryParam aParam( rParam );
@@ -2135,7 +2135,7 @@ void ScTable::GetFilteredFilterEntries(
rHasDates = bHasDates;
}
-bool ScTable::GetDataEntries(SCCOL nCol, SCROW nRow, TypedScStrCollection& rStrings, bool bLimit)
+bool ScTable::GetDataEntries(SCCOL nCol, SCROW nRow, std::set<TypedStrData>& rStrings, bool bLimit)
{
return aCol[nCol].GetDataEntries( nRow, rStrings, bLimit );
}
diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx
index c19ea19..ec1da24 100644
--- a/sc/source/core/data/validat.cxx
+++ b/sc/source/core/data/validat.cxx
@@ -601,13 +601,6 @@ sal_uLong lclGetCellFormat( ScDocument& rDoc, const ScAddress& rPos )
return pPattern->GetNumberFormat( rDoc.GetFormatTable() );
}
-/** Inserts the passed string object. Always takes ownership. pData is invalid after this call! */
-void lclInsertStringToCollection( TypedScStrCollection& rStrColl, TypedStrData* pData, bool bSorted )
-{
- if( !(bSorted ? rStrColl.Insert( pData ) : rStrColl.AtInsert( rStrColl.GetCount(), pData )) )
- delete pData;
-}
-
} // namespace
// ----------------------------------------------------------------------------
@@ -617,11 +610,9 @@ bool ScValidationData::HasSelectionList() const
return (eDataMode == SC_VALID_LIST) && (mnListType != ValidListType::INVISIBLE);
}
-bool ScValidationData::GetSelectionFromFormula( TypedScStrCollection* pStrings,
- ScBaseCell* pCell,
- const ScAddress& rPos,
- const ScTokenArray& rTokArr,
- int& rMatch ) const
+bool ScValidationData::GetSelectionFromFormula(
+ std::vector<TypedStrData>* pStrings, ScBaseCell* pCell, const ScAddress& rPos,
+ const ScTokenArray& rTokArr, int& rMatch) const
{
bool bOk = true;
@@ -676,7 +667,6 @@ bool ScValidationData::GetSelectionFromFormula( TypedScStrCollection* pStrings,
SvNumberFormatter* pFormatter = GetDocument()->GetFormatTable();
- bool bSortList = (mnListType == ValidListType::SORTEDASCENDING);
SCSIZE nCol, nRow, nCols, nRows, n = 0;
pValues->GetDimensions( nCols, nRows );
@@ -783,7 +773,8 @@ bool ScValidationData::GetSelectionFromFormula( TypedScStrCollection* pStrings,
if( NULL != pEntry )
{
- lclInsertStringToCollection( *pStrings, pEntry, bSortList );
+ pStrings->push_back(*pEntry);
+ delete pEntry;
n++;
}
}
@@ -794,28 +785,25 @@ bool ScValidationData::GetSelectionFromFormula( TypedScStrCollection* pStrings,
return bOk || NULL == pCell;
}
-bool ScValidationData::FillSelectionList( TypedScStrCollection& rStrColl, const ScAddress& rPos ) const
+bool ScValidationData::FillSelectionList(std::vector<TypedStrData>& rStrColl, const ScAddress& rPos) const
{
bool bOk = false;
if( HasSelectionList() )
{
- SAL_WNODEPRECATED_DECLARATIONS_PUSH
- ::std::auto_ptr< ScTokenArray > pTokArr( CreateTokenArry( 0 ) );
- SAL_WNODEPRECATED_DECLARATIONS_POP
+ boost::scoped_ptr<ScTokenArray> pTokArr( CreateTokenArry(0) );
// *** try if formula is a string list ***
- bool bSortList = (mnListType == ValidListType::SORTEDASCENDING);
sal_uInt32 nFormat = lclGetCellFormat( *GetDocument(), rPos );
ScStringTokenIterator aIt( *pTokArr );
for( const String* pString = aIt.First(); pString && aIt.Ok(); pString = aIt.Next() )
{
double fValue;
bool bIsValue = GetDocument()->GetFormatTable()->IsNumberFormat( *pString, nFormat, fValue );
- TypedStrData* pData = new TypedStrData(
- *pString, fValue, bIsValue ? TypedStrData::Value : TypedStrData::Standard);
- lclInsertStringToCollection( rStrColl, pData, bSortList );
+ rStrColl.push_back(
+ TypedStrData(
+ *pString, fValue, bIsValue ? TypedStrData::Value : TypedStrData::Standard));
}
bOk = aIt.Ok();
diff --git a/sc/source/core/tool/collect.cxx b/sc/source/core/tool/collect.cxx
index ca4805a..2bbf244 100644
--- a/sc/source/core/tool/collect.cxx
+++ b/sc/source/core/tool/collect.cxx
@@ -306,198 +306,114 @@ sal_Bool ScSortedCollection::IsEqual(ScDataObject* pKey1, ScDataObject* pKey2) c
// TypedScStrCollection
//------------------------------------------------------------------------
-TypedStrData::TypedStrData(
- const rtl::OUString& rStr, double nVal, StringType nType ) :
- maStrValue(rStr),
- mfValue(nVal),
- meStrType(nType) {}
+bool TypedStrData::LessCaseSensitive::operator() (const TypedStrData& left, const TypedStrData& right) const
+{
+ if (left.meStrType != right.meStrType)
+ return left.meStrType < right.meStrType;
-TypedStrData::TypedStrData( const TypedStrData& rCpy ) :
- ScDataObject(),
- maStrValue(rCpy.maStrValue),
- mfValue(rCpy.mfValue),
- meStrType(rCpy.meStrType) {}
+ if (left.meStrType == Value)
+ return left.mfValue < right.mfValue;
-ScDataObject* TypedStrData::Clone() const
-{
- return new TypedStrData(*this);
+ return ScGlobal::GetCaseTransliteration()->compareString(
+ left.maStrValue, right.maStrValue) < 0;
}
-bool TypedStrData::IsStrData() const
+bool TypedStrData::LessCaseInsensitive::operator() (const TypedStrData& left, const TypedStrData& right) const
{
- return meStrType != Value;
+ if (left.meStrType != right.meStrType)
+ return left.meStrType < right.meStrType;
+
+ if (left.meStrType == Value)
+ return left.mfValue < right.mfValue;
+
+ return ScGlobal::GetpTransliteration()->compareString(
+ left.maStrValue, right.maStrValue) < 0;
}
-const rtl::OUString& TypedStrData::GetString() const
+bool TypedStrData::EqualCaseSensitive::operator() (const TypedStrData& left, const TypedStrData& right) const
{
- return maStrValue;
+ if (left.meStrType != right.meStrType)
+ return false;
+
+ if (left.meStrType == Value && left.mfValue != right.mfValue)
+ return false;
+
+ return ScGlobal::GetCaseTransliteration()->compareString(
+ left.maStrValue, right.maStrValue) == 0;
}
-double TypedStrData::GetValue () const
+bool TypedStrData::EqualCaseInsensitive::operator() (const TypedStrData& left, const TypedStrData& right) const
{
- return mfValue;
+ if (left.meStrType != right.meStrType)
+ return false;
+
+ if (left.meStrType == Value && left.mfValue != right.mfValue)
+ return false;
+
+ return ScGlobal::GetpTransliteration()->compareString(
+ left.maStrValue, right.maStrValue) == 0;
}
-TypedScStrCollection::TypedScStrCollection( sal_uInt16 nLim , sal_uInt16 nDel , sal_Bool bDup )
- : ScSortedCollection( nLim, nDel, bDup )
+bool TypedStrData::operator== (const TypedStrData& r) const
{
- bCaseSensitive = false;
+ // Case insensitive comparison by default.
+ EqualCaseInsensitive aHdl;
+ return aHdl(*this, r);
}
-TypedScStrCollection::~TypedScStrCollection()
-{}
-ScDataObject* TypedScStrCollection::Clone() const
+bool TypedStrData::operator< (const TypedStrData& r) const
{
- return new TypedScStrCollection(*this);
+ // Case insensitive comparison by default.
+ LessCaseInsensitive aHdl;
+ return aHdl(*this, r);
}
-TypedStrData* TypedScStrCollection::operator[]( const sal_uInt16 nIndex) const
+TypedStrData::TypedStrData(
+ const rtl::OUString& rStr, double nVal, StringType nType ) :
+ maStrValue(rStr),
+ mfValue(nVal),
+ meStrType(nType) {}
+
+TypedStrData::TypedStrData( const TypedStrData& rCpy ) :
+ maStrValue(rCpy.maStrValue),
+ mfValue(rCpy.mfValue),
+ meStrType(rCpy.meStrType) {}
+
+bool TypedStrData::IsStrData() const
{
- return (TypedStrData*)At(nIndex);
+ return meStrType != Value;
}
-void TypedScStrCollection::SetCaseSensitive( sal_Bool bSet )
+const rtl::OUString& TypedStrData::GetString() const
{
- bCaseSensitive = bSet;
+ return maStrValue;
}
-short TypedScStrCollection::Compare( ScDataObject* pKey1, ScDataObject* pKey2 ) const
+double TypedStrData::GetValue() const
{
- short nResult = 0;
-
- if ( pKey1 && pKey2 )
- {
- TypedStrData& rData1 = (TypedStrData&)*pKey1;
- TypedStrData& rData2 = (TypedStrData&)*pKey2;
-
- if ( rData1.meStrType > rData2.meStrType )
- nResult = 1;
- else if ( rData1.meStrType < rData2.meStrType )
- nResult = -1;
- else if ( !rData1.meStrType /* && !rData2.nStrType */ )
- {
- //--------------------
- // Zahlen vergleichen:
- //--------------------
- if ( rData1.mfValue == rData2.mfValue )
- nResult = 0;
- else if ( rData1.mfValue < rData2.mfValue )
- nResult = -1;
- else
- nResult = 1;
- }
- else /* if ( rData1.nStrType && rData2.nStrType ) */
- {
- //---------------------
- // Strings vergleichen:
- //---------------------
- if ( bCaseSensitive )
- nResult = (short) ScGlobal::GetCaseTransliteration()->compareString(
- rData1.maStrValue, rData2.maStrValue );
- else
- nResult = (short) ScGlobal::GetpTransliteration()->compareString(
- rData1.maStrValue, rData2.maStrValue );
- }
- }
-
- return nResult;
+ return mfValue;
}
-sal_Bool TypedScStrCollection::FindText( const String& rStart, String& rResult,
- sal_uInt16& rPos, sal_Bool bBack ) const
+TypedStrData::StringType TypedStrData::GetStringType() const
{
- // Die Collection ist nach String-Vergleichen sortiert, darum muss hier
- // alles durchsucht werden
-
- sal_Bool bFound = false;
-
- String aOldResult;
- if ( rPos != SCPOS_INVALID && rPos < nCount )
- {
- TypedStrData* pData = (TypedStrData*) pItems[rPos];
- if (pData->meStrType)
- aOldResult = pData->maStrValue;
- }
-
- if ( bBack ) // rueckwaerts
- {
- sal_uInt16 nStartPos = nCount;
- if ( rPos != SCPOS_INVALID )
- nStartPos = rPos; // weitersuchen...
-
- for ( sal_uInt16 i=nStartPos; i>0; )
- {
- --i;
- TypedStrData* pData = (TypedStrData*) pItems[i];
- if (pData->meStrType)
- {
- if ( ScGlobal::GetpTransliteration()->isMatch( rStart, pData->maStrValue ) )
- {
- // If the collection is case sensitive, it may contain several entries
- // that are equal when compared case-insensitive. They are skipped here.
- if ( !bCaseSensitive || !aOldResult.Len() ||
- !ScGlobal::GetpTransliteration()->isEqual(
- pData->maStrValue, aOldResult ) )
- {
- rResult = pData->maStrValue;
- rPos = i;
- bFound = sal_True;
- break;
- }
- }
- }
- }
- }
- else // vorwaerts
- {
- sal_uInt16 nStartPos = 0;
- if ( rPos != SCPOS_INVALID )
- nStartPos = rPos + 1; // weitersuchen...
-
- for ( sal_uInt16 i=nStartPos; i<nCount; i++ )
- {
- TypedStrData* pData = (TypedStrData*) pItems[i];
- if (pData->meStrType)
- {
- if ( ScGlobal::GetpTransliteration()->isMatch( rStart, pData->maStrValue ) )
- {
- // If the collection is case sensitive, it may contain several entries
- // that are equal when compared case-insensitive. They are skipped here.
- if ( !bCaseSensitive || !aOldResult.Len() ||
- !ScGlobal::GetpTransliteration()->isEqual(
- pData->maStrValue, aOldResult ) )
- {
- rResult = pData->maStrValue;
- rPos = i;
- bFound = sal_True;
- break;
- }
- }
- }
- }
- }
-
- return bFound;
+ return meStrType;
}
- // Gross-/Kleinschreibung anpassen
+FindTypedStrData::FindTypedStrData(const TypedStrData& rVal, bool bCaseSens) :
+ maVal(rVal), mbCaseSens(bCaseSens) {}
-sal_Bool TypedScStrCollection::GetExactMatch( String& rString ) const
+bool FindTypedStrData::operator() (const TypedStrData& r) const
{
- for (sal_uInt16 i=0; i<nCount; i++)
+ if (mbCaseSens)
{
- TypedStrData* pData = (TypedStrData*) pItems[i];
- if ( pData->meStrType && ScGlobal::GetpTransliteration()->isEqual(
- pData->maStrValue, rString ) )
- {
- rString = pData->maStrValue; // String anpassen
- return sal_True;
- }
+ TypedStrData::EqualCaseSensitive aHdl;
+ return aHdl(maVal, r);
+ }
+ else
+ {
+ TypedStrData::EqualCaseInsensitive aHdl;
+ return aHdl(maVal, r);
}
-
- return false;
}
-
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 38cbee8..af09820 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -102,23 +102,114 @@ using namespace formula;
sal_Bool ScInputHandler::bOptLoaded = false; // App-Optionen ausgewertet
sal_Bool ScInputHandler::bAutoComplete = false; // wird in KeyInput gesetzt
+extern sal_uInt16 nEditAdjust; //! Member an ViewData
+
+namespace {
+
// delimiters (in addition to ScEditUtil) needed for range finder:
// only characters that are allowed in formulas next to references
// and the quotation mark (so string constants can be skipped)
+const sal_Char pMinDelimiters[] = " !\"";
-static const sal_Char pMinDelimiters[] = " !\"";
-
-extern sal_uInt16 nEditAdjust; //! Member an ViewData
-
-//==================================================================
-
-static sal_Unicode lcl_getSheetSeparator(ScDocument* pDoc)
+sal_Unicode lcl_getSheetSeparator(ScDocument* pDoc)
{
ScCompiler aComp(pDoc, ScAddress());
aComp.SetGrammar(pDoc->GetGrammar());
return aComp.GetNativeAddressSymbol(ScCompiler::Convention::SHEET_SEPARATOR);
}
+ScTypedCaseStrSet::const_iterator findText(
+ const ScTypedCaseStrSet& rDataSet, ScTypedCaseStrSet::const_iterator itPos,
+ const rtl::OUString& rStart, rtl::OUString& rResult, bool bBack)
+{
+ rtl::OUString aOldResult;
+ if (itPos != rDataSet.end())
+ {
+ const TypedStrData& rData = *itPos;
+ if (rData.GetStringType())
+ aOldResult = rData.GetString();
+ }
+
+ if (bBack) // rueckwaerts
+ {
+ ScTypedCaseStrSet::const_reverse_iterator it = rDataSet.rbegin(), itEnd = rDataSet.rend();
+ if (itPos != rDataSet.end())
+ {
+ size_t nPos = std::distance(rDataSet.begin(), itPos);
+ size_t nRPos = rDataSet.size() - 1 - nPos;
+ std::advance(it, nRPos);
+ }
+
+ for (; it != itEnd; ++it)
+ {
+ const TypedStrData& rData = *it;
+ if (rData.GetStringType() == TypedStrData::Value)
+ // skip values.
+ continue;
+
+ if (!ScGlobal::GetpTransliteration()->isMatch(rStart, rData.GetString()))
+ // not a match.
+ continue;
+
+ rResult = rData.GetString();
+ return (++it).base(); // convert the reverse iterator back to iterator.
+ }
+ }
+ else // vorwaerts
+ {
+ ScTypedCaseStrSet::const_iterator it = rDataSet.begin(), itEnd = rDataSet.end();
+ if (itPos != rDataSet.end())
+ it = itPos;
+
+ for (; it != itEnd; ++it)
+ {
+ const TypedStrData& rData = *it;
+ if (rData.GetStringType() == TypedStrData::Value)
+ // skip values.
+ continue;
+
+ if (!ScGlobal::GetpTransliteration()->isMatch(rStart, rData.GetString()))
+ // not a match.
+ continue;
+
+ rResult = rData.GetString();
+ return it;
+ }
+ }
+
+ return rDataSet.end(); // no matching text found.
+}
+
+rtl::OUString getExactMatch(const ScTypedCaseStrSet& rDataSet, const rtl::OUString& rString)
+{
+ ScTypedCaseStrSet::const_iterator it = rDataSet.begin(), itEnd = rDataSet.end();
+ for (; it != itEnd; ++it)
+ {
+ const TypedStrData& rData = *it;
+ if (rData.GetStringType() == TypedStrData::Value)
+ continue;
+
+ if (!ScGlobal::GetpTransliteration()->isEqual(rData.GetString(), rString))
+ continue;
+
+ return rData.GetString();
+ }
+ return rtl::OUString();
+}
+
+void removeChars(rtl::OUString& rStr, sal_Unicode c)
+{
+ rtl::OUStringBuffer aBuf(rStr);
+ for (sal_Int32 i = 0, n = aBuf.getLength(); i < n; ++i)
+ {
+ if (aBuf.charAt(i) == c)
+ aBuf.setCharAt(i, sal_Unicode(' '));
+ }
+ rStr = aBuf.makeStringAndClear();
+}
+
+}
+
void ScInputHandler::InitRangeFinder( const String& rFormula )
{
DeleteRangeFinder();
@@ -312,19 +403,15 @@ inline String GetEditText(EditEngine* pEng)
return ScEditUtil::GetSpaceDelimitedString(*pEng);
}
-void lcl_RemoveTabs(String& rStr)
+void lcl_RemoveTabs(rtl::OUString& rStr)
{
- xub_StrLen nPos;
- while ( (nPos=rStr.Search('\t')) != STRING_NOTFOUND )
- rStr.SetChar( nPos, ' ' );
+ removeChars(rStr, sal_Unicode('\t'));
}
-void lcl_RemoveLineEnd(String& rStr)
+void lcl_RemoveLineEnd(rtl::OUString& rStr)
{
rStr = convertLineEnd(rStr, LINEEND_LF);
- xub_StrLen nPos;
- while ( (nPos=rStr.Search('\n')) != STRING_NOTFOUND )
- rStr.SetChar( nPos, ' ' );
+ removeChars(rStr, sal_Unicode('\n'));
}
xub_StrLen lcl_MatchParenthesis( const String& rStr, xub_StrLen nPos )
@@ -433,7 +520,6 @@ ScInputHandler::ScInputHandler()
nTipVisible( 0 ),
pTipVisibleSecParent( NULL ),
nTipVisibleSec( 0 ),
- nAutoPos( SCPOS_INVALID ),
bUseTab( false ),
bTextValid( sal_True ),
nFormSelStart( 0 ),
@@ -634,7 +720,6 @@ void ScInputHandler::UpdateSpellSettings( sal_Bool bFromStartTab )
// Funktionen/Bereichsnamen etc. als Tip-Hilfe
//
-#define SC_STRTYPE_FUNCTIONS 1
// die anderen Typen sind in ScDocument::GetFormulaEntries festgelegt
void ScInputHandler::GetFormulaData()
@@ -644,14 +729,14 @@ void ScInputHandler::GetFormulaData()
ScDocument* pDoc = pActiveViewSh->GetViewData()->GetDocShell()->GetDocument();
if ( pFormulaData )
- pFormulaData->FreeAll();
+ pFormulaData->clear();
else
- pFormulaData = new TypedScStrCollection;
+ pFormulaData = new ScTypedCaseStrSet;
if( pFormulaDataPara )
- pFormulaDataPara->FreeAll();
+ pFormulaDataPara->clear();
else
- pFormulaDataPara = new TypedScStrCollection;
+ pFormulaDataPara = new ScTypedCaseStrSet;
// MRU-Funktionen aus dem Funktions-Autopiloten
// wie in ScPosWnd::FillFunctions (inputwin.cxx)
@@ -673,9 +758,7 @@ void ScInputHandler::GetFormulaData()
{
String aEntry = *pDesc->pFuncName;
aEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM( "()" ));
- TypedStrData* pData = new TypedStrData(aEntry, 0.0, TypedStrData::Standard);
- if (!pFormulaData->Insert(pData))
- delete pData;
+ pFormulaData->insert(TypedStrData(aEntry, 0.0, TypedStrData::Standard));
break; // nicht weitersuchen
}
}
@@ -688,9 +771,7 @@ void ScInputHandler::GetFormulaData()
{
pDesc->initArgumentInfo();
String aEntry = pDesc->getSignature();
- TypedStrData* pData = new TypedStrData(aEntry, 0.0, TypedStrData::Standard);
- if (!pFormulaDataPara->Insert(pData))
- delete pData;
+ pFormulaDataPara->insert(TypedStrData(aEntry, 0.0, TypedStrData::Standard));
}
}
pDoc->GetFormulaEntries( *pFormulaData );
@@ -783,10 +864,11 @@ void ScInputHandler::ShowTipCursor()
nArgPos = aHelper.GetArgStart( aSelText, nNextFStart, 0 );
nArgs = static_cast<sal_uInt16>(ppFDesc->getParameterCount());
- sal_Bool bFlag = false;
- String aNew;
- sal_uInt16 nParAutoPos = SCPOS_INVALID;
- if( pFormulaDataPara->FindText( ppFDesc->getFunctionName(), aNew, nParAutoPos, false ) )
+ bool bFlag = false;
+ rtl::OUString aNew;
+ ScTypedCaseStrSet::const_iterator it =
+ findText(*pFormulaDataPara, pFormulaDataPara->end(), ppFDesc->getFunctionName(), aNew, false);
+ if (it != pFormulaDataPara->end())
{
sal_uInt16 nActive = 0;
for( sal_uInt16 i=0; i < nArgs; i++ )
@@ -801,16 +883,16 @@ void ScInputHandler::ShowTipCursor()
}
if( bFlag )
{
- sal_uInt16 nCountSemicolon = comphelper::string::getTokenCount(aNew, cSep) - 1;
- sal_uInt16 nCountDot = comphelper::string::getTokenCount(aNew, cSheetSep) - 1;
- sal_uInt16 nStartPosition = 0;
- sal_uInt16 nEndPosition = 0;
+ sal_Int32 nCountSemicolon = comphelper::string::getTokenCount(aNew, cSep) - 1;
+ sal_Int32 nCountDot = comphelper::string::getTokenCount(aNew, cSheetSep) - 1;
+ sal_Int32 nStartPosition = 0;
+ sal_Int32 nEndPosition = 0;
if( !nCountSemicolon )
{
- for( sal_uInt16 i = 0; i < aNew.Len(); i++ )
+ for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
{
- sal_Unicode cNext = aNew.GetChar( i );
+ sal_Unicode cNext = aNew.getStr()[i];
if( cNext == '(' )
{
nStartPosition = i+1;
@@ -820,9 +902,9 @@ void ScInputHandler::ShowTipCursor()
else if( !nCountDot )
{
sal_uInt16 nCount = 0;
- for( sal_uInt16 i = 0; i < aNew.Len(); i++ )
+ for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
{
- sal_Unicode cNext = aNew.GetChar( i );
+ sal_Unicode cNext = aNew.getStr()[i];
if( cNext == '(' )
{
nStartPosition = i+1;
@@ -842,9 +924,9 @@ void ScInputHandler::ShowTipCursor()
else
{
sal_uInt16 nCount = 0;
- for( sal_uInt16 i = 0; i < aNew.Len(); i++ )
+ for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
{
- sal_Unicode cNext = aNew.GetChar( i );
+ sal_Unicode cNext = aNew.getStr()[i];
if( cNext == '(' )
{
nStartPosition = i+1;
@@ -866,9 +948,13 @@ void ScInputHandler::ShowTipCursor()
}
}
- if( nStartPosition )
+ if (nStartPosition > 0)
{
- aNew.Insert( 0x25BA, nStartPosition );
+ rtl::OUStringBuffer aBuf;
+ aBuf.append(aNew.copy(0, nStartPosition));
+ aBuf.append(static_cast<sal_Unicode>(0x25BA));
+ aBuf.append(aNew.copy(nStartPosition));
+ aNew = aBuf.makeStringAndClear();
ShowTipBelow( aNew );
bFound = sal_True;
}
@@ -890,10 +976,11 @@ void ScInputHandler::ShowTipCursor()
{
break;
}
- String aNew;
- sal_uInt16 nParAutoPos = SCPOS_INVALID;
+ rtl::OUString aNew;
nPosition = aText.Len()+1;
- if( pFormulaDataPara->FindText( aText, aNew, nParAutoPos, false ) )
+ ScTypedCaseStrSet::const_iterator it =
+ findText(*pFormulaDataPara, pFormulaDataPara->end(), aText, aNew, false);
+ if (it != pFormulaDataPara->end())
{
if( aFormula.GetChar( nPosition ) =='(' )
{
@@ -995,12 +1082,13 @@ void ScInputHandler::UseFormulaData()
sal_uInt16 nArgs;
sal_Bool bFound = false;
- String aText = pEngine->GetWord( 0, aSel.nEndPos-1 );
- if ( aText.Len() )
+ rtl::OUString aText = pEngine->GetWord( 0, aSel.nEndPos-1 );
+ if (!aText.isEmpty())
{
- String aNew;
- nAutoPos = SCPOS_INVALID;
- if ( pFormulaData->FindText( aText, aNew, nAutoPos, false ) )
+ rtl::OUString aNew;
+ miAutoPos = pFormulaData->end();
+ miAutoPos = findText(*pFormulaData, miAutoPos, aText, aNew, false);
+ if (miAutoPos != pFormulaData->end())
{
ShowTip( aNew );
aAutoSearch = aText;
@@ -1027,10 +1115,11 @@ void ScInputHandler::UseFormulaData()
nArgPos = aHelper.GetArgStart( aFormula, nNextFStart, 0 );
nArgs = static_cast<sal_uInt16>(ppFDesc->getParameterCount());
- sal_Bool bFlag = false;
- String aNew;
- sal_uInt16 nParAutoPos = SCPOS_INVALID;
- if( pFormulaDataPara->FindText( ppFDesc->getFunctionName(), aNew, nParAutoPos, false ) )
+ bool bFlag = false;
+ rtl::OUString aNew;
+ ScTypedCaseStrSet::const_iterator it =
+ findText(*pFormulaDataPara, pFormulaDataPara->end(), ppFDesc->getFunctionName(), aNew, false);
+ if (it != pFormulaDataPara->end())
{
sal_uInt16 nActive = 0;
for( sal_uInt16 i=0; i < nArgs; i++ )
@@ -1045,16 +1134,16 @@ void ScInputHandler::UseFormulaData()
}
if( bFlag )
{
- sal_uInt16 nCountSemicolon = comphelper::string::getTokenCount(aNew, cSep) - 1;
- sal_uInt16 nCountDot = comphelper::string::getTokenCount(aNew, cSheetSep) - 1;
- sal_uInt16 nStartPosition = 0;
- sal_uInt16 nEndPosition = 0;
+ sal_Int32 nCountSemicolon = comphelper::string::getTokenCount(aNew, cSep) - 1;
+ sal_Int32 nCountDot = comphelper::string::getTokenCount(aNew, cSheetSep) - 1;
+ sal_Int32 nStartPosition = 0;
+ sal_Int32 nEndPosition = 0;
if( !nCountSemicolon )
{
- for( sal_uInt16 i = 0; i < aNew.Len(); i++ )
+ for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
{
- sal_Unicode cNext = aNew.GetChar( i );
+ sal_Unicode cNext = aNew.getStr()[i];
if( cNext == '(' )
{
nStartPosition = i+1;
@@ -1064,9 +1153,9 @@ void ScInputHandler::UseFormulaData()
else if( !nCountDot )
{
sal_uInt16 nCount = 0;
- for( sal_uInt16 i = 0; i < aNew.Len(); i++ )
+ for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
{
- sal_Unicode cNext = aNew.GetChar( i );
+ sal_Unicode cNext = aNew.getStr()[i];
if( cNext == '(' )
{
nStartPosition = i+1;
@@ -1086,9 +1175,9 @@ void ScInputHandler::UseFormulaData()
else
{
sal_uInt16 nCount = 0;
- for( sal_uInt16 i = 0; i < aNew.Len(); i++ )
+ for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
{
- sal_Unicode cNext = aNew.GetChar( i );
+ sal_Unicode cNext = aNew.getStr()[i];
if( cNext == '(' )
{
nStartPosition = i+1;
@@ -1110,9 +1199,13 @@ void ScInputHandler::UseFormulaData()
}
}
- if( nStartPosition )
+ if (nStartPosition > 0)
{
- aNew.Insert( 0x25BA, nStartPosition );
+ rtl::OUStringBuffer aBuf;
+ aBuf.append(aNew.copy(0, nStartPosition));
+ aBuf.append(static_cast<sal_Unicode>(0x25BA));
+ aBuf.append(aNew.copy(nStartPosition));
+ aNew = aBuf.makeStringAndClear();
ShowTipBelow( aNew );
bFound = sal_True;
}
@@ -1135,8 +1228,9 @@ void ScInputHandler::NextFormulaEntry( sal_Bool bBack )
EditView* pActiveView = pTopView ? pTopView : pTableView;
if ( pActiveView && pFormulaData )
{
- String aNew;
- if ( pFormulaData->FindText( aAutoSearch, aNew, nAutoPos, bBack ) )
+ rtl::OUString aNew;
+ miAutoPos = findText(*pFormulaData, miAutoPos, aAutoSearch, aNew, bBack);
+ if (miAutoPos != pFormulaData->end())
ShowTip( aNew ); // als QuickHelp anzeigen
}
@@ -1146,7 +1240,7 @@ void ScInputHandler::NextFormulaEntry( sal_Bool bBack )
pActiveView->ShowCursor();
}
-void lcl_CompleteFunction( EditView* pView, const String& rInsert, sal_Bool& rParInserted )
+void lcl_CompleteFunction( EditView* pView, const String& rInsert, bool& rParInserted )
{
if (pView)
{
@@ -1191,23 +1285,20 @@ void lcl_CompleteFunction( EditView* pView, const String& rInsert, sal_Bool& rPa
void ScInputHandler::PasteFunctionData()
{
- if ( pFormulaData && nAutoPos != SCPOS_INVALID )
+ if (pFormulaData && miAutoPos != pFormulaData->end())
{
- TypedStrData* pData = (*pFormulaData)[nAutoPos];
- if (pData)
- {
- String aInsert = pData->GetString();
- sal_Bool bParInserted = false;
+ const TypedStrData& rData = *miAutoPos;
+ const rtl::OUString& aInsert = rData.GetString();
+ bool bParInserted = false;
- DataChanging(); // kann nicht neu sein
- lcl_CompleteFunction( pTopView, aInsert, bParInserted );
- lcl_CompleteFunction( pTableView, aInsert, bParInserted );
- DataChanged();
- ShowTipCursor();
+ DataChanging(); // kann nicht neu sein
+ lcl_CompleteFunction( pTopView, aInsert, bParInserted );
+ lcl_CompleteFunction( pTableView, aInsert, bParInserted );
+ DataChanged();
+ ShowTipCursor();
- if (bParInserted)
- AutoParAdded();
- }
+ if (bParInserted)
+ AutoParAdded();
}
HideTip();
@@ -1310,7 +1401,10 @@ void ScInputHandler::FormulaPreview()
{
ShowTip( aValue ); // als QuickHelp anzeigen
aManualTip = aValue; // nach ShowTip setzen
- nAutoPos = SCPOS_INVALID; // Formel-Autocomplete aufheben
+ if (pFormulaData)
+ miAutoPos = pFormulaData->end();
+ else if (pColumnData)
+ miAutoPos = pColumnData->end();
}
}
@@ -1437,15 +1531,17 @@ void ScInputHandler::GetColData()
ScDocument* pDoc = pActiveViewSh->GetViewData()->GetDocShell()->GetDocument();
if ( pColumnData )
- pColumnData->FreeAll();
+ pColumnData->clear();
else
{
- pColumnData = new TypedScStrCollection;
- pColumnData->SetCaseSensitive( sal_True ); // equal strings are handled in FindText
+ pColumnData = new ScTypedCaseStrSet;
}
- pDoc->GetDataEntries( aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(),
- *pColumnData, sal_True );
+ std::vector<TypedStrData> aEntries;
+ pDoc->GetDataEntries(
+ aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), true, aEntries, true);
+ if (!aEntries.empty())
+ pColumnData->insert(aEntries.begin(), aEntries.end());
}
}
@@ -1465,12 +1561,13 @@ void ScInputHandler::UseColData() // beim Tippen
xub_StrLen nParLen = pEngine->GetTextLen( aSel.nEndPara );
if ( aSel.nEndPos == nParLen )
{
- String aText = GetEditText(pEngine);
- if (aText.Len())
+ rtl::OUString aText = GetEditText(pEngine);
+ if (!aText.isEmpty())
{
- String aNew;
- nAutoPos = SCPOS_INVALID; // nix
- if ( pColumnData->FindText( aText, aNew, nAutoPos, false ) )
+ rtl::OUString aNew;
+ miAutoPos = pColumnData->end();
+ miAutoPos = findText(*pColumnData, miAutoPos, aText, aNew, false);
+ if (miAutoPos != pColumnData->end())
{
// durch dBase Import etc. koennen Umbrueche im String sein,
// das wuerde hier mehrere Absaetze ergeben -> nicht gut
@@ -1481,12 +1578,12 @@ void ScInputHandler::UseColData() // beim Tippen
//! genaue Ersetzung im EnterHandler !!!
// ein Space zwischen Absaetzen:
- sal_uLong nEdLen = pEngine->GetTextLen() + nParCnt - 1;
- String aIns = aNew.Copy( (xub_StrLen)nEdLen );
+ sal_Int32 nEdLen = pEngine->GetTextLen() + nParCnt - 1;
+ rtl::OUString aIns = aNew.copy(nEdLen);
// selection must be "backwards", so the cursor stays behind the last
// typed character
- ESelection aSelection( aSel.nEndPara, aSel.nEndPos + aIns.Len(),
+ ESelection aSelection( aSel.nEndPara, aSel.nEndPos + aIns.getLength(),
aSel.nEndPara, aSel.nEndPos );
// when editing in input line, apply to both edit views
@@ -1503,17 +1600,18 @@ void ScInputHandler::UseColData() // beim Tippen
aAutoSearch = aText; // zum Weitersuchen - nAutoPos ist gesetzt
- if ( aText.Len() == aNew.Len() )
+ if (aText.getLength() == aNew.getLength())
{
// Wenn der eingegebene Text gefunden wurde, TAB nur dann
// verschlucken, wenn noch etwas kommt
- String aDummy;
- sal_uInt16 nNextPos = nAutoPos;
- bUseTab = pColumnData->FindText( aText, aDummy, nNextPos, false );
+ rtl::OUString aDummy;
+ ScTypedCaseStrSet::const_iterator itNextPos =
+ findText(*pColumnData, miAutoPos, aText, aDummy, false);
+ bUseTab = itNextPos != pColumnData->end();
}
else
- bUseTab = sal_True;
+ bUseTab = true;
}
}
}
@@ -1526,7 +1624,7 @@ void ScInputHandler::NextAutoEntry( sal_Bool bBack )
EditView* pActiveView = pTopView ? pTopView : pTableView;
if ( pActiveView && pColumnData )
{
- if ( nAutoPos != SCPOS_INVALID && aAutoSearch.Len() )
+ if (miAutoPos != pColumnData->end() && !aAutoSearch.isEmpty())
{
// stimmt die Selektion noch? (kann per Maus geaendert sein)
@@ -1535,18 +1633,19 @@ void ScInputHandler::NextAutoEntry( sal_Bool bBack )
sal_uInt16 nParCnt = pEngine->GetParagraphCount();
if ( aSel.nEndPara+1 == nParCnt && aSel.nStartPara == aSel.nEndPara )
{
- String aText = GetEditText(pEngine);
+ rtl::OUString aText = GetEditText(pEngine);
xub_StrLen nSelLen = aSel.nEndPos - aSel.nStartPos;
xub_StrLen nParLen = pEngine->GetTextLen( aSel.nEndPara );
- if ( aSel.nEndPos == nParLen && aText.Len() == aAutoSearch.Len() + nSelLen )
+ if ( aSel.nEndPos == nParLen && aText.getLength() == aAutoSearch.getLength() + nSelLen )
{
- String aNew;
- if ( pColumnData->FindText( aAutoSearch, aNew, nAutoPos, bBack ) )
+ rtl::OUString aNew;
+ miAutoPos = findText(*pColumnData, miAutoPos, aAutoSearch, aNew, bBack);
+ if (miAutoPos != pColumnData->end())
{
- bInOwnChange = sal_True; // disable ModifyHdl (reset below)
+ bInOwnChange = true; // disable ModifyHdl (reset below)
lcl_RemoveLineEnd( aNew );
- String aIns = aNew.Copy( aAutoSearch.Len() );
+ rtl::OUString aIns = aNew.copy(aAutoSearch.getLength());
// when editing in input line, apply to both edit views
if ( pTableView )
@@ -1554,7 +1653,7 @@ void ScInputHandler::NextAutoEntry( sal_Bool bBack )
pTableView->DeleteSelected();
pTableView->InsertText( aIns, false );
pTableView->SetSelection( ESelection(
- aSel.nEndPara, aSel.nStartPos + aIns.Len(),
+ aSel.nEndPara, aSel.nStartPos + aIns.getLength(),
aSel.nEndPara, aSel.nStartPos ) );
}
if ( pTopView )
@@ -1562,7 +1661,7 @@ void ScInputHandler::NextAutoEntry( sal_Bool bBack )
pTopView->DeleteSelected();
pTopView->InsertText( aIns, false );
pTopView->SetSelection( ESelection(
- aSel.nEndPara, aSel.nStartPos + aIns.Len(),
+ aSel.nEndPara, aSel.nStartPos + aIns.getLength(),
aSel.nEndPara, aSel.nStartPos ) );
}
@@ -1968,7 +2067,7 @@ bool ScInputHandler::StartTable( sal_Unicode cTyped, bool bFromCommand, bool bIn
pEngine->SetText(aCurrentText);
aStr = aCurrentText;
bTextValid = false;
- aCurrentText.Erase();
+ aCurrentText = rtl::OUString();
}
else
aStr = GetEditText(pEngine);
@@ -2062,7 +2161,7 @@ IMPL_LINK( ScInputHandler, ModifyHdl, void *, EMPTYARG )
// update input line from ModifyHdl for changes that are not
// wrapped by DataChanging/DataChanged calls (like Drag&Drop)
- String aText;
+ rtl::OUString aText;
if ( pInputWin->IsMultiLineInput() )
aText = ScEditUtil::GetMultilineString(*pEngine);
else
@@ -2114,7 +2213,7 @@ void ScInputHandler::DataChanged( sal_Bool bFromTopNotify )
if (eMode==SC_INPUT_TYPE || eMode==SC_INPUT_TABLE)
{
- String aText;
+ rtl::OUString aText;
if ( pInputWin && pInputWin->IsMultiLineInput() )
aText = ScEditUtil::GetMultilineString(*pEngine);
else
@@ -2404,11 +2503,11 @@ void ScInputHandler::EnterHandler( sal_uInt8 nBlockMode )
sal_Bool bAttrib = false; // Formatierung vorhanden ?
sal_Bool bForget = false; // wegen Gueltigkeit streichen ?
- String aString = GetEditText(pEngine);
+ rtl::OUString aString = GetEditText(pEngine);
EditView* pActiveView = pTopView ? pTopView : pTableView;
- if (bModified && pActiveView && aString.Len() && !lcl_IsNumber(aString))
+ if (bModified && pActiveView && !aString.isEmpty() && !lcl_IsNumber(aString))
{
- if ( pColumnData && nAutoPos != SCPOS_INVALID )
+ if (pColumnData && miAutoPos != pColumnData->end())
{
// #i47125# If AutoInput appended something, do the final AutoCorrect
// with the cursor at the end of the input.
@@ -2609,8 +2708,8 @@ void ScInputHandler::EnterHandler( sal_uInt8 nBlockMode )
else if (bAutoComplete) // Gross-/Kleinschreibung anpassen
{
// Perform case-matching only when the typed text is partial.
- if (pColumnData && aAutoSearch.Len() < aString.Len())
- pColumnData->GetExactMatch(aString);
+ if (pColumnData && aAutoSearch.getLength() < aString.getLength())
+ aString = getExactMatch(*pColumnData, aString);
}
}
@@ -2640,12 +2739,12 @@ void ScInputHandler::EnterHandler( sal_uInt8 nBlockMode )
DeleteRangeFinder();
ResetAutoPar();
- sal_Bool bOldMod = bModified;
+ bool bOldMod = bModified;
bModified = false;
bSelIsRef = false;
eMode = SC_INPUT_NONE;
- StopInputWinEngine( sal_True );
+ StopInputWinEngine(true);
// Text input (through number formats) or ApplySelectionPattern modify
// the cell's attributes, so pLastPattern is no longer valid
@@ -2655,34 +2754,34 @@ void ScInputHandler::EnterHandler( sal_uInt8 nBlockMode )
{
// keine typographische Anfuehrungszeichen in Formeln
- if ( aString.GetChar(0) == '=' )
+ if (aString.getStr()[0] == '=')
{
SvxAutoCorrect* pAuto = SvxAutoCorrCfg::Get().GetAutoCorrect();
if ( pAuto )
{
- sal_Unicode cReplace = pAuto->GetStartDoubleQuote();
- if( !cReplace )
- cReplace = ScGlobal::pLocaleData->getDoubleQuotationMarkStart().GetChar(0);
- if ( cReplace != '"' )
- aString.SearchAndReplaceAll( cReplace, '"' );
-
- cReplace = pAuto->GetEndDoubleQuote();
- if( !cReplace )
- cReplace = ScGlobal::pLocaleData->getDoubleQuotationMarkEnd().GetChar(0);
- if ( cReplace != '"' )
- aString.SearchAndReplaceAll( cReplace, '"' );
-
- cReplace = pAuto->GetStartSingleQuote();
- if( !cReplace )
- cReplace = ScGlobal::pLocaleData->getQuotationMarkStart().GetChar(0);
- if ( cReplace != '\'' )
- aString.SearchAndReplaceAll( cReplace, '\'' );
-
- cReplace = pAuto->GetEndSingleQuote();
- if( !cReplace )
- cReplace = ScGlobal::pLocaleData->getQuotationMarkEnd().GetChar(0);
- if ( cReplace != '\'' )
- aString.SearchAndReplaceAll( cReplace, '\'' );
+ rtl::OUString aReplace(pAuto->GetStartDoubleQuote());
+ if (aReplace.isEmpty())
+ aReplace = ScGlobal::pLocaleData->getDoubleQuotationMarkStart();
+ if (!aReplace.equalsAsciiL("\"", 1))
+ aString = comphelper::string::replace(aString, aReplace, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\"")));
+
+ aReplace = rtl::OUString(pAuto->GetEndDoubleQuote());
+ if (aReplace.isEmpty())
+ aReplace = ScGlobal::pLocaleData->getDoubleQuotationMarkEnd();
+ if (!aReplace.equalsAsciiL("\"", 1))
+ aString = comphelper::string::replace(aString, aReplace, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\"")));
+
+ aReplace = rtl::OUString(pAuto->GetStartSingleQuote());
+ if (aReplace.isEmpty())
+ aReplace = ScGlobal::pLocaleData->getQuotationMarkStart();
+ if (!aReplace.equalsAsciiL("'", 1))
+ aString = comphelper::string::replace(aString, aReplace, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("'")));
+
+ aReplace = rtl::OUString(pAuto->GetEndSingleQuote());
+ if (aReplace.isEmpty())
+ aReplace = ScGlobal::pLocaleData->getQuotationMarkEnd();
+ if (!aReplace.equalsAsciiL("'", 1))
+ aString = comphelper::string::replace(aString, aReplace, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("'")));
}
}
@@ -3021,7 +3120,7 @@ sal_Bool ScInputHandler::KeyInput( const KeyEvent& rKEvt, sal_Bool bStartEdit /*
case KEY_RETURN:
if (bControl && !bShift && ( !bInputLine || ( pInputWin && pInputWin->IsMultiLineInput() ) ) )
bDoEnter = sal_True;
- else if ( nModi == 0 && nTipVisible && pFormulaData && nAutoPos != SCPOS_INVALID )
+ else if (nModi == 0 && nTipVisible && pFormulaData && miAutoPos != pFormulaData->end())
{
PasteFunctionData();
bUsed = sal_True;
@@ -3049,14 +3148,14 @@ sal_Bool ScInputHandler::KeyInput( const KeyEvent& rKEvt, sal_Bool bStartEdit /*
case KEY_TAB:
if (bControl && !bAlt)
{
- if ( pFormulaData && nTipVisible && nAutoPos != SCPOS_INVALID )
+ if (pFormulaData && nTipVisible && miAutoPos != pFormulaData->end())
{
// blaettern
NextFormulaEntry( bShift );
bUsed = true;
}
- else if ( pColumnData && bUseTab && nAutoPos != SCPOS_INVALID )
+ else if (pColumnData && bUseTab && miAutoPos != pColumnData->end())
{
// in den Eintraegen der AutoEingabe blaettern
@@ -3183,7 +3282,10 @@ sal_Bool ScInputHandler::KeyInput( const KeyEvent& rKEvt, sal_Bool bStartEdit /*
if ( bUsed && bAutoComplete )
{
bUseTab = false;
- nAutoPos = SCPOS_INVALID; // do not search further
+ if (pFormulaData)
+ miAutoPos = pFormulaData->end(); // do not search further
+ else if (pColumnData)
+ miAutoPos = pColumnData->end();
KeyFuncType eFunc = rKEvt.GetKeyCode().GetFunction();
if ( nChar && nChar != 8 && nChar != 127 && // no 'backspace', no 'delete'
@@ -3307,7 +3409,11 @@ sal_Bool ScInputHandler::InputCommand( const CommandEvent& rCEvt, sal_Bool bForc
{
// AutoInput after ext text input
- nAutoPos = SCPOS_INVALID;
+ if (pFormulaData)
+ miAutoPos = pFormulaData->end();
+ else if (pColumnData)
+ miAutoPos = pColumnData->end();
+
if (bFormulaMode)
UseFormulaData();
else
@@ -3392,7 +3498,7 @@ void ScInputHandler::NotifyChange( const ScInputHdlState* pState,
const ScAddress& rSPos = pState->GetStartPos();
const ScAddress& rEPos = pState->GetEndPos();
const EditTextObject* pData = pState->GetEditData();
- String aString = pState->GetString();
+ rtl::OUString aString = pState->GetString();
sal_Bool bTxtMod = false;
ScDocShell* pDocSh = pActiveViewSh->GetViewData()->GetDocShell();
ScDocument* pDoc = pDocSh->GetDocument();
@@ -3404,9 +3510,9 @@ void ScInputHandler::NotifyChange( const ScInputHdlState* pState,
else if ( bHadObject )
bTxtMod = sal_True;
else if ( bTextValid )
- bTxtMod = ( aString != aCurrentText );
+ bTxtMod = ( !aString.equals(aCurrentText) );
else
- bTxtMod = ( aString != GetEditText(pEngine) );
+ bTxtMod = ( !aString.equals(GetEditText(pEngine)) );
if ( bTxtMod || bForce )
{
@@ -3419,12 +3525,12 @@ void ScInputHandler::NotifyChange( const ScInputHdlState* pState,
aString = GetEditText(pEngine);
lcl_RemoveTabs(aString);
bTextValid = false;
- aCurrentText.Erase();
+ aCurrentText = rtl::OUString();
}
else
{
aCurrentText = aString;
- bTextValid = sal_True; //! erst nur als String merken
+ bTextValid = true; //! erst nur als String merken
}
if ( pInputWin )
@@ -3621,12 +3727,12 @@ void ScInputHandler::InputChanged( EditView* pView, sal_Bool bFromNotify )
SyncViews( pView );
}
-const String& ScInputHandler::GetEditString()
+const rtl::OUString& ScInputHandler::GetEditString()
{
if (pEngine)
{
aCurrentText = pEngine->GetText(); // immer neu aus Engine
- bTextValid = sal_True;
+ bTextValid = true;
}
return aCurrentText;
diff --git a/sc/source/ui/dbgui/filtdlg.cxx b/sc/source/ui/dbgui/filtdlg.cxx
index 2bb76ea..8cfa898 100644
--- a/sc/source/ui/dbgui/filtdlg.cxx
+++ b/sc/source/ui/dbgui/filtdlg.cxx
@@ -67,7 +67,6 @@ using ::rtl::OUStringBuffer;
#define INVALID_HEADER_POS std::numeric_limits<size_t>::max()
ScFilterDlg::EntryList::EntryList() :
- maList(128, 128),
mnHeaderPos(INVALID_HEADER_POS) {}
ScFilterDlg::ScFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
@@ -500,11 +499,10 @@ void ScFilterDlg::FillFieldLists()
}
}
-
-//----------------------------------------------------------------------------
-
void ScFilterDlg::UpdateValueList( size_t nList )
{
+ bool bCaseSens = aBtnCase.IsChecked();
+
if (pDoc && nList > 0 && nList <= QUERY_ENTRY_COUNT)
{
ComboBox* pValList = maValueEdArr[nList-1];
@@ -541,44 +539,51 @@ void ScFilterDlg::UpdateValueList( size_t nList )
return;
pList = r.first->second;
- pList->maList.SetCaseSensitive(aBtnCase.IsChecked());
- pDoc->GetFilterEntriesArea( nColumn, nFirstRow+1, nLastRow,
- nTab, pList->maList, maHasDates[nOffset+nList-1] );
+ pDoc->GetFilterEntriesArea(
+ nColumn, nFirstRow+1, nLastRow,
+ nTab, bCaseSens, pList->maList, maHasDates[nOffset+nList-1] );
// Entry for the first line
//! Entry (pHdrEntry) doesn't generate collection?
pList->mnHeaderPos = INVALID_HEADER_POS;
- TypedScStrCollection aHdrColl( 1, 1 );
+ std::vector<TypedStrData> aHdrColl;
bool bDummy = false;
- pDoc->GetFilterEntriesArea( nColumn, nFirstRow, nFirstRow,
- nTab, aHdrColl, bDummy );
- TypedStrData* pHdrEntry = aHdrColl[0];
- if ( pHdrEntry )
+ pDoc->GetFilterEntriesArea(
+ nColumn, nFirstRow, nFirstRow, nTab, true, aHdrColl, bDummy );
+ if (!aHdrColl.empty())
{
- TypedStrData* pNewEntry = new TypedStrData(*pHdrEntry);
- if ( pList->maList.Insert(pNewEntry) )
+ // See if the header value is already in the list.
+ std::vector<TypedStrData>::iterator itBeg = pList->maList.begin(), itEnd = pList->maList.end();
+ std::vector<TypedStrData>::iterator it = std::find_if(
+ itBeg, itEnd, FindTypedStrData(aHdrColl.front(), bCaseSens));
+ if (it == itEnd)
{
- pList->mnHeaderPos = pList->maList.IndexOf(pNewEntry);
- OSL_ENSURE( pList->mnHeaderPos != INVALID_HEADER_POS,
- "Header-Eintrag nicht wiedergefunden" );
+ // Not in the list. Insert it.
+ pList->maList.push_back(aHdrColl.front());
+ if (bCaseSens)
+ std::sort(pList->maList.begin(), pList->maList.end(), TypedStrData::LessCaseSensitive());
+ else
+ std::sort(pList->maList.begin(), pList->maList.end(), TypedStrData::LessCaseInsensitive());
+
+ // Record its position.
+ itBeg = pList->maList.begin();
+ itEnd = pList->maList.end();
+ it = std::find_if(itBeg, itEnd, FindTypedStrData(aHdrColl.front(), bCaseSens));
+ pList->mnHeaderPos = std::distance(itBeg, it);
}
- else
- delete pNewEntry; // was already there
}
}
else
pList = &maEntryLists[nColumn];
OSL_ASSERT(pList);
- sal_uInt16 nValueCount = pList->maList.GetCount();
- if ( nValueCount > 0 )
+
+ std::vector<TypedStrData>::const_iterator it = pList->maList.begin(), itEnd = pList->maList.end();
+ for (; it != itEnd; ++it)
{
- for ( sal_uInt16 i=0; i<nValueCount; i++ )
- {
- pValList->InsertEntry(pList->maList[i]->GetString(), nListPos);
- nListPos++;
- }
+ pValList->InsertEntry(it->GetString(), nListPos);
+ nListPos++;
}
}
pValList->SetText( aCurValue );
@@ -616,14 +621,9 @@ void ScFilterDlg::UpdateHdrInValueList( size_t nList )
ComboBox* pValList = maValueEdArr[nList-1];
size_t nListPos = nPos + 2; // for "empty" and "non-empty"
- TypedStrData* pHdrEntry = maEntryLists[nColumn].maList[nPos];
- if (!pHdrEntry)
- {
- OSL_FAIL("Eintag in Liste nicht gefunden");
- return;
- }
+ const TypedStrData& rHdrEntry = maEntryLists[nColumn].maList[nPos];
- rtl::OUString aHdrStr = pHdrEntry->GetString();
+ const rtl::OUString& aHdrStr = rHdrEntry.GetString();
bool bWasThere = aHdrStr.equals(pValList->GetEntry(nListPos));
bool bInclude = !aBtnHeader.IsChecked();
diff --git a/sc/source/ui/dbgui/pfiltdlg.cxx b/sc/source/ui/dbgui/pfiltdlg.cxx
index 14f1cf2..fdfc7f2 100644
--- a/sc/source/ui/dbgui/pfiltdlg.cxx
+++ b/sc/source/ui/dbgui/pfiltdlg.cxx
@@ -346,22 +346,18 @@ void ScPivotFilterDlg::UpdateValueList( sal_uInt16 nList )
SCROW nLastRow = theQueryData.nRow2;
nFirstRow++;
bool bHasDates = false;
-
- pEntryLists[nColumn] = new TypedScStrCollection( 128, 128 );
- pEntryLists[nColumn]->SetCaseSensitive( aBtnCase.IsChecked() );
- pDoc->GetFilterEntriesArea( nColumn, nFirstRow, nLastRow,
- nTab, *pEntryLists[nColumn], bHasDates );
+ bool bCaseSens = aBtnCase.IsChecked();
+ pEntryLists[nColumn] = new std::vector<TypedStrData>;
+ pDoc->GetFilterEntriesArea(
+ nColumn, nFirstRow, nLastRow, nTab, bCaseSens, *pEntryLists[nColumn], bHasDates);
}
- TypedScStrCollection* pColl = pEntryLists[nColumn];
- sal_uInt16 nValueCount = pColl->GetCount();
- if ( nValueCount > 0 )
+ std::vector<TypedStrData>* pColl = pEntryLists[nColumn];
+ std::vector<TypedStrData>::const_iterator it = pColl->begin(), itEnd = pColl->end();
+ for (; it != itEnd; ++it)
{
- for ( sal_uInt16 i=0; i<nValueCount; i++ )
- {
- pValList->InsertEntry( (*pColl)[i]->GetString(), nListPos );
- nListPos++;
- }
+ pValList->InsertEntry(it->GetString(), nListPos);
+ nListPos++;
}
}
pValList->SetText( aCurValue );
diff --git a/sc/source/ui/formdlg/dwfunctr.cxx b/sc/source/ui/formdlg/dwfunctr.cxx
index 45ec35a..357bdc0 100644
--- a/sc/source/ui/formdlg/dwfunctr.cxx
+++ b/sc/source/ui/formdlg/dwfunctr.cxx
@@ -899,7 +899,7 @@ void ScFunctionDockWin::DoEnter(sal_Bool /* bOk */) //@@ ???
}
if (pHdl)
{
- if(pHdl->GetEditString().Len()==0)
+ if (pHdl->GetEditString().isEmpty())
{
aString = '=';
aString += pAllFuncList->GetSelectEntry();
diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx
index e62ca41..71dcee4 100644
--- a/sc/source/ui/inc/filtdlg.hxx
+++ b/sc/source/ui/inc/filtdlg.hxx
@@ -44,6 +44,7 @@
#include <map>
#include <boost/ptr_container/ptr_map.hpp>
#include <boost/noncopyable.hpp>
+#include <boost/scoped_ptr.hpp>
//----------------------------------------------------------------------------
@@ -57,7 +58,7 @@ class ScFilterDlg : public ScAnyRefDlg
{
struct EntryList : boost::noncopyable
{
- TypedScStrCollection maList;
+ std::vector<TypedStrData> maList;
size_t mnHeaderPos;
EntryList();
};
diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx
index 76c4dac..e27891a 100644
--- a/sc/source/ui/inc/inputhdl.hxx
+++ b/sc/source/ui/inc/inputhdl.hxx
@@ -31,10 +31,14 @@
#include "global.hxx"
#include "address.hxx"
+#include "types.hxx"
+
#include <tools/fract.hxx>
#include <tools/gen.hxx>
#include <editeng/svxenum.hxx>
+#include <set>
+
class ScDocument;
class ScTabView;
class ScTabViewShell;
@@ -45,7 +49,7 @@ class ScEditEngineDefaulter;
class EditView;
class EditTextObject;
class ScInputHdlState;
-class TypedScStrCollection;
+class TypedStrData;
class ScRangeFindList;
class Timer;
class KeyEvent;
@@ -66,20 +70,21 @@ private:
EditView* pTableView; // aktive EditView dazu
EditView* pTopView; // EditView in der Eingabezeile
- TypedScStrCollection* pColumnData;
- TypedScStrCollection* pFormulaData;
- TypedScStrCollection* pFormulaDataPara;
+ ScTypedCaseStrSet* pColumnData;
+ ScTypedCaseStrSet* pFormulaData;
+ ScTypedCaseStrSet* pFormulaDataPara;
+ ScTypedCaseStrSet::const_iterator miAutoPos;
+
Window* pTipVisibleParent;
sal_uLong nTipVisible;
Window* pTipVisibleSecParent;
sal_uLong nTipVisibleSec;
String aManualTip;
- String aAutoSearch;
- sal_uInt16 nAutoPos;
+ rtl::OUString aAutoSearch;
sal_Bool bUseTab; // Blaettern moeglich
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list