xref: /trunk/main/sd/source/ui/docshell/docshel3.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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 #include "DrawDocShell.hxx"
32 
33 #include "app.hrc"
34 
35 #ifndef _SVXIDS_HRC
36 #include <svx/svxids.hrc>
37 #endif
38 #ifndef _SVX_DIALOGS_HRC
39 #include <svx/dialogs.hrc>
40 #endif
41 
42 #include <svx/ofaitem.hxx>
43 #include <svx/svxerr.hxx>
44 #include <svx/dialmgr.hxx>
45 #include <svl/srchitem.hxx>
46 #include <svx/srchdlg.hxx>
47 #ifdef _OUTLINER_HXX
48 #include <editeng/outliner.hxx>
49 #endif
50 #include <sfx2/request.hxx>
51 #include <svl/style.hxx>
52 #include <svx/drawitem.hxx>
53 #include <editeng/unolingu.hxx>
54 #include <com/sun/star/i18n/TextConversionOption.hpp>
55 
56 
57 #include "strings.hrc"
58 #include "glob.hrc"
59 #include "res_bmp.hrc"
60 
61 #include "app.hxx"
62 #include "drawdoc.hxx"
63 #include "sdpage.hxx"
64 #include "sdattr.hxx"
65 #include "fusearch.hxx"
66 #include "ViewShell.hxx"
67 #include "View.hxx"
68 #include "slideshow.hxx"
69 #include "fuhhconv.hxx"
70 #include "slideshow.hxx"
71 
72 using namespace ::com::sun::star;
73 using namespace ::com::sun::star::beans;
74 using namespace ::com::sun::star::uno;
75 
76 namespace sd {
77 
78 #define POOL_BUFFER_SIZE        (sal_uInt16)32768
79 #define BASIC_BUFFER_SIZE       (sal_uInt16)8192
80 #define DOCUMENT_BUFFER_SIZE    (sal_uInt16)32768
81 
82 /*************************************************************************
83 |*
84 |* SFX-Requests bearbeiten
85 |*
86 \************************************************************************/
87 
88 void DrawDocShell::Execute( SfxRequest& rReq )
89 {
90     if(mpViewShell && SlideShow::IsRunning( mpViewShell->GetViewShellBase() ))
91     {
92         // during a running presentation no slot will be executed
93         return;
94     }
95 
96     switch ( rReq.GetSlot() )
97     {
98         case SID_SEARCH_ITEM:
99         {
100             const SfxItemSet* pReqArgs = rReq.GetArgs();
101 
102             if (pReqArgs)
103             {
104                 const SvxSearchItem* pSearchItem =
105                 (const SvxSearchItem*) &pReqArgs->Get(SID_SEARCH_ITEM);
106 
107                 // ein Zuweisungsoperator am SearchItem waer nicht schlecht...
108                 SvxSearchItem* pAppSearchItem = SD_MOD()->GetSearchItem();
109                 delete pAppSearchItem;
110                 pAppSearchItem = (SvxSearchItem*) pSearchItem->Clone();
111                 SD_MOD()->SetSearchItem(pAppSearchItem);
112             }
113 
114             rReq.Done();
115         }
116         break;
117 
118         case FID_SEARCH_ON:
119         {
120             // Keine Aktion noetig
121             rReq.Done();
122         }
123         break;
124 
125         case FID_SEARCH_OFF:
126         {
127             if( dynamic_cast< FuSearch* >(mxDocShellFunction.get()) )
128             {
129                 // Suchen&Ersetzen in allen DocShells beenden
130                 SfxObjectShell* pFirstShell = SfxObjectShell::GetFirst();
131                 SfxObjectShell* pShell = pFirstShell;
132 
133                 while (pShell)
134                 {
135                     if (pShell->ISA(DrawDocShell))
136                     {
137                         ( (DrawDocShell*) pShell)->CancelSearching();
138                     }
139 
140                     pShell = SfxObjectShell::GetNext(*pShell);
141 
142                     if (pShell == pFirstShell)
143                     {
144                         pShell = NULL;
145                     }
146                 }
147 
148                 SetDocShellFunction(0);
149                 Invalidate();
150                 rReq.Done();
151             }
152         }
153         break;
154 
155         case FID_SEARCH_NOW:
156         {
157             const SfxItemSet* pReqArgs = rReq.GetArgs();
158 
159             if ( pReqArgs )
160             {
161                 rtl::Reference< FuSearch > xFuSearch( dynamic_cast< FuSearch* >( GetDocShellFunction().get() ) );
162 
163                 if( !xFuSearch.is() && mpViewShell )
164                 {
165                     ::sd::View* pView = mpViewShell->GetView();
166                     SetDocShellFunction( FuSearch::Create( mpViewShell, mpViewShell->GetActiveWindow(), pView, mpDoc, rReq ) );
167                     xFuSearch.set( dynamic_cast< FuSearch* >( GetDocShellFunction().get() ) );
168                 }
169 
170                 if( xFuSearch.is() )
171                 {
172                     const SvxSearchItem* pSearchItem =
173                     (const SvxSearchItem*) &pReqArgs->Get(SID_SEARCH_ITEM);
174 
175                     // ein Zuweisungsoperator am SearchItem waer nicht schlecht...
176                     SvxSearchItem* pAppSearchItem = SD_MOD()->GetSearchItem();
177                     delete pAppSearchItem;
178                     pAppSearchItem = (SvxSearchItem*)pSearchItem->Clone();
179                     SD_MOD()->SetSearchItem(pAppSearchItem);
180                     xFuSearch->SearchAndReplace(pSearchItem);
181                 }
182             }
183 
184             rReq.Done();
185         }
186         break;
187 
188         case SID_CLOSEDOC:
189         {
190 //            SfxObjectShell::DoClose();
191             ExecuteSlot(rReq, SfxObjectShell::GetStaticInterface());
192         }
193         break;
194 
195         case SID_GET_COLORTABLE:
196         {
197             //  passende ColorTable ist per PutItem gesetzt worden
198             SvxColorTableItem* pColItem = (SvxColorTableItem*) GetItem( SID_COLOR_TABLE );
199             XColorTable* pTable = pColItem->GetColorTable();
200             rReq.SetReturnValue( OfaPtrItem( SID_GET_COLORTABLE, pTable ) );
201         }
202         break;
203 
204         case SID_VERSION:
205         {
206             const sal_uLong nOldSwapMode = mpDoc->GetSwapGraphicsMode();
207 
208             mpDoc->SetSwapGraphicsMode( SDR_SWAPGRAPHICSMODE_TEMP );
209             ExecuteSlot( rReq, SfxObjectShell::GetStaticInterface() );
210             mpDoc->SetSwapGraphicsMode( nOldSwapMode );
211         }
212         break;
213 
214         case SID_HANGUL_HANJA_CONVERSION:
215         {
216             if( mpViewShell )
217             {
218                 FunctionReference aFunc( FuHangulHanjaConversion::Create( mpViewShell, mpViewShell->GetActiveWindow(), mpViewShell->GetView(), mpDoc, rReq ) );
219                 static_cast< FuHangulHanjaConversion* >( aFunc.get() )->StartConversion( LANGUAGE_KOREAN, LANGUAGE_KOREAN, NULL, i18n::TextConversionOption::CHARACTER_BY_CHARACTER, sal_True );
220             }
221         }
222         break;
223 
224         case SID_CHINESE_CONVERSION:
225         {
226             if( mpViewShell )
227             {
228                 FunctionReference aFunc( FuHangulHanjaConversion::Create( mpViewShell, mpViewShell->GetActiveWindow(), mpViewShell->GetView(), mpDoc, rReq ) );
229                 static_cast< FuHangulHanjaConversion* >( aFunc.get() )->StartChineseConversion();
230             }
231         }
232         break;
233 
234         default:
235         break;
236     }
237 }
238 
239 /*************************************************************************
240 |*
241 |* Suchmaske fuer Organizer
242 |*
243 \************************************************************************/
244 
245 void DrawDocShell::SetOrganizerSearchMask(SfxStyleSheetBasePool* pBasePool) const
246 {
247     pBasePool->SetSearchMask(SD_STYLE_FAMILY_GRAPHICS, SFXSTYLEBIT_USERDEF | SFXSTYLEBIT_USED);
248 }
249 
250 
251 void DrawDocShell::SetDocShellFunction( const ::sd::FunctionReference& xFunction )
252 {
253     if( mxDocShellFunction.is() )
254         mxDocShellFunction->Dispose();
255 
256     mxDocShellFunction = xFunction;
257 }
258 
259 } // end of namespace sd
260