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_chart2.hxx" 26 27 #include "StatusBarCommandDispatch.hxx" 28 #include "ObjectNameProvider.hxx" 29 #include "macros.hxx" 30 #include <com/sun/star/util/XModifyBroadcaster.hpp> 31 32 // #ifndef _VOS_MUTEX_HXX_ 33 // #include <vos/mutex.hxx> 34 // #endif 35 // #ifndef _SV_SVAPP_HXX 36 // #include <vcl/svapp.hxx> 37 // #endif 38 39 #include "ResId.hxx" 40 41 using namespace ::com::sun::star; 42 43 using ::com::sun::star::uno::Reference; 44 using ::com::sun::star::uno::Sequence; 45 using ::rtl::OUString; 46 47 namespace chart 48 { 49 50 StatusBarCommandDispatch::StatusBarCommandDispatch( 51 const Reference< uno::XComponentContext > & xContext, 52 const Reference< frame::XModel > & xModel, 53 const Reference< view::XSelectionSupplier > & xSelSupp ) : 54 impl::StatusBarCommandDispatch_Base( xContext ), 55 m_xModifiable( xModel, uno::UNO_QUERY ), 56 m_xSelectionSupplier( xSelSupp ), 57 m_bIsModified( false ) 58 {} 59 60 StatusBarCommandDispatch::~StatusBarCommandDispatch() 61 {} 62 63 void StatusBarCommandDispatch::initialize() 64 { 65 if( m_xModifiable.is()) 66 { 67 Reference< util::XModifyBroadcaster > xModifyBroadcaster( m_xModifiable, uno::UNO_QUERY ); 68 OSL_ASSERT( xModifyBroadcaster.is()); 69 if( xModifyBroadcaster.is()) 70 xModifyBroadcaster->addModifyListener( this ); 71 } 72 73 if( m_xSelectionSupplier.is()) 74 { 75 m_xSelectionSupplier->addSelectionChangeListener( this ); 76 } 77 } 78 79 void StatusBarCommandDispatch::fireStatusEvent( 80 const OUString & rURL, 81 const Reference< frame::XStatusListener > & xSingleListener /* = 0 */ ) 82 { 83 bool bFireAll( rURL.isEmpty() ); 84 bool bFireContext( bFireAll || rURL.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(".uno:Context"))); 85 bool bFireModified( bFireAll || rURL.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(".uno:ModifiedStatus"))); 86 87 if( bFireContext ) 88 { 89 uno::Any aArg; 90 Reference< chart2::XChartDocument > xDoc( m_xModifiable, uno::UNO_QUERY ); 91 aArg <<= ObjectNameProvider::getSelectedObjectText( m_aSelectedOID.getObjectCID(), xDoc ); 92 fireStatusEventForURL( C2U(".uno:Context"), aArg, true, xSingleListener ); 93 } 94 if( bFireModified ) 95 { 96 uno::Any aArg; 97 if( m_bIsModified ) 98 aArg <<= C2U("*"); 99 fireStatusEventForURL( C2U(".uno:ModifiedStatus"), aArg, true, xSingleListener ); 100 } 101 } 102 103 // ____ XDispatch ____ 104 void SAL_CALL StatusBarCommandDispatch::dispatch( 105 const util::URL& /* URL */, 106 const Sequence< beans::PropertyValue >& /* Arguments */ ) 107 throw (uno::RuntimeException) 108 { 109 // nothing to do here 110 } 111 112 // ____ WeakComponentImplHelperBase ____ 113 /// is called when this is disposed 114 void SAL_CALL StatusBarCommandDispatch::disposing() 115 { 116 m_xModifiable.clear(); 117 m_xSelectionSupplier.clear(); 118 } 119 120 // ____ XEventListener (base of XModifyListener) ____ 121 void SAL_CALL StatusBarCommandDispatch::disposing( const lang::EventObject& /* Source */ ) 122 throw (uno::RuntimeException) 123 { 124 m_xModifiable.clear(); 125 m_xSelectionSupplier.clear(); 126 } 127 128 // ____ XModifyListener ____ 129 void SAL_CALL StatusBarCommandDispatch::modified( const lang::EventObject& aEvent ) 130 throw (uno::RuntimeException) 131 { 132 if( m_xModifiable.is()) 133 m_bIsModified = m_xModifiable->isModified(); 134 135 CommandDispatch::modified( aEvent ); 136 } 137 138 // ____ XSelectionChangeListener ____ 139 void SAL_CALL StatusBarCommandDispatch::selectionChanged( const lang::EventObject& /* aEvent */ ) 140 throw (uno::RuntimeException) 141 { 142 if( m_xSelectionSupplier.is()) 143 m_aSelectedOID = ObjectIdentifier( m_xSelectionSupplier->getSelection() ); 144 else 145 m_aSelectedOID = ObjectIdentifier(); 146 fireAllStatusEvents( 0 ); 147 } 148 149 } // namespace chart 150