00001
00020 #include "mfcpch.h"
00021 #include "varblmen.h"
00022 #include "varblwin.h"
00023
00024
00025
00026
00027
00028
00029
00030
00031
00035 void BOOL_VAR_MENU_LEAF::event(
00036 COMMAND_WINDOW *cmd_win,
00037 FCOORD pt,
00038 INT32 *,
00039 char *
00040 ) {
00041 char msg[MAX_CHARS + 1];
00042
00043 if (box.contains (pt)) {
00044 var->set_value (!(BOOL8) * var);
00045 sprintf (msg, "TOGGLED: %s", var->info_str ());
00046 cmd_win->msg (msg);
00047 changed = TRUE;
00048 }
00049 }
00050
00051
00055 void BOOL_VAR_MENU_LEAF::plotx(
00056 WINDOW window
00057 ) {
00058 if ((BOOL8) * var) {
00059 text_color_index(window, BLACK);
00060 fill_color_index(window, WHITE);
00061 }
00062
00063 LEAF_MENU_NODE::plotx(window);
00064
00065 text_color_index(window, WHITE);
00066 fill_color_index(window, GREY);
00067 }
00068
00069
00073 void BOOL_VAR_MENU_LEAF::write_vars(
00074 FILE *fp,
00075 BOOL8 changes_only
00076 ) {
00077 if (!changes_only || changed) {
00078 fprintf (fp, "%-25s %-12s # %s\n",
00079 var->name_str (),
00080 (BOOL8) * var ? "TRUE" : "FALSE", var->info_str ());
00081 }
00082 }
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00096 void DBL_VAR_MENU_LEAF::event(
00097 COMMAND_WINDOW *cmd_win,
00098 FCOORD pt,
00099 INT32 *,
00100 char *
00101 ) {
00102 char ascii_new_value[MAX_CHARS + 1];
00103 const char *prompt_msg;
00104 double new_value;
00105
00106 if (box.contains (pt)) {
00107 sprintf (ascii_new_value, "%g", (double) *var);
00108 prompt_msg = var->info_str ();
00109 while (cmd_win->internal_prompt (prompt_msg, ascii_new_value)) {
00110 if (sscanf (ascii_new_value, "%lf", &new_value) == 1) {
00111 if (new_value != (double) *var) {
00112 var->set_value (new_value);
00113 cmd_win->msg ("Value changed");
00114 changed = TRUE;
00115 return;
00116 }
00117 else {
00118 cmd_win->msg ("Value unchanged");
00119 return;
00120 }
00121 }
00122 else
00123 prompt_msg = "Invalid value for double - try again or click";
00124 }
00125 }
00126 }
00127
00128
00132 void DBL_VAR_MENU_LEAF::write_vars(
00133 FILE *fp,
00134 BOOL8 changes_only
00135 ) {
00136 if (!changes_only || changed) {
00137 fprintf (fp, "%-25s %-12e # %s\n",
00138 var->name_str (), (double) *var, var->info_str ());
00139 }
00140 }
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00154 void INT_VAR_MENU_LEAF::event(
00155 COMMAND_WINDOW *cmd_win,
00156 FCOORD pt,
00157 INT32 *,
00158 char *
00159 ) {
00160 char ascii_new_value[MAX_CHARS + 1];
00161 const char *prompt_msg;
00162 INT32 new_value;
00163
00164 if (box.contains (pt)) {
00165 sprintf (ascii_new_value, INT32FORMAT, (INT32) * var);
00166 prompt_msg = var->info_str ();
00167 while (cmd_win->internal_prompt (prompt_msg, ascii_new_value)) {
00168 if (sscanf (ascii_new_value, INT32FORMAT, &new_value) == 1) {
00169 if (new_value != (INT32) * var) {
00170 var->set_value (new_value);
00171 cmd_win->msg ("Value changed");
00172 changed = TRUE;
00173 return;
00174 }
00175 else {
00176 cmd_win->msg ("Value unchanged");
00177 return;
00178 }
00179 }
00180 else
00181 prompt_msg = "Invalid value for INT32 - try again or click";
00182 }
00183 }
00184 }
00185
00186
00190 void INT_VAR_MENU_LEAF::write_vars(
00191 FILE *fp,
00192 BOOL8 changes_only
00193 ) {
00194 if (!changes_only || changed) {
00195 fprintf (fp, "%-25s %-12d # %s\n",
00196 var->name_str (), (int) *var, var->info_str ());
00197 }
00198 }
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00212 void STR_VAR_MENU_LEAF::event(
00213 COMMAND_WINDOW *cmd_win,
00214 FCOORD pt,
00215 INT32 *,
00216 char *
00217 ) {
00218 char ascii_new_value[MAX_CHARS + 1];
00219
00220 if (box.contains (pt)) {
00221 sprintf (ascii_new_value, "%s", ((STRING) * var).string ());
00222 if (cmd_win->internal_prompt (var->info_str (), ascii_new_value)) {
00223 if (strcmp (ascii_new_value, ((STRING) * var).string ()) != 0) {
00224 var->set_value (ascii_new_value);
00225 cmd_win->msg ("Value changed");
00226 changed = TRUE;
00227 return;
00228 }
00229 else {
00230 cmd_win->msg ("Value unchanged");
00231 return;
00232 }
00233 }
00234 }
00235 }
00236
00237
00241 void STR_VAR_MENU_LEAF::write_vars(
00242 FILE *fp,
00243 BOOL8 changes_only
00244 ) {
00245 if (!changes_only || changed) {
00246 fprintf (fp, "%-25s %-12s # %s\n",
00247 var->name_str (),
00248 ((STRING) * var).string (), var->info_str ());
00249 }
00250 }
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00264 void VAR_NON_RADIO_MENU::write_vars(
00265 FILE *fp,
00266 BOOL8 changes_only
00267 ) {
00268 MENU_L_IT it(&menu_list);
00269
00270 fprintf (fp, "\n");
00271 for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
00272 it.data ()->ptr->write_vars (fp, changes_only);
00273 }
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00287 void VAR_SUB_MENU::event(
00288 COMMAND_WINDOW *win,
00289 FCOORD pt,
00290 INT32 *,
00291 char *
00292 ) {
00293 if (box.contains (pt)) {
00294 if (sub_window != NULL)
00295 win->msg ("Sub menu is already open!");
00296 else {
00297 sub_window = new VARIABLES_WINDOW (name.string (), root, this);
00298 }
00299 }
00300 }