#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct inputRec { int label; float value; RGBColor colour; }; struct dataRec { struct inputRec input[10]; float total; float max; int length; float min; }; RGBColor gWhiteColour = { 0xFFFF, 0xFFFF, 0xFFFF }; RGBColor gBlackColour = { 0x0000, 0x0000, 0x0000 }; RGBColor gRedColour = { 0xAAAA, 0x0000, 0x0000 }; RGBColor gYellowColour = { 0xFFFF, 0xCCCC, 0x0000 }; RGBColor gGreenColour = { 0x0000, 0x9999, 0x0000 }; RGBColor gBlueColour = { 0x6666, 0x6666, 0x9999 }; pascal Boolean OurFilter(DialogPtr dlg, EventRecord *event, short *itemhit); int drawPie (struct dataRec data); int drawBar (struct dataRec data); struct dataRec getValues (struct dataRec data); void drawHeader (void); void drawFooter (void); struct dataRec getValues (struct dataRec data) { Rect rect; int x, nums; // drawHeader(); printf("How many students do you want to record marks for (max 25) -=> "); scanf("%i", &nums); for(x=0;x ", x+1, nums); scanf("%i", data.input[x].value); /* if (data.input[x].value > data.max) data.max = data.input[x].value; if (data.input[x].value < data.min) data.min = data.input[x].value; data.total = data.total + data.input[x].value;*/ data.length = data.length +1; } return data; } int drawPie (struct dataRec data) { Rect pie; float curArc,arcs; int x; curArc=0.0; SetRect(&pie, 150, 100, 450, 400); arcs = 360.0 / data.total; for (x=0;x<=data.length;x++) { RGBForeColor(&data.input[x].colour); PaintArc(&pie, curArc, (data.input[x].value * arcs) + (x == data.length ? 1 : 0)); curArc = curArc + (data.input[x].value * arcs); } // RGBForeColor(&data.input[data.length].colour); // PaintArc(&pie, curArc, 0); return 1; } int drawBar(struct dataRec data) { Rect graph, bar; float xSeg, ySeg, lastSeg; int x=0; SetRect(&graph, 150, 100, 450, 400); RGBForeColor(&gBlackColour); FrameRect(&graph); xSeg = (300 - (10 * data.length)) / (data.length + 1); lastSeg = 150; // ySeg = (data.max / 298); // .3 for (x=0;x<=data.length;x++) { ySeg = (data.input[x].value / 298); RGBForeColor(&data.input[x].colour); // SysBeep(1); SetRect(&bar, lastSeg+10, 100 + (300 - ((data.input[x].value / data.max) * 300)), (lastSeg + xSeg), 399); PaintRect(&bar); lastSeg = lastSeg + xSeg; } drawLegend(data); return 1; } int drawLegend (struct dataRect data) { Rect rect; int x, lastX; Str255 text1, text2; RGBForeColor(&gWhiteColour); SetRect(&rect, 500, 100, 600, 400); PaintRect(&rect); MoveTo(520, 120); DrawString("Legend"); lastX = 530; for (x=0;x<=data.length;x++) { RGBForeColor(&data.input[x].colour); SetRect(&rect, 510, lastX, 520, lastX + 10); PaintRect(&rect); MoveTo(530, lastX + 10); text1 = data.input[x].label; TruncString(70, text1, truncEnd); Moveto(530, lastX + 10); DrawString(text1); } } int main(void) { WindowPtr thewindow,aWindow; DialogPtr TheDialog; OSErr theErr; short itemHit; short iKind; Handle iHandle, mBarHandle; struct dataRec data; long mChoice; short theMenu,theMenuItem,done,thePart; Rect iRect; Str255 theItem; EventRecord theEvent; InitGraf (&qd.thePort); InitFonts(); InitWindows(); InitMenus(); TEInit(); InitDialogs((long)nil); InitCursor(); FlushEvents(everyEvent,0); //thewindow = GetNewWindow(128, 0L, (WindowPtr)-1L); //SetPort (thewindow); /* TheDialog=GetNewDialog(128,nil, (WindowPtr)-1); SetPort( (GrafPtr)TheDialog); theErr = SetDialogDefaultItem(TheDialog, 5); if(theErr != noErr) ExitToShell(); ShowDialogItem(TheDialog, 1); ShowDialogItem(TheDialog, 2); ShowDialogItem(TheDialog, 3); ShowDialogItem(TheDialog, 6); ShowDialogItem(TheDialog, 0); do { ModalDialog(NewModalFilterProc(OurFilter), &itemHit); if (itemHit == 5) { GetDialogItem(TheDialog, 5, &iKind, &iHandle, &iRect); GetDialogItem(TheDialog, 3, &iKind, &iHandle, &iRect); GetDialogItemText(iHandle, theItem); InvalRect(&iRect); itemHit = ok; } } while (itemHit != ok); DisposeDialog(TheDialog); //MoveTo(200,200); printf("%s", &theItem); */ //data = getValues(data); data.input[0].value = 90; data.input[1].value = 40; data.input[2].value = 30; data.input[0].colour = gGreenColour; data.input[1].colour = gRedColour; data.input[2].colour = gYellowColour; data.max = 90; data.min = 30; data.total=160; data.length=2; thewindow = GetNewWindow(128, 0L, (WindowPtr)-1L); TEInit(); //SetWTitle(thewindow, "This is a window!"); mBarHandle = GetNewMBar(128); SetMenuBar(mBarHandle); DrawMenuBar(); done = 0; drawBar(data); while (done < 1) { WaitNextEvent(everyEvent, &theEvent, 0L, 0L); switch(theEvent.what) { case mouseDown: thePart = FindWindow(theEvent.where, &aWindow); switch (thePart) { case inMenuBar: mChoice = MenuSelect(theEvent.where); if (mChoice > 0) { theMenu=HiWord(mChoice); theMenuItem=LoWord(mChoice); switch(theMenu) { case 129: switch(theMenuItem) { case 1: SysBeep(1); break; case 2: done = 1; break; case 3: SysBeep(1); done = 1; break; } break; } HiliteMenu(0); } break; } } } return 0; } pascal Boolean OurFilter(DialogPtr dlg, EventRecord *event, short *itemHit) { return false; /* static Boolean isDisabled = false; ModalFilterUPP theProc; Boolean retVal; OSErr theErr = noErr; Str255 theItem; short iKind; Handle iHandle; Rect iRect; theErr = GetStdFilterProc(&theProc); if (theErr != noErr) ExitToShell(); if (!(retVal = CallModalFilterProc(theProc, dlg, event, itemHit))) { switch (event->what) { case nullEvent: break; case autoKey: retVal = false; break; case updateEvt: GetDialogItem(dlg, 2, &iKind, &iHandle, &iRect); GetDialogItemText(iHandle, theItem); isDisabled = theItem[0] == '\0'; GetDialogItem(dlg, ok, &iKind, &iHandle, &iRect); if (isDisabled) HiliteControl((ControlHandle)iHandle, 255); else HiliteControl((ControlHandle)iHandle,0); retVal = false; break; default: retVal = false; break; } } return retVal;*/ }