LibreOffice Module desktop (master)  1
dp_interact.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
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/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
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 .
18  */
19 
20 #ifndef INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_INC_DP_INTERACT_H
21 #define INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_INC_DP_INTERACT_H
22 
23 #include <rtl/ref.hxx>
24 #include <cppuhelper/implbase.hxx>
25 #include <com/sun/star/uno/XComponentContext.hpp>
26 #include <com/sun/star/ucb/XCommandEnvironment.hpp>
27 #include <com/sun/star/task/XAbortChannel.hpp>
28 #include "dp_misc_api.hxx"
29 
30 namespace dp_misc
31 {
32 
33 inline void progressUpdate(
34  OUString const & status,
35  css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
36 {
37  if (xCmdEnv.is()) {
38  css::uno::Reference<css::ucb::XProgressHandler> xProgressHandler(
39  xCmdEnv->getProgressHandler() );
40  if (xProgressHandler.is()) {
41  xProgressHandler->update( css::uno::makeAny(status) );
42  }
43  }
44 }
45 
46 
48 {
49  css::uno::Reference<css::ucb::XProgressHandler> m_xProgressHandler;
50 
51 public:
52  inline ~ProgressLevel();
53  inline ProgressLevel(
54  css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv,
55  OUString const & status );
56 
57  inline void update( OUString const & status ) const;
58  inline void update( css::uno::Any const & status ) const;
59 };
60 
61 
63  css::uno::Reference< css::ucb::XCommandEnvironment > const & xCmdEnv,
64  OUString const & status )
65 {
66  if (xCmdEnv.is())
67  m_xProgressHandler = xCmdEnv->getProgressHandler();
68  if (m_xProgressHandler.is())
69  m_xProgressHandler->push( css::uno::makeAny(status) );
70 }
71 
72 
74 {
75  if (m_xProgressHandler.is())
76  m_xProgressHandler->pop();
77 }
78 
79 
80 inline void ProgressLevel::update( OUString const & status ) const
81 {
82  if (m_xProgressHandler.is())
83  m_xProgressHandler->update( css::uno::makeAny(status) );
84 }
85 
86 
87 inline void ProgressLevel::update( css::uno::Any const & status ) const
88 {
89  if (m_xProgressHandler.is())
90  m_xProgressHandler->update( status );
91 }
92 
93 
94 
98  css::uno::Any const & request,
99  css::uno::Type const & continuation,
100  css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv,
101  bool * pcont, bool * pabort );
102 
103 
104 
105 
107  public ::cppu::WeakImplHelper<css::task::XAbortChannel>
108 {
109  bool m_aborted;
110  css::uno::Reference<css::task::XAbortChannel> m_xNext;
111 
112 public:
113  AbortChannel() : m_aborted( false ) {}
114  static AbortChannel * get(
115  css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel )
116  { return static_cast<AbortChannel *>(xAbortChannel.get()); }
117 
118  bool isAborted() const { return m_aborted; }
119 
120  // XAbortChannel
121  virtual void SAL_CALL sendAbort() override;
122 
123  class SAL_DLLPRIVATE Chain
124  {
125  const ::rtl::Reference<AbortChannel> m_abortChannel;
126  public:
128  ::rtl::Reference<AbortChannel> const & abortChannel,
129  css::uno::Reference<css::task::XAbortChannel> const & xNext )
130  : m_abortChannel( abortChannel )
131  { if (m_abortChannel.is()) m_abortChannel->m_xNext = xNext; }
133  { if (m_abortChannel.is()) m_abortChannel->m_xNext.clear(); }
134  };
135  friend class Chain;
136 };
137 
138 }
139 
140 #endif
141 
142 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void progressUpdate(OUString const &status, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
Definition: dp_interact.h:33
void update(OUString const &status) const
Definition: dp_interact.h:80
bool isAborted() const
Definition: dp_interact.h:118
Chain(::rtl::Reference< AbortChannel > const &abortChannel, css::uno::Reference< css::task::XAbortChannel > const &xNext)
Definition: dp_interact.h:127
#define DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
Definition: dp_misc_api.hxx:29
ProgressLevel(css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv, OUString const &status)
Definition: dp_interact.h:62
css::uno::Reference< css::task::XAbortChannel > m_xNext
Definition: dp_interact.h:110
css::uno::Reference< css::ucb::XProgressHandler > m_xProgressHandler
Definition: dp_interact.h:49
const ::rtl::Reference< AbortChannel > m_abortChannel
Definition: dp_interact.h:125
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC bool interactContinuation(css::uno::Any const &request, css::uno::Type const &continuation, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv, bool *pcont, bool *pabort)