home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / powergui / cnr / treedet / partobj.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-29  |  6.6 KB  |  222 lines

  1. //************************************************************
  2. // Container - Combined Tree and Details View
  3. //
  4. // Copyright (C) 1994, Law, Leong, Love, Olson, Tsuji.
  5. // Copyright (c) 1997 John Wiley & Sons, Inc. 
  6. // All Rights Reserved.
  7. //************************************************************
  8. #include <icnrcol.hpp>
  9. #include <icnrctl.hpp>
  10. #include <iexcept.hpp>
  11. #include <iapp.hpp>
  12. #include "partobj.hpp"
  13.  
  14. const IString fgNoYes[2] = {"Yes", "No"};
  15. IString ExecutablePart::fgNameHeading("Name");
  16. IString ExecutablePart::fgTraceableHeading("Traceable");
  17. IString ExecutablePart::fgEnabledPartHeading("Enabled");
  18. IString ExecutablePart::fgGeneratesTraceHeading("Generates Trace");
  19. IString ExecutablePart::fgContainsTriggerHeading("Contains Trigger");
  20.  
  21. ExecutablePart ::  ExecutablePart   ( IString       name,
  22.                                       Boolean  isTraceAble,
  23.                                       Boolean  isEnabledPart,
  24.                                       Boolean  willGenerateTrace,
  25.                                       Boolean  hasTrigger)
  26.                          : IContainerObject(name),
  27.                            fTraceable(""),
  28.                            fEnabledPart(""),
  29.                            fGeneratesTrace(""),
  30.                            fContainsTrigger("")
  31.  
  32. {
  33. setTraceAble(isTraceAble);
  34. setEnabledPart(isEnabledPart);
  35. setGenerateTrace(willGenerateTrace);
  36. setTrigger(hasTrigger);
  37. enableDataUpdate();
  38. }
  39.  
  40. ExecutablePart& ExecutablePart :: setTraceAble     ( Boolean traceAble )
  41. {
  42.    this->fTraceable = fgNoYes[traceAble];
  43.    return *this;
  44. }
  45.  
  46. ExecutablePart& ExecutablePart :: setEnabledPart   ( Boolean enabledPart )
  47. {
  48.    this->fEnabledPart = fgNoYes[enabledPart];
  49.    return *this;
  50. }
  51.  
  52. ExecutablePart& ExecutablePart :: setGenerateTrace ( Boolean generateTrace )
  53. {
  54.    this->fGeneratesTrace = fgNoYes[generateTrace];
  55.    return *this;
  56. }
  57.  
  58. ExecutablePart& ExecutablePart :: setTrigger       ( Boolean containsTrigger)
  59. {
  60.    this->fContainsTrigger = fgNoYes[containsTrigger];
  61.    return *this;
  62. }
  63.  
  64. Boolean ExecutablePart :: isTraceAble ( ) const
  65. {
  66.   if (this->fTraceable == fgNoYes[true])
  67.      return true;
  68.   else
  69.      return false;
  70. }
  71.  
  72. Boolean ExecutablePart :: isEnabledPart ( ) const
  73. {
  74.   if (this->fEnabledPart == fgNoYes[true])
  75.      return true;
  76.   else
  77.      return false;
  78. }
  79.  
  80. Boolean ExecutablePart :: willGenerateTrace ( ) const
  81. {
  82.   if (this->fGeneratesTrace == fgNoYes[true])
  83.      return true;
  84.   else
  85.      return false;
  86. }
  87.  
  88. Boolean ExecutablePart :: hasTrigger ( ) const
  89. {
  90.   if (this->fContainsTrigger == fgNoYes[true])
  91.      return true;
  92.   else
  93.      return false;
  94. }
  95.  
  96. void ExecutablePart::setHeadingText( const IString& headingText, 
  97.                                       Column         column)
  98. {
  99.   switch (column) {
  100.     case   ExecutablePart::kNameColumn              :
  101.       fgNameHeading = headingText;
  102.       break;
  103.     case   ExecutablePart::kTraceableColumn         :
  104.       fgTraceableHeading = headingText;
  105.       break;
  106.     case    ExecutablePart::kEnabledPartColumn      :
  107.       fgEnabledPartHeading = headingText;
  108.       break;
  109.     case    ExecutablePart::kGeneratesTraceColumn   :
  110.       fgGeneratesTraceHeading = headingText;
  111.       break;
  112.     case    ExecutablePart::kContainsTriggerColumn  :
  113.       fgContainsTriggerHeading = headingText;
  114.       break;
  115.     default:
  116.       break;
  117.   } /* endswitch */
  118. }
  119. IString ExecutablePart::headingText( Column         column)
  120. {
  121.   IString heading;
  122.   switch (column) {
  123.     case    ExecutablePart::kNameColumn            :
  124.       heading = fgNameHeading;
  125.       break;
  126.     case    ExecutablePart::kTraceableColumn       :
  127.       heading = fgTraceableHeading;
  128.       break;
  129.     case    ExecutablePart::kEnabledPartColumn     :
  130.       heading = fgEnabledPartHeading;
  131.       break;
  132.     case    ExecutablePart::kGeneratesTraceColumn  :
  133.       heading = fgGeneratesTraceHeading;
  134.       break;
  135.     case    ExecutablePart::kContainsTriggerColumn :
  136.       heading = fgContainsTriggerHeading;
  137.       break;
  138.     default:
  139.       break;
  140.   } /* endswitch */
  141.  
  142.   return heading;
  143. }
  144.  
  145.  
  146. void ExecutablePart::createAllColumnsFor ( IContainerControl&  container)
  147. {
  148.  createAndOrphanColumnFor( container, kNameColumn);
  149.  createAndOrphanColumnFor( container, kTraceableColumn);
  150.  createAndOrphanColumnFor( container, kEnabledPartColumn);
  151.  createAndOrphanColumnFor( container, kGeneratesTraceColumn);
  152.  createAndOrphanColumnFor( container, kContainsTriggerColumn);
  153.  
  154.  container.setDeleteColumnsOnClose();
  155. }
  156.  
  157. IContainerColumn* ExecutablePart::createAndOrphanColumnFor ( 
  158.                              IContainerControl& container,
  159.                              Column             columnType)
  160. {
  161.   // Setup a default Column.
  162.   IContainerColumn* newColumn = 0;
  163.   IString headingText;
  164.   Boolean editable = false;
  165.   const unsigned long invalidOffset = (unsigned long)-1;
  166.   unsigned long offset = invalidOffset;
  167.   IContainerColumn::HeadingStyle headingStyle = IContainerColumn::defaultHeadingStyle();
  168.   IContainerColumn::DataStyle dataStyle = IContainerColumn::defaultDataStyle();
  169.  
  170.   if (columnType == ExecutablePart::kNameColumn)
  171.   {
  172.     newColumn = new IContainerColumn(IContainerColumn::isIconViewText,
  173.                                      headingStyle,
  174.                                      dataStyle);
  175.     headingText = fgNameHeading;
  176.     editable = true;
  177.   }
  178.   else if (columnType == ExecutablePart::kTraceableColumn)
  179.   {
  180.     offset = offsetof(ExecutablePart, fTraceable);
  181.     headingText = fgTraceableHeading;
  182.     editable = true;
  183.   }
  184.   else if (columnType == ExecutablePart::kEnabledPartColumn)
  185.   {
  186.     offset = offsetof(ExecutablePart, fEnabledPart);
  187.     headingText = fgEnabledPartHeading;
  188.     editable = true;
  189.   }
  190.   else if (columnType == ExecutablePart::kGeneratesTraceColumn)
  191.   {
  192.     offset = offsetof(ExecutablePart, fGeneratesTrace);
  193.     headingText = fgGeneratesTraceHeading;
  194.     editable = true;
  195.   }
  196.   else if (columnType == ExecutablePart::kContainsTriggerColumn)
  197.   {
  198.     offset = offsetof(ExecutablePart, fContainsTrigger);
  199.     headingText = fgContainsTriggerHeading;
  200.     editable = true;
  201.   }
  202.   
  203.   if (newColumn == 0 && offset < invalidOffset )
  204.     newColumn = new IContainerColumn(offset,
  205.                                      headingStyle,
  206.                                      dataStyle);
  207.   newColumn->showSeparators(IContainerColumn::horizontalSeparator);
  208.  
  209.   // Insure that a new column has been created.
  210.   IASSERTSTATE(newColumn != 0)
  211.  
  212.   newColumn->setHeadingText(headingText);
  213.  
  214.   if (editable == true) 
  215.     newColumn->enableDataUpdate();
  216.  
  217.   // Add the column to the container.
  218.   container.addColumn( newColumn);
  219.  
  220.   return newColumn;
  221. }
  222.