sc/source/ui/inc/namemgrtable.hxx | 13 +++++++- sc/source/ui/namedlg/namemgrtable.cxx | 54 ++++++++++++++++++++++++++++++---- sc/source/ui/src/namedefdlg.src | 2 - sw/qa/core/macros-test.cxx | 34 +++------------------ 4 files changed, 67 insertions(+), 36 deletions(-)
New commits: commit 792fb5b96f1008804ab51dc0ebf4f07a07ad9537 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Tue Nov 29 10:39:01 2011 +0100 ManageNames: only calculate formula for visible range names diff --git a/sc/source/ui/inc/namemgrtable.hxx b/sc/source/ui/inc/namemgrtable.hxx index b95002e..bbbcab6 100644 --- a/sc/source/ui/inc/namemgrtable.hxx +++ b/sc/source/ui/inc/namemgrtable.hxx @@ -36,6 +36,7 @@ #include <boost/ptr_container/ptr_map.hpp> class ScRangeName; +class ScRangeData; struct ScRangeNameLine { @@ -64,8 +65,17 @@ private: HeaderBar maHeaderBar; rtl::OUString maGlobalString; + // should be const because we should not modify it here + const boost::ptr_map<rtl::OUString, ScRangeName>& mrRangeMap; + // for performance, save which entries already have the formula entry + // otherwise opening the dialog with a lot of range names is extremelly slow because + // we would calculate all formula strings during opening + std::map<SvLBoxEntry*, bool> maCalculatedFormulaEntries; + void GetLine(ScRangeNameLine& aLine, SvLBoxEntry* pEntry); - void Init( const boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap ); + void Init(); + void CheckForFormulaString(); + const ScRangeData* findRangeData(const ScRangeNameLine& rLine); public: ScRangeManagerTable( Window* pParent, boost::ptr_map<rtl::OUString, ScRangeName>& aTabRangeNames ); @@ -78,6 +88,7 @@ public: bool IsMultiSelection(); std::vector<ScRangeNameLine> GetSelectedEntries(); + DECL_LINK( ScrollHdl, void*); DECL_LINK( HeaderEndDragHdl, void*); }; diff --git a/sc/source/ui/namedlg/namemgrtable.cxx b/sc/source/ui/namedlg/namemgrtable.cxx index d471c74..de9e386 100644 --- a/sc/source/ui/namedlg/namemgrtable.cxx +++ b/sc/source/ui/namedlg/namemgrtable.cxx @@ -60,7 +60,8 @@ String createEntryString(const ScRangeNameLine& rLine) ScRangeManagerTable::ScRangeManagerTable( Window* pWindow, boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap ): SvTabListBox( pWindow, WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP ), maHeaderBar( pWindow, WB_BUTTONSTYLE | WB_BOTTOMBORDER ), - maGlobalString( ScGlobal::GetRscString(STR_GLOBAL_SCOPE)) + maGlobalString( ScGlobal::GetRscString(STR_GLOBAL_SCOPE)), + mrRangeMap( rRangeMap ) { Size aBoxSize( pWindow->GetOutputSizePixel() ); @@ -84,12 +85,16 @@ ScRangeManagerTable::ScRangeManagerTable( Window* pWindow, boost::ptr_map<rtl::O maHeaderBar.SetEndDragHdl( LINK( this, ScRangeManagerTable, HeaderEndDragHdl ) ); + Init(); Show(); maHeaderBar.Show(); SetSelectionMode(MULTIPLE_SELECTION); - Init(rRangeMap); if (GetEntryCount()) + { SetCurEntry(GetEntryOnPos(0)); + CheckForFormulaString(); + } + SetScrolledHdl( LINK( this, ScRangeManagerTable, ScrollHdl ) ); } ScRangeManagerTable::~ScRangeManagerTable() @@ -116,11 +121,11 @@ void ScRangeManagerTable::GetLine(ScRangeNameLine& rLine, SvLBoxEntry* pEntry) rLine.aScope = GetEntryText(pEntry, 2); } -void ScRangeManagerTable::Init(const boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap) +void ScRangeManagerTable::Init() { Clear(); - for (boost::ptr_map<rtl::OUString, ScRangeName>::const_iterator itr = rRangeMap.begin(); - itr != rRangeMap.end(); ++itr) + for (boost::ptr_map<rtl::OUString, ScRangeName>::const_iterator itr = mrRangeMap.begin(); + itr != mrRangeMap.end(); ++itr) { const ScRangeName* pLocalRangeName = itr->second; ScRangeNameLine aLine; @@ -134,13 +139,44 @@ void ScRangeManagerTable::Init(const boost::ptr_map<rtl::OUString, ScRangeName>& if (!it->second->HasType(RT_DATABASE) && !it->second->HasType(RT_SHARED)) { aLine.aName = it->second->GetName(); - it->second->GetSymbol(aLine.aExpression); addEntry(aLine); } } } } +const ScRangeData* ScRangeManagerTable::findRangeData(const ScRangeNameLine& rLine) +{ + const ScRangeName* pRangeName; + if (rLine.aScope == maGlobalString) + pRangeName = mrRangeMap.find(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_GLOBAL_RANGE_NAME)))->second; + else + pRangeName = mrRangeMap.find(rLine.aScope)->second; + + return pRangeName->findByUpperName(ScGlobal::pCharClass->upper(rLine.aName)); +} + + + +void ScRangeManagerTable::CheckForFormulaString() +{ + for (SvLBoxEntry* pEntry = GetFirstEntryInView(); pEntry ; pEntry = GetNextEntryInView(pEntry)) + { + std::map<SvLBoxEntry*, bool>::const_iterator itr = maCalculatedFormulaEntries.find(pEntry); + if (itr == maCalculatedFormulaEntries.end() || itr->second == false) + { + ScRangeNameLine aLine; + GetLine( aLine, pEntry); + const ScRangeData* pData = findRangeData( aLine ); + rtl::OUString aFormulaString; + pData->GetSymbol(aFormulaString); + SetEntryText(aFormulaString, pEntry, 1); + maCalculatedFormulaEntries.insert( std::pair<SvLBoxEntry*, bool>(pEntry, true) ); + } + + } +} + void ScRangeManagerTable::DeleteSelectedEntries() { if (GetSelectionCount()) @@ -237,5 +273,11 @@ IMPL_LINK( ScRangeManagerTable, HeaderEndDragHdl, void*, EMPTYARG) return 0; } +IMPL_LINK( ScRangeManagerTable, ScrollHdl, void*, EMPTYARG) +{ + CheckForFormulaString(); + return 0; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit c21b1126b1d72ea9ada5304109964d31a6159507 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Mon Nov 28 16:05:21 2011 +0100 fix typo RangeOptions->Range Options diff --git a/sc/source/ui/src/namedefdlg.src b/sc/source/ui/src/namedefdlg.src index 1896918..4181015 100644 --- a/sc/source/ui/src/namedefdlg.src +++ b/sc/source/ui/src/namedefdlg.src @@ -56,7 +56,7 @@ ModelessDialog RID_SCDLG_NAMES_DEFINE { Pos = MAP_APPFONT( 5, 82 ); Size = MAP_APPFONT( 60, 15 ); - Text [en-US] = "RangeOptions"; + Text [en-US] = "Range Options"; }; FixedText FT_INFO { commit 5881881e592c42929f1d32f17f06538dfda040e2 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sun Nov 27 13:47:35 2011 +0100 make sw's macros_test use the new base class diff --git a/sw/qa/core/macros-test.cxx b/sw/qa/core/macros-test.cxx index d4ddbca..bac6ac9 100644 --- a/sw/qa/core/macros-test.cxx +++ b/sw/qa/core/macros-test.cxx @@ -29,7 +29,7 @@ */ #include <sal/config.h> -#include <unotest/filters-test.hxx> +#include <unotest/macros_test.hxx> #include <test/bootstrapfixture.hxx> #include <rtl/strbuf.hxx> #include <osl/file.hxx> @@ -58,14 +58,13 @@ using namespace ::com::sun::star::uno; /* Implementation of Macros test */ -class SwMacrosTest : public test::BootstrapFixture +class SwMacrosTest : public test::BootstrapFixture, public unotest::MacrosTest { public: SwMacrosTest(); SwDocShellRef load(const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData, const rtl::OUString& rTypeName, sal_uLong nFormatType=0); - uno::Reference< com::sun::star::lang::XComponent > loadFromDesktop(const rtl::OUString& rURL); void createFileURL(const rtl::OUString& aFileBase, const rtl::OUString& aFileExtension, rtl::OUString& rFilePath); @@ -85,26 +84,10 @@ public: CPPUNIT_TEST_SUITE_END(); private: - uno::Reference<uno::XInterface> m_xCalcComponent; - uno::Reference<frame::XDesktop> mxDesktop; + uno::Reference<uno::XInterface> m_xWriterComponent; ::rtl::OUString m_aBaseString; }; -uno::Reference< com::sun::star::lang::XComponent > SwMacrosTest::loadFromDesktop(const rtl::OUString& rURL) -{ - uno::Reference< com::sun::star::frame::XComponentLoader> xLoader = uno::Reference< com::sun::star::frame::XComponentLoader >( mxDesktop, UNO_QUERY ); - com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > args(1); - args[0].Name = rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("MacroExecutionMode")); - args[0].Handle = -1; - args[0].Value <<= - com::sun::star::document::MacroExecMode::ALWAYS_EXECUTE_NO_WARN; - args[0].State = com::sun::star::beans::PropertyState_DIRECT_VALUE; - uno::Reference< com::sun::star::lang::XComponent> xComponent= xLoader->loadComponentFromURL(rURL, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_default")), 0, args); - CPPUNIT_ASSERT_MESSAGE("loading failed", xComponent.is()); - return xComponent; -} - void SwMacrosTest::createFileURL(const rtl::OUString& aFileBase, const rtl::OUString& aFileExtension, rtl::OUString& rFilePath) { rtl::OUString aSep(RTL_CONSTASCII_USTRINGPARAM("/")); @@ -143,11 +126,6 @@ void SwMacrosTest::testStarBasic() #endif -struct TestMacroInfo -{ - rtl::OUString sFileBaseName; - rtl::OUString sMacroUrl; -}; void SwMacrosTest::testVba() { TestMacroInfo testInfo[] = { @@ -195,10 +173,10 @@ void SwMacrosTest::setUp() // This is a bit of a fudge, we do this to ensure that SwGlobals::ensure, // which is a private symbol to us, gets called - m_xCalcComponent = + m_xWriterComponent = getMultiServiceFactory()->createInstance(rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Writer.TextDocument"))); - CPPUNIT_ASSERT_MESSAGE("no calc component!", m_xCalcComponent.is()); + CPPUNIT_ASSERT_MESSAGE("no calc component!", m_xWriterComponent.is()); mxDesktop = Reference<com::sun::star::frame::XDesktop>( getMultiServiceFactory()->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY ); CPPUNIT_ASSERT_MESSAGE("", mxDesktop.is()); @@ -206,7 +184,7 @@ void SwMacrosTest::setUp() void SwMacrosTest::tearDown() { - uno::Reference< lang::XComponent >( m_xCalcComponent, UNO_QUERY_THROW )->dispose(); + uno::Reference< lang::XComponent >( m_xWriterComponent, UNO_QUERY_THROW )->dispose(); test::BootstrapFixture::tearDown(); } _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits