13 #include "uicmddrivermod.h" 38 static void initStandardCommands();
46 virtual const char* name()
const = 0;
47 virtual bool act(
const char* parstr) = 0;
54 static bool isQuestionName(
const char*,
CmdDriver&);
61 static BufferString createFactoryKey(
const char* keyword);
66 const char* outputDir()
const;
70 bool openQDlg()
const;
75 bool verifyWinAssert(
const char* newwinstr=0);
76 bool verifyWinState(
const char* newwinstr=0,
81 void setCaseSensitive(
bool yn);
82 bool isCaseSensitive()
const;
83 void skipGreyOuts(
bool yn=
true);
84 bool greyOutsSkipped()
const;
85 bool goingToChangeUiObj()
const;
87 void setSleep(
float time,
bool regular);
88 void setWait(
float time,
bool regular);
90 const uiObject* localSearchEnv()
const;
91 bool doLocalAction(
uiObject* localenv,
const char* actstr);
92 bool tryAction(
const char* identname,
const char* actstr);
95 void finishActivate();
96 void waitForClearance();
102 bool didInterceptSucceed(
const char* objnm);
103 const MenuInfo& interceptedMenuInfo()
const;
112 void jump(
int extralines=0);
113 int lastActionIdxMove()
const;
115 int curActionIdx()
const;
116 bool insertProcedure(
int defidx);
120 #define mStartDeclCmdClassNoActNoEntry(mod,cmdkey,parentclass) \ 122 mExpClass(mod) cmdkey##Cmd : public parentclass \ 123 { mODTextTranslationClass(cmdkey##Cmd); \ 125 cmdkey##Cmd(CmdDriver& cmddrv) \ 126 : parentclass(cmddrv) \ 129 static const char* keyWord() { return #cmdkey; } \ 130 virtual const char* name() const { return keyWord(); } 132 #define mStartDeclCmdClassNoAct(mod,cmdkey,parentclass) \ 134 mStartDeclCmdClassNoActNoEntry(mod,cmdkey,parentclass) \ 136 static Command* createInstance(CmdDriver& cmddrv) \ 137 { return new cmdkey##Cmd(cmddrv); } \ 138 static void initClass() \ 139 { factory().addCreator( createInstance, \ 140 createFactoryKey(keyWord()) ); } 142 #define mStartDeclCmdClassNoEntry(mod,cmdkey,parentclass) \ 143 mStartDeclCmdClassNoActNoEntry(mod,cmdkey,parentclass) \ 144 virtual bool act(const char* parstr); 146 #define mStartDeclCmdClass( mod,cmdkey,parentclass) \ 147 mStartDeclCmdClassNoAct(mod,cmdkey,parentclass) \ 148 virtual bool act(const char* parstr); 150 #define mEndDeclCmdClass \ 155 virtual
bool isOpenQDlgCommand()
const {
return false; }
161 virtual
bool isOpenQDlgCommand()
const {
return false; }
167 virtual
bool isVisualCommand()
const {
return false; }
188 virtual void actCB(CallBacker*) = 0;
196 : actmainwin_( const_cast<
uiMainWin&>(uimw) )
199 { actmainwin_.close(); }
209 : actretval_( retval )
226 : startmenu_(mnu), drv_(cmddrv)
230 const uiAction*& curitem,
int* curitmidx=0)
const;
240 bool greyOutsSkipped()
const;
241 bool goingToChangeUiObj()
const;
247 #define mParDQuoted( argnm, parstr, parnext, argstr, emptycheck, optional ) \ 249 BufferString argstr; \ 250 const char* parnext = StringProcessor(parstr).parseDQuoted( argstr ); \ 251 if ( (!optional && !parnext) || (emptycheck && parnext && !*argstr) ) \ 253 mParseErrStrm << (parnext ? "Empty " : "No ") << argnm \ 254 << " specified" << od_endl; \ 261 #define mParDisambiguatorRet( argnm, str, selnr, retfld ) \ 262 int selnr = StringProcessor(str).removeNumAppendix(); \ 263 if ( mIsUdf(selnr) ) \ 265 mParseErrStrm << "Non-zero integer required to disambiguate " \ 266 << argnm << ": \"" << str << "\"" << od_endl; \ 270 #define mParDisambiguator( argnm, str, selnr ) \ 271 mParDisambiguatorRet( argnm, str, selnr, false ) 274 #define mParStrErrRet( objnm,nrfound,nrgrey,str,selnr,strnm,ambicheck,retfld ) \ 276 const int overflow = (!selnr ? 1 : abs(selnr)) - nrfound; \ 278 if ( overflow>0 || (!selnr && ambicheck && nrfound>1) ) \ 280 if ( nrfound && overflow>0 ) \ 281 mWinErrStrm << "Impossible to select " << objnm << ": #" << selnr \ 284 BufferString dispstr = str; \ 285 dispstr.replace( "\a", "*" ); \ 286 mWinErrStrm << "Found " << nrfound \ 287 << (greyOutsSkipped() ? " enabled " : " ") << objnm \ 288 << "(s) defined by " << strnm << ": \"" << dispstr \ 289 << "\"" << od_endl; \ 291 if ( greyOutsSkipped() && overflow>0 && overflow<=nrgrey ) \ 292 mWinWarnStrm << "Did find " << nrgrey << " disabled " << objnm \ 293 << "(s) defined by " << strnm << ": \"" << dispstr \ 294 << "\"" << od_endl; \ 299 #define mKeepSelection( objsfound, selnr ) \ 303 const int selidx = selnr>0 ? selnr-1 : selnr+objsfound.size(); \ 304 for ( int idx=objsfound.size()-1; idx>=0; idx-- ) \ 306 if ( idx != selidx ) \ 307 objsfound.removeSingle( idx ); \ 312 #define mParStrPreRet(objnm,objsfound,nrgrey,str,selnr,strnm,ambicheck,retfld) \ 314 const int nrfound = objsfound.size(); \ 315 mParStrErrRet( objnm,nrfound,nrgrey,str,selnr,strnm,ambicheck,retfld ) \ 316 mKeepSelection( objsfound, selnr ); \ 319 #define mParStrPre( objnm, objsfound, nrgrey, str, selnr, strnm, ambicheck ) \ 320 mParStrPreRet(objnm, objsfound, nrgrey, str, selnr, strnm, ambicheck, false) 323 #define mDisabilityCheck( objnm, nrobjs, disabled ) \ 325 if ( goingToChangeUiObj() && (disabled) ) \ 327 mWinErrStrm << (nrobjs>1 ? "Some s" : "S") << "elected " \ 328 << objnm << (nrobjs>1 ? "s are" : " is") \ 329 << " disabled for manipulation" << od_endl; \ 334 #define mParKeyStrInit( objnm, parstr, parnext, keys, selnr ) \ 336 mParDQuoted(objnm " keystring", parstr, parnext, keys##str, false, false); \ 337 mParDisambiguator( objnm " keystring", keys##str, selnr ); \ 338 mGetEscConvertedFMS( keys, keys##str, false ); 340 #define mParKeyStrPre( objnm, objsfound, nrgrey, keys, selnr ) \ 341 mParStrPre( objnm, objsfound, nrgrey, keys.buf(), selnr, "key(s)", true ); \ 342 mDisabilityCheck( objnm, 1, !UIEntity(objsfound[0]).sensitive() ); \ 343 ObjectFinder wcmobjfinder( *curWin(), isCaseSensitive(), &wildcardMan() ); \ 344 wcmobjfinder.selectNodes( objsfound, keys ); 346 #define mParOptPathStrInit( objnm, parstr, parnext, path, optional ) \ 347 mParDQuoted( objnm " path", parstr, parnext, path##str, false, optional ); \ 348 mGetEscConvertedFMS( path, path##str, false ); 350 #define mParPathStrInit( objnm, parstr, parnext, path ) \ 351 mParOptPathStrInit( objnm, parstr, parnext, path, false ) 353 #define mParWinStrInit( objnm, parstr, parnext, winstr, selnr, optional ) \ 354 mParDQuoted( objnm " name", parstr, parnext, winstr, true, optional ); \ 355 mParDisambiguator( objnm " name", winstr, selnr ); 358 #define mParWinStrPre( windowlist, winstr, selnr, errorcheck ) \ 360 ObjectSet<uiMainWin> windowlist; \ 361 mSearchKey(winstr).getMatchingWindows( applWin(), windowlist ); \ 364 mParStrPre( "window", windowlist, 0, winstr, selnr, "string", true ) \ 365 mSearchKey(winstr).getMatchingWindows( applWin(), windowlist, \ 369 mKeepSelection( windowlist, selnr ); 375 #define mParItemSelInit( objnm, parstr, parnext, itemstr, itemnr, optional ) \ 377 mParDQuoted( BufferString(objnm," name"), parstr, parnext, itemstr, \ 379 mParDisambiguator( BufferString(objnm," name"), itemstr, itemnr ); \ 380 if ( parnext == parstr ) \ 382 const int num = strtol( parstr, const_cast<char**>(&parnext), 0 ); \ 384 if ( num || (optional && parnext==parstr) ) \ 386 itemnr = !num ? mUdf(int) : num; \ 391 mParseErrStrm << "Name or non-zero integer needed to select " \ 392 << objnm << od_endl; \ 404 #define mParOnOffInit( parstr, parnext, onoff ) \ 406 BufferString onoffword; \ 407 const char* parnext = getNextWord( parstr, onoffword.getCStr() ); \ 408 mSkipBlanks( parnext ); \ 411 if ( onoffword=="1" || mMatchCI(onoffword,"On") ) \ 413 if ( onoffword=="0" || mMatchCI(onoffword,"Off") ) \ 418 #define mParOnOffPre( objnm, onoff, ischecked, checkable ) \ 420 if ( onoff && !(checkable) ) \ 422 mWinWarnStrm << "This " << objnm << " has no on/off switch" \ 427 if ( onoff == ((ischecked) ? 1 : -1) ) \ 429 mWinErrStrm << "This " << objnm << " was switched " \ 430 << (onoff==1 ? "on" : "off") << " already" << od_endl; \ 431 setRecoveryStep( CmdDriver::NextCmd ); \ 436 #define mParOnOffPost( objnm, onoff, ischecked ) \ 438 if ( onoff == ((ischecked) ? -1 : 1) ) \ 440 mWinWarnStrm << "Switching " << (onoff==1 ? "on" : "off") \ 441 << " this " << objnm << " has been overruled" \ 447 #define mParInputStr( objnm, parstr, parnext, inpstr, optional ) \ 449 BufferString filepathword; \ 450 const char* extraparstr = getNextWord( parstr, filepathword.getCStr() ); \ 451 mSkipBlanks( extraparstr ); \ 452 if ( !mMatchCI(filepathword,"FilePath") ) \ 453 extraparstr = parstr; \ 455 mParDQuoted( objnm, extraparstr, parnext, inpbufstr, false, true ); \ 456 if ( parnext == extraparstr ) \ 458 if ( extraparstr != parstr ) \ 460 mParseErrStrm << "FilePath-option expects double-quoted input " \ 461 << "string" << od_endl; \ 464 const double inpnum = strtod( parstr, const_cast<char**>(&parnext) ); \ 465 inpbufstr = toString( inpnum ); \ 469 if ( extraparstr != parstr ) \ 470 StringProcessor(inpbufstr).makeDirSepIndep(); \ 472 StringProcessor(inpbufstr).removeCmdFileEscapes(); \ 475 const char* inpstr = parnext==parstr ? 0 : inpbufstr.buf(); \ 476 if ( !optional && !inpstr ) \ 478 mParseErrStrm << "Double-quoted string or numeric argument " \ 479 << "expected as input" << od_endl; \ 484 #define mParSteps( parstr, parnext, nrsteps, minval, defval ) \ 487 int nrsteps = strtol( parstr, &parnext, 0 ); \ 488 if ( parnext!=parstr && nrsteps<minval ) \ 490 mParseWarnStrm << "Number of steps should be at least " << minval \ 493 if ( parnext==parstr || nrsteps<minval ) \ 497 #define mPopUpWinInLoopCheck( prevwin ) \ 499 if ( openQDlg() || curWin()!=prevwin ) \ 501 mWinErrStrm << "Next step blocked by popped-up modal window" \ 507 #define mMatchMouseTag( tag, mousetagptr, clicktags ) \ 509 if ( FixedString(mousetagptr).startsWith(tag) ) \ 511 clicktags.add( tag ); \ 512 mousetagptr += strLength( tag ); \ 515 #define mParMouse( parstr, parnext, clicktags, defaulttag ) \ 517 mSkipBlanks( parstr ); \ 518 BufferStringSet clicktags; \ 519 const char* parnext = parstr; \ 520 mMatchMouseTag( "Ctrl", parnext, clicktags ); \ 521 mMatchMouseTag( "Double", parnext, clicktags ); \ 523 mMatchMouseTag( "Left", parnext, clicktags ) \ 524 else mMatchMouseTag( "Right", parnext, clicktags ) \ 526 clicktags.add( clicktags.isEmpty() ? defaulttag : "Left" ); \ 528 if ( *parnext && !iswspace(*parnext) ) \ 532 #define mButtonCmdMouseTagCheck( clicktags ) \ 534 if ( clicktags.isPresent("Right") || clicktags.isPresent("Double") ) \ 536 mParseWarnStrm << "Double or Right mouse-click has no (lasting) " \ 537 << "effect on check-box" << od_endl; \ 541 #define mParExpr( isarg, identnm, parstr, parnext, valstr, prescan ) \ 543 BufferString valstr; \ 544 const char* parnext = exprInterpreter().process( parstr, valstr, isarg ); \ 546 if ( !parnext || (!(prescan) && *exprInterpreter().errMsg()) ) \ 548 mTimeStrm << "EVAL: " << exprInterpreter().breakPrefix(); \ 549 mLogStrm << " ..." << od_endl; \ 550 if ( exprInterpreter().isParseError() ) \ 552 mParseErrStrm << exprInterpreter().errMsg() << od_endl; \ 555 mWinErrStrm << exprInterpreter().errMsg() << od_endl; \ 560 if ( !(prescan) && ((isarg) || !exprInterpreter().isResultTrivial()) ) \ 562 mTimeStrm << "EVAL: " << exprInterpreter().parsedExpr(); \ 563 StringProcessor strproc( valstr ); \ 564 const char* quote = strproc.convertToDouble() ? "" : "\""; \ 565 mLogStrm << " -->> " << identnm << (isarg ? "'" : "") \ 566 << (FixedString(identnm).isEmpty() ? "" : " = " ) \ 567 << quote << valstr << quote << od_endl; \ 570 #define mParIdentInit( parstr, parnext, identnm, allowdummy ) \ 572 BufferString firstarg, identnm; \ 573 const char* parnext = getNextWord( parstr, firstarg.getCStr() ); \ 574 if ( firstarg != "_dummyvar" ) \ 575 parnext = StringProcessor(parstr).parseIdentifier( identnm ); \ 576 else if ( allowdummy ) \ 577 identnm = firstarg; \ 580 mParseErrStrm << "Missing identifier" << od_endl; \ 584 if ( parnext && *parnext == '[' ) \ 586 mParseErrStrm << "If an array variable a[i] was intended, " \ 587 << "use index substitution a_$i$ instead" << od_endl; \ 590 if ( !parnext || firstarg!=identnm ) \ 592 mParseErrStrm << "Invalid identifier: " << firstarg << od_endl; \ 595 if ( identifierMan().isPredefined(identnm) ) \ 597 mParseWarnStrm << "Reassigning a predefined identifier: " \ 598 << identnm << od_endl; \ 601 #define mParEscIdentPost( identnm, val, args, addesc ) \ 603 mSkipBlanks( args ); \ 604 identifierMan().set( identnm, val ); \ 605 BufferString valstr = identifierMan().getValue( identnm ); \ 606 StringProcessor strproc( valstr ); \ 608 strproc.addCmdFileEscapes(StringProcessor::sAllEscSymbols()); \ 610 identifierMan().set( identnm, strproc.buf() ); \ 611 const char* quote = strproc.convertToDouble() ? "" : "\""; \ 612 mTimeStrm << "Q&A: " << name() << (*args ? " " : "") << args \ 613 << " -->> " << identnm << " = " << quote << strproc.buf() \ 614 << quote << od_endl; \ 617 #define mParIdentPost( identnm, val, args ) \ 618 mParEscIdentPost( identnm, val, args, true ) 621 #define mParCase( parstr, parnext, casesensitive, optional ) \ 623 BufferString argword; \ 624 const char* parnext = getNextWord( parstr, argword.getCStr() ); \ 625 bool casesensitive = false; \ 627 if ( mMatchCI(argword,"Sensitive") ) \ 628 casesensitive = true; \ 629 else if ( !mMatchCI(argword,"Insensitive") ) \ 633 mParseErrStrm << "Case-argument not in {Sensitive, Insensitive}" \ 640 #define mParExtraFormInit( parstr, parnext, form, extrastr ) \ 642 BufferString formword; \ 643 FileMultiString fms( extrastr ); \ 644 const char* parnext = getNextWord( parstr, formword.getCStr() ); \ 645 FormTag form = NoForm; \ 646 if ( mMatchCI(formword,"Text") ) \ 648 if ( mMatchCI(formword,"Number") && fms.indexOf("Number")>=0 ) \ 650 if ( mMatchCI(formword,"Color") && fms.indexOf("Color")>=0 ) \ 652 if ( mMatchCI(formword,"Value") && fms.indexOf("Value")>=0 ) \ 654 if ( mMatchCI(formword,"Angle") && fms.indexOf("Angle")>=0 ) \ 656 if ( mMatchCI(formword,"Minimum") && fms.indexOf("Minimum")>=0 ) \ 658 if ( mMatchCI(formword,"Maximum") && fms.indexOf("Maximum")>=0 ) \ 660 if ( mMatchCI(formword,"Step") && fms.indexOf("Step")>=0 ) \ 662 if ( mMatchCI(formword,"Percentage") && fms.indexOf("Percentage")>=0 ) \ 664 if ( mMatchCI(formword,"FilePath") && fms.indexOf("FilePath")>=0 ) \ 666 if ( form == NoForm ) \ 669 #define mParFormInit( parstr, parnext, form ) \ 670 mParExtraFormInit( parstr, parnext, form, "Number" ) 672 #define mParForm( answer, form, text, other ) \ 674 BufferString answer; \ 675 if ( form==NoForm || form==Text ) \ 678 StringProcessor(answer).cleanUp(); \ 683 #define mParExtraForm( answer, form, extratag, extra ) \ 685 if ( form == extratag ) \ 689 #define mParFramed( parstr, parnext, framed ) \ 691 BufferString frameword; \ 692 const char* parnext = getNextWord( parstr, frameword.getCStr() ); \ 693 bool framed = true; \ 694 if ( mMatchCI(frameword,"Selected") ) \ 696 else if ( !mMatchCI(frameword,"Framed") ) \ 700 #define mParTail( partail ) \ 702 mSkipBlanks( partail ); \ 703 if ( (partail) && *(partail) ) \ 705 mParseErrStrm << "Command line ends with unexpected argument(s): " \ 706 << (partail) << od_endl; \ 713 #define mFindMenuItem( menupath, startmenu, curitem ) \ 715 const uiAction* curitem; \ 716 if ( !MenuTracer(startmenu,drv_).findItem(menupath,curitem) ) \ 719 #define mGetMenuInfo( menupath, allowroot, startmenu, mnuinfo ) \ 722 if ( !MenuTracer(startmenu,drv_).getMenuInfo(menupath,allowroot,mnuinfo) ) \ 728 #define mFindObjs3Base( objsfound, objcls1, objcls2, objcls3, keys, warn ) \ 730 ObjectSet<const CallBacker> objsfound; \ 732 ObjectFinder objfinder( *curWin(), isCaseSensitive() ); \ 733 if ( localSearchEnv() ) \ 734 objfinder.findNodes( localSearchEnv(), &objsfound ); \ 736 objfinder.findNodes( ObjectFinder::Everything, &objsfound ); \ 738 for ( int idx=objsfound.size()-1; idx>=0; idx-- ) \ 740 mDynamicCastGet( const objcls1*, uiobj1, objsfound[idx] ); \ 741 mDynamicCastGet( const objcls2*, uiobj2, objsfound[idx] ); \ 742 mDynamicCastGet( const objcls3*, uiobj3, objsfound[idx] ); \ 743 if ( !uiobj1 && !uiobj2 && !uiobj3 ) \ 744 objsfound.removeSingle( idx ); \ 748 if ( !objfinder.selectNodes(objsfound, keys, &errkeyidx) && warn ) \ 750 mWinWarnStrm << "No object with key \"" << keys[errkeyidx] << "\" in " \ 751 << ( localSearchEnv() ? "local search environment" \ 752 : "current window" ) << od_endl; \ 756 #define mFindObjs2Base( objsfound, objcls1, objcls2, keys, warn ) \ 757 mFindObjs3Base( objsfound, objcls1, objcls1, objcls2, keys, warn ) 759 #define mFindObjsBase( objsfound, objclass, keys ) \ 760 mFindObjs2Base( objsfound, objclass, objclass, keys, true ) 762 #define mFindObjects3( objsfound, objcls1, objcls2, objcls3, keys, nrgrey ) \ 763 mFindObjs3Base( objsfound, objcls1, objcls2, objcls3, keys, true ); \ 764 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 766 #define mFindObjects2( objsfound, objcls1, objcls2, keys, nrgrey ) \ 767 mFindObjs2Base( objsfound, objcls1, objcls2, keys, true ); \ 768 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 770 #define mFindObjects( objsfound, objclass, keys, nrgrey ) \ 771 mFindObjsBase( objsfound, objclass, keys ); \ 772 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 774 #define mFindListTableObjs( objnm, objsfound, objclass, keys, nrgrey ) \ 776 mFindObjsBase( objsfound, objclass, keys ); \ 777 mFindObjs2Base( objsfound2, objclass, uiTreeView, keys, false ); \ 778 const bool uilviewonly = objsfound.isEmpty() && !objsfound2.isEmpty(); \ 779 const bool uilviewcloser = !objsfound.isEmpty() && \ 780 objsfound2.indexOf(objsfound[0])<0; \ 781 if ( uilviewonly || uilviewcloser ) \ 783 mWinWarnStrm << "Skipped " << objsfound2.size() << " tree(s) " \ 784 << (uilviewcloser ? "more closely" : "") \ 785 << " defined by key(s): \"" << keys.buf() \ 786 << "\". Possibly resembling a " << objnm \ 787 << ", but requiring a \"Tree\"-command" << od_endl; \ 789 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 794 #define mActivateInGUIThread( cb, busywait ) \ 796 uiMainWin* applwin = applWin(); \ 798 applwin->activateInGUIThread( cb, busywait ); \ 802 #define mActInGUIThread( typ, constructorcall, waitclear ) \ 804 typ##Activator* activator = new typ##constructorcall; \ 805 if ( prepareActivate(activator) ) \ 807 CallBack cb = mCB( activator, typ##Activator, actCB ); \ 808 mActivateInGUIThread( cb, false ); \ 812 waitForClearance(); \ 819 #define mActivate( acttyp, constructorcall ) \ 820 mActInGUIThread( acttyp, constructorcall, true ) 822 #define mActivateNoClearance( acttyp, constructorcall ) \ 823 mActInGUIThread( acttyp, constructorcall, false ) #define mEndDeclCmdClass
Definition: command.h:150
#define mExpClass(module)
Definition: commondefs.h:157
User interface main window.
Definition: uimainwin.h:34
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
Command Drive
Definition: canvascommands.h:20
RecoveryTag
Definition: cmddriver.h:153
Definition: command.h:184
Definition: searchkey.h:55
Definition: cmddriver.h:156
Definition: cmddriver.h:99
CloseQDlgActivator(int retval)
Definition: command.h:208
The base class for most UI elements.
Definition: uiobj.h:35
File pathname tools.
Definition: filepath.h:35
virtual bool isLocalEnvCommand() const
Definition: command.h:50
virtual bool isVisualCommand() const
Definition: command.h:163
Definition: interpretexpr.h:22
#define mDefineFactory1ParamInClass(T, P, funcname)
Definition: factory.h:445
SeparString with backquotes as separators, use in most ascii files.
Definition: separstr.h:131
FormTag
Definition: command.h:56
FixedString Minimum()
Definition: keystrs.h:165
WinStateType
Definition: cmddriver.h:99
void actCB(CallBacker *cb)
Definition: command.h:198
OnErrorTag
Definition: cmddriver.h:136
virtual bool isUiObjChangeCommand() const
Definition: command.h:157
virtual bool isVisualCommand() const
Definition: command.h:51
virtual bool isOpenQDlgCommand() const
Definition: command.h:49
Definition: cmddriverbasics.h:196
virtual bool isLocalEnvCommand() const
Definition: command.h:156
uiMainWin & actmainwin_
Definition: command.h:201
Definition: command.h:192
#define mStartDeclCmdClassNoActNoEntry(mod, cmdkey, parentclass)
Definition: command.h:120
Command(CmdDriver &cmddrv)
Definition: command.h:41
Definition: identifierman.h:21
static void closeActiveModalQDlg(int retval)
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
int actretval_
Definition: command.h:214
virtual bool isLocalEnvCommand() const
Definition: command.h:162
virtual ~Command()
Definition: command.h:44
virtual bool isUiObjChangeCommand() const
Definition: command.h:52
Definition: command.h:205
CmdDriver & drv_
Definition: command.h:63
CloseActivator(const uiMainWin &uimw)
Definition: command.h:195
FixedString Maximum()
Definition: keystrs.h:163
InterceptMode
Definition: cmddriver.h:156
Definition: cmddriver.h:102
void actCB(CallBacker *cb)
Definition: command.h:211
virtual ~Activator()
Definition: command.h:187
Definition: uiaction.h:150