xref: /AOO41X/main/cui/source/customize/eventdlg.cxx (revision ff0525f24f03981d56b7579b645949f111420994)
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_cui.hxx"
26 
27 // include ***************************************************************
28 #include <svtools/svmedit.hxx>
29 #include <tools/diagnose_ex.h>
30 #include <com/sun/star/document/XEventsSupplier.hpp>
31 #include <com/sun/star/frame/XModuleManager.hpp>
32 
33 #include <comphelper/processfactory.hxx>
34 #include <comphelper/documentinfo.hxx>
35 #include <unotools/configmgr.hxx>
36 #include <rtl/ustring.hxx>
37 
38 #include "eventdlg.hxx"
39 
40 #include <sfx2/viewfrm.hxx>
41 #include <sfx2/evntconf.hxx>
42 #include <sfx2/minfitem.hxx>
43 #include <sfx2/app.hxx>
44 #include <sfx2/objsh.hxx>
45 #include <sfx2/docfac.hxx>
46 #include <sfx2/fcontnr.hxx>
47 #include <unotools/eventcfg.hxx>
48 
49 #include "headertablistbox.hxx"
50 #include "macropg_impl.hxx"
51 
52 #include <dialmgr.hxx>
53 #include <cuires.hrc>
54 #include "eventdlg.hrc"
55 #include "helpid.hrc"
56 #include "selector.hxx"
57 #include "cfg.hxx"
58 
59 
60 using ::rtl::OUString;
61 using namespace ::com::sun::star;
62 // -----------------------------------------------------------------------
63 
64 SvxEventConfigPage::SvxEventConfigPage( Window *pParent, const SfxItemSet& rSet, SvxEventConfigPage::EarlyInit ) :
65 
66     _SvxMacroTabPage( pParent, CUI_RES(RID_SVXPAGE_EVENTS), rSet ),
67     aSaveInText( this, CUI_RES( TXT_SAVEIN ) ),
68     aSaveInListBox( this, CUI_RES( LB_SAVEIN ) ),
69     bAppConfig  ( sal_True )
70 {
71     mpImpl->pStrEvent           = new String( CUI_RES( STR_EVENT ));
72     mpImpl->pAssignedMacro      = new String( CUI_RES( STR_ASSMACRO ));
73     mpImpl->pEventLB            = new _HeaderTabListBox( this, CUI_RES( LB_EVENT ));
74     mpImpl->pAssignFT           = new FixedText( this,  CUI_RES( FT_ASSIGN ));
75     mpImpl->pAssignPB           = new PushButton( this, CUI_RES( PB_ASSIGN ));
76     mpImpl->pDeletePB           = new PushButton( this, CUI_RES( PB_DELETE ));
77     mpImpl->pMacroImg           = new Image( CUI_RES( IMG_MACRO) );
78     mpImpl->pComponentImg       = new Image( CUI_RES( IMG_COMPONENT) );
79     mpImpl->pMacroImg_h         = new Image( CUI_RES( IMG_MACRO_H) );
80     mpImpl->pComponentImg_h     = new Image( CUI_RES( IMG_COMPONENT_H) );
81 
82     FreeResource();
83 
84     // must be done after FreeResource is called
85     InitResources();
86 
87     mpImpl->pEventLB->GetListBox().SetHelpId( HID_SVX_MACRO_LB_EVENT );
88 
89     aSaveInListBox.SetSelectHdl( LINK( this, SvxEventConfigPage,
90                 SelectHdl_Impl ) );
91 
92     uno::Reference< document::XEventsSupplier > xSupplier;
93 
94 //    xSupplier = uno::Reference< document::XEventsSupplier >( new GlobalEventConfig());
95     xSupplier = uno::Reference< document::XEventsSupplier > (
96         ::comphelper::getProcessServiceFactory()->createInstance(
97             OUString::createFromAscii(
98                 "com.sun.star.frame.GlobalEventBroadcaster" ) ),
99         uno::UNO_QUERY );
100 
101     sal_uInt16 nPos(0);
102     if ( xSupplier.is() )
103     {
104         m_xAppEvents = xSupplier->getEvents();
105         OUString label;
106         utl::ConfigManager::GetDirectConfigProperty(
107             utl::ConfigManager::PRODUCTNAME ) >>= label;
108         nPos = aSaveInListBox.InsertEntry( label );
109         aSaveInListBox.SetEntryData( nPos, new bool(true) );
110         aSaveInListBox.SelectEntryPos( nPos, sal_True );
111     }
112 }
113 
114 // -----------------------------------------------------------------------
115 void SvxEventConfigPage::LateInit( const uno::Reference< frame::XFrame >& _rxFrame  )
116 {
117     SetFrame( _rxFrame );
118     ImplInitDocument();
119 
120     InitAndSetHandler( m_xAppEvents, m_xDocumentEvents, m_xDocumentModifiable );
121 
122     SelectHdl_Impl( NULL );
123 }
124 
125 // -----------------------------------------------------------------------
126 
127 SvxEventConfigPage::~SvxEventConfigPage()
128 {
129     //DF Do I need to delete bools?
130 }
131 
132 // -----------------------------------------------------------------------
133 
134 void SvxEventConfigPage::ImplInitDocument()
135 {
136     uno::Reference< frame::XFrame > xFrame( GetFrame() );
137     OUString aModuleId = SvxConfigPage::GetFrameWithDefaultAndIdentify( xFrame );
138     if ( !xFrame.is() )
139         return;
140 
141     try
142     {
143         uno::Reference< frame::XModel > xModel;
144         if ( !SvxConfigPage::CanConfig( aModuleId ) )
145             return;
146 
147         uno::Reference< frame::XController > xController =
148             xFrame->getController();
149 
150         if ( xController.is() )
151         {
152             xModel = xController->getModel();
153         }
154 
155         if ( !xModel.is() )
156             return;
157 
158         uno::Reference< document::XEventsSupplier > xSupplier( xModel, uno::UNO_QUERY );
159 
160         if ( xSupplier.is() )
161         {
162             m_xDocumentEvents = xSupplier->getEvents();
163             m_xDocumentModifiable = m_xDocumentModifiable.query( xModel );
164 
165             OUString aTitle = ::comphelper::DocumentInfo::getDocumentTitle( xModel );
166             sal_uInt16 nPos = aSaveInListBox.InsertEntry( aTitle );
167 
168             aSaveInListBox.SetEntryData( nPos, new bool(false) );
169             aSaveInListBox.SelectEntryPos( nPos, sal_True );
170 
171             bAppConfig = false;
172         }
173     }
174     catch( const uno::Exception& )
175     {
176         DBG_UNHANDLED_EXCEPTION();
177     }
178 }
179 
180 // -----------------------------------------------------------------------
181 
182 IMPL_LINK( SvxEventConfigPage, SelectHdl_Impl, ListBox *, pBox )
183 {
184     (void)pBox;
185 
186     bool* bApp = (bool*) aSaveInListBox.GetEntryData(
187             aSaveInListBox.GetSelectEntryPos());
188 
189     mpImpl->pEventLB->SetUpdateMode( sal_False );
190     bAppConfig = *bApp;
191     if ( *bApp )
192     {
193         SetReadOnly( sal_False );
194         _SvxMacroTabPage::DisplayAppEvents( true );
195     }
196     else
197     {
198         bool isReadonly = sal_False;
199 
200         uno::Reference< frame::XFramesSupplier > xFramesSupplier(
201             ::comphelper::getProcessServiceFactory()->createInstance(
202                 OUString::createFromAscii( "com.sun.star.frame.Desktop" ) ),
203             uno::UNO_QUERY );
204 
205         uno::Reference< frame::XFrame > xFrame =
206             xFramesSupplier->getActiveFrame();
207 
208         if ( xFrame.is() )
209         {
210             uno::Reference< frame::XController > xController =
211                 xFrame->getController();
212 
213             if ( xController.is() )
214             {
215                 uno::Reference< frame::XStorable > xStorable(
216                     xController->getModel(), uno::UNO_QUERY );
217                 isReadonly = xStorable->isReadonly();
218             }
219         }
220 
221         SetReadOnly( isReadonly );
222         _SvxMacroTabPage::DisplayAppEvents( false );
223     }
224 
225     mpImpl->pEventLB->SetUpdateMode( sal_True );
226     return sal_True;
227 }
228 
229 // -----------------------------------------------------------------------
230 
231 sal_Bool SvxEventConfigPage::FillItemSet( SfxItemSet& rSet )
232 {
233     return _SvxMacroTabPage::FillItemSet( rSet );
234 }
235 
236 // -----------------------------------------------------------------------
237 
238 void SvxEventConfigPage::Reset( const SfxItemSet& )
239 {
240     _SvxMacroTabPage::Reset();
241 }
242 
243