home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
dev
/
bgui-1.1a.lha
/
BGUI
/
demos
/
PopupCycle.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-09-15
|
7KB
|
237 lines
;/* Execute me to compile with DICE V3.0
dcc PopupCycle.c -mi -ms -proto -lbgui -lpopupmenuclass.o
quit
*/
/*
** $RCSfile: PopupCycle.c,v $
** Description: Simple BGUI external class demonstration.
** Copyright: (C) Copyright 1994 Paul Weterings.
** All Rights Reserved.
**
** $Author: Paul Weterings $
** $Revision: 1.2 $
** $Date: 1994/08/03 11:38:53 $
*/
#include <exec/types.h>
#include <exec/libraries.h>
#include <dos/dos.h>
#include <libraries/bgui.h>
#include <libraries/bgui_macros.h>
#include <clib/macros.h>
#include <clib/alib_protos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/bgui.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <math.h>
/*
** Keep in mind that you need Markus Aalto's PopUpMenu Class
** his archive is called 'pppmnc11.lha'
**
** Note from Jan to DICE users:
** Since the DICE linker DLink does not seem to know how to
** handle HUNK_LIB hunks like in the .lib file supplied with the
** PopupMenuClass you will have to link with the supplied
** popupmenuclass.o file. This file is compiled without registered
** args (-mRR).
*/
#include <BoopsiObjects/PopUpMenuClass.h>
/*
** Library base pointers.
*/
struct Library *BGUIBase = NULL;
/*
** Object ID's
*/
#define ID_QUIT 1
#define ID_POPUP 2
/*
** Version checking
*/
extern struct Library *SysBase;
Class *PopUpMenuClass;
struct DrawInfo *dri;
UBYTE *names[] = {
"Paul Weterings",
"supplied this",
"little class demo",
"Thanks to",
"Markus Aalto",
"for the",
"freely",
"Distributable",
"PopUpMenu class",
"Markus: s37732v@vipunen.hut.fi",
"Paul : Paul@grafix.wlink.nl",
NULL
};
int main( int argc, char *argv[] )
{
Object *WN_Window, *GA_Quit, *GA_Master, *GA_Popup;
struct Window *win;
struct Screen *scr;
ULONG winsig = 0L, sigrec, rc;
BOOL running = TRUE;
/*
** Needed for the class
*/
struct Node *node;
struct List labels;
UBYTE **strings = names;
UWORD Height;
/*
** Need al least OS 2.0.
*/
if ( SysBase->lib_Version < 37 ) {
puts( "> OS 2.0 required!" );
exit( 0 );
}
/*
** Open the libraries.
*/
if ( BGUIBase = OpenLibrary( BGUINAME, BGUIVERSION ))
{
if ( scr = LockPubScreen( NULL ))
{
/*
** Create the PopUpMenu class
*/
if (PopUpMenuClass = CreatePopUpMenuClass())
{
/*
** Create the list with items
*/
NewList( &labels );
while( *strings )
{
node = (struct Node *)AllocVec( sizeof(struct Node), MEMF_ANY|MEMF_CLEAR );
if( node )
{
node->ln_Name = *strings;
AddTail( &labels, node );
}
else
{
puts( "Not enough memory for nodes in List" );
goto nolist;
}
strings++;
}
/*
** I guess this variable can be filled better by BGUI
*/
if( dri = GetScreenDrawInfo( scr ) )
Height = MAX(dri->dri_Font->tf_YSize + INTERHEIGHT, PUMG_MinHeight );
else
goto noscrdrwinf;
/*
** Create a small window.
*/
WN_Window = WindowObject,
WINDOW_Title, "PopUpCycle",
WINDOW_Screen, scr,
WINDOW_SmartRefresh, TRUE,
WINDOW_MasterGroup,
GA_Master = VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
StartMember,
GA_Popup = ExternalObject,
EXT_MinWidth, 130,
EXT_MinHeight, Height+2,
EXT_Class, PopUpMenuClass,
EXT_TrackAttr, PUMG_Active,
PUMG_Labels, &labels,
PUMG_TextFont, dri->dri_Font, /* Not really needed */
PUMG_NewLook, TRUE, /* Play with this! */
GA_RelVerify, TRUE,
GA_ID, ID_POPUP,
EndObject,
FixMinHeight,
EndMember,
StartMember,
GA_Quit = KeyButton( "_Quit", ID_QUIT ), FixMinHeight,
EndMember,
EndObject, /* VGroupObject */
EndObject; /* WindowObject */
if ( WN_Window ) {
/*
** Make button selectable by the keyboard.
*/
GadgetKey( WN_Window, GA_Quit, "q" );
/*
** Open up the window.
*/
if ( win = WindowOpen( WN_Window )) {
/*
** Obtain window sigmask.
*/
GetAttr( WINDOW_SigMask, WN_Window, &winsig );
/*
** Wait for messages.
*/
do {
sigrec = Wait( winsig );
/*
** Window signal?
*/
if ( sigrec & winsig ) {
while ( WN_Window && (( rc = HandleEvent( WN_Window )) != WMHI_NOMORE )) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
case ID_QUIT:
/*
** The end.
*/
running = FALSE;
break;
}
}
}
}
while ( running );
}
DisposeObject( WN_Window );
}
noscrdrwinf:
DisposePopUpMenuClass( PopUpMenuClass );
while( node = RemHead( &labels ) )
FreeVec( (void *)node );
nolist:
FreeScreenDrawInfo( scr, dri );
}
UnlockPubScreen( NULL, scr );
}
CloseLibrary( BGUIBase );
}
}
#ifdef _DCC
int wbmain( struct wbStartup *wbs )
{
return( main( 0, NULL ));
}
#endif