23 #include <rtl/ustrbuf.hxx>
32 #include <editeng/editeng.hxx>
44 #include <com/sun/star/i18n/TextConversionOption.hpp>
45 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
46 #include <com/sun/star/lang/XInitialization.hpp>
47 #include <com/sun/star/beans/XPropertySet.hpp>
48 #include <com/sun/star/awt/XWindow.hpp>
49 #include <com/sun/star/uno/XComponentContext.hpp>
51 #include <osl/diagnose.h>
61 #define ShellClass_SwDrawTextShell
63 #include <swslots.hxx>
82 GetStaticInterface()->RegisterPopupMenu(
"drawtext");
84 GetStaticInterface()->RegisterObjectBar(
SFX_OBJECTBAR_OBJECT, SfxVisibilityFlags::Invisible, ToolbarId::Draw_Text_Toolbox_Sw);
86 GetStaticInterface()->RegisterChildWindow(SvxFontWorkChildWindow::GetChildWindowId());
100 nCtrl |= EEControlBits::AUTOCORRECT;
107 if(pVOpt->IsOnlineSpell())
109 nCtrl |= EEControlBits::ONLINESPELLING|EEControlBits::ALLOWBIGOBJS;
114 pOutliner->SetControlWord(nCtrl);
134 if (
GetView().GetCurShell() ==
this )
181 pVFrame->
SetChildWindow(SvxFontWorkChildWindow::GetChildWindowId(),
182 static_cast<const SfxBoolItem&>( (rReq.
GetArgs()->
183 Get(SID_FONTWORK))).GetValue());
193 const sal_uInt16
nId = SvxFontWorkChildWindow::GetChildWindowId();
218 rTempView.AttrChangedNotify(
nullptr);
238 const bool bDeactivate(
277 case SID_HANGUL_HANJA_CONVERSION:
280 i18n::TextConversionOption::CHARACTER_BY_CHARACTER,
true,
false);
283 case SID_CHINESE_CONVERSION:
290 Reference<lang::XMultiComponentFactory> xMCF(xContext->getServiceManager());
294 Reference<ui::dialogs::XExecutableDialog> xDialog(
295 xMCF->createInstanceWithContext(
"com.sun.star.linguistic2.ChineseTranslationDialog", xContext), UNO_QUERY);
297 Reference<lang::XInitialization> xInit(xDialog, UNO_QUERY);
305 {
"ParentWindow",
uno::Any(Reference<awt::XWindow>())}
307 xInit->initialize( aSequence );
310 sal_Int16 nDialogRet = xDialog->execute();
314 bool bToSimplified =
true;
315 bool bUseVariants =
true;
316 bool bCommonTerms =
true;
318 if (xPropertySet.is())
322 xPropertySet->getPropertyValue(
"IsDirectionToSimplified") >>= bToSimplified;
323 xPropertySet->getPropertyValue(
"IsUseCharacterVariants") >>= bUseVariants;
324 xPropertySet->getPropertyValue(
"IsTranslateCommonTerms") >>= bCommonTerms;
334 sal_Int32 nOptions = bUseVariants ? i18n::TextConversionOption::USE_CHARACTER_VARIANTS : 0;
336 nOptions = nOptions | i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
345 xComponent->dispose();
350 OSL_ENSURE(
false,
"unexpected slot-id");
362 case FN_INSERT_SOFT_HYPHEN:
363 case FN_INSERT_HARDHYPHEN:
364 case FN_INSERT_HARD_SPACE:
365 case FN_INSERT_NNBSP:
366 case SID_INSERT_RLM :
367 case SID_INSERT_LRM :
369 case SID_INSERT_ZWSP:
377 case FN_INSERT_NNBSP: cIns =
CHAR_NNBSP;
break;
378 case SID_INSERT_RLM : cIns =
CHAR_RLM ;
break;
379 case SID_INSERT_LRM : cIns =
CHAR_LRM ;
break;
380 case SID_INSERT_ZWSP : cIns =
CHAR_ZWSP ;
break;
381 case SID_INSERT_WJ: cIns =
CHAR_WJ;
break;
395 sal_uInt16 nSlot = rReq.
GetSlot();
410 sal_Int32 nParaCount = pOutliner->GetParagraphCount();
417 case FN_FORMAT_RESET:
444 sal_uInt16 nResult = pDlg->Execute();
451 rReq.
Done(*(pDlg->GetOutputItemSet()));
456 case SID_TABLE_VERT_NONE:
457 case SID_TABLE_VERT_CENTER:
458 case SID_TABLE_VERT_BOTTOM:
460 sal_uInt16 nSId = rReq.
GetSlot();
464 if (nSId == SID_TABLE_VERT_CENTER)
466 else if (nSId == SID_TABLE_VERT_BOTTOM)
480 OSL_ENSURE(
false,
"unexpected slot-id");
497 bool bCallBase =
true;
507 if( SfxItemState::SET == pArgs->
GetItemState( nId,
false, &pItem ) &&
514 if( SID_UNDO == nId )
516 pUndoManager->
Undo();
519 pUndoManager->
Redo();
548 case SID_GETUNDOSTRINGS:
549 case SID_GETREDOSTRINGS:
554 OUString (
SfxUndoManager::*fnGetComment)( size_t,
bool const )
const;
557 if( SID_GETUNDOSTRINGS == nWhich )
569 OUStringBuffer sList;
570 for( sal_uInt16
n = 0;
n < nCount; ++
n )
574 aItem.
SetString( sList.makeStringAndClear() );
590 pUndoManager->SetView(
nullptr);
603 using namespace i18n;
609 case SID_TRANSLITERATE_SENTENCE_CASE:
610 nMode = TransliterationFlags::SENTENCE_CASE;
612 case SID_TRANSLITERATE_TITLE_CASE:
613 nMode = TransliterationFlags::TITLE_CASE;
615 case SID_TRANSLITERATE_TOGGLE_CASE:
616 nMode = TransliterationFlags::TOGGLE_CASE;
618 case SID_TRANSLITERATE_UPPER:
619 nMode = TransliterationFlags::LOWERCASE_UPPERCASE;
621 case SID_TRANSLITERATE_LOWER:
622 nMode = TransliterationFlags::UPPERCASE_LOWERCASE;
625 case SID_TRANSLITERATE_HALFWIDTH:
626 nMode = TransliterationFlags::FULLWIDTH_HALFWIDTH;
628 case SID_TRANSLITERATE_FULLWIDTH:
629 nMode = TransliterationFlags::HALFWIDTH_FULLWIDTH;
632 case SID_TRANSLITERATE_HIRAGANA:
633 nMode = TransliterationFlags::KATAKANA_HIRAGANA;
635 case SID_TRANSLITERATE_KATAKANA:
636 nMode = TransliterationFlags::HIRAGANA_KATAKANA;
640 OSL_ENSURE(
false,
"wrong dispatcher");
643 if( nMode != TransliterationFlags::NONE )
656 if( rReq.
GetSlot() == SID_TRANSLITERATE_ROTATE_CASE )
694 std::shared_ptr<SvxFontItem> aSetDlgFont(std::make_shared<SvxFontItem>(
RES_CHRATR_FONT));
697 aSetItem.GetItemSet().Put( aSet,
false );
698 const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScript );
700 aSetDlgFont.reset(static_cast<SvxFontItem*>(pI->
Clone()));
707 aSetDlgFont.reset(aSet.Get( nFontWhich ).Clone());
709 if (sFontName.isEmpty())
710 sFontName = aSetDlgFont->GetFamilyName();
721 if( !sSymbolFont.isEmpty() )
724 aAllSet.
Put(
SfxStringItem( SID_FONT_NAME, aSetDlgFont->GetFamilyName() ) );
737 pOutliner->SetUpdateLayout(
false);
743 aFontSet.Set( aOldSet );
749 SfxItemSet aFontAttribSet( *aFontSet.GetPool(), aFontSet.GetRanges() );
755 if( SvtScriptType::LATIN & nScript )
756 aFontAttribSet.Put( aFontItem );
757 if( SvtScriptType::ASIAN & nScript )
759 aFontItem.SetWhich(EE_CHAR_FONTINFO_CJK);
760 aFontAttribSet.Put( aFontItem );
762 if( SvtScriptType::COMPLEX & nScript )
765 aFontAttribSet.Put( aFontItem );
772 aSel.nStartPos = aSel.nEndPos;
779 pOutliner->SetUpdateLayout(
true);
794 return &pOutliner->GetUndoManager();
815 case SID_TABLE_VERT_NONE:
816 case SID_TABLE_VERT_CENTER:
817 case SID_TABLE_VERT_BOTTOM:
818 bool bContour =
false;
820 if( eConState != SfxItemState::DONTCARE )
830 if(SfxItemState::DONTCARE != eVState)
const SfxPoolItem * ExecuteSlot(SfxRequest &rReq, const SfxInterface *pIF=nullptr)
SfxViewFrame * GetViewFrame() const
constexpr TypedWhichId< XFormTextHideFormItem > XATTR_FORMTXTHIDEFORM(XATTR_TEXT_FIRST+10)
void GetFormTextState(SfxItemSet &rSet)
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CJK(EE_CHAR_START+17)
void ExecTransliteration(SfxRequest const &)
void ExecUndo(SfxRequest &rReq)
size_t GetMarkCount() const
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
virtual SdrEndTextEditKind SdrEndTextEdit(bool bDontDeleteReally=false)
const OUString & GetFamilyName() const
#define SFX_IMPL_INTERFACE(Class, SuperClass)
void InsertText(const OUString &rNew, bool bSelect=false)
void RemoveAttribsKeepLanguages(bool bRemoveParaAttribs)
const OUString & GetStyleName() const
void ExecRotateTransliteration(SfxRequest const &)
virtual SfxPoolItem * Clone(SfxItemPool *pPool=nullptr) const =0
tools::Rectangle const & GetOutputArea() const
bool AreObjectsMarked() const
constexpr TypedWhichId< XFormTextOutlineItem > XATTR_FORMTXTOUTLINE(XATTR_TEXT_FIRST+5)
void ShowCursor(bool bGotoCursor=true, bool bActivate=false)
static SvxAbstractDialogFactory * Create()
void ExecFontWork(SfxRequest const &rReq)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_TEXT_CONTOURFRAME(SDRATTR_MISC_FIRST+21)
Reference< XFrame > xFrame
void StateFontWork(SfxItemSet &rSet)
SvtScriptType GetAllScriptsOfText(const OUString &rText) const
void TransliterateText(TransliterationFlags nTransliterationMode)
void Done(bool bRemove=false)
SdrMark * GetMark(size_t nNum) const
void RemoveFields(const std::function< bool(const SvxFieldData *)> &isFieldData=[](const SvxFieldData *){return true;})
const SfxItemSet * GetArgs() const
void Invalidate(sal_uInt16 nId)
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_FONT(7)
virtual bool HasText() const override
constexpr TypedWhichId< XFormTextDistanceItem > XATTR_FORMTXTDISTANCE(XATTR_TEXT_FIRST+2)
FontFamily GetFamilyType()
SwWrtShell & GetWrtShell() const
Used by the UI to modify the document model.
void ToggleChildWindow(sal_uInt16)
const SwView & GetView() const
void ExecDraw(SfxRequest &)
void StartTextConversion(weld::Widget *pDialogParent, LanguageType nSrcLang, LanguageType nDestLang, const vcl::Font *pDestFont, sal_Int32 nOptions, bool bIsInteractive, bool bMultipleDoc)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CTL(EE_CHAR_START+18)
SfxFrame & GetFrame() const
void SelectRange(sal_Int32 nFirst, sal_Int32 nCount)
void GetStatePropPanelAttr(SfxItemSet &)
void SetUndoManager(SfxUndoManager *pNewUndoMgr)
virtual size_t GetRedoActionCount(bool const i_currentLevel=CurrentLevel) const
sal_Int16 GetI18NScriptTypeOfLanguage(LanguageType nLang)
constexpr TypedWhichId< XFormTextStyleItem > XATTR_FORMTXTSTYLE(XATTR_TEXT_FIRST)
EditView & GetEditView() const
void StateUndo(SfxItemSet &rSet)
SfxItemPool & GetPool() const
static void StateDisableItems(SfxItemSet &)
SdrObject * GetMarkedSdrObj() const
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
const SfxItemPool & GetAttrPool() const
const SdrOutliner * GetTextEditOutliner() const
RotateTransliteration m_aRotateCase
void SetAttribs(const SfxItemSet &)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem * GetSlotState(sal_uInt16 nSlotId, const SfxInterface *pIF=nullptr, SfxItemSet *pStateSet=nullptr)
css::uno::Sequence< css::uno::Any > InitAnyPropertySequence(::std::initializer_list< ::std::pair< OUString, css::uno::Any > > vInit)
EditEngine * GetEditEngine() const
void ExecFormText(SfxRequest const &rReq)
SfxBindings & GetBindings()
constexpr TypedWhichId< SdrTextVertAdjustItem > SDRATTR_TEXT_VERTADJUST(SDRATTR_MISC_FIRST+8)
const OUString & GetValue() const
const SdrMarkList & GetMarkedObjectList() const
bool SetAttributes(const SfxItemSet &rSet, bool bReplaceAll=false)
void SetPool(SfxItemPool *pNewPool)
SfxShell subclass that is used while interacting with the editeng-based text of a shape...
SvtScriptType GetSelectedScriptType() const
exports com.sun.star. i18n
sal_uInt16 GetWhichOfScript(sal_uInt16 nWhich, sal_uInt16 nScript)
TransliterationFlags getNextMode()
const OutlinerView * GetTextEditOutlinerView() const
#define LANGUAGE_CHINESE_SIMPLIFIED
void SetString(const OUString &)
Outliner * GetOutliner() const
virtual VclPtr< SfxAbstractDialog > CreateCharMapDialog(weld::Window *pParent, const SfxItemSet &rAttr, const css::uno::Reference< css::frame::XFrame > &rFrame)=0
#define FN_DRAWTEXT_ATTR_DLG
sal_uInt16 GetSlotId(sal_uInt16 nWhich) const
constexpr TypedWhichId< XFormTextShadowXValItem > XATTR_FORMTXTSHDWXVAL(XATTR_TEXT_FIRST+8)
constexpr TypedWhichId< XFormTextShadowItem > XATTR_FORMTXTSHADOW(XATTR_TEXT_FIRST+6)
EESpellState StartThesaurus(weld::Widget *pDialogParent)
void SetName(const OUString &rName)
constexpr TypedWhichId< XFormTextAdjustItem > XATTR_FORMTXTADJUST(XATTR_TEXT_FIRST+1)
void HideCursor(bool bDeactivate=false)
virtual size_t GetUndoActionCount(bool const i_currentLevel=CurrentLevel) const
const css::uno::Reference< css::frame::XFrame > & GetFrameInterface() const
const OUString & GetSymbolFont() const
#define SFX_OBJECTBAR_OBJECT
ESelection GetSelection() const
virtual VclPtr< SfxAbstractTabDialog > CreateTextTabDialog(weld::Window *pParent, const SfxItemSet *pAttrSet, SdrView *pView)=0
SfxItemPool * GetSecondaryPool() const
weld::Window * GetFrameWeld() const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
OUString GetUndoActionComment(size_t nNo=0, bool const i_currentLevel=CurrentLevel) const
sal_uInt16 GetSlot() const
static const OUString & GetContextName(const Context eContext)
void SetSelection(const ESelection &)
constexpr TypedWhichId< XFormTextStartItem > XATTR_FORMTXTSTART(XATTR_TEXT_FIRST+3)
virtual bool IsTextEdit() const final override
void DisableItem(sal_uInt16 nWhich)
weld::Window * GetFrameWeld() const
OUString GetRedoActionComment(size_t nNo=0, bool const i_currentLevel=CurrentLevel) const
const SwViewOption * GetViewOptions() const
constexpr TypedWhichId< XFormTextShadowYValItem > XATTR_FORMTXTSHDWYVAL(XATTR_TEXT_FIRST+9)
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr=false) const
LanguageType GetAppLanguage()
void SetChildWindow(sal_uInt16 nId, bool bVisible, bool bSetFocus=true)
SwDrawTextShell(SwView &rView)
void ExecDrawLingu(SfxRequest const &rReq)
void EndTextEdit()
Deletes object if required.
Reference< XComponentContext > getProcessComponentContext()
void SetAttrToMarked(const SfxItemSet &rAttr)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO(EE_CHAR_START+1)
virtual void SetView(SwView *pView)=0
Return undo/redo info for this view.
virtual SfxInterface * GetInterface() const
void InvalidateAll(bool bWithMsg)
void AppendItem(const SfxPoolItem &)
#define LANGUAGE_CHINESE_TRADITIONAL
SVXCORE_DLLPUBLIC MSO_SPT Get(const OUString &)
const SfxItemPool & GetItemPool() const
void InsertSymbol(SfxRequest &rReq)
constexpr TypedWhichId< XFormTextMirrorItem > XATTR_FORMTXTMIRROR(XATTR_TEXT_FIRST+4)
SdrModel * GetModel() const
void SetContextName(const OUString &rsContextName)
static bool IsWhich(sal_uInt16 nId)
rtl_TextEncoding GetCharSet() const
virtual ~SwDrawTextShell() override
constexpr TypedWhichId< XFormTextShadowColorItem > XATTR_FORMTXTSHDWCOLOR(XATTR_TEXT_FIRST+7)
virtual SfxUndoManager * GetUndoManager() override
static bool const TopLevel