| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | 
							- using System;
 
- using System.ComponentModel;
 
- using System.IO;
 
- using System.Linq;
 
- using System.Reflection;
 
- using System.Windows;
 
- using System.Windows.Controls;
 
- using System.Windows.Media.Imaging;
 
- using Comal.Classes;
 
- using InABox.WPF;
 
- using Microsoft.Xaml.Behaviors;
 
- using PRSDesktop;
 
- using Syncfusion.SfSkinManager;
 
- using Syncfusion.UI.Xaml.Grid.Utility;
 
- using Syncfusion.UI.Xaml.Spreadsheet;
 
- using Syncfusion.UI.Xaml.Spreadsheet.Commands;
 
- using Syncfusion.Windows.Tools.Controls;
 
- using Syncfusion.XlsIO;
 
- using Syncfusion.XlsIO.Implementation;
 
- namespace InABox.DynamicGrid.Spreadsheet
 
- {
 
-     
 
-     public class ZoomSliderBehavior : Behavior<StackPanel>
 
-     {
 
-         private Slider zoomSlider;
 
-         private Button zoomDecreaseButton;
 
-         private Button zoomIncreaseButton;
 
-         protected override void OnAttached()
 
-         {
 
-             zoomSlider = this.AssociatedObject.Children[1] as Slider;
 
-             zoomDecreaseButton = this.AssociatedObject.Children[0] as Button;
 
-             zoomIncreaseButton = this.AssociatedObject.Children[2] as Button;
 
-             zoomSlider.ValueChanged += zoomSlider_ValueChanged;
 
-             zoomDecreaseButton.Click += zoomDecreaseButton_Click;
 
-             zoomIncreaseButton.Click += zoomIncreaseButton_Click;
 
-         }
 
-         void zoomIncreaseButton_Click(object sender, RoutedEventArgs e)
 
-         {
 
-             var value = (int)((zoomSlider.Value + 10) / 10);
 
-             zoomSlider.Value = value * 10;
 
-         }
 
-         void zoomDecreaseButton_Click(object sender, RoutedEventArgs e)
 
-         {
 
-             var value = (int)((zoomSlider.Value - 10) / 10);
 
-             zoomSlider.Value = value * 10;
 
-         }
 
-         void zoomSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
 
-         {
 
-             var spreadsheet = this.AssociatedObject.DataContext as SfSpreadsheet;
 
-             if (spreadsheet.ActiveSheet != null && e.NewValue != spreadsheet.ActiveSheet.Zoom)
 
-                 spreadsheet.SetZoomFactor(spreadsheet.ActiveSheet.Name, (int) e.NewValue);
 
-         }
 
-         protected override void OnDetaching()
 
-         {
 
-             zoomSlider.ValueChanged -= zoomSlider_ValueChanged;
 
-             zoomDecreaseButton.Click -= zoomDecreaseButton_Click;
 
-             zoomIncreaseButton.Click -= zoomIncreaseButton_Click;
 
-         }
 
-     }
 
-     public class SpreadsheetSaveArgs
 
-     {
 
-         public ISpreadsheet Spreadsheet { get;  }
 
-         public byte[] Data { get; }
 
-         public bool SaveAs { get; }
 
-         
 
-         public SpreadsheetSaveArgs(ISpreadsheet spreadsheet, byte[] data, bool saveas)
 
-         {
 
-             Spreadsheet = spreadsheet;
 
-             Data = data;
 
-             SaveAs = saveas;
 
-         }
 
-     }
 
-     public delegate void SpreadsheetSave(object sender, SpreadsheetSaveArgs args);
 
-     
 
-     
 
-     public partial class SpreadsheetWindow : RibbonWindow
 
-     {
 
-         private ISpreadsheet _sheet = null;
 
-         public event SpreadsheetSave OnSave;
 
-         
 
-         public SpreadsheetWindow(ISpreadsheet sheet)
 
-         {
 
-             _sheet = sheet;
 
-             InitializeComponent();
 
-             SfSkinManager.SetTheme(this, new Theme() { ThemeName = "MaterialLight" });
 
-             
 
-             if (sheet.Data?.Any() == true)
 
-             {
 
-                 using (var ms = new MemoryStream(sheet.Data))
 
-                 {
 
-                     spreadsheet.Open(ms);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 using (var ms = new MemoryStream())
 
-                 {
 
-                     ExcelEngine excelEngine = new ExcelEngine();
 
-                     IApplication application = excelEngine.Excel;
 
-                     application.DefaultVersion = ExcelVersion.Xlsx;
 
-                     IWorkbook workbook = application.Workbooks.Create(0);
 
-                     IWorksheet worksheet = workbook.Worksheets.Create("Sheet 1");
 
-                     workbook.SaveAs(ms);
 
-                     ms.Position = 0;
 
-                     spreadsheet.Open(ms);
 
-                 }
 
-             }
 
-             
 
-             SetTitle();
 
-             
 
-             spreadsheet.Commands.CommandExecuting += (o, args) =>
 
-             {
 
-                 
 
-                 if (args.CommandName == nameof(spreadsheet.Commands.FileSave))
 
-                 {
 
-                     args.Cancel = true;
 
-                     DoSave(false);
 
-                     SetTitle();
 
-                     return;
 
-                 }
 
-                 
 
-                 if (args.CommandName == nameof(spreadsheet.Commands.FileSaveAs))
 
-                 {
 
-                     args.Cancel = true;
 
-                     DoSave(true);
 
-                     SetTitle();
 
-                     return;
 
-                 }
 
-                 
 
-                 if (args.CommandName == nameof(spreadsheet.Commands.FileClose))
 
-                 {
 
-                     args.Cancel = true;
 
-                     
 
-                     if (!CheckChanged()) 
 
-                         return;
 
-                     Dispatcher.Invoke(() => DialogResult = true);
 
-                 }
 
-                 
 
-             };
 
-         }
 
-         private void SetTitle()
 
-         {
 
-             Title = (Guid.Equals(_sheet.ID, Guid.Empty))
 
-                 ? "New Spreadsheet"
 
-                 : $"{_sheet.Code} : {_sheet.Description}";
 
-         }
 
-         private bool IsSpreadsheetChanged()
 
-         {
 
-             var workbook = spreadsheet.Workbook as WorkbookImpl;
 
-             var value = typeof(WorkbookImpl).GetProperty("IsCellModified", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static).GetValue(workbook);
 
-             return bool.Equals(value,true);     
 
-             //if (spreadsheet.HistoryManager.UndoStack.Any())
 
-            
 
-         }
 
-         private bool CheckChanged()
 
-         {
 
-             if (IsSpreadsheetChanged())
 
-             {
 
-                 var result = MessageBox.Show("This spreadsheet has unsaved changes!\n\nDo you wish to save these before closing?",
 
-                     "Unsaved changes", MessageBoxButton.YesNoCancel);
 
-                 if (result == MessageBoxResult.Cancel)
 
-                     return false;
 
-                 if (result == MessageBoxResult.Yes)
 
-                     DoSave(false);
 
-             }
 
-             return true;
 
-         }
 
-         private void DoSave(bool saveas)
 
-         {
 
-             using (var ms = new MemoryStream())
 
-             {
 
-                 spreadsheet.SaveAs(ms);
 
-                 OnSave?.Invoke(this, new SpreadsheetSaveArgs(_sheet, ms.GetBuffer(), saveas));
 
-             }
 
-         }
 
-         protected override void OnClosing(CancelEventArgs e)
 
-         {
 
-             if (!CheckChanged())
 
-             {
 
-                 e.Cancel = true;
 
-                 return;
 
-             }
 
-             
 
-             if (this.spreadsheet != null)
 
-             {
 
-                 this.spreadsheet.Dispose();
 
-                 this.spreadsheet = null;
 
-             }
 
-             if(this.ribbon != null)
 
-             {
 
-                 this.ribbon.Dispose();
 
-                 this.ribbon = null;
 
-             }
 
-             base.OnClosing(e);
 
-         }
 
-     }
 
- }
 
 
  |