private void Window_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     if (mCurrentLine != null)
       {
     mCurrentLine.Erase();
     mLines.Remove(mCurrentLine);
     mCurrentLine = null;
     e.Handled = true;
       }
 }
        void obj_Link(object sender, LinkEventArgs e)
        {
            NoiseObject obj = sender as NoiseObject;

              // set line begin - line end is mouse
              if (mCurrentLine == null)
              {
            if (e.type != LinkType.Out && e.id.Connection != null) obj_Erase(sender, e);
            mCurrentLine = new LinkLine(xBoard, e.type, e.id);
              }
              // set line end
              else
              {
            if (mCurrentLine.Source != null && sender == mCurrentLine.Source) { mCurrentLine.Erase(); mCurrentLine = null; }
            else if (mCurrentLine.Target != null && sender == mCurrentLine.Target) { mCurrentLine.Erase(); mCurrentLine = null; }
            else if (mCurrentLine.TargetLink == null && e.type == LinkType.Out) { mCurrentLine.Erase(); mCurrentLine = null; }
            else if (mCurrentLine.SourceLink == null && e.type != LinkType.Out) { mCurrentLine.Erase(); mCurrentLine = null; }
            else if (obj.Module == null) { mCurrentLine.Erase(); mCurrentLine = null; }
            else
            {
              if (e.id.Connection != null) obj_Erase(sender, e);
              mCurrentLine.EndLink(e.type, e.id);
              mLines.Add(mCurrentLine);
              mCurrentLine = null;
            }
              }
        }