[Lemon-commits] ladanyi: r3430 - glemon/branches/akos
Lemon SVN
svn at lemon.cs.elte.hu
Wed Jan 2 16:27:11 CET 2008
Author: ladanyi
Date: Wed Jan 2 16:27:10 2008
New Revision: 3430
Modified:
glemon/branches/akos/file_import_dialog.cc
glemon/branches/akos/file_import_dialog.h
glemon/branches/akos/mapstorage.cc
Log:
Node and edge map import works now.
Modified: glemon/branches/akos/file_import_dialog.cc
==============================================================================
--- glemon/branches/akos/file_import_dialog.cc (original)
+++ glemon/branches/akos/file_import_dialog.cc Wed Jan 2 16:27:10 2008
@@ -3,6 +3,7 @@
#include <gtkmm/stock.h>
#include <gtkmm/notebook.h>
#include <gtkmm/messagedialog.h>
+#include <gtkmm/frame.h>
#include <iostream>
FileImportDialog::FileImportDialog(ImportData* d) :
@@ -213,10 +214,122 @@
// child widgets of vbNodeMaps
{
+ Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
+ vbNodeMaps->pack_start(*box1, Gtk::PACK_SHRINK);
+
+ Gtk::Label* label1 =
+ Gtk::manage(new Gtk::Label("<b>Element type</b>"));
+ label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
+ label1->set_use_markup();
+ box1->pack_start(*label1, Gtk::PACK_SHRINK);
+
+ Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
+ box1->pack_start(*box2, Gtk::PACK_SHRINK);
+
+ Gtk::Label* fill1 = Gtk::manage(new Gtk::Label(" "));
+ box2->pack_start(*fill1, Gtk::PACK_SHRINK);
+
+ Gtk::Frame* frame = Gtk::manage(new Gtk::Frame);
+ box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET);
+
+ Gtk::ScrolledWindow* swNodeMaps = Gtk::manage(new Gtk::ScrolledWindow);
+ frame->add(*swNodeMaps);
+
+ swNodeMaps->add(twNodeMaps);
+
+ refNodeMapStore = Gtk::ListStore::create(NodeMapColumns);
+
+ for (std::vector<std::string>::const_iterator it =
+ p_data->node_map_names.begin(); it != p_data->node_map_names.end();
+ ++it)
+ {
+ node_tree_view_records.push_back(
+ tree_view_record(*it, false, false, true));
+ }
+
+ twNodeMaps.set_model(refNodeMapStore);
+ twNodeMaps.append_column("Name", NodeMapColumns.colName);
+ {
+ int col = twNodeMaps.append_column_editable("Numeric",
+ NodeMapColumns.colReadAsNumeric);
+ Gtk::CellRendererToggle* pRenderer =
+ static_cast<Gtk::CellRendererToggle*>(
+ twNodeMaps.get_column_cell_renderer(col-1));
+ pRenderer->signal_toggled().connect(
+ sigc::mem_fun(*this, &FileImportDialog::onNodeMapNumericToggled));
+ }
+ {
+ int col = twNodeMaps.append_column_editable("String",
+ NodeMapColumns.colReadAsString);
+ Gtk::CellRendererToggle* pRenderer =
+ static_cast<Gtk::CellRendererToggle*>(
+ twNodeMaps.get_column_cell_renderer(col-1));
+ pRenderer->signal_toggled().connect(
+ sigc::mem_fun(*this, &FileImportDialog::onNodeMapStringToggled));
+ }
+
+ swNodeMaps->set_size_request(-1, 200);
+ swNodeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
}
// child widgets of vbEdgeMaps
{
+ Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
+ vbEdgeMaps->pack_start(*box1, Gtk::PACK_SHRINK);
+
+ Gtk::Label* label1 =
+ Gtk::manage(new Gtk::Label("<b>Element type</b>"));
+ label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
+ label1->set_use_markup();
+ box1->pack_start(*label1, Gtk::PACK_SHRINK);
+
+ Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
+ box1->pack_start(*box2, Gtk::PACK_SHRINK);
+
+ Gtk::Label* fill1 = Gtk::manage(new Gtk::Label(" "));
+ box2->pack_start(*fill1, Gtk::PACK_SHRINK);
+
+ Gtk::Frame* frame = Gtk::manage(new Gtk::Frame);
+ box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET);
+
+ Gtk::ScrolledWindow* swEdgeMaps = Gtk::manage(new Gtk::ScrolledWindow);
+ frame->add(*swEdgeMaps);
+
+ swEdgeMaps->add(twEdgeMaps);
+
+ refEdgeMapStore = Gtk::ListStore::create(EdgeMapColumns);
+
+ for (std::vector<std::string>::const_iterator it =
+ p_data->edge_map_names.begin(); it != p_data->edge_map_names.end();
+ ++it)
+ {
+ edge_tree_view_records.push_back(
+ tree_view_record(*it, false, false, true));
+ }
+
+ twEdgeMaps.set_model(refEdgeMapStore);
+ twEdgeMaps.append_column("Name", EdgeMapColumns.colName);
+ {
+ int col = twEdgeMaps.append_column_editable("Numeric",
+ EdgeMapColumns.colReadAsNumeric);
+ Gtk::CellRendererToggle* pRenderer =
+ static_cast<Gtk::CellRendererToggle*>(
+ twEdgeMaps.get_column_cell_renderer(col-1));
+ pRenderer->signal_toggled().connect(
+ sigc::mem_fun(*this, &FileImportDialog::onEdgeMapNumericToggled));
+ }
+ {
+ int col = twEdgeMaps.append_column_editable("String",
+ EdgeMapColumns.colReadAsString);
+ Gtk::CellRendererToggle* pRenderer =
+ static_cast<Gtk::CellRendererToggle*>(
+ twEdgeMaps.get_column_cell_renderer(col-1));
+ pRenderer->signal_toggled().connect(
+ sigc::mem_fun(*this, &FileImportDialog::onEdgeMapStringToggled));
+ }
+
+ swEdgeMaps->set_size_request(-1, 200);
+ swEdgeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
}
// fill in the ComboBoxes
@@ -363,6 +476,9 @@
signal_response().connect(
sigc::mem_fun(*this, &FileImportDialog::onResponse));
+ update_node_tree_view();
+ update_edge_tree_view();
+
show_all_children();
}
@@ -392,6 +508,7 @@
p_data->node_coord_load_from = ImportData::DONT_READ;
}
+ update_node_tree_view();
}
void FileImportDialog::onArrowCoordMapNumToggled()
@@ -420,6 +537,7 @@
p_data->arrow_coord_load_from = ImportData::DONT_READ;
}
+ update_edge_tree_view();
}
FileImportDialog::~FileImportDialog()
@@ -472,6 +590,32 @@
mdialog.run();
return;
}
+
+ for (Gtk::TreeModel::Children::iterator it =
+ refNodeMapStore->children().begin();
+ it != refNodeMapStore->children().end(); ++it)
+ {
+ Gtk::TreeModel::Row row = *it;
+ if (row[NodeMapColumns.colReadAsNumeric])
+ p_data->numeric_node_map_names.push_back(
+ static_cast<Glib::ustring>(row[NodeMapColumns.colName]));
+ if (row[NodeMapColumns.colReadAsString])
+ p_data->string_node_map_names.push_back(
+ static_cast<Glib::ustring>(row[NodeMapColumns.colName]));
+ }
+
+ for (Gtk::TreeModel::Children::iterator it =
+ refEdgeMapStore->children().begin();
+ it != refEdgeMapStore->children().end(); ++it)
+ {
+ Gtk::TreeModel::Row row = *it;
+ if (row[EdgeMapColumns.colReadAsNumeric])
+ p_data->numeric_edge_map_names.push_back(
+ static_cast<Glib::ustring>(row[EdgeMapColumns.colName]));
+ if (row[EdgeMapColumns.colReadAsString])
+ p_data->string_edge_map_names.push_back(
+ static_cast<Glib::ustring>(row[EdgeMapColumns.colName]));
+ }
}
}
@@ -584,29 +728,201 @@
void FileImportDialog::onNodeCoordOneMapChanged()
{
p_data->node_coord_one_map_name = cbNodeCoordOneMap.get_active_text();
+ update_node_tree_view();
}
void FileImportDialog::onNodeCoordTwoMaps1Changed()
{
p_data->node_coord_two_maps_1_name = cbNodeCoordTwoMaps1.get_active_text();
+ update_node_tree_view();
}
void FileImportDialog::onNodeCoordTwoMaps2Changed()
{
p_data->node_coord_two_maps_2_name = cbNodeCoordTwoMaps2.get_active_text();
+ update_node_tree_view();
}
void FileImportDialog::onArrowCoordOneMapChanged()
{
p_data->arrow_coord_one_map_name = cbArrowCoordOneMap.get_active_text();
+ update_edge_tree_view();
}
void FileImportDialog::onArrowCoordTwoMaps1Changed()
{
p_data->arrow_coord_two_maps_1_name = cbArrowCoordTwoMaps1.get_active_text();
+ update_edge_tree_view();
}
void FileImportDialog::onArrowCoordTwoMaps2Changed()
{
p_data->arrow_coord_two_maps_2_name = cbArrowCoordTwoMaps2.get_active_text();
+ update_edge_tree_view();
+}
+
+void FileImportDialog::onNodeMapNumericToggled(const Glib::ustring& path)
+{
+ Gtk::TreeModel::iterator iter = refNodeMapStore->get_iter(
+ Gtk::TreeModel::Path(path));
+ Gtk::TreeModel::Row row = *iter;
+ std::vector<tree_view_record>::iterator it;
+ for (it = node_tree_view_records.begin();
+ it != node_tree_view_records.end(); ++it)
+ {
+ if (it->name == row[NodeMapColumns.colName]) break;
+ }
+ if (row[NodeMapColumns.colReadAsNumeric])
+ {
+ row[NodeMapColumns.colReadAsString] = false;
+ it->string = false;
+ it->numeric = true;
+ }
+}
+
+void FileImportDialog::onNodeMapStringToggled(const Glib::ustring& path)
+{
+ Gtk::TreeModel::iterator iter = refNodeMapStore->get_iter(
+ Gtk::TreeModel::Path(path));
+ Gtk::TreeModel::Row row = *iter;
+ std::vector<tree_view_record>::iterator it;
+ for (it = node_tree_view_records.begin();
+ it != node_tree_view_records.end(); ++it)
+ {
+ if (it->name == row[NodeMapColumns.colName]) break;
+ }
+ if (row[NodeMapColumns.colReadAsString])
+ {
+ row[NodeMapColumns.colReadAsNumeric] = false;
+ it->string = true;
+ it->numeric = false;
+ }
+}
+
+void FileImportDialog::update_node_tree_view()
+{
+ for (std::vector<tree_view_record>::iterator it =
+ node_tree_view_records.begin(); it != node_tree_view_records.end(); ++it)
+ {
+ it->visible = true;
+ }
+ switch (p_data->node_coord_load_from)
+ {
+ case ImportData::ONE_MAP:
+ for (std::vector<tree_view_record>::iterator it =
+ node_tree_view_records.begin(); it !=
+ node_tree_view_records.end(); ++it)
+ {
+ if (it->name == p_data->node_coord_one_map_name)
+ it->visible = false;
+ }
+ break;
+ case ImportData::TWO_MAPS:
+ for (std::vector<tree_view_record>::iterator it =
+ node_tree_view_records.begin(); it !=
+ node_tree_view_records.end(); ++it)
+ {
+ if ((it->name == p_data->node_coord_two_maps_1_name) ||
+ (it->name == p_data->node_coord_two_maps_2_name))
+ it->visible = false;
+ }
+ break;
+ case ImportData::DONT_READ:
+ break;
+ }
+ refNodeMapStore->clear();
+ for (std::vector<tree_view_record>::iterator it =
+ node_tree_view_records.begin(); it != node_tree_view_records.end(); ++it)
+ {
+ if (it->visible)
+ {
+ Gtk::TreeModel::Row row = *(refNodeMapStore->append());
+ row[NodeMapColumns.colName] = it->name;
+ row[NodeMapColumns.colReadAsNumeric] = it->numeric;
+ row[NodeMapColumns.colReadAsString] = it->string;
+ }
+ }
+}
+
+void FileImportDialog::onEdgeMapNumericToggled(const Glib::ustring& path)
+{
+ Gtk::TreeModel::iterator iter = refEdgeMapStore->get_iter(
+ Gtk::TreeModel::Path(path));
+ Gtk::TreeModel::Row row = *iter;
+ std::vector<tree_view_record>::iterator it;
+ for (it = edge_tree_view_records.begin();
+ it != edge_tree_view_records.end(); ++it)
+ {
+ if (it->name == row[EdgeMapColumns.colName]) break;
+ }
+ if (row[EdgeMapColumns.colReadAsNumeric])
+ {
+ row[EdgeMapColumns.colReadAsString] = false;
+ it->string = false;
+ it->numeric = true;
+ }
+}
+
+void FileImportDialog::onEdgeMapStringToggled(const Glib::ustring& path)
+{
+ Gtk::TreeModel::iterator iter = refEdgeMapStore->get_iter(
+ Gtk::TreeModel::Path(path));
+ Gtk::TreeModel::Row row = *iter;
+ std::vector<tree_view_record>::iterator it;
+ for (it = edge_tree_view_records.begin();
+ it != edge_tree_view_records.end(); ++it)
+ {
+ if (it->name == row[EdgeMapColumns.colName]) break;
+ }
+ if (row[EdgeMapColumns.colReadAsString])
+ {
+ row[EdgeMapColumns.colReadAsNumeric] = false;
+ it->string = true;
+ it->numeric = false;
+ }
+}
+
+void FileImportDialog::update_edge_tree_view()
+{
+ for (std::vector<tree_view_record>::iterator it =
+ edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ++it)
+ {
+ it->visible = true;
+ }
+ switch (p_data->arrow_coord_load_from)
+ {
+ case ImportData::ONE_MAP:
+ for (std::vector<tree_view_record>::iterator it =
+ edge_tree_view_records.begin(); it !=
+ edge_tree_view_records.end(); ++it)
+ {
+ if (it->name == p_data->arrow_coord_one_map_name)
+ it->visible = false;
+ }
+ break;
+ case ImportData::TWO_MAPS:
+ for (std::vector<tree_view_record>::iterator it =
+ edge_tree_view_records.begin(); it !=
+ edge_tree_view_records.end(); ++it)
+ {
+ if ((it->name == p_data->arrow_coord_two_maps_1_name) ||
+ (it->name == p_data->arrow_coord_two_maps_2_name))
+ it->visible = false;
+ }
+ break;
+ case ImportData::DONT_READ:
+ break;
+ }
+ refEdgeMapStore->clear();
+ for (std::vector<tree_view_record>::iterator it =
+ edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ++it)
+ {
+ if (it->visible)
+ {
+ Gtk::TreeModel::Row row = *(refEdgeMapStore->append());
+ row[EdgeMapColumns.colName] = it->name;
+ row[EdgeMapColumns.colReadAsNumeric] = it->numeric;
+ row[EdgeMapColumns.colReadAsString] = it->string;
+ }
+ }
}
Modified: glemon/branches/akos/file_import_dialog.h
==============================================================================
--- glemon/branches/akos/file_import_dialog.h (original)
+++ glemon/branches/akos/file_import_dialog.h Wed Jan 2 16:27:10 2008
@@ -5,6 +5,10 @@
#include <gtkmm/radiobutton.h>
#include <gtkmm/comboboxtext.h>
#include <gtkmm/sizegroup.h>
+#include <gtkmm/treemodel.h>
+#include <gtkmm/liststore.h>
+#include <gtkmm/treeview.h>
+#include <gtkmm/scrolledwindow.h>
class FileImportDialog : public Gtk::Dialog
{
@@ -42,6 +46,11 @@
bool isXYEdgeMap(const std::string& name);
bool isNodeMap(const std::string& name);
bool isEdgeMap(const std::string& name);
+
+ std::vector<std::string> numeric_node_map_names;
+ std::vector<std::string> string_node_map_names;
+ std::vector<std::string> numeric_edge_map_names;
+ std::vector<std::string> string_edge_map_names;
};
ImportData* p_data;
@@ -75,6 +84,51 @@
void onArrowCoordTwoMaps1Changed();
void onArrowCoordTwoMaps2Changed();
+ struct MapModelColumns : public Gtk::TreeModel::ColumnRecord
+ {
+ MapModelColumns()
+ {
+ add(colName);
+ add(colReadAsNumeric);
+ add(colReadAsString);
+ }
+ Gtk::TreeModelColumn<Glib::ustring> colName;
+ Gtk::TreeModelColumn<bool> colReadAsNumeric;
+ Gtk::TreeModelColumn<bool> colReadAsString;
+ };
+
+ Gtk::TreeView twNodeMaps;
+ MapModelColumns NodeMapColumns;
+ Glib::RefPtr<Gtk::ListStore> refNodeMapStore;
+ void onNodeMapNumericToggled(const Glib::ustring& path);
+ void onNodeMapStringToggled(const Glib::ustring& path);
+
+ Gtk::TreeView twEdgeMaps;
+ MapModelColumns EdgeMapColumns;
+ Glib::RefPtr<Gtk::ListStore> refEdgeMapStore;
+ void onEdgeMapNumericToggled(const Glib::ustring& path);
+ void onEdgeMapStringToggled(const Glib::ustring& path);
+
+ struct tree_view_record
+ {
+ tree_view_record(const std::string& _name, bool _numeric, bool _string,
+ bool _visible) :
+ name(_name),
+ numeric(_numeric),
+ string(_string),
+ visible(_visible) {}
+ std::string name;
+ bool numeric;
+ bool string;
+ bool visible;
+ };
+
+ std::vector<tree_view_record> node_tree_view_records;
+ void update_node_tree_view();
+
+ std::vector<tree_view_record> edge_tree_view_records;
+ void update_edge_tree_view();
+
public:
FileImportDialog(ImportData* d);
~FileImportDialog();
Modified: glemon/branches/akos/mapstorage.cc
==============================================================================
--- glemon/branches/akos/mapstorage.cc (original)
+++ glemon/branches/akos/mapstorage.cc Wed Jan 2 16:27:10 2008
@@ -593,12 +593,43 @@
break;
}
- // TODO
// read edge and node maps
+ std::vector<std::string> node_map_names;
+ std::vector<std::string> edge_map_names;
+ std::map<std::string, MapValue::Type> node_map_types;
+ std::map<std::string, MapValue::Type> edge_map_types;
+ for (std::vector<std::string>::const_iterator it =
+ data.numeric_node_map_names.begin();
+ it != data.numeric_node_map_names.end(); ++it)
+ {
+ node_map_names.push_back(*it);
+ node_map_types[*it] = MapValue::NUMERIC;
+ }
+ for (std::vector<std::string>::const_iterator it =
+ data.string_node_map_names.begin();
+ it != data.string_node_map_names.end(); ++it)
+ {
+ node_map_names.push_back(*it);
+ node_map_types[*it] = MapValue::STRING;
+ }
+ for (std::vector<std::string>::const_iterator it =
+ data.numeric_edge_map_names.begin();
+ it != data.numeric_edge_map_names.end(); ++it)
+ {
+ edge_map_names.push_back(*it);
+ edge_map_types[*it] = MapValue::NUMERIC;
+ }
+ for (std::vector<std::string>::const_iterator it =
+ data.string_edge_map_names.begin();
+ it != data.string_edge_map_names.end(); ++it)
+ {
+ edge_map_names.push_back(*it);
+ edge_map_types[*it] = MapValue::STRING;
+ }
+
readLGF(filename, read_edge_label,
- std::vector<std::string>(), std::vector<std::string>(),
- std::map<std::string, MapValue::Type>(),
- std::map<std::string, MapValue::Type>(),
+ node_map_names, edge_map_names,
+ node_map_types, edge_map_types,
node_coord_xmap_name, node_coord_ymap_name,
arrow_coord_xmap_name, arrow_coord_ymap_name);
More information about the Lemon-commits
mailing list