graph_displayer_canvas-edge.cc
author hegyi
Wed, 27 Jul 2005 11:02:51 +0000
branchgui
changeset 44 9a217bdf53a3
parent 40 cebacea4f965
child 45 199f433eb7cd
permissions -rwxr-xr-x
Documentation was added to GUI.
     1 #include <graph_displayer_canvas.h>
     2 #include <broken_edge.h>
     3 #include <math.h>
     4 
     5 
     6 int GraphDisplayerCanvas::changeEdgeWidth (std::string mapname, Graph::Edge edge)
     7 {
     8   Graph::EdgeMap<double> * actual_map;
     9   if(mapname=="Default")
    10     {
    11       actual_map=new Graph::EdgeMap<double>(g,edge_property_defaults[E_WIDTH]);
    12     }
    13   else
    14     {
    15       actual_map=(mapstorage.edgemap_storage)[mapname];
    16     }
    17 
    18   if(edge==INVALID)
    19     {
    20       for (EdgeIt i(g); i!=INVALID; ++i)
    21 	{
    22 	  int w=(int)(*actual_map)[i];
    23 	  if(w>=0)
    24 	    {
    25 	      edgesmap[i]->property_width_pixels().set_value(w);
    26 	    }
    27 	}
    28     }
    29   else
    30     {
    31       int w=(int)(*actual_map)[edge];
    32       if(w>=0)
    33 	{
    34 	  edgesmap[edge]->property_width_pixels().set_value(w);
    35 	}
    36     }
    37   return 0;
    38 };
    39 
    40 int GraphDisplayerCanvas::changeEdgeColor (std::string mapname, Graph::Edge edge)
    41 {  
    42 
    43   //function maps the range of the maximum and
    44   //the minimum of the nodemap to the range of
    45   //green in RGB
    46   Graph::EdgeMap<double> * actual_map;
    47   if(mapname=="Default")
    48     {
    49       actual_map=new Graph::EdgeMap<double>(g,edge_property_defaults[E_COLOR]);
    50     }
    51   else
    52     {
    53       actual_map=(mapstorage.edgemap_storage)[mapname];
    54     }
    55 
    56   double max, min;
    57 
    58   if(mapname!="Default")
    59     {
    60       max=mapstorage.maxOfEdgeMap(mapname);
    61       min=mapstorage.minOfEdgeMap(mapname);
    62     }
    63   else
    64     {
    65       max=edge_property_defaults[E_COLOR];
    66       min=edge_property_defaults[E_COLOR];
    67     }
    68 
    69   if(edge==INVALID)
    70     {
    71       for (EdgeIt i(g); i!=INVALID; ++i)
    72 	{
    73 	  double w=(*actual_map)[i];
    74 
    75 	  Gdk::Color color;
    76 	  if(max!=min)
    77 	    {
    78 	      color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
    79 	    }
    80 	  else
    81 	    {
    82 	      color.set_rgb_p (0, 100, 0);
    83 	    }
    84 	  edgesmap[i]->property_fill_color_gdk().set_value(color);
    85 	}
    86     }
    87   else
    88     {
    89       Gdk::Color color;
    90 
    91       double w=(*actual_map)[edge];
    92 
    93       if(max!=min)
    94 	{
    95 	  color.set_rgb_p (0, 100*(w-min)/(max-min), 0);
    96 	}
    97       else
    98 	{
    99 	  color.set_rgb_p (0, 100, 0);
   100 	}
   101 
   102       edgesmap[edge]->property_fill_color_gdk().set_value(color);
   103     }
   104   return 0;
   105 };
   106 
   107 int GraphDisplayerCanvas::changeEdgeText (std::string mapname, Graph::Edge edge)
   108 {
   109   //the number in the map will be written on the edge
   110   //EXCEPT when the name of the map is Default, because
   111   //in that case empty string will be written, because
   112   //that is the deleter map
   113 
   114   if(edge==INVALID)
   115     {
   116       for (EdgeIt i(g); i!=INVALID; ++i)
   117 	{
   118 	  if(mapname!="Default")
   119 	    {
   120 	      edgemap_to_edit=mapname;
   121 	      double number=(*(mapstorage.edgemap_storage)[mapname])[i];
   122 // 	      int length=1;
   123 // 	      //if number is smaller than one, length would be negative, or invalid
   124 // 	      if(number>=1)
   125 // 		{
   126 // 		  length=(int)(floor(log(number)/log(10)))+1;
   127 // 		}
   128 // 	      int maxpos=(int)(pow(10,length-1));
   129 // 	      int strl=length+1+RANGE;
   130 // 	      char * str=new char[strl];
   131 // 	      str[length]='.';
   132 // 	      str[strl]='\0';
   133       
   134 // 	      for(int j=0;j<strl;j++)
   135 // 		{
   136 // 		  if(j!=length)
   137 // 		    {
   138 // 		      if((number-(int)number)>ALMOST_ONE)
   139 // 			{
   140 // 			  number=round(number);
   141 // 			}
   142 // 		      int digit=(int)(number/maxpos);
   143 // 		      str[j]=(digit+'0');
   144 // 		      number-=digit*maxpos;
   145 // 		      number*=10;
   146 // 		    }
   147 // 		}
   148 //       	      edgetextmap[i]->property_text().set_value(str);
   149 
   150 	      std::ostringstream ostr;
   151 	      ostr << number;
   152 
   153       	      edgetextmap[i]->property_text().set_value(ostr.str());
   154 	    }
   155 	  else
   156 	    {
   157 	      edgemap_to_edit="";
   158 	      edgetextmap[i]->property_text().set_value("");
   159 	    }
   160 	}
   161 
   162     }
   163   else
   164     {
   165       if(mapname!="Default")
   166 	{
   167 	  double number=(*(mapstorage.edgemap_storage)[mapname])[edge];
   168 	  int length=1;
   169 	  //if number is smaller than one, length would be negative, or invalid
   170 	  if(number>=1)
   171 	    {
   172 	      length=(int)(floor(log(number)/log(10)))+1;
   173 	    }
   174 	  int maxpos=(int)(pow(10,length-1));
   175 	  int strl=length+1+RANGE;
   176 	  char * str=new char[strl];
   177 	  str[length]='.';
   178 	  str[strl]='\0';
   179       
   180 	  for(int j=0;j<strl;j++)
   181 	    {
   182 	      if(j!=length)
   183 		{
   184 		  if((number-(int)number)>ALMOST_ONE)
   185 		    {
   186 		      number=round(number);
   187 		    }
   188 		  int digit=(int)(number/maxpos);
   189 		  str[j]=(digit+'0');
   190 		  number-=digit*maxpos;
   191 		  number*=10;
   192 		}
   193 	    }
   194       
   195 	  edgetextmap[edge]->property_text().set_value(str);
   196 	}
   197       else
   198 	{
   199 	  edgetextmap[edge]->property_text().set_value("");
   200 	}
   201 	  
   202     }
   203 
   204   return 0;
   205 
   206 };