home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 March - Disc 1 / Macworld (1999-03) (Disk 1).dmg / Shareware World / Info / For Developers / AM #11.1 / INTO Examples / PowerPlant / Everything / CModelessCheckboxes.cp < prev    next >
Encoding:
Text File  |  1998-12-22  |  9.2 KB  |  463 lines  |  [TEXT/CWIE]

  1. // CModelessCheckboxes.cp -- dialog methods
  2.  
  3. #include "CModelessCheckboxes.h"
  4.  
  5. #include <UEnvironment.h>
  6. #include <UReanimator.h>
  7. #include <URegistrar.h>
  8. #include <LStream.h>
  9. #include <LTabGroup.h>
  10. #include <LCheckBox.h>
  11. #include <LAMControlImp.h>
  12. #include <LGACheckboxImp.h>
  13. #include <LDisclosureTriangle.h>
  14. #include <LGADisclosureTriangleImp.h>
  15. #include <LStaticText.h>
  16. #include <LAMStaticTextImp.h>
  17. #include <LGAStaticTextImp.h>
  18. #include <LTextGroupBox.h>
  19. #include <LAMControlViewImp.h>
  20. #include <LGATextGroupBoxImp.h>
  21. #include <CustomControls.h>
  22. #include <LToggleButton.h>
  23. #include <LBevelButton.h>
  24. #include <LAMBevelButtonImp.h>
  25. #include <LGABevelButtonImp.h>
  26. #include <CTextUtils.h>
  27.  
  28. #include "DModelessCheckboxesData.h"
  29. #include "EverythingCmds.h"
  30. #include <PP_Messages.h>
  31.  
  32. const MessageT    msgStandard    = 'Stad';
  33. const MessageT    msgXx    = 'Xx  ';
  34. const MessageT    msgLR    = 'LR  ';
  35. const MessageT    msgLR2    = 'LR2 ';
  36. const MessageT    msgLR3    = 'LR3 ';
  37. const MessageT    msgLR4    = 'LR4 ';
  38. const MessageT    msgCheckbox    = 'Chex';
  39. const MessageT    msgCheckbox2    = 'Che2';
  40. const MessageT    msgNext    = 'Next';
  41. const MessageT    msgNext2    = 'Nex2';
  42.  
  43. #define PPob_ModelessCheckboxesID    215
  44. #define RidL_ModelessCheckboxesID    215
  45.  
  46. Boolean        CModelessCheckboxes::sIsRegistered = false;
  47.  
  48. //----------
  49. CModelessCheckboxes*        CModelessCheckboxes::CreateModelessCheckboxes (
  50.     LCommander*        inSuperCommander,
  51.     CommandT        inCommand,
  52.     DModelessCheckboxesData*        inData)
  53. {
  54.     if (!sIsRegistered) {
  55.         RegisterClass ();
  56.     }
  57.     CModelessCheckboxes*        dlog;
  58.     dlog = ((CModelessCheckboxes *)LWindow::CreateWindow(PPob_ModelessCheckboxesID, inSuperCommander));
  59.     dlog->mCommand = inCommand;
  60.     dlog->SetFromData (inData);
  61.  
  62.     return dlog;
  63. }
  64.  
  65. //----------
  66. #define    RegisterClasses(AbstractClass,AMImpClass,GAImpClass)    \
  67.     RegisterClass_(AbstractClass);    \
  68.     if (useAppearance) {    \
  69.         RegisterClassID_(AMImpClass, AbstractClass::imp_class_ID);    \
  70.     } else {    \
  71.         RegisterClassID_(GAImpClass, AbstractClass::imp_class_ID);    \
  72.     }
  73.  
  74. //----------
  75. void    CModelessCheckboxes::RegisterClass ()
  76. {
  77.     Boolean        useAppearance = UEnvironment::HasFeature (env_HasAppearance);
  78.  
  79.     RegisterClass_(CModelessCheckboxes);
  80.  
  81.     // register the pane classes we use
  82.     RegisterClasses (LCheckBox, LAMControlImp, LGACheckBoxImp);
  83.     RegisterClasses (LDisclosureTriangle, LAMControlImp, LGADisclosureTriangleImp);
  84.     RegisterClasses (LStaticText, LAMStaticTextImp, LGAStaticTextImp);
  85.     RegisterClasses (LTextGroupBox, LAMControlViewImp, LGATextGroupBoxImp);
  86.     RegisterClasses (CCheckBox, CustomControlImp, CustomControlImp);
  87.     RegisterClass_(LToggleButton);
  88.     RegisterClasses (LBevelButton, LAMBevelButtonImp, LGABevelButtonImp);
  89.  
  90.     sIsRegistered = true;
  91. }
  92.  
  93. //----------
  94. CModelessCheckboxes::CModelessCheckboxes (
  95.     LStream*    inStream)
  96.     : LGADialog (inStream)
  97. {
  98.     mData = nil;
  99. }
  100.  
  101. //----------
  102. CModelessCheckboxes::~CModelessCheckboxes()
  103. {
  104.     delete mData;
  105. }
  106.  
  107. //----------
  108. //    This member function gets called once the containment hierarchy that contains
  109. //    this pane has been built. It gives us a chance to get data members for
  110. //    interesting subviews, and to do other operations now that our subviews exist.
  111. void    CModelessCheckboxes::FinishCreateSelf()
  112. {
  113.     LGADialog::FinishCreateSelf();
  114.  
  115.     mStandardCheck = (LCheckBox*) FindPaneByID ('Stad');
  116.  
  117.     mXxCheck = (LDisclosureTriangle*) FindPaneByID ('Xx  ');
  118.  
  119.     mLRCheck = (CCheckBox*) FindPaneByID ('LR  ');
  120.  
  121.     mLR2Check = (CCheckBox*) FindPaneByID ('LR2 ');
  122.  
  123.     mLR3Check = (LToggleButton*) FindPaneByID ('LR3 ');
  124.  
  125.     mLR4Check = (LToggleButton*) FindPaneByID ('LR4 ');
  126.  
  127.     mCheckboxCheck = (CCheckBox*) FindPaneByID ('Chex');
  128.  
  129.     mCheckbox2Check = (LBevelButton*) FindPaneByID ('Che2');
  130.  
  131.     mNextCheck = (LBevelButton*) FindPaneByID ('Next');
  132.  
  133.     mNext2Check = (LBevelButton*) FindPaneByID ('Nex2');
  134.  
  135.  
  136.     UReanimator::LinkListenerToControls(this, this, RidL_ModelessCheckboxesID);
  137.         // the purpose is to "connect" self to whatever controls
  138.         // that we want to "listen" to
  139.  
  140. // any additional initialization for your dialog:
  141.  
  142. }
  143.  
  144. //----------
  145. void    CModelessCheckboxes::SetFromData (
  146.     DModelessCheckboxesData*        inData)
  147. {
  148.     mData = inData;
  149.     mData->AddListener (this);
  150.  
  151.     mStandardCheck->SetValue (mData->GetStandard7 ());
  152.     mXxCheck->SetValue (mData->GetXx3 ());
  153.     mLRCheck->SetValue (mData->GetLR9 ());
  154.     mLR2Check->SetValue (mData->GetLR10 ());
  155.     mLR3Check->SetValue (mData->GetLR11 ());
  156.     mLR4Check->SetValue (mData->GetLR12 ());
  157.     mCheckboxCheck->SetValue (mData->GetCheckbox5 ());
  158.     mCheckbox2Check->SetValue (mData->GetCheckbox6 ());
  159.     mNextCheck->SetValue (mData->GetNext5 ());
  160.     mNext2Check->SetValue (mData->GetNext6 ());
  161. }
  162.  
  163. //----------
  164. DModelessCheckboxesData*        CModelessCheckboxes::GetData ()
  165. {
  166.  
  167.     return mData;
  168. }
  169.  
  170. //----------
  171. void    CModelessCheckboxes::DataChanged (
  172.     long        inDataID)
  173. {
  174.     StopListening ();
  175.  
  176.     if (inDataID == idStandard7) {
  177.         mStandardCheck->SetValue (mData->GetStandard7 ());
  178.     }
  179.     if (inDataID == idXx3) {
  180.         mXxCheck->SetValue (mData->GetXx3 ());
  181.     }
  182.     if (inDataID == idLR9) {
  183.         mLRCheck->SetValue (mData->GetLR9 ());
  184.     }
  185.     if (inDataID == idLR10) {
  186.         mLR2Check->SetValue (mData->GetLR10 ());
  187.     }
  188.     if (inDataID == idLR11) {
  189.         mLR3Check->SetValue (mData->GetLR11 ());
  190.     }
  191.     if (inDataID == idLR12) {
  192.         mLR4Check->SetValue (mData->GetLR12 ());
  193.     }
  194.     if (inDataID == idCheckbox5) {
  195.         mCheckboxCheck->SetValue (mData->GetCheckbox5 ());
  196.     }
  197.     if (inDataID == idCheckbox6) {
  198.         mCheckbox2Check->SetValue (mData->GetCheckbox6 ());
  199.     }
  200.     if (inDataID == idNext5) {
  201.         mNextCheck->SetValue (mData->GetNext5 ());
  202.     }
  203.     if (inDataID == idNext6) {
  204.         mNext2Check->SetValue (mData->GetNext6 ());
  205.     }
  206.  
  207.     StartListening ();
  208. }
  209.  
  210. //----------
  211. void    CModelessCheckboxes::ListenToMessage (
  212.     MessageT    inMessage,
  213.     void        *ioParam)
  214. {
  215.     switch (inMessage) {
  216.     case msg_OK:
  217.             GetSuperCommander()->ProcessCommand(-mCommand, this);
  218.         break;
  219.  
  220.     case msg_Cancel:
  221.             DoClose();
  222.         break;
  223.  
  224.     case msgDataChanged:
  225.             DataChanged ((long)ioParam);
  226.         break;
  227.  
  228.     case msgStandard:
  229.             mData->SetStandard7 (mStandardCheck->GetValue ());
  230.         break;
  231.  
  232.     case msgXx:
  233.             mData->SetXx3 (mXxCheck->GetValue ());
  234.         break;
  235.  
  236.     case msgLR:
  237.             mData->SetLR9 (mLRCheck->GetValue ());
  238.         break;
  239.  
  240.     case msgLR2:
  241.             mData->SetLR10 (mLR2Check->GetValue ());
  242.         break;
  243.  
  244.     case msgLR3:
  245.             mData->SetLR11 (mLR3Check->GetValue ());
  246.         break;
  247.  
  248.     case msgLR4:
  249.             mData->SetLR12 (mLR4Check->GetValue ());
  250.         break;
  251.  
  252.     case msgCheckbox:
  253.             mData->SetCheckbox5 (mCheckboxCheck->GetValue ());
  254.         break;
  255.  
  256.     case msgCheckbox2:
  257.             mData->SetCheckbox6 (mCheckbox2Check->GetValue ());
  258.         break;
  259.  
  260.     case msgNext:
  261.             mData->SetNext5 (mNextCheck->GetValue ());
  262.         break;
  263.  
  264.     case msgNext2:
  265.             mData->SetNext6 (mNext2Check->GetValue ());
  266.         break;
  267.  
  268.  
  269.     default:
  270.           ; // do something
  271.         break;
  272.     }
  273. }
  274.  
  275. //----------
  276. Boolean        CModelessCheckboxes::ObeyCommand (
  277.     CommandT    inCommand,
  278.     void*        ioParam)
  279. {
  280.     Boolean        cmdHandled = true;
  281.  
  282.     if (inCommand < 0) {
  283.         // modal dialog has finished
  284.  
  285.         switch (-inCommand) {
  286.         }
  287.  
  288.     } else {
  289.         switch (inCommand) {
  290.  
  291.         default:
  292.                 cmdHandled = LGADialog::ObeyCommand(inCommand, ioParam);
  293.             break;
  294.         }
  295.     }
  296.  
  297.     return cmdHandled;
  298. }
  299.  
  300. //----------
  301. void    CModelessCheckboxes::FindCommandStatus (
  302.     CommandT    inCommand,
  303.     Boolean        &outEnabled,
  304.     Boolean        &outUsesMark,
  305.     Char16        &outMark,
  306.     Str255        outName)
  307. {
  308.     outUsesMark = false;
  309.  
  310.     switch (inCommand) {
  311.  
  312.     // +++ Add cases here for the commands you handle
  313.  
  314.     default:
  315.             LGADialog::FindCommandStatus(inCommand, outEnabled,
  316.                                             outUsesMark, outMark, outName);
  317.         break;
  318.     }
  319. }
  320.  
  321. // following functions will be obsoleted
  322. // retained only for backwards compatibility
  323. //----------
  324. Boolean
  325. CModelessCheckboxes::GetStandardChoice()
  326. {
  327.     return mStandardCheck->GetValue();
  328. }
  329.  
  330. void
  331. CModelessCheckboxes::SetStandardChoice (
  332.     Boolean        inChoice)
  333. {
  334.     mStandardCheck->SetValue (inChoice);
  335. }
  336.  
  337. //----------
  338. Boolean
  339. CModelessCheckboxes::GetXxChoice()
  340. {
  341.     return mXxCheck->GetValue();
  342. }
  343.  
  344. void
  345. CModelessCheckboxes::SetXxChoice (
  346.     Boolean        inChoice)
  347. {
  348.     mXxCheck->SetValue (inChoice);
  349. }
  350.  
  351. //----------
  352. Boolean
  353. CModelessCheckboxes::GetLRChoice()
  354. {
  355.     return mLRCheck->GetValue();
  356. }
  357.  
  358. void
  359. CModelessCheckboxes::SetLRChoice (
  360.     Boolean        inChoice)
  361. {
  362.     mLRCheck->SetValue (inChoice);
  363. }
  364.  
  365. //----------
  366. Boolean
  367. CModelessCheckboxes::GetLR2Choice()
  368. {
  369.     return mLR2Check->GetValue();
  370. }
  371.  
  372. void
  373. CModelessCheckboxes::SetLR2Choice (
  374.     Boolean        inChoice)
  375. {
  376.     mLR2Check->SetValue (inChoice);
  377. }
  378.  
  379. //----------
  380. Boolean
  381. CModelessCheckboxes::GetLR3Choice()
  382. {
  383.     return mLR3Check->GetValue();
  384. }
  385.  
  386. void
  387. CModelessCheckboxes::SetLR3Choice (
  388.     Boolean        inChoice)
  389. {
  390.     mLR3Check->SetValue (inChoice);
  391. }
  392.  
  393. //----------
  394. Boolean
  395. CModelessCheckboxes::GetLR4Choice()
  396. {
  397.     return mLR4Check->GetValue();
  398. }
  399.  
  400. void
  401. CModelessCheckboxes::SetLR4Choice (
  402.     Boolean        inChoice)
  403. {
  404.     mLR4Check->SetValue (inChoice);
  405. }
  406.  
  407. //----------
  408. Boolean
  409. CModelessCheckboxes::GetCheckboxChoice()
  410. {
  411.     return mCheckboxCheck->GetValue();
  412. }
  413.  
  414. void
  415. CModelessCheckboxes::SetCheckboxChoice (
  416.     Boolean        inChoice)
  417. {
  418.     mCheckboxCheck->SetValue (inChoice);
  419. }
  420.  
  421. //----------
  422. Boolean
  423. CModelessCheckboxes::GetCheckbox2Choice()
  424. {
  425.     return mCheckbox2Check->GetValue();
  426. }
  427.  
  428. void
  429. CModelessCheckboxes::SetCheckbox2Choice (
  430.     Boolean        inChoice)
  431. {
  432.     mCheckbox2Check->SetValue (inChoice);
  433. }
  434.  
  435. //----------
  436. Boolean
  437. CModelessCheckboxes::GetNextChoice()
  438. {
  439.     return mNextCheck->GetValue();
  440. }
  441.  
  442. void
  443. CModelessCheckboxes::SetNextChoice (
  444.     Boolean        inChoice)
  445. {
  446.     mNextCheck->SetValue (inChoice);
  447. }
  448.  
  449. //----------
  450. Boolean
  451. CModelessCheckboxes::GetNext2Choice()
  452. {
  453.     return mNext2Check->GetValue();
  454. }
  455.  
  456. void
  457. CModelessCheckboxes::SetNext2Choice (
  458.     Boolean        inChoice)
  459. {
  460.     mNext2Check->SetValue (inChoice);
  461. }
  462.  
  463.