xref: /aoo4110/main/cui/source/inc/SpellDialog.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef _SVX_SPELLDDIALOG_HXX
24*b1cdbd2cSJim Jagielski #define _SVX_SPELLDDIALOG_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski // include ---------------------------------------------------------------
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <sfx2/basedlgs.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/fixed.hxx>
30*b1cdbd2cSJim Jagielski #include <vcl/edit.hxx>
31*b1cdbd2cSJim Jagielski #include <vcl/lstbox.hxx>
32*b1cdbd2cSJim Jagielski #include <svtools/stdctrl.hxx>
33*b1cdbd2cSJim Jagielski #include <vcl/button.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/menubtn.hxx>
35*b1cdbd2cSJim Jagielski #include <vcl/group.hxx>
36*b1cdbd2cSJim Jagielski #include <vcl/decoview.hxx>
37*b1cdbd2cSJim Jagielski #include <vcl/image.hxx>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.hxx>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #include <svtools/svxbox.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/langbox.hxx>
43*b1cdbd2cSJim Jagielski #include <memory>
44*b1cdbd2cSJim Jagielski #include <svtools/svmedit.hxx>
45*b1cdbd2cSJim Jagielski #include <svl/lstner.hxx>
46*b1cdbd2cSJim Jagielski #include <svtools/xtextedt.hxx>
47*b1cdbd2cSJim Jagielski #include <editeng/SpellPortions.hxx>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include <set>
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski class ScrollBar;
52*b1cdbd2cSJim Jagielski class TextEngine;
53*b1cdbd2cSJim Jagielski class ExtTextView;
54*b1cdbd2cSJim Jagielski namespace svx{ class SpellUndoAction_Impl;}
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski // forward ---------------------------------------------------------------
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski struct SpellDialog_Impl;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski namespace com{namespace sun{namespace star{
61*b1cdbd2cSJim Jagielski namespace linguistic2{
62*b1cdbd2cSJim Jagielski     class XSpellChecker1;
63*b1cdbd2cSJim Jagielski }}}}
64*b1cdbd2cSJim Jagielski namespace svx{
65*b1cdbd2cSJim Jagielski class SpellDialog;
66*b1cdbd2cSJim Jagielski struct SpellErrorDescription;
67*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------
68*b1cdbd2cSJim Jagielski class SentenceEditWindow_Impl : public MultiLineEdit/*, public SfxListener*/
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski 	using MultiLineEdit::SetText;
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski private:
73*b1cdbd2cSJim Jagielski     std::set< sal_uInt16 >      m_aIgnoreErrorsAt;
74*b1cdbd2cSJim Jagielski     sal_uInt16          m_nErrorStart;
75*b1cdbd2cSJim Jagielski     sal_uInt16          m_nErrorEnd;
76*b1cdbd2cSJim Jagielski     bool            m_bIsUndoEditMode;
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski     Link            m_aModifyLink;
79*b1cdbd2cSJim Jagielski 
CallModifyLink()80*b1cdbd2cSJim Jagielski     void            CallModifyLink() {m_aModifyLink.Call(this);}
81*b1cdbd2cSJim Jagielski 
GetSpellDialog() const82*b1cdbd2cSJim Jagielski     SpellDialog*    GetSpellDialog() const {return (SpellDialog*)GetParent();}
83*b1cdbd2cSJim Jagielski protected:
84*b1cdbd2cSJim Jagielski     virtual long    PreNotify( NotifyEvent& rNEvt );
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski public:
87*b1cdbd2cSJim Jagielski                     SentenceEditWindow_Impl( SpellDialog* pParent, const ResId& rResId );
88*b1cdbd2cSJim Jagielski                     ~SentenceEditWindow_Impl();
89*b1cdbd2cSJim Jagielski 
SetModifyHdl(const Link & rLink)90*b1cdbd2cSJim Jagielski     void            SetModifyHdl(const Link& rLink) { m_aModifyLink = rLink;}
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski     void            SetAttrib( const TextAttrib& rAttr, sal_uLong nPara, sal_uInt16 nStart, sal_uInt16 nEnd );
93*b1cdbd2cSJim Jagielski     void            SetText( const String& rStr );
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski     bool            MarkNextError( bool bIgnoreCurrentError );
96*b1cdbd2cSJim Jagielski     void            ChangeMarkedWord(const String& rNewWord, LanguageType eLanguage);
97*b1cdbd2cSJim Jagielski     void            MoveErrorMarkTo(sal_uInt16 nErrorStart, sal_uInt16 nErrorEnd, bool bGrammar);
98*b1cdbd2cSJim Jagielski     String          GetErrorText() const;
99*b1cdbd2cSJim Jagielski     void            RestoreCurrentError();
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski     void            SetAlternatives(
102*b1cdbd2cSJim Jagielski                         com::sun::star::uno::Reference<com::sun::star::linguistic2::XSpellAlternatives> );
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski     const SpellErrorDescription* GetAlternatives();
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 
ResetModified()107*b1cdbd2cSJim Jagielski     void            ResetModified()   { GetTextEngine()->SetModified(sal_False); m_bIsUndoEditMode = false;}
IsModified() const108*b1cdbd2cSJim Jagielski     sal_Bool            IsModified() const              { return GetTextEngine()->IsModified(); }
109*b1cdbd2cSJim Jagielski 
IsUndoEditMode() const110*b1cdbd2cSJim Jagielski     bool            IsUndoEditMode() const { return m_bIsUndoEditMode;}
111*b1cdbd2cSJim Jagielski     void            SetUndoEditMode(bool bSet);
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski     svx::SpellPortions  CreateSpellPortions( bool bSetIgnoreFlag ) const;
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski     void            ResetUndo();
116*b1cdbd2cSJim Jagielski     void            Undo();
117*b1cdbd2cSJim Jagielski     void            AddUndoAction( SfxUndoAction *pAction, sal_Bool bTryMerg=sal_False );
118*b1cdbd2cSJim Jagielski     sal_uInt16      GetUndoActionCount();
119*b1cdbd2cSJim Jagielski     void            UndoActionStart( sal_uInt16 nId );
120*b1cdbd2cSJim Jagielski     void            UndoActionEnd();
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski     void            MoveErrorEnd(long nOffset);
123*b1cdbd2cSJim Jagielski 
ResetIgnoreErrorsAt()124*b1cdbd2cSJim Jagielski     void            ResetIgnoreErrorsAt()   { m_aIgnoreErrorsAt.clear(); }
125*b1cdbd2cSJim Jagielski };
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski // class SvxSpellDialog ---------------------------------------------
129*b1cdbd2cSJim Jagielski class SpellDialogChildWindow;
130*b1cdbd2cSJim Jagielski class ExplainButton : public PushButton
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski     String              m_sExplanation;
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski     virtual void        RequestHelp( const HelpEvent& rHEvt );
135*b1cdbd2cSJim Jagielski     virtual void        Click();
136*b1cdbd2cSJim Jagielski public:
ExplainButton(Window * pParent,const ResId & rResId)137*b1cdbd2cSJim Jagielski     ExplainButton( Window* pParent, const ResId& rResId ) : PushButton( pParent, rResId ){}
138*b1cdbd2cSJim Jagielski     ~ExplainButton();
SetExplanation(const String & rText)139*b1cdbd2cSJim Jagielski     void                SetExplanation( const String& rText ) {m_sExplanation = rText;}
HasExplanation()140*b1cdbd2cSJim Jagielski     bool                HasExplanation() { return m_sExplanation.Len() > 0;}
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski };
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski class SpellDialog : public SfxModelessDialog
145*b1cdbd2cSJim Jagielski {
146*b1cdbd2cSJim Jagielski 	using Window::Invalidate;
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 	friend class SentenceEditWindow_Impl;
149*b1cdbd2cSJim Jagielski private:
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski     FixedImage      aVendorImageFI;
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski     FixedText       aLanguageFT;
154*b1cdbd2cSJim Jagielski     SvxLanguageBox  aLanguageLB;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     FixedText           aNotInDictFT;
157*b1cdbd2cSJim Jagielski     SentenceEditWindow_Impl  aSentenceED;
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski     FixedText       aSuggestionFT;
160*b1cdbd2cSJim Jagielski     ListBox         aSuggestionLB;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski     PushButton      aIgnorePB;
163*b1cdbd2cSJim Jagielski     PushButton      aIgnoreAllPB;
164*b1cdbd2cSJim Jagielski     PushButton      aIgnoreRulePB;
165*b1cdbd2cSJim Jagielski     MenuButton      aAddToDictMB;
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski     PushButton      aChangePB;
168*b1cdbd2cSJim Jagielski     PushButton      aChangeAllPB;
169*b1cdbd2cSJim Jagielski     ExplainButton   aExplainPB;
170*b1cdbd2cSJim Jagielski     PushButton      aAutoCorrPB;
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski     CheckBox        aCheckGrammarCB;
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski     HelpButton      aHelpPB;
175*b1cdbd2cSJim Jagielski     PushButton      aOptionsPB;
176*b1cdbd2cSJim Jagielski     PushButton      aUndoPB;
177*b1cdbd2cSJim Jagielski     PushButton      aClosePB;
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski     GroupBox        aBackgroundGB;
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski     Image           aVendorImage;
182*b1cdbd2cSJim Jagielski     Image           aVendorImageHC;
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski     String          aResumeST;
185*b1cdbd2cSJim Jagielski     String          aIgnoreOnceST;
186*b1cdbd2cSJim Jagielski     String          aNoSuggestionsST;
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski     const String    m_sTitleSpelling;
189*b1cdbd2cSJim Jagielski     const String    m_sTitleSpellingGrammar;
190*b1cdbd2cSJim Jagielski     const String    m_sTitleSpellingGrammarVendor;
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski     Size            aOldWordEDSize;
193*b1cdbd2cSJim Jagielski     Link            aDialogUndoLink;
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski     bool            bModified;
196*b1cdbd2cSJim Jagielski     bool            bFocusLocked;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski     svx::SpellDialogChildWindow& rParent;
199*b1cdbd2cSJim Jagielski     svx::SpellPortions           m_aSavedSentence;
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski     SpellDialog_Impl* pImpl;
202*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::Reference<
203*b1cdbd2cSJim Jagielski 		::com::sun::star::linguistic2::XSpellChecker1 > 	xSpell;
204*b1cdbd2cSJim Jagielski 	LanguageType		nOldLang;
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski     DECL_LINK( ChangeHdl, Button * );
207*b1cdbd2cSJim Jagielski     DECL_LINK( ChangeAllHdl, Button * );
208*b1cdbd2cSJim Jagielski     DECL_LINK( IgnoreAllHdl, Button * );
209*b1cdbd2cSJim Jagielski     DECL_LINK( IgnoreHdl, Button * );
210*b1cdbd2cSJim Jagielski     DECL_LINK( CheckGrammarHdl, CheckBox* );
211*b1cdbd2cSJim Jagielski 	DECL_LINK( ExtClickHdl, Button * );
212*b1cdbd2cSJim Jagielski 	DECL_LINK( CancelHdl, Button * );
213*b1cdbd2cSJim Jagielski     DECL_LINK( ModifyHdl, SentenceEditWindow_Impl *);
214*b1cdbd2cSJim Jagielski     DECL_LINK( UndoHdl, Button * );
215*b1cdbd2cSJim Jagielski     DECL_LINK( MenuButtonActivateHdl, MenuButton* );
216*b1cdbd2cSJim Jagielski     DECL_LINK( AddToDictionaryHdl, MenuButton* );
217*b1cdbd2cSJim Jagielski     DECL_LINK( LanguageSelectHdl, SvxLanguageBox* );
218*b1cdbd2cSJim Jagielski     DECL_LINK( DialogUndoHdl, SpellUndoAction_Impl* );
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski     DECL_STATIC_LINK( SpellDialog, InitHdl, SpellDialog * );
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 	void            StartSpellOptDlg_Impl();
223*b1cdbd2cSJim Jagielski 	void            InitUserDicts();
224*b1cdbd2cSJim Jagielski 	void            UpdateBoxes_Impl();
225*b1cdbd2cSJim Jagielski 	void            Init_Impl();
226*b1cdbd2cSJim Jagielski     void            SpellContinue_Impl(bool UseSavedSentence = false, bool bIgnoreCurrentError = false );
LockFocusChanges(bool bLock)227*b1cdbd2cSJim Jagielski     void            LockFocusChanges( bool bLock ) {bFocusLocked = bLock;}
228*b1cdbd2cSJim Jagielski     void            Impl_Restore();
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski 	void			SetSelectedLang_Impl( LanguageType nLang );
231*b1cdbd2cSJim Jagielski 	LanguageType	GetSelectedLang_Impl() const;
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski     /** Retrieves the next sentence.
234*b1cdbd2cSJim Jagielski      */
235*b1cdbd2cSJim Jagielski     bool            GetNextSentence_Impl(bool bUseSavedSentence, bool bRechek /*for rechecking the curretn sentence*/);
236*b1cdbd2cSJim Jagielski     /** Corrects all errors that have been selected to be changed always
237*b1cdbd2cSJim Jagielski      */
238*b1cdbd2cSJim Jagielski     bool            ApplyChangeAllList_Impl(SpellPortions& rSentence, bool& bHasReplaced);
239*b1cdbd2cSJim Jagielski     void            SetTitle_Impl(LanguageType nLang);
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski protected:
242*b1cdbd2cSJim Jagielski     virtual void    Paint( const Rectangle& rRect );
243*b1cdbd2cSJim Jagielski     virtual long    Notify( NotifyEvent& rNEvt );
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski public:
246*b1cdbd2cSJim Jagielski     SpellDialog(
247*b1cdbd2cSJim Jagielski         svx::SpellDialogChildWindow* pChildWindow,
248*b1cdbd2cSJim Jagielski         Window * pParent,
249*b1cdbd2cSJim Jagielski         SfxBindings* pBindings);
250*b1cdbd2cSJim Jagielski     ~SpellDialog();
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski 	void			SetLanguage( sal_uInt16 nLang );
253*b1cdbd2cSJim Jagielski 	virtual sal_Bool	Close();
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski     void            InvalidateDialog();
256*b1cdbd2cSJim Jagielski };
257*b1cdbd2cSJim Jagielski } //namespace svx
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski #endif
260*b1cdbd2cSJim Jagielski 
261