OpenLexocad  27.1
Sequencer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #pragma warning(push)
4 #pragma warning(disable : 4100)
5 #include <functional>
6 #include <map>
7 #include <set>
8 #include <string>
9 #pragma warning(pop)
10 
11 #include <Base/String.h>
12 #include <Base/Timer.h>
13 
14 #include <QString>
15 
16 namespace Base
17 {
18 class LX_BASE_EXPORT ProgressInfo
19 {
20 public:
22  {
24 
25  };
26 
27 
28  ProgressInfo(ProgressObserverInfoID id, std::string de, int percent) : m_id(id), m_desc(de), m_percent(percent) {}
29 
30 
31  int m_percent;
32  std::string m_desc;
34 };
35 
36 class LX_BASE_EXPORT ProgressObserver
37 {
38 public:
40  virtual ~ProgressObserver(){};
41  virtual void notify(ProgressInfo info) = 0;
42 };
43 
44 
45 typedef std::function<void(ProgressInfo)> ProgressHandler;
46 
47 class LX_BASE_EXPORT Progress
48 {
49 public:
50  void notify(ProgressInfo info)
51  {
52  for (auto o : m_observer)
53  o->notify(info);
54  for (auto o : m_handlers)
55  o.second(info);
56  }
57 
58  std::set<ProgressObserver*> m_observer;
59  std::map<std::string, ProgressHandler> m_handlers;
60 
61  void attach(std::string key, ProgressHandler hd) { m_handlers[key] = hd; }
62 
63  void attach(ProgressObserver* o) { m_observer.insert(o); }
64 
65  void detach(ProgressObserver* o) { m_observer.erase(o); }
66 
67  void detach(std::string key)
68  {
69  auto it = m_handlers.find(key);
70  if (it != m_handlers.end())
71  m_handlers.erase(it);
72  }
73 
74  void detachAll()
75  {
76  m_observer.clear();
77  m_handlers.clear();
78  }
79 };
80 
81 LX_BASE_EXPORT Progress& ProgressSingleton();
82 
83 
84 typedef std::function<void(int)> SequencerCallBackFunc;
85 LX_BASE_EXPORT void SequencerCallBackFunc_Default(int);
86 
87 
88 class LX_BASE_EXPORT SequencerBase
89 {
90 public:
91  static SequencerBase& instance(void);
92  static void setInstance(SequencerBase* p);
93 
94  virtual bool startbusy(const std::string& caption, const std::string& message, bool forceShow);
95  virtual bool startbusy(const Base::String& caption, const Base::String& message, bool forceShow);
96  virtual bool start(const std::string& caption, const std::string& message, int steps, int from, int to, bool /*forceShow*/);
97  virtual bool start(const Base::String& caption, const Base::String& message, int steps, int from, int to, bool /*forceShow*/);
98  virtual void stop();
99  virtual void setStep(int step, bool canAbort = true);
100  virtual void setStepContinuous(int step, bool canAbort = true);
101  virtual void setMessage(const std::string& message);
102  virtual void setMessage(const Base::String& message);
103  virtual void setMinimumDuration(int milliseconds);
104  virtual int getMinimumDuration() const;
105  virtual void busy1();
106  virtual void busy10();
107  virtual void busy100();
108  virtual void busy1000();
109  virtual void busy10000();
110 
111 
112  virtual Base::String getMessage();
113  virtual void setHidden(bool hidden);
114  virtual void show(bool onoff);
115 
117  void abort();
118 
119  bool isRunning() const;
120  int getCurrentStep() const;
121  int getSteps() const;
122  void setNextBlock(int from, int to);
123  void getNextBlock(int& from, int& to);
124  void setThisBlock(int from, int to);
125  int getFrom();
126  int getTo();
127 
129  void setNoWindowModeInfoFlag(bool aValue);
130  bool getNoWindowModeInfoFlag();
131 
133  bool setWriteStepToStdout(bool aEnabled, std::string aOutputStepPrefixString);
134 
135 
136 
137 protected:
138  SequencerBase();
139  virtual ~SequencerBase();
140 
142  bool _canAbort;
144  int _steps;
145 
152 
156 
157 private:
158  SequencerBase(const SequencerBase&){};
159  static SequencerBase* _instance;
160 };
161 
162 
163 
165 inline LX_BASE_EXPORT Base::SequencerBase& Sequencer(void)
166 {
168 }
169 
170 class LX_BASE_EXPORT WaitingSpinner
171 {
172 public:
173  static WaitingSpinner& instance(void);
174  static void setInstance(WaitingSpinner* p);
175 
176 public:
177  virtual void start();
178  virtual void stop();
179  virtual void setText(const Base::String& txt);
180 
181 public:
182 private:
183  static WaitingSpinner* _instance;
184 };
185 
186 class LX_BASE_EXPORT ScopedWaitingSpinner
187 {
188 public:
190  ScopedWaitingSpinner(QString txt)
191  {
194  }
196 };
197 
198 
199 } // namespace Base
LX_BASE_EXPORT Progress & ProgressSingleton()
Definition: Sequencer.h:170
ProgressObserverInfoID m_id
Definition: Sequencer.h:33
bool _windowModeActiveFlag
Definition: Sequencer.h:153
ScopedWaitingSpinner(QString txt)
Definition: Sequencer.h:190
void detachAll()
Definition: Sequencer.h:74
bool _canAbort
Definition: Sequencer.h:142
int _steps
Definition: Sequencer.h:144
int _currentStep
Definition: Sequencer.h:143
int m_percent
Definition: Sequencer.h:31
std::set< ProgressObserver * > m_observer
Definition: Sequencer.h:58
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:23
int _thisBlockTo
Definition: Sequencer.h:147
std::function< void(ProgressInfo)> ProgressHandler
Definition: Sequencer.h:45
int _minimumDuration
Definition: Sequencer.h:150
static SequencerBase & instance(void)
virtual void stop()
std::map< std::string, ProgressHandler > m_handlers
Definition: Sequencer.h:59
static WaitingSpinner & instance(void)
ProgressObserverInfoID
Definition: Sequencer.h:21
std::function< void(int)> SequencerCallBackFunc
Definition: Sequencer.h:84
Definition: Sequencer.h:23
virtual void setText(const Base::String &txt)
int _nextBlockFrom
Definition: Sequencer.h:148
Definition: Sequencer.h:36
void notify(ProgressInfo info)
Definition: Sequencer.h:50
void detach(ProgressObserver *o)
Definition: Sequencer.h:65
virtual void start()
Base::String _message
Definition: Sequencer.h:151
bool _writeStepToStdout
Definition: Sequencer.h:154
ProgressObserver()
Definition: Sequencer.h:39
ProgressInfo(ProgressObserverInfoID id, std::string de, int percent)
Definition: Sequencer.h:28
Definition: Sequencer.h:18
virtual ~ProgressObserver()
Definition: Sequencer.h:40
Definition: Sequencer.h:88
int _nextBlockTo
Definition: Sequencer.h:149
std::string m_desc
Definition: Sequencer.h:32
ScopedWaitingSpinner()
Definition: Sequencer.h:189
Definition: AbstractXMLReader.h:5
std::string _writeStepToStdcoutPrefixString
Definition: Sequencer.h:155
void detach(std::string key)
Definition: Sequencer.h:67
void attach(std::string key, ProgressHandler hd)
Definition: Sequencer.h:61
~ScopedWaitingSpinner()
Definition: Sequencer.h:195
Definition: Sequencer.h:47
Definition: Sequencer.h:186
int _thisBlockFrom
Definition: Sequencer.h:146
LX_BASE_EXPORT void SequencerCallBackFunc_Default(int)
bool _isRunning
Definition: Sequencer.h:141
void attach(ProgressObserver *o)
Definition: Sequencer.h:63
LX_BASE_EXPORT Base::SequencerBase & Sequencer(void)
Singleton getter of the Sequencer.
Definition: Sequencer.h:165