1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #include "precompiled_dbaccess.hxx" 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include "dbaundomanager.hxx" 27*b1cdbd2cSJim Jagielski #include "singledoccontroller.hxx" 28*b1cdbd2cSJim Jagielski #include "browserids.hxx" 29*b1cdbd2cSJim Jagielski #include "dbu_misc.hrc" 30*b1cdbd2cSJim Jagielski #include "dbustrings.hrc" 31*b1cdbd2cSJim Jagielski #include "moduledbu.hxx" 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 34*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski #include <svl/undo.hxx> 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #include <boost/scoped_ptr.hpp> 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski //...................................................................................................................... 41*b1cdbd2cSJim Jagielski namespace dbaui 42*b1cdbd2cSJim Jagielski { 43*b1cdbd2cSJim Jagielski //...................................................................................................................... 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski /** === begin UNO using === **/ 46*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference; 47*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XInterface; 48*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY; 49*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY_THROW; 50*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_SET_THROW; 51*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Exception; 52*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::RuntimeException; 53*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Any; 54*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::makeAny; 55*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Sequence; 56*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Type; 57*b1cdbd2cSJim Jagielski using ::com::sun::star::document::XUndoManager; 58*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::XMultiServiceFactory; 59*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::PropertyValue; 60*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::EventObject; 61*b1cdbd2cSJim Jagielski /** === end UNO using === **/ 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski //================================================================================================================== 64*b1cdbd2cSJim Jagielski //= OSingleDocumentController_Data 65*b1cdbd2cSJim Jagielski //================================================================================================================== 66*b1cdbd2cSJim Jagielski struct OSingleDocumentController_Data 67*b1cdbd2cSJim Jagielski { 68*b1cdbd2cSJim Jagielski ::boost::scoped_ptr< UndoManager > m_pUndoManager; 69*b1cdbd2cSJim Jagielski OSingleDocumentController_Datadbaui::OSingleDocumentController_Data70*b1cdbd2cSJim Jagielski OSingleDocumentController_Data( ::cppu::OWeakObject& i_parent, ::osl::Mutex& i_mutex ) 71*b1cdbd2cSJim Jagielski :m_pUndoManager( new UndoManager( i_parent, i_mutex ) ) 72*b1cdbd2cSJim Jagielski { 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski }; 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski //================================================================================================================== 77*b1cdbd2cSJim Jagielski //= OSingleDocumentController 78*b1cdbd2cSJim Jagielski //================================================================================================================== 79*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ OSingleDocumentController(const Reference<XMultiServiceFactory> & _rxORB)80*b1cdbd2cSJim Jagielski OSingleDocumentController::OSingleDocumentController( const Reference< XMultiServiceFactory >& _rxORB ) 81*b1cdbd2cSJim Jagielski :OSingleDocumentController_Base( _rxORB ) 82*b1cdbd2cSJim Jagielski ,m_pData( new OSingleDocumentController_Data( *this, getMutex() ) ) 83*b1cdbd2cSJim Jagielski { 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ ~OSingleDocumentController()87*b1cdbd2cSJim Jagielski OSingleDocumentController::~OSingleDocumentController() 88*b1cdbd2cSJim Jagielski { 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- disposing()92*b1cdbd2cSJim Jagielski void SAL_CALL OSingleDocumentController::disposing() 93*b1cdbd2cSJim Jagielski { 94*b1cdbd2cSJim Jagielski OSingleDocumentController_Base::disposing(); 95*b1cdbd2cSJim Jagielski ClearUndoManager(); 96*b1cdbd2cSJim Jagielski m_pData->m_pUndoManager->disposing(); 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- disposing(const EventObject & i_event)100*b1cdbd2cSJim Jagielski void SAL_CALL OSingleDocumentController::disposing( const EventObject& i_event ) throw( RuntimeException ) 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski // simply disambiguate 103*b1cdbd2cSJim Jagielski OSingleDocumentController_Base::disposing( i_event ); 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- ClearUndoManager()107*b1cdbd2cSJim Jagielski void OSingleDocumentController::ClearUndoManager() 108*b1cdbd2cSJim Jagielski { 109*b1cdbd2cSJim Jagielski GetUndoManager().Clear(); 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- GetUndoManager() const113*b1cdbd2cSJim Jagielski SfxUndoManager& OSingleDocumentController::GetUndoManager() const 114*b1cdbd2cSJim Jagielski { 115*b1cdbd2cSJim Jagielski return m_pData->m_pUndoManager->GetSfxUndoManager(); 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- addUndoActionAndInvalidate(SfxUndoAction * _pAction)119*b1cdbd2cSJim Jagielski void OSingleDocumentController::addUndoActionAndInvalidate(SfxUndoAction *_pAction) 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski // add undo action 122*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( _pAction ); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski // when we add an undo action the controller was modified 125*b1cdbd2cSJim Jagielski setModified( sal_True ); 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski // now inform me that or states changed 128*b1cdbd2cSJim Jagielski InvalidateFeature( ID_BROWSER_UNDO ); 129*b1cdbd2cSJim Jagielski InvalidateFeature( ID_BROWSER_REDO ); 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- getUndoManager()133*b1cdbd2cSJim Jagielski Reference< XUndoManager > SAL_CALL OSingleDocumentController::getUndoManager( ) throw (RuntimeException) 134*b1cdbd2cSJim Jagielski { 135*b1cdbd2cSJim Jagielski return m_pData->m_pUndoManager.get(); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- GetState(sal_uInt16 _nId) const139*b1cdbd2cSJim Jagielski FeatureState OSingleDocumentController::GetState(sal_uInt16 _nId) const 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski FeatureState aReturn; 142*b1cdbd2cSJim Jagielski switch ( _nId ) 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski case ID_BROWSER_UNDO: 145*b1cdbd2cSJim Jagielski aReturn.bEnabled = isEditable() && GetUndoManager().GetUndoActionCount() != 0; 146*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled ) 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski String sUndo(ModuleRes(STR_UNDO_COLON)); 149*b1cdbd2cSJim Jagielski sUndo += String(RTL_CONSTASCII_USTRINGPARAM(" ")); 150*b1cdbd2cSJim Jagielski sUndo += GetUndoManager().GetUndoActionComment(); 151*b1cdbd2cSJim Jagielski aReturn.sTitle = sUndo; 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski break; 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski case ID_BROWSER_REDO: 156*b1cdbd2cSJim Jagielski aReturn.bEnabled = isEditable() && GetUndoManager().GetRedoActionCount() != 0; 157*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled ) 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski String sRedo(ModuleRes(STR_REDO_COLON)); 160*b1cdbd2cSJim Jagielski sRedo += String(RTL_CONSTASCII_USTRINGPARAM(" ")); 161*b1cdbd2cSJim Jagielski sRedo += GetUndoManager().GetRedoActionComment(); 162*b1cdbd2cSJim Jagielski aReturn.sTitle = sRedo; 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski break; 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski default: 167*b1cdbd2cSJim Jagielski aReturn = OSingleDocumentController_Base::GetState(_nId); 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski return aReturn; 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- Execute(sal_uInt16 _nId,const Sequence<PropertyValue> & _rArgs)172*b1cdbd2cSJim Jagielski void OSingleDocumentController::Execute( sal_uInt16 _nId, const Sequence< PropertyValue >& _rArgs ) 173*b1cdbd2cSJim Jagielski { 174*b1cdbd2cSJim Jagielski switch ( _nId ) 175*b1cdbd2cSJim Jagielski { 176*b1cdbd2cSJim Jagielski case ID_BROWSER_UNDO: 177*b1cdbd2cSJim Jagielski GetUndoManager().Undo(); 178*b1cdbd2cSJim Jagielski InvalidateFeature( ID_BROWSER_UNDO ); 179*b1cdbd2cSJim Jagielski InvalidateFeature( ID_BROWSER_REDO ); 180*b1cdbd2cSJim Jagielski break; 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski case ID_BROWSER_REDO: 183*b1cdbd2cSJim Jagielski GetUndoManager().Redo(); 184*b1cdbd2cSJim Jagielski InvalidateFeature( ID_BROWSER_UNDO ); 185*b1cdbd2cSJim Jagielski InvalidateFeature( ID_BROWSER_REDO ); 186*b1cdbd2cSJim Jagielski break; 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski default: 189*b1cdbd2cSJim Jagielski OSingleDocumentController_Base::Execute( _nId, _rArgs ); 190*b1cdbd2cSJim Jagielski break; 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski InvalidateFeature(_nId); 193*b1cdbd2cSJim Jagielski } 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski //...................................................................................................................... 196*b1cdbd2cSJim Jagielski } // namespace dbaui 197*b1cdbd2cSJim Jagielski //...................................................................................................................... 198