ladanyi@201: #include "file_import_dialog.h" ladanyi@201: #include ladanyi@201: #include ladanyi@201: #include ladanyi@201: #include ladanyi@201: #include ladanyi@201: #include ladanyi@201: ladanyi@201: FileImportDialog::FileImportDialog(ImportData* d) : ladanyi@201: p_data(d) ladanyi@201: { ladanyi@201: add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); ladanyi@201: add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); ladanyi@201: ladanyi@201: Gtk::VBox* pVBox = get_vbox(); ladanyi@201: ladanyi@201: Gtk::Notebook* nb = Gtk::manage(new Gtk::Notebook); ladanyi@201: pVBox->pack_start(*nb, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: Gtk::VBox* vbNodeMaps = Gtk::manage(new Gtk::VBox(false, 18)); ladanyi@201: vbNodeMaps->set_border_width(12); ladanyi@201: ladanyi@201: Gtk::VBox* vbEdgeMaps = Gtk::manage(new Gtk::VBox(false, 18)); ladanyi@201: vbEdgeMaps->set_border_width(12); ladanyi@201: ladanyi@201: Gtk::VBox* vbSpecMaps = Gtk::manage(new Gtk::VBox(false, 18)); ladanyi@201: vbSpecMaps->set_border_width(12); ladanyi@201: ladanyi@201: nb->append_page(*vbSpecMaps, "Special Maps"); ladanyi@201: nb->append_page(*vbNodeMaps, "Node Maps"); ladanyi@201: nb->append_page(*vbEdgeMaps, "Edge Maps"); ladanyi@201: ladanyi@201: // child widgets of vbSpecMaps ladanyi@201: { ladanyi@201: Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6)); ladanyi@201: vbSpecMaps->pack_start(*box1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: { ladanyi@201: Gtk::Label* label1 = ladanyi@201: Gtk::manage(new Gtk::Label("Node Coordinates")); ladanyi@201: label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); ladanyi@201: label1->set_use_markup(); ladanyi@201: box1->pack_start(*label1); ladanyi@201: ladanyi@201: Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox); ladanyi@201: box1->pack_start(*box2); ladanyi@201: ladanyi@201: Gtk::Label* fill1 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box2->pack_start(*fill1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox); ladanyi@201: box2->pack_start(*box3); ladanyi@201: ladanyi@201: Gtk::VBox* box13 = Gtk::manage(new Gtk::VBox); ladanyi@201: box3->pack_start(*box13); ladanyi@201: ladanyi@201: rbNodeCoordNone.set_label("None"); ladanyi@201: Gtk::RadioButtonGroup group = rbNodeCoordNone.get_group(); ladanyi@201: box13->pack_start(rbNodeCoordNone); ladanyi@201: ladanyi@201: Gtk::VBox* box4 = Gtk::manage(new Gtk::VBox); ladanyi@201: box3->pack_start(*box4); ladanyi@201: ladanyi@201: rbNodeCoordOneMap.set_label("One Map"); ladanyi@201: rbNodeCoordOneMap.set_group(group); ladanyi@201: box4->pack_start(rbNodeCoordOneMap); ladanyi@201: ladanyi@201: Gtk::HBox* box5 = Gtk::manage(new Gtk::HBox); ladanyi@201: box4->pack_start(*box5); ladanyi@201: ladanyi@201: Gtk::Label* fill2 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box5->pack_start(*fill2, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::VBox* box6 = Gtk::manage(new Gtk::VBox); ladanyi@201: box5->pack_start(*box6); ladanyi@201: ladanyi@201: Gtk::HBox* box7 = Gtk::manage(new Gtk::HBox); ladanyi@201: box6->pack_start(*box7); ladanyi@201: ladanyi@201: Gtk::Label* label2 = Gtk::manage(new Gtk::Label("(X, Y)")); ladanyi@201: box7->pack_start(*label2, Gtk::PACK_SHRINK, 4); ladanyi@201: ladanyi@201: box7->pack_start(cbNodeCoordOneMap, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: ladanyi@201: Gtk::VBox* box8 = Gtk::manage(new Gtk::VBox); ladanyi@201: box3->pack_start(*box8); ladanyi@201: ladanyi@201: rbNodeCoordTwoMaps.set_label("Two Maps"); ladanyi@201: rbNodeCoordTwoMaps.set_group(group); ladanyi@201: box8->pack_start(rbNodeCoordTwoMaps); ladanyi@201: ladanyi@201: Gtk::HBox* box9 = Gtk::manage(new Gtk::HBox); ladanyi@201: box8->pack_start(*box9); ladanyi@201: ladanyi@201: Gtk::Label* fill3 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box9->pack_start(*fill3, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::VBox* box10 = Gtk::manage(new Gtk::VBox); ladanyi@201: box9->pack_start(*box10); ladanyi@201: ladanyi@201: Gtk::HBox* box11 = Gtk::manage(new Gtk::HBox); ladanyi@201: box10->pack_start(*box11); ladanyi@201: ladanyi@201: Gtk::Label* label3 = Gtk::manage(new Gtk::Label("X")); ladanyi@201: box11->pack_start(*label3, Gtk::PACK_SHRINK, 4); ladanyi@201: ladanyi@201: box11->pack_start(cbNodeCoordTwoMaps1, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: Gtk::HBox* box12 = Gtk::manage(new Gtk::HBox); ladanyi@201: box10->pack_start(*box12); ladanyi@201: ladanyi@201: Gtk::Label* label4 = Gtk::manage(new Gtk::Label("Y")); ladanyi@201: box12->pack_start(*label4, Gtk::PACK_SHRINK, 4); ladanyi@201: ladanyi@201: box12->pack_start(cbNodeCoordTwoMaps2, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: cbNodeCoordOneMap.signal_changed().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeCoordOneMapChanged)); ladanyi@201: cbNodeCoordTwoMaps1.signal_changed().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeCoordTwoMaps1Changed)); ladanyi@201: cbNodeCoordTwoMaps2.signal_changed().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeCoordTwoMaps2Changed)); ladanyi@201: } ladanyi@201: ladanyi@201: { ladanyi@201: Gtk::Label* label1 = ladanyi@201: Gtk::manage(new Gtk::Label("Arrow Coordinates")); ladanyi@201: label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); ladanyi@201: label1->set_use_markup(); ladanyi@201: box1->pack_start(*label1); ladanyi@201: ladanyi@201: Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox); ladanyi@201: box1->pack_start(*box2); ladanyi@201: ladanyi@201: Gtk::Label* fill1 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box2->pack_start(*fill1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox); ladanyi@201: box2->pack_start(*box3); ladanyi@201: ladanyi@201: Gtk::VBox* box13 = Gtk::manage(new Gtk::VBox); ladanyi@201: box3->pack_start(*box13); ladanyi@201: ladanyi@201: rbArrowCoordNone.set_label("None"); ladanyi@201: Gtk::RadioButtonGroup group = rbArrowCoordNone.get_group(); ladanyi@201: box13->pack_start(rbArrowCoordNone); ladanyi@201: ladanyi@201: Gtk::VBox* box4 = Gtk::manage(new Gtk::VBox); ladanyi@201: box3->pack_start(*box4); ladanyi@201: ladanyi@201: rbArrowCoordOneMap.set_label("One Map"); ladanyi@201: rbArrowCoordOneMap.set_group(group); ladanyi@201: box4->pack_start(rbArrowCoordOneMap); ladanyi@201: ladanyi@201: Gtk::HBox* box5 = Gtk::manage(new Gtk::HBox); ladanyi@201: box4->pack_start(*box5); ladanyi@201: ladanyi@201: Gtk::Label* fill2 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box5->pack_start(*fill2, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::VBox* box6 = Gtk::manage(new Gtk::VBox); ladanyi@201: box5->pack_start(*box6); ladanyi@201: ladanyi@201: Gtk::HBox* box7 = Gtk::manage(new Gtk::HBox); ladanyi@201: box6->pack_start(*box7); ladanyi@201: ladanyi@201: Gtk::Label* label2 = Gtk::manage(new Gtk::Label("(X, Y)")); ladanyi@201: box7->pack_start(*label2, Gtk::PACK_SHRINK, 4); ladanyi@201: ladanyi@201: box7->pack_start(cbArrowCoordOneMap, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: ladanyi@201: Gtk::VBox* box8 = Gtk::manage(new Gtk::VBox); ladanyi@201: box3->pack_start(*box8); ladanyi@201: ladanyi@201: rbArrowCoordTwoMaps.set_label("Two Maps"); ladanyi@201: rbArrowCoordTwoMaps.set_group(group); ladanyi@201: box8->pack_start(rbArrowCoordTwoMaps); ladanyi@201: ladanyi@201: Gtk::HBox* box9 = Gtk::manage(new Gtk::HBox); ladanyi@201: box8->pack_start(*box9); ladanyi@201: ladanyi@201: Gtk::Label* fill3 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box9->pack_start(*fill3, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::VBox* box10 = Gtk::manage(new Gtk::VBox); ladanyi@201: box9->pack_start(*box10); ladanyi@201: ladanyi@201: Gtk::HBox* box11 = Gtk::manage(new Gtk::HBox); ladanyi@201: box10->pack_start(*box11); ladanyi@201: ladanyi@201: Gtk::Label* label3 = Gtk::manage(new Gtk::Label("X")); ladanyi@201: box11->pack_start(*label3, Gtk::PACK_SHRINK, 4); ladanyi@201: ladanyi@201: box11->pack_start(cbArrowCoordTwoMaps1, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: Gtk::HBox* box12 = Gtk::manage(new Gtk::HBox); ladanyi@201: box10->pack_start(*box12); ladanyi@201: ladanyi@201: Gtk::Label* label4 = Gtk::manage(new Gtk::Label("Y")); ladanyi@201: box12->pack_start(*label4, Gtk::PACK_SHRINK, 4); ladanyi@201: ladanyi@201: box12->pack_start(cbArrowCoordTwoMaps2, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: cbArrowCoordOneMap.signal_changed().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onArrowCoordOneMapChanged)); ladanyi@201: cbArrowCoordTwoMaps1.signal_changed().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onArrowCoordTwoMaps1Changed)); ladanyi@201: cbArrowCoordTwoMaps2.signal_changed().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onArrowCoordTwoMaps2Changed)); ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: // child widgets of vbNodeMaps ladanyi@201: { ladanyi@201: Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6)); ladanyi@201: vbNodeMaps->pack_start(*box1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::Label* label1 = ladanyi@201: Gtk::manage(new Gtk::Label("Element type")); ladanyi@201: label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); ladanyi@201: label1->set_use_markup(); ladanyi@201: box1->pack_start(*label1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox); ladanyi@201: box1->pack_start(*box2, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::Label* fill1 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box2->pack_start(*fill1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); ladanyi@201: box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: Gtk::ScrolledWindow* swNodeMaps = Gtk::manage(new Gtk::ScrolledWindow); ladanyi@201: frame->add(*swNodeMaps); ladanyi@201: ladanyi@201: swNodeMaps->add(twNodeMaps); ladanyi@201: ladanyi@201: refNodeMapStore = Gtk::ListStore::create(NodeMapColumns); ladanyi@201: ladanyi@201: for (std::vector::const_iterator it = ladanyi@201: p_data->node_map_names.begin(); it != p_data->node_map_names.end(); ladanyi@201: ++it) ladanyi@201: { ladanyi@201: node_tree_view_records.push_back( ladanyi@201: tree_view_record(*it, false, false, true)); ladanyi@201: } ladanyi@201: ladanyi@201: twNodeMaps.set_model(refNodeMapStore); ladanyi@201: twNodeMaps.append_column("Name", NodeMapColumns.colName); ladanyi@201: { ladanyi@201: int col = twNodeMaps.append_column_editable("Numeric", ladanyi@201: NodeMapColumns.colReadAsNumeric); ladanyi@201: Gtk::CellRendererToggle* pRenderer = ladanyi@201: static_cast( ladanyi@201: twNodeMaps.get_column_cell_renderer(col-1)); ladanyi@201: pRenderer->signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeMapNumericToggled)); ladanyi@201: } ladanyi@201: { ladanyi@201: int col = twNodeMaps.append_column_editable("String", ladanyi@201: NodeMapColumns.colReadAsString); ladanyi@201: Gtk::CellRendererToggle* pRenderer = ladanyi@201: static_cast( ladanyi@201: twNodeMaps.get_column_cell_renderer(col-1)); ladanyi@201: pRenderer->signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeMapStringToggled)); ladanyi@201: } ladanyi@201: ladanyi@201: swNodeMaps->set_size_request(-1, 200); ladanyi@201: swNodeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); ladanyi@201: } ladanyi@201: ladanyi@201: // child widgets of vbEdgeMaps ladanyi@201: { ladanyi@201: Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6)); ladanyi@201: vbEdgeMaps->pack_start(*box1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::Label* label1 = ladanyi@201: Gtk::manage(new Gtk::Label("Element type")); ladanyi@201: label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); ladanyi@201: label1->set_use_markup(); ladanyi@201: box1->pack_start(*label1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox); ladanyi@201: box1->pack_start(*box2, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::Label* fill1 = Gtk::manage(new Gtk::Label(" ")); ladanyi@201: box2->pack_start(*fill1, Gtk::PACK_SHRINK); ladanyi@201: ladanyi@201: Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); ladanyi@201: box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET); ladanyi@201: ladanyi@201: Gtk::ScrolledWindow* swEdgeMaps = Gtk::manage(new Gtk::ScrolledWindow); ladanyi@201: frame->add(*swEdgeMaps); ladanyi@201: ladanyi@201: swEdgeMaps->add(twEdgeMaps); ladanyi@201: ladanyi@201: refEdgeMapStore = Gtk::ListStore::create(EdgeMapColumns); ladanyi@201: ladanyi@201: for (std::vector::const_iterator it = ladanyi@201: p_data->edge_map_names.begin(); it != p_data->edge_map_names.end(); ladanyi@201: ++it) ladanyi@201: { ladanyi@201: edge_tree_view_records.push_back( ladanyi@201: tree_view_record(*it, false, false, true)); ladanyi@201: } ladanyi@201: ladanyi@201: twEdgeMaps.set_model(refEdgeMapStore); ladanyi@201: twEdgeMaps.append_column("Name", EdgeMapColumns.colName); ladanyi@201: { ladanyi@201: int col = twEdgeMaps.append_column_editable("Numeric", ladanyi@201: EdgeMapColumns.colReadAsNumeric); ladanyi@201: Gtk::CellRendererToggle* pRenderer = ladanyi@201: static_cast( ladanyi@201: twEdgeMaps.get_column_cell_renderer(col-1)); ladanyi@201: pRenderer->signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onEdgeMapNumericToggled)); ladanyi@201: } ladanyi@201: { ladanyi@201: int col = twEdgeMaps.append_column_editable("String", ladanyi@201: EdgeMapColumns.colReadAsString); ladanyi@201: Gtk::CellRendererToggle* pRenderer = ladanyi@201: static_cast( ladanyi@201: twEdgeMaps.get_column_cell_renderer(col-1)); ladanyi@201: pRenderer->signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onEdgeMapStringToggled)); ladanyi@201: } ladanyi@201: ladanyi@201: swEdgeMaps->set_size_request(-1, 200); ladanyi@201: swEdgeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); ladanyi@201: } ladanyi@201: ladanyi@201: // fill in the ComboBoxes ladanyi@201: typedef std::vector StrVec; ladanyi@201: for (StrVec::const_iterator it = p_data->node_map_names.begin(); ladanyi@201: it != p_data->node_map_names.end(); ++it) ladanyi@201: { ladanyi@201: cbNodeCoordTwoMaps1.append_text(*it); ladanyi@201: cbNodeCoordTwoMaps2.append_text(*it); ladanyi@201: } ladanyi@201: for (StrVec::const_iterator it = p_data->edge_map_names.begin(); ladanyi@201: it != p_data->edge_map_names.end(); ++it) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.append_text(*it); ladanyi@201: cbArrowCoordTwoMaps2.append_text(*it); ladanyi@201: } ladanyi@201: for (StrVec::const_iterator it = p_data->xy_node_map_names.begin(); ladanyi@201: it != p_data->xy_node_map_names.end(); ++it) ladanyi@201: { ladanyi@201: cbNodeCoordOneMap.append_text(*it); ladanyi@201: } ladanyi@201: for (StrVec::const_iterator it = p_data->xy_edge_map_names.begin(); ladanyi@201: it != p_data->xy_edge_map_names.end(); ++it) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.append_text(*it); ladanyi@201: } ladanyi@201: ladanyi@201: if (p_data->isXYNodeMap("coord")) ladanyi@201: { ladanyi@201: cbNodeCoordOneMap.set_active_text("coord"); ladanyi@201: } ladanyi@201: else if (p_data->isXYNodeMap("coords")) ladanyi@201: { ladanyi@201: cbNodeCoordOneMap.set_active_text("coords"); ladanyi@201: } ladanyi@201: else if (p_data->isNodeMap("coord_x") && ladanyi@201: p_data->isNodeMap("coord_y")) ladanyi@201: { ladanyi@201: cbNodeCoordTwoMaps1.set_active_text("coord_x"); ladanyi@201: cbNodeCoordTwoMaps2.set_active_text("coord_y"); ladanyi@201: } ladanyi@201: else if (p_data->isNodeMap("coords_x") && ladanyi@201: p_data->isNodeMap("coords_y")) ladanyi@201: { ladanyi@201: cbNodeCoordTwoMaps1.set_active_text("coords_x"); ladanyi@201: cbNodeCoordTwoMaps2.set_active_text("coords_y"); ladanyi@201: } ladanyi@201: else if (p_data->isNodeMap("x") && ladanyi@201: p_data->isNodeMap("y")) ladanyi@201: { ladanyi@201: cbNodeCoordTwoMaps1.set_active_text("x"); ladanyi@201: cbNodeCoordTwoMaps2.set_active_text("y"); ladanyi@201: } ladanyi@201: ladanyi@201: if (p_data->isXYEdgeMap("arrow")) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.set_active_text("arrow"); ladanyi@201: } ladanyi@201: else if (p_data->isXYEdgeMap("arrows")) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.set_active_text("arrows"); ladanyi@201: } ladanyi@201: else if (p_data->isXYEdgeMap("midpoint")) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.set_active_text("midpoint"); ladanyi@201: } ladanyi@201: else if (p_data->isXYEdgeMap("midpoints")) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.set_active_text("midpoints"); ladanyi@201: } ladanyi@201: else if (p_data->isXYEdgeMap("mid")) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.set_active_text("mid"); ladanyi@201: } ladanyi@201: else if (p_data->isXYEdgeMap("mids")) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.set_active_text("mids"); ladanyi@201: } ladanyi@201: else if (p_data->isEdgeMap("arrow_x") && ladanyi@201: p_data->isEdgeMap("arrow_y")) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.set_active_text("arrow_x"); ladanyi@201: cbArrowCoordTwoMaps2.set_active_text("arrow_y"); ladanyi@201: } ladanyi@201: else if (p_data->isEdgeMap("arrows_x") && ladanyi@201: p_data->isEdgeMap("arrows_y")) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.set_active_text("arrows_x"); ladanyi@201: cbArrowCoordTwoMaps2.set_active_text("arrows_y"); ladanyi@201: } ladanyi@201: else if (p_data->isEdgeMap("midpoint_x") && ladanyi@201: p_data->isEdgeMap("midpoint_y")) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.set_active_text("midpoint_x"); ladanyi@201: cbArrowCoordTwoMaps2.set_active_text("midpoint_y"); ladanyi@201: } ladanyi@201: else if (p_data->isEdgeMap("midpoints_x") && ladanyi@201: p_data->isEdgeMap("midpoints_y")) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.set_active_text("midpoints_x"); ladanyi@201: cbArrowCoordTwoMaps2.set_active_text("midpoints_y"); ladanyi@201: } ladanyi@201: else if (p_data->isEdgeMap("mid_x") && ladanyi@201: p_data->isEdgeMap("mid_y")) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.set_active_text("mid_x"); ladanyi@201: cbArrowCoordTwoMaps2.set_active_text("mid_y"); ladanyi@201: } ladanyi@201: else if (p_data->isEdgeMap("mids_x") && ladanyi@201: p_data->isEdgeMap("mids_y")) ladanyi@201: { ladanyi@201: cbArrowCoordTwoMaps1.set_active_text("mids_x"); ladanyi@201: cbArrowCoordTwoMaps2.set_active_text("mids_y"); ladanyi@201: } ladanyi@201: ladanyi@201: { ladanyi@201: if (cbNodeCoordOneMap.get_active_text() != "") ladanyi@201: rbNodeCoordOneMap.set_active(); ladanyi@201: else if (cbNodeCoordTwoMaps1.get_active_text() != "") ladanyi@201: rbNodeCoordTwoMaps.set_active(); ladanyi@201: else ladanyi@201: rbNodeCoordNone.set_active(); ladanyi@201: ladanyi@201: if (cbArrowCoordOneMap.get_active_text() != "") ladanyi@201: rbArrowCoordOneMap.set_active(); ladanyi@201: else if (cbArrowCoordTwoMaps1.get_active_text() != "") ladanyi@201: rbArrowCoordTwoMaps.set_active(); ladanyi@201: else ladanyi@201: rbArrowCoordNone.set_active(); ladanyi@201: ladanyi@201: onNodeCoordMapNumToggled(); ladanyi@201: onArrowCoordMapNumToggled(); ladanyi@201: ladanyi@201: rbNodeCoordOneMap.signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeCoordMapNumToggled)); ladanyi@201: rbNodeCoordTwoMaps.signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onNodeCoordMapNumToggled)); ladanyi@201: rbArrowCoordOneMap.signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onArrowCoordMapNumToggled)); ladanyi@201: rbArrowCoordTwoMaps.signal_toggled().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onArrowCoordMapNumToggled)); ladanyi@201: } ladanyi@201: ladanyi@201: signal_response().connect( ladanyi@201: sigc::mem_fun(*this, &FileImportDialog::onResponse)); ladanyi@201: ladanyi@201: update_node_tree_view(); ladanyi@201: update_edge_tree_view(); ladanyi@201: ladanyi@201: show_all_children(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onNodeCoordMapNumToggled() ladanyi@201: { ladanyi@201: if (rbNodeCoordOneMap.get_active()) ladanyi@201: { ladanyi@201: cbNodeCoordOneMap.get_parent()->set_sensitive(true); ladanyi@201: cbNodeCoordTwoMaps1.get_parent()->set_sensitive(false); ladanyi@201: cbNodeCoordTwoMaps2.get_parent()->set_sensitive(false); ladanyi@201: ladanyi@201: p_data->node_coord_load_from = ImportData::ONE_MAP; ladanyi@201: } ladanyi@201: else if (rbNodeCoordTwoMaps.get_active()) ladanyi@201: { ladanyi@201: cbNodeCoordOneMap.get_parent()->set_sensitive(false); ladanyi@201: cbNodeCoordTwoMaps1.get_parent()->set_sensitive(true); ladanyi@201: cbNodeCoordTwoMaps2.get_parent()->set_sensitive(true); ladanyi@201: ladanyi@201: p_data->node_coord_load_from = ImportData::TWO_MAPS; ladanyi@201: } ladanyi@201: else if (rbNodeCoordNone.get_active()) ladanyi@201: { ladanyi@201: cbNodeCoordOneMap.get_parent()->set_sensitive(false); ladanyi@201: cbNodeCoordTwoMaps1.get_parent()->set_sensitive(false); ladanyi@201: cbNodeCoordTwoMaps2.get_parent()->set_sensitive(false); ladanyi@201: ladanyi@201: p_data->node_coord_load_from = ImportData::DONT_READ; ladanyi@201: } ladanyi@201: update_node_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onArrowCoordMapNumToggled() ladanyi@201: { ladanyi@201: if (rbArrowCoordOneMap.get_active()) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.get_parent()->set_sensitive(true); ladanyi@201: cbArrowCoordTwoMaps1.get_parent()->set_sensitive(false); ladanyi@201: cbArrowCoordTwoMaps2.get_parent()->set_sensitive(false); ladanyi@201: ladanyi@201: p_data->arrow_coord_load_from = ImportData::ONE_MAP; ladanyi@201: } ladanyi@201: else if (rbArrowCoordTwoMaps.get_active()) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.get_parent()->set_sensitive(false); ladanyi@201: cbArrowCoordTwoMaps1.get_parent()->set_sensitive(true); ladanyi@201: cbArrowCoordTwoMaps2.get_parent()->set_sensitive(true); ladanyi@201: ladanyi@201: p_data->arrow_coord_load_from = ImportData::TWO_MAPS; ladanyi@201: } ladanyi@201: else if (rbArrowCoordNone.get_active()) ladanyi@201: { ladanyi@201: cbArrowCoordOneMap.get_parent()->set_sensitive(false); ladanyi@201: cbArrowCoordTwoMaps1.get_parent()->set_sensitive(false); ladanyi@201: cbArrowCoordTwoMaps2.get_parent()->set_sensitive(false); ladanyi@201: ladanyi@201: p_data->arrow_coord_load_from = ImportData::DONT_READ; ladanyi@201: } ladanyi@201: update_edge_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: FileImportDialog::~FileImportDialog() ladanyi@201: { ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onResponse(int id) ladanyi@201: { ladanyi@201: if (id == Gtk::RESPONSE_OK) ladanyi@201: { ladanyi@201: if ((rbNodeCoordOneMap.get_active() && ladanyi@201: cbNodeCoordOneMap.get_active_text() == "") || ladanyi@201: (rbNodeCoordTwoMaps.get_active() && ladanyi@201: (cbNodeCoordTwoMaps1.get_active_text() == "" || ladanyi@201: cbNodeCoordTwoMaps2.get_active_text() == ""))) ladanyi@201: { ladanyi@201: Gtk::MessageDialog mdialog("No node map selected.", ladanyi@201: false, Gtk::MESSAGE_ERROR); ladanyi@201: mdialog.run(); ladanyi@201: return; ladanyi@201: } ladanyi@201: else if (rbNodeCoordTwoMaps.get_active() && ladanyi@201: cbNodeCoordTwoMaps1.get_active_text() == ladanyi@201: cbNodeCoordTwoMaps2.get_active_text()) ladanyi@201: { ladanyi@201: Gtk::MessageDialog mdialog( ladanyi@201: "Same node map selected for both coordinates.", ladanyi@201: false, Gtk::MESSAGE_ERROR); ladanyi@201: mdialog.run(); ladanyi@201: return; ladanyi@201: } ladanyi@201: if ((rbArrowCoordOneMap.get_active() && ladanyi@201: cbArrowCoordOneMap.get_active_text() == "") || ladanyi@201: (rbArrowCoordTwoMaps.get_active() && ladanyi@201: (cbArrowCoordTwoMaps1.get_active_text() == "" || ladanyi@201: cbArrowCoordTwoMaps2.get_active_text() == ""))) ladanyi@201: { ladanyi@201: Gtk::MessageDialog mdialog("No edge map selected.", ladanyi@201: false, Gtk::MESSAGE_ERROR); ladanyi@201: mdialog.run(); ladanyi@201: return; ladanyi@201: } ladanyi@201: else if (rbArrowCoordTwoMaps.get_active() && ladanyi@201: cbArrowCoordTwoMaps1.get_active_text() == ladanyi@201: cbArrowCoordTwoMaps2.get_active_text()) ladanyi@201: { ladanyi@201: Gtk::MessageDialog mdialog( ladanyi@201: "Same edge map selected for both coordinates.", ladanyi@201: false, Gtk::MESSAGE_ERROR); ladanyi@201: mdialog.run(); ladanyi@201: return; ladanyi@201: } ladanyi@201: ladanyi@201: for (std::vector::const_iterator it = ladanyi@201: node_tree_view_records.begin(); it != node_tree_view_records.end(); ladanyi@201: ++it) ladanyi@201: { ladanyi@201: if (it->visible) ladanyi@201: { ladanyi@201: if (it->numeric) ladanyi@201: p_data->numeric_node_map_names.push_back(it->name); ladanyi@201: if (it->string) ladanyi@201: p_data->string_node_map_names.push_back(it->name); ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: for (std::vector::const_iterator it = ladanyi@201: edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ladanyi@201: ++it) ladanyi@201: { ladanyi@201: if (it->visible) ladanyi@201: { ladanyi@201: if (it->numeric) ladanyi@201: p_data->numeric_edge_map_names.push_back(it->name); ladanyi@201: if (it->string) ladanyi@201: p_data->string_edge_map_names.push_back(it->name); ladanyi@201: } ladanyi@201: } ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: FileImportDialog::ImportData::ImportData( ladanyi@201: const std::vector& _node_map_names, ladanyi@201: const std::vector& _edge_map_names) : ladanyi@201: node_map_names(_node_map_names), ladanyi@201: edge_map_names(_edge_map_names) ladanyi@201: { ladanyi@201: typedef std::vector StrVec; ladanyi@201: { ladanyi@201: StrVec xMaps; ladanyi@201: StrVec yMaps; ladanyi@201: // collect map names ending with ":x" and ":y" ladanyi@201: for (StrVec::const_iterator it = node_map_names.begin(); ladanyi@201: it != node_map_names.end(); ++it) ladanyi@201: { ladanyi@201: if ((it->length() >= 3) && ladanyi@201: (it->substr(it->length()-2, it->length()) == ":x")) ladanyi@201: { ladanyi@201: xMaps.push_back(it->substr(0, it->length()-2)); ladanyi@201: } ladanyi@201: if ((it->length() >= 3) && ladanyi@201: (it->substr(it->length()-2, it->length()) == ":y")) ladanyi@201: { ladanyi@201: yMaps.push_back(it->substr(0, it->length()-2)); ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: for (StrVec::const_iterator it1 = xMaps.begin(); ladanyi@201: it1 != xMaps.end(); ++it1) ladanyi@201: { ladanyi@201: for (StrVec::const_iterator it2 = yMaps.begin(); ladanyi@201: it2 != yMaps.end(); ++it2) ladanyi@201: { ladanyi@201: if (*it1 == *it2) xy_node_map_names.push_back(*it1); ladanyi@201: } ladanyi@201: } ladanyi@201: } ladanyi@201: { ladanyi@201: StrVec xMaps; ladanyi@201: StrVec yMaps; ladanyi@201: // collect map names ending with ":x" and ":y" ladanyi@201: for (StrVec::const_iterator it = edge_map_names.begin(); ladanyi@201: it != edge_map_names.end(); ++it) ladanyi@201: { ladanyi@201: if ((it->length() >= 3) && ladanyi@201: (it->substr(it->length()-2, it->length()) == ":x")) ladanyi@201: { ladanyi@201: xMaps.push_back(it->substr(0, it->length()-2)); ladanyi@201: } ladanyi@201: if ((it->length() >= 3) && ladanyi@201: (it->substr(it->length()-2, it->length()) == ":y")) ladanyi@201: { ladanyi@201: yMaps.push_back(it->substr(0, it->length()-2)); ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: for (StrVec::const_iterator it1 = xMaps.begin(); ladanyi@201: it1 != xMaps.end(); ++it1) ladanyi@201: { ladanyi@201: for (StrVec::const_iterator it2 = yMaps.begin(); ladanyi@201: it2 != yMaps.end(); ++it2) ladanyi@201: { ladanyi@201: if (*it1 == *it2) xy_edge_map_names.push_back(*it1); ladanyi@201: } ladanyi@201: } ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: FileImportDialog::ImportData::~ImportData() ladanyi@201: { ladanyi@201: } ladanyi@201: ladanyi@201: bool FileImportDialog::ImportData::isXYNodeMap(const std::string& name) ladanyi@201: { ladanyi@201: if (isNodeMap(name + ":x") && isNodeMap(name + ":y")) return true; ladanyi@201: return false; ladanyi@201: } ladanyi@201: ladanyi@201: bool FileImportDialog::ImportData::isXYEdgeMap(const std::string& name) ladanyi@201: { ladanyi@201: if (isEdgeMap(name + ":x") && isEdgeMap(name + ":y")) return true; ladanyi@201: return false; ladanyi@201: } ladanyi@201: ladanyi@201: bool FileImportDialog::ImportData::isNodeMap(const std::string& name) ladanyi@201: { ladanyi@201: if (contains(node_map_names, name)) return true; ladanyi@201: return false; ladanyi@201: } ladanyi@201: ladanyi@201: bool FileImportDialog::ImportData::isEdgeMap(const std::string& name) ladanyi@201: { ladanyi@201: if (contains(edge_map_names, name)) return true; ladanyi@201: return false; ladanyi@201: } ladanyi@201: ladanyi@201: bool FileImportDialog::ImportData::contains(const std::vector& vec, ladanyi@201: const std::string& str) ladanyi@201: { ladanyi@201: for (std::vector::const_iterator it = vec.begin(); ladanyi@201: it != vec.end(); ++it) ladanyi@201: { ladanyi@201: if (*it == str) return true; ladanyi@201: } ladanyi@201: return false; ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onNodeCoordOneMapChanged() ladanyi@201: { ladanyi@201: p_data->node_coord_one_map_name = cbNodeCoordOneMap.get_active_text(); ladanyi@201: update_node_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onNodeCoordTwoMaps1Changed() ladanyi@201: { ladanyi@201: p_data->node_coord_two_maps_1_name = cbNodeCoordTwoMaps1.get_active_text(); ladanyi@201: update_node_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onNodeCoordTwoMaps2Changed() ladanyi@201: { ladanyi@201: p_data->node_coord_two_maps_2_name = cbNodeCoordTwoMaps2.get_active_text(); ladanyi@201: update_node_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onArrowCoordOneMapChanged() ladanyi@201: { ladanyi@201: p_data->arrow_coord_one_map_name = cbArrowCoordOneMap.get_active_text(); ladanyi@201: update_edge_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onArrowCoordTwoMaps1Changed() ladanyi@201: { ladanyi@201: p_data->arrow_coord_two_maps_1_name = cbArrowCoordTwoMaps1.get_active_text(); ladanyi@201: update_edge_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onArrowCoordTwoMaps2Changed() ladanyi@201: { ladanyi@201: p_data->arrow_coord_two_maps_2_name = cbArrowCoordTwoMaps2.get_active_text(); ladanyi@201: update_edge_tree_view(); ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onNodeMapNumericToggled(const Glib::ustring& path) ladanyi@201: { ladanyi@201: Gtk::TreeModel::iterator iter = refNodeMapStore->get_iter( ladanyi@201: Gtk::TreeModel::Path(path)); ladanyi@201: Gtk::TreeModel::Row row = *iter; ladanyi@201: std::vector::iterator it; ladanyi@201: for (it = node_tree_view_records.begin(); ladanyi@201: it != node_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->name == row[NodeMapColumns.colName]) break; ladanyi@201: } ladanyi@201: if (row[NodeMapColumns.colReadAsNumeric]) ladanyi@201: { ladanyi@201: row[NodeMapColumns.colReadAsString] = false; ladanyi@201: it->string = false; ladanyi@201: it->numeric = true; ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onNodeMapStringToggled(const Glib::ustring& path) ladanyi@201: { ladanyi@201: Gtk::TreeModel::iterator iter = refNodeMapStore->get_iter( ladanyi@201: Gtk::TreeModel::Path(path)); ladanyi@201: Gtk::TreeModel::Row row = *iter; ladanyi@201: std::vector::iterator it; ladanyi@201: for (it = node_tree_view_records.begin(); ladanyi@201: it != node_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->name == row[NodeMapColumns.colName]) break; ladanyi@201: } ladanyi@201: if (row[NodeMapColumns.colReadAsString]) ladanyi@201: { ladanyi@201: row[NodeMapColumns.colReadAsNumeric] = false; ladanyi@201: it->string = true; ladanyi@201: it->numeric = false; ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::update_node_tree_view() ladanyi@201: { ladanyi@201: for (std::vector::iterator it = ladanyi@201: node_tree_view_records.begin(); it != node_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: it->visible = true; ladanyi@201: } ladanyi@201: switch (p_data->node_coord_load_from) ladanyi@201: { ladanyi@201: case ImportData::ONE_MAP: ladanyi@201: for (std::vector::iterator it = ladanyi@201: node_tree_view_records.begin(); it != ladanyi@201: node_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->name == p_data->node_coord_one_map_name) ladanyi@201: it->visible = false; ladanyi@201: } ladanyi@201: break; ladanyi@201: case ImportData::TWO_MAPS: ladanyi@201: for (std::vector::iterator it = ladanyi@201: node_tree_view_records.begin(); it != ladanyi@201: node_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if ((it->name == p_data->node_coord_two_maps_1_name) || ladanyi@201: (it->name == p_data->node_coord_two_maps_2_name)) ladanyi@201: it->visible = false; ladanyi@201: } ladanyi@201: break; ladanyi@201: case ImportData::DONT_READ: ladanyi@201: break; ladanyi@201: } ladanyi@201: refNodeMapStore->clear(); ladanyi@201: for (std::vector::iterator it = ladanyi@201: node_tree_view_records.begin(); it != node_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->visible) ladanyi@201: { ladanyi@201: Gtk::TreeModel::Row row = *(refNodeMapStore->append()); ladanyi@201: row[NodeMapColumns.colName] = it->name; ladanyi@201: row[NodeMapColumns.colReadAsNumeric] = it->numeric; ladanyi@201: row[NodeMapColumns.colReadAsString] = it->string; ladanyi@201: } ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onEdgeMapNumericToggled(const Glib::ustring& path) ladanyi@201: { ladanyi@201: Gtk::TreeModel::iterator iter = refEdgeMapStore->get_iter( ladanyi@201: Gtk::TreeModel::Path(path)); ladanyi@201: Gtk::TreeModel::Row row = *iter; ladanyi@201: std::vector::iterator it; ladanyi@201: for (it = edge_tree_view_records.begin(); ladanyi@201: it != edge_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->name == row[EdgeMapColumns.colName]) break; ladanyi@201: } ladanyi@201: if (row[EdgeMapColumns.colReadAsNumeric]) ladanyi@201: { ladanyi@201: row[EdgeMapColumns.colReadAsString] = false; ladanyi@201: it->string = false; ladanyi@201: it->numeric = true; ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::onEdgeMapStringToggled(const Glib::ustring& path) ladanyi@201: { ladanyi@201: Gtk::TreeModel::iterator iter = refEdgeMapStore->get_iter( ladanyi@201: Gtk::TreeModel::Path(path)); ladanyi@201: Gtk::TreeModel::Row row = *iter; ladanyi@201: std::vector::iterator it; ladanyi@201: for (it = edge_tree_view_records.begin(); ladanyi@201: it != edge_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->name == row[EdgeMapColumns.colName]) break; ladanyi@201: } ladanyi@201: if (row[EdgeMapColumns.colReadAsString]) ladanyi@201: { ladanyi@201: row[EdgeMapColumns.colReadAsNumeric] = false; ladanyi@201: it->string = true; ladanyi@201: it->numeric = false; ladanyi@201: } ladanyi@201: } ladanyi@201: ladanyi@201: void FileImportDialog::update_edge_tree_view() ladanyi@201: { ladanyi@201: for (std::vector::iterator it = ladanyi@201: edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: it->visible = true; ladanyi@201: } ladanyi@201: switch (p_data->arrow_coord_load_from) ladanyi@201: { ladanyi@201: case ImportData::ONE_MAP: ladanyi@201: for (std::vector::iterator it = ladanyi@201: edge_tree_view_records.begin(); it != ladanyi@201: edge_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->name == p_data->arrow_coord_one_map_name) ladanyi@201: it->visible = false; ladanyi@201: } ladanyi@201: break; ladanyi@201: case ImportData::TWO_MAPS: ladanyi@201: for (std::vector::iterator it = ladanyi@201: edge_tree_view_records.begin(); it != ladanyi@201: edge_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if ((it->name == p_data->arrow_coord_two_maps_1_name) || ladanyi@201: (it->name == p_data->arrow_coord_two_maps_2_name)) ladanyi@201: it->visible = false; ladanyi@201: } ladanyi@201: break; ladanyi@201: case ImportData::DONT_READ: ladanyi@201: break; ladanyi@201: } ladanyi@201: refEdgeMapStore->clear(); ladanyi@201: for (std::vector::iterator it = ladanyi@201: edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ++it) ladanyi@201: { ladanyi@201: if (it->visible) ladanyi@201: { ladanyi@201: Gtk::TreeModel::Row row = *(refEdgeMapStore->append()); ladanyi@201: row[EdgeMapColumns.colName] = it->name; ladanyi@201: row[EdgeMapColumns.colReadAsNumeric] = it->numeric; ladanyi@201: row[EdgeMapColumns.colReadAsString] = it->string; ladanyi@201: } ladanyi@201: } ladanyi@201: }