home *** CD-ROM | disk | FTP | other *** search
- #include "DeskLib:Menu.h"
- #include "DeskLib:WimpSWIs.h"
- #include "DeskLib:Kbd.h"
-
- #include "Shell.SafeAlloc.h"
-
- #include "ChHeapSize.h"
- #include "AppMenu.h"
- #include "AddStep.h"
-
-
-
-
- #define Menu_FirstEntry(menu) ((menu_item *) (((menu_ptr) (menu) + 1)))
-
- static menu_ptr m = 0;
-
- #define menu_BYTESPEROS 0
-
- static void ClaimHandlers( void *reference);
- static void ReleaseHandlers( void *reference);
-
-
-
-
-
- static menu_ptr MakeMenu( void)
- {
- menu_ptr m = Menu_New( "Application", "Bytes per os pixel");
- menu_ptr m2= Menu_New( "Bytes", "0");
- Menu_MakeWritable( m2, 0, Shell_SafeCalloc( 1, 8), 8, "");
- Menu_AddSubMenu( m, menu_BYTESPEROS, m2);
- return m;
- }
-
-
-
- static BOOL MenuCancelHandler( event_pollblock *event, void *reference)
- {
- if ( event->data.message.header.action == message_MENUSDELETED) ReleaseHandlers( reference);
- return FALSE;
- }
-
-
- static BOOL MenuHandler( event_pollblock *event, void *reference)
- {
- mouse_block mouse;
- app_block *app = (app_block *) reference;
-
- Wimp_GetPointerInfo( &mouse);
-
- if ( event->data.selection[0] == menu_BYTESPEROS && event->data.selection[1]==0) {
- int new;
- menu_block *submenu= Menu_FirstEntry(m)[ menu_BYTESPEROS].submenu.menu;
- char *text = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
- sscanf( text, "%i", &new);
- if ( new>0) {
- app->words_per_os = new;
- GetBestAddressStep( app);
- RescaleHeap( app);
- }
- }
-
-
- if ( !mouse.button.data.adjust) Wimp_GetPointerInfo( &mouse);
- /* Give two chances to hold down adjust... */
-
- if ( mouse.button.data.adjust) {
- mouse.pos.x = mouse.pos.y = 0;
- Menu_ShowLast();
- }
-
- else ReleaseHandlers( reference);
-
-
- return TRUE;
- }
-
-
-
-
- BOOL AppWindowClickHandler( event_pollblock *event, void *reference)
- {
- app_block *app = (app_block *) reference;
- if ( !Kbd_KeyDown( inkey_SHIFT) && event->data.mouse.button.data.menu) {
-
- if ( m==0) m = MakeMenu();
-
- /* Put present value into the submenu. */
- {
- menu_block *submenu= Menu_FirstEntry(m)[ menu_BYTESPEROS].submenu.menu;
- char *text = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
- sprintf( text, "%i", app->words_per_os);
- }
-
- Menu_Show( m, event->data.mouse.pos.x, event->data.mouse.pos.y);
- ClaimHandlers( reference);
- return TRUE;
- }
-
- else return FALSE;
- }
-
-
-
-
-
-
- static void ClaimHandlers( void *reference)
- {
- Event_Claim( event_MENU, event_ANY, event_ANY, MenuHandler, reference);
- Event_Claim( event_USERMESSAGE, event_ANY, event_ANY, MenuCancelHandler, reference);
- }
-
- static void ReleaseHandlers( void *reference)
- {
- Event_Release( event_MENU, event_ANY, event_ANY, MenuHandler, reference);
- Event_Release( event_USERMESSAGE, event_ANY, event_ANY, MenuCancelHandler, reference);
- }
-
-
-