/// <summary>Display a view on the right hand panel in view.</summary> public void ShowRightHandPanel() { if (this.view.SelectedNode != string.Empty) { object model = Apsim.Get(this.ApsimXFile, this.view.SelectedNode); if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; if (this.advancedMode) { viewName = new ViewNameAttribute("UserInterface.Views.GridView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.PropertyPresenter"); } if (viewName == null && presenterName == null) { viewName = new ViewNameAttribute("UserInterface.Views.HTMLView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.GenericPresenter"); } if (viewName != null && presenterName != null) { this.ShowInRightHandPanel(model, viewName.ToString(), presenterName.ToString()); } } } }
/// <summary>Display a view on the right hand panel in view.</summary> public void ShowRightHandPanel() { if (this.view.Tree.SelectedNode != string.Empty) { object model = this.ApsimXFile.FindByPath(this.view.Tree.SelectedNode)?.Value; if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; DescriptionAttribute descriptionName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descriptionName != null && model.GetType().Namespace.Contains("CLEM")) { viewName = new ViewNameAttribute("UserInterface.Views.ModelDetailsWrapperView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.ModelDetailsWrapperPresenter"); } if (Configuration.Settings.UseNewPropertyPresenter && presenterName != null) { if (presenterName.ToString().Contains(".PropertyPresenter")) { presenterName = new PresenterNameAttribute("UserInterface.Presenters.SimplePropertyPresenter"); viewName = new ViewNameAttribute("UserInterface.Views.PropertyView"); } else if (presenterName.ToString().Contains(".BiomassRemovalPresenter")) { presenterName = new PresenterNameAttribute("UserInterface.Presenters.CompositePropertyPresenter"); viewName = new ViewNameAttribute("UserInterface.Views.PropertyView"); } } // if a clem model ignore the newly added description box that is handled by CLEM wrapper if (!model.GetType().Namespace.Contains("CLEM")) { ShowDescriptionInRightHandPanel(descriptionName?.ToString()); } if (viewName != null && viewName.ToString().Contains(".glade")) { ShowInRightHandPanel(model, newView: new ViewBase(view as ViewBase, viewName.ToString()), presenter: Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter); } else if (viewName != null && presenterName != null) { ShowInRightHandPanel(model, viewName.ToString(), presenterName.ToString()); } else { var view = new MarkdownView(this.view as ViewBase); var presenter = new DocumentationPresenter(); ShowInRightHandPanel(model, view, presenter); } } } }
public void Attach(object model, object view, ExplorerPresenter explorerPresenter) { this.ApsimXFile = model as Simulations; this.ExplorerPresenter = explorerPresenter; this.View = view as IModelDetailsWrapperView; if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; View.ModelTypeText = model.GetType().ToString().Substring("Models.".Length); DescriptionAttribute descAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descAtt != null) { View.ModelDescriptionText = descAtt.ToString(); } else { View.ModelDescriptionText = ""; } // Set CLEM specific colours for title if (View.ModelTypeText.Contains(".Resources.")) { View.ModelTypeTextColour = "996633"; } else if (View.ModelTypeText.Contains("Activities.")) { View.ModelTypeTextColour = "009999"; } HelpUriAttribute helpAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(HelpUriAttribute), false) as HelpUriAttribute; View.ModelHelpURL = ""; if (helpAtt != null) { View.ModelHelpURL = helpAtt.ToString(); } if (viewName != null && presenterName != null) { ShowInLowerPanel(model, viewName.ToString(), presenterName.ToString()); } } }
public void Attach(object model, object view, ExplorerPresenter explorerPresenter) { this.ExplorerPresenter = explorerPresenter; this.View = view as IWFMasterView; if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; View.ModelTypeText = model.GetType().ToString().Substring("Models.WholeFarm.".Length); DescriptionAttribute descAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descAtt != null) { View.ModelDescriptionText = descAtt.ToString(); } else { View.ModelDescriptionText = ""; } View.ModelHelpURL = "http://CLEMHelp.csiro.au/" + View.ModelTypeText + ".html"; if (View.ModelTypeText.Contains("Resources.")) { View.ModelTypeTextColour = Color.FromArgb(153, 102, 51); } else if (View.ModelTypeText.Contains("Activities.")) { View.ModelTypeTextColour = Color.FromArgb(0, 153, 153); } else { View.ModelTypeTextColour = Color.Black; } if (viewName != null && presenterName != null) { ShowInLowerPanel(model, viewName.ToString(), presenterName.ToString()); } } }
/// <summary>Display a view on the right hand panel in view.</summary> public void ShowRightHandPanel() { try { if (this.view.Tree.SelectedNode != string.Empty) { object model = Apsim.Get(this.ApsimXFile, this.view.Tree.SelectedNode); if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; DescriptionAttribute descriptionName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descriptionName != null && model.GetType().Namespace.Contains("CLEM")) { viewName = new ViewNameAttribute("UserInterface.Views.ModelDetailsWrapperView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.ModelDetailsWrapperPresenter"); } if (viewName == null && presenterName == null) { viewName = new ViewNameAttribute("UserInterface.Views.HTMLView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.GenericPresenter"); } ShowDescriptionInRightHandPanel(descriptionName?.ToString()); if (viewName != null && presenterName != null) { ShowInRightHandPanel(model, viewName.ToString(), presenterName.ToString()); } } } } catch (Exception err) { MainPresenter.ShowError(err); } }
/// <summary>Display a view on the right hand panel in view.</summary> private void ShowRightHandPanel() { if (this.view.SelectedNode != string.Empty) { object model = Apsim.Get(this.ApsimXFile, this.view.SelectedNode); if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; if (this.advancedMode) { viewName = new ViewNameAttribute("UserInterface.Views.GridView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.PropertyPresenter"); } if (viewName != null && presenterName != null) { UserControl newView = Assembly.GetExecutingAssembly().CreateInstance(viewName.ToString()) as UserControl; this.currentRightHandPresenter = Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter; if (newView != null && this.currentRightHandPresenter != null) { try { this.view.AddRightHandView(newView); this.currentRightHandPresenter.Attach(model, newView, this); } catch (Exception err) { string message = err.Message; message += "\r\n" + err.StackTrace; this.ShowMessage(message, DataStore.ErrorLevel.Error); } } } } } }
/// <summary>Display a view on the right hand panel in view.</summary> public void ShowRightHandPanel() { if (this.view.Tree.SelectedNode != string.Empty) { object model = Apsim.Get(this.ApsimXFile, this.view.Tree.SelectedNode); if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; DescriptionAttribute descriptionName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descriptionName != null && model.GetType().Namespace.Contains("CLEM")) { viewName = new ViewNameAttribute("UserInterface.Views.ModelDetailsWrapperView"); presenterName = new PresenterNameAttribute("UserInterface.Presenters.ModelDetailsWrapperPresenter"); } // if a clem model ignore the newly added description box that is handled by CLEM wrapper if (!model.GetType().Namespace.Contains("CLEM")) { ShowDescriptionInRightHandPanel(descriptionName?.ToString()); } if (viewName != null && viewName.ToString().Contains(".glade")) { ShowInRightHandPanel(model, newView: new ViewBase(view as ViewBase, viewName.ToString()), presenter: Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter); } else if (viewName != null && presenterName != null) { ShowInRightHandPanel(model, viewName.ToString(), presenterName.ToString()); } } } }
/// <summary>Writes PDF for specified auto-doc commands.</summary> /// <param name="section">The writer to write to.</param> /// <param name="tags">The autodoc tags.</param> private void TagsToMigraDoc(Section section, List <AutoDocumentation.ITag> tags) { int figureNumber = 0; foreach (AutoDocumentation.ITag tag in tags) { if (tag is AutoDocumentation.Heading) { AutoDocumentation.Heading heading = tag as AutoDocumentation.Heading; if (heading.headingLevel > 0 && heading.headingLevel <= 6) { Paragraph para = section.AddParagraph(heading.text, "Heading" + heading.headingLevel); para.Format.KeepWithNext = true; int posSpace = heading.text.IndexOf(' '); if (posSpace > 0) { para.AddBookmark(heading.text.Substring(posSpace + 1)); } if (heading.headingLevel == 1) { para.Format.OutlineLevel = OutlineLevel.Level1; } else if (heading.headingLevel == 2) { para.Format.OutlineLevel = OutlineLevel.Level2; } else if (heading.headingLevel == 3) { para.Format.OutlineLevel = OutlineLevel.Level3; } else if (heading.headingLevel == 4) { para.Format.OutlineLevel = OutlineLevel.Level4; } else if (heading.headingLevel == 5) { para.Format.OutlineLevel = OutlineLevel.Level5; } else if (heading.headingLevel == 6) { para.Format.OutlineLevel = OutlineLevel.Level6; } } } else if (tag is AutoDocumentation.Paragraph) { AutoDocumentation.Paragraph paragraph = tag as AutoDocumentation.Paragraph; if (paragraph.text.Contains("![Alt Text]")) { figureNumber++; } paragraph.text = paragraph.text.Replace("[FigureNumber]", figureNumber.ToString()); AddFormattedParagraphToSection(section, paragraph); } else if (tag is AutoDocumentation.GraphAndTable) { CreateGraphPDF(section, tag as AutoDocumentation.GraphAndTable); } else if (tag is GraphPage) { CreateGraphPage(section, tag as GraphPage); } else if (tag is AutoDocumentation.NewPage) { section.AddPageBreak(); } else if (tag is AutoDocumentation.Table) { CreateTable(section, tag as AutoDocumentation.Table); } else if (tag is Graph) { GraphPresenter graphPresenter = new GraphPresenter(); explorerPresenter.ApsimXFile.Links.Resolve(graphPresenter); GraphView graphView = new GraphView(); graphView.BackColor = OxyPlot.OxyColors.White; graphView.ForegroundColour = OxyPlot.OxyColors.Black; graphView.FontSize = 12; graphView.Width = 500; graphView.Height = 500; graphPresenter.Attach(tag, graphView, explorerPresenter); string pngFileName = graphPresenter.ExportToPNG(WorkingDirectory); section.AddImage(pngFileName); string caption = (tag as Graph).Caption; if (caption != null) { section.AddParagraph(caption); } graphPresenter.Detach(); graphView.MainWidget.Destroy(); } else if (tag is Map && (tag as Map).GetCoordinates().Count > 0) { MapPresenter mapPresenter = new MapPresenter(); MapView mapView = new MapView(null); mapPresenter.Attach(tag, mapView, explorerPresenter); string pngFileName = mapPresenter.ExportToPNG(WorkingDirectory); if (!String.IsNullOrEmpty(pngFileName)) { section.AddImage(pngFileName); } mapPresenter.Detach(); mapView.MainWidget.Destroy(); } else if (tag is AutoDocumentation.Image) { AutoDocumentation.Image imageTag = tag as AutoDocumentation.Image; if (imageTag.image.Width > 700) { imageTag.image = ImageUtilities.ResizeImage(imageTag.image, 700, 500); } string pngFileName = Path.Combine(WorkingDirectory, imageTag.name); imageTag.image.Save(pngFileName, System.Drawing.Imaging.ImageFormat.Png); section.AddImage(pngFileName); figureNumber++; } else if (tag is AutoDocumentation.ModelView) { AutoDocumentation.ModelView modelView = tag as AutoDocumentation.ModelView; ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(modelView.model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(modelView.model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; if (viewName != null && presenterName != null) { ViewBase owner = ViewBase.MasterView as ViewBase; if (viewName.ToString() == "UserInterface.Views.MapView") { owner = null; } ViewBase view = Assembly.GetExecutingAssembly().CreateInstance(viewName.ToString(), false, BindingFlags.Default, null, new object[] { owner }, null, null) as ViewBase; IPresenter presenter = Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter; if (view != null && presenter != null) { explorerPresenter.ApsimXFile.Links.Resolve(presenter); presenter.Attach(modelView.model, view, explorerPresenter); Gtk.Window popupWin = new Gtk.Window(Gtk.WindowType.Popup); popupWin.SetSizeRequest(800, 800); popupWin.Add(view.MainWidget); if (view is IMapView map) { map.HideZoomControls(); } popupWin.ShowAll(); while (Gtk.Application.EventsPending()) { Gtk.Application.RunIteration(); } // From MapView: // With WebKit, it appears we need to give it time to actually update the display // Really only a problem with the temporary windows used for generating documentation if (view is MapView) { var watch = new System.Diagnostics.Stopwatch(); watch.Start(); while (watch.ElapsedMilliseconds < 1000) { Gtk.Application.RunIteration(); } } string pngFileName = (presenter as IExportable).ExportToPNG(WorkingDirectory); section.AddImage(pngFileName); presenter.Detach(); view.MainWidget.Destroy(); popupWin.Destroy(); } } } } }
/// <summary>Writes PDF for specified auto-doc commands.</summary> /// <param name="section">The writer to write to.</param> /// <param name="tags">The autodoc tags.</param> /// <param name="workingDirectory">The working directory.</param> private void TagsToMigraDoc(Section section, List <AutoDocumentation.ITag> tags, string workingDirectory) { int figureNumber = 0; foreach (AutoDocumentation.ITag tag in tags) { if (tag is AutoDocumentation.Heading) { AutoDocumentation.Heading heading = tag as AutoDocumentation.Heading; if (heading.headingLevel > 0 && heading.headingLevel <= 6) { Paragraph para = section.AddParagraph(heading.text, "Heading" + heading.headingLevel); para.Format.KeepWithNext = true; if (heading.headingLevel == 1) { para.Format.OutlineLevel = OutlineLevel.Level1; } else if (heading.headingLevel == 2) { para.Format.OutlineLevel = OutlineLevel.Level2; } else if (heading.headingLevel == 3) { para.Format.OutlineLevel = OutlineLevel.Level3; } else if (heading.headingLevel == 4) { para.Format.OutlineLevel = OutlineLevel.Level4; } else if (heading.headingLevel == 5) { para.Format.OutlineLevel = OutlineLevel.Level5; } else if (heading.headingLevel == 6) { para.Format.OutlineLevel = OutlineLevel.Level6; } } } else if (tag is AutoDocumentation.Paragraph) { AutoDocumentation.Paragraph paragraph = tag as AutoDocumentation.Paragraph; if (paragraph.text.Contains("![Alt Text]")) { figureNumber++; } paragraph.text = paragraph.text.Replace("[FigureNumber]", figureNumber.ToString()); AddFormattedParagraphToSection(section, paragraph); } else if (tag is AutoDocumentation.GraphAndTable) { CreateGraphPDF(section, tag as AutoDocumentation.GraphAndTable, workingDirectory); } else if (tag is GraphPage) { CreateGraphPage(section, tag as GraphPage, workingDirectory); } else if (tag is AutoDocumentation.NewPage) { section.AddPageBreak(); } else if (tag is AutoDocumentation.Table) { CreateTable(section, tag as AutoDocumentation.Table, workingDirectory); } else if (tag is Graph) { GraphPresenter graphPresenter = new GraphPresenter(); explorerPresenter.ApsimXFile.Links.Resolve(graphPresenter); GraphView graphView = new GraphView(); graphView.BackColor = OxyPlot.OxyColors.White; graphView.ForegroundColour = OxyPlot.OxyColors.Black; graphView.FontSize = 12; graphView.Width = 500; graphView.Height = 500; graphPresenter.Attach(tag, graphView, explorerPresenter); string pngFileName = graphPresenter.ExportToPNG(workingDirectory); section.AddImage(pngFileName); string caption = (tag as Graph).Caption; if (caption != null) { section.AddParagraph(caption); } graphPresenter.Detach(); graphView.MainWidget.Destroy(); } else if (tag is Map && (tag as Map).GetCoordinates().Count > 0) { MapPresenter mapPresenter = new MapPresenter(); MapView mapView = new MapView(null); mapPresenter.Attach(tag, mapView, explorerPresenter); string pngFileName = mapPresenter.ExportToPNG(workingDirectory); if (!String.IsNullOrEmpty(pngFileName)) { section.AddImage(pngFileName); } mapPresenter.Detach(); mapView.MainWidget.Destroy(); } else if (tag is AutoDocumentation.Image) { AutoDocumentation.Image imageTag = tag as AutoDocumentation.Image; if (imageTag.image.Width > 700) { imageTag.image = ImageUtilities.ResizeImage(imageTag.image, 700, 500); } string pngFileName = Path.Combine(workingDirectory, imageTag.name); imageTag.image.Save(pngFileName, System.Drawing.Imaging.ImageFormat.Png); section.AddImage(pngFileName); figureNumber++; } else if (tag is AutoDocumentation.ModelView) { AutoDocumentation.ModelView modelView = tag as AutoDocumentation.ModelView; ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(modelView.model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(modelView.model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; if (viewName != null && presenterName != null) { ViewBase view = Assembly.GetExecutingAssembly().CreateInstance(viewName.ToString(), false, BindingFlags.Default, null, new object[] { ViewBase.MasterView }, null, null) as ViewBase; IPresenter presenter = Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter; if (view != null && presenter != null) { explorerPresenter.ApsimXFile.Links.Resolve(presenter); presenter.Attach(modelView.model, view, explorerPresenter); Gtk.Window popupWin = null; if (view is MapView) { popupWin = (view as MapView)?.GetPopupWin(); popupWin?.SetSizeRequest(515, 500); } if (popupWin == null) { popupWin = new Gtk.Window(Gtk.WindowType.Popup); popupWin.SetSizeRequest(800, 800); popupWin.Add(view.MainWidget); } popupWin.ShowAll(); while (Gtk.Application.EventsPending()) { Gtk.Application.RunIteration(); } string pngFileName = (presenter as IExportable).ExportToPNG(workingDirectory); section.AddImage(pngFileName); presenter.Detach(); view.MainWidget.Destroy(); popupWin.Destroy(); } } } } }
/// <summary> /// Attach the view /// </summary> /// <param name="model">The model</param> /// <param name="view">The view to attach</param> /// <param name="explorerPresenter">The explorer</param> public void Attach(object model, object view, ExplorerPresenter explorerPresenter) { this.explorerPresenter = explorerPresenter; this.view = view as ICLEMView; if (model != null) { //Messages try { if (model is ZoneCLEM) { object newView = new HTMLView(this.view as ViewBase); IPresenter ip = new MessagePresenter(); if (newView != null && ip != null) { this.view.AddTabView("Messages", newView); ip.Attach(model, newView, this.explorerPresenter); } } } catch (Exception err) { this.explorerPresenter.MainPresenter.ShowError(err); } //HTML Summary try { object newView = new HTMLView(this.view as ViewBase); summaryPresenter = new CLEMSummaryPresenter(); if (newView != null && summaryPresenter != null) { this.view.AddTabView("Summary", newView); summaryPresenter.Attach(model, newView, this.explorerPresenter); this.view.SummaryTabSelected += OnSummaryTabSelected; } } catch (Exception err) { this.explorerPresenter.MainPresenter.ShowError(err); } //Properties try { PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; string[] childDisplayInParentPresenters = { "PropertyTablePresenter", "PropertyTreeTablePresenter" }; bool isTablePresenter = childDisplayInParentPresenters.Contains(presenterName.ToString().Split('.').Last()); // check if it has properties if (isTablePresenter || (model.GetType().GetProperties( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ).Where(prop => prop.IsDefined(typeof(DescriptionAttribute), false)).Count() > 0)) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; object newView = Assembly.GetExecutingAssembly().CreateInstance(viewName.ToString(), false, BindingFlags.Default, null, new object[] { this.view }, null, null); IPresenter ip = Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter; if (newView != null && ip != null) { this.view.AddTabView("Properties", newView); ip.Attach(model, newView, this.explorerPresenter); } } } catch (Exception err) { this.explorerPresenter.MainPresenter.ShowError(err); } //Versions try { var versions = ReflectionUtilities.GetAttributes(model.GetType(), typeof(VersionAttribute), false); if (versions.Count() > 0) { object newView = new HTMLView(this.view as ViewBase); IPresenter ip = new VersionsPresenter(); if (newView != null && ip != null) { this.view.AddTabView("Version", newView); ip.Attach(model, newView, this.explorerPresenter); } } } catch (Exception err) { this.explorerPresenter.MainPresenter.ShowError(err); } } }
/// <summary>Writes PDF for specified auto-doc commands.</summary> /// <param name="section">The writer to write to.</param> /// <param name="tags">The autodoc tags.</param> private void TagsToMigraDoc(Section section, List <AutoDocumentation.ITag> tags) { int figureNumber = 0; foreach (AutoDocumentation.ITag tag in tags) { if (tag is AutoDocumentation.Heading) { AutoDocumentation.Heading heading = tag as AutoDocumentation.Heading; if (heading.headingLevel > 0 && heading.headingLevel <= 6) { Paragraph para = section.AddParagraph(heading.text, "Heading" + heading.headingLevel); para.Format.KeepWithNext = true; int posSpace = heading.text.IndexOf(' '); if (posSpace > 0) { para.AddBookmark(heading.text.Substring(posSpace + 1)); } if (heading.headingLevel == 1) { para.Format.OutlineLevel = OutlineLevel.Level1; } else if (heading.headingLevel == 2) { para.Format.OutlineLevel = OutlineLevel.Level2; } else if (heading.headingLevel == 3) { para.Format.OutlineLevel = OutlineLevel.Level3; } else if (heading.headingLevel == 4) { para.Format.OutlineLevel = OutlineLevel.Level4; } else if (heading.headingLevel == 5) { para.Format.OutlineLevel = OutlineLevel.Level5; } else if (heading.headingLevel == 6) { para.Format.OutlineLevel = OutlineLevel.Level6; } } } else if (tag is AutoDocumentation.Paragraph) { AutoDocumentation.Paragraph paragraph = tag as AutoDocumentation.Paragraph; if (paragraph.text.Contains("![Alt Text]")) { figureNumber++; } paragraph.text = paragraph.text.Replace("[FigureNumber]", figureNumber.ToString()); AddFormattedParagraphToSection(section, paragraph); } else if (tag is AutoDocumentation.GraphAndTable) { CreateGraphPDF(section, tag as AutoDocumentation.GraphAndTable); } else if (tag is GraphPage) { CreateGraphPage(section, tag as GraphPage); } else if (tag is AutoDocumentation.NewPage) { section.AddPageBreak(); if ((tag as AutoDocumentation.NewPage).Portrait) { section.PageSetup.Orientation = Orientation.Portrait; } else { section.PageSetup.Orientation = Orientation.Landscape; } } else if (tag is AutoDocumentation.PageSetup) { if ((tag as AutoDocumentation.PageSetup).Portrait) { section.PageSetup.Orientation = Orientation.Portrait; } else { section.PageSetup.Orientation = Orientation.Landscape; } } else if (tag is AutoDocumentation.Table) { CreateTable(section, tag as AutoDocumentation.Table); } else if (tag is Graph) { GraphPresenter graphPresenter = new GraphPresenter(); explorerPresenter.ApsimXFile.Links.Resolve(graphPresenter); GraphView graphView = new GraphView(); graphView.BackColor = OxyPlot.OxyColors.White; graphView.ForegroundColour = OxyPlot.OxyColors.Black; graphView.FontSize = 12; graphView.Width = 500; graphView.Height = 500; graphPresenter.Attach(tag, graphView, explorerPresenter); string pngFileName = graphPresenter.ExportToPNG(WorkingDirectory); section.AddResizeImage(pngFileName); string caption = (tag as Graph).Caption; if (caption != null) { section.AddParagraph(caption); } graphPresenter.Detach(); graphView.MainWidget.Cleanup(); } else if (tag is Map && (tag as Map).GetCoordinates().Count > 0) { #if NETFRAMEWORK MapPresenter mapPresenter = new MapPresenter(); MapView mapView = new MapView(null); mapPresenter.Attach(tag, mapView, explorerPresenter); var map = mapView.Export(); string pngFileName = Path.ChangeExtension(Path.GetTempFileName(), ".png"); if (map.Width > section.PageSetup.PageWidth) { map = ImageUtilities.ResizeImage(map, section.PageSetup.PageWidth, double.MaxValue); } map.Save(pngFileName); if (!String.IsNullOrEmpty(pngFileName)) { section.AddResizeImage(pngFileName); } mapPresenter.Detach(); mapView.MainWidget.Destroy(); #else section.AddParagraph("MapView has not been implemented in gtk3. Use the framework/gtk2 build instead."); #endif } else if (tag is AutoDocumentation.Image) { AutoDocumentation.Image imageTag = tag as AutoDocumentation.Image; string pngFileName = Path.Combine(WorkingDirectory, $"{imageTag.name}.png"); imageTag.image.Save(pngFileName, System.Drawing.Imaging.ImageFormat.Png); section.AddResizeImage(pngFileName); figureNumber++; } else if (tag is AutoDocumentation.ModelView) { try { AutoDocumentation.ModelView modelView = tag as AutoDocumentation.ModelView; ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(modelView.model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(modelView.model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; if (viewName != null && presenterName != null) { ViewBase owner = ViewBase.MasterView as ViewBase; if (viewName.ToString() == "UserInterface.Views.MapView") { owner = null; } ViewBase view = Assembly.GetExecutingAssembly().CreateInstance(viewName.ToString(), false, BindingFlags.Default, null, new object[] { owner }, null, null) as ViewBase; IPresenter presenter = Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as IPresenter; if (view != null && presenter != null) { explorerPresenter.ApsimXFile.Links.Resolve(presenter); presenter.Attach(modelView.model, view, explorerPresenter); #if NETFRAMEWORK Gtk.Window popupWin = new Gtk.Window(Gtk.WindowType.Popup); #endif try { #if NETFRAMEWORK popupWin.SetSizeRequest(700, 700); popupWin.Add(view.MainWidget); #endif if (view is MapView map) { map.HideZoomControls(); } #if NETFRAMEWORK popupWin.ShowAll(); #endif while (Gtk.Application.EventsPending()) { Gtk.Application.RunIteration(); } // From MapView: // With WebKit, it appears we need to give it time to actually update the display // Really only a problem with the temporary windows used for generating documentation string pngFileName; if (view is MapView mapView) { var img = mapView.Export(); pngFileName = Path.ChangeExtension(Path.GetTempFileName(), ".png"); if (section.PageSetup.PageWidth > 0 && img.Width > section.PageSetup.PageWidth) { img = ImageUtilities.ResizeImage(img, section.PageSetup.PageWidth, double.MaxValue); } img.Save(pngFileName); } else { pngFileName = (presenter as IExportable).ExportToPNG(WorkingDirectory); } section.AddResizeImage(pngFileName); presenter.Detach(); view.MainWidget.Cleanup(); } finally { #if NETFRAMEWORK popupWin.Cleanup(); #endif while (GLib.MainContext.Iteration()) { ; } } } } } catch (Exception err) { Console.WriteLine(err); } } } }
public void Attach(object model, object view, ExplorerPresenter explorerPresenter) { this.ApsimXFile = model as Simulations; this.explorerPresenter = explorerPresenter; this.view = view as IModelDetailsWrapperView; if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; this.view.ModelTypeText = model.GetType().ToString().Substring("Models.".Length); DescriptionAttribute descAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descAtt != null) { this.view.ModelDescriptionText = descAtt.ToString(); } else { this.view.ModelDescriptionText = ""; } // Set CLEM specific colours for title if (this.view.ModelTypeText.Contains(".Resources.")) { this.view.ModelTypeTextColour = "996633"; } else if (this.view.ModelTypeText.Contains(".Activities.LabourRequirement")) { this.view.ModelTypeTextColour = "cc33cc"; } else if (this.view.ModelTypeText.Contains(".Activities.")) { this.view.ModelTypeTextColour = "009999"; } else if (this.view.ModelTypeText.Contains(".Groupings.")) { this.view.ModelTypeTextColour = "cc33cc"; } else if (this.view.ModelTypeText.Contains(".File")) { this.view.ModelTypeTextColour = "008000"; } else if (this.view.ModelTypeText.Contains(".Market")) { this.view.ModelTypeTextColour = "1785FF"; } HelpUriAttribute helpAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(HelpUriAttribute), false) as HelpUriAttribute; this.view.ModelHelpURL = ""; if (helpAtt != null) { this.view.ModelHelpURL = helpAtt.ToString(); } var vs = ReflectionUtilities.GetAttributes(model.GetType(), typeof(VersionAttribute), false); if (vs.Count() > 0) { VersionAttribute verAtt = vs.ToList <Attribute>().Cast <VersionAttribute>().OrderBy(a => a.ToString()).Last() as VersionAttribute; if (verAtt != null) { string v = "Version "; v += verAtt.ToString(); this.view.ModelVersionText = v; } else { this.view.ModelVersionText = ""; } } if (viewName != null && presenterName != null) { // if model CLEMModel if (model.GetType().IsSubclassOf(typeof(CLEMModel)) | model is ZoneCLEM | model is Market | model is RandomNumberGenerator) { // all CLEMModels will handle this presenter ShowInLowerPanel(model, "UserInterface.Views.CLEMView", "UserInterface.Presenters.CLEMPresenter"); } else if (typeof(ICLEMPresenter).IsAssignableFrom(Assembly.GetExecutingAssembly().GetType(presenterName.ToString()))) { // apply this if the presenter has ICLEMPresenter interface and is ready to create presenters ShowInLowerPanel(model, "UserInterface.Views.CLEMView", "UserInterface.Presenters.CLEMPresenter"); } else { ShowInLowerPanel(model, viewName.ToString(), presenterName.ToString()); } } } }
public void Attach(object model, object view, ExplorerPresenter explorerPresenter) { this.ApsimXFile = model as Simulations; this.ExplorerPresenter = explorerPresenter; this.View = view as IModelDetailsWrapperView; if (model != null) { ViewNameAttribute viewName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; PresenterNameAttribute presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; View.ModelTypeText = model.GetType().ToString().Substring("Models.".Length); DescriptionAttribute descAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(DescriptionAttribute), false) as DescriptionAttribute; if (descAtt != null) { View.ModelDescriptionText = descAtt.ToString(); } else { View.ModelDescriptionText = ""; } // Set CLEM specific colours for title if (View.ModelTypeText.Contains(".Resources.")) { View.ModelTypeTextColour = "996633"; } else if (View.ModelTypeText.Contains(".Activities.LabourRequirement")) { View.ModelTypeTextColour = "cc33cc"; } else if (View.ModelTypeText.Contains(".Activities.")) { View.ModelTypeTextColour = "009999"; } else if (View.ModelTypeText.Contains(".Groupings.")) { View.ModelTypeTextColour = "cc33cc"; } else if (View.ModelTypeText.Contains(".File")) { View.ModelTypeTextColour = "008000"; } HelpUriAttribute helpAtt = ReflectionUtilities.GetAttribute(model.GetType(), typeof(HelpUriAttribute), false) as HelpUriAttribute; View.ModelHelpURL = ""; if (helpAtt != null) { View.ModelHelpURL = helpAtt.ToString(); } var vs = ReflectionUtilities.GetAttributes(model.GetType(), typeof(VersionAttribute), false); if (vs.Count() > 0) { VersionAttribute verAtt = vs.ToList <Attribute>().Last() as VersionAttribute; if (verAtt != null) { string v = "Version "; v += verAtt.ToString(); View.ModelVersionText = v; } else { View.ModelVersionText = ""; } } if (viewName != null && presenterName != null) { // if model CLEMModel if (model.GetType().IsSubclassOf(typeof(CLEMModel)) || model is ZoneCLEM) { ShowInLowerPanel(model, "UserInterface.Views.CLEMView", "UserInterface.Presenters.CLEMPresenter"); } else { ShowInLowerPanel(model, viewName.ToString(), presenterName.ToString()); } } } }
/// <summary> /// Attach the view /// </summary> /// <param name="model">The model</param> /// <param name="view">The view to attach</param> /// <param name="explorerPresenter">The explorer</param> public virtual void Attach(object model, object view, ExplorerPresenter explorerPresenter) { this.Model = model as IModel; this.ClemModel = model as ICLEMUI; this.ExplorerPresenter = explorerPresenter; this.View = view as ICLEMView; PresenterNameAttribute presenterName = null; if (model != null) { //Messages try { if (model is ZoneCLEM) { object newView = new MarkdownView(this.View as ViewBase); IPresenter messagePresenter = new MessagePresenter(); if (newView != null && messagePresenter != null) { this.View.AddTabView("Messages", newView); messagePresenter.Attach(model, newView, this.ExplorerPresenter); PresenterList.Add("Messages", messagePresenter); } } } catch (Exception err) { this.ExplorerPresenter.MainPresenter.ShowError(err); } //Properties try { // user can set view to state it must be multiview so do not override value presenterName = ReflectionUtilities.GetAttribute(model.GetType(), typeof(PresenterNameAttribute), false) as PresenterNameAttribute; string propPresenterName = presenterName.ToString(); ViewNameAttribute viewAttribute = ReflectionUtilities.GetAttribute(model.GetType(), typeof(ViewNameAttribute), false) as ViewNameAttribute; string viewName = viewAttribute.ToString(); if (propPresenterName == "UserInterface.Presenters.PropertyPresenter" | !propPresenterName.Contains("Property")) { propPresenterName = "UserInterface.Presenters.PropertyPresenter"; if (viewName != "UserInterface.Views.PropertyMultiModelView") { viewName = "UserInterface.Views.PropertyView"; } } var props = model.GetType().GetProperties( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ); // check if any category attribtes other than "*" fould and if so make this a PropertyCategoryPresenter bool categoryAttributeFound = props.Where(prop => prop.IsDefined(typeof(CategoryAttribute), false) && (prop.GetCustomAttribute(typeof(CategoryAttribute)) as CategoryAttribute).Category != "*").Any(); if (categoryAttributeFound) { propPresenterName = "UserInterface.Presenters.PropertyCategorisedPresenter"; viewName = "UserInterface.Views.PropertyCategorisedView"; } // check if it has properties if ((viewName.Contains("PropertyMultiModelView") | propPresenterName.Contains("MultiModel")) || (props.Where(prop => prop.IsDefined(typeof(DescriptionAttribute), false)).Count() > 0)) { object newView = Assembly.GetExecutingAssembly().CreateInstance(viewName, false, BindingFlags.Default, null, new object[] { this.View }, null, null); IPresenter propertyPresenter = Assembly.GetExecutingAssembly().CreateInstance(propPresenterName) as IPresenter; if (newView != null && propertyPresenter != null) { this.View.AddTabView("Properties", newView); propertyPresenter.Attach(model, newView, this.ExplorerPresenter); PresenterList.Add("Properties", propertyPresenter); } } } catch (Exception err) { this.ExplorerPresenter.MainPresenter.ShowError(err); } // if presenter is ICLEMPresenter then add the extra presenters if specified if (presenterName != null && typeof(ICLEMPresenter).IsAssignableFrom(Assembly.GetExecutingAssembly().GetType(presenterName.ToString()))) { (Assembly.GetExecutingAssembly().CreateInstance(presenterName.ToString()) as ICLEMPresenter).AttachExtraPresenters(this); } //HTML Summary try { object newView = new MarkdownView(this.View as ViewBase); IPresenter summaryPresenter = new CLEMSummaryPresenter(); if (newView != null && summaryPresenter != null) { this.View.AddTabView("Summary", newView); summaryPresenter.Attach(model, newView, this.ExplorerPresenter); PresenterList.Add("Summary", summaryPresenter); } } catch (Exception err) { this.ExplorerPresenter.MainPresenter.ShowError(err); } //Versions try { var versions = ReflectionUtilities.GetAttributes(model.GetType(), typeof(VersionAttribute), false); if (versions.Count() > 0) { object newView = new MarkdownView(this.View as ViewBase); IPresenter versionPresenter = new VersionsPresenter(); if (newView != null && versionPresenter != null) { this.View.AddTabView("Version", newView); versionPresenter.Attach(model, newView, this.ExplorerPresenter); PresenterList.Add("Version", versionPresenter); } } } catch (Exception err) { this.ExplorerPresenter.MainPresenter.ShowError(err); } this.View.TabSelected += OnTabSelected; if (ClemModel != null) { this.View.SelectTabView(ClemModel.SelectedTab); if (ClemModel.SelectedTab == "Summary") { PresenterList.TryGetValue("Summary", out IPresenter selectedPresenter); (selectedPresenter as CLEMSummaryPresenter).Refresh(); } } if (ClemModel != null && ClemModel.SelectedTab is null && PresenterList.Count > 0) { if (PresenterList.FirstOrDefault().Value is IRefreshPresenter) { (PresenterList.FirstOrDefault().Value as IRefreshPresenter).Refresh(); } } } }