summaryrefslogtreecommitdiff
path: root/framework/source/inc/pattern/frame.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/inc/pattern/frame.hxx')
-rw-r--r--framework/source/inc/pattern/frame.hxx133
1 files changed, 133 insertions, 0 deletions
diff --git a/framework/source/inc/pattern/frame.hxx b/framework/source/inc/pattern/frame.hxx
new file mode 100644
index 000000000000..d112d8a2f1c4
--- /dev/null
+++ b/framework/source/inc/pattern/frame.hxx
@@ -0,0 +1,133 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __FRAMEWORK_PATTERN_FRAME_HXX_
+#define __FRAMEWORK_PATTERN_FRAME_HXX_
+
+//_______________________________________________
+// own includes
+
+#include <general.h>
+
+//_______________________________________________
+// interface includes
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XController.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+
+//_______________________________________________
+// other includes
+
+//_______________________________________________
+// namespaces
+
+#ifndef css
+namespace css = ::com::sun::star;
+#endif
+
+namespace framework{
+ namespace pattern{
+ namespace frame{
+
+//_______________________________________________
+// definitions
+
+//-----------------------------------------------
+inline css::uno::Reference< css::frame::XModel > extractFrameModel(const css::uno::Reference< css::frame::XFrame >& xFrame)
+{
+ css::uno::Reference< css::frame::XModel > xModel;
+ css::uno::Reference< css::frame::XController > xController;
+ if (xFrame.is())
+ xController = xFrame->getController();
+ if (xController.is())
+ xModel = xController->getModel();
+ return xModel;
+}
+
+//-----------------------------------------------
+/** @short close (or dispose) the given resource.
+
+ @descr It try to close the given resource first.
+ Delegating of the ownership can be influenced from
+ outside. If closing isnt possible (because the
+ needed interface isnt available) dispose() is tried instead.
+ Al possible exception are handled inside.
+ So the user of this method has to look for the return value only.
+
+ @attention The given resource will not be cleared.
+ But later using of it can produce an exception!
+
+ @param xResource
+ the object, which should be closed here.
+
+ @param bDelegateOwnerShip
+ used at the XCloseable->close() method to define
+ the right owner in case closing failed.
+
+ @return [bool]
+ sal_True if closing failed.
+ */
+inline sal_Bool closeIt(const css::uno::Reference< css::uno::XInterface >& xResource ,
+ sal_Bool bDelegateOwnerShip)
+{
+ css::uno::Reference< css::util::XCloseable > xClose (xResource, css::uno::UNO_QUERY);
+ css::uno::Reference< css::lang::XComponent > xDispose(xResource, css::uno::UNO_QUERY);
+
+ try
+ {
+ if (xClose.is())
+ xClose->close(bDelegateOwnerShip);
+ else
+ if (xDispose.is())
+ xDispose->dispose();
+ else
+ return sal_False;
+ }
+ catch(const css::util::CloseVetoException&)
+ { return sal_False; }
+ catch(const css::lang::DisposedException&)
+ {} // disposed is closed is ...
+ catch(const css::uno::RuntimeException&)
+ { throw; } // shouldnt be suppressed!
+ catch(const css::uno::Exception&)
+ { return sal_False; } // ??? We defined to return a boolen value instead of throwing exceptions ...
+ // (OK: RuntimeExceptions shouldnt be catched inside the core ..)
+
+ return sal_True;
+}
+
+ } // namespace frame
+ } // namespace pattern
+} // namespace framework
+
+#endif // __FRAMEWORK_PATTERN_FRAME_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */