Branch libreoffice-5-0-4
[LibreOffice.git] / include / uno / current_context.hxx
blob5627044039ab61cae8c9ecedad5f07f65e931703
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef INCLUDED_UNO_CURRENT_CONTEXT_HXX
20 #define INCLUDED_UNO_CURRENT_CONTEXT_HXX
22 #include <uno/current_context.h>
23 #include <uno/lbnames.h>
25 #include <com/sun/star/uno/XCurrentContext.hpp>
28 namespace com
30 namespace sun
32 namespace star
34 namespace uno
37 /** Getting the current context.
38 @attention
39 Don't spread the returned interface around to other threads. Every thread has its own
40 current context.
42 @return current context or null ref, if none is set
44 inline Reference< XCurrentContext > SAL_CALL getCurrentContext()
46 Reference< XCurrentContext > xRet;
47 ::rtl::OUString aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME );
48 ::uno_getCurrentContext( reinterpret_cast<void **>(&xRet), aEnvTypeName.pData, 0 );
49 return xRet;
51 /** Setting the current context.
53 @param xContext current context to be set
54 @return true, if context has been successfully set
56 inline bool SAL_CALL setCurrentContext(
57 Reference< XCurrentContext > const & xContext )
59 ::rtl::OUString aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME );
60 return (::uno_setCurrentContext( xContext.get(), aEnvTypeName.pData, 0 ) != sal_False);
63 /** Objects of this class are used for applying a current context until they are destructed, i.e.
64 the ctor of this class saves the previous and sets the given context while the dtor restores
65 the previous one upon destruction.
67 class ContextLayer
69 /** this C++ environment type name.
71 ::rtl::OUString m_aEnvTypeName;
72 /** previous context
74 Reference< XCurrentContext > m_xPreviousContext;
76 public:
77 /** Constructor: Saves the previous context and sets the new (given) one.
79 @param xNewContext new context to be set
81 inline ContextLayer(
82 Reference< XCurrentContext > const & xNewContext = Reference< XCurrentContext >() );
83 /** Destructor: restores the previous context.
85 inline ~ContextLayer();
87 /** Gets the previously set context.
89 @return the previously set context
91 inline Reference< XCurrentContext > SAL_CALL getPreviousContext() const
92 { return m_xPreviousContext; }
95 inline ContextLayer::ContextLayer( Reference< XCurrentContext > const & xNewContext )
96 : m_aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME )
98 ::uno_getCurrentContext( reinterpret_cast<void **>(&m_xPreviousContext), m_aEnvTypeName.pData, 0 );
99 ::uno_setCurrentContext( xNewContext.get(), m_aEnvTypeName.pData, 0 );
102 inline ContextLayer::~ContextLayer()
104 ::uno_setCurrentContext( m_xPreviousContext.get(), m_aEnvTypeName.pData, 0 );
112 #endif
114 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */