/*----------------------------------------------------------------------* km_handler.c Version 2.0 © Copyright 1990 Jaba Development Author : Jan van den Baard Purpose: handling of menu and keyboard events *----------------------------------------------------------------------*/ extern struct Menu Titles[]; extern struct Screen *MainScreen; extern struct Window *MainWindow; extern struct RastPort *MainRP; extern struct GadgetList Gadgets; extern USHORT FrontPen, BackPen, GadgetCount, BackFill; extern BOOL Saved, REQUESTER, WORKBENCH, WBSCREEN; extern UBYTE wbb[20]; /* * quit if the anwser is yes */ VOID quit() { BOOL Quit = FALSE; if(Saved == FALSE) { if(Ask("Your work isn't saved !","Quit anyway ?") == TRUE) Quit = TRUE; } else { if(Ask("Are you sure you","want to Quit ?") == TRUE) Quit = TRUE; } if(Quit == TRUE) close_up(NULL); } /* * handle the menu events (drag selections possible) */ VOID handle_menus(menu_code) USHORT menu_code; { USHORT menu, item, sub, next_select; struct MenuItem *select, *ItemAddress(); while(menu_code != MENUNULL) { select = ItemAddress(&Titles[0],menu_code); menu = MENUNUM(menu_code); item = ITEMNUM(menu_code); sub = SUBNUM(menu_code); switch(menu) { case 0: switch(item) { case 0: About(); break; case 1: new(); break; case 2: ReadBinGadgets(FALSE); break; case 3: WriteBinGadgets(); break; case 4: switch(sub) { case 0: WriteCGadgets(); break; case 1: WriteAsmGadgets(); break; } break; case 5: preferences(); break; case 6: if(WORKBENCH == TRUE) { if((WORKBENCH = (BOOL)OpenWorkBench())) { strcpy((char *)&wbb,"Close WorkBench"); ScreenToFront(MainScreen); } else Error("Can't open WorkBench !"); } else { if((WORKBENCH = CloseWorkBench())) strcpy((char *)&wbb,"Open WorkBench"); else Error("Can't close WorkBench !"); } break; case 7: quit(); break; break; } break; case 1: switch(item) { case 0: move_gadget(); break; case 1: size_gadget(); break; case 2: copy_gadget(); break; case 3: delete(); break; case 4: edit(); break; case 5: switch(sub) { case 0: add_text(0); break; case 1: modify(0); break; case 2: text_delete(0); break; case 3: move_text(0); break; } break; case 6: switch(sub) { case 0: render(); break; case 1: sel_render(); break; case 2: delete_images(); break; } break; case 7: do_cmap(); break; case 8: disable_window(); SetPalette(10,20,MainScreen); enable_window(); break; case 9: refresh(); break; case 10: switch(sub) { case 0: if(REQUESTER == FALSE) set_flags(); else { BackFill = BackPen; refresh(); } break; case 1: if(REQUESTER == FALSE) idcmp(); else add_text(2); break; case 2: if(REQUESTER == FALSE) add_text(1); else modify(2); break; case 3: if(REQUESTER == FALSE) modify(1); else text_delete(2); break; case 4: if(REQUESTER == FALSE) text_delete(1); else move_text(2); break; case 5: move_text(1); break; } break; } break; case 2: FrontPen = (USHORT)item; break; case 3: BackPen = (USHORT)item; break; default: break; } menu_code = select->NextSelect; } } /* * handle the keyboard events */ VOID handle_keys(key_code,qualifier) USHORT key_code, qualifier; { if((key_code & IECODE_UP_PREFIX) != IECODE_UP_PREFIX) { switch(qualifier) { case IEQUALIFIER_RELATIVEMOUSE: case IEQUALIFIER_RELATIVEMOUSE+IEQUALIFIER_CAPSLOCK: switch(key_code) { case F1: move_gadget(); break; case F2: size_gadget(); break; case F3: copy_gadget(); break; case F4: delete(); break; case F5: edit(); break; case F6: add_text(0); break; case F7: render(); break; case F8: sel_render(); break; case F9: if(NOT WBSCREEN) do_cmap(); break; case F10: if(NOT WBSCREEN) { disable_window(); SetPalette(10,20,MainScreen); enable_window(); } break; case HELP: refresh(); break; } break; } } }