home *** CD-ROM | disk | FTP | other *** search
- /* =====================================================
- ** Created by the Precognition Interface Builder
- ** =====================================================
- **
- ** Link this file with 'Precognition.lib'
- **
- */
-
- #include "Precognition.h"
- #include "Intuition_Utils.h"
- #include "chainedwindows.h"
- #include "SavePrompt.h"
- #ifndef __GNUC__
- #include <clib/exec_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/exec_protos.h>
- #endif
- #ifdef __GNUC__
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #endif
- #ifdef __SASC
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #endif
- #include <string.h>
- #include <stdio.h> /* added for sprintf() prototype -- EDB */
- #include "BuilderWindow.h"
-
- extern struct MsgPort *shared_port;
- extern struct Screen *screen;
-
- /*
- ** The event loop is terminated when 'SavePrompt_Done' is true.
- */
-
-
- struct SavePrompt
- {
- pcgWindow w;
- BoolGadget bg_save;
- BoolGadget bg_dontsave;
- BoolGadget bg_cancel;
- struct IntuiText text;
- BOOL done;
- int result;
- };
-
- char saveprompt_text[80];
-
- /*=============== Prototypes ====================*/
-
-
- void SavePrompt_Init (
- struct SavePrompt *window,
- struct Screen *screen );
-
- void SavePrompt_CleanUp ( struct SavePrompt *window );
-
- ULONG SavePrompt_Respond (
- struct SavePrompt *window,
- struct IntuiMessage *event );
-
-
- extern struct BuilderWindow builderwindow;
-
- void SavePrompt_Init ( window, screen )
- struct SavePrompt *window;
- struct Screen *screen;
- {
-
- pcg_3DPens pens;
- char *objectname;
-
- window->done = FALSE;
- /* pens = StandardPens(); */
- pens = StandardScreenPens( screen );
-
- /* Initialize the window */
- pcgWindow_Init( &window->w,
- 0, 12, 464, 75, /* LeftEdge, TopEdge, Width, Height */
- 100, 50, 65535, 65535, /* min width & height, max width & height */
- "Save your work?", /* title */
- REFRESHWINDOW, /* IDCMPFlags */
- WINDOWDRAG | WINDOWDEPTH | SIMPLE_REFRESH | ACTIVATE, /* Flags */
- screen );
-
- window->w.SharedUserPort = shared_port;
-
- BoolGadget_Init( &window->bg_save,
- 8, 56, 96, 14, /* LeftEdge, TopEdge, Width, Height */
- pens, "SAVE" );
- SetTextAlignment( (GraphicObject *)&window->bg_save, tx_XCENTER | tx_YCENTER, 0, 0 );
- AddWindowPObject( &window->w, (GraphicObject *)&window->bg_save );
-
- BoolGadget_Init( &window->bg_dontsave,
- 182, 56, 96, 14, /* LeftEdge, TopEdge, Width, Height */
- pens, "DON'T SAVE" );
- SetTextAlignment( (GraphicObject *)&window->bg_dontsave, tx_XCENTER | tx_YCENTER, 0, 0 );
- AddWindowPObject( &window->w, (GraphicObject *)&window->bg_dontsave );
-
- BoolGadget_Init( &window->bg_cancel,
- 360, 56, 96, 14, /* LeftEdge, TopEdge, Width, Height */
- pens, "CANCEL" );
- SetTextAlignment( (GraphicObject *)&window->bg_cancel, tx_XCENTER | tx_YCENTER, 0, 0 );
- AddWindowPObject( &window->w, (GraphicObject *)&window->bg_cancel );
-
- objectname = PObjectName( (struct PObject *)&builderwindow );
- sprintf( saveprompt_text, "Project \"%s\" has not been saved.", objectname );
-
- window->text.FrontPen = 1;
- window->text.BackPen = 0;
- window->text.DrawMode = JAM1;
- window->text.LeftEdge = 10;
- window->text.TopEdge = 20;
- window->text.ITextFont = &pcg_Topaz80;
- window->text.IText = saveprompt_text;
- window->text.NextText = NULL;
-
- }
-
-
- void SavePrompt_CleanUp ( window )
- struct SavePrompt *window;
- {
- CleanUp( (PObject *)&window->w );
- CleanUp( (PObject *)&window->bg_save );
- CleanUp( (PObject *)&window->bg_dontsave );
- CleanUp( (PObject *)&window->bg_cancel );
- }
-
-
- ULONG SavePrompt_Respond ( window, event )
- struct SavePrompt *window;
- struct IntuiMessage *event;
- {
-
- ULONG response, r;
- struct Window *intuition_window;
-
- response = 0L;
-
- /* check to see if 'event' happenned in this window */
- intuition_window = iWindow( &window->w );
- if( event->IDCMPWindow == intuition_window )
- {
- switch( event->Class )
- {
-
- case REFRESHWINDOW:
- BeginRefresh( intuition_window );
- Refresh( (Interactor *)&window->w );
- PrintIText( RPort( &window->w ), &window->text, 0, 0 );
- EndRefresh( intuition_window, TRUE );
- break;
-
- default:
- r = Respond( (Interactor *)&window->bg_save, event );
- if( r & CHANGED_STATE )
- { /* bg_save was hit. */
- response |= r;
- window->done = TRUE;
- window->result = SP_SAVE;
- }
-
- r = Respond( (Interactor *)&window->bg_dontsave, event );
- if( r & CHANGED_STATE )
- { /* bg_dontsave was hit. */
- response |= r;
- window->done = TRUE;
- window->result = SP_DONT_SAVE;
- }
-
- r = Respond( (Interactor *)&window->bg_cancel, event );
- if( r & CHANGED_STATE )
- { /* bg_cancel was hit. */
- response |= r;
- window->done = TRUE;
- window->result = SP_CANCEL;
- }
-
- break;
-
- } /* end switch */
-
- } /* end if */
-
- return response;
- }
-
-
- int do_SavePrompt( void )
- {
- struct SavePrompt SavePrompt;
- struct Window *iw; /* Intuition window */
- struct IntuiMessage *imsg, event;
- int result;
-
- EnableAllChainedWindows( FALSE );
-
- SavePrompt_Init( &SavePrompt, screen );
-
- if( ( iw = pcgOpenWindow( &SavePrompt.w ) ) != NULL )
- {
- PrintIText( RPort( &SavePrompt.w ), &SavePrompt.text, 0, 0 );
-
- /*====== Event Loop ================*/
- while( ! SavePrompt.done )
- {
- imsg = WaitForMessage( shared_port );
- event = *imsg;
- ReplyMsg( (struct Message *)imsg );
-
- SavePrompt_Respond( &SavePrompt, &event );
-
- }
-
- pcgCloseWindow( &SavePrompt.w );
- }
- else /* Error : window couldn't be openned. */
- {
- ; /*** YOUR ERROR HANDLING HERE ***/
- }
-
- result = SavePrompt.result;
- SavePrompt_CleanUp( &SavePrompt );
- EnableAllChainedWindows( TRUE );
-
- return result;
- }
-
-
-