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