Commit 56f516d9 authored by Francesco Carraro's avatar Francesco Carraro
Browse files

fixing right-usercontrols management...

parent 08f77649
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ namespace INAF.Apps.Uwp.SLabDataManager
                .AddSingleton<FitMethodsHelper>()
                .AddSingleton<Logger>(logger)
                .AddSingleton<RecentFilesHelper>()
                .AddSingleton<UserControlsHelper>()
                .AddSingleton<RemoteOperationsRepository>()
                .AddSingleton<SecondaryWindowHelper>()
                .AddSingleton<SegmentFitModelsFactory>()
+71 −0
Original line number Diff line number Diff line
using INAF.Apps.Uwp.Charts;
using INAF.Apps.Uwp.SLabDataManager.Charts.Containers;
using INAF.Apps.Uwp.SLabDataManager.Helpers;
using INAF.Apps.Uwp.SLabDataManager.Helpers.UI;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Apps.Uwp.SLabDataManager.ViewModels;
using INAF.Libraries.NetStandard.Extensions;
@@ -10,6 +11,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using Telerik.Charting;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Media;
using static INAF.Libraries.NetStandard.SLabCommonModels.Enums.Enums;
@@ -125,6 +127,29 @@ namespace INAF.Apps.Uwp.SLabDataManager.Converters
        }
    }

    public sealed class IsUserControlAvailableConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            try
            {
                string userControlName = (string)parameter;

                var rightPanelsTabsHelper = Ioc.Default.GetRequiredService<UserControlsHelper>();
                return rightPanelsTabsHelper.containsUserControl(userControlName);
            }
            catch (Exception)
            {
                return false;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }

    public sealed class HalfWidthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
@@ -207,6 +232,52 @@ namespace INAF.Apps.Uwp.SLabDataManager.Converters
        }
    }

    public sealed class TabViewItemIsSelectedConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            try
            {
                string userControlName = (string)parameter;

                var rightPanelsTabsHelper = Ioc.Default.GetRequiredService<UserControlsHelper>();
                return rightPanelsTabsHelper.RequiredUserControlName.Equals(userControlName);
            }
            catch (Exception)
            {
                return false;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }

    public sealed class TabViewItemVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            try
            {
                string userControlName = (string)parameter;

                var rightPanelsTabsHelper = Ioc.Default.GetRequiredService<UserControlsHelper>();
                return rightPanelsTabsHelper.containsUserControl(userControlName) ? Visibility.Visible : Visibility.Collapsed;
            }
            catch (Exception)
            {
                return Visibility.Collapsed;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }

    public sealed class ThemeBrushConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
+107 −0
Original line number Diff line number Diff line
using Microsoft.Toolkit.Mvvm.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using Windows.UI.Xaml.Controls;

namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
{
    public class UserControlsHelper : ObservableObject
    {
        public UserControlsHelper()
        {
            IsAvailable = false;
            UserControls = new List<UserControl>();
        }

        #region properties
        /* this property is used in x:Load attribute to remove usercontrols after they have been closed */
        private bool isAnyUserControlAddedOrRemoved;
        public bool IsAnyUserControlAddedOrRemoved
        {
            get { return isAnyUserControlAddedOrRemoved; }
            set { SetProperty(ref isAnyUserControlAddedOrRemoved, value); }
        }

        private bool isAvailable;
        public bool IsAvailable
        {
            get { return isAvailable; }
            private set { SetProperty(ref isAvailable, value); }
        }

        public string RequiredUserControlName { get; set; }

        public List<UserControl> UserControls { get; private set; }

        public int UserControlsNum { get { return UserControls.Count; } }

        #endregion

        #region methods
        public void addUserControl(UserControl userControl)
        {
            if (containsUserControl(userControl.Name))
                return;

            /* add usercontrol to collection */
            UserControls.Add(userControl);

            /* bring to front  */
            bringToFrontUserControl(userControl.Name);

            /* check whether the TabViewItems are visible or not */
            checkIsAvailable();

            /* set visibility of each tabViewItem */
            raiseIsAnyUserControlAddedOrRemoved();
        }

        private void checkIsAvailable()
        {
            if (UserControls.Count > 1)
                IsAvailable = true;
            else
                IsAvailable = false;
        }

        public bool containsUserControl(string name)
        {
            return UserControls.Any(x => x.Name.Equals(name));
        }

        public void bringToFrontUserControl(string name)
        {
            foreach (UserControl userControl in UserControls)
            {
                if (userControl.Name.Equals(name))
                    userControl.SetValue(Canvas.ZIndexProperty, 10);
                else
                    userControl.SetValue(Canvas.ZIndexProperty, 1);
            }
        }

        private void raiseIsAnyUserControlAddedOrRemoved()
        {
            IsAnyUserControlAddedOrRemoved = true;
            isAnyUserControlAddedOrRemoved = false;
        }

        public void removeUserControl(UserControl userControl)
        {
            if (!UserControls.Any(x => x.Name.Equals(userControl.Name)))
                return;

            var foundUserControl = UserControls.FirstOrDefault(x => x.Name.Equals(userControl.Name));
            int index = UserControls.IndexOf(foundUserControl);
            if (index > -1)
                UserControls.RemoveAt(index);

            /* check whether the TabViewItems are visible or not */
            checkIsAvailable();

            /* set visibility of each tabViewItem */
            raiseIsAnyUserControlAddedOrRemoved();
        }
        #endregion
    }
}
+3 −0
Original line number Diff line number Diff line
using INAF.Apps.Uwp.SLabDataManager.Charts.Containers;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Apps.Uwp.SLabDataManager.Models.Spectrum;
using INAF.Apps.Uwp.SLabDataManager.ViewModels;
using INAF.Libraries.NetStandard.ScienceModels.Extensions;
using Microsoft.Toolkit.Mvvm.Input;
using System;
using static INAF.Apps.Uwp.SLabDataManager.Constants.Enums;

namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
+1 −0
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@
    <Compile Include="Helpers\UI\Chart\FitMethodsHelper.cs" />
    <Compile Include="Helpers\UI\Chart\SeriesHelper.cs" />
    <Compile Include="Helpers\UI\GridLines.cs" />
    <Compile Include="Helpers\UI\UserControlsHelper.cs" />
    <Compile Include="Helpers\UI\ZoomHelper.cs" />
    <Compile Include="Helpers\XmlReaders\ConfigReader.cs" />
    <Compile Include="Helpers\CustomPaletteHelper.cs" />
Loading