Update git submodules
[LibreOffice.git] / include / uno / current_context.hxx
blobdce03d9ee24b94603a835e2ba4645a9de24061c3
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 .
21 * This file is part of LibreOffice published API.
23 #ifndef INCLUDED_UNO_CURRENT_CONTEXT_HXX
24 #define INCLUDED_UNO_CURRENT_CONTEXT_HXX
26 #include "sal/config.h"
28 #include <cstddef>
30 #include "uno/current_context.h"
31 #include "uno/lbnames.h"
33 #include "com/sun/star/uno/XCurrentContext.hpp"
36 namespace com
38 namespace sun
40 namespace star
42 namespace uno
45 /** Getting the current context.
46 @attention
47 Don't spread the returned interface around to other threads. Every thread has its own
48 current context.
50 @return current context or null ref, if none is set
52 inline Reference< XCurrentContext > SAL_CALL getCurrentContext()
54 Reference< XCurrentContext > xRet;
55 ::rtl::OUString aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME );
56 ::uno_getCurrentContext( reinterpret_cast<void **>(&xRet), aEnvTypeName.pData, NULL );
57 return xRet;
59 /** Setting the current context.
61 @param xContext current context to be set
62 @return true, if context has been successfully set
64 inline bool SAL_CALL setCurrentContext(
65 Reference< XCurrentContext > const & xContext )
67 ::rtl::OUString aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME );
68 return ::uno_setCurrentContext( xContext.get(), aEnvTypeName.pData, NULL );
71 /** Objects of this class are used for applying a current context until they are destructed, i.e.
72 the ctor of this class saves the previous and sets the given context while the dtor restores
73 the previous one upon destruction.
75 class ContextLayer
77 /** this C++ environment type name.
79 ::rtl::OUString m_aEnvTypeName;
80 /** previous context
82 Reference< XCurrentContext > m_xPreviousContext;
84 public:
85 /** Constructor: Saves the previous context and sets the new (given) one.
87 @param xNewContext new context to be set
89 inline ContextLayer(
90 Reference< XCurrentContext > const & xNewContext = Reference< XCurrentContext >() );
91 /** Destructor: restores the previous context.
93 inline ~ContextLayer();
95 /** Gets the previously set context.
97 @return the previously set context
99 Reference< XCurrentContext > SAL_CALL getPreviousContext() const
100 { return m_xPreviousContext; }
103 inline ContextLayer::ContextLayer( Reference< XCurrentContext > const & xNewContext )
104 : m_aEnvTypeName( CPPU_CURRENT_LANGUAGE_BINDING_NAME )
106 ::uno_getCurrentContext( reinterpret_cast<void **>(&m_xPreviousContext), m_aEnvTypeName.pData, NULL );
107 ::uno_setCurrentContext( xNewContext.get(), m_aEnvTypeName.pData, NULL );
110 inline ContextLayer::~ContextLayer()
112 ::uno_setCurrentContext( m_xPreviousContext.get(), m_aEnvTypeName.pData, NULL );
120 #endif
122 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */