mapstorage.cc
author hegyi
Mon, 30 Oct 2006 14:57:48 +0000
changeset 177 40f3006fba2e
parent 174 95872af46fc4
child 184 4e8704aae278
permissions -rw-r--r--
Redesign parameters can now be saved and loaded.
alpar@174
     1
/* -*- C++ -*-
alpar@174
     2
 *
alpar@174
     3
 * This file is a part of LEMON, a generic C++ optimization library
alpar@174
     4
 *
alpar@174
     5
 * Copyright (C) 2003-2006
alpar@174
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@174
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@174
     8
 *
alpar@174
     9
 * Permission to use, modify and distribute this software is granted
alpar@174
    10
 * provided that this copyright notice appears in all copies. For
alpar@174
    11
 * precise terms see the accompanying LICENSE file.
alpar@174
    12
 *
alpar@174
    13
 * This software is provided "AS IS" with no warranty of any kind,
alpar@174
    14
 * express or implied, and with no claim as to its suitability for any
alpar@174
    15
 * purpose.
alpar@174
    16
 *
alpar@174
    17
 */
alpar@174
    18
ladanyi@53
    19
#include "mapstorage.h"
ladanyi@98
    20
#include "gui_writer.h"
ladanyi@98
    21
#include "gui_reader.h"
alpar@128
    22
#include <limits>
alpar@128
    23
#include <cmath>
ladanyi@63
    24
#include <gtkmm.h>
deba@77
    25
hegyi@177
    26
const double i_d=20;
hegyi@177
    27
const double a_d=0.05;
hegyi@177
    28
const double p_d=40000;
hegyi@177
    29
hegyi@177
    30
MapStorage::MapStorage() : modified(false), file_name(""), arrow_pos_read_ok(false), iterations(i_d), attraction(a_d), propulsation(p_d)
ladanyi@6
    31
{
ladanyi@53
    32
  nodemap_storage["coordinates_x"] = new Graph::NodeMap<double>(graph);
ladanyi@53
    33
  coords.setXMap(*nodemap_storage["coordinates_x"]);
ladanyi@53
    34
  nodemap_storage["coordinates_y"] = new Graph::NodeMap<double>(graph);
ladanyi@53
    35
  coords.setYMap(*nodemap_storage["coordinates_y"]);
ladanyi@53
    36
ladanyi@98
    37
  edgemap_storage["arrow_pos_x"] = new Graph::EdgeMap<double>(graph);
ladanyi@98
    38
  arrow_pos.setXMap(*edgemap_storage["arrow_pos_x"]);
ladanyi@98
    39
  edgemap_storage["arrow_pos_y"] = new Graph::EdgeMap<double>(graph);
ladanyi@98
    40
  arrow_pos.setYMap(*edgemap_storage["arrow_pos_y"]);
ladanyi@98
    41
ladanyi@134
    42
  nodemap_storage["label"] = new Graph::NodeMap<double>(graph);
ladanyi@134
    43
  edgemap_storage["label"] = new Graph::EdgeMap<double>(graph);
ladanyi@64
    44
ladanyi@134
    45
  nodemap_default["label"] = 1.0;
ladanyi@134
    46
  edgemap_default["label"] = 1.0;
hegyi@94
    47
hegyi@94
    48
  active_nodemaps.resize(NODE_PROPERTY_NUM);
hegyi@94
    49
  for(int i=0;i<NODE_PROPERTY_NUM;i++)
hegyi@94
    50
    {
hegyi@94
    51
      active_nodemaps[i]="";
hegyi@94
    52
    }
hegyi@94
    53
hegyi@94
    54
  active_edgemaps.resize(EDGE_PROPERTY_NUM);
hegyi@94
    55
  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
hegyi@94
    56
    {
hegyi@94
    57
      active_edgemaps[i]="";
hegyi@94
    58
    }
ladanyi@53
    59
}
ladanyi@53
    60
ladanyi@53
    61
MapStorage::~MapStorage()
ladanyi@53
    62
{
ladanyi@53
    63
  for (std::map<std::string, Graph::NodeMap<double>*>::const_iterator it =
ladanyi@53
    64
      nodemap_storage.begin(); it != nodemap_storage.end(); ++it)
ladanyi@53
    65
  {
ladanyi@53
    66
    delete it->second;
ladanyi@53
    67
  }
ladanyi@53
    68
  for (std::map<std::string, Graph::EdgeMap<double>*>::const_iterator it =
ladanyi@53
    69
      edgemap_storage.begin(); it != edgemap_storage.end(); ++it)
ladanyi@53
    70
  {
ladanyi@53
    71
    delete it->second;
ladanyi@53
    72
  }
ladanyi@53
    73
}
ladanyi@6
    74
hegyi@118
    75
int MapStorage::addNodeMap(const std::string & name, Graph::NodeMap<double> *nodemap, double default_value)
ladanyi@6
    76
{
hegyi@46
    77
  if( nodemap_storage.find(name) == nodemap_storage.end() )
hegyi@46
    78
    {
hegyi@46
    79
      nodemap_storage[name]=nodemap;
ladanyi@63
    80
      // set the maps default value
ladanyi@63
    81
      nodemap_default[name] = default_value;
hegyi@108
    82
hegyi@108
    83
      //announce changement in maps
hegyi@108
    84
      signal_node_map.emit(name);
hegyi@46
    85
      return 0;
hegyi@46
    86
    }
hegyi@46
    87
  return 1;
ladanyi@6
    88
}
ladanyi@6
    89
hegyi@94
    90
void MapStorage::changeActiveMap(bool itisedge, int prop, std::string mapname)
hegyi@94
    91
{
hegyi@94
    92
  if(itisedge)
hegyi@94
    93
    {
hegyi@94
    94
      active_edgemaps[prop]=mapname;
hegyi@94
    95
    }
hegyi@94
    96
  else
hegyi@94
    97
    {
hegyi@94
    98
      active_nodemaps[prop]=mapname;
hegyi@94
    99
    }
hegyi@94
   100
  signal_prop.emit(itisedge, prop);
hegyi@94
   101
}
hegyi@94
   102
hegyi@172
   103
void MapStorage::broadcastActiveMaps()
hegyi@172
   104
{
hegyi@172
   105
  for(int i=0;i<NODE_PROPERTY_NUM;i++)
hegyi@172
   106
    {
hegyi@172
   107
      signal_map_win.emit(false, i, active_nodemaps[i]);
hegyi@172
   108
    }
hegyi@172
   109
  
hegyi@172
   110
  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
hegyi@172
   111
    {
hegyi@172
   112
      signal_map_win.emit(true, i, active_edgemaps[i]);
hegyi@172
   113
    }
hegyi@172
   114
}
hegyi@172
   115
hegyi@172
   116
hegyi@94
   117
std::string MapStorage::getActiveEdgeMap(int prop)
hegyi@94
   118
{
hegyi@94
   119
  return active_edgemaps[prop];
hegyi@94
   120
}
hegyi@94
   121
hegyi@94
   122
std::string MapStorage::getActiveNodeMap(int prop)
hegyi@94
   123
{
hegyi@94
   124
  return active_nodemaps[prop];
hegyi@94
   125
}
hegyi@94
   126
hegyi@94
   127
std::vector<std::string> MapStorage::getEdgeMapList()
hegyi@94
   128
{
hegyi@94
   129
  std::vector<std::string> eml;
hegyi@94
   130
  eml.resize(edgemap_storage.size());
hegyi@94
   131
  int i=0;
hegyi@94
   132
  std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=beginOfEdgeMaps();
hegyi@94
   133
  for(;emsi!=endOfEdgeMaps();emsi++)
hegyi@94
   134
    {
hegyi@94
   135
      eml[i]=(emsi->first);
hegyi@94
   136
      i++;
hegyi@94
   137
    }
hegyi@94
   138
  return eml;
hegyi@94
   139
}
hegyi@94
   140
hegyi@94
   141
std::vector<std::string> MapStorage::getNodeMapList()
hegyi@94
   142
{
hegyi@94
   143
  std::vector<std::string> nml;
hegyi@94
   144
  nml.resize(nodemap_storage.size());
hegyi@94
   145
  int i=0;
hegyi@94
   146
  std::map< std::string,Graph::NodeMap<double> * >::iterator nmsi=beginOfNodeMaps();
hegyi@94
   147
  for(;nmsi!=endOfNodeMaps();nmsi++)
hegyi@94
   148
    {
hegyi@94
   149
      nml[i]=(nmsi->first);
hegyi@94
   150
      i++;
hegyi@94
   151
    }
hegyi@94
   152
  return nml;
hegyi@94
   153
}
hegyi@94
   154
hegyi@177
   155
sigc::signal<void, bool, int> MapStorage::signal_prop_ch()
hegyi@94
   156
{
hegyi@94
   157
  return signal_prop;
hegyi@94
   158
}
hegyi@94
   159
hegyi@118
   160
int MapStorage::addEdgeMap(const std::string & name, Graph::EdgeMap<double> *edgemap, double default_value)
ladanyi@6
   161
{
hegyi@46
   162
  if( edgemap_storage.find(name) == edgemap_storage.end() )
hegyi@46
   163
    {
hegyi@46
   164
      edgemap_storage[name]=edgemap;
ladanyi@63
   165
      // set the maps default value
ladanyi@63
   166
      edgemap_default[name] = default_value;
hegyi@108
   167
hegyi@108
   168
      //announce changement in maps
hegyi@108
   169
      signal_edge_map.emit(name);
hegyi@46
   170
      return 0;
hegyi@46
   171
    }
hegyi@46
   172
  return 1;
ladanyi@6
   173
}
ladanyi@6
   174
ladanyi@6
   175
double MapStorage::maxOfNodeMap(const std::string & name)
ladanyi@6
   176
{
ladanyi@6
   177
  double max=0;
ladanyi@53
   178
  for (NodeIt j(graph); j!=INVALID; ++j)
ladanyi@6
   179
  {
ladanyi@6
   180
    if( (*nodemap_storage[name])[j]>max )
ladanyi@6
   181
    {
ladanyi@6
   182
      max=(*nodemap_storage[name])[j];
ladanyi@6
   183
    }
ladanyi@6
   184
  }
ladanyi@6
   185
  return max;
ladanyi@6
   186
}
ladanyi@6
   187
ladanyi@6
   188
double MapStorage::maxOfEdgeMap(const std::string & name)
ladanyi@6
   189
{
ladanyi@6
   190
  double max=0;
ladanyi@53
   191
  for (EdgeIt j(graph); j!=INVALID; ++j)
ladanyi@6
   192
  {
ladanyi@6
   193
    if( (*edgemap_storage[name])[j]>max )
ladanyi@6
   194
    {
ladanyi@6
   195
      max=(*edgemap_storage[name])[j];
ladanyi@6
   196
    }
ladanyi@6
   197
  }
ladanyi@6
   198
  return max;
ladanyi@6
   199
}
ladanyi@6
   200
ladanyi@6
   201
double MapStorage::minOfNodeMap(const std::string & name)
ladanyi@6
   202
{
ladanyi@53
   203
  NodeIt j(graph);
hegyi@58
   204
  double min;
hegyi@58
   205
  if(j!=INVALID)
hegyi@58
   206
    {
hegyi@58
   207
      min=(*nodemap_storage[name])[j];
hegyi@58
   208
    }
hegyi@58
   209
  else
hegyi@58
   210
    {
hegyi@58
   211
      min=0;
hegyi@58
   212
    }
ladanyi@6
   213
  for (; j!=INVALID; ++j)
ladanyi@6
   214
  {
ladanyi@6
   215
    if( (*nodemap_storage[name])[j]<min )
ladanyi@6
   216
    {
ladanyi@6
   217
      min=(*nodemap_storage[name])[j];
ladanyi@6
   218
    }
ladanyi@6
   219
  }
ladanyi@6
   220
  return min;
ladanyi@6
   221
}
ladanyi@6
   222
ladanyi@6
   223
double MapStorage::minOfEdgeMap(const std::string & name)
ladanyi@6
   224
{
ladanyi@53
   225
  EdgeIt j(graph);
hegyi@58
   226
  double min;
hegyi@58
   227
  if(j!=INVALID)
hegyi@58
   228
    {
hegyi@58
   229
      min=(*edgemap_storage[name])[j];
hegyi@58
   230
    }
hegyi@58
   231
  else
hegyi@58
   232
    {
hegyi@58
   233
      min=0;
hegyi@58
   234
    }
ladanyi@53
   235
  for (EdgeIt j(graph); j!=INVALID; ++j)
ladanyi@6
   236
  {
ladanyi@6
   237
    if( (*edgemap_storage[name])[j]<min )
ladanyi@6
   238
    {
ladanyi@6
   239
      min=(*edgemap_storage[name])[j];
ladanyi@6
   240
    }
ladanyi@6
   241
  }
ladanyi@6
   242
  return min;
ladanyi@6
   243
}
ladanyi@6
   244
ladanyi@63
   245
int MapStorage::readFromFile(const std::string &filename)
ladanyi@53
   246
{
ladanyi@53
   247
  bool read_x = false;
ladanyi@53
   248
  bool read_y = false;
ladanyi@64
   249
  bool read_edge_id = false;
ladanyi@53
   250
ladanyi@53
   251
  try {
ladanyi@53
   252
    LemonReader lreader(filename);
ladanyi@53
   253
    ContentReader content(lreader);
ladanyi@53
   254
    lreader.run();
ladanyi@53
   255
ladanyi@101
   256
    if (content.nodeSetNum() < 1)
ladanyi@101
   257
    {
ladanyi@101
   258
      Gtk::MessageDialog mdialog("No nodeset found in file.");
ladanyi@101
   259
      mdialog.run();
ladanyi@101
   260
      clear();
ladanyi@101
   261
      return 1;
ladanyi@101
   262
    }
ladanyi@101
   263
ladanyi@101
   264
    if (content.edgeSetNum() < 1)
ladanyi@101
   265
    {
ladanyi@101
   266
      Gtk::MessageDialog mdialog("No edgeset found in file.");
ladanyi@101
   267
      mdialog.run();
ladanyi@101
   268
      clear();
ladanyi@101
   269
      return 1;
ladanyi@101
   270
    }
ladanyi@101
   271
ladanyi@53
   272
    const std::vector<std::string>& nodeMapNames = content.nodeSetMaps(0);
ladanyi@53
   273
    const std::vector<std::string>& edgeMapNames = content.edgeSetMaps(0);
ladanyi@53
   274
ladanyi@53
   275
    GraphReader<Graph> greader(filename, graph);
ladanyi@53
   276
    for (std::vector<std::string>::const_iterator it = nodeMapNames.begin();
ladanyi@53
   277
        it != nodeMapNames.end(); ++it)
ladanyi@53
   278
    {
ladanyi@53
   279
      if (*it == "coordinates_x")
ladanyi@53
   280
      {
ladanyi@53
   281
        read_x = true;
ladanyi@53
   282
        //std::cout << "read X nodemap" << std::endl;
ladanyi@53
   283
      }
ladanyi@53
   284
      else if (*it == "coordinates_y")
ladanyi@53
   285
      {
ladanyi@53
   286
        read_y = true;
ladanyi@53
   287
        //std::cout << "read Y nodemap" << std::endl;
ladanyi@53
   288
      }
ladanyi@134
   289
      else if (*it == "label")
ladanyi@53
   290
      {
ladanyi@53
   291
        //std::cout << "read id nodemap" << std::endl;
ladanyi@53
   292
      }
ladanyi@53
   293
      else
ladanyi@53
   294
      {
ladanyi@53
   295
        nodemap_storage[*it] = new Graph::NodeMap<double>(graph);
ladanyi@53
   296
        //std::cout << "read " << *it << " nodemap" << std::endl;
ladanyi@53
   297
      }
ladanyi@53
   298
      greader.readNodeMap(*it, *nodemap_storage[*it]);
ladanyi@53
   299
    }
ladanyi@53
   300
    for (std::vector<std::string>::const_iterator it = edgeMapNames.begin();
ladanyi@53
   301
        it != edgeMapNames.end(); ++it)
ladanyi@53
   302
    {
ladanyi@134
   303
      if (*it == "label")
ladanyi@53
   304
      {
ladanyi@53
   305
        //std::cout << "read id edgemap" << std::endl;
ladanyi@135
   306
        read_edge_id = true;
ladanyi@53
   307
      }
ladanyi@53
   308
      else
ladanyi@53
   309
      {
ladanyi@53
   310
        edgemap_storage[*it] = new Graph::EdgeMap<double>(graph);
ladanyi@53
   311
        //std::cout << "read " << *it << " edgemap" << std::endl;
ladanyi@53
   312
      }
ladanyi@53
   313
      greader.readEdgeMap(*it, *edgemap_storage[*it]);
ladanyi@53
   314
    }
ladanyi@98
   315
    GuiReader gui_reader(greader, this);
ladanyi@53
   316
    greader.run();
ladanyi@101
   317
  } catch (Exception& error) {
ladanyi@79
   318
    Gtk::MessageDialog mdialog(error.what());
ladanyi@53
   319
    mdialog.run();
ladanyi@63
   320
    clear();
ladanyi@63
   321
    return 1;
ladanyi@53
   322
  }
ladanyi@53
   323
ladanyi@64
   324
  if (!read_edge_id)
ladanyi@64
   325
  {
ladanyi@134
   326
    edgemap_storage["label"] = new Graph::EdgeMap<double>(graph);
ladanyi@64
   327
    int i = 1;
ladanyi@64
   328
    for (EdgeIt e(graph); e != INVALID; ++e)
ladanyi@64
   329
    {
ladanyi@134
   330
      (*edgemap_storage["label"])[e] = i++;
ladanyi@64
   331
    }
ladanyi@64
   332
  }
ladanyi@64
   333
ladanyi@53
   334
  if (!read_x || !read_y)
ladanyi@53
   335
  {
ladanyi@53
   336
    int node_num = 0;
ladanyi@53
   337
    for (NodeIt n(graph); n != INVALID; ++n)
ladanyi@53
   338
    {
ladanyi@53
   339
      node_num++;
ladanyi@53
   340
    }
ladanyi@53
   341
    const double pi = 3.142;
ladanyi@53
   342
    double step = 2 * pi / (double) node_num;
ladanyi@53
   343
    int i = 0;
ladanyi@53
   344
    for (NodeIt n(graph); n != INVALID; ++n)
ladanyi@53
   345
    {
deba@77
   346
      nodemap_storage["coordinates_x"]->set(n, 250.0 * std::cos(i * step));
deba@77
   347
      nodemap_storage["coordinates_y"]->set(n, 250.0 * std::sin(i * step));
ladanyi@53
   348
      i++;
ladanyi@53
   349
    }
ladanyi@53
   350
  }
ladanyi@63
   351
ladanyi@98
   352
  if (!arrow_pos_read_ok)
ladanyi@98
   353
  {
ladanyi@98
   354
    arrow_pos_read_ok = false;
ladanyi@98
   355
    for (EdgeIt e(graph); e != INVALID; ++e)
ladanyi@98
   356
    {
ladanyi@151
   357
      if (graph.source(e) == graph.target(e))
ladanyi@151
   358
      {
ladanyi@151
   359
        arrow_pos.set(e, coords[graph.source(e)] + XY(0.0, 80.0));
ladanyi@151
   360
      }
ladanyi@151
   361
      else
ladanyi@151
   362
      {
ladanyi@151
   363
        arrow_pos.set(e, (coords[graph.source(e)] + coords[graph.target(e)]) / 2.0);
ladanyi@151
   364
      }
ladanyi@98
   365
    }
ladanyi@98
   366
  }
ladanyi@98
   367
ladanyi@63
   368
  // fill in the default values for the maps
ladanyi@63
   369
  for (std::map<std::string, Graph::NodeMap<double>*>::const_iterator it =
ladanyi@63
   370
      nodemap_storage.begin(); it != nodemap_storage.end(); ++it)
ladanyi@63
   371
  {
ladanyi@134
   372
    if ((it->first != "label") &&
ladanyi@63
   373
        (it->first != "coordiantes_x") &&
ladanyi@63
   374
        (it->first != "coordinates_y"))
ladanyi@63
   375
    {
ladanyi@63
   376
      nodemap_default[it->first] = 0.0;
ladanyi@63
   377
    }
ladanyi@134
   378
    else if (it->first == "label")
ladanyi@64
   379
    {
ladanyi@64
   380
      NodeIt n(graph);
ladanyi@134
   381
      double max = (*nodemap_storage["label"])[n];
ladanyi@64
   382
      for (; n != INVALID; ++n)
ladanyi@64
   383
      {
ladanyi@134
   384
        if ((*nodemap_storage["label"])[n] > max)
ladanyi@134
   385
          max = (*nodemap_storage["label"])[n];
ladanyi@64
   386
      }
ladanyi@134
   387
      nodemap_default["label"] = max + 1.0;
ladanyi@64
   388
    }
ladanyi@63
   389
  }
ladanyi@63
   390
  for (std::map<std::string, Graph::EdgeMap<double>*>::const_iterator it =
ladanyi@63
   391
      edgemap_storage.begin(); it != edgemap_storage.end(); ++it)
ladanyi@63
   392
  {
ladanyi@134
   393
    if (it->first != "label")
ladanyi@63
   394
    {
ladanyi@63
   395
      edgemap_default[it->first] = 0.0;
ladanyi@63
   396
    }
ladanyi@64
   397
    else
ladanyi@64
   398
    {
ladanyi@67
   399
      double max = std::numeric_limits<double>::min();
ladanyi@67
   400
      for (EdgeIt e(graph); e != INVALID; ++e)
ladanyi@64
   401
      {
ladanyi@134
   402
        if ((*edgemap_storage["label"])[e] > max)
ladanyi@134
   403
          max = (*edgemap_storage["label"])[e];
ladanyi@64
   404
      }
ladanyi@67
   405
      if (max > std::numeric_limits<double>::min())
ladanyi@134
   406
        edgemap_default["label"] = max + 1.0;
ladanyi@67
   407
      else
ladanyi@134
   408
        edgemap_default["label"] = 1.0;
ladanyi@64
   409
    }
ladanyi@63
   410
  }
ladanyi@63
   411
ladanyi@63
   412
  return 0;
ladanyi@53
   413
}
ladanyi@53
   414
ladanyi@53
   415
void MapStorage::writeToFile(const std::string &filename)
ladanyi@53
   416
{
ladanyi@53
   417
  GraphWriter<Graph> gwriter(filename, graph);
ladanyi@53
   418
ladanyi@53
   419
  for (std::map<std::string, Graph::NodeMap<double>*>::const_iterator it =
ladanyi@53
   420
      nodemap_storage.begin(); it != nodemap_storage.end(); ++it)
ladanyi@53
   421
  {
ladanyi@53
   422
    gwriter.writeNodeMap(it->first, *(it->second));
ladanyi@53
   423
  }
ladanyi@53
   424
  for (std::map<std::string, Graph::EdgeMap<double>*>::const_iterator it =
ladanyi@53
   425
      edgemap_storage.begin(); it != edgemap_storage.end(); ++it)
ladanyi@53
   426
  {
ladanyi@98
   427
    if ((it->first != "arrow_pos_x") &&
ladanyi@98
   428
        (it->first != "arrow_pos_y"))
ladanyi@98
   429
    {
ladanyi@98
   430
      gwriter.writeEdgeMap(it->first, *(it->second));
ladanyi@98
   431
    }
ladanyi@53
   432
  }
ladanyi@98
   433
ladanyi@98
   434
  GuiWriter gui_writer(gwriter, this);
ladanyi@98
   435
ladanyi@53
   436
  gwriter.run();
ladanyi@53
   437
}
ladanyi@53
   438
ladanyi@53
   439
void MapStorage::clear()
ladanyi@53
   440
{
ladanyi@53
   441
  for (std::map<std::string, Graph::NodeMap<double>*>::iterator it =
ladanyi@53
   442
      nodemap_storage.begin(); it != nodemap_storage.end(); ++it)
ladanyi@53
   443
  {
ladanyi@53
   444
    if ((it->first != "coordinates_x") &&
ladanyi@53
   445
        (it->first != "coordinates_y") &&
ladanyi@134
   446
        (it->first != "label"))
ladanyi@53
   447
    {
ladanyi@53
   448
      delete it->second;
ladanyi@53
   449
      nodemap_storage.erase(it);
ladanyi@53
   450
    }
ladanyi@53
   451
  }
ladanyi@53
   452
  for (std::map<std::string, Graph::EdgeMap<double>*>::iterator it =
ladanyi@53
   453
      edgemap_storage.begin(); it != edgemap_storage.end(); ++it)
ladanyi@53
   454
  {
ladanyi@134
   455
    if ((it->first != "label") &&
ladanyi@98
   456
        (it->first != "arrow_pos_x") &&
ladanyi@98
   457
        (it->first != "arrow_pos_y"))
ladanyi@53
   458
    {
ladanyi@53
   459
      delete it->second;
ladanyi@53
   460
      edgemap_storage.erase(it);
ladanyi@53
   461
    }
ladanyi@53
   462
  }
ladanyi@63
   463
  for (std::map<std::string, double>::iterator it =
ladanyi@63
   464
      nodemap_default.begin(); it != nodemap_default.end(); ++it)
ladanyi@63
   465
  {
ladanyi@134
   466
    if (it->first != "label")
ladanyi@64
   467
      nodemap_default.erase(it);
ladanyi@63
   468
  }
ladanyi@63
   469
  for (std::map<std::string, double>::iterator it =
ladanyi@63
   470
      edgemap_default.begin(); it != edgemap_default.end(); ++it)
ladanyi@63
   471
  {
ladanyi@134
   472
    if (it->first != "label")
ladanyi@64
   473
      edgemap_default.erase(it);
ladanyi@63
   474
  }
ladanyi@53
   475
  graph.clear();
ladanyi@53
   476
  file_name = "";
ladanyi@53
   477
  modified = false;
hegyi@172
   478
hegyi@172
   479
  arrow_pos_read_ok = false;
hegyi@172
   480
  
hegyi@172
   481
  for(int i=0;i<NODE_PROPERTY_NUM;i++)
hegyi@172
   482
    {
hegyi@172
   483
      changeActiveMap(false, i, "");
hegyi@172
   484
      signal_map_win.emit(false, i, "");
hegyi@172
   485
    }
hegyi@172
   486
  
hegyi@172
   487
  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
hegyi@172
   488
    {
hegyi@172
   489
      changeActiveMap(true, i, "");
hegyi@172
   490
      signal_map_win.emit(true, i, "");
hegyi@172
   491
    }
hegyi@177
   492
hegyi@177
   493
  attraction=a_d;
hegyi@177
   494
  propulsation=p_d;
hegyi@177
   495
  iterations=i_d;
hegyi@177
   496
hegyi@177
   497
  signal_design_win.emit(attraction, propulsation, iterations);
ladanyi@53
   498
}
ladanyi@98
   499
ladanyi@98
   500
void MapStorage::ArrowPosReadOK()
ladanyi@98
   501
{
ladanyi@98
   502
  arrow_pos_read_ok = true;
ladanyi@98
   503
}
hegyi@111
   504
hegyi@111
   505
void MapStorage::mapChanged(bool itisedge, std::string mapname)
hegyi@111
   506
{
hegyi@111
   507
  if(itisedge)
hegyi@111
   508
    {
hegyi@111
   509
      for(int i=0;i<EDGE_PROPERTY_NUM;i++)
hegyi@111
   510
	{
hegyi@111
   511
	  if(active_edgemaps[i]==mapname)
hegyi@111
   512
	    {
hegyi@111
   513
	      signal_prop.emit(itisedge, i);
hegyi@111
   514
	    }
hegyi@111
   515
	}
hegyi@111
   516
    }
hegyi@111
   517
  else
hegyi@111
   518
    {
hegyi@111
   519
      for(int i=0;i<NODE_PROPERTY_NUM;i++)
hegyi@111
   520
	{
hegyi@111
   521
	  if(active_nodemaps[i]==mapname)
hegyi@111
   522
	    {
hegyi@111
   523
	      signal_prop.emit(itisedge, i);
hegyi@111
   524
	    }
hegyi@111
   525
	}
hegyi@111
   526
    }
hegyi@111
   527
}
hegyi@177
   528
hegyi@177
   529
void MapStorage::get_design_data(double & attraction_p, double & propulsation_p, int & iterations_p)
hegyi@177
   530
{
hegyi@177
   531
  attraction_p=attraction;
hegyi@177
   532
  propulsation_p=propulsation;
hegyi@177
   533
  iterations_p=iterations;
hegyi@177
   534
}
hegyi@177
   535
hegyi@177
   536
void MapStorage::set_attraction(double attraction_p)
hegyi@177
   537
{
hegyi@177
   538
  attraction=attraction_p;
hegyi@177
   539
}
hegyi@177
   540
hegyi@177
   541
void MapStorage::set_propulsation(double propulsation_p)
hegyi@177
   542
{
hegyi@177
   543
  propulsation=propulsation_p;
hegyi@177
   544
}
hegyi@177
   545
hegyi@177
   546
void MapStorage::set_iteration(int iterations_p)
hegyi@177
   547
{
hegyi@177
   548
  iterations=iterations_p;
hegyi@177
   549
}
hegyi@177
   550
hegyi@177
   551
void MapStorage::redesign_data_changed()
hegyi@177
   552
{
hegyi@177
   553
  signal_design_win.emit(attraction, propulsation, iterations);
hegyi@177
   554
}