Commit 0c1702ab authored by Francesco Carraro's avatar Francesco Carraro
Browse files

working on zoom

parent de747bce
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ namespace INAF.Apps.Uwp.SLabDataManager
                .AddTransient<SpectrumProcessingHelper>()
                .AddTransient<SpectrumReader>()
                .AddTransient<SplineFitHelper>()
                .AddTransient<ZoomHelper>()
                .AddTransient<XmlHelper>()
                /* view models */
                .AddSingleton<ChartViewModel>()
+19 −36
Original line number Diff line number Diff line
@@ -41,13 +41,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
        }

        #region properties
        private bool areBoundariesChanged;
        public bool AreBoundariesChanged
        {
            get { return areBoundariesChanged; }
            set { SetProperty(ref areBoundariesChanged, value); }
        }

        protected bool isAnySummaryUpdated;
        public bool IsAnySummaryUpdated
        {
@@ -125,12 +118,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
        #endregion

        #region raise methods
        public void raiseAreBoundariesChanged()
        {
            AreBoundariesChanged = true;
            areBoundariesChanged = false;// trick to enable for the next added spectrum
        }

        public void raiseIsAnySpectrumLoaded()
        {
            IsAnySpectrumLoaded = true;
@@ -150,7 +137,21 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
        }
        #endregion

        protected async Task<(double xMin, double xMax, double yMin, double yMax)> getSpectrumAxesBoundariesAsync()
        #region zoom
        public void moveBoundariesHorizontally(double value)
        {
            XAxisBoundaries.changeMinValue(value);
            XAxisBoundaries.changeMaxValue(value);
        }

        public void moveBoundariesVertically(double value)
        {
            YAxisBoundaries.changeMinValue(value);
            YAxisBoundaries.changeMaxValue(value);
        }
        #endregion

        public async Task<(double xMin, double xMax, double yMin, double yMax)> getSpectraAxesBoundariesAsync()
        {
            List<Task> tasks = new List<Task>();

@@ -213,7 +214,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers

        public virtual void init()
        {
            AreBoundariesChanged = false;
            IsAnySpectrumLoaded = false;

            XAxisMajorStepValues = new List<double>(2);
@@ -223,7 +223,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers

        public async Task setBoundariesAsync()
        {
            (double xMin, double xMax, double yMin, double yMax) result = await getSpectrumAxesBoundariesAsync();
            (double xMin, double xMax, double yMin, double yMax) result = await getSpectraAxesBoundariesAsync();

            XAxisBoundaries = new AxisBoundariesModel("x", result.xMin, result.xMax, spectra[0].Elements[0].MeasureUnit);
            YAxisBoundaries = new AxisBoundariesModel("y", result.yMin, result.yMax);
@@ -234,35 +234,18 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
            YAxisTitle = title;
        }

        public void moveBoundariesToLeft(double value)
        {
            XAxisBoundaries.changeMinValue(value);
            XAxisBoundaries.changeMaxValue(value);
            raiseAreBoundariesChanged();
        }

        public void moveBoundariesToRight(double value)
        {
            XAxisBoundaries.changeMinValue(value);
            XAxisBoundaries.changeMaxValue(value);
            raiseAreBoundariesChanged();
        }

        public async Task updateBoundariesAsync()
        {
            (double xMin, double xMax, double yMin, double yMax) result = await getSpectrumAxesBoundariesAsync();
            (double xMin, double xMax, double yMin, double yMax) result = await getSpectraAxesBoundariesAsync();

            XAxisBoundaries.updateAxisBoundaries(result.xMin, result.xMax);
            YAxisBoundaries.updateAxisBoundaries(result.yMin, result.yMax);
            XAxisBoundaries.updateAxisBoundaries(result.xMin, result.xMax, updateRealValues: true);
            YAxisBoundaries.updateAxisBoundaries(result.yMin, result.yMax, updateRealValues: true);
        }

        public void updateBoundaries(double xMin, double xMax, double yMin, double yMax)
        {
            XAxisBoundaries.updateAxisBoundaries(xMin, xMax);
            YAxisBoundaries.updateAxisBoundaries(yMin, yMax);

            /* warn ChartBaseViewModel about update of chart boundaries */
            raiseAreBoundariesChanged();
        }

        public virtual Task addOrUpdateSpectrumAsync(SpectrumModel spectrum)
+0 −5
Original line number Diff line number Diff line
@@ -181,11 +181,6 @@ namespace INAF.Apps.Uwp.Charts
        }
        #endregion

        //public void p()
        //{
        //    RaisePropertyChanged(nameof(MajorLinesVisibilityValues));
        //}

        #region WavelengthMeasureUnits
        private WavelengthMeasureUnit selectedWavelengthMeasureUnit;
        public WavelengthMeasureUnit SelectedWavelengthMeasureUnit
+1 −1
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Converters

                return new RelayCommand(() =>
                {
                    mainViewModel.saveSpectrumOfTypeRaw(spectrum);
                    mainViewModel.trySaveSpectrumOfTypeRawOrRefOnCloudAsync(spectrum);
                });
            }
            catch (Exception)
+214 −0
Original line number Diff line number Diff line
using INAF.Apps.Uwp.Charts;
using INAF.Libraries.Uwp.Settings;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Toolkit.Mvvm.ComponentModel;
using System;
using INAF.Libraries.NetStandard.Extensions;
using INAF.Apps.Uwp.SLabDataManager.Charts.Containers;

namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
{
    public class ZoomHelper : ObservableObject
    {
        private readonly SettingsHelper settingsHelper;

        public ZoomHelper(IServiceProvider serviceProvider,
                          SettingsHelper settingsHelper)
        {
            this.settingsHelper = settingsHelper;

            var spectrumChartOptions = serviceProvider.GetRequiredService<SpectrumChartOptionsModel>();
            switch (spectrumChartOptions.SelectedWavelengthMeasureUnit)
            {
                case Libraries.NetStandard.ScienceModels.Enums.Enums.WavelengthMeasureUnit.Nanometers:
                    MoveZoomRegionSmallChangeX = 100d;
                    MoveZoomRegionLargeChangeX = 1000d;
                    break;
                case Libraries.NetStandard.ScienceModels.Enums.Enums.WavelengthMeasureUnit.Microns:
                    MoveZoomRegionSmallChangeX = 0.1;
                    MoveZoomRegionLargeChangeX = 1d;
                    break;
            }

            if (!tryReadZoomRegionShiftX())
                ZoomRegionShiftX = MoveZoomRegionSmallChangeX;
        }

        #region small/large change
        private double moveZoomRegionLargeChangeX;
        public double MoveZoomRegionLargeChangeX
        {
            get { return moveZoomRegionLargeChangeX; }
            set { SetProperty(ref moveZoomRegionLargeChangeX, value); }
        }

        private double moveZoomRegionLargeChangeY;
        public double MoveZoomRegionLargeChangeY
        {
            get { return moveZoomRegionLargeChangeY; }
            set { SetProperty(ref moveZoomRegionLargeChangeY, value); }
        }

        private double moveZoomRegionSmallChangeX;
        public double MoveZoomRegionSmallChangeX
        {
            get { return moveZoomRegionSmallChangeX; }
            set { SetProperty(ref moveZoomRegionSmallChangeX, value); }
        }

        public double moveZoomRegionSmallChangeY;
        public double MoveZoomRegionSmallChangeY
        {
            get { return moveZoomRegionSmallChangeY; }
            set { SetProperty(ref moveZoomRegionSmallChangeY, value); }
        }
        #endregion

        #region x/y shift
        private double zoomRegionShiftX;
        public double ZoomRegionShiftX
        {
            get { return zoomRegionShiftX; }
            set
            {
                if (SetProperty(ref zoomRegionShiftX, value))
                    saveZoomRegionShiftX();
            }
        }

        private double zoomRegionShiftY;
        public double ZoomRegionShiftY
        {
            get { return zoomRegionShiftY; }
            set
            {
                if (SetProperty(ref zoomRegionShiftY, value))
                    saveZoomRegionShiftY();
            }
        }

        private double yAxisMaxValue;
        public double YAxisMaxValue
        {
            get { return yAxisMaxValue; }
            private set { SetProperty(ref yAxisMaxValue, value); }
        }

        private double yAxisMinValue;
        public double YAxisMinValue
        {
            get { return yAxisMinValue; }
            private set { SetProperty(ref yAxisMinValue, value); }
        }
        #endregion

        #region boundaries
        private double zoomXAxisMaxValue;
        public double ZoomXAxisMaxValue
        {
            get { return zoomXAxisMaxValue; }
            private set { SetProperty(ref zoomXAxisMaxValue, value); }
        }

        private double zoomXAxisMinValue;
        public double ZoomXAxisMinValue
        {
            get { return zoomXAxisMinValue; }
            private set { SetProperty(ref zoomXAxisMinValue, value); }
        }

        private double zoomYAxisMaxValue;
        public double ZoomYAxisMaxValue
        {
            get { return zoomYAxisMaxValue; }
            private set { SetProperty(ref zoomYAxisMaxValue, value); }
        }

        private double zoomYAxisMinValue;
        public double ZoomYAxisMinValue
        {
            get { return zoomYAxisMinValue; }
            private set { SetProperty(ref zoomYAxisMinValue, value); }
        }
        #endregion

        #region setting methods
        private void saveZoomRegionShiftX()
        {
            settingsHelper.save(nameof(ZoomRegionShiftX), ZoomRegionShiftX.ToDoubleInvariantString());
        }

        private void saveZoomRegionShiftY()
        {
            settingsHelper.save(nameof(ZoomRegionShiftY), ZoomRegionShiftY.ToDoubleInvariantString());
        }

        public bool tryReadZoomRegionShiftX()
        {
            bool isFound = false;

            string value = settingsHelper.get(nameof(ZoomRegionShiftX));
            if (!string.IsNullOrEmpty(value))
            {
                ZoomRegionShiftX = value.ToDoubleInvariant();
                isFound = true;
            }

            return isFound;
        }

        public bool tryReadZoomRegionShiftY()
        {
            bool isFound = false;

            string value = settingsHelper.get(nameof(ZoomRegionShiftY));
            if (!string.IsNullOrEmpty(value))
            {
                ZoomRegionShiftY = value.ToDoubleInvariant();
                isFound = true;
            }

            return isFound;
        }
        #endregion

        public void setValuesForZoom(SpectraContainerBase spectraContainerBase)
        {
            

            YAxisMinValue = spectraContainerBase.YAxisBoundaries.MinValue;
            YAxisMaxValue = spectraContainerBase.YAxisBoundaries.MaxValue;

            MoveZoomRegionSmallChangeY = Math.Abs(YAxisMaxValue - YAxisMinValue) / 20d;
            MoveZoomRegionSmallChangeY = Math.Abs(YAxisMaxValue - YAxisMinValue) / 10d;

            if (!tryReadZoomRegionShiftY())
                ZoomRegionShiftY = MoveZoomRegionSmallChangeY;

            updateZoomRegionBoundaries(spectraContainerBase.XAxisBoundaries.MinValue,
                                       spectraContainerBase.XAxisBoundaries.MaxValue,
                                       spectraContainerBase.YAxisBoundaries.MinValue,
                                       spectraContainerBase.YAxisBoundaries.MaxValue);
        }

        public void updateZoomRegionBoundaries(double xMin, double xMax, double yMin, double yMax)
        {
            ZoomXAxisMaxValue = xMax;
            ZoomXAxisMinValue = xMin;
            ZoomYAxisMaxValue = yMax;
            ZoomYAxisMinValue = yMin;
        }

        public void updateBoundariesX(double value)
        {
            ZoomXAxisMaxValue += value;
            ZoomXAxisMinValue += value;
        }

        public void updateBoundariesY(double value)
        {
            ZoomYAxisMaxValue += value;
            ZoomYAxisMinValue += value;
        }
    }
}
Loading