gui/new_map_win.cc
author deba
Wed, 02 Nov 2005 15:25:13 +0000
changeset 1752 dce1f28ac595
parent 1597 15b51d278bf0
child 1814 0f02ced2e2ba
permissions -rw-r--r--
IterableIntMap

todo: documentation need
     1 #include <new_map_win.h>
     2 
     3 bool NewMapWin::closeIfEscapeIsPressed(GdkEventKey* e)
     4 {
     5   if(e->keyval==GDK_Escape)
     6   {
     7     hide();
     8   }
     9   return true;
    10 }
    11 
    12 NewMapWin::NewMapWin(const std::string& title, GraphDisplayerCanvas & grdispc):gdc(grdispc),node("Create NodeMap"),edge("Create EdgeMap")
    13 {
    14   set_title(title);
    15   set_default_size(200, 50);
    16 
    17   signal_key_press_event().connect(sigc::mem_fun(*this, &NewMapWin::closeIfEscapeIsPressed));
    18 
    19 
    20   //entries
    21   table=new Gtk::Table(3, 2, false);
    22 
    23   label=new Gtk::Label;
    24   label->set_text("Name of new map:");
    25   name.set_text("");
    26 
    27   (*table).attach(*label,0,1,0,1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    28   (*table).attach(name,1,2,0,1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    29 
    30   label=new Gtk::Label;
    31   label->set_text("Default value in the map:");
    32   default_value.set_text("0");
    33 
    34   (*table).attach(*label,0,1,1,2,Gtk::SHRINK,Gtk::SHRINK,10,3);
    35   (*table).attach(default_value,1,2,1,2,Gtk::SHRINK,Gtk::SHRINK,10,3);
    36 
    37   //node vs. edge map selector
    38   Gtk::RadioButton::Group group = node.get_group();
    39   edge.set_group(group);
    40 
    41   (*table).attach(node,0,1,2,3,Gtk::SHRINK,Gtk::SHRINK,10,3);
    42   (*table).attach(edge,1,2,2,3,Gtk::SHRINK,Gtk::SHRINK,10,3);
    43 
    44   vbox.pack_start(*table);
    45 
    46   //OK button
    47   button=new Gtk::Button("OK");
    48 
    49   button->signal_clicked().connect
    50     (
    51      sigc::mem_fun(*this, &NewMapWin::buttonPressed)
    52     );
    53 
    54 
    55   vbox.pack_start(*button);
    56 
    57   add(vbox);
    58 
    59   show_all_children();
    60 
    61 }
    62 
    63 void NewMapWin::showByPreChoose(bool itisedge)
    64 {
    65   if(itisedge)
    66     {
    67       edge.set_active();
    68     }
    69   else
    70     {
    71       node.set_active();
    72     }
    73   node.hide();
    74   edge.hide();
    75   show();
    76 }
    77 
    78 void NewMapWin::buttonPressed()
    79 {
    80   bool valid_double=true;
    81   int point_num=0;
    82 
    83   std::string def_val_str=default_value.get_text();
    84   char * def_val_ch=new char [def_val_str.length()];
    85   for(int i=0;i<(int)(def_val_str.length());i++)
    86     {
    87       if(((def_val_str[i]<'0')||(def_val_str[i]>'9'))&&(def_val_str[i]!='.'))
    88 	{
    89 	  valid_double=false;
    90 	}
    91       else
    92 	{
    93 	  if(def_val_str[i]=='.')
    94 	    {
    95 	      point_num++;
    96 	    }
    97 	}
    98       def_val_ch[i]=def_val_str[i];
    99     }
   100   
   101   double def_val=atof(def_val_ch);
   102 
   103   std::string mapname=name.get_text();
   104 
   105   if((point_num<=1)&&(valid_double)&&(!mapname.empty()))
   106     {
   107       int abortion=0;
   108       if(edge.get_active())
   109 	{
   110 	  abortion=gdc.addNewEdgeMap(def_val,mapname);
   111 	}
   112       else
   113 	{
   114 	  abortion=gdc.addNewNodeMap(def_val,mapname);
   115 	}
   116       if(!abortion)
   117 	{
   118 	  name.set_text("");
   119 	  default_value.set_text("0");
   120 	  edge.show();
   121 	  node.show();
   122 	  hide();
   123 	}
   124     }
   125 }
   126