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_sd.hxx" 26 27 28 #include "futhes.hxx" 29 30 #include <tools/pstm.hxx> 31 #include <editeng/outliner.hxx> 32 #include <vcl/msgbox.hxx> 33 #include <svx/svdobj.hxx> 34 #include <svx/svdotext.hxx> 35 #include <editeng/eeitem.hxx> 36 37 #include <svx/dialogs.hrc> 38 #include <svx/svxerr.hxx> 39 #include <svx/dialmgr.hxx> 40 #include <editeng/unolingu.hxx> 41 #include <comphelper/processfactory.hxx> 42 #include "app.hrc" 43 #include "strings.hrc" 44 #include "drawdoc.hxx" 45 #include "app.hxx" 46 #include "View.hxx" 47 #include "Outliner.hxx" 48 #include "DrawViewShell.hxx" 49 #include "OutlineViewShell.hxx" 50 #ifndef SD_WINDOW_SHELL_HXX 51 #include "Window.hxx" 52 #endif 53 #include "sdresid.hxx" 54 55 using ::rtl::OUString; 56 using namespace ::com::sun::star; 57 using namespace ::com::sun::star::uno; 58 using namespace ::com::sun::star::lang; 59 using namespace ::com::sun::star::linguistic2; 60 61 class SfxRequest; 62 63 namespace sd { 64 65 TYPEINIT1( FuThesaurus, FuPoor ); 66 67 /************************************************************************* 68 |* 69 |* Konstruktor 70 |* 71 \************************************************************************/ 72 73 FuThesaurus::FuThesaurus( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, 74 SdDrawDocument* pDoc, SfxRequest& rReq ) 75 : FuPoor(pViewSh, pWin, pView, pDoc, rReq) 76 { 77 } 78 79 FunctionReference FuThesaurus::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) 80 { 81 FunctionReference xFunc( new FuThesaurus( pViewSh, pWin, pView, pDoc, rReq ) ); 82 xFunc->DoExecute(rReq); 83 return xFunc; 84 } 85 86 void FuThesaurus::DoExecute( SfxRequest& ) 87 { 88 SfxErrorContext aContext(ERRCTX_SVX_LINGU_THESAURUS, String(), 89 mpWindow, RID_SVXERRCTX, &DIALOG_MGR() ); 90 91 if( mpViewShell && mpViewShell->ISA(DrawViewShell) ) 92 { 93 SdrTextObj* pTextObj = NULL; 94 95 if ( mpView->AreObjectsMarked() ) 96 { 97 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 98 99 if ( rMarkList.GetMarkCount() == 1 ) 100 { 101 SdrMark* pMark = rMarkList.GetMark(0); 102 SdrObject* pObj = pMark->GetMarkedSdrObj(); 103 104 if ( pObj->ISA(SdrTextObj) ) 105 { 106 pTextObj = (SdrTextObj*) pObj; 107 } 108 } 109 } 110 111 ::Outliner* pOutliner = mpView->GetTextEditOutliner(); 112 const OutlinerView* pOutlView = mpView->GetTextEditOutlinerView(); 113 114 if ( pTextObj && pOutliner && pOutlView ) 115 { 116 if ( !pOutliner->GetSpeller().is() ) 117 { 118 Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() ); 119 if ( xSpellChecker.is() ) 120 pOutliner->SetSpeller( xSpellChecker ); 121 122 Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() ); 123 if( xHyphenator.is() ) 124 pOutliner->SetHyphenator( xHyphenator ); 125 126 pOutliner->SetDefaultLanguage( mpDoc->GetLanguage( EE_CHAR_LANGUAGE ) ); 127 } 128 129 EESpellState eState = ( (OutlinerView*) pOutlView)->StartThesaurus(); 130 DBG_ASSERT(eState != EE_SPELL_NOSPELLER, "No SpellChecker"); 131 132 if (eState == EE_SPELL_NOLANGUAGE) 133 { 134 ErrorBox(mpWindow, WB_OK, String(SdResId(STR_NOLANGUAGE))).Execute(); 135 } 136 } 137 } 138 else if ( mpViewShell->ISA(OutlineViewShell) ) 139 { 140 Outliner* pOutliner = mpDoc->GetOutliner(); 141 OutlinerView* pOutlView = pOutliner->GetView(0); 142 143 if ( !pOutliner->GetSpeller().is() ) 144 { 145 Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() ); 146 if ( xSpellChecker.is() ) 147 pOutliner->SetSpeller( xSpellChecker ); 148 149 Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() ); 150 if( xHyphenator.is() ) 151 pOutliner->SetHyphenator( xHyphenator ); 152 153 pOutliner->SetDefaultLanguage( mpDoc->GetLanguage( EE_CHAR_LANGUAGE ) ); 154 } 155 156 EESpellState eState = pOutlView->StartThesaurus(); 157 DBG_ASSERT(eState != EE_SPELL_NOSPELLER, "No SpellChecker"); 158 159 if (eState == EE_SPELL_NOLANGUAGE) 160 { 161 ErrorBox(mpWindow, WB_OK, String(SdResId(STR_NOLANGUAGE))).Execute(); 162 } 163 } 164 } 165 166 } // end of namespace sd 167