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