Scroom 0.14-48-ga0fee447
Loading...
Searching...
No Matches
progressinterfacehelpers.hh
Go to the documentation of this file.
1/*
2 * Scroom - Generic viewer for 2D data
3 * Copyright (C) 2009-2026 Kees-Jan Dijkzeul
4 *
5 * SPDX-License-Identifier: LGPL-2.1
6 */
7
8#pragma once
9
10#include <set>
11
12#include <boost/thread.hpp>
13
15#include <scroom/stuff.hh>
16#include <scroom/utilities.hh>
17
18namespace Scroom::Utils
19{
24 {
25 public:
26 using Ptr = std::shared_ptr<ProgressStateInterface>;
27 using WeakPtr = std::weak_ptr<ProgressStateInterface>;
28
36
37 virtual void setProgress(State s, double progress = 0.0) = 0;
38 };
39
41 : public ProgressInterface
42 , protected ProgressStateInterface
43 {
44 public:
45 // ProgressInterface ///////////////////////////////////////////////////
46
47 void setIdle() override;
48 void setWaiting(double progress = 0.0) override;
49 void setWorking(double progress) override;
50 void setFinished() override;
51 };
52
54 {
55 public:
56 using Ptr = std::shared_ptr<ProgressInterfaceFromProgressStateInterfaceForwarder>;
57
58 private:
60
61 private:
63
64 public:
66
67 protected:
68 // ProgressStateInterface //////////////////////////////////////////////
69 void setProgress(State s, double progress = 0.0) override;
70 };
71
74 , protected ProgressInterface
75 {
76 public:
77 void setProgress(State s, double progress = 0.0) override;
78 };
79
81 {
82 public:
83 using Ptr = std::shared_ptr<ProgressStateInterfaceFromProgressInterfaceForwarder>;
84
85 private:
87
88 private:
90
91 public:
93
94 protected:
95 void setIdle() override;
96 void setWaiting(double progress = 0.0) override;
97 void setWorking(double progress) override;
98 void setFinished() override;
99 };
100
101 namespace Detail
102 {
104 {
105 public:
106 using Ptr = std::shared_ptr<ProgressStore>;
107
108 private:
110 double progress{0.0};
111
112 private:
113 ProgressStore() = default;
114
115 public:
116 static Ptr create();
117
118 void init(ProgressInterface::Ptr const& i);
119
120 protected:
121 // ProgressStateInterface //////////////////////////////////////////////
122 void setProgress(State s, double progress = 0.0) override;
123 };
124 } // namespace Detail
125
127 : virtual public Base
128 , public ProgressInterface
129 {
130 public:
131 using Ptr = std::shared_ptr<ProgressInterfaceBroadcaster>;
132
133 private:
154
155 friend class Unsubscriber;
156
157 private:
158 boost::mutex mut;
159 std::set<ProgressInterface::Ptr> children;
161
162 public:
163 static Ptr create();
164
165 private:
167
168 void unsubscribe(ProgressInterface::Ptr const& child);
169
170 public:
172
173 // ProgressInterface ///////////////////////////////////////////////////
174
175 void setIdle() override;
176 void setWaiting(double progress = 0.0) override;
177 void setWorking(double progress) override;
178 void setFinished() override;
179 };
180
181 class ProgressInterfaceMultiplexer : public virtual Base
182 {
183 public:
184 using Ptr = std::shared_ptr<ProgressInterfaceMultiplexer>;
185
186 private:
188 {
189 public:
190 using Ptr = std::shared_ptr<ChildData>;
191
192 public:
193 boost::mutex mut;
195 double progress{0.0};
196
197 private:
198 ChildData() = default;
199
200 public:
201 static Ptr create();
202
203 void clearFinished();
204
205 // ProgressStateInterface ///////////////////////////////////////////////////
206 void setProgress(State s, double progress = 0.0) override;
207 };
208
210 {
211 public:
212 using Ptr = std::shared_ptr<Child>;
213
214 private:
217
218 private:
220
221 public:
223
224 Child(const Child&) = delete;
225 Child(Child&&) = delete;
226 Child& operator=(const Child&) = delete;
227 Child& operator=(Child&&) = delete;
228 ~Child() override;
229
230 // ProgressStateInterface ///////////////////////////////////////////////////
231 void setProgress(State s, double progress = 0.0) override;
232 };
233
234 friend class Child;
235
236 private:
237 boost::mutex mut;
239 std::set<ChildData::Ptr> children;
240
241 private:
243
244 public:
246
248
249 private:
250 void updateProgressState();
251 void unsubscribe(const ChildData::Ptr& data);
252 };
253} // namespace Scroom::Utils
uint8_t data
Definition blob-tests.cc:36
Definition interface.hh:11
Definition progressinterface.hh:18
std::shared_ptr< ProgressInterface > Ptr
Definition progressinterface.hh:20
Definition utilities.hh:34
Definition progressinterfacehelpers.hh:104
void setProgress(State s, double progress=0.0) override
Definition progressinterfacehelpers.cc:116
State state
Definition progressinterfacehelpers.hh:109
std::shared_ptr< ProgressStore > Ptr
Definition progressinterfacehelpers.hh:106
double progress
Definition progressinterfacehelpers.hh:110
static Ptr create()
Definition progressinterfacehelpers.cc:95
Definition progressinterfacehelpers.hh:135
Unsubscriber & operator=(Unsubscriber &&)=delete
ProgressInterface::Ptr child
Definition progressinterfacehelpers.hh:141
ProgressInterfaceBroadcaster::Ptr parent
Definition progressinterfacehelpers.hh:140
std::shared_ptr< Unsubscriber > Ptr
Definition progressinterfacehelpers.hh:137
Unsubscriber & operator=(const Unsubscriber &)=delete
~Unsubscriber()
Definition progressinterfacehelpers.cc:201
Definition progressinterfacehelpers.hh:129
void setWorking(double progress) override
Definition progressinterfacehelpers.cc:164
std::shared_ptr< ProgressInterfaceBroadcaster > Ptr
Definition progressinterfacehelpers.hh:131
Detail::ProgressStore::Ptr store
Definition progressinterfacehelpers.hh:160
std::set< ProgressInterface::Ptr > children
Definition progressinterfacehelpers.hh:159
Stuff subscribe(ProgressInterface::Ptr const &child)
Definition progressinterfacehelpers.cc:132
static Ptr create()
Definition progressinterfacehelpers.cc:124
void setFinished() override
Definition progressinterfacehelpers.cc:173
void setIdle() override
Definition progressinterfacehelpers.cc:146
boost::mutex mut
Definition progressinterfacehelpers.hh:158
ProgressInterfaceBroadcaster()
Definition progressinterfacehelpers.cc:126
void unsubscribe(ProgressInterface::Ptr const &child)
Definition progressinterfacehelpers.cc:140
std::shared_ptr< ProgressInterfaceFromProgressStateInterfaceForwarder > Ptr
Definition progressinterfacehelpers.hh:56
void setProgress(State s, double progress=0.0) override
Definition progressinterfacehelpers.cc:42
static Ptr create(ProgressStateInterface::Ptr child)
Definition progressinterfacehelpers.cc:37
ProgressStateInterface::Ptr child
Definition progressinterfacehelpers.hh:59
Definition progressinterfacehelpers.hh:43
void setIdle() override
Definition progressinterfacehelpers.cc:19
void setFinished() override
Definition progressinterfacehelpers.cc:25
void setWorking(double progress) override
Definition progressinterfacehelpers.cc:23
Definition progressinterfacehelpers.hh:188
ProgressStateInterface::State state
Definition progressinterfacehelpers.hh:194
void clearFinished()
Definition progressinterfacehelpers.cc:214
void setProgress(State s, double progress=0.0) override
Definition progressinterfacehelpers.cc:207
double progress
Definition progressinterfacehelpers.hh:195
boost::mutex mut
Definition progressinterfacehelpers.hh:193
std::shared_ptr< ChildData > Ptr
Definition progressinterfacehelpers.hh:190
static Ptr create()
Definition progressinterfacehelpers.cc:205
Definition progressinterfacehelpers.hh:210
static Ptr create(ProgressInterfaceMultiplexer::Ptr parent, ChildData::Ptr data)
Definition progressinterfacehelpers.cc:239
~Child() override
Definition progressinterfacehelpers.cc:232
void setProgress(State s, double progress=0.0) override
Definition progressinterfacehelpers.cc:244
ProgressInterfaceMultiplexer::Ptr parent
Definition progressinterfacehelpers.hh:215
std::shared_ptr< Child > Ptr
Definition progressinterfacehelpers.hh:212
ChildData::Ptr data
Definition progressinterfacehelpers.hh:216
Definition progressinterfacehelpers.hh:182
void updateProgressState()
Definition progressinterfacehelpers.cc:279
static Ptr create(ProgressInterface::Ptr parent)
Definition progressinterfacehelpers.cc:257
std::set< ChildData::Ptr > children
Definition progressinterfacehelpers.hh:239
boost::mutex mut
Definition progressinterfacehelpers.hh:237
void unsubscribe(const ChildData::Ptr &data)
Definition progressinterfacehelpers.cc:273
std::shared_ptr< ProgressInterfaceMultiplexer > Ptr
Definition progressinterfacehelpers.hh:184
ProgressStateInterface::Ptr parent
Definition progressinterfacehelpers.hh:238
ProgressInterface::Ptr createProgressInterface()
Definition progressinterfacehelpers.cc:262
void setFinished() override
Definition progressinterfacehelpers.cc:89
ProgressInterface::Ptr child
Definition progressinterfacehelpers.hh:86
static Ptr create(ProgressInterface::Ptr child)
Definition progressinterfacehelpers.cc:78
void setIdle() override
Definition progressinterfacehelpers.cc:83
std::shared_ptr< ProgressStateInterfaceFromProgressInterfaceForwarder > Ptr
Definition progressinterfacehelpers.hh:83
void setWorking(double progress) override
Definition progressinterfacehelpers.cc:87
Definition progressinterfacehelpers.hh:75
void setProgress(State s, double progress=0.0) override
Definition progressinterfacehelpers.cc:49
Definition progressinterfacehelpers.hh:24
std::shared_ptr< ProgressStateInterface > Ptr
Definition progressinterfacehelpers.hh:26
std::weak_ptr< ProgressStateInterface > WeakPtr
Definition progressinterfacehelpers.hh:27
virtual void setProgress(State s, double progress=0.0)=0
State
Definition progressinterfacehelpers.hh:30
@ WAITING
Definition progressinterfacehelpers.hh:32
@ IDLE
Definition progressinterfacehelpers.hh:31
@ WORKING
Definition progressinterfacehelpers.hh:33
@ FINISHED
Definition progressinterfacehelpers.hh:34
void init()
Definition measure-framerate-callbacks.cc:96
Definition color.hh:26
Definition tweak-view.hh:22
std::shared_ptr< void > Stuff
Definition stuff.hh:17
pi setWaiting()
stub progress
Definition progressinterfaceconversion-tests.cc:65
BitmapSurface::Ptr const s
Definition transformpresentation_test.cc:70