home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / macintosh-c / macc-carbon-demos-nonbinhex.sit / macc-carbon-demos-nonbinhex / chap14-demo / Sliders.c < prev    next >
Text File  |  2001-05-19  |  7KB  |  205 lines

  1. // *******************************************************************************************
  2. // Sliders.c
  3. // *******************************************************************************************
  4.  
  5. // ………………………………………………………………………………………………………………………………………………………………………………………………………………………… includes
  6.  
  7. #include "Controls3.h"
  8.  
  9. // …………………………………………………………………………………………………………………………………………………………………………………………………… global variables
  10.  
  11. extern Boolean    gRunningOnX;
  12.  
  13. // …………………………………………………………………………………………………………………………………………………………………………………………………… global variables
  14.  
  15. ControlActionUPP                        gSliderActionFunction1UPP;
  16. ControlActionUPP                        gSliderActionFunction2UPP;
  17. ControlUserPaneDrawUPP            gUserPaneDrawFunctionUPP;
  18. ControlUserPaneActivateUPP    gUserPaneActivateFunctionUPP;
  19. ControlRef                                    gSlider1Ref;
  20. ControlRef                                    gSlider2Ref;
  21. ControlRef                                    gSlider3Ref;
  22. ControlRef                                    gSlider4Ref;
  23. ControlRef                                    gSlider5Ref;
  24. ControlRef                                    gSlider6Ref;
  25. RGBColor                                        gRedColour;
  26. RGBColor                                        gBlueColour;
  27. RGBColor                                        gBlackColour        = { 0x0000, 0x0000, 0x0000 };
  28. Boolean                                            gDrawActivated    = true;
  29. extern Boolean                            gSlidersActive;
  30.  
  31. // ************************************************************************** doSliderUserPane
  32.  
  33. void  doSliderUserPane(void)
  34. {
  35.     DialogRef                dialogRef;
  36.     ModalFilterUPP    eventFilterUPP;
  37.     ControlRef            controlRef;
  38.     SInt16                    itemHit;
  39.  
  40.     if(FrontNonFloatingWindow())
  41.         doActivateWindow(FrontNonFloatingWindow(),false);
  42.  
  43.     if(!(dialogRef = GetNewDialog(rSlidersDialog,NULL,(WindowRef) -1)))
  44.         ExitToShell();
  45.  
  46.     // ………………………………………………………………………………………………………………………………………………………………………………………… set default button
  47.  
  48.     SetDialogDefaultItem(dialogRef,kStdOkItemIndex);
  49.  
  50.     // ………………………………………………………………………… create universal procedure pointer for event filter function
  51.  
  52.     eventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
  53.  
  54.     // ………………………………………………………………… create universal procedure pointers for slider action functions
  55.  
  56.     gSliderActionFunction1UPP = NewControlActionUPP((ControlActionProcPtr) 
  57.                                                             sliderActionFunction1);
  58.     gSliderActionFunction2UPP = NewControlActionUPP((ControlActionProcPtr)
  59.                                                             sliderActionFunction2);
  60.  
  61.     // ………… create universal procedure pointers for user pane functions, set user pane functions
  62.  
  63.     gUserPaneDrawFunctionUPP = NewControlUserPaneDrawUPP((ControlUserPaneDrawProcPtr)
  64.                                                                                                              userPaneDrawFunction);
  65.     GetDialogItemAsControl(dialogRef,iUserPane1,&controlRef);
  66.     SetControlData(controlRef,kControlEntireControl,kControlUserPaneDrawProcTag, 
  67.                                  sizeof(gUserPaneDrawFunctionUPP),&gUserPaneDrawFunctionUPP);
  68.  
  69.     gUserPaneActivateFunctionUPP = NewControlUserPaneActivateUPP((ControlUserPaneActivateProcPtr)
  70.                                                                                                                              userPaneActivateFunction);
  71.     GetDialogItemAsControl(dialogRef,iUserPane1,&controlRef);
  72.     SetControlData(controlRef,kControlEntireControl,kControlUserPaneActivateProcTag, 
  73.                                  sizeof(gUserPaneActivateFunctionUPP),&gUserPaneActivateFunctionUPP);
  74.  
  75.     // …………………………… get control handles of, and draw initial control values for, top four sliders
  76.     
  77.     GetDialogItemAsControl(dialogRef,iSlider1,&gSlider1Ref);
  78.     doDrawSliderValues(dialogRef,gSlider1Ref);
  79.     GetDialogItemAsControl(dialogRef,iSlider2,&gSlider2Ref);
  80.     doDrawSliderValues(dialogRef,gSlider2Ref);
  81.     GetDialogItemAsControl(dialogRef,iSlider3,&gSlider3Ref);
  82.     doDrawSliderValues(dialogRef,gSlider3Ref);
  83.     GetDialogItemAsControl(dialogRef,iSlider4,&gSlider4Ref);
  84.     doDrawSliderValues(dialogRef,gSlider4Ref);
  85.  
  86.     // …………………………………………………………… get control handles and values for bottom two sliders, set colour
  87.  
  88.     GetDialogItemAsControl(dialogRef,iSlider5,&gSlider5Ref);
  89.     gRedColour.red = 2 * GetControlValue(gSlider5Ref);
  90.     GetDialogItemAsControl(dialogRef,iSlider6,&gSlider6Ref);
  91.     gBlueColour.blue = 2 * GetControlValue(gSlider5Ref);
  92.  
  93.     // ………………………………………………………………………………………… set help tags, show dialog, and enter ModalDialog loop
  94.  
  95.     if(gRunningOnX)
  96.         helpTagsSliders(dialogRef);
  97.  
  98.     ShowWindow(GetDialogWindow(dialogRef));
  99.  
  100.     do
  101.     {
  102.         ModalDialog(eventFilterUPP,&itemHit);
  103.     } while(itemHit != kStdOkItemIndex);
  104.  
  105.     // …………………………………………………………………………………………………………………………………………………………………………………………………………………… clean up
  106.  
  107.     DisposeDialog(dialogRef);
  108.     DisposeModalFilterUPP(eventFilterUPP);
  109.     DisposeControlActionUPP(gSliderActionFunction1UPP);
  110.     DisposeControlActionUPP(gSliderActionFunction2UPP);
  111.     DisposeControlUserPaneDrawUPP(gUserPaneDrawFunctionUPP);
  112.     DisposeControlUserPaneActivateUPP(gUserPaneActivateFunctionUPP);
  113.     gSlidersActive = false;
  114. }
  115.  
  116. // ************************************************************************ doDrawSliderValues
  117.  
  118. void  doDrawSliderValues(DialogRef dialogRef,ControlRef controlRef)
  119. {
  120.     Str255    theString;
  121.     SInt16    staticTextItem;
  122.  
  123.     NumToString((SInt32) GetControlValue(controlRef),theString);
  124.  
  125.     if(controlRef == gSlider1Ref)
  126.         staticTextItem = iSlider1StaticText;
  127.     else if(controlRef == gSlider2Ref)
  128.         staticTextItem = iSlider2StaticText;
  129.     else if(controlRef == gSlider3Ref)
  130.         staticTextItem = iSlider3StaticText;
  131.     else if(controlRef == gSlider4Ref)
  132.         staticTextItem = iSlider4StaticText;
  133.  
  134.     GetDialogItemAsControl(dialogRef,staticTextItem,&controlRef);
  135.     SetControlData(controlRef,kControlEntireControl,kControlStaticTextTextTag,theString[0],
  136.                                  &theString[1]);
  137.     Draw1Control(controlRef);
  138. }
  139.  
  140. // ********************************************************************** userPaneDrawFunction
  141.  
  142. void  userPaneDrawFunction(ControlRef theControl,SInt16 thePart)
  143. {
  144.     Rect    theRect;
  145.  
  146.     SetRect(&theRect,218,175,238,195);
  147.     DrawThemePlacard(&theRect,gDrawActivated);
  148.     InsetRect(&theRect,2,2);
  149.  
  150.     if(gDrawActivated)
  151.     {
  152.         RGBForeColor(&gRedColour);
  153.         PaintRect(&theRect);
  154.     }
  155.  
  156.     SetRect(&theRect,218,196,238,216);
  157.     DrawThemePlacard(&theRect,gDrawActivated);
  158.     InsetRect(&theRect,2,2);
  159.  
  160.     if(gDrawActivated)
  161.     {
  162.         RGBForeColor(&gBlueColour);
  163.         PaintRect(&theRect);
  164.     }
  165.  
  166.  }
  167.  
  168. // ****************************************************************** userPaneActivateFunction
  169.  
  170. void  userPaneActivateFunction(ControlRef control,Boolean activating)
  171. {
  172.     if(activating)
  173.         gDrawActivated = true;
  174.     else
  175.         gDrawActivated = false;
  176. }
  177.  
  178. // *************************************************************************** helpTagsSliders
  179.  
  180. void  helpTagsSliders(DialogRef dialogRef)
  181. {
  182.     HMHelpContentRec    helpContent;
  183.     SInt16                        a;
  184.     static SInt16            itemNumber[7] = { 2,3,4,5,17,19,18 };
  185.     ControlRef                controlRef;
  186.  
  187.     memset(&helpContent,0,sizeof(helpContent));
  188.     HMSetTagDelay(500);
  189.     HMSetHelpTagsDisplayed(true);
  190.  
  191.     helpContent.version = kMacHelpVersion;
  192.     helpContent.tagSide = kHMOutsideTopCenterAligned;
  193.     helpContent.content[kHMMinimumContentIndex].contentType = kHMStringResContent;
  194.     helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmResID = 135;
  195.  
  196.     for(a = 1;a <= 7; a++)
  197.     {
  198.         helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = a;
  199.         GetDialogItemAsControl(dialogRef,itemNumber[a - 1],&controlRef);
  200.         HMSetControlHelpContent(controlRef,&helpContent);
  201.     }
  202. }
  203.  
  204. // *******************************************************************************************
  205.