xref: /trunk/main/sw/source/ui/app/swmodule.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_sw.hxx"
30 
31 
32 #include <hintids.hxx>
33 #ifndef _SWERROR_H
34 #include <swerror.h>
35 #endif
36 #include <vcl/wrkwin.hxx>
37 #include <vcl/graph.hxx>
38 #include <svx/galbrws.hxx>
39 #include <svx/svdobj.hxx>
40 #include <svtools/ehdl.hxx>
41 #include <svx/fntszctl.hxx>
42 #include <svx/fntctl.hxx>
43 #include <svx/SmartTagCtl.hxx>
44 #include <svx/pszctrl.hxx>
45 #include <svx/insctrl.hxx>
46 #include <svx/selctrl.hxx>
47 #include <svx/linectrl.hxx>
48 #include <svx/tbxctl.hxx>           //z-Zt falscher includeschutz!
49 #include <svx/fillctrl.hxx>
50 #include <svx/tbcontrl.hxx>
51 #include <svx/verttexttbxctrl.hxx>
52 #include <svx/formatpaintbrushctrl.hxx>
53 #include <svx/contdlg.hxx>
54 #include <svx/layctrl.hxx>
55 #include <svx/fontwork.hxx>
56 #include <SwSpellDialogChildWindow.hxx>
57 #include <svx/tbxalign.hxx>
58 #include <svx/grafctrl.hxx>
59 #include <svx/tbxcolor.hxx>
60 #include <svx/clipboardctl.hxx>
61 #include <svx/lboxctrl.hxx>
62 #include <svx/hyprlink.hxx>
63 #include <svx/tbxcustomshapes.hxx>
64 #include <svx/imapdlg.hxx>
65 #include <svx/srchdlg.hxx>
66 #include <svx/hyperdlg.hxx>
67 #include <svx/extrusioncolorcontrol.hxx>
68 #include <svx/fontworkgallery.hxx>
69 #include <com/sun/star/scanner/XScannerManager.hpp>
70 #include <com/sun/star/container/XSet.hpp>
71 #include <comphelper/processfactory.hxx>
72 #ifndef _DOCSH_HXX
73 #include <docsh.hxx>
74 #endif
75 #include <swmodule.hxx>
76 #include <swevent.hxx>
77 #include <swacorr.hxx>
78 #ifndef _CMDID_H
79 #include <cmdid.h>
80 #endif
81 #include <dobjfac.hxx>
82 #include <init.hxx>
83 #include <pview.hxx>
84 #include <wview.hxx>
85 #include <wdocsh.hxx>
86 #include <globdoc.hxx>
87 #ifndef _SRCVIEW_HXX //autogen
88 #include <srcview.hxx>
89 #endif
90 #include <glshell.hxx>
91 #include <tabsh.hxx>
92 #include <listsh.hxx>
93 #include <grfsh.hxx>
94 #include <mediash.hxx>
95 #include <olesh.hxx>
96 #include <drawsh.hxx>
97 #include <wformsh.hxx>
98 #include <drwtxtsh.hxx>
99 #include <beziersh.hxx>
100 #include <wtextsh.hxx>
101 #include <wfrmsh.hxx>
102 #ifndef _DRFORMSH_HXX
103 #include <drformsh.hxx>
104 #endif
105 #ifndef _WGRFSH_HXX
106 #include <wgrfsh.hxx>
107 #endif
108 #ifndef _WOLESH_HXX
109 #include <wolesh.hxx>
110 #endif
111 #ifndef _WLISTSH_HXX
112 #include <wlistsh.hxx>
113 #endif
114 #ifndef _WTABSH_HXX
115 #include <wtabsh.hxx>
116 #endif
117 #include <navipi.hxx>
118 #include <chartins.hxx>
119 #include <inputwin.hxx>
120 #include <usrpref.hxx>
121 #include <uinums.hxx>
122 #include <prtopt.hxx>
123 #include <bookctrl.hxx>
124 #include <tmplctrl.hxx>
125 #include <viewlayoutctrl.hxx>
126 #include <svx/zoomsliderctrl.hxx>
127 #include <tblctrl.hxx>
128 #include <zoomctrl.hxx>
129 #include <workctrl.hxx>
130 #include <tbxanchr.hxx>
131 #include <fldwrap.hxx>
132 #ifndef _REDLNDLG_HXX
133 #include <redlndlg.hxx>
134 #endif
135 #ifndef _SYNCBTN_HXX
136 #include <syncbtn.hxx>
137 #endif
138 #include <mailmergechildwindow.hxx>
139 #include <modcfg.hxx>
140 #include <fontcfg.hxx>
141 #include <sfx2/taskpane.hxx>
142 #include <sfx2/evntconf.hxx>
143 #include <sfx2/appuno.hxx>
144 #include <swatrset.hxx>
145 #include <idxmrk.hxx>
146 #include <dlelstnr.hxx>
147 #ifndef _BARCFG_HXX
148 #include <barcfg.hxx>
149 #endif
150 #include <svx/rubydialog.hxx>
151 // OD 14.02.2003 #107424#
152 #include <svtools/colorcfg.hxx>
153 
154 #include <editeng/acorrcfg.hxx>
155 #include <unotools/moduleoptions.hxx>
156 
157 #ifndef _AVMEDIA_MEDIAPPLAYER_HXX
158 #include <avmedia/mediaplayer.hxx>
159 #endif
160 #include <avmedia/mediatoolbox.hxx>
161 
162 #include <annotsh.hxx>
163 
164 #include <app.hrc>
165 #include <svx/xmlsecctrl.hxx>
166 ResMgr *pSwResMgr = 0;
167 sal_Bool    bNoInterrupt    = sal_False;
168 
169 #include <sfx2/app.hxx>
170 
171 #include <svx/svxerr.hxx>
172 
173 #include <unomid.h>
174 
175 using namespace com::sun::star;
176 
177 
178 TYPEINIT1( SwModule, SfxModule );
179 
180 using namespace ::com::sun::star;
181 using namespace ::com::sun::star::uno;
182 
183 //************************************************************************
184 
185 SwModule::SwModule( SfxObjectFactory* pWebFact,
186                     SfxObjectFactory* pFact,
187                     SfxObjectFactory* pGlobalFact )
188     : SfxModule( SfxApplication::CreateResManager( "sw" ), sal_False, pWebFact,
189                      pFact, pGlobalFact, NULL ),
190     pModuleConfig(0),
191     pUsrPref(0),
192     pWebUsrPref(0),
193     pPrtOpt(0),
194     pWebPrtOpt(0),
195     pChapterNumRules(0),
196     pStdFontConfig(0),
197     pNavigationConfig(0),
198     pToolbarConfig(0),
199     pWebToolbarConfig(0),
200     pDBConfig(0),
201     pColorConfig(0),
202     pAccessibilityOptions(0),
203     pCTLOptions(0),
204     pUserOptions(0),
205     pUndoOptions(0),
206     pAttrPool(0),
207     pView(0),
208     bAuthorInitialised(sal_False),
209     bEmbeddedLoadSave( sal_False ),
210     pDragDrop( 0 ),
211     pXSelection( 0 )
212 {
213     SetName( String::CreateFromAscii("StarWriter") );
214     pSwResMgr = GetResMgr();
215     SvxErrorHandler::Get();
216     pErrorHdl = new SfxErrorHandler( RID_SW_ERRHDL,
217                                      ERRCODE_AREA_SW,
218                                      ERRCODE_AREA_SW_END,
219                                      pSwResMgr );
220 
221     pModuleConfig = new SwModuleOptions;
222 
223     //Die brauchen wie sowieso
224     pToolbarConfig = new SwToolbarConfigItem( sal_False );
225     pWebToolbarConfig = new SwToolbarConfigItem( sal_True );
226 
227     pStdFontConfig = new SwStdFontConfig;
228 
229     pAuthorNames = new SvStringsDtor(5, 1); // Alle Redlining-Autoren
230 
231     //JP 18.10.96: SvxAutocorrect gegen die SwAutocorrect austauschen
232     SvxAutoCorrCfg* pACfg = SvxAutoCorrCfg::Get();
233     if( pACfg )
234     {
235         const SvxAutoCorrect* pOld = pACfg->GetAutoCorrect();
236         pACfg->SetAutoCorrect(new SwAutoCorrect( *pOld ));
237     }
238 
239     StartListening( *SFX_APP() );
240 
241     // OD 14.02.2003 #107424# - init color configuration
242     // member <pColorConfig> is created and the color configuration is applied
243     // at the view options.
244     GetColorConfig();
245 }
246 
247 //************************************************************************
248 
249 uno::Reference< scanner::XScannerManager >
250 SwModule::GetScannerManager()
251 {
252     if (!m_xScannerManager.is())
253     {
254         uno::Reference< lang::XMultiServiceFactory > xMgr (
255             comphelper::getProcessServiceFactory() );
256         if( xMgr.is() )
257         {
258             m_xScannerManager =
259                 uno::Reference< scanner::XScannerManager >(
260                     xMgr->createInstance(
261                         rtl::OUString::createFromAscii(
262                             "com.sun.star.scanner.ScannerManager" ) ),
263                     uno::UNO_QUERY );
264         }
265     }
266     return m_xScannerManager;
267 }
268 
269 uno::Reference< linguistic2::XLanguageGuessing > SwModule::GetLanguageGuesser()
270 {
271     if (!m_xLanguageGuesser.is())
272     {
273         uno::Reference< lang::XMultiServiceFactory > xMgr ( comphelper::getProcessServiceFactory() );
274         if (xMgr.is())
275         {
276             m_xLanguageGuesser = uno::Reference< linguistic2::XLanguageGuessing >(
277                     xMgr->createInstance(
278                         rtl::OUString::createFromAscii( "com.sun.star.linguistic2.LanguageGuessing" ) ),
279                         uno::UNO_QUERY );
280         }
281     }
282     return m_xLanguageGuesser;
283 }
284 
285 //************************************************************************
286 
287 SwModule::~SwModule()
288 {
289     SetPool(0);
290     SfxItemPool::Free(pAttrPool);
291     delete pErrorHdl;
292     EndListening( *SFX_APP() );
293 }
294 
295 //************************************************************************
296 
297 void SwModule::CreateLngSvcEvtListener()
298 {
299     if (!xLngSvcEvtListener.is())
300         xLngSvcEvtListener = new SwLinguServiceEventListener;
301 }
302 
303 //************************************************************************
304 
305 void SwDLL::RegisterFactories()
306 {
307     //Diese Id's duerfen nicht geaendert werden. Mittels der Id's wird vom
308     //Sfx die View (Dokumentansicht wiederherstellen) erzeugt.
309     if ( SvtModuleOptions().IsWriter() )
310         SwView::RegisterFactory         ( 2 );
311 
312     SwWebView::RegisterFactory      ( 5 );
313 
314     if ( SvtModuleOptions().IsWriter() )
315     {
316         SwSrcView::RegisterFactory      ( 6 );
317         SwPagePreView::RegisterFactory  ( 7 );
318     }
319 }
320 
321 //************************************************************************
322 
323 
324 void SwDLL::RegisterInterfaces()
325 {
326     SwModule* pMod = SW_MOD();
327     SwModule::RegisterInterface( pMod );
328     SwDocShell::RegisterInterface( pMod );
329     SwWebDocShell::RegisterInterface( pMod );
330     SwGlosDocShell::RegisterInterface( pMod );
331     SwWebGlosDocShell::RegisterInterface( pMod );
332     SwView::RegisterInterface( pMod );
333     SwWebView::RegisterInterface( pMod );
334     SwPagePreView::RegisterInterface( pMod );
335     SwSrcView::RegisterInterface( pMod );
336 
337 
338     SwBaseShell::RegisterInterface(pMod);
339     SwTextShell::RegisterInterface(pMod);
340     SwTableShell::RegisterInterface(pMod);
341     SwListShell::RegisterInterface(pMod);
342     SwFrameShell::RegisterInterface(pMod);
343     SwDrawBaseShell::RegisterInterface(pMod);
344     SwDrawShell::RegisterInterface(pMod);
345     SwDrawFormShell::RegisterInterface(pMod);
346     SwDrawTextShell::RegisterInterface(pMod);
347     SwBezierShell::RegisterInterface(pMod);
348     SwGrfShell::RegisterInterface(pMod);
349     SwOleShell::RegisterInterface(pMod);
350     SwWebTextShell::RegisterInterface(pMod);
351     SwWebFrameShell::RegisterInterface(pMod);
352     SwWebGrfShell::RegisterInterface(pMod);
353     SwWebListShell::RegisterInterface(pMod);
354     SwWebTableShell::RegisterInterface(pMod);
355     SwWebDrawFormShell::RegisterInterface(pMod);
356     SwWebOleShell::RegisterInterface(pMod);
357     SwMediaShell::RegisterInterface(pMod);
358     SwAnnotationShell::RegisterInterface(pMod);
359 }
360 
361 //************************************************************************
362 
363 void SwDLL::RegisterControls()
364 {
365     SwModule* pMod = SW_MOD();
366     SvxTbxCtlDraw::RegisterControl(SID_INSERT_DRAW, pMod );
367     SvxTbxCtlAlign::RegisterControl(SID_OBJECT_ALIGN, pMod );
368     SwTbxAnchor::RegisterControl(FN_TOOL_ANKER, pMod );
369     SwTbxInsertCtrl::RegisterControl(FN_INSERT_CTRL, pMod );
370     SwTbxInsertCtrl::RegisterControl(FN_INSERT_OBJ_CTRL, pMod );
371     SwTbxAutoTextCtrl::RegisterControl(FN_INSERT_FIELD_CTRL, pMod );
372     SwTbxAutoTextCtrl::RegisterControl(FN_GLOSSARY_DLG, pMod );
373 
374     SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_BASIC, pMod );
375     SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_SYMBOL, pMod );
376     SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_ARROW, pMod );
377     SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_FLOWCHART, pMod );
378     SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_CALLOUT, pMod );
379     SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_STAR, pMod );
380 
381     svx::ExtrusionColorControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod );
382     svx::FontWorkShapeTypeControl::RegisterControl( SID_FONTWORK_SHAPE_TYPE, pMod );
383 
384     SvxClipBoardControl::RegisterControl(SID_PASTE, pMod );
385     SvxUndoRedoControl::RegisterControl(SID_UNDO, pMod );
386     SvxUndoRedoControl::RegisterControl(SID_REDO, pMod );
387     svx::FormatPaintBrushToolBoxControl::RegisterControl(SID_FORMATPAINTBRUSH, pMod );
388 
389     SvxFillToolBoxControl::RegisterControl(SID_ATTR_FILL_STYLE, pMod );
390     SvxLineStyleToolBoxControl::RegisterControl(SID_ATTR_LINE_STYLE, pMod );
391     SvxLineWidthToolBoxControl::RegisterControl(SID_ATTR_LINE_WIDTH, pMod );
392     SvxLineColorToolBoxControl::RegisterControl(SID_ATTR_LINE_COLOR, pMod );
393     SvxLineEndToolBoxControl::RegisterControl(SID_ATTR_LINEEND_STYLE, pMod );
394 
395     SvxFontNameToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONT, pMod );
396 //  SvxFontHeightToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONTHEIGHT, pMod );
397     SvxFontColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR, pMod );
398     SvxFontColorExtToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR2, pMod );
399     SvxFontColorExtToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR_BACKGROUND, pMod );
400     SvxStyleToolBoxControl::RegisterControl(SID_STYLE_APPLY, pMod );
401     SvxColorToolBoxControl::RegisterControl(SID_BACKGROUND_COLOR, pMod );
402     SvxFrameToolBoxControl::RegisterControl(SID_ATTR_BORDER, pMod );
403     SvxFrameLineStyleToolBoxControl::RegisterControl(SID_FRAME_LINESTYLE, pMod );
404     SvxFrameLineColorToolBoxControl::RegisterControl(SID_FRAME_LINECOLOR, pMod );
405 
406     SvxColumnsToolBoxControl::RegisterControl(FN_INSERT_FRAME_INTERACT, pMod );
407     SvxColumnsToolBoxControl::RegisterControl(FN_INSERT_FRAME, pMod );
408     SvxColumnsToolBoxControl::RegisterControl(FN_INSERT_REGION, pMod );
409     SvxTableToolBoxControl::RegisterControl(FN_INSERT_TABLE, pMod );
410     SvxTableToolBoxControl::RegisterControl(FN_SHOW_MULTIPLE_PAGES, pMod );
411 
412     SvxFontMenuControl::RegisterControl(SID_ATTR_CHAR_FONT, pMod );
413     SvxFontSizeMenuControl::RegisterControl(SID_ATTR_CHAR_FONTHEIGHT, pMod );
414 
415     SwZoomControl::RegisterControl(SID_ATTR_ZOOM, pMod );
416     SwPreviewZoomControl::RegisterControl(FN_PREVIEW_ZOOM, pMod);
417     SvxPosSizeStatusBarControl::RegisterControl(0, pMod );
418     SvxInsertStatusBarControl::RegisterControl(SID_ATTR_INSERT, pMod );
419     SvxSelectionModeControl::RegisterControl(FN_STAT_SELMODE, pMod );
420     XmlSecStatusBarControl::RegisterControl( SID_SIGNATURE, pMod );
421 
422     SwBookmarkControl::RegisterControl(FN_STAT_PAGE, pMod );
423     SwTemplateControl::RegisterControl(FN_STAT_TEMPLATE, pMod );
424     SwViewLayoutControl::RegisterControl( SID_ATTR_VIEWLAYOUT, pMod );
425     SvxZoomSliderControl::RegisterControl( SID_ATTR_ZOOMSLIDER, pMod );
426 
427     SwTableOptimizeCtrl::RegisterControl(FN_OPTIMIZE_TABLE, pMod);
428 
429     SvxIMapDlgChildWindow::RegisterChildWindow( sal_False, pMod );
430     SvxSearchDialogWrapper::RegisterChildWindow( sal_False, pMod );
431     SvxHlinkDlgWrapper::RegisterChildWindow( sal_False, pMod );
432     SvxHyperlinkDlgWrapper::RegisterChildWindow( sal_False, pMod, SFX_CHILDWIN_FORCEDOCK );
433     SvxFontWorkChildWindow::RegisterChildWindow( sal_False, pMod );
434     SwFldDlgWrapper::RegisterChildWindow( sal_False, pMod );
435     SwFldDataOnlyDlgWrapper::RegisterChildWindow( sal_False, pMod );
436     SvxContourDlgChildWindow::RegisterChildWindow( sal_False, pMod );
437     SwNavigationChild::RegisterChildWindowContext( pMod );
438     SwInputChild::RegisterChildWindow( sal_False, pMod, SFX_CHILDWIN_FORCEDOCK );
439     SwRedlineAcceptChild::RegisterChildWindow( sal_False, pMod );
440     SwSyncChildWin::RegisterChildWindow( sal_True, pMod );
441     SwMailMergeChildWindow::RegisterChildWindow( sal_False, pMod );
442 //    SwSendMailChildWindow::RegisterChildWindow( sal_False, pMod );
443     SwInsertIdxMarkWrapper::RegisterChildWindow( sal_False, pMod );
444     SwInsertAuthMarkWrapper::RegisterChildWindow( sal_False, pMod );
445     SvxRubyChildWindow::RegisterChildWindow( sal_False, pMod);
446     SwSpellDialogChildWindow::RegisterChildWindow(sal_False, pMod);
447 
448     SvxGrafRedToolBoxControl::RegisterControl( SID_ATTR_GRAF_RED, pMod );
449     SvxGrafGreenToolBoxControl::RegisterControl( SID_ATTR_GRAF_GREEN, pMod );
450     SvxGrafBlueToolBoxControl::RegisterControl( SID_ATTR_GRAF_BLUE, pMod );
451     SvxGrafLuminanceToolBoxControl::RegisterControl( SID_ATTR_GRAF_LUMINANCE, pMod );
452     SvxGrafContrastToolBoxControl::RegisterControl( SID_ATTR_GRAF_CONTRAST, pMod );
453     SvxGrafGammaToolBoxControl::RegisterControl( SID_ATTR_GRAF_GAMMA, pMod );
454     SvxGrafTransparenceToolBoxControl::RegisterControl( SID_ATTR_GRAF_TRANSPARENCE, pMod );
455     SvxGrafModeToolBoxControl::RegisterControl( SID_ATTR_GRAF_MODE, pMod );
456     SvxGrafFilterToolBoxControl::RegisterControl( SID_GRFFILTER, pMod );
457     SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_LEFT_TO_RIGHT, pMod);
458     SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_TOP_TO_BOTTOM, pMod);
459     SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_CAPTION_VERTICAL, pMod);
460     SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_TEXT_VERTICAL, pMod);
461 
462     SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_LEFT_TO_RIGHT, pMod);
463     SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod);
464 
465     GalleryChildWindow::RegisterChildWindow(0, pMod);
466 
467     ::avmedia::MediaToolBoxControl::RegisterControl(SID_AVMEDIA_TOOLBOX, pMod);
468     ::avmedia::MediaPlayer::RegisterChildWindow(0, pMod);
469 
470     SvxSmartTagsControl::RegisterControl(SID_OPEN_SMARTTAGMENU, pMod);
471     ::sfx2::TaskPaneWrapper::RegisterChildWindow( sal_False, pMod );
472 }
473 
474 
475 
476 /*************************************************************************
477 |*
478 |* Modul laden (nur Attrappe fuer das Linken der DLL)
479 |*
480 \************************************************************************/
481 
482 /* -----------------20.04.99 10:46-------------------
483  *
484  * --------------------------------------------------*/
485 void    SwModule::InitAttrPool()
486 {
487     DBG_ASSERT(!pAttrPool, "Pool ist schon da!");
488     pAttrPool = new SwAttrPool(0);
489     SetPool(pAttrPool);
490 }
491 /* -----------------20.04.99 10:46-------------------
492  *
493  * --------------------------------------------------*/
494 void    SwModule::RemoveAttrPool()
495 {
496     SetPool(0);
497     SfxItemPool::Free(pAttrPool);
498 }
499 
500 
501