[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