Ejemplo n.º 1
0
        /// <summary>Add user documentation, based on the example.</summary>
        /// <param name="tags">The tags to add to.</param>
        /// <param name="modelName">Name of model to document.</param>
        private void AddUserDocumentation(List <AutoDocumentation.ITag> tags, string modelName)
        {
            // Look for some instructions on which models in the example file we should write.
            // Instructions will be in a memo in the validation .apsimx file

            IModel userDocumentation = Apsim.Get(ExplorerPresenter.ApsimXFile, ".Simulations.UserDocumentation") as IModel;
            string exampleFileName   = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..", "Examples", modelName + ".apsimx");

            if (userDocumentation != null && userDocumentation.Children.Count > 0 && File.Exists(exampleFileName))
            {
                // Write heading.
                tags.Add(new AutoDocumentation.Heading("User documentation", 1));

                // Open the related example .apsimx file and get its presenter.
                ExplorerPresenter examplePresenter = ExplorerPresenter.MainPresenter.OpenApsimXFileInTab(exampleFileName, onLeftTabControl: true);

                Memo     instructionsMemo = userDocumentation.Children[0] as Memo;
                string[] instructions     = instructionsMemo.MemoText.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                foreach (string instruction in instructions)
                {
                    IModel model = Apsim.Find(examplePresenter.ApsimXFile, instruction);
                    if (model != null)
                    {
                        examplePresenter.SelectNode(Apsim.FullPath(model));
                        Application.DoEvents();
                        if (model is Memo)
                        {
                            model.Document(tags, 1, 0);
                        }
                        else
                        {
                            System.Drawing.Image image;

                            if (model is Manager)
                            {
                                image = (examplePresenter.CurrentPresenter as ManagerPresenter).GetScreenshot();
                            }
                            else
                            {
                                image = examplePresenter.GetScreenhotOfRightHandPanel();
                            }

                            if (image != null)
                            {
                                string name = "Example" + instruction;
                                tags.Add(new AutoDocumentation.Image()
                                {
                                    name = name, image = image
                                });
                            }
                        }
                    }
                }

                // Close the tab
                examplePresenter.MainPresenter.CloseTab(exampleFileName);
            }
        }