public GuiTreeviewRenderer(
            IGuiLayout guiLayout,
            IRowClickableLocations <TSource> rowClickableLocations,
            ICachingObserver <TSource> itemCache,
            ITreeviewRowRenderer <TSource> treeviewRowRenderer)
        {
            if (guiLayout == null)
            {
                throw new ArgumentNullException("guiLayout");
            }

            if (rowClickableLocations == null)
            {
                throw new ArgumentNullException("rowClickableLocations");
            }

            if (itemCache == null)
            {
                throw new ArgumentNullException("itemCache");
            }

            if (treeviewRowRenderer == null)
            {
                throw new ArgumentNullException("treeviewRowRenderer");
            }

            this.guiLayout             = guiLayout;
            this.rowClickableLocations = rowClickableLocations;
            this.itemCache             = itemCache;
            this.treeviewRowRenderer   = treeviewRowRenderer;

            this.itemCache = itemCache;
        }
 private void InitaliseTreeview()
 {
     this.gui                   = new GuiWrapper();
     this.guiLayout             = new GuiLayoutWrapper();
     this.log                   = new UnityLog();
     this.rowClickableLocations = new RowClickableLocations <Treeview_DataModel>();
     this.rowContentClicker     = new RowContentClicker <Treeview_DataModel>();
     this.rowExpanderClicker    = new RowExpanderClicker <Treeview_DataModel>();
     this.rowContentActivator   = new RowContentActivator <Treeview_DataModel>();
     this.cachingObserver       = new CachingObserver <Treeview_DataModel>(this.log);
     this.rowInteraction        = new RowInteraction <Treeview_DataModel>(rowClickableLocations, rowExpanderClicker, rowContentClicker, rowContentActivator);
 }
    //////////////////////////////////////////////////////
    //// FUNCIONS FOR EXTERNAL ACCESS

    public void AddUnknownEntityToTreeview(int entityID)
    {
        finishedInitTreeviewHandler = false;

        //cloning entity
        GameObject clone = new GameObject();

        clone.name = "" + entityID;
        GameObject model = Instantiate(Resources.Load("Models/vojak") as GameObject);

        model.transform.parent   = clone.transform;
        clone.transform.position = new Vector3(0, UnityEngine.Random.Range(-1000000, -10000));

        foreach (Transform child in model.transform)
        {
            child.GetComponent <Renderer>().material             = this.entityHandlerScript.materialUnknownForces;
            child.GetComponent <Renderer>().material.mainTexture = this.entityHandlerScript.militaryTexture;
        }

        // should not occur
        // adding to treeview
        if (TreeView.ItemsSource.Children.Count < 3)
        {
            Debug.Log("Not enough children of root parent!");
            finishedInitTreeviewHandler = true;
            return;
        }

        TreeView.ItemsSource.Children[3].Children.Add(
            new Treeview_DataModel {
            Text = Constants.UnknownEntityName + entityID, EntityID = entityID, IsUnit = false, Health = 0, Father = TreeView.ItemsSource.Children[3]
        });

        this.rowContentActivator = new RowContentActivator <Treeview_DataModel>();
        this.cachingObserver     = new CachingObserver <Treeview_DataModel>(this.log);
        this.treeviewRenderer    = new GuiTreeviewRenderer <Treeview_DataModel>(this.guiLayout, this.rowClickableLocations, this.cachingObserver, this.rowRenderer);

        RecursionUtil.Treeview_SetGameObjects_Rec(TreeView.ItemsSource);
        finishedInitTreeviewHandler = true;
    }