OpenLexocad  28.0
Sequencer.h
Go to the documentation of this file.
1 #pragma once
2 #include <functional>
3 #include <map>
4 #include <set>
5 #include <Base/String.h>
6 #include <QString>
7 #include <QColor>
8 
9 namespace Base
10 {
11 class LX_BASE_EXPORT ProgressInfo
12 {
13 public:
15  {
17  };
18 
19 
20  ProgressInfo(ProgressObserverInfoID id, std::string de, int percent) : m_id(id), m_desc(de), m_percent(percent) {}
21 
22 
23  int m_percent;
24  std::string m_desc;
26 };
27 
28 class LX_BASE_EXPORT ProgressObserver
29 {
30 public:
31  ProgressObserver() = default;
32  virtual ~ProgressObserver() = default;
33  virtual void notify(ProgressInfo info) = 0;
34 };
35 
36 
37 typedef std::function<void(ProgressInfo)> ProgressHandler;
38 
39 class LX_BASE_EXPORT Progress
40 {
41 public:
42  void notify(ProgressInfo info)
43  {
44  for (auto o : m_observer)
45  o->notify(info);
46  for (auto o : m_handlers)
47  o.second(info);
48  }
49 
50  std::set<ProgressObserver*> m_observer;
51  std::map<std::string, ProgressHandler> m_handlers;
52 
53  void attach(std::string key, ProgressHandler hd) { m_handlers[key] = hd; }
54 
55  void attach(ProgressObserver* o) { m_observer.insert(o); }
56 
57  void detach(ProgressObserver* o) { m_observer.erase(o); }
58 
59  void detach(std::string key)
60  {
61  auto it = m_handlers.find(key);
62  if (it != m_handlers.end())
63  m_handlers.erase(it);
64  }
65 
66  void detachAll()
67  {
68  m_observer.clear();
69  m_handlers.clear();
70  }
71 };
72 
73 LX_BASE_EXPORT Progress& ProgressSingleton();
74 
75 
76 typedef std::function<void(int)> SequencerCallBackFunc;
77 LX_BASE_EXPORT void SequencerCallBackFunc_Default(int);
78 
79 
80 class LX_BASE_EXPORT SequencerBase
81 {
82 public:
83  static SequencerBase& instance(void);
84  static void setInstance(SequencerBase* p);
85 
86  static void setFactory(std::function<Base::SequencerBase*()> func);
88 
89  virtual bool startbusy(const std::string& caption, const std::string& message, bool forceShow);
90  virtual bool startbusy(const Base::String& caption, const Base::String& message, bool forceShow);
91  virtual bool start(const std::string& caption, const std::string& message, int steps, int from, int to, bool /*forceShow*/);
92  virtual bool start(const Base::String& caption, const Base::String& message, int steps, int from, int to, bool /*forceShow*/);
93  virtual void stop();
94  virtual void setStep(int step, bool canAbort = true);
95  virtual void setStepContinuous(int step, bool canAbort = true);
96  virtual void setMessage(const std::string& message);
97  virtual void setMessage(const Base::String& message);
98  virtual void setMinimumDuration(int milliseconds);
99  virtual int getMinimumDuration() const;
100  virtual void busy1();
101  virtual void busy10();
102  virtual void busy100();
103  virtual void busy1000();
104  virtual void busy10000();
105 
106 
108  virtual void setHidden(bool hidden);
109  virtual void show(bool onoff);
110 
111  virtual void move(){};
112 
113 
114 
115 
117  void abort();
118 
119  bool isRunning() const;
120  void setRunning(bool b);
121  int getCurrentStep() const;
122  void setCurrentStep(int s);
123  int getSteps() const;
124  void setSteps(int steps);
125  void setNextBlock(int from, int to);
126  void getNextBlock(int& from, int& to);
127  void setThisBlock(int from, int to);
128  int getFrom();
129  int getTo();
130  bool canAbort() const;
131  void setCanAbort(bool p);
132 
133 
135  void setNoWindowModeInfoFlag(bool aValue);
137 
139  bool setWriteStepToStdout(bool aEnabled, std::string aOutputStepPrefixString);
140  bool isWriteStepToStdout() const;
142 
143  virtual void pushState();
144  virtual void popState();
145 
146 protected:
148  virtual ~SequencerBase();
149 
150 private:
151  SequencerBase(const SequencerBase&){};
152  static SequencerBase* _instance;
153  static std::function<Base::SequencerBase*()> _factory;
154 
155  struct SequencerBaseData
156  {
157  SequencerBaseData()
158  : _isRunning(false)
159  , _canAbort(true)
160  , _currentStep(0)
161  , _steps(0)
162  , _nextBlockFrom(0)
163  , _nextBlockTo(100)
164  , _minimumDuration(2000)
165  , _windowModeActiveFlag(false)
166  , _writeStepToStdout(false)
167  {
168  }
169 
170  bool _isRunning;
171  bool _canAbort;
172  int _currentStep;
173  int _steps;
174 
175  int _thisBlockFrom;
176  int _thisBlockTo;
177  int _nextBlockFrom;
178  int _nextBlockTo;
179  int _minimumDuration;
180  Base::String _message;
181 
182  bool _windowModeActiveFlag;
183  bool _writeStepToStdout;
184  std::string _writeStepToStdcoutPrefixString;
185  } internalData;
186 
187  std::vector<SequencerBaseData> sequencerBaseDataStack;
188 
189 };
190 
191 
192 
194 inline LX_BASE_EXPORT Base::SequencerBase& Sequencer(void)
195 {
197 }
198 
199 class LX_BASE_EXPORT WaitingSpinner
200 {
201 public:
202  static WaitingSpinner& instance(void);
203  static void setInstance(WaitingSpinner* p);
204 
205 public:
206  virtual void start();
207  virtual void stop();
208  virtual void setText(const Base::String& txt);
209  virtual void setColor(QColor c);
210 
211 public:
212 private:
213  static WaitingSpinner* _instance;
214 };
215 
216 class LX_BASE_EXPORT ScopedWaitingSpinner
217 {
218 public:
220  ScopedWaitingSpinner(QString txt)
221  {
224  }
225  ScopedWaitingSpinner(QString txt, QColor c)
226  {
230  }
232 };
233 
234 
235 } // namespace Base
Base::ScopedWaitingSpinner
Definition: Sequencer.h:217
Base::SequencerBase::setSteps
void setSteps(int steps)
Base::SequencerBase::getNoWindowModeInfoFlag
bool getNoWindowModeInfoFlag()
Base::SequencerBase::startbusy
virtual bool startbusy(const Base::String &caption, const Base::String &message, bool forceShow)
Base::SequencerBase::isRunning
bool isRunning() const
Base::ProgressObserver::notify
virtual void notify(ProgressInfo info)=0
Base::SequencerBase::setHidden
virtual void setHidden(bool hidden)
Base::SequencerBase::isWriteStepToStdout
bool isWriteStepToStdout() const
Base::SequencerBase::getFrom
int getFrom()
Base::SequencerCallBackFunc
std::function< void(int)> SequencerCallBackFunc
Definition: Sequencer.h:76
Base::ScopedWaitingSpinner::ScopedWaitingSpinner
ScopedWaitingSpinner(QString txt)
Definition: Sequencer.h:220
Base::SequencerBase::setStepContinuous
virtual void setStepContinuous(int step, bool canAbort=true)
Base::Progress::detach
void detach(std::string key)
Definition: Sequencer.h:59
Base::ProgressObserver::ProgressObserver
ProgressObserver()=default
Base::SequencerBase::getSteps
int getSteps() const
Base::SequencerBase::setNoWindowModeInfoFlag
void setNoWindowModeInfoFlag(bool aValue)
setters/getters for indiate if the Lexocad window mode is NO_WINDOW
Base::Progress::m_observer
std::set< ProgressObserver * > m_observer
Definition: Sequencer.h:50
Base::ProgressInfo::m_id
ProgressObserverInfoID m_id
Definition: Sequencer.h:25
Base::WaitingSpinner::setText
virtual void setText(const Base::String &txt)
Base::SequencerBase::pushState
virtual void pushState()
Base::SequencerBase::busy100
virtual void busy100()
Base::ProgressInfo::ACIS_PROGRESS
@ ACIS_PROGRESS
Definition: Sequencer.h:16
Base::ProgressInfo
Definition: Sequencer.h:12
Base::ScopedWaitingSpinner::ScopedWaitingSpinner
ScopedWaitingSpinner()
Definition: Sequencer.h:219
Base::SequencerBase::setMinimumDuration
virtual void setMinimumDuration(int milliseconds)
Base::SequencerBase::setCurrentStep
void setCurrentStep(int s)
Base::SequencerBase::setStep
virtual void setStep(int step, bool canAbort=true)
Base::Progress::detachAll
void detachAll()
Definition: Sequencer.h:66
Base::ProgressInfo::m_percent
int m_percent
Definition: Sequencer.h:23
Base::WaitingSpinner::instance
static WaitingSpinner & instance(void)
Base::SequencerBase::getTo
int getTo()
Base::SequencerBase::busy10000
virtual void busy10000()
Base::SequencerBase::getCurrentStep
int getCurrentStep() const
Base::Progress::detach
void detach(ProgressObserver *o)
Definition: Sequencer.h:57
Base::ProgressInfo::ProgressObserverInfoID
ProgressObserverInfoID
Definition: Sequencer.h:15
Base::WaitingSpinner::setColor
virtual void setColor(QColor c)
Base::SequencerCallBackFunc_Default
LX_BASE_EXPORT void SequencerCallBackFunc_Default(int)
Base::SequencerBase::SequencerBase
SequencerBase()
Base::SequencerBase::~SequencerBase
virtual ~SequencerBase()
Base::Progress::notify
void notify(ProgressInfo info)
Definition: Sequencer.h:42
Base::SequencerBase::busy1000
virtual void busy1000()
Base::WaitingSpinner
Definition: Sequencer.h:200
Base::SequencerBase::instance
static SequencerBase & instance(void)
Base::SequencerBase::setInstance
static void setInstance(SequencerBase *p)
Base::WaitingSpinner::stop
virtual void stop()
Base::Sequencer
LX_BASE_EXPORT Base::SequencerBase & Sequencer(void)
Singleton getter of the Sequencer.
Definition: Sequencer.h:194
Base::SequencerBase::busy1
virtual void busy1()
Base::ProgressObserver::~ProgressObserver
virtual ~ProgressObserver()=default
Base::SequencerBase::getMinimumDuration
virtual int getMinimumDuration() const
Base::SequencerBase::move
virtual void move()
Definition: Sequencer.h:111
Base::SequencerBase::setMessage
virtual void setMessage(const Base::String &message)
Base::SequencerBase::setRunning
void setRunning(bool b)
Base::ProgressObserver
Definition: Sequencer.h:29
Base::SequencerBase::show
virtual void show(bool onoff)
Base::SequencerBase::startbusy
virtual bool startbusy(const std::string &caption, const std::string &message, bool forceShow)
Base::Progress::attach
void attach(std::string key, ProgressHandler hd)
Definition: Sequencer.h:53
Base::SequencerBase::canAbort
bool canAbort() const
Base::SequencerBase::setMessage
virtual void setMessage(const std::string &message)
Base::ScopedWaitingSpinner::~ScopedWaitingSpinner
~ScopedWaitingSpinner()
Definition: Sequencer.h:231
Base::ScopedWaitingSpinner::ScopedWaitingSpinner
ScopedWaitingSpinner(QString txt, QColor c)
Definition: Sequencer.h:225
Base::SequencerBase::abort
void abort()
Throws Base::AbortException.
Base::Progress::m_handlers
std::map< std::string, ProgressHandler > m_handlers
Definition: Sequencer.h:51
Base::SequencerBase::start
virtual bool start(const Base::String &caption, const Base::String &message, int steps, int from, int to, bool)
Base::ProgressSingleton
LX_BASE_EXPORT Progress & ProgressSingleton()
String.h
Base::SequencerBase::start
virtual bool start(const std::string &caption, const std::string &message, int steps, int from, int to, bool)
Base::SequencerBase::popState
virtual void popState()
Base::ProgressInfo::m_desc
std::string m_desc
Definition: Sequencer.h:24
Base::SequencerBase::getNextBlock
void getNextBlock(int &from, int &to)
Base::SequencerBase::setNextBlock
void setNextBlock(int from, int to)
Base::SequencerBase::stop
virtual void stop()
Base::SequencerBase::getMessage
virtual Base::String getMessage()
Base::ProgressInfo::ProgressInfo
ProgressInfo(ProgressObserverInfoID id, std::string de, int percent)
Definition: Sequencer.h:20
Base::SequencerBase::getWriteStepToStdcoutPrefixString
std::string getWriteStepToStdcoutPrefixString() const
Base::String
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:18
Base::Progress::attach
void attach(ProgressObserver *o)
Definition: Sequencer.h:55
Base::WaitingSpinner::setInstance
static void setInstance(WaitingSpinner *p)
Base::Progress
Definition: Sequencer.h:40
Base::SequencerBase
Definition: Sequencer.h:81
Base::SequencerBase::busy10
virtual void busy10()
Base::WaitingSpinner::start
virtual void start()
Base::SequencerBase::setCanAbort
void setCanAbort(bool p)
Base::SequencerBase::setWriteStepToStdout
bool setWriteStepToStdout(bool aEnabled, std::string aOutputStepPrefixString)
enable writing sequencer progress to std::cout, disabled automatically when stop method of this class...
Base
Definition: AbstractXMLReader.h:5
Base::SequencerBase::setFactory
static void setFactory(std::function< Base::SequencerBase *()> func)
Base::ProgressHandler
std::function< void(ProgressInfo)> ProgressHandler
Definition: Sequencer.h:37
Base::SequencerBase::create
static Base::SequencerBase * create()
Base::SequencerBase::setThisBlock
void setThisBlock(int from, int to)