home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / desklib / examples / DeskLib / Examples / Widget5 / !Widget5 / c / Create < prev    next >
Encoding:
Text File  |  1995-05-01  |  7.1 KB  |  229 lines

  1. /************************************************************************
  2.  *                                                                      *
  3.  *        File: Create.c                                                *
  4.  *                                                                      *
  5.  *     Purpose: Provides window to create a blank image of a certain    *
  6.  *              size in any of the image banks.                         *
  7.  *                                                                      *
  8.  ************************************************************************/
  9.  
  10. #include "DeskLib:WimpSWIs.h"          /* Low-level WIMP commands         */
  11. #include "DeskLib:Window.h"            /* Window handling automation      */
  12. #include "DeskLib:Core.h"              /* usefull core functions          */
  13. #include "DeskLib:Error.h"             /* Error despatcher                */
  14. #include "DeskLib:Event.h"             /* Event despatcher                */
  15. #include "DeskLib:EventMsg.h"          /* Wimp Message event dispatcher   */
  16. #include "DeskLib:File.h"              /* Low level file handling         */
  17. #include "DeskLib:Msgs.h"              /* Message translation code        */
  18. #include "DeskLib:Resource.h"          /* Handles finding resource files  */
  19. #include "DeskLib:Sound.h"             /* Beep!                           */
  20. #include "DeskLib:Template.h"          /* Template loading and caching    */
  21. #include "DeskLib:Icon.h"              /* Icon handling automation        */
  22. #include "DeskLib:Screen.h"            /* Caching screen info             */
  23. #include "DeskLib:Sprite.h"            /* Sprite handling routines        */
  24. #include "DeskLib:File.h"              /* OS file IO                      */
  25. #include "DeskLib:KeyCodes.h"          /* Codes for wimp returned keys    */
  26.  
  27. #include "HackLib:flex.h"              /* Flexable malloc                 */
  28.  
  29. #include "kernel.h"                    /* clib kernel functions           */
  30. #include "MySWIs.h"                    /* SWI no defs                     */
  31. #include "Create.h"
  32. #include "SpriteWin.h"
  33. #include "Misc.h"
  34. #include "CheckBanks.h"
  35.  
  36. #include <stdio.h>
  37. #include <stdlib.h>
  38. #include <string.h>
  39.  
  40. extern window_handle db;
  41.  
  42. static window_handle create = NULL;
  43.  
  44. static iconrange_block range;
  45.  
  46. /* icon numbers for image bank radios */
  47. #define image_MIN 12
  48. #define image_MAX 17
  49.  
  50. /* max and min image resolutions */
  51. #define res_MIN 1
  52. #define res_MAX 9999
  53.  
  54. /* default image resolution for create window */
  55. #define def_X 256
  56. #define def_Y 256
  57.  
  58. static BOOL Click_create(event_pollblock *event, void *reference);
  59. static BOOL Key_create(event_pollblock *event, void *reference);
  60. static BOOL Close_create(event_pollblock *event, void *reference);
  61. void close_create(BOOL ok, BOOL keepopen);
  62.  
  63. /******************************************************************************
  64.  *                              Click handlers                                *
  65.  ******************************************************************************/
  66.  
  67. static BOOL Click_create(event_pollblock *event, void *reference)
  68. {
  69.  
  70.   switch(event->data.mouse.icon)
  71.   {
  72.  
  73.     case 5: case 8: /* down X , Y */
  74.        if(event->data.mouse.button.data.select)
  75.           dec_icon(create, event->data.mouse.icon - 1, res_MIN);
  76.        if(event->data.mouse.button.data.adjust)
  77.           inc_icon(create, event->data.mouse.icon - 1, res_MAX);
  78.        break;
  79.       
  80.     case 6: case 9: /* up X , Y */
  81.        if(event->data.mouse.button.data.select)
  82.           inc_icon(create, event->data.mouse.icon - 2, res_MAX);
  83.        if(event->data.mouse.button.data.adjust)
  84.           dec_icon(create, event->data.mouse.icon - 2, res_MIN);
  85.        break;
  86.     
  87.     case 18: /* Cancel */
  88.        close_create(FALSE, FALSE);
  89.        break;
  90.  
  91.     case 19: /* Create */
  92.        close_create(TRUE, event->data.mouse.button.data.adjust);
  93.        break;
  94.       
  95.   }
  96.   return(TRUE);
  97. }
  98.  
  99. /******************************************************************************
  100.  *                             keypress handlers                              *
  101.  ******************************************************************************/
  102.  
  103. static BOOL Key_create(event_pollblock *event, void *reference)
  104. {
  105.  
  106.   if(event->data.key.caret.icon == 7){
  107.  
  108.      if(event->data.key.code == keycode_RETURN){
  109.         close_create(TRUE, FALSE);
  110.         return(TRUE);
  111.      }
  112.  
  113.   }
  114.  
  115.   return(TRUE);
  116.  
  117. }
  118.  
  119. /******************************************************************************
  120.  *                                open handlers                               *
  121.  ******************************************************************************/
  122.  
  123. extern void Create_Open(void)
  124. {
  125.  /*
  126.   * open create new image window on screen
  127.   */
  128.  
  129.   if(create == NULL){
  130.  
  131.     /*
  132.      * create the window
  133.      */
  134.      create = Window_Create("Create", template_TITLEMIN);
  135.  
  136.     /*
  137.      * set default values
  138.      */
  139.      Icon_SetInteger(create, 4, def_X);
  140.      Icon_SetInteger(create, 7, def_Y);
  141.  
  142.     /*
  143.      * initialise the available banks and start the scanning procedure
  144.      */
  145.      range.window = create;
  146.      range.min = image_MIN;
  147.      range.max = image_MAX;
  148.      CheckBanks_InstallScanFree(&range);
  149.  
  150.     /*
  151.      * install event handlers
  152.      */
  153.      Event_Claim(event_CLICK, create, event_ANY, Click_create, NULL);
  154.  
  155.      Event_Claim(event_KEY, create, event_ANY, Key_create, NULL);
  156.  
  157.      Event_Claim(event_CLOSE, create, event_ANY, Close_create, NULL);
  158.   }
  159.  
  160.   Window_Show(create, open_WHEREVER);
  161.  
  162.  /*
  163.   * put caret into X res icon
  164.   * REMINDER: call only works when the window is displayed
  165.   */
  166.   Icon_SetCaret(create, 4);
  167. }
  168.  
  169.  
  170. /******************************************************************************
  171.  *                               close handlers                               *
  172.  ******************************************************************************/
  173.  
  174. void close_create(BOOL ok, BOOL keepopen)
  175. {
  176.   wimp_point res;
  177.   int imageno;
  178.  
  179.   if(ok == TRUE){
  180.  
  181.      res.x = Icon_GetInteger(create, 4);
  182.      res.y = Icon_GetInteger(create, 7);
  183.  
  184.      imageno = image_getselect(&range);
  185.  
  186.      if(imageno != -1)
  187.         SpriteWin_Create(&res, imageno);
  188.   
  189.   }
  190.  
  191.   if(keepopen == FALSE){
  192.  
  193.      CheckBanks_RemoveScanFree(&range);
  194.      Window_Delete(create);
  195.      create = NULL;
  196.   }
  197.  
  198. }
  199.  
  200. /******************************************************************************/
  201.  
  202. static BOOL Close_create(event_pollblock *event, void *reference)
  203. {
  204.   close_create(FALSE, FALSE);
  205.  
  206.   return(FALSE);
  207. }
  208.  
  209. /******************************************************************************
  210.  *                           menu choice handlers                             *
  211.  ******************************************************************************/
  212.  
  213. /******************************************************************************
  214.  *                            extern routines                                 *
  215.  ******************************************************************************/
  216.  
  217. extern void Create_Init(void)
  218. {
  219.  /*
  220.   * initialisation to be done on startup
  221.   */
  222.  
  223. }
  224.  
  225. /******************************************************************************
  226.  *                             misc routines                                  *
  227.  ******************************************************************************/
  228.  
  229.