/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * 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/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
if( SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART) )
{ //SetNumRuleStart(true) restarts the numbering at the value //that is defined at the starting point of the numbering level //otherwise the SetNodeNumStart() value determines the start //if it's set to something different than USHRT_MAX
// Default value for restart value has to be USHRT_MAX // in order to indicate that the restart value of the list // style has to be used on restart.
sal_uInt16 nNumStart = USHRT_MAX; if( SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART_AT) )
{
nNumStart = pSet->Get(FN_NUMBER_NEWSTART_AT).GetValue();
}
rWrtSh.SetNumRuleStart(bStart, pPaM);
rWrtSh.SetNodeNumStart(nNumStart);
} elseif( SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART_AT) )
{
rWrtSh.SetNodeNumStart(pSet->Get(FN_NUMBER_NEWSTART_AT).GetValue());
rWrtSh.SetNumRuleStart(false, pPaM);
} // #i56253# if ( bUndoNeeded )
{
rWrtSh.EndUndo( SwUndoId::INSATTR );
}
}
// Update the bookmark to point to the new content.
SwPaM aPasteStart(pMark->GetMarkEnd());
aPasteStart.Move(fnMoveForward, GoInContent);
SwPaM aStartMarker(pMark->GetMarkStart(), *aPasteStart.GetPoint());
SwPaM aEndMarker(*aPasteEnd.GetPoint(), *aPasteEnd.GetPoint());
aEndMarker.GetMark()->AdjustContent(1);
pMark->SetMarkPos(*aPasteStart.GetPoint());
pMark->SetOtherMarkPos(*aPasteEnd.GetPoint());
bSortMarks = true;
// Remove markers. the start marker includes the old content as well.
rIDCO.DeleteAndJoin(aStartMarker);
rIDCO.DeleteAndJoin(aEndMarker);
}
} if (bSortMarks)
{
rIDMA.assureSortedMarkContainers();
}
// Update the bookmark to point to the new content.
SwPaM aPasteStart(pBookmark->GetMarkEnd());
aPasteStart.Move(fnMoveForward, GoInContent);
SwPaM aStartMarker(pBookmark->GetMarkStart(), *aPasteStart.GetPoint());
SwPaM aEndMarker(*aPasteEnd.GetPoint(), *aPasteEnd.GetPoint());
aEndMarker.GetMark()->AdjustContent(1);
pBookmark->SetMarkPos(*aPasteStart.GetPoint());
pBookmark->SetOtherMarkPos(*aPasteEnd.GetPoint());
// Remove markers. the start marker includes the old content as well.
rIDCO.DeleteAndJoin(aStartMarker);
rIDCO.DeleteAndJoin(aEndMarker);
rIDMA.assureSortedMarkContainers();
}
IDocumentMarkAccess* pMarkAccess = rWrtSh.GetDoc()->getIDocumentMarkAccess();
std::vector<sw::mark::MarkBase*> aRemovals; for (auto it = pMarkAccess->getBookmarksBegin(); it != pMarkAccess->getBookmarksEnd(); ++it)
{
sw::mark::Bookmark* pBookmark = *it;
assert(pBookmark);
if (!aBookmarkNamePrefix.isEmpty())
{ if (!pBookmark->GetName().toString().startsWith(aBookmarkNamePrefix))
{ continue;
}
}
aRemovals.push_back(pBookmark);
}
for (constauto& pMark : aRemovals)
{
pMarkAccess->deleteMark(pMark);
}
}
void DeleteFields(const SfxRequest& rReq, SwWrtShell& rWrtSh)
{ const SfxStringItem* pTypeName = rReq.GetArg<SfxStringItem>(FN_PARAM_1); if (!pTypeName || pTypeName->GetValue() != "SetRef")
{ // This is implemented so far only for reference marks. return;
}
if (bResize)
{ // Resize is actually some inserts, or deletes if (nId > nSeriesCount)
{
bInsert = true;
} elseif (nId < nSeriesCount)
{
bInsert = false;
} else
{ // Resize to the same size. No change needed returntrue;
}
}
// insert or delete if (bInsert)
{ // insert if (nId > nSeriesCount && !bResize) returnfalse;
int nInsertCount = bResize ? nId - nSeriesCount : 1;
// call dialog code if (bResize)
{ for (int i = 0; i < nInsertCount; i++)
{
xIDataProvider->insertDataSeries(nSeriesCount);
} returntrue;
}
xIDataProvider->insertDataSeries(nId);
} else
{ // delete 1 or more columns if (nId >= nSeriesCount) returnfalse; int nDeleteCount = bResize ? nSeriesCount - nId : 1; for (int i = 0; i < nDeleteCount; i++)
{
xDSContainer->removeDataSeries(aSeriesSeq[nId]);
}
} returntrue;
}
OUString sReplacement = aToggle.ReplacementString(); if( !sReplacement.isEmpty() )
{ if (rWrtSh.HasReadonlySel() && !rWrtSh.CursorInsideInputField())
{ // Only break if there's something to do; don't nag with the dialog otherwise
rWrtSh.InfoReadOnlyDialog(false); break;
}
OUString stringToReplace = aToggle.StringToReplace();
SwRewriter aRewriter;
aRewriter.AddRule( UndoArg1, stringToReplace );
aRewriter.AddRule( UndoArg2, SwResId(STR_YIELDS) );
aRewriter.AddRule( UndoArg3, sReplacement );
rWrtSh.StartUndo(SwUndoId::REPLACE, &aRewriter);
rWrtSh.GetCursor()->Normalize(false);
rWrtSh.ClearMark(); if( rWrtSh.IsInSelect() ) // cancel any in-progress keyboard selection as well
rWrtSh.EndSelect(); // Select exactly what was chosen for replacement
rWrtSh.GetCursor()->SetMark();
rWrtSh.GetCursor()->GetPoint()->AdjustContent(-stringToReplace.getLength());
rWrtSh.DelLeft();
rWrtSh.Insert2( sReplacement );
rWrtSh.EndUndo(SwUndoId::REPLACE, &aRewriter);
}
} break;
case SID_LANGUAGE_STATUS:
{ // get the language
OUString aNewLangText; const SfxStringItem* pItem2 = rReq.GetArg<SfxStringItem>(SID_LANGUAGE_STATUS); if (pItem2)
aNewLangText = pItem2->GetValue();
//!! Remember the view frame right now... //!! (call to GetView().GetViewFrame() will break if the //!! SwTextShell got destroyed meanwhile.)
SfxViewFrame& rViewFrame = GetView().GetViewFrame();
if (aNewLangText == "*")
{ // open the dialog "Tools/Options/Languages and Locales - General" // to set the documents default language
SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateVclDialog(GetView().GetFrameWeld(), SID_LANGUAGE_OPTIONS));
pDlg->Execute();
} else
{ //!! We have to use StartAction / EndAction bracketing in //!! order to prevent possible destruction of the SwTextShell //!! due to the selection changes coming below.
rWrtSh.StartAction(); // prevent view from jumping because of (temporary) selection changes
rWrtSh.LockView( true );
// setting the new language... if (!aNewLangText.isEmpty())
{ static constexpr OUString aSelectionLangPrefix(u"Current_"_ustr); static constexpr OUString aParagraphLangPrefix(u"Paragraph_"_ustr); static constexpr OUString aDocumentLangPrefix(u"Default_"_ustr);
sal_Int32 nPos = 0; bool bForSelection = true; bool bForParagraph = false; if (-1 != (nPos = aNewLangText.indexOf( aSelectionLangPrefix )))
{ // ... for the current selection
aNewLangText = aNewLangText.replaceAt(nPos, aSelectionLangPrefix.getLength(), u"");
bForSelection = true;
} elseif (-1 != (nPos = aNewLangText.indexOf(aParagraphLangPrefix)))
{ // ... for the current paragraph language
aNewLangText = aNewLangText.replaceAt(nPos, aParagraphLangPrefix.getLength(), u"");
bForSelection = true;
bForParagraph = true;
} elseif (-1 != (nPos = aNewLangText.indexOf(aDocumentLangPrefix)))
{ // ... as default document language
aNewLangText = aNewLangText.replaceAt(nPos, aDocumentLangPrefix.getLength(), u"");
bForSelection = false;
}
if (bForParagraph || !bForSelection)
{
rWrtSh.Push(); // save selection for later restoration
rWrtSh.ClearMark(); // fdo#67796: invalidate table crsr
}
if (bForParagraph)
SwLangHelper::SelectCurrentPara( rWrtSh );
if (!bForSelection) // document language to be changed...
{
rWrtSh.SelAll();
rWrtSh.ExtendedSelectAll();
}
// invalidate slot to get the new language displayed
rViewFrame.GetBindings().Invalidate( nSlot );
rReq.Done(); break;
}
case SID_THES:
{ // replace word/selection with text from selected sub menu entry
OUString aReplaceText; const SfxStringItem* pItem2 = rReq.GetArg(FN_PARAM_THES_WORD_REPLACE); if (pItem2)
aReplaceText = pItem2->GetValue(); if (!aReplaceText.isEmpty())
{
SwView &rView2 = rWrtSh.GetView(); constbool bSelection = rWrtSh.HasSelection(); const OUString aLookUpText = rView2.GetThesaurusLookUpText( bSelection );
rView2.InsertThesaurusSynonym( aReplaceText, aLookUpText, bSelection );
}
} break;
case SID_CHARMAP:
{
InsertSymbol( rReq );
} break; case FN_INSERT_FOOTNOTE: case FN_INSERT_ENDNOTE:
{
OUString aStr; const SfxStringItem* pFont = rReq.GetArg<SfxStringItem>(FN_PARAM_1); const SfxStringItem* pNameItem = rReq.GetArg<SfxStringItem>(nSlot); if ( pNameItem )
aStr = pNameItem->GetValue(); bool bFont = pFont && !pFont->GetValue().isEmpty();
rWrtSh.StartUndo( SwUndoId::UI_INSERT_FOOTNOTE );
rWrtSh.InsertFootnote( aStr, nSlot == FN_INSERT_ENDNOTE, !bFont ); if ( bFont )
{
rWrtSh.Left( SwCursorSkipMode::Chars, true, 1, false );
SfxItemSetFixed<RES_CHRATR_FONT, RES_CHRATR_FONT> aSet( rWrtSh.GetAttrPool() );
rWrtSh.GetCurAttr( aSet );
rWrtSh.SetAttrSet( aSet, SetAttrMode::DONTEXPAND );
rWrtSh.ResetSelect(nullptr, false, ScrollSizeMode::ScrollSizeDefault);
rWrtSh.EndSelect();
rWrtSh.GotoFootnoteText();
}
rWrtSh.EndUndo( SwUndoId::UI_INSERT_FOOTNOTE );
rReq.Done();
} break; case FN_INSERT_FOOTNOTE_DLG:
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
VclPtr<AbstractInsFootNoteDlg> pDlg(pFact->CreateInsFootNoteDlg(
GetView().GetFrameWeld(), rWrtSh));
pDlg->SetHelpId(GetStaticInterface()->GetSlot(nSlot)->GetCommand());
pDlg->StartExecuteAsync(
[this, pDlg] (sal_Int32 nResult)->void
{ if ( nResult == RET_OK )
{
pDlg->Apply(); const sal_uInt16 nId = pDlg->IsEndNote() ? FN_INSERT_ENDNOTE : FN_INSERT_FOOTNOTE;
SfxRequest aReq(GetView().GetViewFrame(), nId); if ( !pDlg->GetStr().isEmpty() )
aReq.AppendItem( SfxStringItem( nId, pDlg->GetStr() ) ); if ( !pDlg->GetFontName().isEmpty() )
aReq.AppendItem( SfxStringItem( FN_PARAM_1, pDlg->GetFontName() ) );
ExecuteSlot( aReq );
}
pDlg->disposeOnce();
}
);
rReq.Ignore();
} break; case FN_FORMAT_FOOTNOTE_DLG: case FN_FORMAT_CURRENT_FOOTNOTE_DLG:
{
GetView().ExecFormatFootnote(); break;
} case SID_INSERTDOC:
{
GetView().ExecuteInsertDoc( rReq, pItem ); break;
} case FN_FORMAT_RESET:
{ // Assure the folded outline button does not remain after resetting // RES_PARATTR_OUTLINELEVEL and that folded outline content that becomes unfolded due to // RES_PARATR_GRABBAG "OutlineContentVisibleAttr" being reset is shown for outlines set by // a style.
MakeAllOutlineContentTemporarilyVisible a(rWrtSh.GetDoc());
// #i78856, reset all attributes but not the language attributes // (for this build an array of all relevant attributes and // remove the languages from that)
o3tl::sorted_vector<sal_uInt16> aAttribs;
// also clear the direct formatting flag inside SwTableBox(es) if (SwFEShell* pFEShell = GetView().GetDocShell()->GetFEShell())
pFEShell->UpdateTableStyleFormatting(nullptr, true);
// tdf#160801 fix crash by delaying resetting of attributes // Calling SwWrtShell::ResetAttr() will sometimes delete the // current SwTextShell instance so call it after clearing the // direct formatting flag.
rWrtSh.ResetAttr( aAttribs );
if (pBookmarkText)
{
OUString aBookmarkText = pBookmarkText->GetValue(); // Split node to remember where the start position is. bool bSuccess = rWrtSh.GetDoc()->getIDocumentContentOperations().SplitNode(
*pCursorPos->GetPoint(), /*bChkTableStart=*/false); if (bSuccess)
{
SwPaM aBookmarkPam(*pCursorPos->GetPoint());
aBookmarkPam.Move(fnMoveBackward, GoInContent);
// Paste HTML content.
SwTranslateHelper::PasteHTMLToPaM(
rWrtSh, pCursorPos, aBookmarkText.toUtf8()); if (pCursorPos->GetPoint()->GetContentIndex() == 0)
{ // The paste created a last empty text node, remove it.
SwPaM aPam(*pCursorPos->GetPoint());
aPam.SetMark();
aPam.Move(fnMoveBackward, GoInContent);
rWrtSh.GetDoc()->getIDocumentContentOperations().DeleteAndJoin(aPam);
}
break;
} case FN_UPDATE_BOOKMARKS:
{ // This updates all bookmarks in the document that match the conditions specified in // rReq.
UpdateBookmarks(rReq, rWrtSh); break;
} case FN_UPDATE_BOOKMARK:
{ // This updates the bookmark under the cursor.
UpdateBookmark(rReq, rWrtSh); break;
} case FN_DELETE_BOOKMARK:
{ // This deletes a bookmark with the specified name. if (pItem && !rWrtSh.getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS))
{
IDocumentMarkAccess* const pMarkAccess = rWrtSh.getIDocumentMarkAccess();
pMarkAccess->deleteMark(pMarkAccess->findMark(SwMarkName(static_cast<const SfxStringItem*>(pItem)->GetValue())), false);
} break;
} case FN_DELETE_BOOKMARKS:
{ // This deletes all bookmarks in the document matching a specified prefix.
DeleteBookmarks(rReq, rWrtSh); break;
} case FN_DELETE_FIELDS:
{ // This deletes all fields in the document matching a specified type & prefix.
DeleteFields(rReq, rWrtSh); break;
} case FN_UPDATE_SECTIONS:
{
UpdateSections(rReq, rWrtSh); break;
} case FN_DELETE_SECTIONS:
{ // This deletes all sections in the document matching a specified prefix. Note that the // section is deleted, but not its contents.
DeleteSections(rReq, rWrtSh); break;
} case FN_DELETE_CONTENT_CONTROL:
{
DeleteContentControl( rWrtSh ); break;
} case FN_SET_REMINDER:
{ // collect and sort navigator reminder names
IDocumentMarkAccess* const pMarkAccess = rWrtSh.getIDocumentMarkAccess();
std::vector< SwMarkName > vNavMarkNames; for(auto ppMark = pMarkAccess->getAllMarksBegin();
ppMark != pMarkAccess->getAllMarksEnd();
++ppMark)
{ if( IDocumentMarkAccess::GetType(**ppMark) == IDocumentMarkAccess::MarkType::NAVIGATOR_REMINDER )
vNavMarkNames.push_back((*ppMark)->GetName());
}
std::sort(vNavMarkNames.begin(), vNavMarkNames.end());
// we are maxed out so delete the first one // this assumes that IDocumentMarkAccess generates Names in ascending order if(vNavMarkNames.size() == MAX_MARKS)
pMarkAccess->deleteMark(pMarkAccess->findMark(vNavMarkNames[0]), false);
break;
} case FN_AUTOFORMAT_REDLINE_APPLY:
{
SvxSwAutoFormatFlags aFlags(SvxAutoCorrCfg::Get().GetAutoCorrect()->GetSwFlags()); // This must always be false for the postprocessing.
aFlags.bAFormatByInput = false;
aFlags.bWithRedlining = true;
rWrtSh.AutoFormat( &aFlags, false );
aFlags.bWithRedlining = false;
SfxViewFrame& rVFrame = GetView().GetViewFrame(); if (rVFrame.HasChildWindow(FN_REDLINE_ACCEPT))
rVFrame.ToggleChildWindow(FN_REDLINE_ACCEPT);
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); auto xRequest = std::make_shared<SfxRequest>(rReq);
rReq.Ignore(); // the 'old' request is not relevant any more
VclPtr<AbstractSwModalRedlineAcceptDlg> pDlg(pFact->CreateSwModalRedlineAcceptDlg(GetView().GetEditWin().GetFrameWeld()));
pDlg->StartExecuteAsync(
[pDlg, xRequest=std::move(xRequest)] (sal_Int32 /*nResult*/)->void
{
pDlg->disposeOnce();
xRequest->Done();
}
);
} break;
case FN_AUTOFORMAT_APPLY:
{
SvxSwAutoFormatFlags aFlags(SvxAutoCorrCfg::Get().GetAutoCorrect()->GetSwFlags()); // This must always be false for the postprocessing.
aFlags.bAFormatByInput = false;
rWrtSh.AutoFormat( &aFlags, false );
rReq.Done();
} break; case FN_AUTOFORMAT_AUTO:
{
SvxAutoCorrCfg& rACfg = SvxAutoCorrCfg::Get(); bool bSet = pItem ? static_cast<const SfxBoolItem*>(pItem)->GetValue() : !rACfg.IsAutoFormatByInput(); if( bSet != rACfg.IsAutoFormatByInput() )
{
rACfg.SetAutoFormatByInput( bSet );
rACfg.Commit();
GetView().GetViewFrame().GetBindings().Invalidate( nSlot ); if ( !pItem )
rReq.AppendItem( SfxBoolItem( GetPool().GetWhichIDFromSlotID(nSlot), bSet ) );
rReq.Done();
}
} break; case FN_AUTO_CORRECT:
{ // At first set to blank as default.
rWrtSh.AutoCorrect( *SvxAutoCorrCfg::Get().GetAutoCorrect(), ' ' );
rReq.Done();
} break; case FN_TABLE_SORT_DIALOG: case FN_SORTING_DLG:
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
VclPtr<AbstractSwSortDlg> pDlg(pFact->CreateSwSortingDialog(GetView().GetFrameWeld(), rWrtSh)); auto xRequest = std::make_shared<SfxRequest>(rReq);
rReq.Ignore(); // the 'old' request is not relevant any more
pDlg->StartExecuteAsync(
[pDlg, xRequest=std::move(xRequest)] (sal_Int32 nResult)->void
{ if (nResult == RET_OK)
pDlg->Apply();
pDlg->disposeOnce();
xRequest->Done();
}
);
} break; case FN_NUMBERING_OUTLINE_DLG:
{
GetView().ExecNumberingOutline(GetPool());
rReq.Done();
} break; case FN_CALCULATE:
{
rtl::Reference<SwTransferable> pTransfer = new SwTransferable( rWrtSh );
pTransfer->CalculateAndCopy();
rReq.Done();
} break; case FN_GOTO_REFERENCE:
{
SwField *pField = rWrtSh.GetCurField(); if(pField && pField->GetTypeId() == SwFieldTypesEnum::GetRef)
{
rWrtSh.StartAllAction();
rWrtSh.SwCursorShell::GotoRefMark( static_cast<SwGetRefField*>(pField)->GetSetRefName(), static_cast<SwGetRefField*>(pField)->GetSubType(), static_cast<SwGetRefField*>(pField)->GetSeqNo(), static_cast<SwGetRefField*>(pField)->GetFlags() );
rWrtSh.EndAllAction();
rReq.Done();
}
} break; case FN_EDIT_FORMULA:
{ const sal_uInt16 nId = SwInputChild::GetChildWindowId();
SfxViewFrame& rVFrame = GetView().GetViewFrame(); if(pItem)
{ //if the ChildWindow is active it has to be removed if( rVFrame.HasChildWindow( nId ) )
{
rVFrame.ToggleChildWindow( nId );
rVFrame.GetBindings().InvalidateAll( true );
}
break; case FN_TABLE_UNSET_READ_ONLY:
{
rWrtSh.UnProtectTables();
} break; case SID_EDIT_HYPERLINK:
{ if (!rWrtSh.HasSelection())
{
SfxItemSetFixed<RES_TXTATR_INETFMT, RES_TXTATR_INETFMT> aSet(GetPool());
rWrtSh.GetCurAttr(aSet); if (SfxItemState::SET > aSet.GetItemState(RES_TXTATR_INETFMT))
{ // Didn't find a hyperlink to edit yet.
// If the cursor is just before an unselected hyperlink, // the dialog will not know that it should edit that hyperlink, // so in this case, first select it so the dialog will find the hyperlink. // The dialog would leave the hyperlink selected anyway after a successful edit // (although it isn't normally selected after a cancel, but oh well). if (!rWrtSh.SelectTextAttr(RES_TXTATR_INETFMT)) break;
}
}
GetView().GetViewFrame().SetChildWindow(SID_HYPERLINK_DIALOG, true);
} break; case SID_REMOVE_HYPERLINK:
{ bool bSel = rWrtSh.HasSelection(); if(!bSel)
{
rWrtSh.StartAction();
rWrtSh.Push(); if(!rWrtSh.SelectTextAttr( RES_TXTATR_INETFMT ))
rWrtSh.SelWrd();
} //now remove the attribute
rWrtSh.ResetAttr({ RES_TXTATR_INETFMT }); if(!bSel)
{
rWrtSh.Pop(SwCursorShell::PopMode::DeleteCurrent);
rWrtSh.EndAction();
}
} break; case SID_ATTR_BRUSH_CHAR : case SID_ATTR_CHAR_SCALEWIDTH : case SID_ATTR_CHAR_ROTATED : case FN_TXTATR_INET :
{ const sal_uInt16 nWhich = GetPool().GetWhichIDFromSlotID( nSlot ); if ( pArgs && pArgs->GetItemState( nWhich ) == SfxItemState::SET )
bUseDialog = false;
[[fallthrough]];
} case SID_CHAR_DLG: case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG_POSITION:
{
sw_CharDialog(rWrtSh, bUseDialog, /*ApplyToParagraph*/false, nSlot, pArgs, &rReq);
} break; case SID_CHAR_DLG_FOR_PARAGRAPH:
{
sw_CharDialog(rWrtSh, /*UseDialog*/true, /*ApplyToParagraph*/true, nSlot, pArgs, &rReq);
} break; case SID_ATTR_LRSPACE : case SID_ATTR_ULSPACE : case SID_ATTR_BRUSH : case SID_PARA_VERTALIGN : case SID_ATTR_PARA_NUMRULE : case SID_ATTR_PARA_REGISTER : case SID_ATTR_PARA_PAGENUM : case FN_FORMAT_LINENUMBER : case FN_NUMBER_NEWSTART : case FN_NUMBER_NEWSTART_AT : case FN_FORMAT_DROPCAPS : case FN_DROP_TEXT: case SID_ATTR_PARA_LRSPACE:
{ const sal_uInt16 nWhich = GetPool().GetWhichIDFromSlotID( nSlot ); if ( pArgs && pArgs->GetItemState( nWhich ) == SfxItemState::SET )
bUseDialog = false;
[[fallthrough]];
} case SID_PARA_DLG:
{
SwPaM* pPaM = nullptr;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.