file_import_dialog.cc
author ladanyi
Wed, 02 Jan 2008 21:03:09 +0000
changeset 201 879e47e5b731
permissions -rw-r--r--
Merge branches/akos to trunk.
ladanyi@201
     1
#include "file_import_dialog.h"
ladanyi@201
     2
#include <gtkmm/dialog.h>
ladanyi@201
     3
#include <gtkmm/stock.h>
ladanyi@201
     4
#include <gtkmm/notebook.h>
ladanyi@201
     5
#include <gtkmm/messagedialog.h>
ladanyi@201
     6
#include <gtkmm/frame.h>
ladanyi@201
     7
#include <iostream>
ladanyi@201
     8
ladanyi@201
     9
FileImportDialog::FileImportDialog(ImportData* d) :
ladanyi@201
    10
  p_data(d)
ladanyi@201
    11
{
ladanyi@201
    12
  add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ladanyi@201
    13
  add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
ladanyi@201
    14
ladanyi@201
    15
  Gtk::VBox* pVBox = get_vbox();
ladanyi@201
    16
ladanyi@201
    17
  Gtk::Notebook* nb = Gtk::manage(new Gtk::Notebook);
ladanyi@201
    18
  pVBox->pack_start(*nb, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
    19
ladanyi@201
    20
  Gtk::VBox* vbNodeMaps = Gtk::manage(new Gtk::VBox(false, 18));
ladanyi@201
    21
  vbNodeMaps->set_border_width(12);
ladanyi@201
    22
ladanyi@201
    23
  Gtk::VBox* vbEdgeMaps = Gtk::manage(new Gtk::VBox(false, 18));
ladanyi@201
    24
  vbEdgeMaps->set_border_width(12);
ladanyi@201
    25
ladanyi@201
    26
  Gtk::VBox* vbSpecMaps = Gtk::manage(new Gtk::VBox(false, 18));
ladanyi@201
    27
  vbSpecMaps->set_border_width(12);
ladanyi@201
    28
ladanyi@201
    29
  nb->append_page(*vbSpecMaps, "Special Maps");
ladanyi@201
    30
  nb->append_page(*vbNodeMaps, "Node Maps");
ladanyi@201
    31
  nb->append_page(*vbEdgeMaps, "Edge Maps");
ladanyi@201
    32
ladanyi@201
    33
  // child widgets of vbSpecMaps
ladanyi@201
    34
  {
ladanyi@201
    35
    Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
ladanyi@201
    36
    vbSpecMaps->pack_start(*box1, Gtk::PACK_SHRINK);
ladanyi@201
    37
ladanyi@201
    38
    {
ladanyi@201
    39
      Gtk::Label* label1 =
ladanyi@201
    40
        Gtk::manage(new Gtk::Label("<b>Node Coordinates</b>"));
ladanyi@201
    41
      label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
ladanyi@201
    42
      label1->set_use_markup();
ladanyi@201
    43
      box1->pack_start(*label1);
ladanyi@201
    44
ladanyi@201
    45
      Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
ladanyi@201
    46
      box1->pack_start(*box2);
ladanyi@201
    47
ladanyi@201
    48
      Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
    49
      box2->pack_start(*fill1, Gtk::PACK_SHRINK);
ladanyi@201
    50
ladanyi@201
    51
      Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
ladanyi@201
    52
      box2->pack_start(*box3);
ladanyi@201
    53
ladanyi@201
    54
      Gtk::VBox* box13 = Gtk::manage(new Gtk::VBox);
ladanyi@201
    55
      box3->pack_start(*box13);
ladanyi@201
    56
ladanyi@201
    57
      rbNodeCoordNone.set_label("None");
ladanyi@201
    58
      Gtk::RadioButtonGroup group = rbNodeCoordNone.get_group();
ladanyi@201
    59
      box13->pack_start(rbNodeCoordNone);
ladanyi@201
    60
ladanyi@201
    61
      Gtk::VBox* box4 = Gtk::manage(new Gtk::VBox);
ladanyi@201
    62
      box3->pack_start(*box4);
ladanyi@201
    63
ladanyi@201
    64
      rbNodeCoordOneMap.set_label("One Map");
ladanyi@201
    65
      rbNodeCoordOneMap.set_group(group);
ladanyi@201
    66
      box4->pack_start(rbNodeCoordOneMap);
ladanyi@201
    67
ladanyi@201
    68
      Gtk::HBox* box5 = Gtk::manage(new Gtk::HBox);
ladanyi@201
    69
      box4->pack_start(*box5);
ladanyi@201
    70
ladanyi@201
    71
      Gtk::Label* fill2 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
    72
      box5->pack_start(*fill2, Gtk::PACK_SHRINK);
ladanyi@201
    73
ladanyi@201
    74
      Gtk::VBox* box6 = Gtk::manage(new Gtk::VBox);
ladanyi@201
    75
      box5->pack_start(*box6);
ladanyi@201
    76
ladanyi@201
    77
      Gtk::HBox* box7 = Gtk::manage(new Gtk::HBox);
ladanyi@201
    78
      box6->pack_start(*box7);
ladanyi@201
    79
ladanyi@201
    80
      Gtk::Label* label2 = Gtk::manage(new Gtk::Label("(X, Y)"));
ladanyi@201
    81
      box7->pack_start(*label2, Gtk::PACK_SHRINK, 4);
ladanyi@201
    82
ladanyi@201
    83
      box7->pack_start(cbNodeCoordOneMap, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
    84
ladanyi@201
    85
ladanyi@201
    86
      Gtk::VBox* box8 = Gtk::manage(new Gtk::VBox);
ladanyi@201
    87
      box3->pack_start(*box8);
ladanyi@201
    88
ladanyi@201
    89
      rbNodeCoordTwoMaps.set_label("Two Maps");
ladanyi@201
    90
      rbNodeCoordTwoMaps.set_group(group);
ladanyi@201
    91
      box8->pack_start(rbNodeCoordTwoMaps);
ladanyi@201
    92
ladanyi@201
    93
      Gtk::HBox* box9 = Gtk::manage(new Gtk::HBox);
ladanyi@201
    94
      box8->pack_start(*box9);
ladanyi@201
    95
ladanyi@201
    96
      Gtk::Label* fill3 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
    97
      box9->pack_start(*fill3, Gtk::PACK_SHRINK);
ladanyi@201
    98
ladanyi@201
    99
      Gtk::VBox* box10 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   100
      box9->pack_start(*box10);
ladanyi@201
   101
ladanyi@201
   102
      Gtk::HBox* box11 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   103
      box10->pack_start(*box11);
ladanyi@201
   104
ladanyi@201
   105
      Gtk::Label* label3 = Gtk::manage(new Gtk::Label("X"));
ladanyi@201
   106
      box11->pack_start(*label3, Gtk::PACK_SHRINK, 4);
ladanyi@201
   107
ladanyi@201
   108
      box11->pack_start(cbNodeCoordTwoMaps1, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   109
ladanyi@201
   110
      Gtk::HBox* box12 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   111
      box10->pack_start(*box12);
ladanyi@201
   112
ladanyi@201
   113
      Gtk::Label* label4 = Gtk::manage(new Gtk::Label("Y"));
ladanyi@201
   114
      box12->pack_start(*label4, Gtk::PACK_SHRINK, 4);
ladanyi@201
   115
ladanyi@201
   116
      box12->pack_start(cbNodeCoordTwoMaps2, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   117
ladanyi@201
   118
      cbNodeCoordOneMap.signal_changed().connect(
ladanyi@201
   119
          sigc::mem_fun(*this, &FileImportDialog::onNodeCoordOneMapChanged));
ladanyi@201
   120
      cbNodeCoordTwoMaps1.signal_changed().connect(
ladanyi@201
   121
          sigc::mem_fun(*this, &FileImportDialog::onNodeCoordTwoMaps1Changed));
ladanyi@201
   122
      cbNodeCoordTwoMaps2.signal_changed().connect(
ladanyi@201
   123
          sigc::mem_fun(*this, &FileImportDialog::onNodeCoordTwoMaps2Changed));
ladanyi@201
   124
    }
ladanyi@201
   125
ladanyi@201
   126
    {
ladanyi@201
   127
      Gtk::Label* label1 =
ladanyi@201
   128
        Gtk::manage(new Gtk::Label("<b>Arrow Coordinates</b>"));
ladanyi@201
   129
      label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
ladanyi@201
   130
      label1->set_use_markup();
ladanyi@201
   131
      box1->pack_start(*label1);
ladanyi@201
   132
ladanyi@201
   133
      Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   134
      box1->pack_start(*box2);
ladanyi@201
   135
ladanyi@201
   136
      Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
   137
      box2->pack_start(*fill1, Gtk::PACK_SHRINK);
ladanyi@201
   138
ladanyi@201
   139
      Gtk::VBox* box3 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   140
      box2->pack_start(*box3);
ladanyi@201
   141
ladanyi@201
   142
      Gtk::VBox* box13 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   143
      box3->pack_start(*box13);
ladanyi@201
   144
ladanyi@201
   145
      rbArrowCoordNone.set_label("None");
ladanyi@201
   146
      Gtk::RadioButtonGroup group = rbArrowCoordNone.get_group();
ladanyi@201
   147
      box13->pack_start(rbArrowCoordNone);
ladanyi@201
   148
ladanyi@201
   149
      Gtk::VBox* box4 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   150
      box3->pack_start(*box4);
ladanyi@201
   151
ladanyi@201
   152
      rbArrowCoordOneMap.set_label("One Map");
ladanyi@201
   153
      rbArrowCoordOneMap.set_group(group);
ladanyi@201
   154
      box4->pack_start(rbArrowCoordOneMap);
ladanyi@201
   155
ladanyi@201
   156
      Gtk::HBox* box5 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   157
      box4->pack_start(*box5);
ladanyi@201
   158
ladanyi@201
   159
      Gtk::Label* fill2 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
   160
      box5->pack_start(*fill2, Gtk::PACK_SHRINK);
ladanyi@201
   161
ladanyi@201
   162
      Gtk::VBox* box6 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   163
      box5->pack_start(*box6);
ladanyi@201
   164
ladanyi@201
   165
      Gtk::HBox* box7 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   166
      box6->pack_start(*box7);
ladanyi@201
   167
ladanyi@201
   168
      Gtk::Label* label2 = Gtk::manage(new Gtk::Label("(X, Y)"));
ladanyi@201
   169
      box7->pack_start(*label2, Gtk::PACK_SHRINK, 4);
ladanyi@201
   170
ladanyi@201
   171
      box7->pack_start(cbArrowCoordOneMap, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   172
ladanyi@201
   173
ladanyi@201
   174
      Gtk::VBox* box8 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   175
      box3->pack_start(*box8);
ladanyi@201
   176
ladanyi@201
   177
      rbArrowCoordTwoMaps.set_label("Two Maps");
ladanyi@201
   178
      rbArrowCoordTwoMaps.set_group(group);
ladanyi@201
   179
      box8->pack_start(rbArrowCoordTwoMaps);
ladanyi@201
   180
ladanyi@201
   181
      Gtk::HBox* box9 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   182
      box8->pack_start(*box9);
ladanyi@201
   183
ladanyi@201
   184
      Gtk::Label* fill3 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
   185
      box9->pack_start(*fill3, Gtk::PACK_SHRINK);
ladanyi@201
   186
ladanyi@201
   187
      Gtk::VBox* box10 = Gtk::manage(new Gtk::VBox);
ladanyi@201
   188
      box9->pack_start(*box10);
ladanyi@201
   189
ladanyi@201
   190
      Gtk::HBox* box11 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   191
      box10->pack_start(*box11);
ladanyi@201
   192
ladanyi@201
   193
      Gtk::Label* label3 = Gtk::manage(new Gtk::Label("X"));
ladanyi@201
   194
      box11->pack_start(*label3, Gtk::PACK_SHRINK, 4);
ladanyi@201
   195
ladanyi@201
   196
      box11->pack_start(cbArrowCoordTwoMaps1, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   197
ladanyi@201
   198
      Gtk::HBox* box12 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   199
      box10->pack_start(*box12);
ladanyi@201
   200
ladanyi@201
   201
      Gtk::Label* label4 = Gtk::manage(new Gtk::Label("Y"));
ladanyi@201
   202
      box12->pack_start(*label4, Gtk::PACK_SHRINK, 4);
ladanyi@201
   203
ladanyi@201
   204
      box12->pack_start(cbArrowCoordTwoMaps2, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   205
ladanyi@201
   206
      cbArrowCoordOneMap.signal_changed().connect(
ladanyi@201
   207
          sigc::mem_fun(*this, &FileImportDialog::onArrowCoordOneMapChanged));
ladanyi@201
   208
      cbArrowCoordTwoMaps1.signal_changed().connect(
ladanyi@201
   209
          sigc::mem_fun(*this, &FileImportDialog::onArrowCoordTwoMaps1Changed));
ladanyi@201
   210
      cbArrowCoordTwoMaps2.signal_changed().connect(
ladanyi@201
   211
          sigc::mem_fun(*this, &FileImportDialog::onArrowCoordTwoMaps2Changed));
ladanyi@201
   212
    }
ladanyi@201
   213
  }
ladanyi@201
   214
ladanyi@201
   215
  // child widgets of vbNodeMaps
ladanyi@201
   216
  {
ladanyi@201
   217
    Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
ladanyi@201
   218
    vbNodeMaps->pack_start(*box1, Gtk::PACK_SHRINK);
ladanyi@201
   219
ladanyi@201
   220
    Gtk::Label* label1 =
ladanyi@201
   221
      Gtk::manage(new Gtk::Label("<b>Element type</b>"));
ladanyi@201
   222
    label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
ladanyi@201
   223
    label1->set_use_markup();
ladanyi@201
   224
    box1->pack_start(*label1, Gtk::PACK_SHRINK);
ladanyi@201
   225
ladanyi@201
   226
    Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   227
    box1->pack_start(*box2, Gtk::PACK_SHRINK);
ladanyi@201
   228
ladanyi@201
   229
    Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
   230
    box2->pack_start(*fill1, Gtk::PACK_SHRINK);
ladanyi@201
   231
ladanyi@201
   232
    Gtk::Frame* frame = Gtk::manage(new Gtk::Frame);
ladanyi@201
   233
    box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   234
ladanyi@201
   235
    Gtk::ScrolledWindow* swNodeMaps = Gtk::manage(new Gtk::ScrolledWindow);
ladanyi@201
   236
    frame->add(*swNodeMaps);
ladanyi@201
   237
ladanyi@201
   238
    swNodeMaps->add(twNodeMaps);
ladanyi@201
   239
ladanyi@201
   240
    refNodeMapStore = Gtk::ListStore::create(NodeMapColumns);
ladanyi@201
   241
ladanyi@201
   242
    for (std::vector<std::string>::const_iterator it =
ladanyi@201
   243
        p_data->node_map_names.begin(); it != p_data->node_map_names.end();
ladanyi@201
   244
        ++it)
ladanyi@201
   245
    {
ladanyi@201
   246
      node_tree_view_records.push_back(
ladanyi@201
   247
          tree_view_record(*it, false, false, true));
ladanyi@201
   248
    }
ladanyi@201
   249
ladanyi@201
   250
    twNodeMaps.set_model(refNodeMapStore);
ladanyi@201
   251
    twNodeMaps.append_column("Name", NodeMapColumns.colName);
ladanyi@201
   252
    {
ladanyi@201
   253
      int col = twNodeMaps.append_column_editable("Numeric",
ladanyi@201
   254
          NodeMapColumns.colReadAsNumeric);
ladanyi@201
   255
      Gtk::CellRendererToggle* pRenderer =
ladanyi@201
   256
        static_cast<Gtk::CellRendererToggle*>(
ladanyi@201
   257
            twNodeMaps.get_column_cell_renderer(col-1));
ladanyi@201
   258
      pRenderer->signal_toggled().connect(
ladanyi@201
   259
          sigc::mem_fun(*this, &FileImportDialog::onNodeMapNumericToggled));
ladanyi@201
   260
    }
ladanyi@201
   261
    {
ladanyi@201
   262
      int col = twNodeMaps.append_column_editable("String",
ladanyi@201
   263
          NodeMapColumns.colReadAsString);
ladanyi@201
   264
      Gtk::CellRendererToggle* pRenderer =
ladanyi@201
   265
        static_cast<Gtk::CellRendererToggle*>(
ladanyi@201
   266
            twNodeMaps.get_column_cell_renderer(col-1));
ladanyi@201
   267
      pRenderer->signal_toggled().connect(
ladanyi@201
   268
          sigc::mem_fun(*this, &FileImportDialog::onNodeMapStringToggled));
ladanyi@201
   269
    }
ladanyi@201
   270
ladanyi@201
   271
    swNodeMaps->set_size_request(-1, 200);
ladanyi@201
   272
    swNodeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
ladanyi@201
   273
  }
ladanyi@201
   274
ladanyi@201
   275
  // child widgets of vbEdgeMaps
ladanyi@201
   276
  {
ladanyi@201
   277
    Gtk::VBox* box1 = Gtk::manage(new Gtk::VBox(false, 6));
ladanyi@201
   278
    vbEdgeMaps->pack_start(*box1, Gtk::PACK_SHRINK);
ladanyi@201
   279
ladanyi@201
   280
    Gtk::Label* label1 =
ladanyi@201
   281
      Gtk::manage(new Gtk::Label("<b>Element type</b>"));
ladanyi@201
   282
    label1->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
ladanyi@201
   283
    label1->set_use_markup();
ladanyi@201
   284
    box1->pack_start(*label1, Gtk::PACK_SHRINK);
ladanyi@201
   285
ladanyi@201
   286
    Gtk::HBox* box2 = Gtk::manage(new Gtk::HBox);
ladanyi@201
   287
    box1->pack_start(*box2, Gtk::PACK_SHRINK);
ladanyi@201
   288
ladanyi@201
   289
    Gtk::Label* fill1 = Gtk::manage(new Gtk::Label("    "));
ladanyi@201
   290
    box2->pack_start(*fill1, Gtk::PACK_SHRINK);
ladanyi@201
   291
ladanyi@201
   292
    Gtk::Frame* frame = Gtk::manage(new Gtk::Frame);
ladanyi@201
   293
    box2->pack_start(*frame, Gtk::PACK_EXPAND_WIDGET);
ladanyi@201
   294
ladanyi@201
   295
    Gtk::ScrolledWindow* swEdgeMaps = Gtk::manage(new Gtk::ScrolledWindow);
ladanyi@201
   296
    frame->add(*swEdgeMaps);
ladanyi@201
   297
ladanyi@201
   298
    swEdgeMaps->add(twEdgeMaps);
ladanyi@201
   299
ladanyi@201
   300
    refEdgeMapStore = Gtk::ListStore::create(EdgeMapColumns);
ladanyi@201
   301
ladanyi@201
   302
    for (std::vector<std::string>::const_iterator it =
ladanyi@201
   303
        p_data->edge_map_names.begin(); it != p_data->edge_map_names.end();
ladanyi@201
   304
        ++it)
ladanyi@201
   305
    {
ladanyi@201
   306
      edge_tree_view_records.push_back(
ladanyi@201
   307
          tree_view_record(*it, false, false, true));
ladanyi@201
   308
    }
ladanyi@201
   309
ladanyi@201
   310
    twEdgeMaps.set_model(refEdgeMapStore);
ladanyi@201
   311
    twEdgeMaps.append_column("Name", EdgeMapColumns.colName);
ladanyi@201
   312
    {
ladanyi@201
   313
      int col = twEdgeMaps.append_column_editable("Numeric",
ladanyi@201
   314
          EdgeMapColumns.colReadAsNumeric);
ladanyi@201
   315
      Gtk::CellRendererToggle* pRenderer =
ladanyi@201
   316
        static_cast<Gtk::CellRendererToggle*>(
ladanyi@201
   317
            twEdgeMaps.get_column_cell_renderer(col-1));
ladanyi@201
   318
      pRenderer->signal_toggled().connect(
ladanyi@201
   319
          sigc::mem_fun(*this, &FileImportDialog::onEdgeMapNumericToggled));
ladanyi@201
   320
    }
ladanyi@201
   321
    {
ladanyi@201
   322
      int col = twEdgeMaps.append_column_editable("String",
ladanyi@201
   323
          EdgeMapColumns.colReadAsString);
ladanyi@201
   324
      Gtk::CellRendererToggle* pRenderer =
ladanyi@201
   325
        static_cast<Gtk::CellRendererToggle*>(
ladanyi@201
   326
            twEdgeMaps.get_column_cell_renderer(col-1));
ladanyi@201
   327
      pRenderer->signal_toggled().connect(
ladanyi@201
   328
          sigc::mem_fun(*this, &FileImportDialog::onEdgeMapStringToggled));
ladanyi@201
   329
    }
ladanyi@201
   330
ladanyi@201
   331
    swEdgeMaps->set_size_request(-1, 200);
ladanyi@201
   332
    swEdgeMaps->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
ladanyi@201
   333
  }
ladanyi@201
   334
ladanyi@201
   335
  // fill in the ComboBoxes
ladanyi@201
   336
  typedef std::vector<std::string> StrVec;
ladanyi@201
   337
  for (StrVec::const_iterator it = p_data->node_map_names.begin();
ladanyi@201
   338
      it != p_data->node_map_names.end(); ++it)
ladanyi@201
   339
  {
ladanyi@201
   340
    cbNodeCoordTwoMaps1.append_text(*it);
ladanyi@201
   341
    cbNodeCoordTwoMaps2.append_text(*it);
ladanyi@201
   342
  }
ladanyi@201
   343
  for (StrVec::const_iterator it = p_data->edge_map_names.begin();
ladanyi@201
   344
      it != p_data->edge_map_names.end(); ++it)
ladanyi@201
   345
  {
ladanyi@201
   346
    cbArrowCoordTwoMaps1.append_text(*it);
ladanyi@201
   347
    cbArrowCoordTwoMaps2.append_text(*it);
ladanyi@201
   348
  }
ladanyi@201
   349
  for (StrVec::const_iterator it = p_data->xy_node_map_names.begin();
ladanyi@201
   350
      it != p_data->xy_node_map_names.end(); ++it)
ladanyi@201
   351
  {
ladanyi@201
   352
    cbNodeCoordOneMap.append_text(*it);
ladanyi@201
   353
  }
ladanyi@201
   354
  for (StrVec::const_iterator it = p_data->xy_edge_map_names.begin();
ladanyi@201
   355
      it != p_data->xy_edge_map_names.end(); ++it)
ladanyi@201
   356
  {
ladanyi@201
   357
    cbArrowCoordOneMap.append_text(*it);
ladanyi@201
   358
  }
ladanyi@201
   359
ladanyi@201
   360
  if (p_data->isXYNodeMap("coord"))
ladanyi@201
   361
  {
ladanyi@201
   362
    cbNodeCoordOneMap.set_active_text("coord");
ladanyi@201
   363
  }
ladanyi@201
   364
  else if (p_data->isXYNodeMap("coords"))
ladanyi@201
   365
  {
ladanyi@201
   366
    cbNodeCoordOneMap.set_active_text("coords");
ladanyi@201
   367
  }
ladanyi@201
   368
  else if (p_data->isNodeMap("coord_x") &&
ladanyi@201
   369
           p_data->isNodeMap("coord_y"))
ladanyi@201
   370
  {
ladanyi@201
   371
    cbNodeCoordTwoMaps1.set_active_text("coord_x");
ladanyi@201
   372
    cbNodeCoordTwoMaps2.set_active_text("coord_y");
ladanyi@201
   373
  }
ladanyi@201
   374
  else if (p_data->isNodeMap("coords_x") &&
ladanyi@201
   375
           p_data->isNodeMap("coords_y"))
ladanyi@201
   376
  {
ladanyi@201
   377
    cbNodeCoordTwoMaps1.set_active_text("coords_x");
ladanyi@201
   378
    cbNodeCoordTwoMaps2.set_active_text("coords_y");
ladanyi@201
   379
  }
ladanyi@201
   380
  else if (p_data->isNodeMap("x") &&
ladanyi@201
   381
           p_data->isNodeMap("y"))
ladanyi@201
   382
  {
ladanyi@201
   383
    cbNodeCoordTwoMaps1.set_active_text("x");
ladanyi@201
   384
    cbNodeCoordTwoMaps2.set_active_text("y");
ladanyi@201
   385
  }
ladanyi@201
   386
ladanyi@201
   387
  if (p_data->isXYEdgeMap("arrow"))
ladanyi@201
   388
  {
ladanyi@201
   389
    cbArrowCoordOneMap.set_active_text("arrow");
ladanyi@201
   390
  }
ladanyi@201
   391
  else if (p_data->isXYEdgeMap("arrows"))
ladanyi@201
   392
  {
ladanyi@201
   393
    cbArrowCoordOneMap.set_active_text("arrows");
ladanyi@201
   394
  }
ladanyi@201
   395
  else if (p_data->isXYEdgeMap("midpoint"))
ladanyi@201
   396
  {
ladanyi@201
   397
    cbArrowCoordOneMap.set_active_text("midpoint");
ladanyi@201
   398
  }
ladanyi@201
   399
  else if (p_data->isXYEdgeMap("midpoints"))
ladanyi@201
   400
  {
ladanyi@201
   401
    cbArrowCoordOneMap.set_active_text("midpoints");
ladanyi@201
   402
  }
ladanyi@201
   403
  else if (p_data->isXYEdgeMap("mid"))
ladanyi@201
   404
  {
ladanyi@201
   405
    cbArrowCoordOneMap.set_active_text("mid");
ladanyi@201
   406
  }
ladanyi@201
   407
  else if (p_data->isXYEdgeMap("mids"))
ladanyi@201
   408
  {
ladanyi@201
   409
    cbArrowCoordOneMap.set_active_text("mids");
ladanyi@201
   410
  }
ladanyi@201
   411
  else if (p_data->isEdgeMap("arrow_x") &&
ladanyi@201
   412
           p_data->isEdgeMap("arrow_y"))
ladanyi@201
   413
  {
ladanyi@201
   414
    cbArrowCoordTwoMaps1.set_active_text("arrow_x");
ladanyi@201
   415
    cbArrowCoordTwoMaps2.set_active_text("arrow_y");
ladanyi@201
   416
  }
ladanyi@201
   417
  else if (p_data->isEdgeMap("arrows_x") &&
ladanyi@201
   418
           p_data->isEdgeMap("arrows_y"))
ladanyi@201
   419
  {
ladanyi@201
   420
    cbArrowCoordTwoMaps1.set_active_text("arrows_x");
ladanyi@201
   421
    cbArrowCoordTwoMaps2.set_active_text("arrows_y");
ladanyi@201
   422
  }
ladanyi@201
   423
  else if (p_data->isEdgeMap("midpoint_x") &&
ladanyi@201
   424
           p_data->isEdgeMap("midpoint_y"))
ladanyi@201
   425
  {
ladanyi@201
   426
    cbArrowCoordTwoMaps1.set_active_text("midpoint_x");
ladanyi@201
   427
    cbArrowCoordTwoMaps2.set_active_text("midpoint_y");
ladanyi@201
   428
  }
ladanyi@201
   429
  else if (p_data->isEdgeMap("midpoints_x") &&
ladanyi@201
   430
           p_data->isEdgeMap("midpoints_y"))
ladanyi@201
   431
  {
ladanyi@201
   432
    cbArrowCoordTwoMaps1.set_active_text("midpoints_x");
ladanyi@201
   433
    cbArrowCoordTwoMaps2.set_active_text("midpoints_y");
ladanyi@201
   434
  }
ladanyi@201
   435
  else if (p_data->isEdgeMap("mid_x") &&
ladanyi@201
   436
           p_data->isEdgeMap("mid_y"))
ladanyi@201
   437
  {
ladanyi@201
   438
    cbArrowCoordTwoMaps1.set_active_text("mid_x");
ladanyi@201
   439
    cbArrowCoordTwoMaps2.set_active_text("mid_y");
ladanyi@201
   440
  }
ladanyi@201
   441
  else if (p_data->isEdgeMap("mids_x") &&
ladanyi@201
   442
           p_data->isEdgeMap("mids_y"))
ladanyi@201
   443
  {
ladanyi@201
   444
    cbArrowCoordTwoMaps1.set_active_text("mids_x");
ladanyi@201
   445
    cbArrowCoordTwoMaps2.set_active_text("mids_y");
ladanyi@201
   446
  }
ladanyi@201
   447
ladanyi@201
   448
  {
ladanyi@201
   449
    if (cbNodeCoordOneMap.get_active_text() != "")
ladanyi@201
   450
      rbNodeCoordOneMap.set_active();
ladanyi@201
   451
    else if (cbNodeCoordTwoMaps1.get_active_text() != "")
ladanyi@201
   452
      rbNodeCoordTwoMaps.set_active();
ladanyi@201
   453
    else
ladanyi@201
   454
      rbNodeCoordNone.set_active();
ladanyi@201
   455
ladanyi@201
   456
    if (cbArrowCoordOneMap.get_active_text() != "")
ladanyi@201
   457
      rbArrowCoordOneMap.set_active();
ladanyi@201
   458
    else if (cbArrowCoordTwoMaps1.get_active_text() != "")
ladanyi@201
   459
      rbArrowCoordTwoMaps.set_active();
ladanyi@201
   460
    else
ladanyi@201
   461
      rbArrowCoordNone.set_active();
ladanyi@201
   462
ladanyi@201
   463
    onNodeCoordMapNumToggled();
ladanyi@201
   464
    onArrowCoordMapNumToggled();
ladanyi@201
   465
ladanyi@201
   466
    rbNodeCoordOneMap.signal_toggled().connect(
ladanyi@201
   467
        sigc::mem_fun(*this, &FileImportDialog::onNodeCoordMapNumToggled));
ladanyi@201
   468
    rbNodeCoordTwoMaps.signal_toggled().connect(
ladanyi@201
   469
        sigc::mem_fun(*this, &FileImportDialog::onNodeCoordMapNumToggled));
ladanyi@201
   470
    rbArrowCoordOneMap.signal_toggled().connect(
ladanyi@201
   471
        sigc::mem_fun(*this, &FileImportDialog::onArrowCoordMapNumToggled));
ladanyi@201
   472
    rbArrowCoordTwoMaps.signal_toggled().connect(
ladanyi@201
   473
        sigc::mem_fun(*this, &FileImportDialog::onArrowCoordMapNumToggled));
ladanyi@201
   474
  }
ladanyi@201
   475
ladanyi@201
   476
  signal_response().connect(
ladanyi@201
   477
      sigc::mem_fun(*this, &FileImportDialog::onResponse));
ladanyi@201
   478
ladanyi@201
   479
  update_node_tree_view();
ladanyi@201
   480
  update_edge_tree_view();
ladanyi@201
   481
ladanyi@201
   482
  show_all_children();
ladanyi@201
   483
}
ladanyi@201
   484
ladanyi@201
   485
void FileImportDialog::onNodeCoordMapNumToggled()
ladanyi@201
   486
{
ladanyi@201
   487
  if (rbNodeCoordOneMap.get_active())
ladanyi@201
   488
  {
ladanyi@201
   489
    cbNodeCoordOneMap.get_parent()->set_sensitive(true);
ladanyi@201
   490
    cbNodeCoordTwoMaps1.get_parent()->set_sensitive(false);
ladanyi@201
   491
    cbNodeCoordTwoMaps2.get_parent()->set_sensitive(false);
ladanyi@201
   492
ladanyi@201
   493
    p_data->node_coord_load_from = ImportData::ONE_MAP;
ladanyi@201
   494
  }
ladanyi@201
   495
  else if (rbNodeCoordTwoMaps.get_active())
ladanyi@201
   496
  {
ladanyi@201
   497
    cbNodeCoordOneMap.get_parent()->set_sensitive(false);
ladanyi@201
   498
    cbNodeCoordTwoMaps1.get_parent()->set_sensitive(true);
ladanyi@201
   499
    cbNodeCoordTwoMaps2.get_parent()->set_sensitive(true);
ladanyi@201
   500
ladanyi@201
   501
    p_data->node_coord_load_from = ImportData::TWO_MAPS;
ladanyi@201
   502
  }
ladanyi@201
   503
  else if (rbNodeCoordNone.get_active())
ladanyi@201
   504
  {
ladanyi@201
   505
    cbNodeCoordOneMap.get_parent()->set_sensitive(false);
ladanyi@201
   506
    cbNodeCoordTwoMaps1.get_parent()->set_sensitive(false);
ladanyi@201
   507
    cbNodeCoordTwoMaps2.get_parent()->set_sensitive(false);
ladanyi@201
   508
ladanyi@201
   509
    p_data->node_coord_load_from = ImportData::DONT_READ;
ladanyi@201
   510
  }
ladanyi@201
   511
  update_node_tree_view();
ladanyi@201
   512
}
ladanyi@201
   513
ladanyi@201
   514
void FileImportDialog::onArrowCoordMapNumToggled()
ladanyi@201
   515
{
ladanyi@201
   516
  if (rbArrowCoordOneMap.get_active())
ladanyi@201
   517
  {
ladanyi@201
   518
    cbArrowCoordOneMap.get_parent()->set_sensitive(true);
ladanyi@201
   519
    cbArrowCoordTwoMaps1.get_parent()->set_sensitive(false);
ladanyi@201
   520
    cbArrowCoordTwoMaps2.get_parent()->set_sensitive(false);
ladanyi@201
   521
ladanyi@201
   522
    p_data->arrow_coord_load_from = ImportData::ONE_MAP;
ladanyi@201
   523
  }
ladanyi@201
   524
  else if (rbArrowCoordTwoMaps.get_active())
ladanyi@201
   525
  {
ladanyi@201
   526
    cbArrowCoordOneMap.get_parent()->set_sensitive(false);
ladanyi@201
   527
    cbArrowCoordTwoMaps1.get_parent()->set_sensitive(true);
ladanyi@201
   528
    cbArrowCoordTwoMaps2.get_parent()->set_sensitive(true);
ladanyi@201
   529
ladanyi@201
   530
    p_data->arrow_coord_load_from = ImportData::TWO_MAPS;
ladanyi@201
   531
  }
ladanyi@201
   532
  else if (rbArrowCoordNone.get_active())
ladanyi@201
   533
  {
ladanyi@201
   534
    cbArrowCoordOneMap.get_parent()->set_sensitive(false);
ladanyi@201
   535
    cbArrowCoordTwoMaps1.get_parent()->set_sensitive(false);
ladanyi@201
   536
    cbArrowCoordTwoMaps2.get_parent()->set_sensitive(false);
ladanyi@201
   537
ladanyi@201
   538
    p_data->arrow_coord_load_from = ImportData::DONT_READ;
ladanyi@201
   539
  }
ladanyi@201
   540
  update_edge_tree_view();
ladanyi@201
   541
}
ladanyi@201
   542
ladanyi@201
   543
FileImportDialog::~FileImportDialog()
ladanyi@201
   544
{
ladanyi@201
   545
}
ladanyi@201
   546
ladanyi@201
   547
void FileImportDialog::onResponse(int id)
ladanyi@201
   548
{
ladanyi@201
   549
  if (id == Gtk::RESPONSE_OK)
ladanyi@201
   550
  {
ladanyi@201
   551
    if ((rbNodeCoordOneMap.get_active() &&
ladanyi@201
   552
          cbNodeCoordOneMap.get_active_text() == "") ||
ladanyi@201
   553
        (rbNodeCoordTwoMaps.get_active() &&
ladanyi@201
   554
         (cbNodeCoordTwoMaps1.get_active_text() == "" ||
ladanyi@201
   555
          cbNodeCoordTwoMaps2.get_active_text() == "")))
ladanyi@201
   556
    {
ladanyi@201
   557
      Gtk::MessageDialog mdialog("No node map selected.",
ladanyi@201
   558
          false, Gtk::MESSAGE_ERROR);
ladanyi@201
   559
      mdialog.run();
ladanyi@201
   560
      return;
ladanyi@201
   561
    }
ladanyi@201
   562
    else if (rbNodeCoordTwoMaps.get_active() &&
ladanyi@201
   563
             cbNodeCoordTwoMaps1.get_active_text() == 
ladanyi@201
   564
             cbNodeCoordTwoMaps2.get_active_text())
ladanyi@201
   565
    {
ladanyi@201
   566
      Gtk::MessageDialog mdialog(
ladanyi@201
   567
          "Same node map selected for both coordinates.",
ladanyi@201
   568
          false, Gtk::MESSAGE_ERROR);
ladanyi@201
   569
      mdialog.run();
ladanyi@201
   570
      return;
ladanyi@201
   571
    }
ladanyi@201
   572
    if ((rbArrowCoordOneMap.get_active() &&
ladanyi@201
   573
          cbArrowCoordOneMap.get_active_text() == "") ||
ladanyi@201
   574
        (rbArrowCoordTwoMaps.get_active() &&
ladanyi@201
   575
         (cbArrowCoordTwoMaps1.get_active_text() == "" ||
ladanyi@201
   576
          cbArrowCoordTwoMaps2.get_active_text() == "")))
ladanyi@201
   577
    {
ladanyi@201
   578
      Gtk::MessageDialog mdialog("No edge map selected.",
ladanyi@201
   579
          false, Gtk::MESSAGE_ERROR);
ladanyi@201
   580
      mdialog.run();
ladanyi@201
   581
      return;
ladanyi@201
   582
    }
ladanyi@201
   583
    else if (rbArrowCoordTwoMaps.get_active() &&
ladanyi@201
   584
             cbArrowCoordTwoMaps1.get_active_text() == 
ladanyi@201
   585
             cbArrowCoordTwoMaps2.get_active_text())
ladanyi@201
   586
    {
ladanyi@201
   587
      Gtk::MessageDialog mdialog(
ladanyi@201
   588
          "Same edge map selected for both coordinates.",
ladanyi@201
   589
          false, Gtk::MESSAGE_ERROR);
ladanyi@201
   590
      mdialog.run();
ladanyi@201
   591
      return;
ladanyi@201
   592
    }
ladanyi@201
   593
ladanyi@201
   594
    for (std::vector<tree_view_record>::const_iterator it =
ladanyi@201
   595
        node_tree_view_records.begin(); it != node_tree_view_records.end();
ladanyi@201
   596
        ++it)
ladanyi@201
   597
    {
ladanyi@201
   598
      if (it->visible)
ladanyi@201
   599
      {
ladanyi@201
   600
        if (it->numeric)
ladanyi@201
   601
          p_data->numeric_node_map_names.push_back(it->name);
ladanyi@201
   602
        if (it->string)
ladanyi@201
   603
          p_data->string_node_map_names.push_back(it->name);
ladanyi@201
   604
      }
ladanyi@201
   605
    }
ladanyi@201
   606
ladanyi@201
   607
    for (std::vector<tree_view_record>::const_iterator it =
ladanyi@201
   608
        edge_tree_view_records.begin(); it != edge_tree_view_records.end();
ladanyi@201
   609
        ++it)
ladanyi@201
   610
    {
ladanyi@201
   611
      if (it->visible)
ladanyi@201
   612
      {
ladanyi@201
   613
        if (it->numeric)
ladanyi@201
   614
          p_data->numeric_edge_map_names.push_back(it->name);
ladanyi@201
   615
        if (it->string)
ladanyi@201
   616
          p_data->string_edge_map_names.push_back(it->name);
ladanyi@201
   617
      }
ladanyi@201
   618
    }
ladanyi@201
   619
  }
ladanyi@201
   620
}
ladanyi@201
   621
ladanyi@201
   622
FileImportDialog::ImportData::ImportData(
ladanyi@201
   623
    const std::vector<std::string>& _node_map_names,
ladanyi@201
   624
    const std::vector<std::string>& _edge_map_names) :
ladanyi@201
   625
  node_map_names(_node_map_names),
ladanyi@201
   626
  edge_map_names(_edge_map_names)
ladanyi@201
   627
{
ladanyi@201
   628
  typedef std::vector<std::string> StrVec;
ladanyi@201
   629
  {
ladanyi@201
   630
    StrVec xMaps;
ladanyi@201
   631
    StrVec yMaps;
ladanyi@201
   632
    // collect map names ending with ":x" and ":y"
ladanyi@201
   633
    for (StrVec::const_iterator it = node_map_names.begin();
ladanyi@201
   634
        it != node_map_names.end(); ++it)
ladanyi@201
   635
    {
ladanyi@201
   636
      if ((it->length() >= 3) &&
ladanyi@201
   637
          (it->substr(it->length()-2, it->length())  == ":x"))
ladanyi@201
   638
      {
ladanyi@201
   639
        xMaps.push_back(it->substr(0, it->length()-2));
ladanyi@201
   640
      }
ladanyi@201
   641
      if ((it->length() >= 3) &&
ladanyi@201
   642
          (it->substr(it->length()-2, it->length())  == ":y"))
ladanyi@201
   643
      {
ladanyi@201
   644
        yMaps.push_back(it->substr(0, it->length()-2));
ladanyi@201
   645
      }
ladanyi@201
   646
    }
ladanyi@201
   647
ladanyi@201
   648
    for (StrVec::const_iterator it1 = xMaps.begin();
ladanyi@201
   649
        it1 != xMaps.end(); ++it1)
ladanyi@201
   650
    {
ladanyi@201
   651
      for (StrVec::const_iterator it2 = yMaps.begin();
ladanyi@201
   652
          it2 != yMaps.end(); ++it2)
ladanyi@201
   653
      {
ladanyi@201
   654
        if (*it1 == *it2) xy_node_map_names.push_back(*it1);
ladanyi@201
   655
      }
ladanyi@201
   656
    }
ladanyi@201
   657
  }
ladanyi@201
   658
  {
ladanyi@201
   659
    StrVec xMaps;
ladanyi@201
   660
    StrVec yMaps;
ladanyi@201
   661
    // collect map names ending with ":x" and ":y"
ladanyi@201
   662
    for (StrVec::const_iterator it = edge_map_names.begin();
ladanyi@201
   663
        it != edge_map_names.end(); ++it)
ladanyi@201
   664
    {
ladanyi@201
   665
      if ((it->length() >= 3) &&
ladanyi@201
   666
          (it->substr(it->length()-2, it->length())  == ":x"))
ladanyi@201
   667
      {
ladanyi@201
   668
        xMaps.push_back(it->substr(0, it->length()-2));
ladanyi@201
   669
      }
ladanyi@201
   670
      if ((it->length() >= 3) &&
ladanyi@201
   671
          (it->substr(it->length()-2, it->length())  == ":y"))
ladanyi@201
   672
      {
ladanyi@201
   673
        yMaps.push_back(it->substr(0, it->length()-2));
ladanyi@201
   674
      }
ladanyi@201
   675
    }
ladanyi@201
   676
ladanyi@201
   677
    for (StrVec::const_iterator it1 = xMaps.begin();
ladanyi@201
   678
        it1 != xMaps.end(); ++it1)
ladanyi@201
   679
    {
ladanyi@201
   680
      for (StrVec::const_iterator it2 = yMaps.begin();
ladanyi@201
   681
          it2 != yMaps.end(); ++it2)
ladanyi@201
   682
      {
ladanyi@201
   683
        if (*it1 == *it2) xy_edge_map_names.push_back(*it1);
ladanyi@201
   684
      }
ladanyi@201
   685
    }
ladanyi@201
   686
  }
ladanyi@201
   687
}
ladanyi@201
   688
ladanyi@201
   689
FileImportDialog::ImportData::~ImportData()
ladanyi@201
   690
{
ladanyi@201
   691
}
ladanyi@201
   692
ladanyi@201
   693
bool FileImportDialog::ImportData::isXYNodeMap(const std::string& name)
ladanyi@201
   694
{
ladanyi@201
   695
  if (isNodeMap(name + ":x") && isNodeMap(name + ":y")) return true;
ladanyi@201
   696
  return false;
ladanyi@201
   697
}
ladanyi@201
   698
ladanyi@201
   699
bool FileImportDialog::ImportData::isXYEdgeMap(const std::string& name)
ladanyi@201
   700
{
ladanyi@201
   701
  if (isEdgeMap(name + ":x") && isEdgeMap(name + ":y")) return true;
ladanyi@201
   702
  return false;
ladanyi@201
   703
}
ladanyi@201
   704
ladanyi@201
   705
bool FileImportDialog::ImportData::isNodeMap(const std::string& name)
ladanyi@201
   706
{
ladanyi@201
   707
  if (contains(node_map_names, name)) return true;
ladanyi@201
   708
  return false;
ladanyi@201
   709
}
ladanyi@201
   710
ladanyi@201
   711
bool FileImportDialog::ImportData::isEdgeMap(const std::string& name)
ladanyi@201
   712
{
ladanyi@201
   713
  if (contains(edge_map_names, name)) return true;
ladanyi@201
   714
  return false;
ladanyi@201
   715
}
ladanyi@201
   716
ladanyi@201
   717
bool FileImportDialog::ImportData::contains(const std::vector<std::string>& vec,
ladanyi@201
   718
    const std::string& str)
ladanyi@201
   719
{
ladanyi@201
   720
  for (std::vector<std::string>::const_iterator it = vec.begin();
ladanyi@201
   721
      it != vec.end(); ++it)
ladanyi@201
   722
  {
ladanyi@201
   723
    if (*it == str) return true;
ladanyi@201
   724
  }
ladanyi@201
   725
  return false;
ladanyi@201
   726
}
ladanyi@201
   727
ladanyi@201
   728
void FileImportDialog::onNodeCoordOneMapChanged()
ladanyi@201
   729
{
ladanyi@201
   730
  p_data->node_coord_one_map_name = cbNodeCoordOneMap.get_active_text();
ladanyi@201
   731
  update_node_tree_view();
ladanyi@201
   732
}
ladanyi@201
   733
ladanyi@201
   734
void FileImportDialog::onNodeCoordTwoMaps1Changed()
ladanyi@201
   735
{
ladanyi@201
   736
  p_data->node_coord_two_maps_1_name = cbNodeCoordTwoMaps1.get_active_text();
ladanyi@201
   737
  update_node_tree_view();
ladanyi@201
   738
}
ladanyi@201
   739
ladanyi@201
   740
void FileImportDialog::onNodeCoordTwoMaps2Changed()
ladanyi@201
   741
{
ladanyi@201
   742
  p_data->node_coord_two_maps_2_name = cbNodeCoordTwoMaps2.get_active_text();
ladanyi@201
   743
  update_node_tree_view();
ladanyi@201
   744
}
ladanyi@201
   745
ladanyi@201
   746
void FileImportDialog::onArrowCoordOneMapChanged()
ladanyi@201
   747
{
ladanyi@201
   748
  p_data->arrow_coord_one_map_name = cbArrowCoordOneMap.get_active_text();
ladanyi@201
   749
  update_edge_tree_view();
ladanyi@201
   750
}
ladanyi@201
   751
ladanyi@201
   752
void FileImportDialog::onArrowCoordTwoMaps1Changed()
ladanyi@201
   753
{
ladanyi@201
   754
  p_data->arrow_coord_two_maps_1_name = cbArrowCoordTwoMaps1.get_active_text();
ladanyi@201
   755
  update_edge_tree_view();
ladanyi@201
   756
}
ladanyi@201
   757
ladanyi@201
   758
void FileImportDialog::onArrowCoordTwoMaps2Changed()
ladanyi@201
   759
{
ladanyi@201
   760
  p_data->arrow_coord_two_maps_2_name = cbArrowCoordTwoMaps2.get_active_text();
ladanyi@201
   761
  update_edge_tree_view();
ladanyi@201
   762
}
ladanyi@201
   763
ladanyi@201
   764
void FileImportDialog::onNodeMapNumericToggled(const Glib::ustring& path)
ladanyi@201
   765
{
ladanyi@201
   766
  Gtk::TreeModel::iterator iter = refNodeMapStore->get_iter(
ladanyi@201
   767
      Gtk::TreeModel::Path(path));
ladanyi@201
   768
  Gtk::TreeModel::Row row = *iter;
ladanyi@201
   769
  std::vector<tree_view_record>::iterator it;
ladanyi@201
   770
  for (it = node_tree_view_records.begin();
ladanyi@201
   771
      it != node_tree_view_records.end(); ++it)
ladanyi@201
   772
  {
ladanyi@201
   773
    if (it->name == row[NodeMapColumns.colName]) break;
ladanyi@201
   774
  }
ladanyi@201
   775
  if (row[NodeMapColumns.colReadAsNumeric])
ladanyi@201
   776
  {
ladanyi@201
   777
    row[NodeMapColumns.colReadAsString] = false;
ladanyi@201
   778
    it->string = false;
ladanyi@201
   779
    it->numeric = true;
ladanyi@201
   780
  }
ladanyi@201
   781
}
ladanyi@201
   782
ladanyi@201
   783
void FileImportDialog::onNodeMapStringToggled(const Glib::ustring& path)
ladanyi@201
   784
{
ladanyi@201
   785
  Gtk::TreeModel::iterator iter = refNodeMapStore->get_iter(
ladanyi@201
   786
      Gtk::TreeModel::Path(path));
ladanyi@201
   787
  Gtk::TreeModel::Row row = *iter;
ladanyi@201
   788
  std::vector<tree_view_record>::iterator it;
ladanyi@201
   789
  for (it = node_tree_view_records.begin();
ladanyi@201
   790
      it != node_tree_view_records.end(); ++it)
ladanyi@201
   791
  {
ladanyi@201
   792
    if (it->name == row[NodeMapColumns.colName]) break;
ladanyi@201
   793
  }
ladanyi@201
   794
  if (row[NodeMapColumns.colReadAsString])
ladanyi@201
   795
  {
ladanyi@201
   796
    row[NodeMapColumns.colReadAsNumeric] = false;
ladanyi@201
   797
    it->string = true;
ladanyi@201
   798
    it->numeric = false;
ladanyi@201
   799
  }
ladanyi@201
   800
}
ladanyi@201
   801
ladanyi@201
   802
void FileImportDialog::update_node_tree_view()
ladanyi@201
   803
{
ladanyi@201
   804
  for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   805
      node_tree_view_records.begin(); it != node_tree_view_records.end(); ++it)
ladanyi@201
   806
  {
ladanyi@201
   807
    it->visible = true;
ladanyi@201
   808
  }
ladanyi@201
   809
  switch (p_data->node_coord_load_from)
ladanyi@201
   810
  {
ladanyi@201
   811
    case ImportData::ONE_MAP:
ladanyi@201
   812
      for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   813
          node_tree_view_records.begin(); it !=
ladanyi@201
   814
          node_tree_view_records.end(); ++it)
ladanyi@201
   815
      {
ladanyi@201
   816
        if (it->name == p_data->node_coord_one_map_name)
ladanyi@201
   817
          it->visible = false;
ladanyi@201
   818
      }
ladanyi@201
   819
      break;
ladanyi@201
   820
    case ImportData::TWO_MAPS:
ladanyi@201
   821
      for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   822
          node_tree_view_records.begin(); it !=
ladanyi@201
   823
          node_tree_view_records.end(); ++it)
ladanyi@201
   824
      {
ladanyi@201
   825
        if ((it->name == p_data->node_coord_two_maps_1_name) ||
ladanyi@201
   826
            (it->name == p_data->node_coord_two_maps_2_name))
ladanyi@201
   827
          it->visible = false;
ladanyi@201
   828
      }
ladanyi@201
   829
      break;
ladanyi@201
   830
    case ImportData::DONT_READ:
ladanyi@201
   831
      break;
ladanyi@201
   832
  }
ladanyi@201
   833
  refNodeMapStore->clear();
ladanyi@201
   834
  for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   835
      node_tree_view_records.begin(); it != node_tree_view_records.end(); ++it)
ladanyi@201
   836
  {
ladanyi@201
   837
    if (it->visible)
ladanyi@201
   838
    {
ladanyi@201
   839
      Gtk::TreeModel::Row row = *(refNodeMapStore->append());
ladanyi@201
   840
      row[NodeMapColumns.colName] = it->name;
ladanyi@201
   841
      row[NodeMapColumns.colReadAsNumeric] = it->numeric;
ladanyi@201
   842
      row[NodeMapColumns.colReadAsString] = it->string;
ladanyi@201
   843
    }
ladanyi@201
   844
  }
ladanyi@201
   845
}
ladanyi@201
   846
ladanyi@201
   847
void FileImportDialog::onEdgeMapNumericToggled(const Glib::ustring& path)
ladanyi@201
   848
{
ladanyi@201
   849
  Gtk::TreeModel::iterator iter = refEdgeMapStore->get_iter(
ladanyi@201
   850
      Gtk::TreeModel::Path(path));
ladanyi@201
   851
  Gtk::TreeModel::Row row = *iter;
ladanyi@201
   852
  std::vector<tree_view_record>::iterator it;
ladanyi@201
   853
  for (it = edge_tree_view_records.begin();
ladanyi@201
   854
      it != edge_tree_view_records.end(); ++it)
ladanyi@201
   855
  {
ladanyi@201
   856
    if (it->name == row[EdgeMapColumns.colName]) break;
ladanyi@201
   857
  }
ladanyi@201
   858
  if (row[EdgeMapColumns.colReadAsNumeric])
ladanyi@201
   859
  {
ladanyi@201
   860
    row[EdgeMapColumns.colReadAsString] = false;
ladanyi@201
   861
    it->string = false;
ladanyi@201
   862
    it->numeric = true;
ladanyi@201
   863
  }
ladanyi@201
   864
}
ladanyi@201
   865
ladanyi@201
   866
void FileImportDialog::onEdgeMapStringToggled(const Glib::ustring& path)
ladanyi@201
   867
{
ladanyi@201
   868
  Gtk::TreeModel::iterator iter = refEdgeMapStore->get_iter(
ladanyi@201
   869
      Gtk::TreeModel::Path(path));
ladanyi@201
   870
  Gtk::TreeModel::Row row = *iter;
ladanyi@201
   871
  std::vector<tree_view_record>::iterator it;
ladanyi@201
   872
  for (it = edge_tree_view_records.begin();
ladanyi@201
   873
      it != edge_tree_view_records.end(); ++it)
ladanyi@201
   874
  {
ladanyi@201
   875
    if (it->name == row[EdgeMapColumns.colName]) break;
ladanyi@201
   876
  }
ladanyi@201
   877
  if (row[EdgeMapColumns.colReadAsString])
ladanyi@201
   878
  {
ladanyi@201
   879
    row[EdgeMapColumns.colReadAsNumeric] = false;
ladanyi@201
   880
    it->string = true;
ladanyi@201
   881
    it->numeric = false;
ladanyi@201
   882
  }
ladanyi@201
   883
}
ladanyi@201
   884
ladanyi@201
   885
void FileImportDialog::update_edge_tree_view()
ladanyi@201
   886
{
ladanyi@201
   887
  for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   888
      edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ++it)
ladanyi@201
   889
  {
ladanyi@201
   890
    it->visible = true;
ladanyi@201
   891
  }
ladanyi@201
   892
  switch (p_data->arrow_coord_load_from)
ladanyi@201
   893
  {
ladanyi@201
   894
    case ImportData::ONE_MAP:
ladanyi@201
   895
      for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   896
          edge_tree_view_records.begin(); it !=
ladanyi@201
   897
          edge_tree_view_records.end(); ++it)
ladanyi@201
   898
      {
ladanyi@201
   899
        if (it->name == p_data->arrow_coord_one_map_name)
ladanyi@201
   900
          it->visible = false;
ladanyi@201
   901
      }
ladanyi@201
   902
      break;
ladanyi@201
   903
    case ImportData::TWO_MAPS:
ladanyi@201
   904
      for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   905
          edge_tree_view_records.begin(); it !=
ladanyi@201
   906
          edge_tree_view_records.end(); ++it)
ladanyi@201
   907
      {
ladanyi@201
   908
        if ((it->name == p_data->arrow_coord_two_maps_1_name) ||
ladanyi@201
   909
            (it->name == p_data->arrow_coord_two_maps_2_name))
ladanyi@201
   910
          it->visible = false;
ladanyi@201
   911
      }
ladanyi@201
   912
      break;
ladanyi@201
   913
    case ImportData::DONT_READ:
ladanyi@201
   914
      break;
ladanyi@201
   915
  }
ladanyi@201
   916
  refEdgeMapStore->clear();
ladanyi@201
   917
  for (std::vector<tree_view_record>::iterator it =
ladanyi@201
   918
      edge_tree_view_records.begin(); it != edge_tree_view_records.end(); ++it)
ladanyi@201
   919
  {
ladanyi@201
   920
    if (it->visible)
ladanyi@201
   921
    {
ladanyi@201
   922
      Gtk::TreeModel::Row row = *(refEdgeMapStore->append());
ladanyi@201
   923
      row[EdgeMapColumns.colName] = it->name;
ladanyi@201
   924
      row[EdgeMapColumns.colReadAsNumeric] = it->numeric;
ladanyi@201
   925
      row[EdgeMapColumns.colReadAsString] = it->string;
ladanyi@201
   926
    }
ladanyi@201
   927
  }
ladanyi@201
   928
}