sw/inc/strings.hrc | 7 + sw/source/uibase/utlui/content.cxx | 136 ++++++++++++++++++++++--------------- 2 files changed, 90 insertions(+), 53 deletions(-)
New commits: commit 062309078740e2d3ce2d6257d93055dce57a485b Author: Jim Raykowski <[email protected]> AuthorDate: Sun Jan 19 00:04:04 2020 -0900 Commit: Jim Raykowski <[email protected]> CommitDate: Mon Jan 20 12:18:11 2020 +0100 tdf#128814 Make Writer Navigator context menus content specific Remove content type submenus and place submenu items in root menu Display Outline Level in Outline context menu only. Add Delete/Promote/Demote Chapter and Promote/Demote Level to Outline context menu. Add Rename... to Drawing Objects context menu. Change-Id: I39327d0ed02ab1ee88361e2d6a140ad118e069d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87053 Reviewed-by: Heiko Tietze <[email protected]> Tested-by: Heiko Tietze <[email protected]> diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index 13bb0760b394..561014a460a2 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -640,6 +640,11 @@ #define STR_OUTLINE_LEVEL NC_("STR_OUTLINE_LEVEL", "Outline Level") #define STR_DRAGMODE NC_("STR_DRAGMODE", "Drag Mode") #define STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY NC_("STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY", "Send Outline to Clipboard") +#define STR_DELETE_CHAPTER NC_("STR_DELETE_CHAPTER", "Delete Chapter") +#define STR_DEMOTE_CHAPTER NC_("STR_DEMOTE_CHAPTER", "Demote Chapter") +#define STR_PROMOTE_CHAPTER NC_("STR_PROMOTE_CHAPTER", "Promote Chapter") +#define STR_DEMOTE_LEVEL NC_("STR_DEMOTE_LEVEL", "Demote Level") +#define STR_PROMOTE_LEVEL NC_("STR_PROMOTE_LEVEL", "Promote Level") #define STR_EXPANDALL NC_("STR_EXPANDALL", "Expand All") #define STR_COLLAPSEALL NC_("STR_COLLAPSEALL", "Collapse All") #define STR_HYPERLINK NC_("STR_HYPERLINK", "Insert as Hyperlink") @@ -669,7 +674,7 @@ #define STR_REMOVE_TBL_PROTECTION NC_("STR_REMOVE_TBL_PROTECTION", "~Unprotect") #define STR_INVISIBLE NC_("STR_INVISIBLE", "hidden") #define STR_BROKEN_LINK NC_("STR_BROKEN_LINK", "File not found: ") -#define STR_RENAME NC_("STR_RENAME", "~Rename") +#define STR_RENAME NC_("STR_RENAME", "~Rename...") #define STR_READONLY_IDX NC_("STR_READONLY_IDX", "Read-~only") #define STR_POSTIT_SHOW NC_("STR_POSTIT_SHOW", "Show All") #define STR_POSTIT_HIDE NC_("STR_POSTIT_HIDE", "Hide All") diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index 38710bab0dc8..21c3d1e6ff07 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -298,7 +298,6 @@ void SwContentType::Init(bool* pbInvalidateWindow) } } } - m_bDelete = false; } break; @@ -466,6 +465,7 @@ void SwContentType::Init(bool* pbInvalidateWindow) case ContentTypeId::DRAWOBJECT: { m_sTypeToken.clear(); + m_bEdit = true; m_nMemberCount = 0; SwDrawModel* pModel = m_pWrtShell->getIDocumentDrawModelAccess().GetDrawModel(); if(pModel) @@ -1217,12 +1217,12 @@ static void lcl_InsertExpandCollapseAllItem(SwContentTree* pContentTree, SvTreeL VclPtr<PopupMenu> SwContentTree::CreateContextMenu() { + bool bOutline(false); + auto pPop = VclPtr<PopupMenu>::Create(); VclPtrInstance<PopupMenu> pSubPop1; VclPtrInstance<PopupMenu> pSubPop2; VclPtrInstance<PopupMenu> pSubPop3; - VclPtrInstance<PopupMenu> pSubPop4; // Edit - bool bSubPop4 = false; for(int i = 1; i <= MAXLEVEL; ++i) { @@ -1269,10 +1269,6 @@ VclPtr<PopupMenu> SwContentTree::CreateContextMenu() else if (State::HIDDEN == m_eState) pSubPop3->CheckItem( nId ); - pPop->InsertItem( 1, m_aContextStrings[IDX_STR_OUTLINE_LEVEL]); - pPop->InsertItem(2, m_aContextStrings[IDX_STR_DRAGMODE]); - pPop->InsertItem(3, m_aContextStrings[IDX_STR_DISPLAY]); - // Now edit SvTreeListEntry* pEntry = nullptr; // Edit only if the shown content is coming from the current view. if ((State::ACTIVE == m_eState || m_pActiveShell == pActiveView->GetWrtShellPtr()) @@ -1294,70 +1290,69 @@ VclPtr<PopupMenu> SwContentTree::CreateContextMenu() ContentTypeId::GRAPHIC == nContentType || ContentTypeId::OLE == nContentType || ContentTypeId::BOOKMARK == nContentType || - ContentTypeId::REGION == nContentType|| - ContentTypeId::INDEX == nContentType); + ContentTypeId::REGION == nContentType || + ContentTypeId::INDEX == nContentType || + ContentTypeId::DRAWOBJECT == nContentType); if(!bReadonly && (bEditable || bDeletable)) { if(ContentTypeId::INDEX == nContentType) { - bSubPop4 = true; - pSubPop4->InsertItem(401, m_sRemoveIdx); - pSubPop4->InsertItem(402, m_sUpdateIdx); + pPop->InsertItem(401, m_sRemoveIdx); + pPop->InsertItem(402, m_sUpdateIdx); const SwTOXBase* pBase = static_cast<SwTOXBaseContent*>(pEntry->GetUserData())->GetTOXBase(); if(!pBase->IsTOXBaseInReadonly()) - pSubPop4->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); - pSubPop4->InsertItem(405, m_sReadonlyIdx); + pPop->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); + pPop->InsertItem(405, m_sReadonlyIdx); - pSubPop4->CheckItem( 405, SwEditShell::IsTOXBaseReadonly(*pBase)); - pSubPop4->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); + pPop->CheckItem( 405, SwEditShell::IsTOXBaseReadonly(*pBase)); + pPop->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); } else if(ContentTypeId::TABLE == nContentType) { - bSubPop4 = true; - pSubPop4->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); - pSubPop4->InsertItem(404, m_sUnprotTable); + pPop->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); + pPop->InsertItem(404, m_sUnprotTable); bool bFull = false; OUString sTableName = static_cast<SwContent*>(pEntry->GetUserData())->GetName(); bool bProt = m_pActiveShell->HasTableAnyProtection( &sTableName, &bFull ); - pSubPop4->EnableItem(403, !bFull ); - pSubPop4->EnableItem(404, bProt ); - pSubPop4->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); + pPop->EnableItem(403, !bFull ); + pPop->EnableItem(404, bProt ); + pPop->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); + } + else if(ContentTypeId::OUTLINE == nContentType) + { + bOutline = true; + lcl_InsertExpandCollapseAllItem(this, pEntry, pPop); + pPop->InsertSeparator(); + pPop->InsertItem(501, SwResId(STR_DELETE_CHAPTER)); + pPop->InsertItem(801, SwResId(STR_PROMOTE_CHAPTER)); + pPop->InsertItem(802, SwResId(STR_DEMOTE_CHAPTER)); + pPop->InsertItem(803, SwResId(STR_PROMOTE_LEVEL)); + pPop->InsertItem(804, SwResId(STR_DEMOTE_LEVEL)); + } + else if(ContentTypeId::DRAWOBJECT == nContentType) + { + pPop->InsertItem(501, SwResId(STR_DELETE_ENTRY)); } else { - if(bEditable && bDeletable) { - pSubPop4->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); - pSubPop4->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); - bSubPop4 = true; + pPop->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); + pPop->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); } else if(bEditable) pPop->InsertItem(403, m_aContextStrings[IDX_STR_EDIT_ENTRY]); else if(bDeletable) { - pSubPop4->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); + pPop->InsertItem(501, m_aContextStrings[IDX_STR_DELETE_ENTRY]); } } //Rename object if(bRenamable) - { - if(bSubPop4) - pSubPop4->InsertItem(502, m_sRename); - else - pPop->InsertItem(502, m_sRename); - } - - if(bSubPop4) - { - pPop->InsertItem(4, pContType->GetSingleName()); - pPop->SetPopupMenu(4, pSubPop4); - } + pPop->InsertItem(502, m_sRename); } - else if(ContentTypeId::OUTLINE == nContentType) - lcl_InsertExpandCollapseAllItem(this, pEntry, pPop); } else if( pEntry ) { @@ -1365,26 +1360,32 @@ VclPtr<PopupMenu> SwContentTree::CreateContextMenu() SwContentType* pType = static_cast<SwContentType*>(pEntry->GetUserData()); if(ContentTypeId::OUTLINE == pType->GetType()) { + bOutline = true; lcl_InsertExpandCollapseAllItem(this, pEntry, pPop); pPop->InsertSeparator(); pPop->InsertItem(700, m_aContextStrings[IDX_STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY]); } if ( (pType->GetType() == ContentTypeId::POSTIT) && (!m_pActiveShell->GetView().GetDocShell()->IsReadOnly()) && ( pType->GetMemberCount() > 0) ) { - bSubPop4 = true; - pSubPop4->InsertItem(600, m_sPostItShow ); - pSubPop4->InsertItem(601, m_sPostItHide ); - pSubPop4->InsertItem(602, m_sPostItDelete ); - pPop->InsertItem(4, pType->GetSingleName()); - pPop->SetPopupMenu(4, pSubPop4); + pPop->InsertItem(600, m_sPostItShow ); + pPop->InsertItem(601, m_sPostItHide ); + pPop->InsertItem(602, m_sPostItDelete ); } } - pPop->SetPopupMenu( 1, pSubPop1 ); - pPop->SetPopupMenu( 2, pSubPop2 ); - pPop->SetPopupMenu( 3, pSubPop3 ); - if (!bSubPop4) - pSubPop4.disposeAndClear(); + pPop->InsertSeparator(); + if (bOutline) + { + pPop->InsertItem(1, m_aContextStrings[IDX_STR_OUTLINE_LEVEL]); + pPop->SetPopupMenu(1, pSubPop1); + } + else + pSubPop1.disposeAndClear(); + pPop->InsertItem(2, m_aContextStrings[IDX_STR_DRAGMODE]); + pPop->SetPopupMenu(2, pSubPop2); + pPop->InsertItem(3, m_aContextStrings[IDX_STR_DISPLAY]); + pPop->SetPopupMenu(3, pSubPop3); + return pPop; } @@ -3308,6 +3309,18 @@ void SwContentTree::ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ) case 800: KeyInput(KeyEvent(0, KEY_MOD1|KEY_MULTIPLY)); break; + case 801: + ExecCommand("up", true); + break; + case 802: + ExecCommand("down", true); + break; + case 803: + ExecCommand("promote", true); + break; + case 804: + ExecCommand("demote", true); + break; //Display default: if(nSelectedPopupEntry > 300 && nSelectedPopupEntry < 400) @@ -3604,9 +3617,28 @@ void SwContentTree::EditEntry(SvTreeListEntry const * pEntry, EditEntryMode nMod } } break; + case ContentTypeId::OUTLINE : + if(EditEntryMode::DELETE == nMode) + { + SwOutlineNodes::size_type nActPos = static_cast<SwOutlineContent*>(pCnt)->GetOutlinePos(); + SwWrtShell* pShell = m_pActiveShell; + pShell->StartAllAction(); + pShell->StartUndo(); + pShell->Push(); + pShell->MakeOutlineSel(nActPos, nActPos, true); + pShell->SetTextFormatColl(nullptr); + pShell->Delete(); + pShell->ClearMark(); + pShell->Pop(SwCursorShell::PopMode::DeleteCurrent); + pShell->EndUndo(); + pShell->EndAllAction(); + } + break; case ContentTypeId::DRAWOBJECT : if(EditEntryMode::DELETE == nMode) nSlot = SID_DELETE; + else if(nMode == EditEntryMode::RENAME) + nSlot = FN_NAME_SHAPE; break; default: break; } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
