save_details_widget.cc
author Akos Ladanyi <ladanyi@tmit.bme.hu>
Mon, 07 Jul 2008 15:20:43 +0100
changeset 3 2cc5ed6e6255
permissions -rw-r--r--
Use hg changeset hash instead of svn revision.
     1 #include "save_details_widget.h"
     2 #include "mapstorage.h"
     3 
     4 SaveDetailsWidget::SaveDetailsWidget(MapStorage* ms) :
     5   pMapStorage(ms)
     6 {
     7   Gtk::Notebook* nb = Gtk::manage(new Gtk::Notebook);
     8   pack_start(*nb, Gtk::PACK_EXPAND_WIDGET);
     9 
    10   nb->set_tab_pos(Gtk::POS_TOP);
    11 
    12   Gtk::VBox* vblueMaps = Gtk::manage(new Gtk::VBox(false, 18));
    13   vblueMaps->set_border_width(12);
    14 
    15   Gtk::VBox* vbArcMaps = Gtk::manage(new Gtk::VBox(false, 18));
    16   vbArcMaps->set_border_width(12);
    17 
    18   Gtk::VBox* vbSpecMaps = Gtk::manage(new Gtk::VBox(false, 18));
    19   vbSpecMaps->set_border_width(12);
    20 
    21   Gtk::VBox* vbGuiSect = Gtk::manage(new Gtk::VBox(false, 18));
    22   vbGuiSect->set_border_width(12);
    23 
    24   nb->append_page(*vbSpecMaps, "Special Maps");
    25   nb->append_page(*vblueMaps, "Node Maps");
    26   nb->append_page(*vbArcMaps, "Arc Maps");
    27   nb->append_page(*vbGuiSect, "GUI Section");
    28 
    29   // child widgets of vbSpecMaps
    30 
    31   {
    32     Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
    33     vbSpecMaps->pack_start(*box1, Gtk::PACK_SHRINK);
    34 
    35     Gtk::Label* lblNodeCoordMap =
    36       Gtk::manage(new Gtk::Label("<b>Node Coordinates</b>"));
    37     lblNodeCoordMap->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
    38     lblNodeCoordMap->set_use_markup();
    39     box1->pack_start(*lblNodeCoordMap, Gtk::PACK_SHRINK);
    40 
    41     Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
    42     box1->pack_start(*box2, Gtk::PACK_SHRINK);
    43 
    44     Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
    45     box2->pack_start(*fill1, Gtk::PACK_SHRINK);
    46 
    47     Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
    48     box2->pack_start(*box3, Gtk::PACK_SHRINK);
    49 
    50     rblueCoordGuiSection.set_label("Save to GUI section");
    51     rblueCoordNodesetSection.set_label("Save to Nodeset section");
    52     Gtk::RadioButtonGroup group = rblueCoordGuiSection.get_group();
    53     rblueCoordNodesetSection.set_group(group);
    54 
    55     box3->pack_start(rblueCoordGuiSection, Gtk::PACK_SHRINK);
    56     box3->pack_start(rblueCoordNodesetSection, Gtk::PACK_SHRINK);
    57 
    58     Gtk::HBox* box4 = Gtk::manage(new Gtk::HBox);
    59     box3->pack_start(*box4, Gtk::PACK_SHRINK);
    60 
    61     Gtk::Label* fill2 = Gtk::manage(new Gtk::Label("    "));
    62     box4->pack_start(*fill2, Gtk::PACK_SHRINK);
    63 
    64     Gtk::Table* table1 = Gtk::manage(new Gtk::Table(3, 2));
    65     box4->pack_start(*table1, Gtk::PACK_SHRINK);
    66 
    67     rblueCoordOneMap.set_label("As one map");
    68     rblueCoordTwoMaps.set_label("As two maps");
    69     group = rblueCoordOneMap.get_group();
    70     rblueCoordTwoMaps.set_group(group);
    71 
    72     table1->attach(rblueCoordOneMap, 0, 1, 0, 1);
    73     table1->attach(rblueCoordTwoMaps, 0, 1, 1, 2);
    74     table1->attach(entNodeCoordsOneMap, 1, 2, 0, 1);
    75     table1->attach(entNodeCoordsTwoMaps1, 1, 2, 1, 2);
    76     table1->attach(entNodeCoordsTwoMaps2, 1, 2, 2, 3);
    77 
    78     switch (pMapStorage->getNodeCoordsSaveDest())
    79     {
    80       case MapStorage::SpecMapSaveOpts::GUI_SECT:
    81         rblueCoordGuiSection.set_active();
    82         rblueCoordOneMap.set_sensitive(false);
    83         rblueCoordTwoMaps.set_sensitive(false);
    84         entNodeCoordsOneMap.set_sensitive(false);
    85         entNodeCoordsTwoMaps1.set_sensitive(false);
    86         entNodeCoordsTwoMaps2.set_sensitive(false);
    87         break;
    88       case MapStorage::SpecMapSaveOpts::NESET_SECT:
    89         rblueCoordNodesetSection.set_active();
    90         rblueCoordOneMap.set_sensitive(true);
    91         rblueCoordTwoMaps.set_sensitive(true);
    92         switch (pMapStorage->getNodeCoordsSaveMapNum())
    93         {
    94           case MapStorage::SpecMapSaveOpts::ONE_MAP:
    95             rblueCoordOneMap.set_active();
    96             entNodeCoordsOneMap.set_sensitive(true);
    97             entNodeCoordsTwoMaps1.set_sensitive(false);
    98             entNodeCoordsTwoMaps2.set_sensitive(false);
    99             break;
   100           case MapStorage::SpecMapSaveOpts::TWO_MAPS:
   101             rblueCoordTwoMaps.set_active();
   102             entNodeCoordsOneMap.set_sensitive(false);
   103             entNodeCoordsTwoMaps1.set_sensitive(true);
   104             entNodeCoordsTwoMaps2.set_sensitive(true);
   105             break;
   106         }
   107         break;
   108     }
   109 
   110     entNodeCoordsOneMap.set_text(pMapStorage->getNodeCoordsOneMapName());
   111     entNodeCoordsTwoMaps1.set_text(pMapStorage->getNodeCoordsTwoMaps1Name());
   112     entNodeCoordsTwoMaps2.set_text(pMapStorage->getNodeCoordsTwoMaps2Name());
   113 
   114     entNodeCoordsOneMap.signal_changed().connect(
   115         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordsOneMapName));
   116     entNodeCoordsTwoMaps1.signal_changed().connect(
   117         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordsTwoMaps1Name));
   118     entNodeCoordsTwoMaps2.signal_changed().connect(
   119         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordsTwoMaps2Name));
   120 
   121     rblueCoordGuiSection.signal_toggled().connect(
   122         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordSaveDestChanged));
   123     rblueCoordNodesetSection.signal_toggled().connect(
   124         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordSaveDestChanged));
   125     rblueCoordOneMap.signal_toggled().connect(
   126         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordMapNumChanged));
   127     rblueCoordTwoMaps.signal_toggled().connect(
   128         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeCoordMapNumChanged));
   129   }
   130 
   131   {
   132     Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
   133     vbSpecMaps->pack_start(*box1, Gtk::PACK_SHRINK);
   134 
   135     Gtk::Label* lblArrowCoordMap =
   136       Gtk::manage(new Gtk::Label("<b>Arrow Coordinates</b>"));
   137     lblArrowCoordMap->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
   138     lblArrowCoordMap->set_use_markup();
   139     box1->pack_start(*lblArrowCoordMap, Gtk::PACK_SHRINK);
   140 
   141     Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
   142     box1->pack_start(*box2, Gtk::PACK_SHRINK);
   143 
   144     Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
   145     box2->pack_start(*fill1, Gtk::PACK_SHRINK);
   146 
   147     Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
   148     box2->pack_start(*box3, Gtk::PACK_SHRINK);
   149 
   150     rbArrowCoordGuiSection.set_label("Save to GUI section");
   151     rbArrowCoordArcsetSection.set_label("Save to Arcset section");
   152     Gtk::RadioButtonGroup group = rbArrowCoordGuiSection.get_group();
   153     rbArrowCoordArcsetSection.set_group(group);
   154 
   155     box3->pack_start(rbArrowCoordGuiSection, Gtk::PACK_SHRINK);
   156     box3->pack_start(rbArrowCoordArcsetSection, Gtk::PACK_SHRINK);
   157 
   158     Gtk::HBox* box4 = Gtk::manage(new Gtk::HBox);
   159     box3->pack_start(*box4, Gtk::PACK_SHRINK);
   160 
   161     Gtk::Label* fill2 = Gtk::manage(new Gtk::Label("    "));
   162     box4->pack_start(*fill2, Gtk::PACK_SHRINK);
   163 
   164     Gtk::Table* table1 = Gtk::manage(new Gtk::Table(3, 2));
   165     box4->pack_start(*table1, Gtk::PACK_SHRINK);
   166 
   167     rbArrowCoordOneMap.set_label("As one map");
   168     rbArrowCoordTwoMaps.set_label("As two maps");
   169     group = rbArrowCoordOneMap.get_group();
   170     rbArrowCoordTwoMaps.set_group(group);
   171 
   172     table1->attach(rbArrowCoordOneMap, 0, 1, 0, 1);
   173     table1->attach(rbArrowCoordTwoMaps, 0, 1, 1, 2);
   174     table1->attach(entArrowCoordsOneMap, 1, 2, 0, 1);
   175     table1->attach(entArrowCoordsTwoMaps1, 1, 2, 1, 2);
   176     table1->attach(entArrowCoordsTwoMaps2, 1, 2, 2, 3);
   177 
   178     switch (pMapStorage->getArrowCoordsSaveDest())
   179     {
   180       case MapStorage::SpecMapSaveOpts::GUI_SECT:
   181         rbArrowCoordGuiSection.set_active();
   182         rbArrowCoordOneMap.set_sensitive(false);
   183         rbArrowCoordTwoMaps.set_sensitive(false);
   184         entArrowCoordsOneMap.set_sensitive(false);
   185         entArrowCoordsTwoMaps1.set_sensitive(false);
   186         entArrowCoordsTwoMaps2.set_sensitive(false);
   187         break;
   188       case MapStorage::SpecMapSaveOpts::NESET_SECT:
   189         rbArrowCoordArcsetSection.set_active();
   190         rbArrowCoordOneMap.set_sensitive(true);
   191         rbArrowCoordTwoMaps.set_sensitive(true);
   192         switch (pMapStorage->getArrowCoordsSaveMapNum())
   193         {
   194           case MapStorage::SpecMapSaveOpts::ONE_MAP:
   195             rbArrowCoordOneMap.set_active();
   196             entArrowCoordsOneMap.set_sensitive(true);
   197             entArrowCoordsTwoMaps1.set_sensitive(false);
   198             entArrowCoordsTwoMaps2.set_sensitive(false);
   199             break;
   200           case MapStorage::SpecMapSaveOpts::TWO_MAPS:
   201             rbArrowCoordTwoMaps.set_active();
   202             entArrowCoordsOneMap.set_sensitive(false);
   203             entArrowCoordsTwoMaps1.set_sensitive(true);
   204             entArrowCoordsTwoMaps2.set_sensitive(true);
   205             break;
   206         }
   207         break;
   208     }
   209 
   210     entArrowCoordsOneMap.set_text(pMapStorage->getArrowCoordsOneMapName());
   211     entArrowCoordsTwoMaps1.set_text(pMapStorage->getArrowCoordsTwoMaps1Name());
   212     entArrowCoordsTwoMaps2.set_text(pMapStorage->getArrowCoordsTwoMaps2Name());
   213 
   214     entArrowCoordsOneMap.signal_changed().connect(
   215         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordsOneMapName));
   216     entArrowCoordsTwoMaps1.signal_changed().connect(
   217         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordsTwoMaps1Name));
   218     entArrowCoordsTwoMaps2.signal_changed().connect(
   219         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordsTwoMaps2Name));
   220 
   221     rbArrowCoordGuiSection.signal_toggled().connect(
   222         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordSaveDestChanged));
   223     rbArrowCoordArcsetSection.signal_toggled().connect(
   224         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordSaveDestChanged));
   225     rbArrowCoordOneMap.signal_toggled().connect(
   226         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordMapNumChanged));
   227     rbArrowCoordTwoMaps.signal_toggled().connect(
   228         sigc::mem_fun(*this, &SaveDetailsWidget::onArrowCoordMapNumChanged));
   229   }
   230 
   231   // child widgets of vbGuiSect
   232 
   233   {
   234     Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
   235     vbGuiSect->pack_start(*box1, Gtk::PACK_SHRINK);
   236 
   237     Gtk::Label* lblGuiSectionSave =
   238       Gtk::manage(new Gtk::Label("<b>Save Destination</b>"));
   239     lblGuiSectionSave->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
   240     lblGuiSectionSave->set_use_markup();
   241     box1->pack_start(*lblGuiSectionSave, Gtk::PACK_SHRINK);
   242 
   243     rbLgfFile.set_label("Lgf file");
   244     rbConfFile.set_label("Conf file");
   245 
   246     Gtk::RadioButtonGroup group = rbLgfFile.get_group();
   247     rbConfFile.set_group(group);
   248 
   249     switch (pMapStorage->getGUIDataSaveLocation())
   250     {
   251       case MapStorage::LGF_FILE:
   252         rbLgfFile.set_active();
   253         break;
   254       case MapStorage::CONF_FILE:
   255         rbConfFile.set_active();
   256         break;
   257     }
   258 
   259     Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
   260     box1->pack_start(*box2, Gtk::PACK_SHRINK);
   261 
   262     Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
   263     box2->pack_start(*fill1, Gtk::PACK_SHRINK);
   264 
   265     Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
   266     box2->pack_start(*box3, Gtk::PACK_SHRINK);
   267 
   268     box3->pack_start(rbLgfFile, Gtk::PACK_SHRINK);
   269     box3->pack_start(rbConfFile, Gtk::PACK_SHRINK);
   270 
   271     rbLgfFile.signal_toggled().connect(
   272         sigc::mem_fun(*this, &SaveDetailsWidget::onGuiSectSaveDestChanged));
   273     rbConfFile.signal_toggled().connect(
   274         sigc::mem_fun(*this, &SaveDetailsWidget::onGuiSectSaveDestChanged));
   275   }
   276 
   277   // child widgets of vblueMaps
   278 
   279   {
   280     Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
   281     vblueMaps->pack_start(*box1, Gtk::PACK_SHRINK);
   282 
   283     Gtk::Label* label1 =
   284       Gtk::manage(new Gtk::Label("<b>Save Destination</b>"));
   285     label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
   286     label1->set_use_markup();
   287     box1->pack_start(*label1, Gtk::PACK_SHRINK);
   288 
   289     Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
   290     box1->pack_start(*box2, Gtk::PACK_SHRINK);
   291 
   292     Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
   293     box2->pack_start(*fill1, Gtk::PACK_SHRINK);
   294 
   295     Gtk::Frame* frame = Gtk::manage(new Gtk::Frame);
   296     box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET);
   297 
   298     Gtk::ScrolledWindow* swNodeMaps = Gtk::manage(new Gtk::ScrolledWindow);
   299     frame->add(*swNodeMaps);
   300 
   301     swNodeMaps->add(twNodeMaps);
   302 
   303     refNodeMapStore = Gtk::ListStore::create(NodeMapColumns);
   304 
   305     std::vector<std::string> node_maps = pMapStorage->getNodeMapList();
   306     for (std::vector<std::string>::const_iterator it = node_maps.begin();
   307         it != node_maps.end(); ++it)
   308     {
   309       Gtk::TreeModel::Row row = *(refNodeMapStore->append());
   310       row[NodeMapColumns.colName] = *it;
   311       switch (pMapStorage->getNodeMapSaveDest(*it))
   312       {
   313         case MapStorage::GUI_SECT:
   314           row[NodeMapColumns.colSaveToMainSect] = false;
   315           row[NodeMapColumns.colSaveToGuiSect] = true;
   316           break;
   317         case MapStorage::NESET_SECT:
   318           row[NodeMapColumns.colSaveToMainSect] = true;
   319           row[NodeMapColumns.colSaveToGuiSect] = false;
   320           break;
   321         case MapStorage::DONT_SAVE:
   322           row[NodeMapColumns.colSaveToMainSect] = false;
   323           row[NodeMapColumns.colSaveToGuiSect] = false;
   324           break;
   325       }
   326     }
   327 
   328     twNodeMaps.set_model(refNodeMapStore);
   329     twNodeMaps.append_column("Name", NodeMapColumns.colName);
   330     twNodeMaps.append_column_editable("Nodeset section",
   331         NodeMapColumns.colSaveToMainSect);
   332     twNodeMaps.append_column_editable("GUI section",
   333         NodeMapColumns.colSaveToGuiSect);
   334 
   335     swNodeMaps->set_size_request(-1, 200);
   336     swNodeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
   337 
   338     refNodeMapStore->signal_row_changed().connect(
   339         sigc::mem_fun(*this, &SaveDetailsWidget::onNodeMapRowChanged));
   340   }
   341 
   342   // child widgets of vbArcMaps
   343 
   344   {
   345     Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
   346     vbArcMaps->pack_start(*box1, Gtk::PACK_SHRINK);
   347 
   348     Gtk::Label* label1 =
   349       Gtk::manage(new Gtk::Label("<b>Save Destination</b>"));
   350     label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
   351     label1->set_use_markup();
   352     box1->pack_start(*label1, Gtk::PACK_SHRINK);
   353 
   354     Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
   355     box1->pack_start(*box2, Gtk::PACK_SHRINK);
   356 
   357     Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
   358     box2->pack_start(*fill1, Gtk::PACK_SHRINK);
   359 
   360     Gtk::Frame* frame = Gtk::manage(new Gtk::Frame);
   361     box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET);
   362 
   363     Gtk::ScrolledWindow* swArcMaps = Gtk::manage(new Gtk::ScrolledWindow);
   364     frame->add(*swArcMaps);
   365 
   366     swArcMaps->add(twArcMaps);
   367 
   368     refArcMapStore = Gtk::ListStore::create(ArcMapColumns);
   369 
   370     std::vector<std::string> arc_maps = pMapStorage->getArcMapList();
   371     for (std::vector<std::string>::const_iterator it = arc_maps.begin();
   372         it != arc_maps.end(); ++it)
   373     {
   374       Gtk::TreeModel::Row row = *(refArcMapStore->append());
   375       row[ArcMapColumns.colName] = *it;
   376       switch (pMapStorage->getArcMapSaveDest(*it))
   377       {
   378         case MapStorage::GUI_SECT:
   379           row[ArcMapColumns.colSaveToMainSect] = false;
   380           row[ArcMapColumns.colSaveToGuiSect] = true;
   381           break;
   382         case MapStorage::NESET_SECT:
   383           row[ArcMapColumns.colSaveToMainSect] = true;
   384           row[ArcMapColumns.colSaveToGuiSect] = false;
   385           break;
   386         case MapStorage::DONT_SAVE:
   387           row[ArcMapColumns.colSaveToMainSect] = false;
   388           row[ArcMapColumns.colSaveToGuiSect] = false;
   389           break;
   390       }
   391     }
   392 
   393     twArcMaps.set_model(refArcMapStore);
   394     twArcMaps.append_column("Name", ArcMapColumns.colName);
   395     twArcMaps.append_column_editable("Arcset section",
   396         ArcMapColumns.colSaveToMainSect);
   397     twArcMaps.append_column_editable("GUI section",
   398         ArcMapColumns.colSaveToGuiSect);
   399 
   400     swArcMaps->set_size_request(-1, 200);
   401     swArcMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
   402 
   403     refArcMapStore->signal_row_changed().connect(
   404         sigc::mem_fun(*this, &SaveDetailsWidget::onArcMapRowChanged));
   405   }
   406 
   407   show_all_children();
   408 }
   409 
   410 void SaveDetailsWidget::onGuiSectSaveDestChanged()
   411 {
   412   if (rbLgfFile.get_active())
   413   {
   414     pMapStorage->setGUIDataSaveLocation(MapStorage::LGF_FILE);
   415   }
   416   else if (rbConfFile.get_active())
   417   {
   418     pMapStorage->setGUIDataSaveLocation(MapStorage::CONF_FILE);
   419   }
   420 }
   421 
   422 void SaveDetailsWidget::onArcMapRowChanged(const Gtk::TreeModel::Path& path,
   423     const Gtk::TreeModel::iterator& iter)
   424 {
   425   Gtk::TreeModel::Row row = *iter;
   426   Glib::ustring map_name = row[ArcMapColumns.colName];
   427   if (row[ArcMapColumns.colSaveToMainSect] &&
   428       row[ArcMapColumns.colSaveToGuiSect])
   429   {
   430     if (pMapStorage->getArcMapSaveDest(map_name) == MapStorage::NESET_SECT)
   431     {
   432       pMapStorage->setArcMapSaveDest(map_name, MapStorage::GUI_SECT);
   433       row[ArcMapColumns.colSaveToMainSect] = false;
   434     }
   435     else
   436     {
   437       pMapStorage->setArcMapSaveDest(map_name, MapStorage::NESET_SECT);
   438       row[ArcMapColumns.colSaveToGuiSect] = false;
   439     }
   440   }
   441   else if (row[ArcMapColumns.colSaveToMainSect])
   442   {
   443     pMapStorage->setArcMapSaveDest(map_name, MapStorage::NESET_SECT);
   444   }
   445   else if (row[ArcMapColumns.colSaveToGuiSect])
   446   {
   447     pMapStorage->setArcMapSaveDest(map_name, MapStorage::GUI_SECT);
   448   }
   449   else
   450   {
   451     pMapStorage->setArcMapSaveDest(map_name, MapStorage::DONT_SAVE);
   452   }
   453 }
   454 
   455 void SaveDetailsWidget::onNodeMapRowChanged(const Gtk::TreeModel::Path& path,
   456     const Gtk::TreeModel::iterator& iter)
   457 {
   458   Gtk::TreeModel::Row row = *iter;
   459   Glib::ustring map_name = row[NodeMapColumns.colName];
   460   if (row[NodeMapColumns.colSaveToMainSect] &&
   461       row[NodeMapColumns.colSaveToGuiSect])
   462   {
   463     if (pMapStorage->getNodeMapSaveDest(map_name) == MapStorage::NESET_SECT)
   464     {
   465       pMapStorage->setNodeMapSaveDest(map_name, MapStorage::GUI_SECT);
   466       row[NodeMapColumns.colSaveToMainSect] = false;
   467     }
   468     else
   469     {
   470       pMapStorage->setNodeMapSaveDest(map_name, MapStorage::NESET_SECT);
   471       row[NodeMapColumns.colSaveToGuiSect] = false;
   472     }
   473   }
   474   else if (row[NodeMapColumns.colSaveToMainSect])
   475   {
   476     pMapStorage->setNodeMapSaveDest(map_name, MapStorage::NESET_SECT);
   477   }
   478   else if (row[NodeMapColumns.colSaveToGuiSect])
   479   {
   480     pMapStorage->setNodeMapSaveDest(map_name, MapStorage::GUI_SECT);
   481   }
   482   else
   483   {
   484     pMapStorage->setNodeMapSaveDest(map_name, MapStorage::DONT_SAVE);
   485   }
   486 }
   487 
   488 void SaveDetailsWidget::onNodeCoordSaveDestChanged()
   489 {
   490   if (rblueCoordGuiSection.get_active())
   491   {
   492     pMapStorage->setNodeCoordsSaveDest(MapStorage::SpecMapSaveOpts::GUI_SECT);
   493     rblueCoordOneMap.set_sensitive(false);
   494     rblueCoordTwoMaps.set_sensitive(false);
   495     entNodeCoordsOneMap.set_sensitive(false);
   496     entNodeCoordsTwoMaps1.set_sensitive(false);
   497     entNodeCoordsTwoMaps2.set_sensitive(false);
   498   }
   499   else if (rblueCoordNodesetSection.get_active())
   500   {
   501     pMapStorage->setNodeCoordsSaveDest(MapStorage::SpecMapSaveOpts::NESET_SECT);
   502     rblueCoordOneMap.set_sensitive(true);
   503     rblueCoordTwoMaps.set_sensitive(true);
   504     switch (pMapStorage->getNodeCoordsSaveMapNum())
   505     {
   506       case MapStorage::SpecMapSaveOpts::ONE_MAP:
   507         entNodeCoordsOneMap.set_sensitive(true);
   508         entNodeCoordsTwoMaps1.set_sensitive(false);
   509         entNodeCoordsTwoMaps2.set_sensitive(false);
   510         break;
   511       case MapStorage::SpecMapSaveOpts::TWO_MAPS:
   512         entNodeCoordsOneMap.set_sensitive(false);
   513         entNodeCoordsTwoMaps1.set_sensitive(true);
   514         entNodeCoordsTwoMaps2.set_sensitive(true);
   515         break;
   516     }
   517   }
   518 }
   519 
   520 void SaveDetailsWidget::onNodeCoordMapNumChanged()
   521 {
   522   if (rblueCoordOneMap.get_active())
   523   {
   524     pMapStorage->setNodeCoordsSaveMapNum(MapStorage::SpecMapSaveOpts::ONE_MAP);
   525     entNodeCoordsOneMap.set_sensitive(true);
   526     entNodeCoordsTwoMaps1.set_sensitive(false);
   527     entNodeCoordsTwoMaps2.set_sensitive(false);
   528   }
   529   else if (rblueCoordTwoMaps.get_active())
   530   {
   531     pMapStorage->setNodeCoordsSaveMapNum(MapStorage::SpecMapSaveOpts::TWO_MAPS);
   532     entNodeCoordsOneMap.set_sensitive(false);
   533     entNodeCoordsTwoMaps1.set_sensitive(true);
   534     entNodeCoordsTwoMaps2.set_sensitive(true);
   535   }
   536 }
   537 
   538 void SaveDetailsWidget::onNodeCoordsOneMapName()
   539 {
   540   pMapStorage->setNodeCoordsOneMapName(entNodeCoordsOneMap.get_text());
   541 }
   542 void SaveDetailsWidget::onNodeCoordsTwoMaps1Name()
   543 {
   544   pMapStorage->setNodeCoordsTwoMaps1Name(entNodeCoordsTwoMaps1.get_text());
   545 }
   546 void SaveDetailsWidget::onNodeCoordsTwoMaps2Name()
   547 {
   548   pMapStorage->setNodeCoordsTwoMaps2Name(entNodeCoordsTwoMaps2.get_text());
   549 }
   550 
   551 void SaveDetailsWidget::onArrowCoordSaveDestChanged()
   552 {
   553   if (rbArrowCoordGuiSection.get_active())
   554   {
   555     pMapStorage->setArrowCoordsSaveDest(MapStorage::SpecMapSaveOpts::GUI_SECT);
   556     rbArrowCoordOneMap.set_sensitive(false);
   557     rbArrowCoordTwoMaps.set_sensitive(false);
   558     entArrowCoordsOneMap.set_sensitive(false);
   559     entArrowCoordsTwoMaps1.set_sensitive(false);
   560     entArrowCoordsTwoMaps2.set_sensitive(false);
   561   }
   562   else if (rbArrowCoordArcsetSection.get_active())
   563   {
   564     pMapStorage->setArrowCoordsSaveDest(MapStorage::SpecMapSaveOpts::NESET_SECT);
   565     rbArrowCoordOneMap.set_sensitive(true);
   566     rbArrowCoordTwoMaps.set_sensitive(true);
   567     switch (pMapStorage->getArrowCoordsSaveMapNum())
   568     {
   569       case MapStorage::SpecMapSaveOpts::ONE_MAP:
   570         entArrowCoordsOneMap.set_sensitive(true);
   571         entArrowCoordsTwoMaps1.set_sensitive(false);
   572         entArrowCoordsTwoMaps2.set_sensitive(false);
   573         break;
   574       case MapStorage::SpecMapSaveOpts::TWO_MAPS:
   575         entArrowCoordsOneMap.set_sensitive(false);
   576         entArrowCoordsTwoMaps1.set_sensitive(true);
   577         entArrowCoordsTwoMaps2.set_sensitive(true);
   578         break;
   579     }
   580   }
   581 }
   582 
   583 void SaveDetailsWidget::onArrowCoordMapNumChanged()
   584 {
   585   if (rbArrowCoordOneMap.get_active())
   586   {
   587     pMapStorage->setArrowCoordsSaveMapNum(MapStorage::SpecMapSaveOpts::ONE_MAP);
   588     entArrowCoordsOneMap.set_sensitive(true);
   589     entArrowCoordsTwoMaps1.set_sensitive(false);
   590     entArrowCoordsTwoMaps2.set_sensitive(false);
   591   }
   592   else if (rbArrowCoordTwoMaps.get_active())
   593   {
   594     pMapStorage->setArrowCoordsSaveMapNum(MapStorage::SpecMapSaveOpts::TWO_MAPS);
   595     entArrowCoordsOneMap.set_sensitive(false);
   596     entArrowCoordsTwoMaps1.set_sensitive(true);
   597     entArrowCoordsTwoMaps2.set_sensitive(true);
   598   }
   599 }
   600 
   601 void SaveDetailsWidget::onArrowCoordsOneMapName()
   602 {
   603   pMapStorage->setArrowCoordsOneMapName(entArrowCoordsOneMap.get_text());
   604 }
   605 void SaveDetailsWidget::onArrowCoordsTwoMaps1Name()
   606 {
   607   pMapStorage->setArrowCoordsTwoMaps1Name(entArrowCoordsTwoMaps1.get_text());
   608 }
   609 void SaveDetailsWidget::onArrowCoordsTwoMaps2Name()
   610 {
   611   pMapStorage->setArrowCoordsTwoMaps2Name(entArrowCoordsTwoMaps2.get_text());
   612 }
   613 
   614 SaveDetailsWidget::~SaveDetailsWidget()
   615 {
   616 }