display/varblwin.cpp

Go to the documentation of this file.
00001 
00020 #include "mfcpch.h"
00021 #include          <ctype.h>
00022 #include          "sbdmenu.h"
00023 #include          "submen.h"
00024 #include          "varblwin.h"
00025 #include          "notdll.h"
00026 
00027 const ERRCODE NOT_ASSOCIATED = "Cant find associated VARIABLES_WINDOW";
00028 
00029 ASSOCIATION_LIST
00030 VARIABLES_WINDOW::win_assocs;
00031                                  // for initialisation
00032 
00033 ELISTIZE (ASSOC)
00034 /* ==================
00035  *
00036  * ASSOCIATION_LIST class member functions
00037  *
00038  ==================== */
00042 void ASSOCIATION_LIST::add(                               //Window handle
00043                            WINDOW new_fd,
00044                            VARIABLES_WINDOW *new_var_win  //Associated var windw
00045                           ) {
00046   ASSOC_IT it(&associations); 
00047 
00048   it.add_to_end (new ASSOC (new_fd, new_var_win));
00049 }
00050 
00051 
00055 void ASSOCIATION_LIST::remove(           // delete assoc
00056                               WINDOW fd  //Window handle
00057                              ) {
00058   ASSOC_IT it(&associations); 
00059 
00060   if (!it.empty ()) {
00061     for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
00062       if (fd == it.data ()->fd) {
00063         it.extract ();
00064         return;
00065       }
00066     }
00067   }
00068   NOT_ASSOCIATED.error ("ASSOCIATION_LIST::remove", ABORT, NULL);
00069 }
00070 
00071 
00075 VARIABLES_WINDOW *ASSOCIATION_LIST::lookup(           //find assoc
00076                                            WINDOW fd  //Window handle
00077                                           ) {
00078   ASSOC_IT it(&associations); 
00079 
00080   if (!it.empty ()) {
00081     for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
00082       if (fd == it.data ()->fd)
00083         return it.data ()->var_win;
00084     }
00085   }
00086   NOT_ASSOCIATED.error ("ASSOCIATION_LIST::lookup", ABORT, NULL);
00087   return NULL;
00088 }
00089 
00090 
00094 void ASSOCIATION_LIST::plot_all() {  //plot all wins
00095   ASSOC_IT it(&associations); 
00096 
00097   if (!it.empty ()) {
00098     for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
00099       it.data ()->var_win->plot ();
00100     }
00101   }
00102 }
00103 
00104 
00108 void ASSOCIATION_LIST::turn_off_interrupts() { 
00109   ASSOC_IT it(&associations); 
00110 
00111   for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
00112                                  //disable interrupts
00113     set_click_handler (it.data ()->fd, NULL);
00114 }
00115 
00116 
00120 void ASSOCIATION_LIST::turn_on_interrupts(  //handler
00121                                           EVENT_HANDLER interrupt_proc) {
00122   ASSOC_IT it(&associations); 
00123 
00124   for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
00125     set_click_handler (it.data ()->fd, interrupt_proc);
00126 }
00127 
00128 
00129 /* ==================
00130  *
00131  * VARIABLES_WINDOW class member functions
00132  *
00133  ==================== */
00134 
00138 void VARIABLES_WINDOW::v_event(  //Process event
00139                                GRAPHICS_EVENT &g_event) {
00140   INT32 cmd_event;               //Command event type
00141   char new_value[80];            //of menu item
00142   char buff[80];
00143 
00144   COMMAND_WINDOW::event(g_event, &cmd_event, new_value); 
00145 
00146   switch (cmd_event) {
00147     case NULL_COMMAND:
00148       break;
00149     case WRITE_ALL_CMD:
00150       write_vars(new_value, FALSE); 
00151       break;
00152     case WRITE_CHANGED_CMD:
00153       write_vars(new_value, TRUE); 
00154       break;
00155     case KILL_WINDOW_CMD:
00156       win_assocs.remove (g_event.fd);
00157       destroy_window (g_event.fd);
00158       my_creator->child_closed ();
00159       delete this;
00160       break;
00161     default:
00162       sprintf (buff, "UNPROCESSED EVENT code " INT32FORMAT, cmd_event);
00163       msg(buff); 
00164   }
00165 }
00166 
00167 
00171 BOOL8 VARIABLES_WINDOW::internal_prompt(     //Prompt user
00172                        const char *msg_str,  //Prompt message
00173                        char *response_str    //Response & Default
00174                                        ) {
00175   BOOL8 result;
00176 
00177   win_assocs.turn_off_interrupts ();
00178   result = COMMAND_WINDOW::internal_prompt (msg_str, response_str);
00179   win_assocs.turn_on_interrupts (VARIABLES_WINDOW::interrupt_handler);
00180   set_click_handler(fd, VARIABLES_WINDOW::interrupt_handler); 
00181   return result;
00182 }
00183 
00184 
00189 void VARIABLES_WINDOW::interrupt_handler(      //for any windw
00190                       GRAPHICS_EVENT *g_event  //event recieved
00191                                         ) {
00192   (win_assocs.lookup (g_event->fd))->v_event (*g_event);
00193   //forward to
00194   overlap_picture_ops(TRUE); 
00195 }
00196 
00197 
00201 VARIABLES_WINDOW::VARIABLES_WINDOW (
00202                                  //constructor
00203 const char *name,                //window name
00204 MENU_ROOT * menu_root,           //menu
00205 VAR_SUB_MENU * creator           //who created me?
00206 ):
00207 COMMAND_WINDOW(name, menu_root) { 
00208   win_assocs.add (fd, this);
00209   my_creator = creator;
00210   set_click_handler(fd, VARIABLES_WINDOW::interrupt_handler); 
00211 }
00212 
00213 
00217 void VARIABLES_WINDOW::write_vars(                    //Build config file
00218                                   char *filename,     // in this file
00219                                   BOOL8 changes_only  // Changed vars only?
00220                                  ) {
00221   FILE *fp;                      //input file
00222   char msg_str[MAX_CHARS + 1];
00223   char response_str[MAX_CHARS + 1];
00224   char *token;                   //first response token
00225 
00226                                  //if file exists
00227   if ((fp = fopen (filename, "r")) != NULL) {
00228     fclose(fp); 
00229     sprintf (msg_str, "Overwrite file " "%s" "? (Y/N)", filename);
00230     response_str[0] = '\0';
00231     if (!prompt (msg_str, response_str))
00232       return;
00233     token = strtok (response_str, " ");
00234     if (tolower (token[0]) != 'y')
00235       return;                    // dont write
00236   }
00237 
00238   fp = fopen (filename, "w");    //can we write to it?
00239   if (fp == NULL) {
00240     sprintf (msg_str, "Cant write to file " "%s" "", filename);
00241     msg(msg_str); 
00242     return;
00243   }
00244   menu_root->write_vars (fp, changes_only);
00245   fclose(fp); 
00246 }

Generated on Wed Feb 28 19:49:11 2007 for Tesseract by  doxygen 1.5.1