1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sd.hxx" 30 31 32 #include "futhes.hxx" 33 34 #include <tools/pstm.hxx> 35 #include <editeng/outliner.hxx> 36 #include <vcl/msgbox.hxx> 37 #include <svx/svdobj.hxx> 38 #include <svx/svdotext.hxx> 39 #include <editeng/eeitem.hxx> 40 41 #include <svx/dialogs.hrc> 42 #include <svx/svxerr.hxx> 43 #include <svx/dialmgr.hxx> 44 #include <editeng/unolingu.hxx> 45 #include <comphelper/processfactory.hxx> 46 #include "app.hrc" 47 #include "strings.hrc" 48 #include "drawdoc.hxx" 49 #include "app.hxx" 50 #include "View.hxx" 51 #include "Outliner.hxx" 52 #include "DrawViewShell.hxx" 53 #include "OutlineViewShell.hxx" 54 #ifndef SD_WINDOW_SHELL_HXX 55 #include "Window.hxx" 56 #endif 57 #include "sdresid.hxx" 58 59 using ::rtl::OUString; 60 using namespace ::com::sun::star; 61 using namespace ::com::sun::star::uno; 62 using namespace ::com::sun::star::lang; 63 using namespace ::com::sun::star::linguistic2; 64 65 class SfxRequest; 66 67 namespace sd { 68 69 TYPEINIT1( FuThesaurus, FuPoor ); 70 71 /************************************************************************* 72 |* 73 |* Konstruktor 74 |* 75 \************************************************************************/ 76 77 FuThesaurus::FuThesaurus( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, 78 SdDrawDocument* pDoc, SfxRequest& rReq ) 79 : FuPoor(pViewSh, pWin, pView, pDoc, rReq) 80 { 81 } 82 83 FunctionReference FuThesaurus::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) 84 { 85 FunctionReference xFunc( new FuThesaurus( pViewSh, pWin, pView, pDoc, rReq ) ); 86 xFunc->DoExecute(rReq); 87 return xFunc; 88 } 89 90 void FuThesaurus::DoExecute( SfxRequest& ) 91 { 92 SfxErrorContext aContext(ERRCTX_SVX_LINGU_THESAURUS, String(), 93 mpWindow, RID_SVXERRCTX, &DIALOG_MGR() ); 94 95 if( mpViewShell && mpViewShell->ISA(DrawViewShell) ) 96 { 97 SdrTextObj* pTextObj = NULL; 98 99 if ( mpView->AreObjectsMarked() ) 100 { 101 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 102 103 if ( rMarkList.GetMarkCount() == 1 ) 104 { 105 SdrMark* pMark = rMarkList.GetMark(0); 106 SdrObject* pObj = pMark->GetMarkedSdrObj(); 107 108 if ( pObj->ISA(SdrTextObj) ) 109 { 110 pTextObj = (SdrTextObj*) pObj; 111 } 112 } 113 } 114 115 ::Outliner* pOutliner = mpView->GetTextEditOutliner(); 116 const OutlinerView* pOutlView = mpView->GetTextEditOutlinerView(); 117 118 if ( pTextObj && pOutliner && pOutlView ) 119 { 120 if ( !pOutliner->GetSpeller().is() ) 121 { 122 Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() ); 123 if ( xSpellChecker.is() ) 124 pOutliner->SetSpeller( xSpellChecker ); 125 126 Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() ); 127 if( xHyphenator.is() ) 128 pOutliner->SetHyphenator( xHyphenator ); 129 130 pOutliner->SetDefaultLanguage( mpDoc->GetLanguage( EE_CHAR_LANGUAGE ) ); 131 } 132 133 EESpellState eState = ( (OutlinerView*) pOutlView)->StartThesaurus(); 134 DBG_ASSERT(eState != EE_SPELL_NOSPELLER, "No SpellChecker"); 135 136 if (eState == EE_SPELL_NOLANGUAGE) 137 { 138 ErrorBox(mpWindow, WB_OK, String(SdResId(STR_NOLANGUAGE))).Execute(); 139 } 140 } 141 } 142 else if ( mpViewShell->ISA(OutlineViewShell) ) 143 { 144 Outliner* pOutliner = mpDoc->GetOutliner(); 145 OutlinerView* pOutlView = pOutliner->GetView(0); 146 147 if ( !pOutliner->GetSpeller().is() ) 148 { 149 Reference< XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() ); 150 if ( xSpellChecker.is() ) 151 pOutliner->SetSpeller( xSpellChecker ); 152 153 Reference< XHyphenator > xHyphenator( LinguMgr::GetHyphenator() ); 154 if( xHyphenator.is() ) 155 pOutliner->SetHyphenator( xHyphenator ); 156 157 pOutliner->SetDefaultLanguage( mpDoc->GetLanguage( EE_CHAR_LANGUAGE ) ); 158 } 159 160 EESpellState eState = pOutlView->StartThesaurus(); 161 DBG_ASSERT(eState != EE_SPELL_NOSPELLER, "No SpellChecker"); 162 163 if (eState == EE_SPELL_NOLANGUAGE) 164 { 165 ErrorBox(mpWindow, WB_OK, String(SdResId(STR_NOLANGUAGE))).Execute(); 166 } 167 } 168 } 169 170 } // end of namespace sd 171