/* -*- 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 . */ #ifndef INCLUDED_CUI_SOURCE_INC_SPELLDIALOG_HXX #define INCLUDED_CUI_SOURCE_INC_SPELLDIALOG_HXX #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace svx{ class SpellUndoAction_Impl;} // forward --------------------------------------------------------------- struct SpellDialog_Impl; namespace com{namespace sun{namespace star{ namespace linguistic2{ class XSpellChecker1; }}}} namespace svx{ class SpellDialog; struct SpellErrorDescription; class SentenceEditWindow_Impl : public VclMultiLineEdit { using VclMultiLineEdit::SetText; private: std::set< sal_Int32 > m_aIgnoreErrorsAt; VclPtr m_xToolbar; sal_Int32 m_nErrorStart; sal_Int32 m_nErrorEnd; bool m_bIsUndoEditMode; Link m_aModifyLink; void CallModifyLink() {m_aModifyLink.Call(*this);} inline SpellDialog* GetSpellDialog() const; DECL_LINK(ToolbarHdl, ToolBox*, void); protected: virtual bool PreNotify( NotifyEvent& rNEvt ) override; public: SentenceEditWindow_Impl(vcl::Window* pParent, WinBits nBits); virtual ~SentenceEditWindow_Impl() override; void Init(VclPtr const &rToolbar); void SetModifyHdl(const Link& rLink) override { m_aModifyLink = rLink;} void SetAttrib( const TextAttrib& rAttr, sal_uInt32 nPara, sal_Int32 nStart, sal_Int32 nEnd ); void SetText( const OUString& rStr ) override; bool MarkNextError( bool bIgnoreCurrentError, const css::uno::Reference& ); void ChangeMarkedWord(const OUString& rNewWord, LanguageType eLanguage); void MoveErrorMarkTo(sal_Int32 nErrorStart, sal_Int32 nErrorEnd, bool bGrammar); OUString GetErrorText() const; void RestoreCurrentError(); void SetAlternatives( const css::uno::Reference& ); const SpellErrorDescription* GetAlternatives(); void ResetModified() { GetTextEngine()->SetModified(false); m_bIsUndoEditMode = false;} virtual bool IsModified() const override { return GetTextEngine()->IsModified(); } virtual void dispose() override; bool IsUndoEditMode() const { return m_bIsUndoEditMode;} void SetUndoEditMode(bool bSet); svx::SpellPortions CreateSpellPortions() const; void ResetUndo(); void Undo(); void AddUndoAction( std::unique_ptr pAction ); size_t GetUndoActionCount(); void UndoActionStart( sal_uInt16 nId ); void UndoActionEnd(); void MoveErrorEnd(long nOffset); void ResetIgnoreErrorsAt() { m_aIgnoreErrorsAt.clear(); } }; // class SvxSpellDialog --------------------------------------------- class SpellDialogChildWindow; class SpellDialog : public SfxModelessDialog { using Window::Invalidate; friend class SentenceEditWindow_Impl; private: VclPtr m_pLanguageFT; VclPtr m_pLanguageLB; VclPtr m_pExplainFT; VclPtr m_pExplainLink; VclPtr m_pNotInDictFT; VclPtr m_pSentenceED; VclPtr m_pSuggestionFT; VclPtr m_pSuggestionLB; VclPtr m_pIgnorePB; VclPtr m_pIgnoreAllPB; VclPtr m_pIgnoreRulePB; VclPtr m_pAddToDictPB; VclPtr m_pAddToDictMB; VclPtr m_pChangePB; VclPtr m_pChangeAllPB; VclPtr m_pAutoCorrPB; VclPtr m_pCheckGrammarCB; VclPtr m_pOptionsPB; VclPtr m_pUndoPB; VclPtr m_pClosePB; VclPtr m_pToolbar; OUString m_sResumeST; OUString m_sIgnoreOnceST; OUString m_sNoSuggestionsST; OUString m_sTitleSpelling; OUString m_sTitleSpellingGrammar; Link aDialogUndoLink; bool bFocusLocked; svx::SpellDialogChildWindow& rParent; svx::SpellPortions m_aSavedSentence; std::unique_ptr pImpl; css::uno::Reference< css::linguistic2::XSpellChecker1 > xSpell; DECL_LINK(ChangeHdl, Button*, void); DECL_LINK(DoubleClickChangeHdl, ListBox&, void); DECL_LINK(ChangeAllHdl, Button*, void); DECL_LINK( IgnoreAllHdl, Button*, void ); DECL_LINK(IgnoreHdl, Button*, void); DECL_LINK( CheckGrammarHdl, Button*, void ); DECL_LINK( ExtClickHdl, Button*, void ); DECL_LINK(CancelHdl, Button*, void); DECL_LINK( ModifyHdl, Edit&, void); DECL_LINK(UndoHdl, Button*, void); DECL_LINK( AddToDictSelectHdl, MenuButton*, void ); DECL_LINK( AddToDictClickHdl, Button*, void ); DECL_LINK( LanguageSelectHdl, ListBox&, void ); DECL_LINK( DialogUndoHdl, SpellUndoAction_Impl&, void ); DECL_LINK( InitHdl, void*, void ); void AddToDictionaryExecute( sal_uInt16 ItemId, PopupMenu const *pMenu ); void StartSpellOptDlg_Impl(); int InitUserDicts(); void UpdateBoxes_Impl(bool bCallFromSelectHdl = false); void Init_Impl(); void SpellContinue_Impl(bool UseSavedSentence = false, bool bIgnoreCurrentError = false ); void LockFocusChanges( bool bLock ) {bFocusLocked = bLock;} void Impl_Restore(bool bUseSavedSentence); LanguageType GetSelectedLang_Impl() const; /** Retrieves the next sentence. */ bool GetNextSentence_Impl(bool bUseSavedSentence, bool bRechek /*for rechecking the current sentence*/); /** Corrects all errors that have been selected to be changed always */ static bool ApplyChangeAllList_Impl(SpellPortions& rSentence, bool& bHasReplaced); void SetTitle_Impl(LanguageType nLang); protected: virtual bool EventNotify( NotifyEvent& rNEvt ) override; OUString getReplacementString() const; public: SpellDialog( svx::SpellDialogChildWindow* pChildWindow, vcl::Window * pParent, SfxBindings* pBindings); virtual ~SpellDialog() override; virtual void dispose() override; virtual bool Close() override; void InvalidateDialog(); }; SpellDialog* SentenceEditWindow_Impl::GetSpellDialog() const {return static_cast(GetParentDialog());} } //namespace svx #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */