home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / screen / m / modesel / !ModeSel_c_Windows < prev    next >
Encoding:
Text File  |  1994-06-20  |  7.5 KB  |  349 lines

  1. #include "wimp.h"
  2. #include "stdlib.h"
  3. #include "Modes.h"
  4. #include "hourglass.h"
  5. #include "os.h"
  6. #include "string.h"
  7. #include "math.h"
  8. #include "windows.h"
  9.  
  10. wimp_i make_icon (wimp_w win, int h, int l, int r,  char *valid, char *text);
  11. void col_icon( wimp_w window, wimp_i icon, wimp_colour fg, wimp_colour bg);
  12. void icon_type(wimp_w window, wimp_i icon, int type);
  13. wimp_i mode_icon(int mode, int barMode);
  14. wimp_i title_icon(int cols,int noIcons);
  15. void load_template (wimp_window **window, char* name);
  16.  
  17.  
  18.  
  19.  
  20. static wimp_window *info;
  21. static wimp_window *mode;
  22. static wimp_window *select;
  23. static wimp_w infoHdl;
  24. static wimp_w modeHdl;
  25. static wimp_w selectHdl;
  26.  
  27. static wimp_i lastIcon;
  28.  
  29. static int IconTop;
  30.  
  31. void load_template (wimp_window **window, char* name)
  32. {
  33.   char *data=NULL;
  34.   int used;
  35.   int data_used;
  36.  
  37.   wimp_load_template ( 0,
  38.                     data,
  39.                     data,
  40.               (font_f *) -1,
  41.                     name,
  42.                     0,
  43.                     &used,
  44.                     &data_used);
  45.  
  46.   *window = (wimp_window *) malloc (used);
  47.   data = (char *) malloc (data_used);
  48.  
  49.   wimp_load_template (*window,
  50.                     data,
  51.                     data+data_used,
  52.               (font_f *) -1,
  53.                     name,
  54.                     0,
  55.                     &used,
  56.                     &data_used);
  57. }
  58.  
  59.  
  60. void set_up_windows(void)
  61. {
  62.   wimp_open_template ("<ModeSel$Dir>.Templates");
  63.   load_template (&info, "prog_info");
  64.   load_template (&mode, "Modes");
  65.   load_template (&select, "Select");
  66.   wimp_close_template ();
  67.  
  68.   infoHdl=wimp_create_window (info);
  69.   modeHdl=wimp_create_window (mode);
  70.   selectHdl=wimp_create_window(select);
  71. }
  72.  
  73. wimp_w get_info(void)
  74. {
  75.   return(infoHdl);
  76. }
  77.  
  78. wimp_w get_mode(void)
  79. {
  80.   return(modeHdl);
  81. }
  82.  
  83. void update_sel_icons(int mode)
  84. {
  85.   int position = 0;
  86.   char res[12];
  87.  
  88.   while(get_mode_no(position) != mode) position++;
  89.  
  90.   set_sel_col(get_bpp(position));
  91.   get_res(position, res);
  92.   set_sel_res(res);
  93. }
  94.  
  95. wimp_w get_select(void)
  96. {
  97.   return(selectHdl);
  98. }
  99.  
  100. void handle_open_win(wimp_block *block)
  101. {
  102.   wimp_open_window (& block->open);
  103. }
  104.  
  105. void close_mode_window(bool *mainWindowOpen)
  106. {
  107.   int loop;
  108.   wimp_icon_state icon_state;
  109.  
  110.   icon_state.w = modeHdl;
  111.   for (loop=1; loop<= lastIcon; loop++)
  112.   {
  113.     icon_state.i = loop;
  114.  
  115.     wimp_get_icon_state (&icon_state);
  116.  
  117.     wimp_delete_icon(modeHdl,loop);
  118.     free (icon_state.icon.data.indirected_text.text);
  119.     free (icon_state.icon.data.indirected_text.validation);
  120.   }
  121.   lastIcon = 0;
  122.   wimp_close_window(modeHdl);
  123.   *mainWindowOpen = FALSE;
  124. }
  125.  
  126. void close_select_window(void)
  127. {
  128.   wimp_close_window(selectHdl);
  129. }
  130.  
  131.  
  132. void handle_close_win(wimp_block *block, bool *mainWindowOpen)
  133. {
  134.   wimp_close_window (block->close.w);
  135.   if (block->close.w == modeHdl)
  136.   {
  137.     close_mode_window(mainWindowOpen);
  138.   }
  139. }
  140.  
  141. void handle_redraw(wimp_block *block)
  142. {
  143.   wimp_draw redraw;
  144.   bool      more;
  145.  
  146.   redraw.w = block->redraw.w;
  147.   more =  wimp_redraw_window (&redraw);
  148.  
  149.   while (more)
  150.      more = wimp_get_rectangle (&redraw);
  151. }
  152.  
  153. wimp_i make_icon (wimp_w win, int h, int l, int r,  char *valid, char *text)
  154. {
  155.    wimp_i            cpy;
  156.    wimp_icon_create  icCre;
  157.  
  158.    icCre.icon.extent.y0 = IconTop-h;
  159.    icCre.icon.extent.y1 = IconTop;
  160.    icCre.icon.extent.x0 = l;
  161.    icCre.icon.extent.x1 = r;
  162.    icCre.icon.flags= 0x17019131;
  163.    icCre.w = win;
  164.  
  165.  
  166.    icCre.icon.data.indirected_text.text = (char *) malloc(30);
  167.    icCre.icon.data.indirected_text.validation = (char*) malloc(4);
  168.    sprintf(icCre.icon.data.indirected_text.validation, "%s", valid);
  169.    sprintf(icCre.icon.data.indirected_text.text, "%s", text);
  170.    cpy = wimp_create_icon (&icCre);
  171.  
  172.    return(cpy);
  173. }
  174.  
  175. void col_icon( wimp_w window, wimp_i icon, wimp_colour fg, wimp_colour bg)
  176. {
  177.    wimp_set_icon_state( window, icon,
  178.                         (fg << wimp_ICON_FG_COLOUR_SHIFT) | (bg << wimp_ICON_BG_COLOUR_SHIFT),
  179.                wimp_ICON_BG_COLOUR | wimp_ICON_FG_COLOUR );
  180. }
  181.  
  182. void icon_type(wimp_w window, wimp_i icon, int type)
  183. {
  184.    wimp_set_icon_state(window, icon, wimp_ICON_BUTTON_TYPE, type << wimp_ICON_BUTTON_TYPE_SHIFT );
  185. }
  186.  
  187.  
  188. wimp_i mode_icon(int mode, int barMode)
  189. {
  190.    char str[40];
  191.  
  192.    create_string (mode, str);
  193.  
  194.    set_icon(mode, make_icon(modeHdl,38,30,400,"",str));
  195.    IconTop-=38;
  196.  
  197.    if(hi_res(mode))
  198.          col_icon(modeHdl, get_icon(mode), wimp_COLOUR_DARK_GREEN, wimp_COLOUR_VERY_LIGHT_GREY);
  199.    if(get_mode_no(mode) == barMode)
  200.          col_icon(modeHdl, get_icon(mode), wimp_COLOUR_RED, wimp_COLOUR_VERY_LIGHT_GREY);
  201.  
  202.    return (get_icon(mode));
  203. }
  204.  
  205. wimp_i title_icon(int cols,int noIcons)
  206. {
  207.    char         str[20];
  208.    wimp_i    icon;
  209.  
  210.    IconTop-=45;
  211.  
  212.    icon= make_icon(modeHdl, ((noIcons+1)*38),10,410,"R4","");
  213.    IconTop+=19;
  214.  
  215.    icon_type(modeHdl, icon, wimp_BUTTON_NEVER);
  216.    wimp_set_icon_state( modeHdl, icon, wimp_ICON_BORDER, wimp_ICON_BORDER);
  217.  
  218.    sprintf(str,"%d Colour Modes",cols);
  219.    icon = make_icon(modeHdl, 38, 35, (strlen(str)*16)+45, "", str);
  220.    IconTop-=38;
  221.  
  222.    col_icon(modeHdl, icon, wimp_COLOUR_DARK_BLUE, wimp_COLOUR_VERY_LIGHT_GREY);
  223.    icon_type(modeHdl, icon, wimp_BUTTON_NEVER);
  224.  
  225.    return (icon);
  226. }
  227.  
  228.  
  229. void create_mode_icons(int barMode, int *Opt)
  230. {
  231.    int Loop, found=0, OptLoop, Bpp,NoIcons;
  232.    os_box extent;
  233.  
  234.    IconTop = -60;
  235.  
  236.    for(Loop=0; Loop<128 ;Loop++)
  237.       set_icon(Loop,(wimp_i) -1);
  238.  
  239.    Bpp=1;
  240.    for (OptLoop=0; OptLoop<=3; OptLoop++)
  241.    {
  242.       if (Opt[OptLoop]!=0)
  243.       {
  244.          NoIcons=0;
  245.          for (Loop=0; Loop<total_modes(); Loop++)
  246.             if (get_bpp(Loop) == Bpp) NoIcons++;
  247.  
  248.          lastIcon = title_icon((int) pow(2,Bpp),NoIcons);
  249.          found++;
  250.  
  251.          for (Loop=0; Loop < total_modes() ; Loop++)
  252.          {
  253.             if (get_bpp(Loop) == Bpp)
  254.             {
  255.                found++;
  256.                lastIcon = mode_icon(Loop,barMode);
  257.             }
  258.          }
  259.       }
  260.       Bpp=Bpp*2;
  261.    }
  262.  
  263.    extent.x0 = 0;
  264.    extent.y0 = IconTop-30;
  265.    extent.y1 = 0;
  266.    extent.x1 = 420;
  267.  
  268.    wimp_set_extent (modeHdl, &extent);
  269. }
  270.  
  271. void update_mode_icons(int oldMode, int newMode)
  272. {
  273.   int position;
  274.  
  275.   for (position=0; position<128; position++)
  276.   {
  277.     if (get_mode_no(position) == oldMode)
  278.     {
  279.       if(hi_res(position))
  280.          col_icon(modeHdl, get_icon(position), wimp_COLOUR_DARK_GREEN, wimp_COLOUR_VERY_LIGHT_GREY);
  281.       else
  282.          col_icon(modeHdl, get_icon(position), wimp_COLOUR_BLACK, wimp_COLOUR_VERY_LIGHT_GREY);
  283.     }
  284.  
  285.     if (get_mode_no(position) == newMode)
  286.     {
  287.       col_icon(modeHdl, get_icon(position), wimp_COLOUR_RED, wimp_COLOUR_VERY_LIGHT_GREY);
  288.     }
  289.  
  290.  
  291.   }
  292. }
  293.  
  294. void set_sel_col(int selBpp)
  295. {
  296.   wimp_icon_state icon_state;
  297.  
  298.   icon_state.i = selCol;
  299.   icon_state.w = selectHdl;
  300.   wimp_get_icon_state (&icon_state);
  301.  
  302.   sprintf (icon_state.icon.data.indirected_text.text,"%d colours",(int) pow((double)2, (double) selBpp));
  303.   wimp_set_icon_state (selectHdl, selCol, 0, 0);
  304. }
  305.  
  306. int get_sel_bpp(void)
  307. {
  308.   int col;
  309.   wimp_icon_state icon_state;
  310.  
  311.   icon_state.i = selCol;
  312.   icon_state.w = selectHdl;
  313.   wimp_get_icon_state (&icon_state);
  314.  
  315.   col =atoi(icon_state.icon.data.indirected_text.text);
  316.   switch(col)
  317.   {
  318.     case 2   :   return(1); break;
  319.     case 4   :   return(2); break;
  320.     case 16  :   return(4); break;
  321.     case 256 :   return(8); break;
  322.     default  :   return(1);
  323.   }
  324. }
  325.  
  326.  
  327. void set_sel_res(char *resStr)
  328. {
  329.   wimp_icon_state icon_state;
  330.  
  331.   icon_state.i = selRes;
  332.   icon_state.w = selectHdl;
  333.   wimp_get_icon_state (&icon_state);
  334.  
  335.   sprintf (icon_state.icon.data.indirected_text.text,"%s",resStr);
  336.   wimp_set_icon_state (selectHdl, selRes, 0, 0);
  337. }
  338.  
  339. char* get_sel_res_str(void)
  340. {
  341.   wimp_icon_state icon_state;
  342.  
  343.   icon_state.i = selRes;
  344.   icon_state.w = selectHdl;
  345.   wimp_get_icon_state (&icon_state);
  346.  
  347.   return(icon_state.icon.data.indirected_text.text);
  348. }
  349.