Blob Blame Raw
/*
    ......... 2015 Ivan Mahonin

    This program 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.

    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
*/

using System;
using System.Collections.Generic;
using System.Drawing;

namespace Diagram {
    public class Block {
        public string id = "";
        public string caption = "";
        public string text = "";
        public Color color = Color.Black;
    }

    public class Link {
        public string id = "";
        public string srcId = "";
        public string dstId = "";
    }

    public class Diagram {
        public readonly Dictionary<string, Block> blocks = new Dictionary<string, Block>();
        public readonly Dictionary<string, Link> links = new Dictionary<string, Link>();

        public Diagram addBlock(Block block) {
            blocks.Add(block.id, block);
            return this;
        }

        public Diagram addBlock(string id, string caption, string text, Color color, string[] links = null) {
            addBlock(new Block() { id = id, caption = caption, text = text, color = color });
            if (links != null)
                foreach(string link in links)
                    addLink(id, link);
            return this;
        }

        public Diagram addBlock(string id, string caption, string text, string[] links = null) {
            addBlock(id, caption, text, Color.Black, links);
            return this;
        }

        public Diagram addLink(Link link, string srcId = "", string dstId = "") {
            if (srcId != "")
                link.srcId = srcId;
            if (dstId != "")
                link.dstId = dstId;
            if (link.id == "")
                link.id = link.srcId + link.dstId;
            links.Add(link.id, link);
            return this;
        }

        public Diagram addLink(Link link) {
            if (link.id == "")
                link.id = link.srcId + link.dstId;
            links.Add(link.id, link);
            return this;
        }

        public Diagram addLink(string srcId, string dstId) {
            addLink(new Link(), srcId, dstId);
            return this;
        }
    }
}