Browse Source

Fixed SQLiteProvider issues with InList(enums)
Improved Grid and Tree header context menu handling

frogsoftware 4 days ago
parent
commit
2eda801450

+ 6 - 0
inabox.database.sqlite/SQLiteProvider.cs

@@ -1708,6 +1708,12 @@ public class SQLiteProvider : IProvider
         if (IsNull(o) || type is null)
             return DBNull.Value;
 
+        if (type.IsEnum && o.GetType().UnderlyingSystemType != type)
+        {
+            if (Enum.TryParse(type, o.ToString(), out object? result))
+                return result.ToString();
+        }
+        
         if (type == typeof(DateTime) && o.GetType() == typeof(string))
             o = DateTime.Parse(o.ToString() ?? "");
 

+ 1 - 1
inabox.wpf/DynamicGrid/Grids/BaseDynamicGrid.cs

@@ -469,7 +469,7 @@ public abstract class BaseDynamicGrid : ContentControl, IDynamicGridUIComponentP
             Dispatcher.BeginInvoke(() => { Refresh(true, true); });
     }
 
-    void IDynamicGridUIComponentParent.OpenColumnMenu(DynamicColumnBase column)
+    void IDynamicGridUIComponentParent.OpenColumnMenu(DynamicColumnBase column, bool isheader)
     {
         if(column is DynamicMenuColumn menuColumn)
         {

+ 1 - 2
inabox.wpf/DynamicGrid/UIComponent/DynamicGridGridUIComponent.cs

@@ -404,11 +404,10 @@ public class DynamicGridGridUIComponent : IDynamicGridUIComponent, IDynamicGridG
         var visualContainer = DataGrid.GetVisualContainer();
         var rowcolumnindex = visualContainer.PointToCellRowColumnIndex(e.GetPosition(visualContainer));
         var columnindex = DataGrid.ResolveToGridVisibleColumnIndex(rowcolumnindex.ColumnIndex);
-
         var column = GetColumn(columnindex);
         if(column is not null)
         {
-            Parent.OpenColumnMenu(column);
+            Parent.OpenColumnMenu(column, DataGrid.ResolveToRecordIndex(rowcolumnindex.RowIndex) == -1);
         }
     }
 

+ 15 - 2
inabox.wpf/DynamicGrid/UIComponent/DynamicGridTreeUIComponent.cs

@@ -477,6 +477,15 @@ public class DynamicGridTreeUIComponent<T, TKey> : IDynamicGridUIComponent<T>, I
         Parent.HandleKey(e);
     }
 
+    private void HeaderCell_RightMouseButtonEvent(object sender, MouseButtonEventArgs e)
+    {
+        if (sender is not TreeGridHeaderCell header) return;
+        var index = _tree.Columns.IndexOf(header.Column);
+        if (GetColumn(index) is not DynamicColumnBase column)
+            return;
+        Parent.OpenColumnMenu(column,true);
+    }
+
     private void HeaderCell_LeftMouseButtonEvent(object sender, MouseButtonEventArgs e)
     {
         if (sender is not TreeGridHeaderCell header) return;
@@ -498,7 +507,7 @@ public class DynamicGridTreeUIComponent<T, TKey> : IDynamicGridUIComponent<T>, I
 
         if (GetColumn(e.RowColumnIndex.ColumnIndex) is not DynamicColumnBase column)
             return;
-
+        
         if(e.ChangedButton == MouseButton.Left)
         {
             if(column is DynamicActionColumn dac)
@@ -514,7 +523,7 @@ public class DynamicGridTreeUIComponent<T, TKey> : IDynamicGridUIComponent<T>, I
             }
             else
             {
-                Parent.OpenColumnMenu(column);
+                Parent.OpenColumnMenu(column,false);
             }
         }
     }
@@ -1268,6 +1277,7 @@ public class DynamicGridTreeUIComponent<T, TKey> : IDynamicGridUIComponent<T>, I
 
             var headstyle = GetHeaderCellStyle(column);
             headstyle.Setters.Add(new EventSetter(Control.MouseLeftButtonUpEvent, new MouseButtonEventHandler(HeaderCell_LeftMouseButtonEvent)));
+            headstyle.Setters.Add(new EventSetter(Control.MouseRightButtonUpEvent, new MouseButtonEventHandler(HeaderCell_RightMouseButtonEvent)));
             newcol.HeaderStyle = headstyle;
 
             _tree.Columns.Add(newcol);
@@ -1294,6 +1304,7 @@ public class DynamicGridTreeUIComponent<T, TKey> : IDynamicGridUIComponent<T>, I
 
             var headstyle = GetHeaderCellStyle(column);
             headstyle.Setters.Add(new EventSetter(Control.MouseLeftButtonUpEvent, new MouseButtonEventHandler(HeaderCell_LeftMouseButtonEvent)));
+            headstyle.Setters.Add(new EventSetter(Control.MouseRightButtonUpEvent, new MouseButtonEventHandler(HeaderCell_RightMouseButtonEvent)));
             newcol.HeaderStyle = headstyle;
 
             _tree.Columns.Add(newcol);
@@ -1319,6 +1330,8 @@ public class DynamicGridTreeUIComponent<T, TKey> : IDynamicGridUIComponent<T>, I
 
             var headstyle = GetHeaderCellStyle(column);
             headstyle.Setters.Add(new EventSetter(Control.MouseLeftButtonUpEvent, new MouseButtonEventHandler(HeaderCell_LeftMouseButtonEvent)));
+            headstyle.Setters.Add(new EventSetter(Control.MouseRightButtonUpEvent, new MouseButtonEventHandler(HeaderCell_RightMouseButtonEvent)));
+
             newcol.HeaderStyle = headstyle;
 
             _tree.Columns.Add(newcol);

+ 1 - 1
inabox.wpf/DynamicGrid/UIComponent/IDynamicGridUIComponent.cs

@@ -33,7 +33,7 @@ public interface IDynamicGridUIComponentParent : IBaseDynamicGrid
 
     void DoubleClickCell(CoreRow? row, DynamicColumnBase? column);
     void ExecuteActionColumn(DynamicActionColumn column, CoreRow[]? rows);
-    void OpenColumnMenu(DynamicColumnBase column);
+    void OpenColumnMenu(DynamicColumnBase column, bool isheader);
 
     void UpdateRecordCount(int count);
     public bool IsDirectEditMode();