#include <LEDA/graphics/graphwin.h>
#include <LEDA/graph/graph_alg.h>

using namespace leda;

using std::cout;
using std::endl;

static color  colors[] = {red, green, blue, yellow, orange, pink, violet, cyan};

void run_and_display(GraphWin& gw)
{
  graph& G = gw.get_graph();

  node_array<int> compnum(G);
  STRONG_COMPONENTS(G,compnum);

  node v;
  forall_nodes(v,G) {
    int i = compnum[v];
    gw.set_color(v,colors[i%8]);
  }

}



void new_node_handler(GraphWin& gw, node) { run_and_display(gw); }
void new_edge_handler(GraphWin& gw, edge) { run_and_display(gw); }
void del_edge_handler(GraphWin& gw)       { run_and_display(gw); }
void del_node_handler(GraphWin& gw)       { run_and_display(gw); }

void init_graph_handler(GraphWin& gw)     { run_and_display(gw); }


int main()
{
  GraphWin gw("Leda Graph Editor");


  gw.set_init_graph_handler(init_graph_handler);
  gw.set_new_edge_handler(new_edge_handler);
  gw.set_del_edge_handler(del_edge_handler);
  gw.set_new_node_handler(new_node_handler);
  gw.set_del_node_handler(del_node_handler);

  gw.display();

  gw.edit();

  return 0;
}
