gui/graph_displayer_canvas-edge.cc
author hegyi
Mon, 21 Nov 2005 18:03:20 +0000
changeset 1823 cb082cdf3667
parent 1731 616bc933c2bc
child 1825 535d2eccfc03
permissions -rwxr-xr-x
NewMapWin has become Dialog instead of Window. Therefore it is created dynamically, when there is need for it, instead of keeping one instance in memory. This solution is slower, but more correct than before.
     1 #include "graph_displayer_canvas.h"
     2 #include <cmath>
     3 
     4 
     5 int GraphDisplayerCanvas::resetEdgeWidth (Edge edge)
     6 {
     7   Graph::EdgeMap<double> * actual_map;
     8   double min, max;
     9 
    10   min=edge_property_defaults[E_WIDTH];
    11   max=edge_property_defaults[E_WIDTH];
    12   actual_map=new Graph::EdgeMap<double>(mapstorage.graph,edge_property_defaults[E_WIDTH]);
    13   
    14   if(edge==INVALID)
    15     {
    16       for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
    17 	{
    18 	  double v=fabs((*actual_map)[i]);
    19 	  int w;
    20 	  if(min==max)
    21 	    {
    22 	      w=(int)(edge_property_defaults[E_WIDTH]);
    23 	    }
    24 	  else
    25 	    {
    26 	      w=(int)(MIN_EDGE_WIDTH+(v-min)/(max-min)*(MAX_EDGE_WIDTH-MIN_EDGE_WIDTH));
    27 	    }
    28 	  edgesmap[i]->property_width_units().set_value(w);
    29 	}
    30     }
    31   else
    32     {
    33       int w=(int)(*actual_map)[edge];
    34       if(w>=0)
    35 	{
    36 	  edgesmap[edge]->property_width_units().set_value(w);
    37 	}
    38     }
    39   return 0;
    40 }
    41 
    42 
    43 int GraphDisplayerCanvas::changeEdgeWidth (std::string mapname, Edge edge)
    44 {
    45   Graph::EdgeMap<double> * actual_map;
    46   double min, max;
    47 
    48   min=mapstorage.minOfEdgeMap(mapname);
    49   max=mapstorage.maxOfEdgeMap(mapname);
    50   actual_map=(mapstorage.edgemap_storage)[mapname];
    51 
    52   if(edge==INVALID)
    53     {
    54       for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
    55 	{
    56 	  double v=fabs((*actual_map)[i]);
    57 	  int w;
    58 	  if(min==max)
    59 	    {
    60 	      w=(int)(edge_property_defaults[E_WIDTH]);
    61 	    }
    62 	  else
    63 	    {
    64 	      w=(int)(MIN_EDGE_WIDTH+(v-min)/(max-min)*(MAX_EDGE_WIDTH-MIN_EDGE_WIDTH));
    65 	    }
    66 	  edgesmap[i]->property_width_units().set_value(w);
    67 	}
    68     }
    69   else
    70     {
    71       int w=(int)(*actual_map)[edge];
    72       if(w>=0)
    73 	{
    74 	  edgesmap[edge]->property_width_units().set_value(w);
    75 	}
    76     }
    77   return 0;
    78 };
    79 
    80 int GraphDisplayerCanvas::changeEdgeColor (std::string mapname, Edge edge)
    81 {  
    82 
    83   //function maps the range of the maximum and
    84   //the minimum of the nodemap to the range of
    85   //green in RGB
    86   Graph::EdgeMap<double> * actual_map;
    87   actual_map=(mapstorage.edgemap_storage)[mapname];
    88 
    89   double max, min;
    90 
    91   max=mapstorage.maxOfEdgeMap(mapname);
    92   min=mapstorage.minOfEdgeMap(mapname);
    93 
    94   if(edge==INVALID)
    95     {
    96       for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
    97 	{
    98 	  double w=(*actual_map)[i];
    99 
   100 	  Gdk::Color color;
   101 	  if(max!=min)
   102 	    {
   103 	      color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
   104 	    }
   105 	  else
   106 	    {
   107 	      color.set_rgb_p (0, 100, 0);
   108 	    }
   109 	  edgesmap[i]->property_fill_color_gdk().set_value(color);
   110 	}
   111     }
   112   else
   113     {
   114       Gdk::Color color;
   115 
   116       double w=(*actual_map)[edge];
   117 
   118       if(max!=min)
   119 	{
   120 	  color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
   121 	}
   122       else
   123 	{
   124 	  color.set_rgb_p (0, 100, 0);
   125 	}
   126 
   127       edgesmap[edge]->property_fill_color_gdk().set_value(color);
   128     }
   129   return 0;
   130 };
   131 
   132 int GraphDisplayerCanvas::resetEdgeColor (Edge edge)
   133 {  
   134 
   135   //function maps the range of the maximum and
   136   //the minimum of the nodemap to the range of
   137   //green in RGB
   138   Graph::EdgeMap<double> * actual_map;
   139   actual_map=new Graph::EdgeMap<double>(mapstorage.graph,edge_property_defaults[E_COLOR]);
   140 
   141   double max, min;
   142 
   143   max=edge_property_defaults[E_COLOR];
   144   min=edge_property_defaults[E_COLOR];
   145 
   146   if(edge==INVALID)
   147     {
   148       for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
   149 	{
   150 	  double w=(*actual_map)[i];
   151 
   152 	  Gdk::Color color;
   153 	  if(max!=min)
   154 	    {
   155 	      color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
   156 	    }
   157 	  else
   158 	    {
   159 	      color.set_rgb_p (0, 100, 0);
   160 	    }
   161 	  edgesmap[i]->property_fill_color_gdk().set_value(color);
   162 	}
   163     }
   164   else
   165     {
   166       Gdk::Color color;
   167 
   168       double w=(*actual_map)[edge];
   169 
   170       if(max!=min)
   171 	{
   172 	  color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
   173 	}
   174       else
   175 	{
   176 	  color.set_rgb_p (0, 100, 0);
   177 	}
   178 
   179       edgesmap[edge]->property_fill_color_gdk().set_value(color);
   180     }
   181   return 0;
   182 };
   183 
   184 int GraphDisplayerCanvas::changeEdgeText (std::string mapname, Edge edge)
   185 {
   186   //the number in the map will be written on the edge
   187   //EXCEPT when the name of the map is Default, because
   188   //in that case empty string will be written, because
   189   //that is the deleter map
   190   
   191   if(edge==INVALID)
   192     {
   193       for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
   194 	{
   195 	  edgemap_to_edit=mapname;
   196 	  double number=(*(mapstorage.edgemap_storage)[mapname])[i];
   197 	  
   198 	  std::ostringstream ostr;
   199 	  ostr << number;
   200 	  
   201 	  edgetextmap[i]->property_text().set_value(ostr.str());
   202 	}
   203 
   204     }
   205   else
   206     {
   207 	  double number=(*(mapstorage.edgemap_storage)[mapname])[edge];
   208 
   209 	  std::ostringstream ostr;
   210 	  ostr << number;
   211 	  
   212 	  edgetextmap[edge]->property_text().set_value(ostr.str());
   213     }
   214 
   215   return 0;
   216 
   217 };
   218 
   219 int GraphDisplayerCanvas::resetEdgeText (Edge edge)
   220 {
   221   //the number in the map will be written on the edge
   222   //EXCEPT when the name of the map is Default, because
   223   //in that case empty string will be written, because
   224   //that is the deleter map
   225   
   226   if(edge==INVALID)
   227     {
   228       for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
   229 	{
   230 	  edgemap_to_edit="";
   231 	  edgetextmap[i]->property_text().set_value("");
   232 	}
   233 
   234     }
   235   else
   236     {
   237       edgetextmap[edge]->property_text().set_value("");
   238     }
   239 
   240   return 0;
   241 
   242 };