SD: fillapi: slide, text, uno commands

Implemented extract and transform for slides.
It can manipulate slides and some of its text content.

usable commands for transform:

{"JumpToSlide": 4},   //jump to slide 4 (counted from 0) "last" can be used
{"JumpToSlideByName": "Slide 4"},jump to slide named "Slide 4"
{"InsertMasterSlide": 10}, //insert the 10. masterSlide after the
actual slide, and jump to this new Slide
{"InsertMasterSlideByName": "name"}, //same as InsertMasterSlide,
but with parameter of masterSlide name.
{"DeleteSlide": 2},   // delete the 2. slide. It may or may not
change the actual slide
can be used without parameter:
{"DeleteSlide": ""}, // it delete the actual slide.
{"MoveSlide.2": 5}, // move the 2. slide to the 5. position, if it is
the actual slide, then jump to the new position of this slide.
If it is not the actual slide then it may jump, so the actual Slide
eill remain the same.
{"MoveSlide": 5}, // move the actual slide to the 5. position
{"DuplicateSlide": 5}, //duplicate the 5. slide , it jumps to the
duplicated slide
{"DuplicateSlide": ""}, // duplicate the actual slide
{"ChangeLayout": 18},  // change the actual page layout
to the 18. layout. (would be good to have a better ID)
{"ChangeLayoutByName": "AUTOLAYOUT_TITLE_2CONTENT"}, //same as
ChangeLayout, nbut indxed by the layout name.
{"RenameSlide": "NewNameForSlide"}, //rename the actual slide
{"SetText.0": "first"},  //set the text of 0. sdrobject on the
actual page to "first"
{"MarkObject": "1"},    //mark the 1. sdrobject on the actual slide
{"UnMarkObject": "1"},  //Unmark the 1. sdrobject on the act slide
{"UnoCommand": ".uno:DefaultBullet"}, //run an uno command.
This uno command toggle the default bullet type on thext marked.

There are many more uno commands.
Limited uno commands allowed to be used here, because some would
be dangerous.
For allowed uno commands, check lokunocmdlist.hxx.

Note: Uno commands not worked on a windows system

For layout names these can be used:
"AUTOLAYOUT_TITLE_CONTENT"
"AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT"
"AUTOLAYOUT_TITLE_CONTENT_2CONTENT"
"AUTOLAYOUT_TITLE_4CONTENT"
"AUTOLAYOUT_ONLY_TEXT"
"AUTOLAYOUT_TITLE_ONLY"
"AUTOLAYOUT_TITLE_6CONTENT"
"AUTOLAYOUT_TITLE"
"AUTOLAYOUT_TITLE_2CONTENT_CONTENT"
"AUTOLAYOUT_TITLE_2CONTENT_OVER_CONTENT"
"AUTOLAYOUT_TITLE_2CONTENT"
"AUTOLAYOUT_VTITLE_VCONTENT"
"AUTOLAYOUT_VTITLE_VCONTENT_OVER_VCONTENT"
"AUTOLAYOUT_TITLE_VCONTENT"
"AUTOLAYOUT_TITLE_2VTEXT"

Extract will:
Extract all masterSlides name
Extract the following for all Slides:
Name, MatsreSlideName, LayoutId, LayoutName, ObjectCount, Objects.

For all objects it will extract:
TextCount, Texts

For all texts it will extract:
ParaCount, Paragraphs

where Paragraphs is an array of strings.

Change-Id: Icab5afe44acc30f8b75974240d8b39fd040ede2f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181671
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
This commit is contained in:
Attila Szűcs
2025-02-14 18:01:42 +01:00
committed by Miklos Vajna
parent 391e1d1a39
commit f3162dd1e3
12 changed files with 1145 additions and 510 deletions
+18 -248
View File
@@ -153,6 +153,7 @@
#include <sfx2/lokcomponenthelpers.hxx>
#include <sfx2/DocumentSigner.hxx>
#include <sfx2/sidebar/Sidebar.hxx>
#include <sfx2/lokunocmdlist.hxx>
#include <svl/numformat.hxx>
#include <svx/dialmgr.hxx>
#include <svx/strings.hrc>
@@ -3264,7 +3265,9 @@ static char* lo_extractDocumentStructureRequest(LibreOfficeKit* /*pThis*/, const
//if it is a writer document..
uno::Reference<lang::XServiceInfo> xDocument(xComp, uno::UNO_QUERY_THROW);
if (xDocument->supportsService(u"com.sun.star.text.TextDocument"_ustr) || xDocument->supportsService(u"com.sun.star.text.WebDocument"_ustr))
if (xDocument->supportsService(u"com.sun.star.text.TextDocument"_ustr)
|| xDocument->supportsService(u"com.sun.star.text.WebDocument"_ustr)
|| xDocument->supportsService(u"com.sun.star.presentation.PresentationDocument"_ustr))
{
tools::JsonWriter aJson;
{
@@ -3826,244 +3829,6 @@ static void doc_iniUnoCommands ()
SolarMutexGuard aGuard;
SetLastExceptionMsg();
static constexpr OUString sUnoCommands[] =
{
u".uno:AlignLeft"_ustr,
u".uno:AlignHorizontalCenter"_ustr,
u".uno:AlignRight"_ustr,
u".uno:BackgroundColor"_ustr,
u".uno:TableCellBackgroundColor"_ustr,
u".uno:Bold"_ustr,
u".uno:CenterPara"_ustr,
u".uno:CharBackColor"_ustr,
u".uno:CharBackgroundExt"_ustr,
u".uno:CharFontName"_ustr,
u".uno:Color"_ustr,
u".uno:ControlCodes"_ustr,
u".uno:DecrementIndent"_ustr,
u".uno:DefaultBullet"_ustr,
u".uno:DefaultNumbering"_ustr,
u".uno:FontColor"_ustr,
u".uno:FontHeight"_ustr,
u".uno:IncrementIndent"_ustr,
u".uno:Italic"_ustr,
u".uno:JustifyPara"_ustr,
u".uno:JumpToMark"_ustr,
u".uno:OutlineFont"_ustr,
u".uno:LeftPara"_ustr,
u".uno:LanguageStatus"_ustr,
u".uno:RightPara"_ustr,
u".uno:Shadowed"_ustr,
u".uno:SubScript"_ustr,
u".uno:SuperScript"_ustr,
u".uno:Strikeout"_ustr,
u".uno:StyleApply"_ustr,
u".uno:Underline"_ustr,
u".uno:ModifiedStatus"_ustr,
u".uno:Undo"_ustr,
u".uno:Redo"_ustr,
u".uno:InsertPage"_ustr,
u".uno:DeletePage"_ustr,
u".uno:DuplicatePage"_ustr,
u".uno:InsertSlide"_ustr,
u".uno:DeleteSlide"_ustr,
u".uno:DuplicateSlide"_ustr,
u".uno:ChangeTheme"_ustr,
u".uno:Cut"_ustr,
u".uno:Copy"_ustr,
u".uno:Paste"_ustr,
u".uno:SelectAll"_ustr,
u".uno:ReplyComment"_ustr,
u".uno:ResolveComment"_ustr,
u".uno:ResolveCommentThread"_ustr,
u".uno:PromoteComment"_ustr,
u".uno:InsertRowsBefore"_ustr,
u".uno:InsertRowsAfter"_ustr,
u".uno:InsertColumnsBefore"_ustr,
u".uno:InsertColumnsAfter"_ustr,
u".uno:DeleteRows"_ustr,
u".uno:DeleteColumns"_ustr,
u".uno:DeleteTable"_ustr,
u".uno:SelectTable"_ustr,
u".uno:EntireRow"_ustr,
u".uno:EntireColumn"_ustr,
u".uno:EntireCell"_ustr,
u".uno:AssignLayout"_ustr,
u".uno:StatusDocPos"_ustr,
u".uno:RowColSelCount"_ustr,
u".uno:StatusPageStyle"_ustr,
u".uno:InsertMode"_ustr,
u".uno:SpellOnline"_ustr,
u".uno:StatusSelectionMode"_ustr,
u".uno:StateTableCell"_ustr,
u".uno:StatusBarFunc"_ustr,
u".uno:StatePageNumber"_ustr,
u".uno:StateWordCount"_ustr,
u".uno:SelectionMode"_ustr,
u".uno:PageStatus"_ustr,
u".uno:LayoutStatus"_ustr,
u".uno:Scale"_ustr,
u".uno:Context"_ustr,
u".uno:WrapText"_ustr,
u".uno:ToggleMergeCells"_ustr,
u".uno:NameGroup"_ustr,
u".uno:ObjectTitleDescription"_ustr,
u".uno:NumberFormatCurrency"_ustr,
u".uno:NumberFormatPercent"_ustr,
u".uno:NumberFormatDecimal"_ustr,
u".uno:NumberFormatIncDecimals"_ustr,
u".uno:NumberFormatDecDecimals"_ustr,
u".uno:NumberFormatDate"_ustr,
u".uno:EditHeaderAndFooter"_ustr,
u".uno:FrameLineColor"_ustr,
u".uno:SortAscending"_ustr,
u".uno:SortDescending"_ustr,
u".uno:TrackChanges"_ustr,
u".uno:ShowTrackedChanges"_ustr,
u".uno:NextTrackedChange"_ustr,
u".uno:PreviousTrackedChange"_ustr,
u".uno:AcceptAllTrackedChanges"_ustr,
u".uno:RejectAllTrackedChanges"_ustr,
u".uno:TableDialog"_ustr,
u".uno:FormatCellDialog"_ustr,
u".uno:FontDialog"_ustr,
u".uno:ParagraphDialog"_ustr,
u".uno:OutlineBullet"_ustr,
u".uno:InsertIndexesEntry"_ustr,
u".uno:DocumentRepair"_ustr,
u".uno:TransformDialog"_ustr,
u".uno:InsertPageHeader"_ustr,
u".uno:InsertPageFooter"_ustr,
u".uno:OnlineAutoFormat"_ustr,
u".uno:InsertObjectChart"_ustr,
u".uno:InsertSection"_ustr,
u".uno:InsertAnnotation"_ustr,
u".uno:DeleteAnnotation"_ustr,
u".uno:InsertPagebreak"_ustr,
u".uno:InsertColumnBreak"_ustr,
u".uno:HyperlinkDialog"_ustr,
u".uno:InsertSymbol"_ustr,
u".uno:EditRegion"_ustr,
u".uno:ThesaurusDialog"_ustr,
u".uno:FormatArea"_ustr,
u".uno:FormatLine"_ustr,
u".uno:FormatColumns"_ustr,
u".uno:Watermark"_ustr,
u".uno:ResetAttributes"_ustr,
u".uno:Orientation"_ustr,
u".uno:ObjectAlignLeft"_ustr,
u".uno:ObjectAlignRight"_ustr,
u".uno:AlignCenter"_ustr,
u".uno:TransformPosX"_ustr,
u".uno:TransformPosY"_ustr,
u".uno:TransformWidth"_ustr,
u".uno:TransformHeight"_ustr,
u".uno:ObjectBackOne"_ustr,
u".uno:SendToBack"_ustr,
u".uno:ObjectForwardOne"_ustr,
u".uno:BringToFront"_ustr,
u".uno:WrapRight"_ustr,
u".uno:WrapThrough"_ustr,
u".uno:WrapLeft"_ustr,
u".uno:WrapIdeal"_ustr,
u".uno:WrapOn"_ustr,
u".uno:WrapOff"_ustr,
u".uno:UpdateCurIndex"_ustr,
u".uno:InsertCaptionDialog"_ustr,
u".uno:FormatGroup"_ustr,
u".uno:SplitTable"_ustr,
u".uno:SplitCell"_ustr,
u".uno:MergeCells"_ustr,
u".uno:DeleteNote"_ustr,
u".uno:AcceptChanges"_ustr,
u".uno:FormatPaintbrush"_ustr,
u".uno:SetDefault"_ustr,
u".uno:ParaLeftToRight"_ustr,
u".uno:ParaRightToLeft"_ustr,
u".uno:ParaspaceIncrease"_ustr,
u".uno:ParaspaceDecrease"_ustr,
u".uno:AcceptTrackedChange"_ustr,
u".uno:RejectTrackedChange"_ustr,
u".uno:AcceptTrackedChangeToNext"_ustr,
u".uno:RejectTrackedChangeToNext"_ustr,
u".uno:ShowResolvedAnnotations"_ustr,
u".uno:InsertBreak"_ustr,
u".uno:InsertEndnote"_ustr,
u".uno:InsertFootnote"_ustr,
u".uno:InsertReferenceField"_ustr,
u".uno:InsertBookmark"_ustr,
u".uno:InsertAuthoritiesEntry"_ustr,
u".uno:InsertMultiIndex"_ustr,
u".uno:InsertField"_ustr,
u".uno:PageNumberWizard"_ustr,
u".uno:InsertPageNumberField"_ustr,
u".uno:InsertPageCountField"_ustr,
u".uno:InsertDateField"_ustr,
u".uno:InsertTitleField"_ustr,
u".uno:InsertFieldCtrl"_ustr,
u".uno:CharmapControl"_ustr,
u".uno:EnterGroup"_ustr,
u".uno:LeaveGroup"_ustr,
u".uno:AlignUp"_ustr,
u".uno:AlignMiddle"_ustr,
u".uno:AlignDown"_ustr,
u".uno:TraceChangeMode"_ustr,
u".uno:Combine"_ustr,
u".uno:Merge"_ustr,
u".uno:Dismantle"_ustr,
u".uno:Substract"_ustr,
u".uno:DistributeSelection"_ustr,
u".uno:Intersect"_ustr,
u".uno:BorderInner"_ustr,
u".uno:BorderOuter"_ustr,
u".uno:FreezePanes"_ustr,
u".uno:FreezePanesColumn"_ustr,
u".uno:FreezePanesRow"_ustr,
u".uno:Sidebar"_ustr,
u".uno:SheetRightToLeft"_ustr,
u".uno:RunMacro"_ustr,
u".uno:SpacePara1"_ustr,
u".uno:SpacePara15"_ustr,
u".uno:SpacePara2"_ustr,
u".uno:InsertSparkline"_ustr,
u".uno:DeleteSparkline"_ustr,
u".uno:DeleteSparklineGroup"_ustr,
u".uno:EditSparklineGroup"_ustr,
u".uno:EditSparkline"_ustr,
u".uno:GroupSparklines"_ustr,
u".uno:UngroupSparklines"_ustr,
u".uno:FormatSparklineMenu"_ustr,
u".uno:DataDataPilotRun"_ustr,
u".uno:RecalcPivotTable"_ustr,
u".uno:DeletePivotTable"_ustr,
u".uno:Protect"_ustr,
u".uno:UnsetCellsReadOnly"_ustr,
u".uno:ContentControlProperties"_ustr,
u".uno:DeleteContentControl"_ustr,
u".uno:InsertCheckboxContentControl"_ustr,
u".uno:InsertContentControl"_ustr,
u".uno:InsertDateContentControl"_ustr,
u".uno:InsertDropdownContentControl"_ustr,
u".uno:InsertPlainTextContentControl"_ustr,
u".uno:InsertPictureContentControl"_ustr,
u".uno:DataFilterAutoFilter"_ustr,
u".uno:CellProtection"_ustr,
u".uno:MoveKeepInsertMode"_ustr,
u".uno:ToggleSheetGrid"_ustr,
u".uno:ChangeBezier"_ustr,
u".uno:DistributeHorzCenter"_ustr,
u".uno:DistributeHorzDistance"_ustr,
u".uno:DistributeHorzLeft"_ustr,
u".uno:DistributeHorzRight"_ustr,
u".uno:DistributeVertBottom"_ustr,
u".uno:DistributeVertCenter"_ustr,
u".uno:DistributeVertDistance"_ustr,
u".uno:DistributeVertTop"_ustr,
u".uno:AnimationEffects"_ustr,
u".uno:ExecuteAnimationEffect"_ustr,
u".uno:EditDoc"_ustr,
};
util::URL aCommandURL;
SfxViewShell* pViewShell = SfxViewShell::Current();
SfxViewFrame* pViewFrame = pViewShell ? &pViewShell->GetViewFrame() : nullptr;
@@ -4102,17 +3867,22 @@ static void doc_iniUnoCommands ()
SfxSlotPool& rSlotPool = SfxSlotPool::GetSlotPool(pViewFrame);
uno::Reference<util::XURLTransformer> xParser(util::URLTransformer::create(xContext));
for (const auto & sUnoCommand : sUnoCommands)
const std::map<std::u16string_view, KitUnoCommand>& rUnoCommandList = GetKitUnoCommandList();
for (const auto& aUnoCommand : rUnoCommandList)
{
aCommandURL.Complete = sUnoCommand;
xParser->parseStrict(aCommandURL);
// when null, this command is not supported by the given component
// (like eg. Calc does not have ".uno:DefaultBullet" etc.)
if (const SfxSlot* pSlot = rSlotPool.GetUnoSlot(aCommandURL.Path))
if (aUnoCommand.second.initializeForStatusUpdates)
{
// Initialize slot to dispatch .uno: Command.
pViewFrame->GetBindings().GetDispatch(pSlot, aCommandURL, false);
aCommandURL.Complete = u".uno:"_ustr + aUnoCommand.first;
xParser->parseStrict(aCommandURL);
// when null, this command is not supported by the given component
// (like eg. Calc does not have ".uno:DefaultBullet" etc.)
if (const SfxSlot* pSlot = rSlotPool.GetUnoSlot(aCommandURL.Path))
{
// Initialize slot to dispatch .uno: Command.
pViewFrame->GetBindings().GetDispatch(pSlot, aCommandURL, false);
}
}
}
}
+52
View File
@@ -0,0 +1,52 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <sfx2/dllapi.h>
#include <map>
enum class PayloadType
{
None,
IsActivePayload,
FontNamePayload,
FontHeightPayload,
StyleApplyPayload,
ColorPayload,
UndoRedoPayload,
EnabledPayload,
ParaDirectionPayload,
Int32Payload,
TransformPayload,
StringPayload,
RowColSelCountPayload,
StateTableCellPayload,
BooleanPayload,
BooleanOrDisabledPayload,
PointPayload,
SizePayload,
StringOrStrSeqPayload,
StrSeqPayload,
TableSizePayload,
};
struct KitUnoCommand
{
// (if != None) --> function used by libreOfficeKitViewCallback in
// unoctitm.cxx.
PayloadType payloadType;
// (if == true) --> command is listened to for status updates. This is used
// by doc_iniUnoCommands in init.cxx.
bool initializeForStatusUpdates;
};
// Get list of uno commands that are safe enough to be allowed to use in some cases
// Parameters:
SFX2_DLLPUBLIC const std::map<std::u16string_view, KitUnoCommand>& GetKitUnoCommandList();
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
+2
View File
@@ -453,4 +453,6 @@
#define SID_PRESENTATION_MINIMIZER (SID_SD_START+450)
#define SID_ALIGN_PAGE (SID_SD_START+451)
#define FN_TRANSFORM_DOCUMENT_STRUCTURE (SID_SD_START+452)
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+3
View File
@@ -384,6 +384,9 @@ public:
*/
void getGraphicsForPrefetch(std::vector<Graphic*>& graphics) const;
static AutoLayout stringToAutoLayout(std::u16string_view rLayoutName);
static OUString autoLayoutToString(AutoLayout nLayoutId);
static sal_uInt16 mnLastPageId;
private:
+107
View File
@@ -172,6 +172,113 @@ void SdUiImpressTest::lcl_search(const OUString& rKey, bool bFindAll, bool bBack
dispatchCommand(mxComponent, u".uno:ExecuteSearch"_ustr, aPropertyValues);
}
CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testDocumentStructureTransformExtractSlide)
{
createSdImpressDoc("odp/tdf161430.odp");
OString aJson = R"json(
{
"Transforms": {
"SlideCommands": [
{"JumpToSlideByName": "Slide 3"},
{"MoveSlide": 0},
{"RenameSlide": "Slide3-Renamed"},
{"DeleteSlide": 2},
{"JumpToSlide": 2},
{"DeleteSlide": ""},
{"JumpToSlide": 1},
{"DuplicateSlide": ""},
{"RenameSlide": "Slide1-Duplicated"},
{"InsertMasterSlide": 1},
{"RenameSlide": "SlideInserted-1"},
{"ChangeLayout": 18},
{"JumpToSlide": "last"},
{"InsertMasterSlideByName": "Topic Separator white"},
{"RenameSlide": "SlideInserted-Name"},
{"ChangeLayoutByName": "AUTOLAYOUT_TITLE_2CONTENT"},
{"SetText.0": "first"},
{"SetText.1": "second"},
{"SetText.2": "third"},
{"DuplicateSlide": 1},
{"MoveSlide.2": 6}
]
}
}
)json"_ostr;
//transform
uno::Sequence<css::beans::PropertyValue> aArgs = {
comphelper::makePropertyValue(u"DataJson"_ustr,
uno::Any(OStringToOUString(aJson, RTL_TEXTENCODING_UTF8))),
};
dispatchCommand(mxComponent, u".uno:TransformDocumentStructure"_ustr, aArgs);
//extract
tools::JsonWriter aJsonWriter;
std::string_view aCommand(".uno:ExtractDocumentStructure?filter=slides");
auto pXPresDocument = dynamic_cast<SdXImpressDocument*>(mxComponent.get());
pXPresDocument->getCommandValues(aJsonWriter, aCommand);
OString aExpectedStr
= "{ \"DocStructure\": { \"SlideCount\": 7, \"MasterSlideCount\": 8, \"MasterSlides\": [ "
"\"MasterSlide 0\": { \"Name\": \"Topic_Separator_Purple\"}, \"MasterSlide 1\": { "
"\"Name\": \"Content_sidebar_White\"}, \"MasterSlide 2\": { \"Name\": \"Topic Separator "
"white\"}, \"MasterSlide 3\": { \"Name\": \"Content_sidebar_White_\"}, \"MasterSlide "
"4\": { \"Name\": \"Topic_Separator_Purple_\"}, \"MasterSlide 5\": { \"Name\": "
"\"Content_White_Purple_Sidebar\"}, \"MasterSlide 6\": { \"Name\": \"Default 1\"}, "
"\"MasterSlide 7\": { \"Name\": \"Default 1_\"}], \"Slides\": [ \"Slide 0\": { "
"\"SlideName\": \"Slide3-Renamed\", \"MasterSlideName\": "
"\"Content_White_Purple_Sidebar\", \"LayoutId\": 3, \"LayoutName\": "
"\"AUTOLAYOUT_TITLE_2CONTENT\", \"ObjectCount\": 4, \"Objects\": [ \"Objects 0\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, \"Paragraphs\": [ "
"\"Friendly Open Source Project\"]}]}, \"Objects 1\": { }, \"Objects 2\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 9, \"Paragraphs\": [ \"Real "
"Open Source\", \"100% open-source code\", \"Built with LibreOffice technology\", "
"\"Built with Free Software technology stacks: primarily C++\", \"Runs best on Linux\", "
"\"Open Development\", \"Anyone can contribute & participate\", \"Follow commits and "
"tickets\", \"Public community calls - forum has details\"]}]}, \"Objects 3\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 5, \"Paragraphs\": [ "
"\"Focus:\", \"a non-renewable resource.\", \"Office Productivity & Documents\", "
"\"Excited about migrating your\\u0001documents\", \"Grateful to our partners for "
"solving\\u0001other problems.\"]}]}]}, \"Slide 1\": { \"SlideName\": \"Slide 2\", "
"\"MasterSlideName\": \"Topic_Separator_Purple\", \"LayoutId\": 3, \"LayoutName\": "
"\"AUTOLAYOUT_TITLE_2CONTENT\", \"ObjectCount\": 1, \"Objects\": [ \"Objects 0\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 3, \"Paragraphs\": [ "
"\"Collabora Online\", \"\", \"Powerful Online Collaboration\"]}]}]}, \"Slide 2\": { "
"\"SlideName\": \"Slide1-Duplicated\", \"MasterSlideName\": \"Topic_Separator_Purple\", "
"\"LayoutId\": 3, \"LayoutName\": \"AUTOLAYOUT_TITLE_2CONTENT\", \"ObjectCount\": 1, "
"\"Objects\": [ \"Objects 0\": { \"TextCount\": 1, \"Texts\": [ \"Text 0\": { "
"\"ParaCount\": 3, \"Paragraphs\": [ \"Collabora Online\", \"\", \"Powerful Online "
"Collaboration\"]}]}]}, \"Slide 3\": { \"SlideName\": \"SlideInserted-1\", "
"\"MasterSlideName\": \"Content_sidebar_White\", \"LayoutId\": 18, \"LayoutName\": "
"\"AUTOLAYOUT_TITLE_4CONTENT\", \"ObjectCount\": 5, \"Objects\": [ \"Objects 0\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, \"Paragraphs\": [ "
"\"Click to add Title\"]}]}, \"Objects 1\": { \"TextCount\": 1, \"Texts\": [ \"Text 0\": "
"{ \"ParaCount\": 1, \"Paragraphs\": [ \"Click to add Text\"]}]}, \"Objects 2\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, \"Paragraphs\": [ "
"\"Click to add Text\"]}]}, \"Objects 3\": { \"TextCount\": 1, \"Texts\": [ \"Text 0\": "
"{ \"ParaCount\": 1, \"Paragraphs\": [ \"Click to add Text\"]}]}, \"Objects 4\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, \"Paragraphs\": [ "
"\"Click to add Text\"]}]}]}, \"Slide 4\": { \"SlideName\": \"Slide 6\", "
"\"MasterSlideName\": \"Topic_Separator_Purple\", \"LayoutId\": 3, \"LayoutName\": "
"\"AUTOLAYOUT_TITLE_2CONTENT\", \"ObjectCount\": 1, \"Objects\": [ \"Objects 0\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, \"Paragraphs\": [ \"With "
"thanks to our Partners, Customers & Community !\"]}]}]}, \"Slide 5\": { \"SlideName\": "
"\"SlideInserted-Name\", \"MasterSlideName\": \"Topic Separator white\", \"LayoutId\": "
"3, \"LayoutName\": \"AUTOLAYOUT_TITLE_2CONTENT\", \"ObjectCount\": 3, \"Objects\": [ "
"\"Objects 0\": { \"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, "
"\"Paragraphs\": [ \"first\"]}]}, \"Objects 1\": { \"TextCount\": 1, \"Texts\": [ \"Text "
"0\": { \"ParaCount\": 1, \"Paragraphs\": [ \"second\"]}]}, \"Objects 2\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 1, \"Paragraphs\": [ "
"\"third\"]}]}]}, \"Slide 6\": { \"SlideName\": \"Slide 7\", \"MasterSlideName\": "
"\"Topic_Separator_Purple\", \"LayoutId\": 3, \"LayoutName\": "
"\"AUTOLAYOUT_TITLE_2CONTENT\", \"ObjectCount\": 1, \"Objects\": [ \"Objects 0\": { "
"\"TextCount\": 1, \"Texts\": [ \"Text 0\": { \"ParaCount\": 3, \"Paragraphs\": [ "
"\"Collabora Online\", \"\", \"Powerful Online Collaboration\"]}]}]}]}}"_ostr;
CPPUNIT_ASSERT_EQUAL(aExpectedStr, aJsonWriter.finishAndGetAsOString());
}
CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf111522)
{
// Load the document and create two new windows.
+4
View File
@@ -146,6 +146,10 @@ interface DrawView
ExecMethod = FuTemporary ;
StateMethod = GetMenuState ;
]
FN_TRANSFORM_DOCUMENT_STRUCTURE
[
ExecMethod = FuTemporary ;
]
SID_INSERTPAGE // ole : no, status : play rec
[
ExecMethod = FuTemporary ;
+17
View File
@@ -2195,6 +2195,23 @@ SfxVoidItem InsertLayer SID_INSERTLAYER
GroupId = SfxGroupId::Insert;
]
SfxVoidItem TransformDocumentStructure FN_TRANSFORM_DOCUMENT_STRUCTURE
(SfxStringItem DataJson FN_PARAM_1)
[
AutoUpdate = FALSE,
FastCall = FALSE,
ReadOnlyDoc = FALSE,
Toggle = FALSE,
Container = FALSE,
RecordAbsolute = FALSE,
RecordPerSet;
AccelConfig = TRUE,
MenuConfig = TRUE,
ToolBoxConfig = TRUE,
GroupId = SfxGroupId::Edit;
]
SfxVoidItem InsertPage SID_INSERTPAGE
(SfxStringItem PageName ID_VAL_PAGENAME,SfxUInt32Item WhatLayout ID_VAL_WHATLAYOUT,SfxBoolItem IsPageBack ID_VAL_ISPAGEBACK,SfxBoolItem IsPageObj ID_VAL_ISPAGEOBJ,SfxUInt16Item InsertPos ID_INSERT_POS)
[
+22
View File
@@ -1353,6 +1353,28 @@ static OUString enumtoString(AutoLayout aut)
return retstr;
}
AutoLayout SdPage::stringToAutoLayout(std::u16string_view rLayoutName)
{
for (int i = AUTOLAYOUT_START; i < AUTOLAYOUT_END; i++)
{
AutoLayout nLId = static_cast<AutoLayout>(i);
if (autoLayoutToString(nLId) == rLayoutName)
{
return nLId;
}
}
return AUTOLAYOUT_END;
}
OUString SdPage::autoLayoutToString(AutoLayout nLayoutId)
{
if (nLayoutId == AUTOLAYOUT_TITLE)
{
return "AUTOLAYOUT_TITLE";
}
return enumtoString(nLayoutId);
}
static void CalcAutoLayoutRectangles( SdPage const & rPage,::tools::Rectangle* rRectangle ,const OUString& sLayoutType )
{
::tools::Rectangle aTitleRect;
+2
View File
@@ -298,6 +298,8 @@ public:
/// @see vcl::ITiledRenderable::getViewRenderState().
SD_DLLPUBLIC OString getViewRenderState(SfxViewShell* pViewShell = nullptr) override;
SD_DLLPUBLIC virtual void getCommandValues(tools::JsonWriter& rJsonWriter, std::string_view rCommand) override;
/// @see vcl::ITiledRenderable::getPresentationInfo().
SD_DLLPUBLIC OString getPresentationInfo() const override;
/// @see vcl::ITiledRenderable::createSlideRenderer().
+118
View File
@@ -1455,6 +1455,110 @@ void AnimationsExporter::exportAnimate(const Reference<XAnimate>& xAnimate)
}
}
void GetDocStructureSlides(::tools::JsonWriter& rJsonWriter, SdXImpressDocument* pDoc,
const std::map<OUString, OUString>& rArguments)
{
auto it = rArguments.find(u"filter"_ustr);
if (it != rArguments.end())
{
// If filter is present but we are filtering not to slide informations
if (!it->second.equals(u"slides"_ustr))
return;
}
sal_uInt16 nPageCount = pDoc->GetDoc()->GetSdPageCount(PageKind::Standard);
sal_uInt16 nMasterPageCount = pDoc->GetDoc()->GetMasterSdPageCount(PageKind::Standard);
rJsonWriter.put("SlideCount", nPageCount);
rJsonWriter.put("MasterSlideCount", nMasterPageCount);
// write data of every master slide
if (nMasterPageCount > 0)
{
auto aMasterPagesNode = rJsonWriter.startArray("MasterSlides");
for (int nMPId = 0; nMPId < nMasterPageCount; nMPId++)
{
auto aMasterPageNode = rJsonWriter.startNode("MasterSlide " + std::to_string(nMPId));
const OUString& aMName
= pDoc->GetDoc()->GetMasterSdPage(nMPId, PageKind::Standard)->GetName();
rJsonWriter.put("Name", aMName);
}
}
// write data of every slide
if (nPageCount > 0)
{
auto aPagesNode = rJsonWriter.startArray("Slides");
for (int nPId = 0; nPId < nPageCount; nPId++)
{
auto aPageNode = rJsonWriter.startNode("Slide " + std::to_string(nPId));
SdPage* pPageStandard = pDoc->GetDoc()->GetSdPage(nPId, PageKind::Standard);
// Slide Name
rJsonWriter.put("SlideName", pPageStandard->GetName());
// MatserSlide Name
const FmFormPage* pMasterPage
= dynamic_cast<const FmFormPage*>(&pPageStandard->TRG_GetMasterPage());
if (pMasterPage)
{
rJsonWriter.put("MasterSlideName", pMasterPage->GetName());
}
// Layout id, and name.
AutoLayout nLayout = pPageStandard->GetAutoLayout();
rJsonWriter.put("LayoutId", static_cast<int>(nLayout));
rJsonWriter.put("LayoutName", SdPage::autoLayoutToString(nLayout));
// Every Objects in the page
int nObjCount = pPageStandard->GetObjCount();
rJsonWriter.put("ObjectCount", nObjCount);
if (nObjCount > 0)
{
auto aObjectsNode = rJsonWriter.startArray("Objects");
for (int nOId = 0; nOId < nObjCount; nOId++)
{
auto aObjectNode = rJsonWriter.startNode("Objects " + std::to_string(nOId));
SdrObject* pSdrObj = pPageStandard->GetObj(nOId);
SdrTextObj* pSdrTxtObj = DynCastSdrTextObj(pSdrObj);
if (pSdrTxtObj && pSdrTxtObj->HasText())
{
sal_Int32 nTextCount = pSdrTxtObj->getTextCount();
rJsonWriter.put("TextCount", nTextCount);
if (nTextCount > 0)
{
auto aTextsNode = rJsonWriter.startArray("Texts");
for (int nTId = 0; nTId < nTextCount; nTId++)
{
auto aTextNode
= rJsonWriter.startNode("Text " + std::to_string(nTId));
SdrText* pSdrTxt = pSdrTxtObj->getText(nTId);
OutlinerParaObject* pOutlinerParaObject
= pSdrTxt->GetOutlinerParaObject();
sal_Int32 nParaCount
= pOutlinerParaObject->GetTextObject().GetParagraphCount();
rJsonWriter.put("ParaCount", nParaCount);
auto aParasNode = rJsonWriter.startArray("Paragraphs");
for (int nParaId = 0; nParaId < nParaCount; nParaId++)
{
OUString aParaStr(
pOutlinerParaObject->GetTextObject().GetText(nParaId));
rJsonWriter.putSimpleValue(aParaStr);
}
}
}
}
}
}
}
}
}
} // end anonymous namespace
SdUnoForbiddenCharsTable::SdUnoForbiddenCharsTable( SdrModel* pModel )
@@ -1752,6 +1856,20 @@ void SdXImpressDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
SfxBaseModel::Notify( rBC, rHint );
}
void SdXImpressDocument::getCommandValues(::tools::JsonWriter& rJsonWriter, std::string_view rCommand)
{
static constexpr OStringLiteral aExtractDocStructure(".uno:ExtractDocumentStructure");
std::map<OUString, OUString> aMap
= SfxLokHelper::parseCommandParameters(OUString::fromUtf8(rCommand));
if (o3tl::starts_with(rCommand, aExtractDocStructure))
{
auto commentsNode = rJsonWriter.startNode("DocStructure");
GetDocStructureSlides(rJsonWriter, this, aMap);
}
}
/******************************************************************************
* *
******************************************************************************/
+490
View File
@@ -39,6 +39,10 @@
#include <comphelper/propertysequence.hxx>
#include <comphelper/scopeguard.hxx>
#include <comphelper/lok.hxx>
#include <comphelper/sequence.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <comphelper/dispatchcommand.hxx>
#include <comphelper/propertyvalue.hxx>
#include <editeng/contouritem.hxx>
#include <editeng/editdata.hxx>
@@ -59,6 +63,8 @@
#include <sfx2/request.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/zoomitem.hxx>
#include <sfx2/lokhelper.hxx>
#include <sfx2/lokunocmdlist.hxx>
#include <svx/compressgraphicdialog.hxx>
#include <svx/ClassificationDialog.hxx>
@@ -198,6 +204,11 @@
#include <SelectLayerDlg.hxx>
#include <unomodel.hxx>
#include <iostream>
#include <boost/property_tree/json_parser.hpp>
#include <rtl/uri.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -245,6 +256,11 @@ OUString getWeightString(SfxItemSet const & rItemSet)
return sWeightString;
}
void lcl_LogWarning(const std::string& rWarning)
{
LOK_WARN("sd.transform", rWarning);
}
class ClassificationCommon
{
protected:
@@ -741,6 +757,480 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
}
break;
case FN_TRANSFORM_DOCUMENT_STRUCTURE:
{
// get the parameter, what to transform
OUString aDataJson;
const SfxStringItem* pDataJson = rReq.GetArg<SfxStringItem>(FN_PARAM_1);
if (pDataJson)
{
aDataJson = pDataJson->GetValue();
aDataJson = rtl::Uri::decode(aDataJson, rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8);
}
// parse the JSON transform parameter
boost::property_tree::ptree aTree;
std::stringstream aStream(
(std::string(OUStringToOString(aDataJson, RTL_TEXTENCODING_UTF8))));
try
{
boost::property_tree::read_json(aStream, aTree);
}
catch (...)
{
lcl_LogWarning("FillApi Transform parameter, Wrong JSON format. ");
throw;
}
// Iterate through the JSON data loaded into a tree structure
for (const auto& aItem : aTree)
{
if (aItem.first == "Transforms")
{
// Handle all transformations
for (const auto& aItem2 : aItem.second)
{
//jump to slide
if (aItem2.first == "SlideCommands")
{
int nActPageId = -1;
int nNextPageId = 0;
for (const auto& aItem3Obj : aItem2.second)
{
const auto& aItem3 = *aItem3Obj.second.ordered_begin();
sal_uInt16 nPageCount
= GetDoc()->GetSdPageCount(PageKind::Standard);
sal_uInt16 nMasterPageCount
= GetDoc()->GetMasterSdPageCount(PageKind::Standard);
if (nActPageId != nNextPageId)
{
// Make it sure it always point to a real page
if (nNextPageId < 0)
nNextPageId = 0;
if (nNextPageId >= nPageCount)
nNextPageId = nPageCount - 1;
nActPageId = nNextPageId;
// Make sure nActPageId is the current Page
maTabControl->SetCurPageId(nActPageId);
SdPage* pPageStandard
= GetDoc()->GetSdPage(nActPageId, PageKind::Standard);
mpDrawView->ShowSdrPage(pPageStandard);
}
if (aItem3.first == "JumpToSlide")
{
std::string aIndex = aItem3.second.get_value<std::string>();
if (aIndex == "last")
{
nNextPageId = nPageCount - 1;
}
else
{
nNextPageId = aItem3.second.get_value<int>();
if (nNextPageId >= nPageCount)
{
lcl_LogWarning(
"FillApi SlideCmd: Slide idx >= Slide count. '"
+ aItem3.first + ": " + aIndex
+ "' (Slide count = " + std::to_string(nPageCount));
nNextPageId = nPageCount - 1;
}
else if (nNextPageId < 0)
{
lcl_LogWarning("FillApi SlideCmd: Slide idx < 0. '"
+ aItem3.first + ": " + aIndex + "'");
nNextPageId = 0;
}
}
}
if (aItem3.first == "JumpToSlideByName")
{
std::string aPageName = aItem3.second.get_value<std::string>();
int nId = 0;
while (
nId < nPageCount
&& GetDoc()->GetSdPage(nId, PageKind::Standard)->GetName()
!= OStringToOUString(aPageName,
RTL_TEXTENCODING_UTF8))
{
nId++;
}
if (nId < nPageCount)
{
nNextPageId = nId;
}
else
{
lcl_LogWarning(
"FillApi SlideCmd: Slide name not found at: '"
+ aItem3.first + ": " + aPageName + "'");
}
}
else if (aItem3.first == "InsertMasterSlide"
|| aItem3.first == "InsertMasterSlideByName")
{
int nMasterPageId = 0;
if (aItem3.first == "InsertMasterSlideByName")
{
int nMId = 0;
std::string aMPageName
= aItem3.second.get_value<std::string>();
while (
nMId < nMasterPageCount
&& GetDoc()->GetMasterSdPage(nMId, PageKind::Standard)
->GetName()
!= OStringToOUString(aMPageName,
RTL_TEXTENCODING_UTF8))
{
nMId++;
}
if (nMId < nMasterPageCount)
{
nMasterPageId = nMId;
}
else
{
lcl_LogWarning(
"FillApi SlideCmd: MatserSlide name not found at: '"
+ aItem3.first + ": " + aMPageName + "'");
}
}
else
{
nMasterPageId = aItem3.second.get_value<int>();
}
if (nMasterPageId >= nMasterPageCount)
{
lcl_LogWarning(
"FillApi SlideCmd: Slide idx >= MasterSlide count. '"
+ aItem3.first + ": " + std::to_string(nMasterPageId)
+ "' (Slide count = " + std::to_string(nMasterPageCount));
nMasterPageId = nMasterPageCount - 1;
}
else if (nMasterPageId < 0)
{
lcl_LogWarning("FillApi SlideCmd: Slide idx < 0. '"
+ aItem3.first + ": "
+ std::to_string(nMasterPageId) + "'");
nMasterPageId = 0;
}
SdPage* pMPage = GetDoc()->GetMasterSdPage(nMasterPageId,
PageKind::Standard);
SdPage* pPage
= GetDoc()->GetSdPage(nActPageId, PageKind::Standard);
// It will move to the next slide.
nNextPageId = GetDoc()->CreatePage(
pPage, PageKind::Standard, OUString(), OUString(),
AUTOLAYOUT_TITLE_CONTENT, AUTOLAYOUT_NOTES, true, true,
pPage->GetPageNum() + 2);
SdPage* pPageStandard
= GetDoc()->GetSdPage(nNextPageId, PageKind::Standard);
SdPage* pPageNote
= GetDoc()->GetSdPage(nNextPageId, PageKind::Notes);
// Change master value
pPageStandard->TRG_SetMasterPage(*pMPage);
pPageNote->TRG_SetMasterPage(*pMPage);
}
else if (aItem3.first == "DeleteSlide")
{
int nPageIdToDel = nActPageId;
if (aItem3.second.get_value<std::string>() != "")
{
nPageIdToDel = aItem3.second.get_value<int>();
}
if (nPageCount > 1)
{
if (nPageIdToDel >= nPageCount)
{
lcl_LogWarning(
"FillApi SlideCmd: Slide idx >= Slide count. '"
+ aItem3.first + ": " + std::to_string(nPageIdToDel)
+ "' (Slide count = " + std::to_string(nPageCount));
nPageIdToDel = nPageCount - 1;
}
else if (nPageIdToDel < 0)
{
lcl_LogWarning("FillApi SlideCmd: Slide idx < 0. '"
+ aItem3.first + ": "
+ std::to_string(nPageIdToDel) + "'");
nPageIdToDel = 0;
}
GetDoc()->RemovePage(nPageIdToDel * 2 + 1);
GetDoc()->RemovePage(nPageIdToDel * 2 + 1);
if (nPageIdToDel <= nActPageId)
{
nNextPageId--;
}
}
else
{
lcl_LogWarning(
"FillApi SlideCmd: Not enought Slide to delete 1. '"
+ aItem3.first + ": " + std::to_string(nPageIdToDel));
}
}
else if (aItem3.first.starts_with("MoveSlide"))
{
int nMoveFrom = nActPageId;
if (aItem3.first.starts_with("MoveSlide."))
{
nMoveFrom = stoi(aItem3.first.substr(10));
}
int nMoveTo = aItem3.second.get_value<int>();
if (nMoveFrom == nMoveTo)
{
lcl_LogWarning(
"FillApi SlideCmd: Move slide to the same position. '"
+ aItem3.first + ": " + std::to_string(nMoveTo));
}
else if (nMoveFrom >= nPageCount || nMoveTo > nPageCount)
{
lcl_LogWarning(
"FillApi SlideCmd: Slide idx >= Slide count. '"
+ aItem3.first + ": " + std::to_string(nMoveTo));
}
else if (nMoveFrom < 0 || nMoveTo < 0)
{
lcl_LogWarning(
"FillApi SlideCmd: Slide idx < 0. '"
+ aItem3.first + ": " + std::to_string(nMoveTo));
}
else
{
// Move both the standard and the Note Page.
// First move the page that will not change
// the order of the other page.
int nFirst = 1;
if (nMoveFrom < nMoveTo)
{
nFirst = 2;
}
int nSecond = 3 - nFirst;
GetDoc()->MovePage(nMoveFrom * 2 + nFirst,
nMoveTo * 2 + nFirst);
GetDoc()->MovePage(nMoveFrom * 2 + nSecond,
nMoveTo * 2 + nSecond);
// If the act page is moved, then follow it.
if (nActPageId == nMoveFrom)
{
nNextPageId = nMoveTo;
}
else if (nMoveFrom < nActPageId && nMoveTo >= nActPageId)
{
nNextPageId = nActPageId - 1;
}
else if (nMoveFrom > nActPageId && nMoveTo <= nActPageId)
{
nNextPageId = nActPageId + 1;
}
}
}
else if (aItem3.first == "DuplicateSlide")
{
int nDupSlideId = nActPageId;
if (aItem3.second.get_value<std::string>() != "")
{
nDupSlideId = aItem3.second.get_value<int>();
}
if (nDupSlideId >= nPageCount)
{
lcl_LogWarning(
"FillApi SlideCmd: Slide idx >= Slide count. '"
+ aItem3.first + ": " + std::to_string(nDupSlideId)
+ "' (Slide count = " + std::to_string(nPageCount));
nDupSlideId = nPageCount - 1;
}
else if (nDupSlideId < 0)
{
lcl_LogWarning("FillApi SlideCmd: Slide idx < 0. '"
+ aItem3.first + ": "
+ std::to_string(nDupSlideId) + "'");
nDupSlideId = 0;
}
GetDoc()->DuplicatePage(nDupSlideId);
// Jump to the created page.
nNextPageId = nDupSlideId + 1;
// Make sure the current page will be set also.
nActPageId = nDupSlideId;
}
else if (aItem3.first == "ChangeLayout"
|| aItem3.first == "ChangeLayoutByName")
{
AutoLayout nLayoutId;
if (aItem3.first == "ChangeLayoutByName")
{
std::string aLayoutName
= aItem3.second.get_value<std::string>();
nLayoutId = SdPage::stringToAutoLayout(
OStringToOUString(aLayoutName, RTL_TEXTENCODING_UTF8));
if (nLayoutId == AUTOLAYOUT_END)
{
lcl_LogWarning(
"FillApi SlideCmd: Layout name not found at: '"
+ aItem3.first + ": " + aLayoutName + "'");
nLayoutId = AUTOLAYOUT_TITLE_CONTENT;
}
}
else
{
nLayoutId = static_cast<AutoLayout>(
aItem3.second.get_value<int>());
if (nLayoutId < AUTOLAYOUT_START
|| nLayoutId >= AUTOLAYOUT_END)
{
lcl_LogWarning(
"FillApi SlideCmd: Wrong Layout index at: '"
+ aItem3.first + ": " + std::to_string(nLayoutId)
+ "'");
nLayoutId = AUTOLAYOUT_TITLE_CONTENT;
}
}
// Todo warning: ... if (nLayoutId >= ???)
GetDoc()
->GetSdPage(nActPageId, PageKind::Standard)
->SetAutoLayout(nLayoutId, true);
}
else if (aItem3.first == "RenameSlide")
{
SdPage* pPageStandard
= GetDoc()->GetSdPage(nActPageId, PageKind::Standard);
pPageStandard->SetName(
OStringToOUString(aItem3.second.get_value<std::string>(),
RTL_TEXTENCODING_UTF8));
}
else if (aItem3.first.starts_with("SetText."))
{
int nObjId = stoi(aItem3.first.substr(8));
SdPage* pPageStandard
= GetDoc()->GetSdPage(nActPageId, PageKind::Standard);
int nObjCount = pPageStandard->GetObjCount();
if (nObjId < 0)
{
lcl_LogWarning("FillApi SlideCmd SetText: Object idx < 0. '"
+ aItem3.first + "'");
}
else if (nObjId < nObjCount)
{
SdrObject* pSdrObj = pPageStandard->GetObj(nObjId);
if (pSdrObj->IsSdrTextObj())
{
SdrTextObj* pSdrTxt = static_cast<SdrTextObj*>(pSdrObj);
pSdrTxt->SetText(OStringToOUString(
aItem3.second.get_value<std::string>(),
RTL_TEXTENCODING_UTF8));
// Todo: maybe with empty string it should work elseway?
pSdrObj->SetEmptyPresObj(false);
}
}
else
{
lcl_LogWarning(
"FillApi SlideCmd SetText: Object idx >= Object Count. '"
+ aItem3.first
+ "' (Object Count = " + std::to_string(nPageCount));
}
}
else if (aItem3.first == "MarkObject"
|| aItem3.first == "UnMarkObject")
{
bool bUnMark = aItem3.first == "UnMarkObject";
int nObjId
= static_cast<AutoLayout>(aItem3.second.get_value<int>());
SdPage* pPageStandard
= GetDoc()->GetSdPage(nActPageId, PageKind::Standard);
int nObjCount = pPageStandard->GetObjCount();
// Todo: check id vs count
if (nObjId < 0)
{
lcl_LogWarning("FillApi SlideCmd: Object idx < 0 at: '"
+ aItem3.first + std::to_string(nObjId)
+ "'");
}
if (nObjId < nObjCount)
{
SdrObject* pSdrObj = pPageStandard->GetObj(nObjId);
mpDrawView->MarkObj(pSdrObj, mpDrawView->GetSdrPageView(),
bUnMark);
}
else
{
lcl_LogWarning(
"FillApi SlideCmd: Object idx > Object Count. '"
+ aItem3.first + std::to_string(nObjId)
+ "' (Object Count = " + std::to_string(nObjId));
}
}
else if (aItem3.first == "UnoCommand")
{
std::string aText = aItem3.second.get_value<std::string>();
if (aText.size() > 0)
{
OUString aCmd;
std::vector<beans::PropertyValue> aArg;
std::size_t nSpace = aText.find(' ');
if (nSpace != std::string::npos)
{
aCmd = OStringToOUString(aText.substr(0, nSpace),
RTL_TEXTENCODING_UTF8);
std::string aArgText = aText.substr(nSpace + 1);
aArg = comphelper::JsonToPropertyValues(aArgText);
}
else
{
aCmd = OStringToOUString(aText, RTL_TEXTENCODING_UTF8);
}
// Check if the uno command is allowed
const std::map<std::u16string_view, KitUnoCommand>& rUnoCommandList = GetKitUnoCommandList();
const bool bSupportedCmd = rUnoCommandList.find(aCmd) != rUnoCommandList.end();
if (bSupportedCmd)
{
// Make the uno command synchron
aArg.push_back(comphelper::makePropertyValue(
"SynchronMode", true));
// Todo: check why it does not work on my windows system
comphelper::dispatchCommand(
aCmd, comphelper::containerToSequence(aArg));
}
else
{
lcl_LogWarning(
"FillApi SlideCmd: uno command not recognized'"
+ aText + "'");
}
}
}
}
}
}
}
}
rReq.Done();
}
break;
case SID_INSERTPAGE:
case SID_INSERTPAGE_QUICK:
{
+310 -262
View File
@@ -64,6 +64,7 @@
#include <slotserv.hxx>
#include <rtl/ustring.hxx>
#include <sfx2/lokhelper.hxx>
#include <sfx2/lokunocmdlist.hxx>
#include <memory>
#include <string_view>
@@ -1148,275 +1149,319 @@ OString TableSizePayload(sal_uInt16, SfxViewFrame*, const css::frame::FeatureSta
return aBuffer.makeStringAndClear();
}
constexpr auto handlers = frozen::make_unordered_map<std::u16string_view, PayloadGetter_t>({
{ u"Bold", IsActivePayload },
{ u"CenterPara", IsActivePayload },
{ u"CharBackgroundExt", IsActivePayload },
{ u"ControlCodes", IsActivePayload },
{ u"DefaultBullet", IsActivePayload },
{ u"DefaultNumbering", IsActivePayload },
{ u"Italic", IsActivePayload },
{ u"JustifyPara", IsActivePayload },
{ u"LeftPara", IsActivePayload },
{ u"OutlineFont", IsActivePayload },
{ u"RightPara", IsActivePayload },
{ u"Shadowed", IsActivePayload },
{ u"SpellOnline", IsActivePayload },
{ u"OnlineAutoFormat", IsActivePayload },
{ u"SubScript", IsActivePayload },
{ u"SuperScript", IsActivePayload },
{ u"Strikeout", IsActivePayload },
{ u"Underline", IsActivePayload },
{ u"ModifiedStatus", IsActivePayload },
{ u"TrackChanges", IsActivePayload },
{ u"ShowTrackedChanges", IsActivePayload },
{ u"AlignLeft", IsActivePayload },
{ u"AlignHorizontalCenter", IsActivePayload },
{ u"AlignRight", IsActivePayload },
{ u"DocumentRepair", IsActivePayload },
{ u"ObjectAlignLeft", IsActivePayload },
{ u"ObjectAlignRight", IsActivePayload },
{ u"AlignCenter", IsActivePayload },
{ u"AlignUp", IsActivePayload },
{ u"AlignMiddle", IsActivePayload },
{ u"AlignDown", IsActivePayload },
{ u"TraceChangeMode", IsActivePayload },
{ u"FormatPaintbrush", IsActivePayload },
{ u"FreezePanes", IsActivePayload },
{ u"Sidebar", IsActivePayload },
{ u"SpacePara1", IsActivePayload },
{ u"SpacePara15", IsActivePayload },
{ u"SpacePara2", IsActivePayload },
{ u"DataFilterAutoFilter", IsActivePayload },
{ u"CellProtection", IsActivePayload },
{ u"NormalMultiPaneGUI", IsActivePayload },
{ u"NotesMode", IsActivePayload },
{ u"SlideMasterPage", IsActivePayload },
{ u"CharFontName", FontNamePayload },
{ u"FontHeight", FontHeightPayload },
{ u"StyleApply", StyleApplyPayload },
{ u"BackColor", ColorPayload },
{ u"BackgroundColor", ColorPayload },
{ u"TableCellBackgroundColor", ColorPayload },
{ u"CharBackColor", ColorPayload },
{ u"Color", ColorPayload },
{ u"FontColor", ColorPayload },
{ u"FrameLineColor", ColorPayload },
{ u"GlowColor", ColorPayload },
{ u"Undo", UndoRedoPayload },
{ u"Redo", UndoRedoPayload },
{ u"Cut", EnabledPayload },
{ u"Copy", EnabledPayload },
{ u"Paste", EnabledPayload },
{ u"SelectAll", EnabledPayload },
{ u"InsertAnnotation", EnabledPayload },
{ u"DeleteAnnotation", EnabledPayload },
{ u"ResolveAnnotation", EnabledPayload },
{ u"ResolveAnnotationThread", EnabledPayload },
{ u"PromoteComment", EnabledPayload },
{ u"InsertRowsBefore", EnabledPayload },
{ u"InsertRowsAfter", EnabledPayload },
{ u"InsertColumnsBefore", EnabledPayload },
{ u"InsertColumnsAfter", EnabledPayload },
{ u"NameGroup", EnabledPayload },
{ u"ObjectTitleDescription", EnabledPayload },
{ u"MergeCells", EnabledPayload },
{ u"InsertObjectChart", EnabledPayload },
{ u"InsertSection", EnabledPayload },
{ u"InsertPagebreak", EnabledPayload },
{ u"InsertColumnBreak", EnabledPayload },
{ u"HyperlinkDialog", EnabledPayload },
{ u"InsertSymbol", EnabledPayload },
{ u"InsertPage", EnabledPayload },
{ u"DeletePage", EnabledPayload },
{ u"DuplicatePage", EnabledPayload },
{ u"DeleteRows", EnabledPayload },
{ u"DeleteColumns", EnabledPayload },
{ u"DeleteTable", EnabledPayload },
{ u"SelectTable", EnabledPayload },
{ u"EntireRow", EnabledPayload },
{ u"EntireColumn", EnabledPayload },
{ u"EntireCell", EnabledPayload },
{ u"SortAscending", EnabledPayload },
{ u"SortDescending", EnabledPayload },
{ u"AcceptAllTrackedChanges", EnabledPayload },
{ u"RejectAllTrackedChanges", EnabledPayload },
{ u"AcceptTrackedChange", EnabledPayload },
{ u"RejectTrackedChange", EnabledPayload },
{ u"AcceptTrackedChangeToNext", EnabledPayload },
{ u"RejectTrackedChangeToNext", EnabledPayload },
{ u"NextTrackedChange", EnabledPayload },
{ u"PreviousTrackedChange", EnabledPayload },
{ u"FormatGroup", EnabledPayload },
{ u"ObjectBackOne", EnabledPayload },
{ u"SendToBack", EnabledPayload },
{ u"ObjectForwardOne", EnabledPayload },
{ u"BringToFront", EnabledPayload },
{ u"WrapRight", EnabledPayload },
{ u"WrapThrough", EnabledPayload },
{ u"WrapLeft", EnabledPayload },
{ u"WrapIdeal", EnabledPayload },
{ u"WrapOn", EnabledPayload },
{ u"WrapOff", EnabledPayload },
{ u"UpdateCurIndex", EnabledPayload },
{ u"InsertCaptionDialog", EnabledPayload },
{ u"SplitTable", EnabledPayload },
{ u"SplitCell", EnabledPayload },
{ u"DeleteNote", EnabledPayload },
{ u"AcceptChanges", EnabledPayload },
{ u"SetDefault", EnabledPayload },
{ u"ParaspaceIncrease", EnabledPayload },
{ u"ParaspaceDecrease", EnabledPayload },
{ u"TableDialog", EnabledPayload },
{ u"FormatCellDialog", EnabledPayload },
{ u"FontDialog", EnabledPayload },
{ u"ParagraphDialog", EnabledPayload },
{ u"OutlineBullet", EnabledPayload },
{ u"InsertIndexesEntry", EnabledPayload },
{ u"TransformDialog", EnabledPayload },
{ u"EditRegion", EnabledPayload },
{ u"ThesaurusDialog", EnabledPayload },
{ u"OutlineRight", EnabledPayload },
{ u"OutlineLeft", EnabledPayload },
{ u"OutlineDown", EnabledPayload },
{ u"OutlineUp", EnabledPayload },
{ u"FormatArea", EnabledPayload },
{ u"FormatLine", EnabledPayload },
{ u"FormatColumns", EnabledPayload },
{ u"Watermark", EnabledPayload },
{ u"InsertBreak", EnabledPayload },
{ u"InsertEndnote", EnabledPayload },
{ u"InsertFootnote", EnabledPayload },
{ u"InsertReferenceField", EnabledPayload },
{ u"InsertBookmark", EnabledPayload },
{ u"InsertAuthoritiesEntry", EnabledPayload },
{ u"InsertMultiIndex", EnabledPayload },
{ u"InsertField", EnabledPayload },
{ u"PageNumberWizard", EnabledPayload },
{ u"InsertPageNumberField", EnabledPayload },
{ u"InsertPageCountField", EnabledPayload },
{ u"InsertDateField", EnabledPayload },
{ u"InsertTitleField", EnabledPayload },
{ u"InsertFieldCtrl", EnabledPayload },
{ u"CharmapControl", EnabledPayload },
{ u"EnterGroup", EnabledPayload },
{ u"LeaveGroup", EnabledPayload },
{ u"Combine", EnabledPayload },
{ u"Merge", EnabledPayload },
{ u"Dismantle", EnabledPayload },
{ u"Substract", EnabledPayload },
{ u"DistributeSelection", EnabledPayload },
{ u"Intersect", EnabledPayload },
{ u"ResetAttributes", EnabledPayload },
{ u"IncrementIndent", EnabledPayload },
{ u"DecrementIndent", EnabledPayload },
{ u"EditHeaderAndFooter", EnabledPayload },
{ u"InsertSparkline", EnabledPayload },
{ u"DeleteSparkline", EnabledPayload },
{ u"DeleteSparklineGroup", EnabledPayload },
{ u"EditSparklineGroup", EnabledPayload },
{ u"EditSparkline", EnabledPayload },
{ u"GroupSparklines", EnabledPayload },
{ u"UngroupSparklines", EnabledPayload },
{ u"FormatSparklineMenu", EnabledPayload },
{ u"DataDataPilotRun", EnabledPayload },
{ u"RecalcPivotTable", EnabledPayload },
{ u"DeletePivotTable", EnabledPayload },
{ u"NumberFormatDecDecimals", EnabledPayload },
{ u"NumberFormatIncDecimals", EnabledPayload },
{ u"Protect", EnabledPayload },
{ u"UnsetCellsReadOnly", EnabledPayload },
{ u"ContentControlProperties", EnabledPayload },
{ u"DeleteContentControl", EnabledPayload },
{ u"InsertCheckboxContentControl", EnabledPayload },
{ u"InsertContentControl", EnabledPayload },
{ u"InsertDateContentControl", EnabledPayload },
{ u"InsertDropdownContentControl", EnabledPayload },
{ u"InsertPlainTextContentControl", EnabledPayload },
{ u"InsertPictureContentControl", EnabledPayload },
{ u"ChangeBezier", EnabledPayload },
{ u"DistributeHorzCenter", EnabledPayload },
{ u"DistributeHorzDistance", EnabledPayload },
{ u"DistributeHorzLeft", EnabledPayload },
{ u"DistributeHorzRight", EnabledPayload },
{ u"DistributeVertBottom", EnabledPayload },
{ u"DistributeVertCenter", EnabledPayload },
{ u"DistributeVertDistance", EnabledPayload },
{ u"DistributeVertTop", EnabledPayload },
{ u"AnimationEffects", EnabledPayload },
{ u"ExecuteAnimationEffect", EnabledPayload },
{ u"ParaLeftToRight", ParaDirectionPayload },
{ u"ParaRightToLeft", ParaDirectionPayload },
{ u"AssignLayout", Int32Payload },
{ u"StatusSelectionMode", Int32Payload },
{ u"Signature", Int32Payload },
{ u"SelectionMode", Int32Payload },
{ u"StatusBarFunc", Int32Payload },
{ u"TransformPosX", TransformPayload },
{ u"TransformPosY", TransformPayload },
{ u"TransformWidth", TransformPayload },
{ u"TransformHeight", TransformPayload },
{ u"StatusDocPos", StringPayload },
{ u"StatusPageStyle", StringPayload },
{ u"StateWordCount", StringPayload },
{ u"PageStyleName", StringPayload },
{ u"PageStatus", StringPayload },
{ u"LayoutStatus", StringPayload },
{ u"Scale", StringPayload },
{ u"Context", StringPayload },
{ u"RowColSelCount", RowColSelCountPayload },
{ u"StateTableCell", StateTableCellPayload },
{ u"InsertMode", BooleanPayload },
{ u"WrapText", BooleanPayload },
{ u"NumberFormatCurrency", BooleanPayload },
{ u"NumberFormatPercent", BooleanPayload },
{ u"NumberFormatDecimal", BooleanPayload },
{ u"NumberFormatDate", BooleanPayload },
{ u"ShowResolvedAnnotations", BooleanPayload },
{ u"ToggleMergeCells", BooleanOrDisabledPayload },
{ u"SheetRightToLeft", BooleanOrDisabledPayload },
{ u"ToggleSheetGrid", BooleanOrDisabledPayload },
{ u"EditDoc", BooleanOrDisabledPayload },
{ u"Position", PointPayload },
{ u"FreezePanesColumn", PointPayload },
{ u"FreezePanesRow", PointPayload },
{ u"Size", SizePayload },
{ u"LanguageStatus", StringOrStrSeqPayload },
{ u"StatePageNumber", StringOrStrSeqPayload },
{ u"InsertPageHeader", StrSeqPayload },
{ u"InsertPageFooter", StrSeqPayload },
{ u"TableColumWidth", TableSizePayload },
{ u"TableRowHeight", TableSizePayload },
constexpr auto enumToPayload = frozen::make_unordered_map<PayloadType, PayloadGetter_t>({
{ PayloadType::None, nullptr },
{ PayloadType::IsActivePayload, IsActivePayload },
{ PayloadType::FontNamePayload, FontNamePayload },
{ PayloadType::FontHeightPayload, FontHeightPayload },
{ PayloadType::StyleApplyPayload, StyleApplyPayload },
{ PayloadType::ColorPayload, ColorPayload },
{ PayloadType::UndoRedoPayload, UndoRedoPayload },
{ PayloadType::EnabledPayload, EnabledPayload },
{ PayloadType::ParaDirectionPayload, ParaDirectionPayload },
{ PayloadType::Int32Payload, Int32Payload },
{ PayloadType::TransformPayload, TransformPayload },
{ PayloadType::StringPayload, StringPayload },
{ PayloadType::RowColSelCountPayload, RowColSelCountPayload },
{ PayloadType::StateTableCellPayload, StateTableCellPayload },
{ PayloadType::BooleanPayload, BooleanPayload },
{ PayloadType::BooleanOrDisabledPayload, BooleanOrDisabledPayload },
{ PayloadType::PointPayload, PointPayload },
{ PayloadType::SizePayload, SizePayload },
{ PayloadType::StringOrStrSeqPayload, StringOrStrSeqPayload },
{ PayloadType::StrSeqPayload, StrSeqPayload },
{ PayloadType::TableSizePayload, TableSizePayload },
});
}
const std::map<std::u16string_view, KitUnoCommand>& GetKitUnoCommandList()
{
static std::map<std::u16string_view, KitUnoCommand> aUnoCommandList = {
{ u"Bold", { PayloadType::IsActivePayload, true } },
{ u"CenterPara", { PayloadType::IsActivePayload, true } },
{ u"CharBackgroundExt", { PayloadType::IsActivePayload, true } },
{ u"ControlCodes", { PayloadType::IsActivePayload, true } },
{ u"DefaultBullet", { PayloadType::IsActivePayload, true } },
{ u"DefaultNumbering", { PayloadType::IsActivePayload, true } },
{ u"Italic", { PayloadType::IsActivePayload, true } },
{ u"JustifyPara", { PayloadType::IsActivePayload, true } },
{ u"LeftPara", { PayloadType::IsActivePayload, true } },
{ u"OutlineFont", { PayloadType::IsActivePayload, true } },
{ u"RightPara", { PayloadType::IsActivePayload, true } },
{ u"Shadowed", { PayloadType::IsActivePayload, true } },
{ u"SpellOnline", { PayloadType::IsActivePayload, true } },
{ u"OnlineAutoFormat", { PayloadType::IsActivePayload, true } },
{ u"SubScript", { PayloadType::IsActivePayload, true } },
{ u"SuperScript", { PayloadType::IsActivePayload, true } },
{ u"Strikeout", { PayloadType::IsActivePayload, true } },
{ u"Underline", { PayloadType::IsActivePayload, true } },
{ u"ModifiedStatus", { PayloadType::IsActivePayload, true } },
{ u"TrackChanges", { PayloadType::IsActivePayload, true } },
{ u"ShowTrackedChanges", { PayloadType::IsActivePayload, true } },
{ u"AlignLeft", { PayloadType::IsActivePayload, true } },
{ u"AlignHorizontalCenter", { PayloadType::IsActivePayload, true } },
{ u"AlignRight", { PayloadType::IsActivePayload, true } },
{ u"DocumentRepair", { PayloadType::IsActivePayload, true } },
{ u"ObjectAlignLeft", { PayloadType::IsActivePayload, true } },
{ u"ObjectAlignRight", { PayloadType::IsActivePayload, true } },
{ u"AlignCenter", { PayloadType::IsActivePayload, true } },
{ u"AlignUp", { PayloadType::IsActivePayload, true } },
{ u"AlignMiddle", { PayloadType::IsActivePayload, true } },
{ u"AlignDown", { PayloadType::IsActivePayload, true } },
{ u"TraceChangeMode", { PayloadType::IsActivePayload, true } },
{ u"FormatPaintbrush", { PayloadType::IsActivePayload, true } },
{ u"FreezePanes", { PayloadType::IsActivePayload, true } },
{ u"Sidebar", { PayloadType::IsActivePayload, true } },
{ u"SpacePara1", { PayloadType::IsActivePayload, true } },
{ u"SpacePara15", { PayloadType::IsActivePayload, true } },
{ u"SpacePara2", { PayloadType::IsActivePayload, true } },
{ u"DataFilterAutoFilter", { PayloadType::IsActivePayload, true } },
{ u"CellProtection", { PayloadType::IsActivePayload, true } },
{ u"NormalMultiPaneGUI", { PayloadType::IsActivePayload, false } },
{ u"NotesMode", { PayloadType::IsActivePayload, false } },
{ u"SlideMasterPage", { PayloadType::IsActivePayload, false } },
{ u"CharFontName", { PayloadType::FontNamePayload, true } },
{ u"FontHeight", { PayloadType::FontHeightPayload, true } },
{ u"StyleApply", { PayloadType::StyleApplyPayload, true } },
{ u"BackColor", { PayloadType::ColorPayload, false } },
{ u"BackgroundColor", { PayloadType::ColorPayload, true } },
{ u"TableCellBackgroundColor", { PayloadType::ColorPayload, true } },
{ u"CharBackColor", { PayloadType::ColorPayload, true } },
{ u"Color", { PayloadType::ColorPayload, true } },
{ u"FontColor", { PayloadType::ColorPayload, true } },
{ u"FrameLineColor", { PayloadType::ColorPayload, true } },
{ u"GlowColor", { PayloadType::ColorPayload, false } },
{ u"Undo", { PayloadType::UndoRedoPayload, true } },
{ u"Redo", { PayloadType::UndoRedoPayload, true } },
{ u"Cut", { PayloadType::EnabledPayload, true } },
{ u"Copy", { PayloadType::EnabledPayload, true } },
{ u"Paste", { PayloadType::EnabledPayload, true } },
{ u"SelectAll", { PayloadType::EnabledPayload, true } },
{ u"InsertAnnotation", { PayloadType::EnabledPayload, true } },
{ u"DeleteAnnotation", { PayloadType::EnabledPayload, true } },
{ u"ResolveAnnotation", { PayloadType::EnabledPayload, false } },
{ u"ResolveAnnotationThread", { PayloadType::EnabledPayload, false } },
{ u"PromoteComment", { PayloadType::EnabledPayload, true } },
{ u"InsertRowsBefore", { PayloadType::EnabledPayload, true } },
{ u"InsertRowsAfter", { PayloadType::EnabledPayload, true } },
{ u"InsertColumnsBefore", { PayloadType::EnabledPayload, true } },
{ u"InsertColumnsAfter", { PayloadType::EnabledPayload, true } },
{ u"NameGroup", { PayloadType::EnabledPayload, true } },
{ u"ObjectTitleDescription", { PayloadType::EnabledPayload, true } },
{ u"MergeCells", { PayloadType::EnabledPayload, true } },
{ u"InsertObjectChart", { PayloadType::EnabledPayload, true } },
{ u"InsertSection", { PayloadType::EnabledPayload, true } },
{ u"InsertPagebreak", { PayloadType::EnabledPayload, true } },
{ u"InsertColumnBreak", { PayloadType::EnabledPayload, true } },
{ u"HyperlinkDialog", { PayloadType::EnabledPayload, true } },
{ u"InsertSymbol", { PayloadType::EnabledPayload, true } },
{ u"InsertPage", { PayloadType::EnabledPayload, true } },
{ u"DeletePage", { PayloadType::EnabledPayload, true } },
{ u"DuplicatePage", { PayloadType::EnabledPayload, true } },
{ u"DeleteRows", { PayloadType::EnabledPayload, true } },
{ u"DeleteColumns", { PayloadType::EnabledPayload, true } },
{ u"DeleteTable", { PayloadType::EnabledPayload, true } },
{ u"SelectTable", { PayloadType::EnabledPayload, true } },
{ u"EntireRow", { PayloadType::EnabledPayload, true } },
{ u"EntireColumn", { PayloadType::EnabledPayload, true } },
{ u"EntireCell", { PayloadType::EnabledPayload, true } },
{ u"SortAscending", { PayloadType::EnabledPayload, true } },
{ u"SortDescending", { PayloadType::EnabledPayload, true } },
{ u"AcceptAllTrackedChanges", { PayloadType::EnabledPayload, true } },
{ u"RejectAllTrackedChanges", { PayloadType::EnabledPayload, true } },
{ u"AcceptTrackedChange", { PayloadType::EnabledPayload, true } },
{ u"RejectTrackedChange", { PayloadType::EnabledPayload, true } },
{ u"AcceptTrackedChangeToNext", { PayloadType::EnabledPayload, true } },
{ u"RejectTrackedChangeToNext", { PayloadType::EnabledPayload, true } },
{ u"NextTrackedChange", { PayloadType::EnabledPayload, true } },
{ u"PreviousTrackedChange", { PayloadType::EnabledPayload, true } },
{ u"FormatGroup", { PayloadType::EnabledPayload, true } },
{ u"ObjectBackOne", { PayloadType::EnabledPayload, true } },
{ u"SendToBack", { PayloadType::EnabledPayload, true } },
{ u"ObjectForwardOne", { PayloadType::EnabledPayload, true } },
{ u"BringToFront", { PayloadType::EnabledPayload, true } },
{ u"WrapRight", { PayloadType::EnabledPayload, true } },
{ u"WrapThrough", { PayloadType::EnabledPayload, true } },
{ u"WrapLeft", { PayloadType::EnabledPayload, true } },
{ u"WrapIdeal", { PayloadType::EnabledPayload, true } },
{ u"WrapOn", { PayloadType::EnabledPayload, true } },
{ u"WrapOff", { PayloadType::EnabledPayload, true } },
{ u"UpdateCurIndex", { PayloadType::EnabledPayload, true } },
{ u"InsertCaptionDialog", { PayloadType::EnabledPayload, true } },
{ u"SplitTable", { PayloadType::EnabledPayload, true } },
{ u"SplitCell", { PayloadType::EnabledPayload, true } },
{ u"DeleteNote", { PayloadType::EnabledPayload, true } },
{ u"AcceptChanges", { PayloadType::EnabledPayload, true } },
{ u"SetDefault", { PayloadType::EnabledPayload, true } },
{ u"ParaspaceIncrease", { PayloadType::EnabledPayload, true } },
{ u"ParaspaceDecrease", { PayloadType::EnabledPayload, true } },
{ u"TableDialog", { PayloadType::EnabledPayload, true } },
{ u"FormatCellDialog", { PayloadType::EnabledPayload, true } },
{ u"FontDialog", { PayloadType::EnabledPayload, true } },
{ u"ParagraphDialog", { PayloadType::EnabledPayload, true } },
{ u"OutlineBullet", { PayloadType::EnabledPayload, true } },
{ u"InsertIndexesEntry", { PayloadType::EnabledPayload, true } },
{ u"TransformDialog", { PayloadType::EnabledPayload, true } },
{ u"EditRegion", { PayloadType::EnabledPayload, true } },
{ u"ThesaurusDialog", { PayloadType::EnabledPayload, true } },
{ u"OutlineRight", { PayloadType::EnabledPayload, false } },
{ u"OutlineLeft", { PayloadType::EnabledPayload, false } },
{ u"OutlineDown", { PayloadType::EnabledPayload, false } },
{ u"OutlineUp", { PayloadType::EnabledPayload, false } },
{ u"FormatArea", { PayloadType::EnabledPayload, true } },
{ u"FormatLine", { PayloadType::EnabledPayload, true } },
{ u"FormatColumns", { PayloadType::EnabledPayload, true } },
{ u"Watermark", { PayloadType::EnabledPayload, true } },
{ u"InsertBreak", { PayloadType::EnabledPayload, true } },
{ u"InsertEndnote", { PayloadType::EnabledPayload, true } },
{ u"InsertFootnote", { PayloadType::EnabledPayload, true } },
{ u"InsertReferenceField", { PayloadType::EnabledPayload, true } },
{ u"InsertBookmark", { PayloadType::EnabledPayload, true } },
{ u"InsertAuthoritiesEntry", { PayloadType::EnabledPayload, true } },
{ u"InsertMultiIndex", { PayloadType::EnabledPayload, true } },
{ u"InsertField", { PayloadType::EnabledPayload, true } },
{ u"PageNumberWizard", { PayloadType::EnabledPayload, true } },
{ u"InsertPageNumberField", { PayloadType::EnabledPayload, true } },
{ u"InsertPageCountField", { PayloadType::EnabledPayload, true } },
{ u"InsertDateField", { PayloadType::EnabledPayload, true } },
{ u"InsertTitleField", { PayloadType::EnabledPayload, true } },
{ u"InsertFieldCtrl", { PayloadType::EnabledPayload, true } },
{ u"CharmapControl", { PayloadType::EnabledPayload, true } },
{ u"EnterGroup", { PayloadType::EnabledPayload, true } },
{ u"LeaveGroup", { PayloadType::EnabledPayload, true } },
{ u"Combine", { PayloadType::EnabledPayload, true } },
{ u"Merge", { PayloadType::EnabledPayload, true } },
{ u"Dismantle", { PayloadType::EnabledPayload, true } },
{ u"Substract", { PayloadType::EnabledPayload, true } },
{ u"DistributeSelection", { PayloadType::EnabledPayload, true } },
{ u"Intersect", { PayloadType::EnabledPayload, true } },
{ u"ResetAttributes", { PayloadType::EnabledPayload, true } },
{ u"IncrementIndent", { PayloadType::EnabledPayload, true } },
{ u"DecrementIndent", { PayloadType::EnabledPayload, true } },
{ u"EditHeaderAndFooter", { PayloadType::EnabledPayload, true } },
{ u"InsertSparkline", { PayloadType::EnabledPayload, true } },
{ u"DeleteSparkline", { PayloadType::EnabledPayload, true } },
{ u"DeleteSparklineGroup", { PayloadType::EnabledPayload, true } },
{ u"EditSparklineGroup", { PayloadType::EnabledPayload, true } },
{ u"EditSparkline", { PayloadType::EnabledPayload, true } },
{ u"GroupSparklines", { PayloadType::EnabledPayload, true } },
{ u"UngroupSparklines", { PayloadType::EnabledPayload, true } },
{ u"FormatSparklineMenu", { PayloadType::EnabledPayload, true } },
{ u"DataDataPilotRun", { PayloadType::EnabledPayload, true } },
{ u"RecalcPivotTable", { PayloadType::EnabledPayload, true } },
{ u"DeletePivotTable", { PayloadType::EnabledPayload, true } },
{ u"NumberFormatDecDecimals", { PayloadType::EnabledPayload, true } },
{ u"NumberFormatIncDecimals", { PayloadType::EnabledPayload, true } },
{ u"Protect", { PayloadType::EnabledPayload, true } },
{ u"UnsetCellsReadOnly", { PayloadType::EnabledPayload, true } },
{ u"ContentControlProperties", { PayloadType::EnabledPayload, true } },
{ u"DeleteContentControl", { PayloadType::EnabledPayload, true } },
{ u"InsertCheckboxContentControl", { PayloadType::EnabledPayload, true } },
{ u"InsertContentControl", { PayloadType::EnabledPayload, true } },
{ u"InsertDateContentControl", { PayloadType::EnabledPayload, true } },
{ u"InsertDropdownContentControl", { PayloadType::EnabledPayload, true } },
{ u"InsertPlainTextContentControl", { PayloadType::EnabledPayload, true } },
{ u"InsertPictureContentControl", { PayloadType::EnabledPayload, true } },
{ u"ChangeBezier", { PayloadType::EnabledPayload, true } },
{ u"DistributeHorzCenter", { PayloadType::EnabledPayload, true } },
{ u"DistributeHorzDistance", { PayloadType::EnabledPayload, true } },
{ u"DistributeHorzLeft", { PayloadType::EnabledPayload, true } },
{ u"DistributeHorzRight", { PayloadType::EnabledPayload, true } },
{ u"DistributeVertBottom", { PayloadType::EnabledPayload, true } },
{ u"DistributeVertCenter", { PayloadType::EnabledPayload, true } },
{ u"DistributeVertDistance", { PayloadType::EnabledPayload, true } },
{ u"DistributeVertTop", { PayloadType::EnabledPayload, true } },
{ u"AnimationEffects", { PayloadType::EnabledPayload, true } },
{ u"ExecuteAnimationEffect", { PayloadType::EnabledPayload, true } },
{ u"ParaLeftToRight", { PayloadType::ParaDirectionPayload, true } },
{ u"ParaRightToLeft", { PayloadType::ParaDirectionPayload, true } },
{ u"AssignLayout", { PayloadType::Int32Payload, true } },
{ u"StatusSelectionMode", { PayloadType::Int32Payload, true } },
{ u"Signature", { PayloadType::Int32Payload, false } },
{ u"SelectionMode", { PayloadType::Int32Payload, true } },
{ u"StatusBarFunc", { PayloadType::Int32Payload, true } },
{ u"TransformPosX", { PayloadType::TransformPayload, true } },
{ u"TransformPosY", { PayloadType::TransformPayload, true } },
{ u"TransformWidth", { PayloadType::TransformPayload, true } },
{ u"TransformHeight", { PayloadType::TransformPayload, true } },
{ u"StatusDocPos", { PayloadType::StringPayload, true } },
{ u"StatusPageStyle", { PayloadType::StringPayload, true } },
{ u"StateWordCount", { PayloadType::StringPayload, true } },
{ u"PageStyleName", { PayloadType::StringPayload, false } },
{ u"PageStatus", { PayloadType::StringPayload, true } },
{ u"LayoutStatus", { PayloadType::StringPayload, true } },
{ u"Scale", { PayloadType::StringPayload, true } },
{ u"Context", { PayloadType::StringPayload, true } },
{ u"RowColSelCount", { PayloadType::RowColSelCountPayload, true } },
{ u"StateTableCell", { PayloadType::StateTableCellPayload, true } },
{ u"InsertMode", { PayloadType::BooleanPayload, true } },
{ u"WrapText", { PayloadType::BooleanPayload, true } },
{ u"NumberFormatCurrency", { PayloadType::BooleanPayload, true } },
{ u"NumberFormatPercent", { PayloadType::BooleanPayload, true } },
{ u"NumberFormatDecimal", { PayloadType::BooleanPayload, true } },
{ u"NumberFormatDate", { PayloadType::BooleanPayload, true } },
{ u"ShowResolvedAnnotations", { PayloadType::BooleanPayload, true } },
{ u"ToggleMergeCells", { PayloadType::BooleanOrDisabledPayload, true } },
{ u"SheetRightToLeft", { PayloadType::BooleanOrDisabledPayload, true } },
{ u"ToggleSheetGrid", { PayloadType::BooleanOrDisabledPayload, true } },
{ u"EditDoc", { PayloadType::BooleanOrDisabledPayload, true } },
{ u"Position", { PayloadType::PointPayload, false } },
{ u"FreezePanesColumn", { PayloadType::PointPayload, true } },
{ u"FreezePanesRow", { PayloadType::PointPayload, true } },
{ u"Size", { PayloadType::SizePayload, false } },
{ u"LanguageStatus", { PayloadType::StringOrStrSeqPayload, true } },
{ u"StatePageNumber", { PayloadType::StringOrStrSeqPayload, true } },
{ u"InsertPageHeader", { PayloadType::StrSeqPayload, true } },
{ u"InsertPageFooter", { PayloadType::StrSeqPayload, true } },
{ u"TableColumWidth", { PayloadType::TableSizePayload, false } },
{ u"TableRowHeight", { PayloadType::TableSizePayload, false } },
{ u"BorderInner", { PayloadType::None, true } },
{ u"BorderOuter", { PayloadType::None, true } },
{ u"ChangeTheme", { PayloadType::None, true } },
{ u"DeleteSlide", { PayloadType::None, true } },
{ u"DuplicateSlide", { PayloadType::None, true } },
{ u"InsertSlide", { PayloadType::None, true } },
{ u"JumpToMark", { PayloadType::None, true } },
{ u"MoveKeepInsertMode", { PayloadType::None, true } },
{ u"Orientation", { PayloadType::None, true } },
{ u"ReplyComment", { PayloadType::None, true } },
{ u"ResolveComment", { PayloadType::None, true } },
{ u"ResolveCommentThread", { PayloadType::None, true } },
{ u"RunMacro", { PayloadType::None, true } },
};
return aUnoCommandList;
}
static void InterceptLOKStateChangeEvent(sal_uInt16 nSID, SfxViewFrame* pViewFrame, const css::frame::FeatureStateEvent& aEvent, const SfxPoolItem* pState)
{
const SfxViewShell* pViewShell = pViewFrame->GetViewShell();
if (!comphelper::LibreOfficeKit::isActive() || !pViewShell)
return;
auto handler = handlers.find(aEvent.FeatureURL.Path);
if (handler == handlers.end())
const std::map<std::u16string_view, KitUnoCommand>& rUnoCommandList = GetKitUnoCommandList();
auto handler = rUnoCommandList.find(aEvent.FeatureURL.Path);
if (handler == rUnoCommandList.end())
{
// Try to send JSON state version
SfxLokHelper::sendUnoStatus(pViewShell, pState);
@@ -1424,8 +1469,11 @@ static void InterceptLOKStateChangeEvent(sal_uInt16 nSID, SfxViewFrame* pViewFra
return;
}
pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
handler->second(nSID, pViewFrame, aEvent, pState));
auto payloadIter = enumToPayload.find(handler->second.payloadType);
PayloadGetter_t pFunct = payloadIter != enumToPayload.end() ? payloadIter->second : nullptr;
if (pFunct != nullptr)
pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
pFunct(nSID, pViewFrame, aEvent, pState));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */