BigEasy/NWindows.c

/*
    File:       NWindows.c
 
    Contains:   xxx put contents here xxx
 
    Written by: xxx put writers here xxx
 
    Copyright:  © 1991-1993 by Apple Computer, Inc., all rights reserved.
 
    This file is used in these builds: Warhol
 
    Change History (most recent first):
 
        <5+>     7/12/93    dvb     Symantec C++
         <5>      1/7/93    dvb     Compile under mpw.
         <4>    11/12/91    dvb     Refine
         <3>      9/4/91    dvb     More.
         <2>     4/25/91    JB      Changing to new THINK_C interface files
 
    To Do:
*/
 
/*
 * file: NWindows.c
 *
 * started 7 July 1988 09:34
 * david van brink
 *
 * A starting point for BigEasy programs
 *
 */
 
 
/*--------------------------
    Inclusions
--------------------------*/
 
#include <QuickDraw.h>
#include <Windows.h>
#include <BDC.h>
#include <Packages.h>
 
#include "BigEasy2.h"
 
/*--------------------------
    Limits and Konstants
--------------------------*/
 
 
enum
    {
    mOpen = 100,
    mClose,
    mNew
    };
 
/*--------------------------
    Types and globals
--------------------------*/
 
#define kBlipRad 10
 
typedef struct TDoc
    {
    Boolean used;
    Point aPoint;
    WindowPtr w;
    } TDoc;
 
#define kFirstDocWindow 1
#define kDocMax 5
TDoc gDoc[kDocMax];
short gDocCount;
 
#define SignIt(x) ( (x)?1:-1)
 
/*--------------------------
    Prototypes
--------------------------*/
static void DrawDoc(short n);
static void ClickDoc(short n,Point p,short mods);
static void KeyDoc(short n,short key,short code, short mods);
static void GoAwayDoc(short n);
static void ActivateDoc(short n);
static void DeactivateDoc(short n);
static void IdleDoc(short n,Boolean front);
static void LetsQuit(void);
static void OpenAWindow(void);
static void NewDoc(void);
static void MakeWindow(void);
static void InitVars(void);
 
/*--------------------------
    Computer Programs
--------------------------*/
 
 
void DrawDoc(short n)
/*
 * Draws the window.
 */
    {
    Rect r;
    register TDoc *d;
 
    d = &gDoc[n-kFirstDocWindow];
 
    EraseRect(&gBigRect);
    MoveTo(0,14);
    Line(10000,0);
    MoveTo(0,16);
    Line(10000,0);
 
    MoveTo(10,11);
    TextSize(9);
    DrawString("\pThis is the window");
 
    r.top = r.bottom = d->aPoint.v;
    r.left = r.right = d->aPoint.h;
    InsetRect(&r,-kBlipRad,-kBlipRad);
    PaintRect(&r);
    }
 
 
void ClickDoc(short n,Point p,short mods)
/*
 * Come here for a click in the window.
 */
    {
#pragma unused (mods)
 
    Rect r;
    register TDoc *d;
 
    d = &gDoc[n-kFirstDocWindow];
 
    r.top = r.bottom = d->aPoint.v;
    r.left = r.right = d->aPoint.h;
    InsetRect(&r,-kBlipRad,-kBlipRad);
    InvalRect(&r);
    d->aPoint = p;
    r.top = r.bottom = p.v;
    r.left = r.right = p.h;
    InsetRect(&r,-kBlipRad,-kBlipRad);
    InvalRect(&r);
    }
 
void KeyDoc(short n,short key,short code, short mods)
    {
#pragma unused (n,key,code,mods)
 
    }
 
void GoAwayDoc(short n)
/*
 * Close that window...
 */
    {
    register TDoc *d;
 
    d = &gDoc[n-kFirstDocWindow];
    d->used = false;
    gDocCount--;
    UninstallWindow(n);
    }
 
void ActivateDoc(short n)
    {
#pragma unused (n)
 
    EnDisEdits(0,0,0,0,0);
    SetMenuItem(mClose,1,0,0,nil);              /* enable "Close" menu item     */
    SetMenuItem(mOpen,-1,0,0,nil);              /* disable "Open" menu item     */
 
    SetMenuItem(mNew,SignIt(gDocCount<kDocMax),0,0,nil);    /* "New" if more docs   */
    }
 
void DeactivateDoc(short n)
    {
#pragma unused (n)
 
    SetMenuItem(mClose,-1,0,0,nil);             /* disable "Close" menu item        */
    SetMenuItem(mOpen,1,0,0,nil);               /* enable "Open" menu item      */
    }
 
void IdleDoc(short n,Boolean front)
    {
#pragma unused (n,front)
    }
 
 
void LetsQuit(void)
    {
    gQuitApp++;
    }
 
void NewDoc()
    {
    short i;
    register TDoc *d;
    Rect r;
    unsigned char c[30];
 
    SetRect(&r,100,100,260,200);
 
    for(i = 0; i<kDocMax; i++)
        {
        d = &gDoc[i];
        if(!d->used)
            goto gotOne;
        }
    goto goHome;
 
gotOne:
    NumToString(i,c);
    d->w = InstallWindow(i+kFirstDocWindow,c,&r,0,1,DrawDoc,ClickDoc,KeyDoc,GoAwayDoc,
            ActivateDoc,DeactivateDoc,IdleDoc);
    d->used = true;
    d->aPoint.v = 100;
    d->aPoint.h = 100;
    gDocCount++;
goHome:;
    }
 
void InitVars()
/*
 * Called once at startup: yes, it
 * inits the vars.
 */
    {
    TDoc *dp;
 
    short i;
 
    for(i = 0; i<kDocMax; i++)
        {
        dp = &gDoc[i];
        dp->used = false;
        }
    gDocCount = 0;
 
    gMenuNeedsCmdKey = false;
    }
 
void Bootstrap()
    {
/*** File Menu ***/
    InstallMenu("\pFile",nil,0);
    InstallMenuItem("\pNew/N",(void *)NewDoc,mNew);
    InstallMenuItem("\pClose/W",(void *)GoAwayDoc,-mClose);
    InstallMenuItem("\p(-",nil,0);
    InstallMenuItem("\pQuit/Q",(void *)LetsQuit,0);
 
/*** Edit Menu ***/
    InstallEditMenu(nil,nil,nil,nil,nil);
 
/*** Special Menu ***/
    InstallMenu("\pSpecial",(void *)nil,0);
    InstallMenuItem("\pSo special",nil,0);
 
    InitVars();
    }
 
void Hatstrap()
/*
  * clean up
  */
    {
//  SaveWindowPosition(-1);
    }