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 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 // ----------------------------------------------------------------------- 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 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(), sal_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 // ----------------------------------------------------------------------- 126 void SwHyphWrapper::SpellEnd() 127 { 128 PSH->HyphEnd(); 129 SvxSpellWrapper::SpellEnd(); 130 } 131 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 // ----------------------------------------------------------------------- 144 sal_Bool SwHyphWrapper::SpellMore() 145 { 146 PSH->Push(); 147 bInfoBox = sal_True; 148 PSH->Combine(); 149 return sal_False; 150 } 151 152 // ----------------------------------------------------------------------- 153 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 // ----------------------------------------------------------------------- 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