home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d547 / powersource.lha / PowerSource / source.lzh / source / km_handler.c < prev    next >
C/C++ Source or Header  |  1991-09-15  |  10KB  |  237 lines

  1. /*----------------------------------------------------------------------*
  2.   km_handler.c Version 3.0  © Copyright 1990-91 Jaba Development
  3.  
  4.   Author : Jan van den Baard
  5.   Purpose: handling of menu and keyboard events
  6.  *----------------------------------------------------------------------*/
  7.  
  8. extern struct Menu        Titles[];
  9. extern struct Screen     *MainScreen;
  10. extern struct Window     *MainWindow;
  11. extern struct RastPort   *MainRP;
  12. extern struct NewWindow   nw_main;
  13. extern struct ge_prefs    prefs;
  14. extern struct GadgetList  Gadgets;
  15. extern USHORT             FrontPen, BackPen, GadgetCount, BackFill;
  16. extern USHORT             WDBackFill,LightSide,DarkSide;
  17. extern BOOL               Saved, REQUESTER, WORKBENCH, WBSCREEN;
  18. extern UBYTE              wbb[20];
  19.  
  20. /*
  21.  * quit if the anwser is yes
  22.  */
  23. VOID quit()
  24. {
  25.     BOOL Quit = FALSE;
  26.  
  27.     if(Saved == FALSE)
  28.     {   if(Ask("Your work isn't saved !","Quit anyway ?") == TRUE)
  29.             Quit = TRUE;
  30.     }
  31.     else
  32.     {   if(Ask("Are you sure you","want to Quit ?") == TRUE)
  33.             Quit = TRUE;
  34.     }
  35.     if(Quit == TRUE) close_up(NULL);
  36. }
  37.  
  38. /*
  39.  * handle the menu events (drag selections possible)
  40.  */
  41. VOID handle_menus(menu_code)
  42.     USHORT menu_code;
  43. {
  44.     USHORT menu, item, sub, next_select;
  45.     struct MenuItem *select, *ItemAddress();
  46.  
  47.     while(menu_code != MENUNULL)
  48.     {   select = ItemAddress(&Titles[0],menu_code);
  49.         menu = MENUNUM(menu_code);
  50.         item = ITEMNUM(menu_code);
  51.         sub  = SUBNUM(menu_code);
  52.         switch(menu)
  53.         {   case 0: switch(item)
  54.                     {   case 0: About();
  55.                                 break;
  56.                         case 1: new();
  57.                                 break;
  58.                         case 2: ReadBinGadgets(FALSE);
  59.                                 break;
  60.                         case 3: WriteBinGadgets();
  61.                                 break;
  62.                         case 4: switch(sub)
  63.                                 {   case 0: GenWhat(1);
  64.                                             break;
  65.                                     case 1: GenWhat(0);
  66.                                             break;
  67.                                 }
  68.                                 break;
  69.                         case 5: preferences();
  70.                                 break;
  71.                         case 6: if(WORKBENCH == TRUE)
  72.                                 { if((WORKBENCH = (BOOL)OpenWorkBench()))
  73.                                   {   strcpy((char *)&wbb,"Close WorkBench");
  74.                                       ScreenToFront(MainScreen);
  75.                                   }
  76.                                   else Error("Can't open WorkBench !");
  77.                                 }
  78.                                 else
  79.                                 {   if((WORKBENCH = CloseWorkBench()))
  80.                                         strcpy((char *)&wbb,"Open WorkBench");
  81.                                     else Error("Can't close WorkBench !");
  82.                                 }
  83.                                 break;
  84.                         case 7: quit();
  85.                                 break;
  86.                     }
  87.             break;
  88.             case 1: switch(item)
  89.                     {   case 0: move_gadget();
  90.                                 break;
  91.                         case 1: size_gadget();
  92.                                 break;
  93.                         case 2: copy_gadget();
  94.                                 break;
  95.                         case 3: delete();
  96.                                 break;
  97.                         case 4: edit();
  98.                                 break;
  99.                         case 5: switch(sub)
  100.                                 {   case 0: add_text(0);
  101.                                             break;
  102.                                     case 1: modify(0);
  103.                                             break;
  104.                                     case 2: text_delete(0);
  105.                                             break;
  106.                                     case 3: move_text(0);
  107.                                             break;
  108.                                 }
  109.                                 break;
  110.                         case 6: switch(sub)
  111.                                 {   case 0: render();
  112.                                             break;
  113.                                     case 1: sel_render();
  114.                                             break;
  115.                                     case 2: delete_images();
  116.                                             break;
  117.                                     case 3: image_bank(FALSE);
  118.                                             break;
  119.                                 }
  120.                                 break;
  121.                         case 7: do_cmap();
  122.                                 break;
  123.                         case 8: disable_window();
  124.                                 SetPalette(10,20,MainScreen);
  125.                                 enable_window();
  126.                                 break;
  127.                         case 9: refresh();
  128.                                 break;
  129.                         case 10: LightSide = FrontPen;
  130.                                  DarkSide  = BackPen;
  131.                                  break;
  132.                         case 11: switch(sub)
  133.                                  { case 0: if(REQUESTER == FALSE) set_flags();
  134.                                            else { BackFill = BackPen; refresh(); }
  135.                                            break;
  136.                                    case 1: if(REQUESTER == FALSE) idcmp();
  137.                                            else add_text(2);
  138.                                            break;
  139.                                    case 2: if(REQUESTER == FALSE) { WDBackFill = BackPen; refresh(); }
  140.                                            else modify(2);
  141.                                            break;
  142.                                    case 3: if(REQUESTER == FALSE) add_text(1);
  143.                                            else text_delete(2);
  144.                                            break;
  145.                                    case 4: if(REQUESTER == FALSE) modify(1);
  146.                                            else move_text(2);
  147.                                            break;
  148.                                    case 5: text_delete(1);
  149.                                            break;
  150.                                    case 6: move_text(1);
  151.                                            break;
  152.                                   }
  153.                                   break;
  154.                         case 12:  if(TestBits((ULONG)prefs.flag_bits,GP_COORDS)) {
  155.                                     Forbid();
  156.                                     MainWindow->Flags &= ~REPORTMOUSE;
  157.                                     Permit();
  158.                                     SetWindowTitles(MainWindow,(char *)-1L,(char *)TITLE);
  159.                                   }
  160.                                   MenuEditing();
  161.                                   if(TestBits((ULONG)prefs.flag_bits,GP_COORDS)) {
  162.                                     Forbid();
  163.                                     MainWindow->Flags |= REPORTMOUSE;
  164.                                     set_coords();
  165.                                     do_coords();
  166.                                     Permit();
  167.                                   }
  168.                                   break;
  169.                         case 13:  disable_window();
  170.                                   buisy();
  171.                                   SetLabels();
  172.                                   ok();
  173.                                   enable_window();
  174.                                   break;
  175.                     }
  176.                     break;
  177.             case 2: FrontPen = (USHORT)item; break;
  178.             case 3: BackPen  = (USHORT)item; break;
  179.             default: break;
  180.             }
  181.     menu_code = select->NextSelect;
  182.     }
  183. }
  184.  
  185. /*
  186.  * handle the keyboard events
  187.  */
  188. VOID handle_keys(key_code,qualifier)
  189.     USHORT key_code, qualifier;
  190. {
  191.     if((key_code & IECODE_UP_PREFIX) != IECODE_UP_PREFIX)
  192.     {   switch(qualifier)
  193.         {   case IEQUALIFIER_RELATIVEMOUSE:
  194.             case IEQUALIFIER_NUMERICPAD+IEQUALIFIER_RELATIVEMOUSE:
  195.             case IEQUALIFIER_RELATIVEMOUSE+IEQUALIFIER_CAPSLOCK:
  196.             case IEQUALIFIER_RELATIVEMOUSE+IEQUALIFIER_CAPSLOCK+IEQUALIFIER_NUMERICPAD:
  197.                 switch(key_code)
  198.                 {   case F1:   move_gadget();
  199.                                break;
  200.                     case F2:   size_gadget();
  201.                                break;
  202.                     case F3:   copy_gadget();
  203.                                break;
  204.                     case F4:   delete();
  205.                                break;
  206.                     case F5:   edit();
  207.                                break;
  208.                     case F6:   add_text(0);
  209.                                break;
  210.                     case F7:   render();
  211.                                break;
  212.                     case F8:   sel_render();
  213.                                break;
  214.                     case F9:   if(NOT WBSCREEN)
  215.                                    do_cmap();
  216.                                break;
  217.                     case F10:  if(NOT WBSCREEN) {
  218.                                    disable_window();
  219.                                    SetPalette(10,20,MainScreen);
  220.                                    enable_window();
  221.                                }
  222.                                break;
  223.                     case HELP: refresh();
  224.                                break;
  225.                     case 0x42: image_bank(FALSE);
  226.                                break;
  227.                     case 0x5d: HardCopy();
  228.                                break;
  229.                     case 0x0d: DumpID();
  230.                                break;
  231.                     default:   break;
  232.                 }
  233.                 break;
  234.         }
  235.     }
  236. }
  237.