From a626e249033fb9a7ac117e28f3152cedf98b61fc Mon Sep 17 00:00:00 2001 From: Gulsah Kose Date: Tue, 16 Jan 2018 01:30:04 +0300 Subject: [Pardus] tdf#108989 Add contextual manage names command. If cursor in a named range .uno:DefineCurrentName command appears on context menu. Opens manage names dialog. This patch is sponsored by ULAKBIM/Pardus project. Change-Id: I730fd427fa3d6f5c92563282ff8ca3c0e668eddd Signed-off-by: Gulsah Kose Reviewed-on: https://gerrit.libreoffice.org/47925 Tested-by: Jenkins --- .../data/org/openoffice/Office/UI/CalcCommands.xcu | 5 +++++ sc/inc/document.hxx | 7 ++++++ sc/inc/sc.hrc | 3 ++- sc/sdi/cellsh.sdi | 1 + sc/sdi/scalc.sdi | 18 +++++++++++++++ sc/source/core/data/documen3.cxx | 26 ++++++++++++++++++++++ sc/source/ui/view/cellsh.cxx | 13 +++++++++++ sc/source/ui/view/cellsh1.cxx | 1 + sc/uiconfig/scalc/popupmenu/cell.xml | 1 + 9 files changed, 74 insertions(+), 1 deletion(-) diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu index f87cc3f47f35..979f4a176698 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu @@ -1289,6 +1289,11 @@ 1 + + + ~Manage Names... + + ~Insert Named Range or Expression... diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index c1c628fb451f..10b2bd45213f 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -252,6 +252,12 @@ enum CommentCaptionState MIXED // There are comments in shown and hidden. }; +enum RangeNameScope +{ + GLOBAL, // A range name can be defined + SHEET // with two scope on Manage Names dialog. +}; + struct ScDocStat { OUString aDocName; @@ -606,6 +612,7 @@ public: SC_DLLPUBLIC ScRangeName* GetRangeName() const; void SetRangeName(SCTAB nTab, ScRangeName* pNew); void SetRangeName( ScRangeName* pNewRangeName ); + bool IsAddressInRangeName( RangeNameScope eScope, ScAddress& rAddress); /** Find a named expression / range name in either global or a local scope. @param nTab diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc index b20f0680711f..5c75ae6c8c45 100644 --- a/sc/inc/sc.hrc +++ b/sc/inc/sc.hrc @@ -301,7 +301,8 @@ #define FID_INS_COLUMNS_AFTER (INSERT_MENU_START + 21) #define FID_INS_ROWS_BEFORE (INSERT_MENU_START + 22) #define FID_INS_COLUMNS_BEFORE (INSERT_MENU_START + 23) -#define INSERT_MENU_END (INSERT_MENU_START + 24) +#define FID_DEFINE_CURRENT_NAME (INSERT_MENU_START + 24) +#define INSERT_MENU_END (INSERT_MENU_START + 25) #define FORMAT_MENU_START (INSERT_MENU_END) #define FID_CELL_FORMAT (FORMAT_MENU_START) diff --git a/sc/sdi/cellsh.sdi b/sc/sdi/cellsh.sdi index b21769d8d258..4fc0a44f1da0 100644 --- a/sc/sdi/cellsh.sdi +++ b/sc/sdi/cellsh.sdi @@ -21,6 +21,7 @@ interface CellSelection { // slots which are disabled in the DrawShell { FID_DEFINE_NAME [ ExecMethod = ExecuteEdit; StateMethod = GetState; ] + FID_DEFINE_CURRENT_NAME [ ExecMethod = ExecuteEdit; StateMethod = GetState; ] FID_ADD_NAME [ ExecMethod = ExecuteEdit; StateMethod = GetState; ] SID_DEFINE_COLROWNAMERANGES [ ExecMethod = ExecuteEdit; StateMethod = GetState; ] SID_OPENDLG_SOLVE [ ExecMethod = Execute; StateMethod = GetState; ] diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi index 956bacaae8e3..0925e0483865 100644 --- a/sc/sdi/scalc.sdi +++ b/sc/sdi/scalc.sdi @@ -1184,6 +1184,24 @@ SfxVoidItem DefineName FID_DEFINE_NAME ] +SfxVoidItem DefineCurrentName FID_DEFINE_CURRENT_NAME +(SfxStringItem Name FID_DEFINE_CURRENT_NAME,SfxStringItem Symbol FN_PARAM_1,SfxStringItem Options FN_PARAM_2) +[ + AutoUpdate = FALSE, + FastCall = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = TRUE, + MenuConfig = TRUE, + ToolBoxConfig = TRUE, + GroupId = SfxGroupId::Insert; +] + + SfxVoidItem DefinePrintArea SID_DEFINE_PRINTAREA () [ diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index a018a065b1d2..f7f8687ca4b2 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -208,6 +208,32 @@ void ScDocument::SetRangeName( ScRangeName* pNewRangeName ) pRangeName = pNewRangeName; } +bool ScDocument::IsAddressInRangeName( RangeNameScope eScope, ScAddress& rAddress ) +{ + ScRangeName* pRangeNames; + ScRange aNameRange; + bool bRet = false; + + if (eScope == RangeNameScope::GLOBAL) + pRangeNames= GetRangeName(); + else + pRangeNames= GetRangeName(rAddress.Tab()); + + ScRangeName::iterator itrBegin = pRangeNames->begin(), itrEnd = pRangeNames->end(); + + for (ScRangeName::iterator itr = itrBegin; itr != itrEnd; ++itr) + { + itr->second->IsValidReference(aNameRange); + bRet = aNameRange.In(rAddress); + if (!bRet) + continue; + else + break; + } + + return bRet; +} + bool ScDocument::InsertNewRangeName( const OUString& rName, const ScAddress& rPos, const OUString& rExpr ) { ScRangeName* pGlobalNames = GetRangeName(); diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx index 7157d112f766..cae223dd5cde 100644 --- a/sc/source/ui/view/cellsh.cxx +++ b/sc/source/ui/view/cellsh.cxx @@ -1185,6 +1185,19 @@ void ScCellShell::GetState(SfxItemSet &rSet) } break; + case FID_DEFINE_CURRENT_NAME: + { + ScAddress aCurrentAddress = ScAddress( nPosX, nPosY, nTab ); + + if ( pDoc && + !pDoc->IsAddressInRangeName( RangeNameScope::GLOBAL, aCurrentAddress ) && + !pDoc->IsAddressInRangeName( RangeNameScope::SHEET, aCurrentAddress )) + { + rSet.DisableItem( nWhich ); + } + } + break; + case SID_SPELL_DIALOG: { if ( pDoc && pData && pDoc->IsTabProtected( pData->GetTabNo() ) ) diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index 4f075c981999..9a1e7dc8a3cf 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -1883,6 +1883,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) break; case FID_DEFINE_NAME: + case FID_DEFINE_CURRENT_NAME: if ( pReqArgs ) { const SfxPoolItem* pItem; diff --git a/sc/uiconfig/scalc/popupmenu/cell.xml b/sc/uiconfig/scalc/popupmenu/cell.xml index fada79e703ce..17e9a67994ab 100644 --- a/sc/uiconfig/scalc/popupmenu/cell.xml +++ b/sc/uiconfig/scalc/popupmenu/cell.xml @@ -40,4 +40,5 @@ + -- cgit v1.2.3