[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