diff --git a/src/wallitem.cpp b/src/wallitem.cpp
new file mode 100644
--- /dev/null
+++ b/src/wallitem.cpp
@@ -0,0 +1,173 @@
+/*
+ *
+ * This file is part of the Virtual Leaf.
+ *
+ * The Virtual Leaf is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The Virtual Leaf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with the Virtual Leaf. If not, see .
+ *
+ * Copyright 2010 Roeland Merks.
+ *
+ */
+
+#include
+#include
+#include
+#include "canvas.h"
+#include "wallitem.h"
+#include "parameter.h"
+#include "node.h"
+#include "transporterdialog.h"
+
+static const std::string _module_id("$Id$");
+
+WallItem::WallItem( Wall *w, int wallnumber, QGraphicsScene *canvas )
+ : QGraphicsLineItem( 0, canvas ), SimItemBase( w, canvas){
+
+ wn = wallnumber;
+
+ extern Parameter par;
+ //Wall *w=&getWall();
+
+ // Draw amount of "PIN1"
+ //double val = wn==1?(w->Transporters1(1)/par.Pi_tot)*255.:(w->Transporters2(1)/par.Pi_tot)*255.;
+
+ /* if (val > 255 || val < 0 ) {
+ std::cerr << "val = " << val << endl;
+ if (wn == 1) {
+ std::cerr << "Transporters1(1) = " << w->Transporters1(1) << endl;
+ } else {
+ std::cerr << "Transporters2(1) = " << w->Transporters2(1) << endl;
+ }
+
+ }*/
+
+
+ setColor();
+
+ // line with "PIN1"is a bit inside the cell wall
+ Vector edgevec = (*(w->N2())) - (*(w->N1()));
+ Vector perp = edgevec.Normalised().Perp2D();
+
+ Vector offs = Cell::Offset();
+ double factor = Cell::Factor();
+
+ Vector from = ( offs + *(w->N1()) ) * factor + (wn==1?-1:1) * par.outlinewidth * 0.5 * factor * perp;
+ Vector to = ( offs + *(w->N2()) ) *factor + (wn==1?-1:1) * par.outlinewidth * 0.5 * factor * perp;
+
+
+ Vector tmp_centroid = ( *(w->N2()) + *(w->N1()) )/2.;
+ Vector centroid = ( offs + tmp_centroid ) * factor;
+
+ QString text=QString("%1").arg(w->Index());
+
+ /* if (0) {
+ QGraphicsSimpleTextItem *ctext = new QGraphicsSimpleTextItem ( text, 0, canvas );
+ ctext->setPen( QPen(QColor("orange")) );
+ ctext->setZValue(20);
+ ctext->setFont( QFont( "Helvetica", par.nodenumsize, QFont::Bold) );
+ //ctext->setTextFlags(Qt::AlignCenter);
+ ctext->show();
+ ctext ->setPos(centroid.x,
+ centroid.y );
+ }*/
+
+ setLine(( from.x ),
+ ( from.y ),
+ ( to.x ),
+ ( to.y ) );
+ setZValue(12);
+ }
+
+
+void WallItem::setColor(void) {
+
+ QColor diffcolor;
+ static const QColor purple("Purple");
+ static const QColor blue("blue");
+
+ Wall *w=&getWall();
+ double tr = wn==1?w->Transporters1(1):w->Transporters2(1);
+ CellBase *c = wn==1?w->C1():w->C2();
+ diffcolor.setRgb( (int)( ( tr / (1 + tr) )*255.), 0, 0);
+ //diffcolor.setRgb( (int)( ((wn==1?w->Transporters1(1):w->Transporters2(1)))*255.), 0, 0);
+ /* if (wn==1) {
+ cerr << "Transporter: " << w->Transporters1(1) << endl;
+ } else {
+ cerr << "Transporter: " << w->Transporters2(1) << endl;
+ }*/
+
+ if (w->AuxinSource() && c->BoundaryPolP()) {
+ setPen( QPen(purple , par.outlinewidth) );
+ } else {
+ if (w->AuxinSink() && c->BoundaryPolP()) {
+ setPen( QPen(blue, par.outlinewidth));
+ } else {
+ setPen (QPen(diffcolor, par.outlinewidth) );
+ }
+ }
+
+// if (c->BoundaryPolP()) {
+// setPen(QPen(QColor("red"), 20));
+// }
+}
+
+void WallItem::OnClick(QMouseEvent *e) {
+
+
+ Wall *w=&getWall();
+ cerr << "Wall ID = " << w->Index() << ", this = " << w << "\n";
+ cerr << "Wall item = " << this << "\n";
+ cerr << "C1 = " << w->C1()->Index() << ", C2 = " << w->C2()->Index() << endl;
+ cerr << "N1 = " << w->N1()->Index() << ", N2 = " << w->N2()->Index() << endl;
+ //double tr = wn==1?w->Transporters1(1):w->Transporters2(1);
+ CellBase *c = wn==1?w->C1():w->C2();
+
+ TransporterDialog dialog(w, c, wn);
+ dialog.exec();
+
+ if (e->button() == Qt::RightButton) {
+ QString message;
+ if (wn==1) {
+ message=QString("Transporter 1 = %1, color = %2, length = %3\n").arg(w->Transporters1(1)).arg(pen().color().red()).arg(getWall().Length());
+ } else {
+ message=QString("Transporter 2 = %1, color = %2, length = %3\n").arg(w->Transporters2(1)).arg(pen().color().red()).arg(getWall().Length());
+ }
+
+ //extern MainBase *main_window;
+ //((Main *)main_window)->UserMessage(message);
+
+ } else {
+ if (e->button() == Qt::LeftButton) {
+ if (c->BoundaryPolP()) {
+ w->cycleWallType();
+ } else {
+ if (e->modifiers() == Qt::ShiftModifier) {
+ wn==1?w->setTransporters1(1,0):w->setTransporters2(1,0);
+
+ } else {
+ // set high amount of PIN1
+ //cerr << "Setting PIN1\n";
+ wn==1?w->setTransporters1(1,10):w->setTransporters2(1,10);
+ }
+ }
+ setColor();
+ update(boundingRect());
+ }
+ /* else {
+ if (e->button() == Qt::MidButton && (e->modifiers == Qt::ShiftModifier & Qt::ControlModifier)) {
+ // hidden feature for correcting
+ }*/
+
+
+ }
+}