This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
using DTS.Common.Base;
using DTS.Common.Events;
using DTS.Common.Interface;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
using C1.WPF.Pdf;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Media;
using DTS.Common.Utilities.Logging;
using Prism.Events;
using Prism.Ioc;
// ReSharper disable CheckNamespace
namespace DTS.Viewer
{
/// <summary>
/// Interaction logic for ViewerMainViewGrid.xaml
/// </summary>
public partial class ViewerMainViewGrid : IViewerMainViewGrid
{
public ViewerMainViewGrid()
{
InitializeComponent();
Loaded += ViewerMainViewGrid_Loaded;
}
private IEventAggregator _eventAggregator { get; set; }
private void SetFocus()
{
chartOptTab.IsSelected = true;
chartOptTab.Focusable = true;
chartOptTab.Focus();
}
//FB 14797 Subscribe to event after the page loaded to make sure eventAggregator is available
private void ViewerMainViewGrid_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
_eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
_eventAggregator?.GetEvent<GraphLoadedCountNotification>().Subscribe(OnGraphLoadedCountNotification);
}
//FB 14797 Set the focus to first tab (chartOptTab) after the graph is fully loaded (3 sec)
private void OnGraphLoadedCountNotification(GraphLoadedCountNotificationArg arg)
{
if (null != DataContext && (IBaseViewModel)DataContext != arg.ParentVM) return;
Task.Run(() =>
{
Thread.Sleep(TimeSpan.FromSeconds(3));
Dispatcher.BeginInvoke((System.Action)SetFocus);
});
}
/// <summary>
/// Returns > 0 if successful, < 0 if failure, or 0 if the MainChart is not ready yet
/// </summary>
/// <param name="directory"></param>
/// <param name="pdfFileName"></param>
/// <returns></returns>
public int SaveToPDF(string directory, string pdfFileName)
{
try
{
//FB 29493 Error message in log before success message
if (MainShell.DesiredSize.Height == 0 || MainShell.DesiredSize.Width == 0) return 0;
if (string.IsNullOrEmpty(directory) || string.IsNullOrEmpty(pdfFileName) || !pdfFileName.EndsWith(".pdf")) return -1;
var bounds = VisualTreeHelper.GetDescendantBounds(MainShell);
// desired resolution:
double dpiX = 300, dpiY = 300;
var bmp = new RenderTargetBitmap((int)(bounds.Width * dpiX / 96.0), (int)(bounds.Height * dpiY / 96.0), dpiX, dpiY, PixelFormats.Pbgra32);
bmp.Render(MainShell);
var wBmp = new WriteableBitmap(bmp);
var pdf = new C1PdfDocument
{
Landscape = true,
PageSize = new Size(MainShell.ActualWidth, MainShell.ActualHeight)
};
pdf.DrawImage(wBmp, new Rect(0, 0, MainShell.ActualWidth, MainShell.ActualHeight));
pdf.Save(Path.Combine(directory, pdfFileName));
DTS.Common.Utils.PNGImageUtil.SaveImage(MainShell, System.IO.Path.Combine(directory, pdfFileName.Replace(".pdf", ".png")));
return 1;
}
catch (Exception ex)
{
APILogger.LogException(ex);
}
return -1;
}
}
}