tdf#130857 qt weld: Implement QtInstanceWidget::get_text_height
[LibreOffice.git] / framework / inc / jobs / jobdata.hxx
blob4b876ddb6bd50b71e461c13a2640687b7d0ac47d
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 .
20 #pragma once
22 #include <com/sun/star/uno/XComponentContext.hpp>
23 #include <com/sun/star/beans/NamedValue.hpp>
25 #include <rtl/ustring.hxx>
27 #include <string_view>
28 #include <utility>
29 #include <vector>
31 namespace framework{
33 /**
34 @short holds all necessary information about a job and
35 handle it's configuration (if any exist!)
36 @descr It can be used from different use cases as a container
37 (or proxy) for all config data of a registered job.
38 But it doesn't implement any execute functionality!
40 class JobData final
42 public:
44 /** These values can be used to differe between jobs with and jobs without
45 a configuration. Of course an "unknown state" should be available too,
46 to detect a missing initialization.
48 enum EMode
50 /// indicates a missing initialization
51 E_UNKNOWN_MODE,
52 /// indicates a job with configuration (They alias represent the config key name.)
53 E_ALIAS,
54 /// indicates a job without configuration (The pure UNO implementation is used only.)
55 E_SERVICE,
56 /// indicates a job with configuration, which was triggered by an event
57 E_EVENT
60 /** These values represent the environment type, in which a job can run.
61 A job must known, from which binding it will be started. Because
62 it's initialization data depends from that!
64 enum EEnvironment
66 /// indicates a missing initialization
67 E_UNKNOWN_ENVIRONMENT,
68 /// this job is used by the global JobExecutor service
69 E_EXECUTION,
70 /// this job is used by the global dispatch framework
71 E_DISPATCH,
72 /// this job is used by the global event broadcaster
73 E_DOCUMENTEVENT
76 /** Some jobs can be registered to "logical events", which are generated on demand if another document event
77 occurs. E.g. "onDocumentOpened" in case "OnNew" or "OnLoad" was notified to the JobExecutor instance.
78 And normally the original event is transported as parameter set to the executed job. But then such job
79 can't differ between e.g. "OnNew" and "onDocumentOpened".
80 That's why we must know, for which type of event the job was really triggered .-)
82 The information "sDocEvent" from this struct must be set on the member JobData::m_sEvent from outside
83 user of such Jobdata structure.
85 struct TJob2DocEventBinding
87 OUString m_sJobName;
88 OUString m_sDocEvent;
90 TJob2DocEventBinding(OUString sJobName ,
91 OUString sDocEvent)
92 : m_sJobName (std::move(sJobName ))
93 , m_sDocEvent(std::move(sDocEvent))
97 // member
99 private:
102 reference to the uno service manager.
103 We need it for creating of own uno services ... e.g. for
104 opening the configuration.
106 css::uno::Reference< css::uno::XComponentContext > m_xContext;
109 An instance of this class can be used in two different modes:
110 - as a configured job
111 - as a job without any configuration
112 First mode is triggered by an alias, which points to the
113 configuration entries. Second mode is specified by a uno service
114 or implementation name. Then we do the same things (use the same interfaces)
115 but don't handle any configuration data.
116 The effect: This mode can be detected by this member.
118 EMode m_eMode;
121 Because jobs can be bind to different mechanism inside office, a job
122 should know inside which environment it runs. E.g. a job can be executed
123 by the global JobExecutor service (triggered by an event) or e.g. as part
124 of the global dispatch framework (triggered by an UI control e.g. a menu entry).
126 EEnvironment m_eEnvironment;
129 the alias name of this job.
130 Is used as entry of configuration set for job registration, to find all
131 necessary properties of it...
133 OUString m_sAlias;
136 the uno implementation name of this job.
137 It's read from the configuration. Don't set it from outside!
139 OUString m_sService;
142 the module context list of this job.
143 It's read from the configuration. Don't set it from outside!
145 OUString m_sContext;
148 a job can be registered for an event.
149 It can be an empty value! But it will be set from outside any times.
150 Because it's not clear which job this instance should represent if an event
151 (instead of an alias) comes in. Because there can be multiple registrations
152 for this event. We use this information only, to merge it with the job specific
153 arguments. A job can be called so, with a) its own config data and b) some dynamic
154 environment data.
156 OUString m_sEvent;
159 job specific configuration items... unknown for us!
160 It's read from the configuration. Don't set it from outside!
162 std::vector< css::beans::NamedValue > m_lArguments;
164 // native interface
166 public:
168 JobData( css::uno::Reference< css::uno::XComponentContext > xContext );
169 JobData( const JobData& rCopy );
170 ~JobData( );
172 JobData& operator=( const JobData& rCopy );
174 EMode getMode () const;
175 EEnvironment getEnvironment () const;
176 OUString getEnvironmentDescriptor() const;
177 const OUString & getService () const;
178 const OUString & getEvent () const;
179 css::uno::Sequence< css::beans::NamedValue > getConfig () const;
180 const std::vector< css::beans::NamedValue > & getJobConfig () const;
182 bool hasConfig () const;
183 bool hasCorrectContext ( std::u16string_view rModuleIdent ) const;
185 void setEnvironment ( EEnvironment eEnvironment );
186 void setAlias ( const OUString& sAlias );
187 void setService ( const OUString& sService );
188 void setEvent ( const OUString& sEvent ,
189 const OUString& sAlias );
190 void setJobConfig ( std::vector< css::beans::NamedValue >&& lArguments );
191 void disableJob ( );
193 static std::vector< OUString > getEnabledJobsForEvent( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
194 std::u16string_view sEvent );
196 static void appendEnabledJobsForEvent( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
197 const OUString& sEvent ,
198 ::std::vector< JobData::TJob2DocEventBinding >& lJobs );
200 // private helper
202 private:
204 void impl_reset();
207 } // namespace framework
209 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */