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_sfx2.hxx"
26
27 #ifndef GCC
28 #endif
29 #include <svl/whiter.hxx>
30 #include <svl/eitem.hxx>
31
32 #include <sfx2/app.hxx>
33 #include "appdata.hxx"
34 #include "workwin.hxx"
35 #include <sfx2/childwin.hxx>
36 #include "arrdecl.hxx"
37 #include <sfx2/templdlg.hxx>
38 #include <sfx2/request.hxx>
39 #include <sfx2/bindings.hxx>
40 #include <sfx2/dispatch.hxx>
41 #include "sfxtypes.hxx"
42 #include <sfx2/module.hxx>
43 #include <sfx2/sfxsids.hrc>
44
45 //=========================================================================
46
47
RegisterChildWindow_Impl(SfxModule * pMod,SfxChildWinFactory * pFact)48 void SfxApplication::RegisterChildWindow_Impl( SfxModule *pMod, SfxChildWinFactory *pFact )
49 {
50 if ( pMod )
51 {
52 pMod->RegisterChildWindow( pFact );
53 return;
54 }
55
56 if (!pAppData_Impl->pFactArr)
57 pAppData_Impl->pFactArr = new SfxChildWinFactArr_Impl;
58
59 //#ifdef DBG_UTIL
60 for (sal_uInt16 nFactory=0; nFactory<pAppData_Impl->pFactArr->Count(); ++nFactory)
61 {
62 if (pFact->nId == (*pAppData_Impl->pFactArr)[nFactory]->nId)
63 {
64 pAppData_Impl->pFactArr->Remove( nFactory );
65 // DBG_ERROR("ChildWindow mehrfach registriert!");
66 // return;
67 }
68 }
69 //#endif
70
71 pAppData_Impl->pFactArr->C40_INSERT(
72 SfxChildWinFactory, pFact, pAppData_Impl->pFactArr->Count() );
73 }
74
RegisterChildWindowContext_Impl(SfxModule * pMod,sal_uInt16 nId,SfxChildWinContextFactory * pFact)75 void SfxApplication::RegisterChildWindowContext_Impl( SfxModule *pMod, sal_uInt16 nId,
76 SfxChildWinContextFactory *pFact)
77 {
78 SfxChildWinFactArr_Impl *pFactories;
79 SfxChildWinFactory *pF = NULL;
80 if ( pMod )
81 {
82 // Modul "ubergeben, ChildwindowFactory dort suchen
83 pFactories = pMod->GetChildWinFactories_Impl();
84 if ( pFactories )
85 {
86 sal_uInt16 nCount = pFactories->Count();
87 for (sal_uInt16 nFactory=0; nFactory<nCount; ++nFactory)
88 {
89 SfxChildWinFactory *pFac = (*pFactories)[nFactory];
90 if ( nId == pFac->nId )
91 {
92 // Factory gefunden, Context dort registrieren
93 pF = pFac;
94 break;
95 }
96 }
97 }
98 }
99
100 if ( !pF )
101 {
102 // Factory an der Application suchen
103 DBG_ASSERT( pAppData_Impl, "Keine AppDaten!" );
104 DBG_ASSERT( pAppData_Impl->pFactArr, "Keine Factories!" );
105
106 pFactories = pAppData_Impl->pFactArr;
107 sal_uInt16 nCount = pFactories->Count();
108 for (sal_uInt16 nFactory=0; nFactory<nCount; ++nFactory)
109 {
110 SfxChildWinFactory *pFac = (*pFactories)[nFactory];
111 if ( nId == pFac->nId )
112 {
113 if ( pMod )
114 {
115 // Wenn der Context von einem Modul registriert wurde,
116 // mu\s die ChildwindowFactory auch dort zur Verf"ugung
117 // stehen, sonst m"u\ste sich die Contextfactory im DLL-Exit
118 // wieder abmelden !
119 pF = new SfxChildWinFactory( pFac->pCtor, pFac->nId,
120 pFac->nPos );
121 pMod->RegisterChildWindow( pF );
122 }
123 else
124 pF = pFac;
125 break;
126 }
127 }
128 }
129
130 if ( pF )
131 {
132 if ( !pF->pArr )
133 pF->pArr = new SfxChildWinContextArr_Impl;
134 pF->pArr->C40_INSERT( SfxChildWinContextFactory, pFact, pF->pArr->Count() );
135 return;
136 }
137
138 DBG_ERROR( "Kein ChildWindow fuer diesen Context!" );
139 }
140
141 //--------------------------------------------------------------------
142
GetChildWinFactories_Impl() const143 SfxChildWinFactArr_Impl& SfxApplication::GetChildWinFactories_Impl() const
144 {
145 return ( *(pAppData_Impl->pFactArr));
146 }
147
148 //--------------------------------------------------------------------
149
GetTemplateDialog()150 SfxTemplateDialog* SfxApplication::GetTemplateDialog()
151 {
152 if ( pAppData_Impl->pViewFrame )
153 {
154 SfxChildWindow *pChild = pAppData_Impl->pViewFrame->GetChildWindow(SfxTemplateDialogWrapper::GetChildWindowId());
155 return pChild ? (SfxTemplateDialog*) pChild->GetWindow() : 0;
156 }
157
158 return NULL;
159 }
160
161 //--------------------------------------------------------------------
162
GetWorkWindow_Impl(const SfxViewFrame * pFrame) const163 SfxWorkWindow* SfxApplication::GetWorkWindow_Impl(const SfxViewFrame *pFrame) const
164 {
165 if ( pFrame )
166 return pFrame->GetFrame().GetWorkWindow_Impl();
167 else if ( pAppData_Impl->pViewFrame )
168 return pAppData_Impl->pViewFrame->GetFrame().GetWorkWindow_Impl();
169 else
170 return NULL;
171 }
172
173