/* options_util.qc Utilities for the options menu Copyright (C) 2002 Robin Redeker <elmex@x-paste.de> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to: Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA */ float time; // holds current time /* opt_cursor function for drawing the cursor */ void (integer x, integer y) opt_cursor = { // use time becaus we want a nice rotaing cursor Draw_Character (x, y, 12 + (integer (time * 4) & 1)); }; /* draw_perc_bar Draws a percentage bar by giving its size (in chars), x and y position and the percentage from 0 to 100 */ void (integer x, integer y, integer size, integer perc_val) draw_perc_bar = { local float perc; local integer i; if(perc_val > 100) { perc_val = 100; } else if(perc_val < 0) { perc_val = 0; } perc = itof(perc_val) / ( 100 / itof(size) ); /* 128, 129, 130 and 131 are special characters for scrollbars */ Draw_Character (x, y, 128); // draw beginning for (i = 0; i <= size; i++) { Draw_Character (x + ((i+1)*8), y, 129); // draw the borders } Draw_Character (x + ((i+1)*8), y, 130); // draw last char Draw_Character (x + ((ftoi(perc) + 1) * 8), y, 131); // draw slider }; /* draw_item Draws a item with a specific spacing between label and value to positions x, y. Used as helper function for draw_val_item. */ void (integer x, integer y, integer spacing, string spacechar, string label, string valstr) draw_item = { local integer i; Draw_String (x, y, label); for (i = x + String_Len(label)*8; i < (x+spacing); i+=8) { Draw_String (i, y, spacechar); } Draw_String (x + spacing, y, valstr); }; /* draw_val_item Draws a nice menu item. Use this function for a consistent look of menu items! Example: <Label>.....:<valstr> spacing are the number of the points to put */ void (integer x, integer y, integer spacing, string label, string valstr) draw_val_item = { draw_item (x, y, spacing, ".", label, ":" + valstr); }; /* to_percentage Calculates the percentage of a value relative to a min and max value. */ integer (float min, float max, float val) to_percentage = { local integer perc; local float max_v = (max-min); val -= min; if(val > max_v) { val = max_v; } if(val < 0) { val = 0; } perc = ftoi((val/max_v) * 100); return perc; }; /* min_max_cnt Increases or decreases a value by take care of the bordervalues. min, max are the borders. step is the step by in-/de-creasing. cntflag should be true for increasing and false for decreasing */ float (float min, float max, float step, float val, integer cntflag) min_max_cnt = { if(cntflag) { val += step; } else { val -= step; } if(val > max) { val = max; } else if(val < min) { val = min; } return val; };