xref: /AOO41X/main/sw/source/ui/lingu/hyp.cxx (revision 8ef2f12b1aeba1404ab3c221e6e26281826cc4fc)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 
28 
29 #include "initui.hxx"
30 #include "view.hxx"
31 #include "edtwin.hxx"
32 #include "wrtsh.hxx"
33 #include "globals.hrc"
34 #include <vcl/msgbox.hxx>
35 #ifndef _WRKWIN_HXX //autogen
36 #include <vcl/wrkwin.hxx>
37 #endif
38 #include <linguistic/lngprops.hxx>
39 #include <com/sun/star/beans/XPropertySet.hpp>
40 #include <swwait.hxx>
41 
42 
43 #include "hyp.hxx"
44 #include "mdiexp.hxx"
45 #include "olmenu.hrc"
46 
47 #include <unomid.h>
48 
49 #define HYPHHERE    '-'
50 #define PSH         (&pView->GetWrtShell())
51 
52 using namespace ::com::sun::star;
53 using ::rtl::OUString;
54 
55 /*--------------------------------------------------------------------
56      Beschreibung: Interaktive Trennung
57  --------------------------------------------------------------------*/
58 
SwHyphWrapper(SwView * pVw,uno::Reference<linguistic2::XHyphenator> & rxHyph,sal_Bool bStart,sal_Bool bOther,sal_Bool bSelect)59 SwHyphWrapper::SwHyphWrapper( SwView* pVw,
60             uno::Reference< linguistic2::XHyphenator >  &rxHyph,
61             sal_Bool bStart, sal_Bool bOther, sal_Bool bSelect ) :
62     SvxSpellWrapper( &pVw->GetEditWin(), rxHyph, bStart, bOther ),
63     pView( pVw ),
64     xHyph( rxHyph ),
65     nLangError( 0 ),
66     nPageCount( 0 ),
67     nPageStart( 0 ),
68     bInSelection( bSelect ),
69     bShowError( sal_False ),
70     bInfoBox( sal_False )
71 {
72     uno::Reference< beans::XPropertySet >  xProp( GetLinguPropertySet() );
73     bAutomatic = xProp.is() ?
74             *(sal_Bool*)xProp->getPropertyValue( C2U(UPN_IS_HYPH_AUTO) ).getValue() : sal_False;
75     SetHyphen();
76 }
77 
78 // -----------------------------------------------------------------------
SpellStart(SvxSpellArea eSpell)79 void SwHyphWrapper::SpellStart( SvxSpellArea eSpell )
80 {
81     if( SVX_SPELL_OTHER == eSpell && nPageCount )
82     {
83         ::EndProgress( pView->GetDocShell() );
84         nPageCount = 0;
85         nPageStart = 0;
86     }
87     pView->HyphStart( eSpell );
88 }
89 
90 // -----------------------------------------------------------------------
91 
SpellContinue()92 sal_Bool SwHyphWrapper::SpellContinue()
93 {
94     // Fuer autom. Trennung Aktionen erst am Ende sichtbar machen
95     SwWait *pWait = 0;
96     if( bAutomatic )
97     {
98         PSH->StartAllAction();
99         pWait = new SwWait( *pView->GetDocShell(), true );
100     }
101 
102         uno::Reference< uno::XInterface >  xHyphWord = bInSelection ?
103                 PSH->HyphContinue( NULL, NULL ) :
104                 PSH->HyphContinue( &nPageCount, &nPageStart );
105         SetLast( xHyphWord );
106 
107     // Fuer autom. Trennung Aktionen erst am Ende sichtbar machen
108     if( bAutomatic )
109     {
110         PSH->EndAllAction();
111         delete pWait;
112     }
113 
114     if( bShowError )
115     {
116         bShowError = sal_False;
117         PSH->Push();
118         PSH->ClearMark();
119         pView->SpellError( &nLangError );
120         PSH->Combine();
121     }
122     return GetLast().is();
123 }
124 
125 // -----------------------------------------------------------------------
SpellEnd()126 void SwHyphWrapper::SpellEnd()
127 {
128     PSH->HyphEnd();
129     SvxSpellWrapper::SpellEnd();
130 }
131 
IMPL_LINK(SwHyphWrapper,SpellError,LanguageType *,pLang)132 IMPL_LINK( SwHyphWrapper, SpellError, LanguageType *, pLang )
133 {
134     if (pLang &&  *pLang != nLangError )
135     {
136         nLangError = *pLang;
137         bShowError = sal_True;
138     }
139     return 0;
140 }
141 
142 
143 // -----------------------------------------------------------------------
SpellMore()144 sal_Bool SwHyphWrapper::SpellMore()
145 {
146     PSH->Push();
147     bInfoBox = sal_True;
148     PSH->Combine();
149     return sal_False;
150 }
151 
152 // -----------------------------------------------------------------------
153 
InsertHyphen(const sal_uInt16 nPos)154 void SwHyphWrapper::InsertHyphen( const sal_uInt16 nPos )
155 {
156     if( nPos)
157         PSH->InsertSoftHyph( nPos + 1); // does nPos == 1 really mean
158                                         // insert hyphen after first char?
159                                         // (instead of nPos == 0)
160     else
161         PSH->HyphIgnore();
162 }
163 
164 // -----------------------------------------------------------------------
~SwHyphWrapper()165 SwHyphWrapper::~SwHyphWrapper()
166 {
167     if( nPageCount )
168         ::EndProgress( pView->GetDocShell() );
169     if( bInfoBox )
170         InfoBox( &pView->GetEditWin(), SW_RESSTR(STR_HYP_OK) ).Execute();
171 }
172 
173