15 #include "uicmddrivermod.h" 40 static void initStandardCommands();
48 virtual const char* name()
const = 0;
49 virtual bool act(
const char* parstr) = 0;
56 static bool isQuestionName(
const char*,
CmdDriver&);
63 static BufferString createFactoryKey(
const char* keyword);
68 const char* outputDir()
const;
72 bool openQDlg()
const;
77 bool verifyWinAssert(
const char* newwinstr=0);
78 bool verifyWinState(
const char* newwinstr=0,
83 void setCaseSensitive(
bool yn);
84 bool isCaseSensitive()
const;
85 void skipGreyOuts(
bool yn=
true);
86 bool greyOutsSkipped()
const;
87 bool goingToChangeUiObj()
const;
89 void setSleep(
float time,
bool regular);
90 void setWait(
float time,
bool regular);
92 const uiObject* localSearchEnv()
const;
93 bool doLocalAction(
uiObject* localenv,
const char* actstr);
94 bool tryAction(
const char* identname,
const char* actstr);
97 void finishActivate();
98 void waitForClearance();
104 bool didInterceptSucceed(
const char* objnm);
105 const MenuInfo& interceptedMenuInfo()
const;
114 void jump(
int extralines=0);
115 int lastActionIdxMove()
const;
117 int curActionIdx()
const;
118 bool insertProcedure(
int defidx);
122 #define mStartDeclCmdClassNoActNoEntry(mod,cmdkey,parentclass) \ 124 mExpClass(mod) cmdkey##Cmd : public parentclass \ 125 { mODTextTranslationClass(cmdkey##Cmd); \ 127 cmdkey##Cmd(CmdDriver& cmddrv) \ 128 : parentclass(cmddrv) \ 131 static const char* keyWord() { return #cmdkey; } \ 132 virtual const char* name() const { return keyWord(); } 134 #define mStartDeclCmdClassNoAct(mod,cmdkey,parentclass) \ 136 mStartDeclCmdClassNoActNoEntry(mod,cmdkey,parentclass) \ 138 static Command* createInstance(CmdDriver& cmddrv) \ 139 { return new cmdkey##Cmd(cmddrv); } \ 140 static void initClass() \ 141 { factory().addCreator( createInstance, \ 142 createFactoryKey(keyWord()) ); } 144 #define mStartDeclCmdClassNoEntry(mod,cmdkey,parentclass) \ 145 mStartDeclCmdClassNoActNoEntry(mod,cmdkey,parentclass) \ 146 virtual bool act(const char* parstr); 148 #define mStartDeclCmdClass( mod,cmdkey,parentclass) \ 149 mStartDeclCmdClassNoAct(mod,cmdkey,parentclass) \ 150 virtual bool act(const char* parstr); 152 #define mEndDeclCmdClass \ 157 virtual
bool isOpenQDlgCommand()
const {
return false; }
163 virtual
bool isOpenQDlgCommand()
const {
return false; }
169 virtual
bool isVisualCommand()
const {
return false; }
190 virtual void actCB(CallBacker*) = 0;
198 : actmainwin_( const_cast<
uiMainWin&>(uimw) )
201 { actmainwin_.close(); }
211 : actretval_( retval )
228 : startmenu_(mnu), drv_(cmddrv)
232 const uiAction*& curitem,
int* curitmidx=0)
const;
242 bool greyOutsSkipped()
const;
243 bool goingToChangeUiObj()
const;
249 #define mParDQuoted( argnm, parstr, parnext, argstr, emptycheck, optional ) \ 251 BufferString argstr; \ 252 const char* parnext = StringProcessor(parstr).parseDQuoted( argstr ); \ 253 if ( (!optional && !parnext) || (emptycheck && parnext && !*argstr) ) \ 255 mParseErrStrm << (parnext ? "Empty " : "No ") << argnm \ 256 << " specified" << od_endl; \ 263 #define mParDisambiguatorRet( argnm, str, selnr, retfld ) \ 264 int selnr = StringProcessor(str).removeNumAppendix(); \ 265 if ( mIsUdf(selnr) ) \ 267 mParseErrStrm << "Non-zero integer required to disambiguate " \ 268 << argnm << ": \"" << str << "\"" << od_endl; \ 272 #define mParDisambiguator( argnm, str, selnr ) \ 273 mParDisambiguatorRet( argnm, str, selnr, false ) 276 #define mParStrErrRet( objnm,nrfound,nrgrey,str,selnr,strnm,ambicheck,retfld ) \ 278 const int overflow = (!selnr ? 1 : abs(selnr)) - nrfound; \ 280 if ( overflow>0 || (!selnr && ambicheck && nrfound>1) ) \ 282 if ( nrfound && overflow>0 ) \ 283 mWinErrStrm << "Impossible to select " << objnm << ": #" << selnr \ 286 BufferString dispstr = str; \ 287 dispstr.replace( "\a", "*" ); \ 288 mWinErrStrm << "Found " << nrfound \ 289 << (greyOutsSkipped() ? " enabled " : " ") << objnm \ 290 << "(s) defined by " << strnm << ": \"" << dispstr \ 291 << "\"" << od_endl; \ 293 if ( greyOutsSkipped() && overflow>0 && overflow<=nrgrey ) \ 294 mWinWarnStrm << "Did find " << nrgrey << " disabled " << objnm \ 295 << "(s) defined by " << strnm << ": \"" << dispstr \ 296 << "\"" << od_endl; \ 301 #define mKeepSelection( objsfound, selnr ) \ 305 const int selidx = selnr>0 ? selnr-1 : selnr+objsfound.size(); \ 306 for ( int idx=objsfound.size()-1; idx>=0; idx-- ) \ 308 if ( idx != selidx ) \ 309 objsfound.removeSingle( idx ); \ 314 #define mParStrPreRet(objnm,objsfound,nrgrey,str,selnr,strnm,ambicheck,retfld) \ 316 const int nrfound = objsfound.size(); \ 317 mParStrErrRet( objnm,nrfound,nrgrey,str,selnr,strnm,ambicheck,retfld ) \ 318 mKeepSelection( objsfound, selnr ); \ 321 #define mParStrPre( objnm, objsfound, nrgrey, str, selnr, strnm, ambicheck ) \ 322 mParStrPreRet(objnm, objsfound, nrgrey, str, selnr, strnm, ambicheck, false) 325 #define mDisabilityCheck( objnm, nrobjs, disabled ) \ 327 if ( goingToChangeUiObj() && (disabled) ) \ 329 mWinErrStrm << (nrobjs>1 ? "Some s" : "S") << "elected " \ 330 << objnm << (nrobjs>1 ? "s are" : " is") \ 331 << " disabled for manipulation" << od_endl; \ 336 #define mParKeyStrInit( objnm, parstr, parnext, keys, selnr ) \ 338 mParDQuoted(objnm " keystring", parstr, parnext, keys##str, false, false); \ 339 mParDisambiguator( objnm " keystring", keys##str, selnr ); \ 340 mGetEscConvertedFMS( keys, keys##str, false ); 342 #define mParKeyStrPre( objnm, objsfound, nrgrey, keys, selnr ) \ 343 mParStrPre( objnm, objsfound, nrgrey, keys.buf(), selnr, "key(s)", true ); \ 344 mDisabilityCheck( objnm, 1, !UIEntity(objsfound[0]).sensitive() ); \ 345 ObjectFinder wcmobjfinder( *curWin(), isCaseSensitive(), &wildcardMan() ); \ 346 wcmobjfinder.selectNodes( objsfound, keys ); 348 #define mParOptPathStrInit( objnm, parstr, parnext, path, optional ) \ 349 mParDQuoted( objnm " path", parstr, parnext, path##str, false, optional ); \ 350 mGetEscConvertedFMS( path, path##str, false ); 352 #define mParPathStrInit( objnm, parstr, parnext, path ) \ 353 mParOptPathStrInit( objnm, parstr, parnext, path, false ) 355 #define mParWinStrInit( objnm, parstr, parnext, winstr, selnr, optional ) \ 356 mParDQuoted( objnm " name", parstr, parnext, winstr, true, optional ); \ 357 mParDisambiguator( objnm " name", winstr, selnr ); 360 #define mParWinStrPre( windowlist, winstr, selnr, errorcheck ) \ 362 ObjectSet<uiMainWin> windowlist; \ 363 mSearchKey(winstr).getMatchingWindows( applWin(), windowlist ); \ 366 mParStrPre( "window", windowlist, 0, winstr, selnr, "string", true ) \ 367 mSearchKey(winstr).getMatchingWindows( applWin(), windowlist, \ 371 mKeepSelection( windowlist, selnr ); 377 #define mParItemSelInit( objnm, parstr, parnext, itemstr, itemnr, optional ) \ 379 mParDQuoted( BufferString(objnm," name"), parstr, parnext, itemstr, \ 381 mParDisambiguator( BufferString(objnm," name"), itemstr, itemnr ); \ 382 if ( parnext == parstr ) \ 384 const int num = strtol( parstr, const_cast<char**>(&parnext), 0 ); \ 386 if ( num || (optional && parnext==parstr) ) \ 388 itemnr = !num ? mUdf(int) : num; \ 393 mParseErrStrm << "Name or non-zero integer needed to select " \ 394 << objnm << od_endl; \ 406 #define mParOnOffInit( parstr, parnext, onoff ) \ 408 BufferString onoffword; \ 409 const char* parnext = getNextWord( parstr, onoffword.getCStr() ); \ 410 mSkipBlanks( parnext ); \ 413 if ( onoffword=="1" || mMatchCI(onoffword,"On") ) \ 415 if ( onoffword=="0" || mMatchCI(onoffword,"Off") ) \ 420 #define mParOnOffPre( objnm, onoff, checked, checkable ) \ 422 const bool ischeckable = (checkable); \ 423 if ( onoff!=0 && !ischeckable ) \ 425 mWinWarnStrm << "This " << objnm << " has no on/off switch" \ 430 const bool ischecked = (checked); \ 431 if ( onoff == (ischecked ? 1 : -1) ) \ 433 mWinErrStrm << "This " << objnm << " was switched " \ 434 << (onoff==1 ? "on" : "off") << " already" << od_endl; \ 435 setRecoveryStep( CmdDriver::NextCmd ); \ 440 #define mParOnOffPost( objnm, onoff, checked ) \ 442 const bool ischecked = (checked); \ 443 if ( onoff == (ischecked ? -1 : 1) ) \ 445 mWinWarnStrm << "Switching " << (onoff==1 ? "on" : "off") \ 446 << " this " << objnm << " has been overruled" \ 452 #define mParInputStr( objnm, parstr, parnext, inpstr, optional ) \ 454 BufferString filepathword; \ 455 const char* extraparstr = getNextWord( parstr, filepathword.getCStr() ); \ 456 mSkipBlanks( extraparstr ); \ 457 if ( !mMatchCI(filepathword,"FilePath") ) \ 458 extraparstr = parstr; \ 460 mParDQuoted( objnm, extraparstr, parnext, inpbufstr, false, true ); \ 461 if ( parnext == extraparstr ) \ 463 if ( extraparstr != parstr ) \ 465 mParseErrStrm << "FilePath-option expects double-quoted input " \ 466 << "string" << od_endl; \ 469 const double inpnum = strtod( parstr, const_cast<char**>(&parnext) ); \ 470 inpbufstr = toString( inpnum ); \ 474 if ( extraparstr != parstr ) \ 475 StringProcessor(inpbufstr).makeDirSepIndep(); \ 477 StringProcessor(inpbufstr).removeCmdFileEscapes(); \ 480 const char* inpstr = parnext==parstr ? 0 : inpbufstr.buf(); \ 481 if ( !optional && !inpstr ) \ 483 mParseErrStrm << "Double-quoted string or numeric argument " \ 484 << "expected as input" << od_endl; \ 489 #define mParSteps( parstr, parnext, nrsteps, minval, defval ) \ 492 int nrsteps = strtol( parstr, &parnext, 0 ); \ 493 if ( parnext!=parstr && nrsteps<minval ) \ 495 mParseWarnStrm << "Number of steps should be at least " << minval \ 498 if ( parnext==parstr || nrsteps<minval ) \ 502 #define mPopUpWinInLoopCheck( prevwin ) \ 504 if ( openQDlg() || curWin()!=prevwin ) \ 506 mWinErrStrm << "Next step blocked by popped-up modal window" \ 512 #define mMatchMouseTag( tag, mousetagptr, clicktags ) \ 514 if ( FixedString(mousetagptr).startsWith(tag) ) \ 516 clicktags.add( tag ); \ 517 mousetagptr += strlen( tag ); \ 520 #define mParMouse( parstr, parnext, clicktags, defaulttag ) \ 522 mSkipBlanks( parstr ); \ 523 BufferStringSet clicktags; \ 524 const char* parnext = parstr; \ 525 mMatchMouseTag( "Ctrl", parnext, clicktags ); \ 526 mMatchMouseTag( "Double", parnext, clicktags ); \ 528 mMatchMouseTag( "Left", parnext, clicktags ) \ 529 else mMatchMouseTag( "Right", parnext, clicktags ) \ 531 clicktags.add( clicktags.isEmpty() ? defaulttag : "Left" ); \ 533 if ( *parnext && !iswspace(*parnext) ) \ 537 #define mButtonCmdMouseTagCheck( clicktags ) \ 539 if ( clicktags.isPresent("Right") || clicktags.isPresent("Double") ) \ 541 mParseWarnStrm << "Double or Right mouse-click has no (lasting) " \ 542 << "effect on check-box" << od_endl; \ 546 #define mParExpr( isarg, identnm, parstr, parnext, valstr, prescan ) \ 548 BufferString valstr; \ 549 const char* parnext = exprInterpreter().process( parstr, valstr, isarg ); \ 551 if ( !parnext || (!(prescan) && *exprInterpreter().errMsg()) ) \ 553 mTimeStrm << "EVAL: " << exprInterpreter().breakPrefix(); \ 554 mLogStrm << " ..." << od_endl; \ 555 if ( exprInterpreter().isParseError() ) \ 557 mParseErrStrm << exprInterpreter().errMsg() << od_endl; \ 560 mWinErrStrm << exprInterpreter().errMsg() << od_endl; \ 565 if ( !(prescan) && ((isarg) || !exprInterpreter().isResultTrivial()) ) \ 567 mTimeStrm << "EVAL: " << exprInterpreter().parsedExpr(); \ 568 StringProcessor strproc( valstr ); \ 569 const char* quote = strproc.convertToDouble() ? "" : "\""; \ 570 mLogStrm << " -->> " << identnm << (isarg ? "'" : "") \ 571 << (FixedString(identnm).isEmpty() ? "" : " = " ) \ 572 << quote << valstr << quote << od_endl; \ 575 #define mParIdentInit( parstr, parnext, identnm, allowdummy ) \ 577 BufferString firstarg, identnm; \ 578 const char* parnext = getNextWord( parstr, firstarg.getCStr() ); \ 579 if ( firstarg != "_dummyvar" ) \ 580 parnext = StringProcessor(parstr).parseIdentifier( identnm ); \ 581 else if ( allowdummy ) \ 582 identnm = firstarg; \ 585 mParseErrStrm << "Missing identifier" << od_endl; \ 589 if ( parnext && *parnext == '[' ) \ 591 mParseErrStrm << "If an array variable a[i] was intended, " \ 592 << "use index substitution a_$i$ instead" << od_endl; \ 595 if ( !parnext || firstarg!=identnm ) \ 597 mParseErrStrm << "Invalid identifier: " << firstarg << od_endl; \ 600 if ( identifierMan().isPredefined(identnm) ) \ 602 mParseWarnStrm << "Reassigning a predefined identifier: " \ 603 << identnm << od_endl; \ 606 #define mParEscIdentPost( identnm, val, args, addesc ) \ 608 mSkipBlanks( args ); \ 609 identifierMan().set( identnm, val ); \ 610 BufferString valstr = identifierMan().getValue( identnm ); \ 611 StringProcessor strproc( valstr ); \ 613 strproc.addCmdFileEscapes(StringProcessor::sAllEscSymbols()); \ 615 identifierMan().set( identnm, strproc.buf() ); \ 616 const char* quote = strproc.convertToDouble() ? "" : "\""; \ 617 mTimeStrm << "Q&A: " << name() << (*args ? " " : "") << args \ 618 << " -->> " << identnm << " = " << quote << strproc.buf() \ 619 << quote << od_endl; \ 622 #define mParIdentPost( identnm, val, args ) \ 623 mParEscIdentPost( identnm, val, args, true ) 626 #define mParCase( parstr, parnext, casesensitive, optional ) \ 628 BufferString argword; \ 629 const char* parnext = getNextWord( parstr, argword.getCStr() ); \ 630 bool casesensitive = false; \ 632 if ( mMatchCI(argword,"Sensitive") ) \ 633 casesensitive = true; \ 634 else if ( !mMatchCI(argword,"Insensitive") ) \ 638 mParseErrStrm << "Case-argument not in {Sensitive, Insensitive}" \ 645 #define mParExtraFormInit( parstr, parnext, form, extrastr ) \ 647 BufferString formword; \ 648 FileMultiString fms( extrastr ); \ 649 const char* parnext = getNextWord( parstr, formword.getCStr() ); \ 650 FormTag form = NoForm; \ 651 if ( mMatchCI(formword,"Text") ) \ 653 if ( mMatchCI(formword,"Number") && fms.indexOf("Number")>=0 ) \ 655 if ( mMatchCI(formword,"Color") && fms.indexOf("Color")>=0 ) \ 657 if ( mMatchCI(formword,"Value") && fms.indexOf("Value")>=0 ) \ 659 if ( mMatchCI(formword,"Angle") && fms.indexOf("Angle")>=0 ) \ 661 if ( mMatchCI(formword,"Minimum") && fms.indexOf("Minimum")>=0 ) \ 663 if ( mMatchCI(formword,"Maximum") && fms.indexOf("Maximum")>=0 ) \ 665 if ( mMatchCI(formword,"Step") && fms.indexOf("Step")>=0 ) \ 667 if ( mMatchCI(formword,"Percentage") && fms.indexOf("Percentage")>=0 ) \ 669 if ( mMatchCI(formword,"FilePath") && fms.indexOf("FilePath")>=0 ) \ 671 if ( form == NoForm ) \ 674 #define mParFormInit( parstr, parnext, form ) \ 675 mParExtraFormInit( parstr, parnext, form, "Number" ) 677 #define mParForm( answer, form, text, other ) \ 679 BufferString answer; \ 680 if ( form==NoForm || form==Text ) \ 683 StringProcessor(answer).cleanUp(); \ 688 #define mParExtraForm( answer, form, extratag, extra ) \ 690 if ( form == extratag ) \ 694 #define mParFramed( parstr, parnext, framed ) \ 696 BufferString frameword; \ 697 const char* parnext = getNextWord( parstr, frameword.getCStr() ); \ 698 bool framed = true; \ 699 if ( mMatchCI(frameword,"Selected") ) \ 701 else if ( !mMatchCI(frameword,"Framed") ) \ 705 #define mParTail( partail ) \ 707 mSkipBlanks( partail ); \ 708 if ( (partail) && *(partail) ) \ 710 mParseErrStrm << "Command line ends with unexpected argument(s): " \ 711 << (partail) << od_endl; \ 718 #define mFindMenuItem( menupath, startmenu, curitem ) \ 720 const uiAction* curitem; \ 721 if ( !MenuTracer(startmenu,drv_).findItem(menupath,curitem) ) \ 724 #define mGetMenuInfo( menupath, allowroot, startmenu, mnuinfo ) \ 727 if ( !MenuTracer(startmenu,drv_).getMenuInfo(menupath,allowroot,mnuinfo) ) \ 733 #define mFindObjs3Base( objsfound, objcls1, objcls2, objcls3, keys, warn ) \ 735 ObjectSet<const CallBacker> objsfound; \ 737 ObjectFinder objfinder( *curWin(), isCaseSensitive() ); \ 738 if ( localSearchEnv() ) \ 739 objfinder.findNodes( localSearchEnv(), &objsfound ); \ 741 objfinder.findNodes( ObjectFinder::Everything, &objsfound ); \ 743 for ( int idx=objsfound.size()-1; idx>=0; idx-- ) \ 745 mDynamicCastGet( const objcls1*, uiobj1, objsfound[idx] ); \ 746 mDynamicCastGet( const objcls2*, uiobj2, objsfound[idx] ); \ 747 mDynamicCastGet( const objcls3*, uiobj3, objsfound[idx] ); \ 748 if ( !uiobj1 && !uiobj2 && !uiobj3 ) \ 749 objsfound.removeSingle( idx ); \ 753 const bool dowarn = (warn); \ 754 if ( !objfinder.selectNodes(objsfound, keys, &errkeyidx) && dowarn ) \ 756 mWinWarnStrm << "No object with key \"" << keys[errkeyidx] << "\" in " \ 757 << ( localSearchEnv() ? "local search environment" \ 758 : "current window" ) << od_endl; \ 762 #define mFindObjs2Base( objsfound, objcls1, objcls2, keys, warn ) \ 763 mFindObjs3Base( objsfound, objcls1, objcls1, objcls2, keys, warn ) 765 #define mFindObjsBase( objsfound, objclass, keys ) \ 766 mFindObjs2Base( objsfound, objclass, objclass, keys, true ) 768 #define mFindObjects3( objsfound, objcls1, objcls2, objcls3, keys, nrgrey ) \ 769 mFindObjs3Base( objsfound, objcls1, objcls2, objcls3, keys, true ); \ 770 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 772 #define mFindObjects2( objsfound, objcls1, objcls2, keys, nrgrey ) \ 773 mFindObjs2Base( objsfound, objcls1, objcls2, keys, true ); \ 774 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 776 #define mFindObjects( objsfound, objclass, keys, nrgrey ) \ 777 mFindObjsBase( objsfound, objclass, keys ); \ 778 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 780 #define mFindListTableObjs( objnm, objsfound, objclass, keys, nrgrey ) \ 782 mFindObjsBase( objsfound, objclass, keys ); \ 783 mFindObjs2Base( objsfound2, objclass, uiTreeView, keys, false ); \ 784 const bool uilviewonly = objsfound.isEmpty() && !objsfound2.isEmpty(); \ 785 const bool uilviewcloser = !objsfound.isEmpty() && \ 786 objsfound2.indexOf(objsfound[0])<0; \ 787 if ( uilviewonly || uilviewcloser ) \ 789 mWinWarnStrm << "Skipped " << objsfound2.size() << " tree(s) " \ 790 << (uilviewcloser ? "more closely" : "") \ 791 << " defined by key(s): \"" << keys.buf() \ 792 << "\". Possibly resembling a " << objnm \ 793 << ", but requiring a \"Tree\"-command" << od_endl; \ 795 const int nrgrey = ObjectFinder::deleteGreys(objsfound, greyOutsSkipped()); 800 #define mActivateInGUIThread( cb, busywait ) \ 802 uiMainWin* applwin = applWin(); \ 804 applwin->activateInGUIThread( cb, busywait ); \ 808 #define mActInGUIThread( typ, constructorcall, waitclear ) \ 810 typ##Activator* activator = new typ##constructorcall; \ 811 if ( prepareActivate(activator) ) \ 813 CallBack cb = mCB( activator, typ##Activator, actCB ); \ 814 mActivateInGUIThread( cb, false ); \ 818 waitForClearance(); \ 825 #define mActivate( acttyp, constructorcall ) \ 826 mActInGUIThread( acttyp, constructorcall, true ) 828 #define mActivateNoClearance( acttyp, constructorcall ) \ 829 mActInGUIThread( acttyp, constructorcall, false ) #define mEndDeclCmdClass
Definition: command.h:152
#define mExpClass(module)
Definition: commondefs.h:160
User interface main window.
Definition: uimainwin.h:36
To be able to send and/or receive CallBacks, inherit from this class.
Definition: callback.h:272
Command Drive
Definition: canvascommands.h:22
RecoveryTag
Definition: cmddriver.h:150
Definition: command.h:186
Definition: searchkey.h:57
Definition: cmddriver.h:153
Definition: cmddriver.h:100
CloseQDlgActivator(int retval)
Definition: command.h:210
The base class for most UI elements.
Definition: uiobj.h:38
virtual bool isLocalEnvCommand() const
Definition: command.h:52
virtual bool isVisualCommand() const
Definition: command.h:165
Definition: interpretexpr.h:24
#define mDefineFactory1ParamInClass(T, P, funcname)
Definition: factory.h:447
SeparString with backquotes as separators, use in most ascii files.
Definition: separstr.h:119
FormTag
Definition: command.h:58
FixedString Minimum()
Definition: keystrs.h:167
WinStateType
Definition: cmddriver.h:100
void actCB(CallBacker *cb)
Definition: command.h:200
OnErrorTag
Definition: cmddriver.h:133
virtual bool isUiObjChangeCommand() const
Definition: command.h:159
virtual bool isVisualCommand() const
Definition: command.h:53
virtual bool isOpenQDlgCommand() const
Definition: command.h:51
Definition: cmddriverbasics.h:197
virtual bool isLocalEnvCommand() const
Definition: command.h:158
uiMainWin & actmainwin_
Definition: command.h:203
Definition: command.h:194
#define mStartDeclCmdClassNoActNoEntry(mod, cmdkey, parentclass)
Definition: command.h:122
Command(CmdDriver &cmddrv)
Definition: command.h:43
Definition: identifierman.h:23
File pathname tools.
Definition: filepath.h:34
static void closeActiveModalQDlg(int retval)
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:40
int actretval_
Definition: command.h:216
virtual bool isLocalEnvCommand() const
Definition: command.h:164
virtual ~Command()
Definition: command.h:46
virtual bool isUiObjChangeCommand() const
Definition: command.h:54
Definition: command.h:207
CmdDriver & drv_
Definition: command.h:65
CloseActivator(const uiMainWin &uimw)
Definition: command.h:197
FixedString Maximum()
Definition: keystrs.h:165
InterceptMode
Definition: cmddriver.h:153
Definition: cmddriver.h:103
void actCB(CallBacker *cb)
Definition: command.h:213
virtual ~Activator()
Definition: command.h:189
Definition: uiaction.h:152