Commit eb61e403 authored by Francesco Carraro's avatar Francesco Carraro
Browse files

fixing alignment flyout when changing unit of measure...

parent c1d485f0
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
using INAF.Libraries.NetStandard.ScienceModels;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using System.Threading.Tasks;
using static INAF.Libraries.NetStandard.ScienceModels.Enums.Enums;

namespace INAF.Apps.Uwp.SLabDataManager.Models
@@ -66,12 +67,12 @@ namespace INAF.Apps.Uwp.SLabDataManager.Models
        }
        #endregion

        public void switchToMeasureUnit(WavelengthMeasureUnit newMeasureUnit)
        public async Task switchToMeasureUnitAsync(WavelengthMeasureUnit newMeasureUnit)
        {
            SeparatorWavelength0.switchToMeasureUnit(newMeasureUnit);
            SeparatorWavelength1.switchToMeasureUnit(newMeasureUnit);
            SeparatorWavelength2.switchToMeasureUnit(newMeasureUnit);
            SeparatorWavelength3.switchToMeasureUnit(newMeasureUnit);
            await SeparatorWavelength0.switchToMeasureUnitAsync(newMeasureUnit);
            await SeparatorWavelength1.switchToMeasureUnitAsync(newMeasureUnit);
            await SeparatorWavelength2.switchToMeasureUnitAsync(newMeasureUnit);
            await SeparatorWavelength3.switchToMeasureUnitAsync(newMeasureUnit);
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -109,11 +109,11 @@ namespace INAF.Apps.Uwp.SLabDataManager.Models
                SpectrumChartOptions.PropertyChanged += SpectrumChartOptions_PropertyChanged;
        }

        private void SpectrumChartOptions_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        private async void SpectrumChartOptions_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName.Equals(nameof(SpectrumChartOptions.SelectedWavelengthMeasureUnit)))
            {
                AlignmentConfig.switchToMeasureUnit(SpectrumChartOptions.SelectedWavelengthMeasureUnit);
                await AlignmentConfig.switchToMeasureUnitAsync(SpectrumChartOptions.SelectedWavelengthMeasureUnit);
            }
        }
        #endregion
+30 −5
Original line number Diff line number Diff line
using INAF.Apps.Uwp.Charts;
using INAF.Apps.Uwp.SLabDataManager.Helpers.ConfigHelpers;
using INAF.Apps.Uwp.SLabDataManager.Helpers.ConfigHelpers;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Libraries.Uwp.Logging;
using INAF.Libraries.Uwp.Settings;
@@ -16,7 +15,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
        public ChartViewModel(IServiceProvider serviceProvider,
                             SettingsHelper settingsHelper,
                             StorageItemsAccessHelper storageItemsAccessHelper,
                             AlignmentConfigModel alignmentConfig,
                             Logger logger) : base(serviceProvider,
                                                   settingsHelper,
                                                   storageItemsAccessHelper,
@@ -27,11 +25,22 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
        public void OnNavigatedTo(NavigationEventArgs e)
        {
            initAsync();
            /* add listener for being warned of changed unit of measure by visualization flyout */
            WorkingItems.SpectrumChartOptions.PropertyChanged += SpectrumChartOptions_PropertyChanged;
        }

        public void OnNavigatingFrom(NavigatingCancelEventArgs e)
        private void SpectrumChartOptions_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            /* warn UI about change */
            IsUnitOfMeasureChanged = true;
            /*reset to false the private property to enable the next change */
            isUnitOfMeasureChanged = false;
        }

        public void OnNavigatingFrom(NavigatingCancelEventArgs e)
        {
            /* remove listener for being warned of changed unit of measure by visualization flyout */
            WorkingItems.SpectrumChartOptions.PropertyChanged -= SpectrumChartOptions_PropertyChanged;
        }
        #endregion

@@ -42,10 +51,25 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            get { return isLoading; }
            set { SetProperty(ref isLoading, value); }
        }

        private bool isReady;
        public bool IsReady
        {
            get { return isReady; }
            set { SetProperty(ref isReady, value); }
        }

        private bool isUnitOfMeasureChanged;
        public bool IsUnitOfMeasureChanged
        {
            get { return isUnitOfMeasureChanged; }
            set { SetProperty(ref isUnitOfMeasureChanged, value); }
        }
        #endregion

        private async void initAsync()
        {
            IsReady = false;
            IsLoading = true;

            await Task.Run(async () =>
@@ -57,9 +81,10 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels

            /* switch unit of measure for alignment options, if needed */
            if (WorkingItems.SpectrumChartOptions.SelectedWavelengthMeasureUnit != Libraries.NetStandard.ScienceModels.Enums.Enums.WavelengthMeasureUnit.Nanometers)
                WorkingItems.AlignmentConfig.switchToMeasureUnit(WorkingItems.SpectrumChartOptions.SelectedWavelengthMeasureUnit);
                WorkingItems.AlignmentConfig.switchToMeasureUnitAsync(WorkingItems.SpectrumChartOptions.SelectedWavelengthMeasureUnit);

            IsLoading = false;
            IsReady = true;
        }
    }
}
+37 −32
Original line number Diff line number Diff line
@@ -136,6 +136,11 @@
        <Flyout x:Name="AlignmentOptionsFlyout"
                x:Key="AlignmentOptionsFlyout"
                Placement="BottomEdgeAlignedRight">
            <Flyout.FlyoutPresenterStyle>
                <Style TargetType="FlyoutPresenter">
                    <Setter Property="Width" Value="500" />
                </Style>
            </Flyout.FlyoutPresenterStyle>
            <Grid x:Name="gridAlignmentOptionsFlyout"
                  Width="500">
                <Grid.RowDefinitions>
@@ -145,33 +150,33 @@
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <!-- WAVELENGTH 0 -->
                <userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.Value, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.MinValue, Mode=TwoWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.MaxValue, Mode=TwoWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.StepValue, Mode=TwoWay}"
                                                             Grid.Row="0" />
                <!--<userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.CurrentValue, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.MinValue, Mode=OneWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.MaxValue, Mode=OneWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.StepValue, Mode=OneWay}"
                                                             Grid.Row="0" />-->
                <!-- WAVELENGTH 1 -->
                <userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.Value, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.MinValue, Mode=TwoWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.MaxValue, Mode=TwoWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.StepValue, Mode=TwoWay}"
                                                             Grid.Row="1" />
                <!--<userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.CurrentValue, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.MinValue, Mode=OneWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.MaxValue, Mode=OneWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.StepValue, Mode=OneWay}"
                                                             Grid.Row="1" />-->
                <!-- WAVELENGTH 2 -->
                <userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.Value, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.MinValue, Mode=TwoWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.MaxValue, Mode=TwoWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.StepValue, Mode=TwoWay}"
                                                             Grid.Row="2" />
                <!--<userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.CurrentValue, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.MinValue, Mode=OneWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.MaxValue, Mode=OneWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.StepValue, Mode=OneWay}"
                                                             Grid.Row="2" />-->
                <!-- WAVELENGTH 3 -->
                <userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.Value, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.MinValue, Mode=TwoWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.MaxValue, Mode=TwoWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.StepValue, Mode=TwoWay}"
                                                             Grid.Row="3" />
                <!--<userControls:SeparatorWavelengthUserControl SliderLabel="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.Label, Mode=OneWay}"
                                                             CurrentValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.CurrentValue, Mode=TwoWay}"
                                                             MinValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.MinValue, Mode=OneWay}"
                                                             MaxValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.MaxValue, Mode=OneWay}"
                                                             StepValue="{Binding Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.StepValue, Mode=OneWay}"
                                                             Grid.Row="3" />-->
            </Grid>
        </Flyout>
    </Page.Resources>
@@ -330,23 +335,23 @@
                <!-- ANNOTATIONS -->
                <telerikChart:RadCartesianChart.Annotations>
                    <telerikChart:CartesianGridLineAnnotation Axis="{Binding ElementName=spectrumChart, Path=HorizontalAxis}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.Value, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.Value, Mode=OneWay}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.CurrentValue, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength0.CurrentValue, Mode=OneWay}"
                                                              Stroke="LightGreen"
                                                              StrokeThickness="2"/>
                    <telerikChart:CartesianGridLineAnnotation Axis="{Binding ElementName=spectrumChart, Path=HorizontalAxis}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.Value, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.Value, Mode=OneWay}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.CurrentValue, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength1.CurrentValue, Mode=OneWay}"
                                                              Stroke="LightGreen"
                                                              StrokeThickness="2"/>
                    <telerikChart:CartesianGridLineAnnotation Axis="{Binding ElementName=spectrumChart, Path=HorizontalAxis}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.Value, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.Value, Mode=OneWay}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.CurrentValue, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength2.CurrentValue, Mode=OneWay}"
                                                              Stroke="LightGreen"
                                                              StrokeThickness="2"/>
                    <telerikChart:CartesianGridLineAnnotation Axis="{Binding ElementName=spectrumChart, Path=HorizontalAxis}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.Value, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.Value, Mode=OneWay}"
                                                              Value="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.CurrentValue, Mode=OneWay}"
                                                              Label="{Binding ElementName=Self, Path=DataContext.WorkingItems.AlignmentConfig.SeparatorWavelength3.CurrentValue, Mode=OneWay}"
                                                              Stroke="LightGreen"
                                                              StrokeThickness="2"/>
                </telerikChart:RadCartesianChart.Annotations>
+64 −0
Original line number Diff line number Diff line

using INAF.Apps.Uwp.SLabDataManager.ViewModels;
using INAF.Apps.Uwp.SLabDataManager.Views.UserControls;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using Microsoft.Toolkit.Mvvm.DependencyInjection;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Navigation;

namespace INAF.Apps.Uwp.SLabDataManager.Views
@@ -20,11 +24,71 @@ namespace INAF.Apps.Uwp.SLabDataManager.Views
        {
            //ViewModel.setPage(this);
            ViewModel.OnNavigatedTo(e);
            ViewModel.PropertyChanged += ViewModel_PropertyChanged;
        }

        private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                case nameof(ViewModel.IsReady):
                    if (ViewModel.IsReady)
                        addSeparatorWavelengthsUserControls();
                    break;
                case nameof(ViewModel.IsUnitOfMeasureChanged):
                    if (ViewModel.IsUnitOfMeasureChanged)
                    {
                        removeSeparatorWavelengthsUserControls();
                        addSeparatorWavelengthsUserControls();
                    }
                    break;
                default:
                    break;
            }
        }

        protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
        {
            ViewModel.OnNavigatingFrom(e);
            ViewModel.PropertyChanged -= ViewModel_PropertyChanged;
        }

        #region alignment options flyout
        private void addSeparatorWavelengthsUserControls()
        {
            addSeparatorWavelengthUserControl(AlignmentOptionsFlyout, ViewModel.WorkingItems.AlignmentConfig.SeparatorWavelength0, 0);
            addSeparatorWavelengthUserControl(AlignmentOptionsFlyout, ViewModel.WorkingItems.AlignmentConfig.SeparatorWavelength1, 1);
            addSeparatorWavelengthUserControl(AlignmentOptionsFlyout, ViewModel.WorkingItems.AlignmentConfig.SeparatorWavelength2, 2);
            addSeparatorWavelengthUserControl(AlignmentOptionsFlyout, ViewModel.WorkingItems.AlignmentConfig.SeparatorWavelength3, 3);
        }

        private void addSeparatorWavelengthUserControl(Flyout flyout, WavelengthModel wavelengthModel, int rowIndex)
        {
            try
            {
                Grid grid = flyout.Content as Grid;

                var swuc = new SeparatorWavelengthUserControl();
                swuc.SetBinding(SeparatorWavelengthUserControl.SliderLabelProperty, new Binding() { Path = new PropertyPath("Label"), Source = wavelengthModel, Mode = BindingMode.OneWay });
                swuc.SetBinding(SeparatorWavelengthUserControl.MinValueProperty, new Binding() { Path = new PropertyPath("MinValue"), Source = wavelengthModel, Mode = BindingMode.OneWay });
                swuc.SetBinding(SeparatorWavelengthUserControl.CurrentValueProperty, new Binding() { Path = new PropertyPath("CurrentValue"), Source = wavelengthModel, Mode = BindingMode.TwoWay });
                swuc.SetBinding(SeparatorWavelengthUserControl.MaxValueProperty, new Binding() { Path = new PropertyPath("MaxValue"), Source = wavelengthModel, Mode = BindingMode.OneWay });
                swuc.SetBinding(SeparatorWavelengthUserControl.StepValueProperty, new Binding() { Path = new PropertyPath("StepValue"), Source = wavelengthModel, Mode = BindingMode.OneWay });

                grid.Children.Add(swuc);
                Grid.SetRow(swuc, rowIndex);
            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Debug.WriteLine($"ex: {ex.Message}");
            }
        }

        private void removeSeparatorWavelengthsUserControls()
        {
            Grid grid = AlignmentOptionsFlyout.Content as Grid;
            grid.Children.Clear();
        }
        #endregion
    }
}
Loading