Sfoglia il codice sorgente

Added ButtonsVisible and TabStripVisible to EmbeddedDynamicEditorForm

Frank van den Bos 2 anni fa
parent
commit
692135a8d4

+ 12 - 1
inabox.wpf/DynamicGrid/DynamicEditorGrid.xaml.cs

@@ -41,6 +41,16 @@ namespace InABox.DynamicGrid
         private Type? LayoutType;
         private Type? LayoutType;
         private DynamicEditorGridLayout? Layout;
         private DynamicEditorGridLayout? Layout;
 
 
+        public bool TabStripVisible
+        {
+            get { return Layout != null ? Layout.TabStripVisible : false; }
+            set
+            {
+                if (Layout != null) 
+                    Layout.TabStripVisible = value;
+            }
+        }
+
         public DynamicEditorGrid()
         public DynamicEditorGrid()
         {
         {
             InitializeComponent();
             InitializeComponent();
@@ -410,9 +420,10 @@ namespace InABox.DynamicGrid
                         var entityValue = EditorGrid.GetPropertyValue(column);
                         var entityValue = EditorGrid.GetPropertyValue(column);
                         if (!Equals(editorValue, entityValue))
                         if (!Equals(editorValue, entityValue))
                         {
                         {
+                            bool bLoaded = editor.Loaded;
                             editor.Loaded = false;
                             editor.Loaded = false;
                             editor.SetValue(column, entityValue);
                             editor.SetValue(column, entityValue);
-                            editor.Loaded = true;
+                            editor.Loaded = bLoaded;
                         }
                         }
                     }
                     }
                 }
                 }

+ 19 - 5
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -2455,6 +2455,7 @@ namespace InABox.DynamicGrid
         {    
         {    
                 DoAdd();
                 DoAdd();
         }
         }
+        
         public virtual DynamicEditorPages LoadEditorPages(T item)
         public virtual DynamicEditorPages LoadEditorPages(T item)
         {
         {
             DynamicEditorPages pages = new DynamicEditorPages();
             DynamicEditorPages pages = new DynamicEditorPages();
@@ -2485,16 +2486,18 @@ namespace InABox.DynamicGrid
         protected virtual void CustomiseEditorForm(IDynamicEditorForm form)
         protected virtual void CustomiseEditorForm(IDynamicEditorForm form)
         {
         {
         }
         }
+        
+        public DynamicEditorPages Pages { get; private set; }
 
 
         public override void InitialiseEditorForm(IDynamicEditorForm editor, T[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false)
         public override void InitialiseEditorForm(IDynamicEditorForm editor, T[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false)
         {
         {
-            var pages = items.Length == 1 ? LoadEditorPages(items.First()) : new DynamicEditorPages();
+            Pages = items.Length == 1 ? LoadEditorPages(items.First()) : new DynamicEditorPages();
 
 
             var buttons = new DynamicEditorButtons();
             var buttons = new DynamicEditorButtons();
             if (items.Length == 1)
             if (items.Length == 1)
                 LoadEditorButtons(items.First(), buttons);
                 LoadEditorButtons(items.First(), buttons);
 
 
-            editor.Setup(items.Any() ? items.First().GetType() : typeof(T), pages, buttons, pageDataHandler, preloadPages);
+            editor.Setup(items.Any() ? items.First().GetType() : typeof(T), Pages, buttons, pageDataHandler, preloadPages);
 
 
             editor.OnCustomiseColumns += (sender, columns) =>
             editor.OnCustomiseColumns += (sender, columns) =>
             {
             {
@@ -2539,8 +2542,8 @@ namespace InABox.DynamicGrid
                 try
                 try
                 {
                 {
                     using var Wait = new WaitCursor();
                     using var Wait = new WaitCursor();
-
-                    OnBeforeSave?.Invoke(editor, items);
+                    DoBeforeSave(editor, items);
+                    
 
 
                     if (items.Length == 1)
                     if (items.Length == 1)
                         editor.UnloadEditorPages(false);
                         editor.UnloadEditorPages(false);
@@ -2548,8 +2551,9 @@ namespace InABox.DynamicGrid
                         SaveItem(item);
                         SaveItem(item);
                     if (items.Length == 1)
                     if (items.Length == 1)
                         editor.UnloadEditorPages(true);
                         editor.UnloadEditorPages(true);
+                    
+                    DoAfterSave(editor, items);
 
 
-                    OnAfterSave?.Invoke(editor, items);
                 }
                 }
                 catch (Exception err)
                 catch (Exception err)
                 {
                 {
@@ -2564,6 +2568,16 @@ namespace InABox.DynamicGrid
             AfterLoad(editor, items);
             AfterLoad(editor, items);
         }
         }
 
 
+        protected virtual void DoAfterSave(IDynamicEditorForm editor, T[] items)
+        {
+            OnAfterSave?.Invoke(editor, items);
+        }
+
+        protected virtual void DoBeforeSave(IDynamicEditorForm editor, T[] items)
+        {
+            OnBeforeSave?.Invoke(editor, items);
+        }
+
         public override bool EditItems(T[] items, Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false)
         public override bool EditItems(T[] items, Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false)
         {
         {
             DynamicEditorForm editor;
             DynamicEditorForm editor;

+ 15 - 0
inabox.wpf/DynamicGrid/DynamicTabControl.cs

@@ -107,6 +107,21 @@ namespace InABox.DynamicGrid
         {
         {
             return new DynamicTabItem();
             return new DynamicTabItem();
         }
         }
+
+        public static readonly DependencyProperty TabStripVisibleProperty =
+            DependencyProperty.Register(nameof(TabStripVisible), typeof(bool), typeof(DynamicTabControl), new PropertyMetadata(true));
+
+        public bool TabStripVisible
+        {
+            get => (bool)GetValue(TabStripVisibleProperty);
+            set
+            {
+                SetValue(TabStripVisibleProperty, value);
+                Style s = new Style();
+                s.Setters.Add(new Setter(UIElement.VisibilityProperty, value ? Visibility.Visible : Visibility.Collapsed));
+                ItemContainerStyle = s;
+            }
+        }
     }
     }
     
     
     public class DynamicTabItem : TabItem
     public class DynamicTabItem : TabItem

+ 1 - 1
inabox.wpf/DynamicGrid/EmbeddedDynamicEditorForm.xaml

@@ -16,7 +16,7 @@
         </Grid.ColumnDefinitions>
         </Grid.ColumnDefinitions>
         <Grid.RowDefinitions>
         <Grid.RowDefinitions>
             <RowDefinition Height="*" />
             <RowDefinition Height="*" />
-            <RowDefinition Height="40" />
+            <RowDefinition Height="40" x:Name="ButtonRow"/>
         </Grid.RowDefinitions>
         </Grid.RowDefinitions>
 
 
         <local:DynamicEditorGrid x:Name="Editor"
         <local:DynamicEditorGrid x:Name="Editor"

+ 57 - 0
inabox.wpf/DynamicGrid/EmbeddedDynamicEditorForm.xaml.cs

@@ -45,6 +45,55 @@ namespace InABox.DynamicGrid
         }
         }
 
 
         public bool ReadOnly { get; set; }
         public bool ReadOnly { get; set; }
+        
+        public static readonly DependencyProperty ButtonsVisibleProperty =
+            DependencyProperty.Register(
+                nameof(ButtonsVisible), 
+                typeof(bool), 
+                typeof(EmbeddedDynamicEditorForm), 
+                new UIPropertyMetadata(true)
+            );
+        
+        public bool ButtonsVisible
+        {
+            get => (bool)GetValue(ButtonsVisibleProperty);
+            set
+            {
+                SetValue(ButtonsVisibleProperty, value);
+                UpdateButtonsRowVisibility();
+            }
+        }
+        
+        private void UpdateButtonsRowVisibility()
+        {
+            ButtonRow.Height = ButtonsVisible
+                ? new GridLength(40, GridUnitType.Pixel)
+                : new GridLength(0, GridUnitType.Pixel);
+        }
+        
+        public static readonly DependencyProperty TabsVisibleProperty =
+            DependencyProperty.Register(
+                nameof(TabsVisible), 
+                typeof(bool), 
+                typeof(EmbeddedDynamicEditorForm), 
+                new UIPropertyMetadata(true)
+            );
+        
+        public bool TabsVisible
+        {
+            get => (bool)GetValue(TabsVisibleProperty);
+            set
+            {
+                SetValue(TabsVisibleProperty, value);
+                UpdateTabsVisibility();
+            }
+        }
+
+
+        private void UpdateTabsVisibility()
+        {
+            Editor.TabStripVisible = TabsVisible;
+        }
 
 
         #region Events
         #region Events
 
 
@@ -82,6 +131,14 @@ namespace InABox.DynamicGrid
         {
         {
             InitializeComponent();
             InitializeComponent();
         }
         }
+
+        public override void OnApplyTemplate()
+        {
+            base.OnApplyTemplate();
+            UpdateButtonsRowVisibility();
+            UpdateTabsVisibility();
+        }
+
         public EmbeddedDynamicEditorForm(Type type, DynamicEditorPages? pages = null, DynamicEditorButtons? buttons = null,
         public EmbeddedDynamicEditorForm(Type type, DynamicEditorPages? pages = null, DynamicEditorButtons? buttons = null,
             Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false): this()
             Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false): this()
         {
         {

+ 8 - 0
inabox.wpf/DynamicGrid/Layouts/DefaultDynamicEditorGridLayout.cs

@@ -10,6 +10,12 @@ namespace InABox.DynamicGrid
 {
 {
     public class DefaultDynamicEditorGridLayout : DynamicEditorGridLayout
     public class DefaultDynamicEditorGridLayout : DynamicEditorGridLayout
     {
     {
+        public override bool TabStripVisible
+        {
+            get { return Details.TabStripVisible; }
+            set { Details.TabStripVisible = value; }
+        }
+
         private DynamicTabControl Details;
         private DynamicTabControl Details;
 
 
         public DefaultDynamicEditorGridLayout()
         public DefaultDynamicEditorGridLayout()
@@ -34,6 +40,8 @@ namespace InABox.DynamicGrid
                 tab.Content = page;
                 tab.Content = page;
                 Details.Items.Add(tab);
                 Details.Items.Add(tab);
             }
             }
+
+            Details.SelectedItem = Details.Items.Count > 0 ? Details.Items[0] : null;
         }
         }
 
 
         private bool bChanging;
         private bool bChanging;

+ 2 - 0
inabox.wpf/DynamicGrid/Layouts/DynamicEditorGridLayout.cs

@@ -11,6 +11,8 @@ namespace InABox.DynamicGrid
     public abstract class DynamicEditorGridLayout : ContentControl
     public abstract class DynamicEditorGridLayout : ContentControl
     {
     {
 
 
+        public abstract bool TabStripVisible { get; set; }
+        
         public delegate void SelectPageHandler(IDynamicEditorPage page);
         public delegate void SelectPageHandler(IDynamicEditorPage page);
 
 
         public event SelectPageHandler? OnSelectPage;
         public event SelectPageHandler? OnSelectPage;

+ 9 - 0
inabox.wpf/DynamicGrid/Layouts/VerticalDynamicEditorGridLayout.xaml.cs

@@ -20,6 +20,13 @@ namespace InABox.DynamicGrid
     /// </summary>
     /// </summary>
     public partial class VerticalDynamicEditorGridLayout : DynamicEditorGridLayout
     public partial class VerticalDynamicEditorGridLayout : DynamicEditorGridLayout
     {
     {
+        
+        public override bool TabStripVisible
+        {
+            get { return Editors.TabStripVisible; }
+            set { Editors.TabStripVisible = value; }
+        }
+        
         public VerticalDynamicEditorGridLayout()
         public VerticalDynamicEditorGridLayout()
         {
         {
             InitializeComponent();
             InitializeComponent();
@@ -44,6 +51,8 @@ namespace InABox.DynamicGrid
                     OtherPages.Items.Add(tab);
                     OtherPages.Items.Add(tab);
                 }
                 }
             }
             }
+
+            Editors.SelectedIndex = 0;
         }
         }
 
 
         private bool bChanging;
         private bool bChanging;

+ 54 - 11
inabox.wpf/Themes/Generic.xaml

@@ -477,17 +477,60 @@
                             <Setter TargetName="AddButton" Property="Visibility" Value="Collapsed" />
                             <Setter TargetName="AddButton" Property="Visibility" Value="Collapsed" />
                         </Trigger>
                         </Trigger>
 
 
-                        <Trigger Property="TabStripPlacement" Value="{x:Static Dock.Top}">
-                            <Setter TargetName="Panel" Property="Grid.Row" Value="0" />
-                            <Setter TargetName="Content" Property="BorderThickness" Value="0,0.75,0,0" />
-                            <Setter TargetName="Content" Property="Padding" Value="0,2,0,0" />
-                        </Trigger>
-
-                        <Trigger Property="TabStripPlacement" Value="{x:Static Dock.Bottom}">
-                            <Setter TargetName="Panel" Property="Grid.Row" Value="2" />
-                            <Setter TargetName="Content" Property="BorderThickness" Value="0,0,0,0.75" />
-                            <Setter TargetName="Content" Property="Padding" Value="0,0,0,3" />
-                        </Trigger>
+                        <!-- <Trigger Property="TabStripPlacement" Value="{x:Static Dock.Top}"> -->
+                        <!--     <Setter TargetName="Panel" Property="Grid.Row" Value="0" /> -->
+                        <!--     <Setter TargetName="Content" Property="BorderThickness" Value="0,0.75,0,0" /> -->
+                        <!--     <Setter TargetName="Content" Property="Padding" Value="0,2,0,0" /> -->
+                        <!-- </Trigger> -->
+                        
+                        <MultiTrigger>
+                            <MultiTrigger.Conditions>
+                                <Condition Property="TabStripPlacement" Value="{x:Static Dock.Top}" />
+                                <Condition Property="TabStripVisible" Value="False"/>
+                            </MultiTrigger.Conditions>
+                            <MultiTrigger.Setters>
+                                <Setter TargetName="Panel" Property="Grid.Row" Value="0" />
+                                <Setter TargetName="Content" Property="BorderThickness" Value="0,0,0,0" />
+                                <Setter TargetName="Content" Property="Padding" Value="0,0,0,0" />                        
+                            </MultiTrigger.Setters>
+                        </MultiTrigger>
+                        
+                        <MultiTrigger>
+                            <MultiTrigger.Conditions>
+                                <Condition Property="TabStripPlacement" Value="{x:Static Dock.Top}" />
+                                <Condition Property="TabStripVisible" Value="True"/>
+                            </MultiTrigger.Conditions>
+                            <MultiTrigger.Setters>
+                                <Setter TargetName="Panel" Property="Grid.Row" Value="0" />
+                                <Setter TargetName="Content" Property="BorderThickness" Value="0,0.75,0,0" />
+                                <Setter TargetName="Content" Property="Padding" Value="0,2,0,0" />                        
+                            </MultiTrigger.Setters>
+                        </MultiTrigger>
+                        
+                        <MultiTrigger>
+                            <MultiTrigger.Conditions>
+                                <Condition Property="TabStripPlacement" Value="{x:Static Dock.Bottom}" />
+                                <Condition Property="TabStripVisible" Value="False"/>
+                            </MultiTrigger.Conditions>
+                            <MultiTrigger.Setters>
+                                <Setter TargetName="Panel" Property="Grid.Row" Value="2" />
+                                <Setter TargetName="Content" Property="BorderThickness" Value="0,0,0,0" />
+                                <Setter TargetName="Content" Property="Padding" Value="0,0,0,0" />                           
+                            </MultiTrigger.Setters>
+                        </MultiTrigger>
+
+                        <MultiTrigger>
+                            <MultiTrigger.Conditions>
+                                <Condition Property="TabStripPlacement" Value="{x:Static Dock.Bottom}" />
+                                <Condition Property="TabStripVisible" Value="True"/>
+                            </MultiTrigger.Conditions>
+                            <MultiTrigger.Setters>
+                                <Setter TargetName="Panel" Property="Grid.Row" Value="2" />
+                                <Setter TargetName="Content" Property="BorderThickness" Value="0,0,0,0.75" />
+                                <Setter TargetName="Content" Property="Padding" Value="0,0,0,3" />                           
+                            </MultiTrigger.Setters>
+                        </MultiTrigger>
+                        
 
 
 
 
                     </ControlTemplate.Triggers>
                     </ControlTemplate.Triggers>