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 #ifndef __FRAMEWORK_PATTERN_FRAME_HXX_ 25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_PATTERN_FRAME_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski //_______________________________________________ 28*b1cdbd2cSJim Jagielski // own includes 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #include <general.h> 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski //_______________________________________________ 33*b1cdbd2cSJim Jagielski // interface includes 34*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/DisposedException.hpp> 39*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCloseable.hpp> 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski //_______________________________________________ 42*b1cdbd2cSJim Jagielski // other includes 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski //_______________________________________________ 45*b1cdbd2cSJim Jagielski // namespaces 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski #ifndef css 48*b1cdbd2cSJim Jagielski namespace css = ::com::sun::star; 49*b1cdbd2cSJim Jagielski #endif 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski namespace framework{ 52*b1cdbd2cSJim Jagielski namespace pattern{ 53*b1cdbd2cSJim Jagielski namespace frame{ 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski //_______________________________________________ 56*b1cdbd2cSJim Jagielski // definitions 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski //----------------------------------------------- extractFrameModel(const css::uno::Reference<css::frame::XFrame> & xFrame)59*b1cdbd2cSJim Jagielskiinline css::uno::Reference< css::frame::XModel > extractFrameModel(const css::uno::Reference< css::frame::XFrame >& xFrame) 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski css::uno::Reference< css::frame::XModel > xModel; 62*b1cdbd2cSJim Jagielski css::uno::Reference< css::frame::XController > xController; 63*b1cdbd2cSJim Jagielski if (xFrame.is()) 64*b1cdbd2cSJim Jagielski xController = xFrame->getController(); 65*b1cdbd2cSJim Jagielski if (xController.is()) 66*b1cdbd2cSJim Jagielski xModel = xController->getModel(); 67*b1cdbd2cSJim Jagielski return xModel; 68*b1cdbd2cSJim Jagielski } 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski //----------------------------------------------- 71*b1cdbd2cSJim Jagielski /** @short close (or dispose) the given resource. 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski @descr It try to close the given resource first. 74*b1cdbd2cSJim Jagielski Delegating of the ownership can be influenced from 75*b1cdbd2cSJim Jagielski outside. If closing isnt possible (because the 76*b1cdbd2cSJim Jagielski needed interface isnt available) dispose() is tried instead. 77*b1cdbd2cSJim Jagielski Al possible exception are handled inside. 78*b1cdbd2cSJim Jagielski So the user of this method has to look for the return value only. 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski @attention The given resource will not be cleared. 81*b1cdbd2cSJim Jagielski But later using of it can produce an exception! 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski @param xResource 84*b1cdbd2cSJim Jagielski the object, which should be closed here. 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski @param bDelegateOwnerShip 87*b1cdbd2cSJim Jagielski used at the XCloseable->close() method to define 88*b1cdbd2cSJim Jagielski the right owner in case closing failed. 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski @return [bool] 91*b1cdbd2cSJim Jagielski sal_True if closing failed. 92*b1cdbd2cSJim Jagielski */ closeIt(const css::uno::Reference<css::uno::XInterface> & xResource,sal_Bool bDelegateOwnerShip)93*b1cdbd2cSJim Jagielskiinline sal_Bool closeIt(const css::uno::Reference< css::uno::XInterface >& xResource , 94*b1cdbd2cSJim Jagielski sal_Bool bDelegateOwnerShip) 95*b1cdbd2cSJim Jagielski { 96*b1cdbd2cSJim Jagielski css::uno::Reference< css::util::XCloseable > xClose (xResource, css::uno::UNO_QUERY); 97*b1cdbd2cSJim Jagielski css::uno::Reference< css::lang::XComponent > xDispose(xResource, css::uno::UNO_QUERY); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski try 100*b1cdbd2cSJim Jagielski { 101*b1cdbd2cSJim Jagielski if (xClose.is()) 102*b1cdbd2cSJim Jagielski xClose->close(bDelegateOwnerShip); 103*b1cdbd2cSJim Jagielski else 104*b1cdbd2cSJim Jagielski if (xDispose.is()) 105*b1cdbd2cSJim Jagielski xDispose->dispose(); 106*b1cdbd2cSJim Jagielski else 107*b1cdbd2cSJim Jagielski return sal_False; 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski catch(const css::util::CloseVetoException&) 110*b1cdbd2cSJim Jagielski { return sal_False; } 111*b1cdbd2cSJim Jagielski catch(const css::lang::DisposedException&) 112*b1cdbd2cSJim Jagielski {} // disposed is closed is ... 113*b1cdbd2cSJim Jagielski catch(const css::uno::RuntimeException&) 114*b1cdbd2cSJim Jagielski { throw; } // shouldnt be suppressed! 115*b1cdbd2cSJim Jagielski catch(const css::uno::Exception&) 116*b1cdbd2cSJim Jagielski { return sal_False; } // ??? We defined to return a boolen value instead of throwing exceptions ... 117*b1cdbd2cSJim Jagielski // (OK: RuntimeExceptions shouldnt be catched inside the core ..) 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski return sal_True; 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski } // namespace frame 123*b1cdbd2cSJim Jagielski } // namespace pattern 124*b1cdbd2cSJim Jagielski } // namespace framework 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski #endif // __FRAMEWORK_PATTERN_FRAME_HXX_ 127