private void addAssetMenuItem_Click(object sender, EventArgs e)
        {
            // Get asset name from dialog
            TextboxDialog dialog = new TextboxDialog("Create new asset", "New asset name");

            dialog.ShowDialog();
            if (dialog.Cancelled)
            {
                return;
            }

            // Create new asset element with given name
            AssetElement ae = new AssetElement();

            ae.Name = dialog.StringValue;

            // Add asset to selected model
            TreeNode       modelNode = mainTreeView.SelectedNode;
            ModelComponent model     = ((ModelForm)mainTreeView.SelectedNode.Tag).Model;

            model.Assets.Add(ae);

            // Refresh to add node
            UpdateModelNode(model, modelNode.Parent);
            TreeNode newNode = getNodeFromElement(ae);

            mainTreeView.SelectedNode = newNode;
            PicassoSubform newForm = (PicassoSubform)newNode.Tag;

            newForm.Show();
        }
        private void mainTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            // Node has been clicked
            try
            {
                // Check for form and show
                PicassoSubform target = (PicassoSubform)e.Node.Tag;
                target.Show();
                target.Focus();

                // Highlight in property grid
                mainPropertyGrid.SelectedObject = target.Element;

                // If it belongs to a different scenario than the one current selected, change it
                ScenarioComponent targetScenario = getScenarioFromNode(e.Node);
                if (targetScenario != _activeScenario)
                {
                    _activeScenario = targetScenario;
                    Text            = _textPrefix + " - " + _activeScenario.ScenarioName;

                    // Hide all open forms not underneath this scenario
                    List <TreeNode> allNodes = getAllNodes(mainTreeView.Nodes);
                    foreach (TreeNode node in allNodes)
                    {
                        if (getScenarioFromNode(node) != _activeScenario && ((Form)node.Tag).Visible)
                        {
                            ((Form)node.Tag).Visible = false;
                        }
                    }
                }
            }
            catch (NullReferenceException)
            {
                // Node has no form in tag
            }
            catch (InvalidCastException)
            {
                // Node tag is not a form
            }
        }