private void UpdateSelectedNodeInfo(GameMasterNode node)
{
if (mSelectedNode == node)
{
return;
}
mSelectedNode = node;
if (mNodePreview != null)
{
if (!mNodePreview.TrySetFileDataFromTextbox())
{
// Don't allow switching nodes if the file is invalid.
// This is terrible, but since we currently don't allow writing out invalid JSON,
// switching away could cause data loss.
return;
}
editorInfoSplitter.Panel1.Controls.Remove(mNodePreview);
mNodePreview.Dispose();
mNodePreview = null;
}
if (node != null)
{
// Add a text editor.
mNodePreview = new FilePreview(this, node.FileData);
mNodePreview.Dock = DockStyle.Fill;
editorInfoSplitter.Panel1.Controls.Add(mNodePreview);
UpdateValidationSchema();
mNodePreview.OnModifiedChanged += (bool isModified) =>
{
if (mSelectedNode?.FileData == mNodePreview.FileData)
{
mSelectedNode.IsModified = isModified;
mSelectedNode.NodeData.UpdateGraphNode(mSelectedDNode.DrawingNode);
graphViewer.Invalidate(mSelectedDNode);
}
};
// Add some extra labels to the text editor toolbar.
var nodeNameLabel = mNodePreview.toolStrip.Items.Add(node.Name + (node.NodeType == GameMasterNodeType.ENCOUNTER ? (" (" + ((EncounterNodeData)node.NodeData).EncounterType + ")") : ""));
nodeNameLabel.Margin = new Padding(24, 0, 0, 0);
nodeNameLabel.Enabled = false;
var nodePathLabel = mNodePreview.toolStrip.Items.Add(node.Path);
nodePathLabel.Enabled = false;
nodePathLabel.Alignment = ToolStripItemAlignment.Right;
// Set up the details panel.
PopulateFileDetails(node);
editorInfoSplitter.Panel2Collapsed = fileDetailsListBox.Items.Count == 0;
}
else
{
PopulateFileDetails(null);
editorInfoSplitter.Panel2Collapsed = true;
}
}