OpendTect  6.3
cmddriver.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert Bril
8  Date: Sep 2005
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "uicmddrivermod.h"
14 #include "bufstringset.h"
15 #include "od_iostream.h"
16 #include "separstr.h"
17 #include "strmdata.h"
18 #include "thread.h"
19 #include "uimainwin.h"
20 
21 #include "cmddriverbasics.h"
22 #include "searchkey.h"
23 
24 class StreamData;
25 class uiObject;
26 class uiMenu;
27 class uiTaskRunner;
28 namespace File { class Path; }
29 
30 
31 namespace CmdDrive
32 {
33  class Activator;
34  class IdentifierManager;
35  class ExprInterpreter;
36  class WildcardManager;
37  class MenuTracer;
38 
39 #define mLogStrm \
40  if ( drv_.logStream().isOK() ) drv_.logStream()
41 
42 #define mTimeStrm \
43  mLogStrm << "[" << Time::getTimeString() << "]\t"
44 
45 #define mParseMsgStrm(tag) \
46  if ( !drv_.streamBlocked(true,tag) ) \
47  mLogStrm << "\t" << (tag) << " [parse]: "
48 
49 #define mParseStrm(warn) mParseMsgStrm( warn ? "WARN" : "ERROR" )
50 #define mParseErrStrm mParseStrm( false )
51 #define mParseWarnStrm mParseStrm( true )
52 
53 #define mWinMsgStrm(tag) \
54  if ( !drv_.streamBlocked(false,tag) ) \
55  mLogStrm << "\t" << (tag) << " [" << drv_.curWinTitle() << "]:\n\t\t"
56 
57 #define mWinStrm(warn) mWinMsgStrm( warn ? "WARN " : "ERROR" )
58 #define mWinErrStrm mWinStrm( false )
59 #define mWinWarnStrm mWinStrm( true )
60 
61 
62 mExpClass(uiCmdDriver) ModalStatus
63 {
64 public:
65  bool operator==(const ModalStatus&) const;
66  bool operator!=(const ModalStatus&) const;
67 
73 };
74 
75 
76 mExpClass(uiCmdDriver) Action
77 {
78 public:
79  Action(const char* line)
80  : line_(line), gotoidx_(-1)
81  , insertidx_(-1) {}
82 
84  int gotoidx_;
86 };
87 
88 
89 mExpClass(uiCmdDriver) MenuInfo
90 {
91 public:
94  int ison_;
96 };
97 
98 
100 
101 
102 mExpClass(uiCmdDriver) CmdDriver : public CallBacker
104 public:
105 
106  enum FlowStackTag { IfTag, ElseTag, DefTag, DoTag, DoWhileTag, ForTag };
107  mDeclareEnumUtils(FlowStackTag);
108 
109  friend class Command;
110  friend class ExprInterpreter;
111  friend class Function;
112  friend class MenuTracer;
113 
114  CmdDriver(uiMainWin& applwin);
115  ~CmdDriver();
116 
117  bool getActionsFromFile(const char*);
118  bool insertActionsFromFile(const char*);
119 
120  bool execute();
121  void abort() { abort_ = true; }
122  void pause(bool yn=true);
123  const uiString errMsg() const { return errmsg_;}
124 
125  const char* outputDir() const { return outdir_; }
126  void setOutputDir(const char* od) { outdir_ = od; }
127 
128  static const char* defaultLogFilename();
129  const char* logFileName() const { return logfnm_; }
130  void setLogFileName(const char* fnm) { logfnm_ = fnm; }
131  void clearLog() { logstream_.close(); }
132 
133  enum LogModeTag { LogBasic, LogNormal, LogAll };
134  void setLogMode(LogModeTag tag) { logmode_ = tag; }
135 
136  enum OnErrorTag { Stop, Recover };
137  void setOnError(OnErrorTag tag) { onerror_ = tag; }
138 
139  void setCaseSensitive(bool yn) { casesensitive_ = yn; }
140  void skipGreyOuts(bool yn=true) { skipgreyouts_ = yn; }
141 
142  bool isCaseSensitive() const { return casesensitive_; }
143  OnErrorTag onError() const { return onerror_; }
144  bool greyOutsSkipped() const { return skipgreyouts_; }
145 
146  void setSleep(float time,
147  bool regular=true);
148  void setWait(float time,
149  bool regular=true);
150 
151  static bool nowExecuting();
152 
153  enum RecoveryTag { NoClue, CloseCurWin, NextCmd,
154  NextAssertion };
155 
156  enum InterceptMode { Click, ItemInfo, NodeInfo };
157 
160 
161 protected:
162 
164  uiMainWin* applWin() { return applwin_; }
165  const uiMainWin* applWin() const { return applwin_; }
166 
167  void exitApplCB( CallBacker* );
168 
169  const uiObject* localSearchEnv() const { return localsearchenv_; }
170 
171  bool doLocalAction(uiObject* localenv,const char* actstr);
172  bool tryAction(const char* identname,const char* actstr);
173 
174  void prepareForResume();
175  void prepareForAbort();
176 
177  bool abort_;
178  bool pause_;
179  bool resume_;
180 
181  bool prepareActivate(Activator*);
182  void finishActivate();
183  void waitForClearance();
184 
185  void prepareIntercept(const FileMultiString& mnupath,
186  int onoff,InterceptMode=Click);
187  bool didInterceptSucceed(const char* objnm);
188  const MenuInfo& interceptedMenuInfo() const;
189 
190  void reInit();
191 
200 
202  WildcardManager& wildcardMan() { return *wcm_; }
203 
205  IdentifierManager& identifierMan() { return *idm_; }
206 
207  const WildcardManager& wildcardMan() const;
208  const IdentifierManager& identifierMan() const;
209 
212 
214  ExprInterpreter& exprInterpreter() { return *eip_; }
215 
216  void logErrMsg();
217  void updateLogStrm();
219 
220  bool addActions(ObjectSet<Action>&,const char*);
223 
224  int curActionIdx() const { return actionidx_; }
225  bool insertProcedure(int defidx);
226 
227  void moveActionIdx(int nrlines);
228  int lastActionIdxMove() const { return lastmove_; }
230 
231  void end();
232  void jump(int extralines=0);
234 
235  void mkThread(CallBacker*);
236  bool doAction(const char*);
237 
240 
243  bool goingToChangeUiObj() const { return uiobjchange_; }
244 
247 
250 
254  bool verifyWinAssert(const char* newwinstr=0);
255 
258  bool verifyWinState(const char* newwinstr=0,
259  WinStateType newwinstate=NoState);
260 
262  bool recover();
264  void setRecoveryStep(RecoveryTag rt) { recoverystep_ = rt; }
265 
266  static const char* locateCmdMark(const char* actstr);
267 
268  bool switchCurWin(const uiMainWin*);
270  const uiMainWin* curWin() const { return winstack_.topWin(true); }
271 
273  bool openQDlg() const { return openqdialog_; }
274 
276  bool activityStopped(bool checkprocessing=true,
277  bool checktimers=true);
278 
279  bool waitForTimers();
280  bool waitForProcessing();
282 
283  void getModalStatus(ModalStatus&);
284  void storeModalStatus();
286 
290 
291  void activateDone(CallBacker* activator);
292  void timerStartsCB(CallBacker* timer);
293  void timerStoppedCB(CallBacker* timer);
294  void timerShootsCB(CallBacker* timer);
295  void timerShotCB(CallBacker* timer);
296 
297  void forceQtToCatchUp();
298  // Delay to assure that Qt has finished all previous
299  // display, hide and outgrey tasks initiated by the
300  // GUI thread.
301 
302  enum InterceptStatus { NoInterception, InterceptError,
303  InterceptReady };
310 
311  void dynamicMenuInterceptor(CallBacker*);
312  bool dispatchDynamicMenu(uiMenu*);
313 
314  void interactCB(CallBacker*);
315  void executeFinishedCB(CallBacker*);
316  void killTaskRunnerCB(CallBacker*);
317 
319  void interact(const InteractSpec*);
320 
324 
325 
326 public:
327  // interface for output stream macros
328  od_ostream& logStream() { return logstream_; }
329  const char* curWinTitle(int aliasnr=0) const;
330 
331  bool streamBlocked(bool parse,const char* tag);
332  // Does tryout management as side-effect!
333 
334 protected:
335 
336  void preProcSubstitutionErrMsg(const int,const int,
337  const BufferString&);
338  void checkTailErrMsg(const int,const BufferString&);
339  void checkFlowErrMsg(const int,const char*,const char*);
340  void checkFlowStackErrMsg(TypeSet<int>, enum FlowStackTag);
342  { return tr("ended in the middle of","something"); }
343 };
344 
345 
346 }; // namespace CmdDrive
#define mExpClass(module)
Definition: commondefs.h:157
int wildmodalclosedstamp_
Definition: cmddriver.h:281
User interface main window.
Definition: uimainwin.h:34
Interface for several file and directory related services.
Definition: file.h:29
ObjectSet< Action > actions_
Definition: cmddriver.h:221
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
bool openQDlg() const
Definition: cmddriver.h:273
od_ostream & logStream()
Definition: cmddriver.h:328
OD class for stream write common access to the user log file, or std::cout in batch progs...
Definition: od_ostream.h:25
float pendingsleep_
Definition: cmddriver.h:245
Threads::Thread * execthr_
Definition: cmddriver.h:197
bool goingToChangeUiObj() const
Definition: cmddriver.h:243
BufferString winstatewin_
Definition: cmddriver.h:256
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
float regularsleep_
Definition: cmddriver.h:246
Command Drive
Definition: canvascommands.h:20
const char * outputDir() const
Definition: cmddriver.h:125
uiMainWin::ActModalTyp activetype_
Definition: cmddriver.h:68
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
bool winassertsafe_
Definition: cmddriver.h:253
void abort()
Definition: cmddriver.h:121
int gotoidx_
Definition: cmddriver.h:84
const uiString errMsg() const
Definition: cmddriver.h:123
RecoveryTag
Definition: cmddriver.h:153
int tryoutval_
Definition: cmddriver.h:211
BufferString winassertion_
Definition: cmddriver.h:251
bool isCaseSensitive() const
Definition: cmddriver.h:142
ExprInterpreter & exprInterpreter()
Definition: cmddriver.h:214
ObjectSet< const CallBacker > timeoutlist_
Definition: cmddriver.h:323
Definition: command.h:184
Definition: searchkey.h:55
WinStateType winstatetype_
Definition: cmddriver.h:257
bool curactjumped_
Definition: cmddriver.h:233
File::Path & outfp_
Definition: cmddriver.h:199
const uiObject * localSearchEnv() const
Definition: cmddriver.h:169
InterceptStatus
Definition: cmddriver.h:302
Definition: cmddriver.h:99
uiString errmsg_
Definition: cmddriver.h:196
int lastmove_
Definition: cmddriver.h:229
bool abort_
Definition: cmddriver.h:177
od_ostream & logstream_
Definition: cmddriver.h:198
Definition: cmddriver.h:99
OnErrorTag onerror_
Definition: cmddriver.h:261
Threads::Lock cmddrvlock_
Definition: cmddriver.h:275
ActModalTyp
Definition: uimainwin.h:153
Action(const char *line)
Definition: cmddriver.h:79
Definition: cmddriver.h:136
od
Definition: strattransl.h:15
ExprInterpreter * eip_
Definition: cmddriver.h:213
bool casesensitive_
Definition: cmddriver.h:238
The base class for most UI elements.
Definition: uiobj.h:35
File pathname tools.
Definition: filepath.h:35
Definition: uistring.h:88
int lastActionIdxMove() const
Definition: cmddriver.h:228
Set of BufferString objects.
Definition: bufstringset.h:25
IdentifierManager * idm_
Definition: cmddriver.h:204
int prevnrproc_
Definition: cmddriver.h:289
#define mDeclareEnumUtils(enm)
Some utilities surrounding the often needed enum <-> string table.
Definition: enums.h:188
const InteractSpec * interactspec_
Definition: cmddriver.h:318
Definition: interpretexpr.h:22
void setLogMode(LogModeTag tag)
Definition: cmddriver.h:134
LogModeTag
Definition: cmddriver.h:133
bool pause_
Definition: cmddriver.h:178
Class to help setup a callback handling.
Definition: notify.h:121
SeparString with backquotes as separators, use in most ascii files.
Definition: separstr.h:131
void setCaseSensitive(bool yn)
Definition: cmddriver.h:139
bool uiobjchange_
Definition: cmddriver.h:242
const uiMainWin * topWin(bool ignorecmddriverwins=false) const
float regularwait_
Definition: cmddriver.h:249
BufferString logfnm_
Definition: cmddriver.h:194
WinStateType
Definition: cmddriver.h:99
OnErrorTag
Definition: cmddriver.h:136
Is the base class for all threads. Start it by creating it and give it the function or CallBack to ex...
Definition: thread.h:290
Definition: cmddriver.h:302
void setRecoveryStep(RecoveryTag rt)
Definition: cmddriver.h:264
void setOutputDir(const char *od)
Definition: cmddriver.h:126
Definition: cmddriverbasics.h:196
Definition: cmddriver.h:133
ObjectSet< const char > tryoutstack_
Definition: cmddriver.h:210
Definition: cmddriver.h:99
uiObject * localsearchenv_
Definition: cmddriver.h:239
const uiMainWin * applWin() const
Definition: cmddriver.h:165
const uiString sCheckFlowStackStr()
Definition: cmddriver.h:341
int insertidx_
Definition: cmddriver.h:85
ObjectSet< const CallBacker > timerlist_
Definition: cmddriver.h:322
WindowStack winstack_
Definition: cmddriver.h:269
BufferString line_
Definition: cmddriver.h:83
bool resume_
Definition: cmddriver.h:179
void skipGreyOuts(bool yn=true)
Definition: cmddriver.h:140
InterceptStatus interceptstatus_
Definition: cmddriver.h:304
Holds data to use and close an iostream.
Definition: strmdata.h:29
float pendingwait_
Definition: cmddriver.h:248
uiMainWin * activewin_
Definition: cmddriver.h:69
BufferString text_
Definition: cmddriver.h:95
Definition: uimenu.h:64
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:60
Definition: cmddriver.h:89
BufferString outdir_
Definition: cmddriver.h:193
Definition: identifierman.h:21
IdentifierManager & identifierMan()
Definition: cmddriver.h:205
int curActionIdx() const
Definition: cmddriver.h:224
BufferStringSet signatures_
Definition: cmddriver.h:72
const uiMainWin * curWin() const
Definition: cmddriver.h:270
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
RecoveryTag recoverystep_
Definition: cmddriver.h:263
int nrmodalwins_
Definition: cmddriver.h:71
bool openqdialog_
Definition: cmddriver.h:272
Definition: uitaskrunner.h:24
Notifier< CmdDriver > executeFinished
Definition: cmddriver.h:159
BufferString cmdfnm_
Definition: cmddriver.h:195
bool greyOutsSkipped() const
Definition: cmddriver.h:144
BufferString errmsg_
Definition: horizontracker.h:117
Definition: cmdfunction.h:26
int interceptonoff_
Definition: cmddriver.h:307
LogModeTag logmode_
Definition: cmddriver.h:218
bool skipgreyouts_
Definition: cmddriver.h:241
CmdDriver & drv_
Definition: cmddriver.h:192
int siblingnr_
Definition: cmddriver.h:93
WildcardManager & wildcardMan()
Definition: cmddriver.h:202
uiMainWin * applWin()
Definition: cmddriver.h:164
void setOnError(OnErrorTag tag)
Definition: cmddriver.h:137
void setLogFileName(const char *fnm)
Definition: cmddriver.h:130
ObjectSet< const CallBacker > activatorlist_
Definition: cmddriver.h:321
uiMainWin * applwin_
Definition: cmddriver.h:163
OnErrorTag onError() const
Definition: cmddriver.h:143
Notifier< CmdDriver > interactRequest
Definition: cmddriver.h:158
int ison_
Definition: cmddriver.h:94
Definition: cmddriverbasics.h:177
Definition: command.h:221
Definition: cmddriver.h:76
bool interceptmenu_
Definition: cmddriver.h:308
InterceptMode interceptmode_
Definition: cmddriver.h:306
ModalStatus prevmodalstat_
Definition: cmddriver.h:288
uiTaskRunner * uitaskrunner_
Definition: cmddriver.h:70
Definition: cmddriver.h:62
MenuInfo interceptmenuinfo_
Definition: cmddriver.h:309
int nrchildren_
Definition: cmddriver.h:92
int actionidx_
Definition: cmddriver.h:222
FileMultiString interceptmenupath_
Definition: cmddriver.h:305
const char * logFileName() const
Definition: cmddriver.h:129
WildcardManager * wcm_
Definition: cmddriver.h:201
BufferStringSet wildmodalsignatures_
Definition: cmddriver.h:285
Definition: cmddriver.h:99
bool winassertcs_
Definition: cmddriver.h:252
void clearLog()
Definition: cmddriver.h:131
InterceptMode
Definition: cmddriver.h:156
Definition: cmddriver.h:102
Definition: command.h:33
ModalStatus curmodalstat_
Definition: cmddriver.h:287
Definition: cmddriver.h:99

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017