mapselector.cc
author hegyi
Fri, 21 Oct 2005 13:32:12 +0000
branchgui
changeset 82 ee009c0f4bcf
parent 81 5ad61c33487c
child 85 0b2217328320
permissions -rw-r--r--
MapSelector widget is able to pop up NewMap window. At the moment I hope MapSelector widget is done.
hegyi@81
     1
#include "mapselector.h"
hegyi@81
     2
hegyi@82
     3
MapSelector::MapSelector(GraphDisplayerCanvas & grdispc, MapStorage & mapst, NewMapWin & newmapw, int identifier, bool edge):gdc(grdispc),ms(mapst),nmw(newmapw),id(identifier),itisedge(edge),default_state(true),node_to_update(INVALID),edge_to_update(INVALID)
hegyi@81
     4
{
hegyi@81
     5
  update_list();
hegyi@81
     6
hegyi@81
     7
  cbt.set_active(0);
hegyi@81
     8
hegyi@81
     9
  //binding signal to the actual entry
hegyi@81
    10
  cbt.signal_changed().connect
hegyi@81
    11
    (
hegyi@81
    12
     sigc::mem_fun((*this), &MapSelector::comboChanged),
hegyi@81
    13
     false
hegyi@81
    14
     );
hegyi@81
    15
  
hegyi@81
    16
  if(itisedge)
hegyi@81
    17
    {
hegyi@81
    18
      label=new Gtk::Label(edge_property_strings[id]);
hegyi@81
    19
    }
hegyi@81
    20
  else
hegyi@81
    21
    {
hegyi@81
    22
      label=new Gtk::Label(node_property_strings[id]);
hegyi@81
    23
    }
hegyi@81
    24
hegyi@81
    25
  label->set_width_chars(longest_property_string_length);
hegyi@81
    26
hegyi@81
    27
  defbut=new Gtk::Button();
hegyi@81
    28
  defbut->set_label("Reset");
hegyi@81
    29
hegyi@81
    30
  defbut->signal_pressed().connect
hegyi@81
    31
    (
hegyi@81
    32
     sigc::mem_fun(*this, &MapSelector::reset)
hegyi@81
    33
     );
hegyi@81
    34
hegyi@81
    35
  newbut=new Gtk::Button(Gtk::Stock::NEW);
hegyi@81
    36
hegyi@82
    37
  newbut->signal_pressed().connect
hegyi@82
    38
    (
hegyi@82
    39
     sigc::mem_fun(nmw, &NewMapWin::show)
hegyi@82
    40
     );
hegyi@82
    41
hegyi@81
    42
  add(*label);
hegyi@81
    43
hegyi@81
    44
  add(cbt);
hegyi@81
    45
hegyi@81
    46
  add(*defbut);
hegyi@81
    47
  add(*newbut);
hegyi@81
    48
}
hegyi@81
    49
hegyi@81
    50
void MapSelector::update_list()
hegyi@81
    51
{
hegyi@81
    52
  cbt.clear();
hegyi@81
    53
  if(itisedge)
hegyi@81
    54
    {
hegyi@81
    55
      std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
hegyi@81
    56
      for(;emsi!=ms.endOfEdgeMaps();emsi++)
hegyi@81
    57
	{
hegyi@81
    58
	  cbt.append_text(emsi->first);
hegyi@81
    59
	}
hegyi@81
    60
    }
hegyi@81
    61
  else
hegyi@81
    62
    {
hegyi@81
    63
      std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
hegyi@81
    64
      for(;emsi!=ms.endOfNodeMaps();emsi++)
hegyi@81
    65
	{
hegyi@81
    66
	  cbt.append_text(emsi->first);
hegyi@81
    67
	}
hegyi@81
    68
    }
hegyi@81
    69
  cbt.prepend_text("Default values");
hegyi@81
    70
}
hegyi@81
    71
hegyi@81
    72
void MapSelector::comboChanged()
hegyi@81
    73
{
hegyi@81
    74
  if(cbt.get_active_row_number()!=0)
hegyi@81
    75
    {
hegyi@81
    76
      default_state=false;
hegyi@81
    77
      Glib::ustring mapname = cbt.get_active_text();
hegyi@81
    78
      if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
hegyi@81
    79
	{
hegyi@81
    80
	  if(itisedge)
hegyi@81
    81
	    {
hegyi@81
    82
	      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) )
hegyi@81
    83
		{
hegyi@81
    84
		  Edge edge=edge_to_update;
hegyi@81
    85
		  switch(id)
hegyi@81
    86
		    {
hegyi@81
    87
		    case E_WIDTH:
hegyi@81
    88
		      gdc.changeEdgeWidth(mapname, edge);
hegyi@81
    89
		      break;
hegyi@81
    90
		    case E_COLOR:
hegyi@81
    91
		      gdc.changeEdgeColor(mapname, edge);
hegyi@81
    92
		      break;
hegyi@81
    93
		    case E_TEXT:
hegyi@81
    94
		      gdc.changeEdgeText(mapname, edge);
hegyi@81
    95
		      break;
hegyi@81
    96
		    default:
hegyi@81
    97
		      std::cerr<<"Error\n";
hegyi@81
    98
		    }
hegyi@81
    99
		}
hegyi@81
   100
	    }
hegyi@81
   101
	  else
hegyi@81
   102
	    {
hegyi@81
   103
	      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) )
hegyi@81
   104
		{
hegyi@81
   105
		  Node node=node_to_update;
hegyi@81
   106
		  switch(id)
hegyi@81
   107
		    {
hegyi@81
   108
		    case N_RADIUS:
hegyi@81
   109
		      gdc.changeNodeRadius(mapname, node);
hegyi@81
   110
		      break;
hegyi@81
   111
		    case N_COLOR:
hegyi@81
   112
		      gdc.changeNodeColor(mapname, node);
hegyi@81
   113
		      break;
hegyi@81
   114
		    case N_TEXT:
hegyi@81
   115
		      gdc.changeNodeText(mapname, node);
hegyi@81
   116
		      break;
hegyi@81
   117
		    default:
hegyi@81
   118
		      std::cerr<<"Error\n";
hegyi@81
   119
		    }
hegyi@81
   120
		}
hegyi@81
   121
	    }
hegyi@81
   122
	}
hegyi@81
   123
    }
hegyi@81
   124
  else if((!default_state)&&(cbt.get_active_row_number()==0))
hegyi@81
   125
    {
hegyi@81
   126
      reset();
hegyi@81
   127
    }
hegyi@81
   128
}
hegyi@81
   129
hegyi@81
   130
void MapSelector::reset()
hegyi@81
   131
{
hegyi@81
   132
  default_state=true;
hegyi@81
   133
  cbt.set_active(0);
hegyi@81
   134
hegyi@81
   135
  if(itisedge)
hegyi@81
   136
    {
hegyi@81
   137
      Edge edge=edge_to_update;
hegyi@81
   138
      switch(id)
hegyi@81
   139
	{
hegyi@81
   140
	case E_WIDTH:
hegyi@81
   141
	  gdc.resetEdgeWidth(edge);
hegyi@81
   142
	  break;
hegyi@81
   143
	case E_COLOR:
hegyi@81
   144
	  gdc.resetEdgeColor(edge);
hegyi@81
   145
	  break;
hegyi@81
   146
	case E_TEXT:
hegyi@81
   147
	  gdc.resetEdgeText(edge);
hegyi@81
   148
	  break;
hegyi@81
   149
	default:
hegyi@81
   150
	  std::cerr<<"Error\n";
hegyi@81
   151
	}
hegyi@81
   152
    }
hegyi@81
   153
  else
hegyi@81
   154
    {
hegyi@81
   155
      Node node=node_to_update;	
hegyi@81
   156
      switch(id)
hegyi@81
   157
	{
hegyi@81
   158
	case N_RADIUS:
hegyi@81
   159
	  gdc.resetNodeRadius(node);
hegyi@81
   160
	  break;
hegyi@81
   161
	case N_COLOR:
hegyi@81
   162
	  gdc.resetNodeColor(node);
hegyi@81
   163
	  break;
hegyi@81
   164
	case N_TEXT:
hegyi@81
   165
	  gdc.resetNodeText(node);
hegyi@81
   166
	  break;
hegyi@81
   167
	default:
hegyi@81
   168
	  std::cerr<<"Error\n";
hegyi@81
   169
	}
hegyi@81
   170
    }
hegyi@81
   171
}
hegyi@81
   172
hegyi@81
   173
void MapSelector::update(Node node)
hegyi@81
   174
{
hegyi@81
   175
  node_to_update=node;
hegyi@81
   176
  if(default_state)
hegyi@81
   177
    {
hegyi@81
   178
      reset();
hegyi@81
   179
    }
hegyi@81
   180
  else
hegyi@81
   181
    {
hegyi@81
   182
      comboChanged();
hegyi@81
   183
    }
hegyi@81
   184
  node_to_update=INVALID;
hegyi@81
   185
}
hegyi@81
   186
hegyi@81
   187
void MapSelector::update(Edge edge)
hegyi@81
   188
{
hegyi@81
   189
  edge_to_update=edge;
hegyi@81
   190
  if(default_state)
hegyi@81
   191
    {
hegyi@81
   192
      reset();
hegyi@81
   193
    }
hegyi@81
   194
  else
hegyi@81
   195
    {
hegyi@81
   196
      comboChanged();
hegyi@81
   197
    }
hegyi@81
   198
  edge_to_update=INVALID;
hegyi@81
   199
}
hegyi@81
   200
hegyi@81
   201
Glib::ustring MapSelector::get_active_text()
hegyi@81
   202
{
hegyi@81
   203
  return cbt.get_active_text();
hegyi@81
   204
}
hegyi@81
   205
hegyi@81
   206
void MapSelector::set_active_text(Glib::ustring text)
hegyi@81
   207
{
hegyi@81
   208
  cbt.set_active_text(text);
hegyi@81
   209
}
hegyi@81
   210
hegyi@81
   211
void MapSelector::append_text(Glib::ustring text)
hegyi@81
   212
{
hegyi@81
   213
  cbt.append_text(text);
hegyi@81
   214
}