home *** CD-ROM | disk | FTP | other *** search
- /*
- * Should add menu hook routine to dim Close item when no windows are active.
- *
- * MultiSkel - TransSkel multiple-window demonstration main module
- *
- * This module performs setup and termination operations, installs
- * the window and menu handlers, and processes menu item selections.
- *
- * There are four window handlers in this demonstration. The code
- * for each handler is in its own module.
- *
- * Help Window Scrollable non-editable text window
- * Edit Window Non-scrollable editable text window
- * Zoom Window Non-manipulable graphics display window
- * Region Window Manipulable graphics display window
- *
- * 21 Apr 88 Paul DuBois
- * 29 Jan 89 Version 1.01
- * - Conversion for TransSkel 2.0.
- * 12 Jan 91 Version 1.02
- * - Conversion for TransSkel 3.00.
- * 05 Jun 93 Version 1.03
- * - Conversion for THINK C 6.0.
- * 15 Feb 94
- * - Numerous minor revisions.
- * 21 Feb 94
- * - Updated for TransSkel 3.11.
- */
-
- # include "TransSkel.h"
-
- # include "MultiSkel.h"
-
-
- /* File menu item numbers */
-
- typedef enum {
- open = 1,
- close,
- /* --- */
- quit = 4
- } fileItems;
-
-
- WindowPtr helpWind;
- WindowPtr editWind;
- WindowPtr zoomWind;
- WindowPtr rgnWind;
-
-
- /*
- * Menu handles. There isn't any Apple menu here, since TransSkel will
- * be told to handle it itself.
- */
-
- static MenuHandle fileMenu;
- MenuHandle editMenu;
-
- static RgnHandle oldClip;
-
-
- /*
- * Miscellaneous routines
- * These take care of drawing the grow box and the line along
- * the right edge of the window, and of setting and resetting the clip
- * region to disallow drawing in that right edge by the other drawing
- * routines.
- */
-
-
- void
- DrawGrowBox (WindowPtr wind)
- {
- Rect r;
- RgnHandle oldClip;
-
- r = wind->portRect;
- r.left = r.right - 15; /* draw only along right edge */
- oldClip = NewRgn ();
- GetClip (oldClip);
- ClipRect (&r);
- DrawGrowIcon (wind);
- SetClip (oldClip);
- DisposeRgn (oldClip);
- }
-
-
- void
- SetWindClip (WindowPtr wind)
- {
- Rect r;
-
- r = wind->portRect;
- r.right -= 15; /* don't draw along right edge */
- oldClip = NewRgn ();
- GetClip (oldClip);
- ClipRect (&r);
- }
-
-
- void
- ResetWindClip (void)
- {
- SetClip (oldClip);
- DisposeRgn (oldClip);
- }
-
-
- /*
- * Show a window if it's not visible. Select the window FIRST, then
- * show it, so that it comes up in front. Otherwise it will be drawn
- * in back then brought to the front, which is ugly.
- *
- * The test for visibility must be done carefully: the window manager
- * stores 255 and 0 for true and false, not real boolean values.
- */
-
- static void
- MyShowWindow (WindowPtr wind)
- {
-
- if (((WindowPeek) wind)->visible == false)
- {
- SelectWindow (wind);
- ShowWindow (wind);
- }
- }
-
-
- /*
- * Handle selection of About MultiSkel... item from Apple menu
- */
-
- static pascal void
- DoAppleMenu (short item)
- {
- (void) SkelAlert (aboutAlrtRes, SkelDlogFilter (nil, true),
- skelPositionOnParentDevice);
- SkelRmveDlogFilter ();
- }
-
-
- /*
- * Process selection from File menu.
- *
- * Open Make all four windows visible
- * Close Hide the frontmost window. If it belongs to a desk accessory,
- * close the accessory.
- * Quit Request a halt by calling SkelHalt(). This makes SkelMain
- * return.
- */
-
- static pascal void
- DoFileMenu (short item)
- {
- switch (item)
- {
- case open:
- MyShowWindow (rgnWind);
- MyShowWindow (zoomWind);
- MyShowWindow (editWind);
- MyShowWindow (helpWind);
- break;
-
- case close:
- SkelClose (FrontWindow ());
- break;
-
- case quit:
- SkelStopEventLoop (); /* request halt */
- break;
- }
- }
-
-
- /*
- * Initialize menus. Tell TransSkel to process the Apple menu automatically,
- * and associate the proper procedures with the File and Edit menus.
- * The Edit menu is enabled only when the Edit is frontmost.
- *
- * \311 = ellipsis character
- */
-
- static void
- SetUpMenus (void)
- {
- SkelApple ((StringPtr) "\pAbout MultiSkel\311", DoAppleMenu);
- fileMenu = GetMenu (fileMenuRes);
- (void) SkelMenu (fileMenu, DoFileMenu, nil, false, false);
- editMenu = GetMenu (editMenuRes);
- (void) SkelMenu (editMenu, EditWindEditMenu, nil, false, true);
- }
-
-
- int
- main (void)
- {
- long f, b;
-
- SkelInit ((SkelInitParamsPtr) nil);
- SkelGetWaitTimes (&f, &b);
- b = f;
- SkelSetWaitTimes (f, b);
- SetUpMenus (); /* install menu handlers */
- RgnWindInit (); /* install window handlers */
- ZoomWindInit ();
- EditWindInit ();
- HelpWindInit ();
- SkelEventLoop (); /* process events */
- SkelCleanup (); /* throw away windows and menus */
- }
-