[Lemon-commits] ladanyi: r3359 - glemon/branches/akos

Lemon SVN svn at lemon.cs.elte.hu
Wed Nov 7 04:10:04 CET 2007


Author: ladanyi
Date: Wed Nov  7 04:10:03 2007
New Revision: 3359

Removed:
   glemon/branches/akos/file_import_dialog.glade
   glemon/branches/akos/file_import_window.cc
   glemon/branches/akos/file_import_window.h
Modified:
   glemon/branches/akos/file_import_dialog.cc
   glemon/branches/akos/file_import_dialog.h
   glemon/branches/akos/mapstorage.cc

Log:
New FileImportDialog.

Modified: glemon/branches/akos/file_import_dialog.cc
==============================================================================
--- glemon/branches/akos/file_import_dialog.cc	(original)
+++ glemon/branches/akos/file_import_dialog.cc	Wed Nov  7 04:10:03 2007
@@ -1,38 +1,556 @@
 #include "file_import_dialog.h"
 #include <gtkmm/dialog.h>
 #include <gtkmm/stock.h>
+#include <gtkmm/notebook.h>
+#include <gtkmm/messagedialog.h>
+#include <iostream>
 
-FileImportDialog::FileImportDialog() :
-  rbNodeCoordOneMap(0),
-  rbNodeCoordTwoMaps(0),
-  rbArrowCoordOneMap(0),
-  rbArrowCoordTwoMaps(0),
-  cbNodeCoordOneMap(0),
-  cbNodeCoordTwoMaps1(0),
-  cbNodeCoordTwoMaps2(0),
-  cbArrowCoordOneMap(0),
-  cbArrowCoordTwoMaps1(0),
-  cbArrowCoordTwoMaps2(0)
+FileImportDialog::FileImportDialog(ImportData* d) :
+  p_data(d)
 {
-  refXml = Gnome::Glade::Xml::create("file_import_dialog.glade");
-  refXml->reparent_widget("notebook1", *get_vbox());
   add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
 
-  refXml->get_widget("radiobutton1", rbNodeCoordOneMap);
-  refXml->get_widget("radiobutton2", rbNodeCoordTwoMaps);
-  refXml->get_widget("radiobutton3", rbArrowCoordOneMap);
-  refXml->get_widget("radiobutton4", rbArrowCoordTwoMaps);
-
-  refXml->get_widget("combobox5", cbNodeCoordOneMap);
-  refXml->get_widget("combobox2", cbNodeCoordTwoMaps1);
-  refXml->get_widget("combobox1", cbNodeCoordTwoMaps2);
-
-  refXml->get_widget("combobox6", cbArrowCoordOneMap);
-  refXml->get_widget("combobox3", cbArrowCoordTwoMaps1);
-  refXml->get_widget("combobox4", cbArrowCoordTwoMaps2);
+  Gtk::VBox* pVBox = get_vbox();
+
+  Gtk::Notebook* nb = Gtk::manage(new Gtk::Notebook);
+  pVBox->pack_start(*nb, Gtk::PACK_EXPAND_WIDGET);
+
+  Gtk::VBox* vbNodeMaps = Gtk::manage(new Gtk::VBox(false, 18));
+  vbNodeMaps->set_border_width(12);
+
+  Gtk::VBox* vbEdgeMaps = Gtk::manage(new Gtk::VBox(false, 18));
+  vbEdgeMaps->set_border_width(12);
+
+  Gtk::VBox* vbSpecMaps = Gtk::manage(new Gtk::VBox(false, 18));
+  vbSpecMaps->set_border_width(12);
+
+  nb->append_page(*vbSpecMaps, "Special Maps");
+  nb->append_page(*vbNodeMaps, "Node Maps");
+  nb->append_page(*vbEdgeMaps, "Edge Maps");
+
+  // child widgets of vbSpecMaps
+  {
+    Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
+    vbSpecMaps->pack_start(*box1, Gtk::PACK_SHRINK);
+
+    {
+      Gtk::Label* label1 =
+        Gtk::manage(new Gtk::Label("<b>Node Coordinates</b>"));
+      label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
+      label1->set_use_markup();
+      box1->pack_start(*label1);
+
+      Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
+      box1->pack_start(*box2);
+
+      Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
+      box2->pack_start(*fill1, Gtk::PACK_SHRINK);
+
+      Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
+      box2->pack_start(*box3);
+
+      Gtk::VBox* box13 = Gtk::manage(new Gtk::VBox);
+      box3->pack_start(*box13);
+
+      rbNodeCoordNone.set_label("None");
+      Gtk::RadioButtonGroup group = rbNodeCoordNone.get_group();
+      box13->pack_start(rbNodeCoordNone);
+
+      Gtk::VBox* box4 = Gtk::manage(new Gtk::VBox);
+      box3->pack_start(*box4);
+
+      rbNodeCoordOneMap.set_label("One Map");
+      rbNodeCoordOneMap.set_group(group);
+      box4->pack_start(rbNodeCoordOneMap);
+
+      Gtk::HBox* box5 = Gtk::manage(new Gtk::HBox);
+      box4->pack_start(*box5);
+
+      Gtk::Label* fill2 = Gtk::manage(new Gtk::Label("    "));
+      box5->pack_start(*fill2, Gtk::PACK_SHRINK);
+
+      Gtk::VBox* box6 = Gtk::manage(new Gtk::VBox);
+      box5->pack_start(*box6);
+
+      Gtk::HBox* box7 = Gtk::manage(new Gtk::HBox);
+      box6->pack_start(*box7);
+
+      Gtk::Label* label2 = Gtk::manage(new Gtk::Label("(X, Y)"));
+      box7->pack_start(*label2, Gtk::PACK_SHRINK, 4);
+
+      box7->pack_start(cbNodeCoordOneMap, Gtk::PACK_EXPAND_WIDGET);
+
+
+      Gtk::VBox* box8 = Gtk::manage(new Gtk::VBox);
+      box3->pack_start(*box8);
+
+      rbNodeCoordTwoMaps.set_label("Two Maps");
+      rbNodeCoordTwoMaps.set_group(group);
+      box8->pack_start(rbNodeCoordTwoMaps);
+
+      Gtk::HBox* box9 = Gtk::manage(new Gtk::HBox);
+      box8->pack_start(*box9);
+
+      Gtk::Label* fill3 = Gtk::manage(new Gtk::Label("    "));
+      box9->pack_start(*fill3, Gtk::PACK_SHRINK);
+
+      Gtk::VBox* box10 = Gtk::manage(new Gtk::VBox);
+      box9->pack_start(*box10);
+
+      Gtk::HBox* box11 = Gtk::manage(new Gtk::HBox);
+      box10->pack_start(*box11);
+
+      Gtk::Label* label3 = Gtk::manage(new Gtk::Label("X"));
+      box11->pack_start(*label3, Gtk::PACK_SHRINK, 4);
+
+      box11->pack_start(cbNodeCoordTwoMaps1, Gtk::PACK_EXPAND_WIDGET);
+
+      Gtk::HBox* box12 = Gtk::manage(new Gtk::HBox);
+      box10->pack_start(*box12);
+
+      Gtk::Label* label4 = Gtk::manage(new Gtk::Label("Y"));
+      box12->pack_start(*label4, Gtk::PACK_SHRINK, 4);
+
+      box12->pack_start(cbNodeCoordTwoMaps2, Gtk::PACK_EXPAND_WIDGET);
+    }
+
+    {
+      Gtk::Label* label1 =
+        Gtk::manage(new Gtk::Label("<b>Arrow Coordinates</b>"));
+      label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
+      label1->set_use_markup();
+      box1->pack_start(*label1);
+
+      Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
+      box1->pack_start(*box2);
+
+      Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
+      box2->pack_start(*fill1, Gtk::PACK_SHRINK);
+
+      Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
+      box2->pack_start(*box3);
+
+      Gtk::VBox* box13 = Gtk::manage(new Gtk::VBox);
+      box3->pack_start(*box13);
+
+      rbArrowCoordNone.set_label("None");
+      Gtk::RadioButtonGroup group = rbArrowCoordNone.get_group();
+      box13->pack_start(rbArrowCoordNone);
+
+      Gtk::VBox* box4 = Gtk::manage(new Gtk::VBox);
+      box3->pack_start(*box4);
+
+      rbArrowCoordOneMap.set_label("One Map");
+      rbArrowCoordOneMap.set_group(group);
+      box4->pack_start(rbArrowCoordOneMap);
+
+      Gtk::HBox* box5 = Gtk::manage(new Gtk::HBox);
+      box4->pack_start(*box5);
+
+      Gtk::Label* fill2 = Gtk::manage(new Gtk::Label("    "));
+      box5->pack_start(*fill2, Gtk::PACK_SHRINK);
+
+      Gtk::VBox* box6 = Gtk::manage(new Gtk::VBox);
+      box5->pack_start(*box6);
+
+      Gtk::HBox* box7 = Gtk::manage(new Gtk::HBox);
+      box6->pack_start(*box7);
+
+      Gtk::Label* label2 = Gtk::manage(new Gtk::Label("(X, Y)"));
+      box7->pack_start(*label2, Gtk::PACK_SHRINK, 4);
+
+      box7->pack_start(cbArrowCoordOneMap, Gtk::PACK_EXPAND_WIDGET);
+
+
+      Gtk::VBox* box8 = Gtk::manage(new Gtk::VBox);
+      box3->pack_start(*box8);
+
+      rbArrowCoordTwoMaps.set_label("Two Maps");
+      rbArrowCoordTwoMaps.set_group(group);
+      box8->pack_start(rbArrowCoordTwoMaps);
+
+      Gtk::HBox* box9 = Gtk::manage(new Gtk::HBox);
+      box8->pack_start(*box9);
+
+      Gtk::Label* fill3 = Gtk::manage(new Gtk::Label("    "));
+      box9->pack_start(*fill3, Gtk::PACK_SHRINK);
+
+      Gtk::VBox* box10 = Gtk::manage(new Gtk::VBox);
+      box9->pack_start(*box10);
+
+      Gtk::HBox* box11 = Gtk::manage(new Gtk::HBox);
+      box10->pack_start(*box11);
+
+      Gtk::Label* label3 = Gtk::manage(new Gtk::Label("X"));
+      box11->pack_start(*label3, Gtk::PACK_SHRINK, 4);
+
+      box11->pack_start(cbArrowCoordTwoMaps1, Gtk::PACK_EXPAND_WIDGET);
+
+      Gtk::HBox* box12 = Gtk::manage(new Gtk::HBox);
+      box10->pack_start(*box12);
+
+      Gtk::Label* label4 = Gtk::manage(new Gtk::Label("Y"));
+      box12->pack_start(*label4, Gtk::PACK_SHRINK, 4);
+
+      box12->pack_start(cbArrowCoordTwoMaps2, Gtk::PACK_EXPAND_WIDGET);
+    }
+  }
+
+  // child widgets of vbNodeMaps
+  {
+  }
+
+  // child widgets of vbEdgeMaps
+  {
+  }
+
+  // fill in the ComboBoxes
+  typedef std::vector<std::string> StrVec;
+  for (StrVec::const_iterator it = p_data->node_map_names.begin();
+      it != p_data->node_map_names.end(); ++it)
+  {
+    cbNodeCoordTwoMaps1.append_text(*it);
+    cbNodeCoordTwoMaps2.append_text(*it);
+  }
+  for (StrVec::const_iterator it = p_data->edge_map_names.begin();
+      it != p_data->edge_map_names.end(); ++it)
+  {
+    cbArrowCoordTwoMaps1.append_text(*it);
+    cbArrowCoordTwoMaps2.append_text(*it);
+  }
+  for (StrVec::const_iterator it = p_data->xy_node_map_names.begin();
+      it != p_data->xy_node_map_names.end(); ++it)
+  {
+    cbNodeCoordOneMap.append_text(*it);
+  }
+  for (StrVec::const_iterator it = p_data->xy_edge_map_names.begin();
+      it != p_data->xy_edge_map_names.end(); ++it)
+  {
+    cbArrowCoordOneMap.append_text(*it);
+  }
+
+  if (p_data->isXYNodeMap("coord"))
+  {
+    cbNodeCoordOneMap.set_active_text("coord");
+  }
+  else if (p_data->isXYNodeMap("coords"))
+  {
+    cbNodeCoordOneMap.set_active_text("coords");
+  }
+  else if (p_data->isNodeMap("coord_x") &&
+           p_data->isNodeMap("coord_y"))
+  {
+    cbNodeCoordTwoMaps1.set_active_text("coord_x");
+    cbNodeCoordTwoMaps2.set_active_text("coord_y");
+  }
+  else if (p_data->isNodeMap("coords_x") &&
+           p_data->isNodeMap("coords_y"))
+  {
+    cbNodeCoordTwoMaps1.set_active_text("coords_x");
+    cbNodeCoordTwoMaps2.set_active_text("coords_y");
+  }
+  else if (p_data->isNodeMap("x") &&
+           p_data->isNodeMap("y"))
+  {
+    cbNodeCoordTwoMaps1.set_active_text("x");
+    cbNodeCoordTwoMaps2.set_active_text("y");
+  }
+
+  if (p_data->isXYEdgeMap("arrow"))
+  {
+    cbArrowCoordOneMap.set_active_text("arrow");
+  }
+  else if (p_data->isXYEdgeMap("arrows"))
+  {
+    cbArrowCoordOneMap.set_active_text("arrows");
+  }
+  else if (p_data->isXYEdgeMap("midpoint"))
+  {
+    cbArrowCoordOneMap.set_active_text("midpoint");
+  }
+  else if (p_data->isXYEdgeMap("midpoints"))
+  {
+    cbArrowCoordOneMap.set_active_text("midpoints");
+  }
+  else if (p_data->isXYEdgeMap("mid"))
+  {
+    cbArrowCoordOneMap.set_active_text("mid");
+  }
+  else if (p_data->isXYEdgeMap("mids"))
+  {
+    cbArrowCoordOneMap.set_active_text("mids");
+  }
+  else if (p_data->isEdgeMap("arrow_x") &&
+           p_data->isEdgeMap("arrow_y"))
+  {
+    cbArrowCoordTwoMaps1.set_active_text("arrow_x");
+    cbArrowCoordTwoMaps2.set_active_text("arrow_y");
+  }
+  else if (p_data->isEdgeMap("arrows_x") &&
+           p_data->isEdgeMap("arrows_y"))
+  {
+    cbArrowCoordTwoMaps1.set_active_text("arrows_x");
+    cbArrowCoordTwoMaps2.set_active_text("arrows_y");
+  }
+  else if (p_data->isEdgeMap("midpoint_x") &&
+           p_data->isEdgeMap("midpoint_y"))
+  {
+    cbArrowCoordTwoMaps1.set_active_text("midpoint_x");
+    cbArrowCoordTwoMaps2.set_active_text("midpoint_y");
+  }
+  else if (p_data->isEdgeMap("midpoints_x") &&
+           p_data->isEdgeMap("midpoints_y"))
+  {
+    cbArrowCoordTwoMaps1.set_active_text("midpoints_x");
+    cbArrowCoordTwoMaps2.set_active_text("midpoints_y");
+  }
+  else if (p_data->isEdgeMap("mid_x") &&
+           p_data->isEdgeMap("mid_y"))
+  {
+    cbArrowCoordTwoMaps1.set_active_text("mid_x");
+    cbArrowCoordTwoMaps2.set_active_text("mid_y");
+  }
+  else if (p_data->isEdgeMap("mids_x") &&
+           p_data->isEdgeMap("mids_y"))
+  {
+    cbArrowCoordTwoMaps1.set_active_text("mids_x");
+    cbArrowCoordTwoMaps2.set_active_text("mids_y");
+  }
+
+  {
+    if (cbNodeCoordOneMap.get_active_text() != "")
+      rbNodeCoordOneMap.set_active();
+    else if (cbNodeCoordTwoMaps1.get_active_text() != "")
+      rbNodeCoordTwoMaps.set_active();
+    else
+      rbNodeCoordNone.set_active();
+
+    if (cbArrowCoordOneMap.get_active_text() != "")
+      rbArrowCoordOneMap.set_active();
+    else if (cbArrowCoordTwoMaps1.get_active_text() != "")
+      rbArrowCoordTwoMaps.set_active();
+    else
+      rbArrowCoordNone.set_active();
+
+    onNodeCoordMapNumToggled();
+    onArrowCoordMapNumToggled();
+
+    rbNodeCoordOneMap.signal_toggled().connect(
+        sigc::mem_fun(*this, &FileImportDialog::onNodeCoordMapNumToggled));
+    rbNodeCoordTwoMaps.signal_toggled().connect(
+        sigc::mem_fun(*this, &FileImportDialog::onNodeCoordMapNumToggled));
+    rbArrowCoordOneMap.signal_toggled().connect(
+        sigc::mem_fun(*this, &FileImportDialog::onArrowCoordMapNumToggled));
+    rbArrowCoordTwoMaps.signal_toggled().connect(
+        sigc::mem_fun(*this, &FileImportDialog::onArrowCoordMapNumToggled));
+  }
+
+  signal_response().connect(
+      sigc::mem_fun(*this, &FileImportDialog::onResponse));
+
+  show_all_children();
+}
+
+void FileImportDialog::onNodeCoordMapNumToggled()
+{
+  if (rbNodeCoordOneMap.get_active())
+  {
+    cbNodeCoordOneMap.get_parent()->set_sensitive(true);
+    cbNodeCoordTwoMaps1.get_parent()->set_sensitive(false);
+    cbNodeCoordTwoMaps2.get_parent()->set_sensitive(false);
+  }
+  else if (rbNodeCoordTwoMaps.get_active())
+  {
+    cbNodeCoordOneMap.get_parent()->set_sensitive(false);
+    cbNodeCoordTwoMaps1.get_parent()->set_sensitive(true);
+    cbNodeCoordTwoMaps2.get_parent()->set_sensitive(true);
+  }
+  else if (rbNodeCoordNone.get_active())
+  {
+    cbNodeCoordOneMap.get_parent()->set_sensitive(false);
+    cbNodeCoordTwoMaps1.get_parent()->set_sensitive(false);
+    cbNodeCoordTwoMaps2.get_parent()->set_sensitive(false);
+  }
+}
+
+void FileImportDialog::onArrowCoordMapNumToggled()
+{
+  if (rbArrowCoordOneMap.get_active())
+  {
+    cbArrowCoordOneMap.get_parent()->set_sensitive(true);
+    cbArrowCoordTwoMaps1.get_parent()->set_sensitive(false);
+    cbArrowCoordTwoMaps2.get_parent()->set_sensitive(false);
+  }
+  else if (rbArrowCoordTwoMaps.get_active())
+  {
+    cbArrowCoordOneMap.get_parent()->set_sensitive(false);
+    cbArrowCoordTwoMaps1.get_parent()->set_sensitive(true);
+    cbArrowCoordTwoMaps2.get_parent()->set_sensitive(true);
+  }
+  else if (rbArrowCoordNone.get_active())
+  {
+    cbArrowCoordOneMap.get_parent()->set_sensitive(false);
+    cbArrowCoordTwoMaps1.get_parent()->set_sensitive(false);
+    cbArrowCoordTwoMaps2.get_parent()->set_sensitive(false);
+  }
 }
 
 FileImportDialog::~FileImportDialog()
 {
 }
+
+void FileImportDialog::onResponse(int id)
+{
+  if (id == Gtk::RESPONSE_OK)
+  {
+    if ((rbNodeCoordOneMap.get_active() &&
+          cbNodeCoordOneMap.get_active_text() == "") ||
+        (rbNodeCoordTwoMaps.get_active() &&
+         (cbNodeCoordTwoMaps1.get_active_text() == "" ||
+          cbNodeCoordTwoMaps2.get_active_text() == "")))
+    {
+      Gtk::MessageDialog mdialog("No node map selected.",
+          false, Gtk::MESSAGE_ERROR);
+      mdialog.run();
+      return;
+    }
+    else if (rbNodeCoordTwoMaps.get_active() &&
+             cbNodeCoordTwoMaps1.get_active_text() == 
+             cbNodeCoordTwoMaps2.get_active_text())
+    {
+      Gtk::MessageDialog mdialog(
+          "Same node map selected for both coordinates.",
+          false, Gtk::MESSAGE_ERROR);
+      mdialog.run();
+      return;
+    }
+    if ((rbArrowCoordOneMap.get_active() &&
+          cbArrowCoordOneMap.get_active_text() == "") ||
+        (rbArrowCoordTwoMaps.get_active() &&
+         (cbArrowCoordTwoMaps1.get_active_text() == "" ||
+          cbArrowCoordTwoMaps2.get_active_text() == "")))
+    {
+      Gtk::MessageDialog mdialog("No edge map selected.",
+          false, Gtk::MESSAGE_ERROR);
+      mdialog.run();
+      return;
+    }
+    else if (rbArrowCoordTwoMaps.get_active() &&
+             cbArrowCoordTwoMaps1.get_active_text() == 
+             cbArrowCoordTwoMaps2.get_active_text())
+    {
+      Gtk::MessageDialog mdialog(
+          "Same edge map selected for both coordinates.",
+          false, Gtk::MESSAGE_ERROR);
+      mdialog.run();
+      return;
+    }
+  }
+}
+
+FileImportDialog::ImportData::ImportData(
+    const std::vector<std::string>& _node_map_names,
+    const std::vector<std::string>& _edge_map_names) :
+  node_map_names(_node_map_names),
+  edge_map_names(_edge_map_names)
+{
+  typedef std::vector<std::string> StrVec;
+  {
+    StrVec xMaps;
+    StrVec yMaps;
+    // collect map names ending with ":x" and ":y"
+    for (StrVec::const_iterator it = node_map_names.begin();
+        it != node_map_names.end(); ++it)
+    {
+      if ((it->length() >= 3) &&
+          (it->substr(it->length()-2, it->length())  == ":x"))
+      {
+        xMaps.push_back(it->substr(0, it->length()-2));
+      }
+      if ((it->length() >= 3) &&
+          (it->substr(it->length()-2, it->length())  == ":y"))
+      {
+        yMaps.push_back(it->substr(0, it->length()-2));
+      }
+    }
+
+    for (StrVec::const_iterator it1 = xMaps.begin();
+        it1 != xMaps.end(); ++it1)
+    {
+      for (StrVec::const_iterator it2 = yMaps.begin();
+          it2 != yMaps.end(); ++it2)
+      {
+        if (*it1 == *it2) xy_node_map_names.push_back(*it1);
+      }
+    }
+  }
+  {
+    StrVec xMaps;
+    StrVec yMaps;
+    // collect map names ending with ":x" and ":y"
+    for (StrVec::const_iterator it = edge_map_names.begin();
+        it != edge_map_names.end(); ++it)
+    {
+      if ((it->length() >= 3) &&
+          (it->substr(it->length()-2, it->length())  == ":x"))
+      {
+        xMaps.push_back(it->substr(0, it->length()-2));
+      }
+      if ((it->length() >= 3) &&
+          (it->substr(it->length()-2, it->length())  == ":y"))
+      {
+        yMaps.push_back(it->substr(0, it->length()-2));
+      }
+    }
+
+    for (StrVec::const_iterator it1 = xMaps.begin();
+        it1 != xMaps.end(); ++it1)
+    {
+      for (StrVec::const_iterator it2 = yMaps.begin();
+          it2 != yMaps.end(); ++it2)
+      {
+        if (*it1 == *it2) xy_edge_map_names.push_back(*it1);
+      }
+    }
+  }
+}
+
+FileImportDialog::ImportData::~ImportData()
+{
+}
+
+bool FileImportDialog::ImportData::isXYNodeMap(const std::string& name)
+{
+  if (isNodeMap(name + ":x") && isNodeMap(name + ":y")) return true;
+  return false;
+}
+
+bool FileImportDialog::ImportData::isXYEdgeMap(const std::string& name)
+{
+  if (isEdgeMap(name + ":x") && isEdgeMap(name + ":y")) return true;
+  return false;
+}
+
+bool FileImportDialog::ImportData::isNodeMap(const std::string& name)
+{
+  if (contains(node_map_names, name)) return true;
+  return false;
+}
+
+bool FileImportDialog::ImportData::isEdgeMap(const std::string& name)
+{
+  if (contains(edge_map_names, name)) return true;
+  return false;
+}
+
+bool FileImportDialog::ImportData::contains(const std::vector<std::string>& vec,
+    const std::string& str)
+{
+  for (std::vector<std::string>::const_iterator it = vec.begin();
+      it != vec.end(); ++it)
+  {
+    if (*it == str) return true;
+  }
+  return false;
+}

Modified: glemon/branches/akos/file_import_dialog.h
==============================================================================
--- glemon/branches/akos/file_import_dialog.h	(original)
+++ glemon/branches/akos/file_import_dialog.h	Wed Nov  7 04:10:03 2007
@@ -4,28 +4,68 @@
 #include <libglademm/xml.h>
 #include <gtkmm/dialog.h>
 #include <gtkmm/radiobutton.h>
-#include <gtkmm/combobox.h>
+#include <gtkmm/comboboxtext.h>
+#include <gtkmm/sizegroup.h>
 
 class FileImportDialog : public Gtk::Dialog
 {
-  private:
-    Glib::RefPtr<Gnome::Glade::Xml> refXml;
+  public:
+    struct ImportData
+    {
+        ImportData(
+            const std::vector<std::string>& _node_map_names,
+            const std::vector<std::string>& _edge_map_names);
+
+        ~ImportData();
+
+        std::vector<std::string> node_map_names;
+        std::vector<std::string> edge_map_names;
+
+        std::vector<std::string> xy_node_map_names;
+        std::vector<std::string> xy_edge_map_names;
+
+        bool contains(
+            const std::vector<std::string>& vec,
+            const std::string& str);
+
+        std::string node_coord_map_x;
+        std::string node_coord_map_y;
+        std::string arrow_coord_map_x;
+        std::string arrow_coord_map_y;
+
+        bool node_coord_load_from_file;
+        bool arrow_coord_load_from_file;
+
+        bool isXYNodeMap(const std::string& name);
+        bool isXYEdgeMap(const std::string& name);
+        bool isNodeMap(const std::string& name);
+        bool isEdgeMap(const std::string& name);
+    };
+
+    ImportData* p_data;
+
+    Gtk::RadioButton rbNodeCoordNone;
+    Gtk::RadioButton rbNodeCoordOneMap;
+    Gtk::RadioButton rbNodeCoordTwoMaps;
+
+    Gtk::RadioButton rbArrowCoordNone;
+    Gtk::RadioButton rbArrowCoordOneMap;
+    Gtk::RadioButton rbArrowCoordTwoMaps;
+
+    Gtk::ComboBoxText cbNodeCoordOneMap;
+    Gtk::ComboBoxText cbNodeCoordTwoMaps1;
+    Gtk::ComboBoxText cbNodeCoordTwoMaps2;
 
-    Gtk::RadioButton* rbNodeCoordOneMap;
-    Gtk::RadioButton* rbNodeCoordTwoMaps;
+    Gtk::ComboBoxText cbArrowCoordOneMap;
+    Gtk::ComboBoxText cbArrowCoordTwoMaps1;
+    Gtk::ComboBoxText cbArrowCoordTwoMaps2;
 
-    Gtk::RadioButton* rbArrowCoordOneMap;
-    Gtk::RadioButton* rbArrowCoordTwoMaps;
+    void onNodeCoordMapNumToggled();
+    void onArrowCoordMapNumToggled();
 
-    Gtk::ComboBox* cbNodeCoordOneMap;
-    Gtk::ComboBox* cbNodeCoordTwoMaps1;
-    Gtk::ComboBox* cbNodeCoordTwoMaps2;
-
-    Gtk::ComboBox* cbArrowCoordOneMap;
-    Gtk::ComboBox* cbArrowCoordTwoMaps1;
-    Gtk::ComboBox* cbArrowCoordTwoMaps2;
+    void onResponse(int id);
   public:
-    FileImportDialog();
+    FileImportDialog(ImportData* d);
     ~FileImportDialog();
 };
 

Modified: glemon/branches/akos/mapstorage.cc
==============================================================================
--- glemon/branches/akos/mapstorage.cc	(original)
+++ glemon/branches/akos/mapstorage.cc	Wed Nov  7 04:10:03 2007
@@ -564,9 +564,42 @@
   else
   {
     // there is no gui section neither in the .lgf file nor in the .conf file
-    // TODO
     {
-      FileImportDialog fidialog;
+      LemonReader lreader(filename);
+      ContentReader content(lreader);
+      try
+      {
+        lreader.run();
+      }
+      catch (Exception& error)
+      {
+        Gtk::MessageDialog mdialog(error.what());
+        mdialog.run();
+        clear();
+        return 1;
+      }
+
+      if (content.nodeSetNum() < 1)
+      {
+        Gtk::MessageDialog mdialog("No nodeset found in file.");
+        mdialog.run();
+        clear();
+        return 1;
+      }
+
+      if (content.edgeSetNum() < 1)
+      {
+        Gtk::MessageDialog mdialog("No edgeset found in file.");
+        mdialog.run();
+        clear();
+        return 1;
+      }
+
+      const std::vector<std::string>& nodeMapNames = content.nodeSetMaps(0);
+      const std::vector<std::string>& edgeMapNames = content.edgeSetMaps(0);
+
+      FileImportDialog::ImportData data(nodeMapNames, edgeMapNames);
+      FileImportDialog fidialog(&data);
       fidialog.run();
     }
   }



More information about the Lemon-commits mailing list