Prechádzať zdrojové kódy

Tweak to Email Utils, added generic edit function for base objects, added event for customising editor buttons.

Kenric Nugteren 1 rok pred
rodič
commit
2c0635ac57

+ 4 - 0
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -349,6 +349,8 @@ namespace InABox.DynamicGrid
         public delegate void EditorLoaded(IDynamicEditorForm editor, T[] items);
         public delegate void EditorLoaded(IDynamicEditorForm editor, T[] items);
         public event EditorLoaded OnEditorLoaded;
         public event EditorLoaded OnEditorLoaded;
 
 
+        public event OnLoadEditorButtons<T> OnLoadEditorButtons;
+
         #endregion
         #endregion
 
 
         private DynamicGridCellStyleConverter<System.Windows.Media.Brush?> CellBackgroundConverter;
         private DynamicGridCellStyleConverter<System.Windows.Media.Brush?> CellBackgroundConverter;
@@ -2575,6 +2577,8 @@ namespace InABox.DynamicGrid
                     { UseShellExecute = true });
                     { UseShellExecute = true });
                 }
                 }
             );
             );
+
+            OnLoadEditorButtons?.Invoke(item, buttons);
         }
         }
 
 
         protected virtual void BeforeLoad(IDynamicEditorForm form, T[] items)
         protected virtual void BeforeLoad(IDynamicEditorForm form, T[] items)

+ 2 - 0
inabox.wpf/DynamicGrid/DynamicGridCommon.cs

@@ -56,6 +56,8 @@ namespace InABox.DynamicGrid
     /// <param name="editor"></param>
     /// <param name="editor"></param>
     public delegate void OnCustomiseEditor<T>(IDynamicEditorForm sender, T[]? items, DynamicGridColumn column, BaseEditor editor);
     public delegate void OnCustomiseEditor<T>(IDynamicEditorForm sender, T[]? items, DynamicGridColumn column, BaseEditor editor);
 
 
+    public delegate void OnLoadEditorButtons<T>(T item, DynamicEditorButtons buttons);
+
     public delegate void OnReconfigureEditors(DynamicEditorGrid sender);
     public delegate void OnReconfigureEditors(DynamicEditorGrid sender);
 
 
     public class AfterEditorValueChangedArgs
     public class AfterEditorValueChangedArgs

+ 35 - 0
inabox.wpf/DynamicGrid/DynamicGridUtils.cs

@@ -518,6 +518,41 @@ public static class DynamicGridUtils
 
 
     #endregion
     #endregion
 
 
+    #region Editing BaseObject
+
+    /// <summary>
+    /// Edit (using <see cref="DynamicItemsListGrid{T}"/>) a list of <see cref="BaseObject"/>s. Use for objects not saved in the database.
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="items"></param>
+    /// <param name="pageDataHandler"></param>
+    /// <param name="preloadPages"></param>
+    /// <returns></returns>
+    public static bool Edit<T>(T[] items, Func<Type, CoreTable?>? pageDataHandler = null, bool preloadPages = false, Action<DynamicGrid<T>>? customiseGrid = null)
+        where T : BaseObject, new()
+    {
+        var grid = new DynamicItemsListGrid<T>();
+        customiseGrid?.Invoke(grid);
+        return grid.EditItems(items, PageDataHandler: pageDataHandler, PreloadPages: preloadPages);
+    }
+    /// <summary>
+    /// Edit (using <see cref="DynamicItemsListGrid{T}"/>) a <see cref="BaseObject"/>s. Use for objects not saved in the database.
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="items"></param>
+    /// <param name="pageDataHandler"></param>
+    /// <param name="preloadPages"></param>
+    /// <returns></returns>
+    public static bool Edit<T>(T item, Func<Type, CoreTable?>? pageDataHandler = null, bool preloadPages = false, Action<DynamicGrid<T>>? customiseGrid = null)
+        where T : BaseObject, new()
+    {
+        var grid = new DynamicItemsListGrid<T>();
+        customiseGrid?.Invoke(grid);
+        return grid.EditItems(new T[] { item }, PageDataHandler: pageDataHandler, PreloadPages: preloadPages);
+    }
+
+    #endregion
+
     #region Drag + Drop
     #region Drag + Drop
 
 
     public static string DragFormat => typeof(DynamicGridDragFormat).FullName ?? "";
     public static string DragFormat => typeof(DynamicGridDragFormat).FullName ?? "";

+ 21 - 9
inabox.wpf/Utils/EmailUtils.cs

@@ -17,6 +17,7 @@ using InABox.WPF;
 using MessageBox = System.Windows.Forms.MessageBox;
 using MessageBox = System.Windows.Forms.MessageBox;
 using TextBox = System.Windows.Controls.TextBox;
 using TextBox = System.Windows.Controls.TextBox;
 using InABox.Wpf.Reports;
 using InABox.Wpf.Reports;
+using System.Diagnostics.CodeAnalysis;
 
 
 namespace InABox.Wpf;
 namespace InABox.Wpf;
 
 
@@ -131,19 +132,30 @@ public static class EmailUtils
         };
         };
     }
     }
 
 
-    private static string GetAddressFromUser()
+    public static string GetAddressFromUser()
     {
     {
-        CoreTable table = new Client<User>().Query(new Filter<User>(x => x.ID).IsEqualTo(ClientFactory.UserGuid)
-            , new Columns<User>(x => x.EmailAddress));
-        User user = table.Rows.FirstOrDefault().ToObject<User>();
-
-        if (!string.IsNullOrWhiteSpace(user.EmailAddress))
-            return user.EmailAddress;
+        if(TryGetAddressFromUser(out var address))
+        {
+            return address;
+        }
         else
         else
+        {
             MessageWindow.ShowMessage("Current User Email Address is blank - please fill in (Human Resources -> User Accounts -> Choose your User -> Email Settings -> Email Address", "Error");
             MessageWindow.ShowMessage("Current User Email Address is blank - please fill in (Human Resources -> User Accounts -> Choose your User -> Email Settings -> Email Address", "Error");
+            return "";
+        }
+    }
+    public static string? GetAddressFromUserOrNull()
+    {
+        TryGetAddressFromUser(out var address);
+        return address;
+    }
+    public static bool TryGetAddressFromUser([NotNullWhen(true)] out string? address)
+    {
+        var table = Client.Query(new Filter<User>(x => x.ID).IsEqualTo(ClientFactory.UserGuid), new Columns<User>(x => x.EmailAddress));
+        var user = table.ToObjects<User>().FirstOrDefault();
 
 
-        return "";
-
+        address = user?.EmailAddress.NotWhiteSpaceOr(null);
+        return address is not null;
     }
     }
 
 
     public static MailMessage AddAttachment(this MailMessage message, string attachmentname, byte[] attachmentdata)
     public static MailMessage AddAttachment(this MailMessage message, string attachmentname, byte[] attachmentdata)