home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks96 / FontMancer.sit / FontMancer / Common / Standard.c < prev    next >
C/C++ Source or Header  |  1996-06-21  |  6KB  |  213 lines

  1. #include "FontMancer.h"
  2. #include "FontDisplay.h"
  3. #include "About.h"
  4. #include "Prefs.h"
  5. #include "Display.h"
  6. #include "Standard.h"
  7. #include "StandardMenu.h"
  8. #include "StandardEvent.h"
  9. #include "AEHandler.h"
  10.  
  11.  
  12.  
  13. Boolean        gQuit;
  14. Boolean        gInBackground;
  15. Boolean        gDManager;
  16. Boolean        gSManager;
  17. WindowPtr    gMainWindow;
  18. long        gLastKeyTime;
  19. Str255        gSamplePhrase;
  20. Str255        gListNavString;
  21.  
  22. main()
  23. {
  24.     MaxApplZone();
  25.     InitToolbox();
  26.     InitAEAccept();
  27.     InitMenuBar();
  28.     InitMainWindow();
  29.     CreateFontList();
  30.     MainEventLoop();
  31.     UpdatePrefs();
  32.     DisposeMainWindow();
  33.     return(0);
  34. }
  35.  
  36. void InitToolbox()
  37. {
  38.     long    response;
  39.     OSErr    error;
  40.  
  41.     gInBackground = gQuit = gDManager = gSManager = FALSE;
  42.     gListNavString[0] = 0;
  43.     gLastKeyTime = 0;
  44.  
  45.     InitGraf((Ptr) &qd.thePort);
  46.     InitFonts();
  47.     InitWindows();
  48.     InitMenus();
  49.     FlushEvents(everyEvent,0);
  50.     TEInit();
  51.     InitDialogs(0L);
  52.     InitCursor();
  53.     if (Gestalt(gestaltSystemVersion,&response) || response < 0x700)
  54.         DeathAlert(errWimpySystem,NIL);
  55.     error = Gestalt(gestaltDisplayMgrVers,&response);
  56.     if (!error && response >= 0x00020000)
  57.         gDManager = TRUE;
  58.     error = Gestalt(gestaltSoundAttr,&response);
  59.     if (!error && (response & gestalt16BitAudioSupport))
  60.         gSManager = TRUE;
  61. }
  62.  
  63. void InitMainWindow()
  64. {
  65.     short                    loop,error;
  66.     struct picStorage        *buttonPic;
  67.     FMStuff                    *FMStore;
  68.     ControlHandle            itemHandle;
  69.     struct prefStuff        Prefs;
  70.  
  71.     FMStore = (FMStuff *) NewPtr(sizeof(FMStuff));
  72.     gMainWindow = GetNewCWindow(rMainWindow,NIL,(WindowPtr) -1);
  73.     SetPort(gMainWindow);
  74.     TextFont(systemFont);
  75.     SetWRefCon(gMainWindow,(long) FMStore);
  76.     for (loop=iPlainButton; loop <= iShadowButton; loop++) {
  77.         buttonPic = (struct picStorage *) NewPtr(sizeof(struct picStorage));
  78.         buttonPic->buttonHilite = 0;
  79.         buttonPic->buttonNormal = GetPicture(129 + loop);
  80.         buttonPic->buttonPressed = GetPicture(135 + loop);
  81.         buttonPic->buttonInactUp = GetPicture(141 + loop);
  82.         buttonPic->buttonInactDown = GetPicture(147 + loop);
  83.         itemHandle = GetNewControl(128 + loop,gMainWindow);
  84.         SetCRefCon(itemHandle,(long) buttonPic);
  85.         FMStore->ctlHandles[loop] = itemHandle;
  86.     }
  87.     FMStore->ctlHandles[iSizePopUp] = GetNewControl(134,gMainWindow);
  88.     SetControlValue(FMStore->ctlHandles[iSizePopUp],3);
  89.     SetRect(&(FMStore->itemRects[iButtonRect]),10,4,311,36);
  90.     SetRect(&(FMStore->itemRects[iLineRect]),4,40,317,41);
  91.     SetRect(&(FMStore->itemRects[iTextRect1]),10,45,311,61);
  92.     SetRect(&(FMStore->itemRects[iListRect]),10,66,311,162);
  93.     SetRect(&(FMStore->itemRects[iTextRect2]),10,166,311,182);
  94.     SetRect(&(FMStore->itemRects[iMenuNameRect]),215,9,250,25);
  95.     SetRect(&(FMStore->itemRects[iSampleRect]),10,187,311,290);
  96.     error = LoadPrefs(&Prefs);
  97.     if (!error)
  98.         ConfigAppWithPrefs(Prefs,*FMStore);
  99.     if (gDManager)
  100.         CheckWindowPrefs();
  101.     ShowWindow(gMainWindow);
  102. }
  103.  
  104. void CheckWindowPrefs()
  105. {
  106.     GDHandle    gDevice;
  107.     GrafPtr        oldPort;
  108.  
  109.     GetPort(&oldPort);
  110.     gDevice = DMGetFirstScreenDevice(dmAllDisplays);
  111.     HLock((Handle) gDevice);
  112.     HandleDeviceChange(gDevice,&((**gDevice).gdRect));
  113.     HUnlock((Handle) gDevice);
  114.     gDevice = DMGetNextScreenDevice(gDevice,dmAllDisplays);
  115.     while (gDevice != NIL) {
  116.         HLock((Handle) gDevice);
  117.         HandleDeviceChange(gDevice,&((**gDevice).gdRect));
  118.         HUnlock((Handle) gDevice);
  119.         gDevice = DMGetNextScreenDevice(gDevice,dmAllDisplays);
  120.     }
  121.     SetPort(oldPort);
  122. }
  123.  
  124. void ConfigAppWithPrefs(struct prefStuff Prefs, FMStuff FMStore)
  125. {
  126.     BlockMove(Prefs.samplePhrase,gSamplePhrase,Prefs.samplePhrase[0] + 1);
  127.     MoveWindow(gMainWindow,Prefs.windowPosition.h,Prefs.windowPosition.v,FALSE);
  128.     if (gSamplePhrase[0] > 255)
  129.         gSamplePhrase[0] = 255;
  130. }
  131.  
  132. void UpdatePrefs()
  133. {
  134.     struct prefStuff        Prefs;
  135.     WindowPeek                windowInfo;
  136.     RgnHandle                windowRgn;
  137.  
  138.     windowInfo = (WindowPeek) gMainWindow;
  139.     windowRgn = windowInfo->contRgn;
  140.     HLock((Handle) windowRgn);
  141.     BlockMove(gSamplePhrase,Prefs.samplePhrase,gSamplePhrase[0] + 1);
  142.     SetPt(&(Prefs.windowPosition),(**windowRgn).rgnBBox.left,(**windowRgn).rgnBBox.top);
  143.     SavePrefs(&Prefs);
  144.     HUnlock((Handle) windowRgn);
  145. }
  146.  
  147. void DisposeMainWindow()
  148. {
  149.     short                    loop;
  150.     struct picStorage        *buttonPic;
  151.     FMStuff                    *FMStore;
  152.  
  153.     FMStore = (FMStuff *) GetWRefCon(gMainWindow);
  154.     for (loop=iShadowButton; loop >= iPlainButton; loop--) {
  155.         buttonPic = (struct picStorage *) GetCRefCon(FMStore->ctlHandles[loop]);
  156.         ReleaseResource((Handle) buttonPic->buttonInactDown);
  157.         ReleaseResource((Handle) buttonPic->buttonInactUp);
  158.         ReleaseResource((Handle) buttonPic->buttonPressed);
  159.         ReleaseResource((Handle) buttonPic->buttonNormal);
  160.         DisposeControl(FMStore->ctlHandles[loop]);
  161.     }
  162.     LDispose(FMStore->fontList);
  163.     DisposePtr((Ptr) FMStore);
  164.     DisposeWindow(gMainWindow);
  165. }
  166.  
  167. void InitMenuBar()
  168. {
  169.     Handle        menuBar;
  170.  
  171.     menuBar = GetNewMBar(rMenuBar);
  172.     SetMenuBar(menuBar);
  173.     DisposHandle(menuBar);
  174.     AddResMenu(GetMHandle(mApple),'DRVR');
  175.     DrawMenuBar();
  176. }
  177.  
  178. void MainEventLoop()
  179. {
  180.     RgnHandle            cursorRgn;
  181.     Boolean                gotEvent;
  182.     EventRecord            event;
  183.     
  184.     
  185.     cursorRgn = NIL;
  186.     while (!gQuit) {
  187.         gotEvent = WaitNextEvent(everyEvent, &event, MAXLONG, cursorRgn);
  188.         if (gotEvent) HandleEvent(&event);
  189.         }
  190. }
  191.  
  192. void InfoAlert(short infoNumber, Str255    infoMessage)
  193. {
  194.     short    itemHit;
  195.     Str255    theMessage;
  196.  
  197.     SetCursor(&qd.arrow);
  198.     GetIndString(theMessage,rInfoStrings,infoNumber);
  199.     ParamText(theMessage,infoMessage,NIL,NIL);
  200.     itemHit = Alert(rInfoAlert,NIL);
  201. }
  202.  
  203. void DeathAlert(short errNumber, Str255    errorInfo)
  204. {
  205.     short    itemHit;
  206.     Str255    theMessage;
  207.  
  208.     SetCursor(&qd.arrow);
  209.     GetIndString(theMessage,rErrorStrings,errNumber);
  210.     ParamText(theMessage,errorInfo,NIL,NIL);
  211.     itemHit = Alert(rErrorAlert,NIL);
  212.     ExitToShell();
  213. }