diff options
Diffstat (limited to 'sc/source/ui/namedlg/namedlg.cxx')
-rw-r--r-- | sc/source/ui/namedlg/namedlg.cxx | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/sc/source/ui/namedlg/namedlg.cxx b/sc/source/ui/namedlg/namedlg.cxx index 19eb1694a2dd..93456b551433 100644 --- a/sc/source/ui/namedlg/namedlg.cxx +++ b/sc/source/ui/namedlg/namedlg.cxx @@ -42,6 +42,7 @@ #include "namedlg.hrc" #include "namedlg.hxx" #include "viewdata.hxx" +#include "tabvwsh.hxx" #include "globalnames.hxx" @@ -68,7 +69,7 @@ ScNameDlg::ScNameDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent, ScViewData* ptrViewData, - const ScAddress& aCursorPos ) + const ScAddress& aCursorPos, boost::ptr_map<rtl::OUString, ScRangeName>* pRangeMap ) : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_NAMES ), // @@ -107,8 +108,24 @@ ScNameDlg::ScNameDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent, mpDoc ( ptrViewData->GetDocument() ), maCursorPos ( aCursorPos ), mbNeedUpdate ( true ), - mbDataChanged ( false ) + mbDataChanged ( false ), + mbCloseWithoutUndo( false ) { + if (!pRangeMap) + { + std::map<rtl::OUString, ScRangeName*> aRangeMap; + mpDoc->GetRangeNameMap(aRangeMap); + std::map<rtl::OUString, ScRangeName*>::iterator itr = aRangeMap.begin(), itrEnd = aRangeMap.end(); + for (; itr != itrEnd; ++itr) + { + rtl::OUString aTemp(itr->first); + maRangeMap.insert(aTemp, new ScRangeName(*itr->second)); + } + } + else + { + maRangeMap.swap(*pRangeMap); + } Init(); FreeResource(); } @@ -125,14 +142,7 @@ void ScNameDlg::Init() OSL_ENSURE( mpViewData && mpDoc, "ViewData oder Document nicht gefunden!" ); //init UI - std::map<rtl::OUString, ScRangeName*> aRangeMap; - mpDoc->GetRangeNameMap(aRangeMap); - std::map<rtl::OUString, ScRangeName*>::iterator itr = aRangeMap.begin(), itrEnd = aRangeMap.end(); - for (; itr != itrEnd; ++itr) - { - rtl::OUString aTemp(itr->first); - maRangeMap.insert(aTemp, new ScRangeName(*itr->second)); - } + mpRangeManagerTable = new ScRangeManagerTable(&maNameMgrCtrl, maRangeMap); mpRangeManagerTable->SetSelectHdl( LINK( this, ScNameDlg, SelectionChangedHdl_Impl ) ); @@ -178,7 +188,7 @@ void ScNameDlg::Init() CheckForEmptyTable(); //TODO: fix the Add Button - maBtnAdd.Disable(); + //maBtnAdd.Disable(); } sal_Bool ScNameDlg::IsRefInputMode() const @@ -207,7 +217,7 @@ void ScNameDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) sal_Bool ScNameDlg::Close() { - if (mbDataChanged) + if (mbDataChanged && !mbCloseWithoutUndo) { ScDocFunc aFunc(*mpViewData->GetDocShell()); aFunc.ModifyAllRangeNames(maRangeMap); @@ -345,9 +355,18 @@ void ScNameDlg::ShowOptions(const ScRangeNameLine& rLine) bool ScNameDlg::AddPushed() { + mbCloseWithoutUndo = true; + ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell(); + pViewSh->SwitchBetweenRefDialogs(this); return false; } +void ScNameDlg::SetEntry(const rtl::OUString& rName, const rtl::OUString& rScope) +{ + if (!rName.isEmpty()) + mbDataChanged = true; +} + void ScNameDlg::RemovePushed() { std::vector<ScRangeNameLine> maEntries = mpRangeManagerTable->GetSelectedEntries(); @@ -511,6 +530,11 @@ void ScNameDlg::MorePushed() MoveWindow(maFlDiv, nPixel); } +void ScNameDlg::GetRangeNames(boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap) +{ + maRangeMap.swap(rRangeMap); +} + IMPL_LINK( ScNameDlg, OkBtnHdl, void *, EMPTYARG ) { Close(); |