Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.8.1, 0.8.2, and 0.8.3

shellext: more complete implementation of GetCommandString

Changeset 8fccf0215997

Parent 8341bdedb12c

by Adrian Buehlmann

Changes to one file · Browse files at 8fccf0215997 Showing diff from parent 8341bdedb12c Diff from another changeset...

 
18
19
20
 
 
 
21
22
23
 
450
451
452
 
 
 
 
453
454
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
456
 
457
458
459
460
461
462
463
464
 
465
466
467
468
469
470
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
472
473
474
475
476
 
 
 
477
478
479
 
496
497
498
 
 
 
499
500
501
 
503
504
505
506
 
507
508
509
 
18
19
20
21
22
23
24
25
26
 
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
 
484
485
 
 
 
 
 
 
 
486
487
488
489
490
 
 
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
 
 
520
521
522
523
524
525
 
542
543
544
545
546
547
548
549
550
 
552
553
554
 
555
556
557
558
@@ -18,6 +18,9 @@
  UINT idCmd;  };   +// According to http://msdn.microsoft.com/en-us/library/bb776094%28VS.85%29.aspx +// the help texts for the commands should be reasonably short (under 40 characters) +  MenuDescription menuDescList[] =  {   {"commit", "Commit...", @@ -450,30 +453,73 @@
  UINT_PTR idCmd, UINT uFlags, UINT FAR *reserved,   LPSTR pszName, UINT cchMax)  { + // see http://msdn.microsoft.com/en-us/library/bb776094%28VS.85%29.aspx + + HRESULT res = S_FALSE; +   const char *psz = "";   + std::string sflags = "?"; + switch (uFlags) + { + case GCS_HELPTEXTW: + sflags = "GCS_HELPTEXTW"; break; + case GCS_HELPTEXTA: + sflags = "GCS_HELPTEXTA"; break; + case GCS_VALIDATEW: + sflags = "GCS_VALIDATEW"; break; + case GCS_VALIDATEA: + sflags = "GCS_VALIDATEA"; break; + case GCS_VERBW: + sflags = "GCS_VERBW"; break; + case GCS_VERBA: + sflags = "GCS_VERBA"; break; + } + + TDEBUG_TRACE( + "CShellExt::GetCommandString: idCmd = " << idCmd + << ", uFlags = " << uFlags << " (" << sflags << ")"); +   MenuIdCmdMap::iterator iter = MenuIdMap.find(static_cast<UINT>(idCmd)); - if (iter != MenuIdMap.end()) + if (iter == MenuIdMap.end())   { - TDEBUG_TRACE( - "CShellExt::GetCommandString: idCmd = " << idCmd - << ", uFlags = " << uFlags - << ", name = " << iter->second.name - << ", helpText = " << iter->second.helpText - ); - psz = iter->second.helpText.c_str(); + TDEBUG_TRACE("CShellExt::GetCommandString: idCmd not found");   }   else   {   TDEBUG_TRACE( - "CShellExt::GetCommandString: idCmd = " << idCmd - << ", uFlags = " << uFlags << " -> not found"); + "CShellExt::GetCommandString: name = \"" << iter->second.name << "\""); + + if (uFlags == GCS_HELPTEXTW || uFlags == GCS_HELPTEXTA) + { + psz = iter->second.helpText.c_str(); + res = S_OK; + + size_t size = iter->second.helpText.size(); + if (size >= 40) + { + TDEBUG_TRACE( + "CShellExt::GetCommandString: warning:" + << " length of help text is " << size + << ", which is not reasonably short (<40)"); + } + } + else if (uFlags == GCS_VERBW || uFlags == GCS_VERBA) + { + psz = iter->second.name.c_str(); + res = S_OK; + } + else if (uFlags == GCS_VALIDATEW || uFlags == GCS_VALIDATEA) + { + res = S_OK; + }   }     if (cchMax < 1)   { - TDEBUG_TRACE("CShellExt::GetCommandString: cchMax = " << cchMax); - return NOERROR; + TDEBUG_TRACE("CShellExt::GetCommandString: cchMax = " + << cchMax << " (is <1)"); + return res;   }     size_t size = 0; @@ -496,6 +542,9 @@
  size = strlen(psz);   }   + TDEBUG_TRACE("CShellExt::GetCommandString: res = " << res + << ", pszName = \"" << psz << "\""); +   if (size > cchMax-1)   {   TDEBUG_TRACE( @@ -503,7 +552,7 @@
  << size << ", cchMax = " << cchMax);   }   - return NOERROR; + return res;  }