Loading INAF.Apps.Uwp.SLabDataManager/App.xaml.cs +1 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ namespace INAF.Apps.Uwp.SLabDataManager .AddTransient<SpectrumProcessingHelper>() .AddTransient<SpectrumReader>() .AddTransient<SplineFitHelper>() .AddTransient<ZoomHelper>() .AddTransient<XmlHelper>() /* view models */ .AddSingleton<ChartViewModel>() Loading INAF.Apps.Uwp.SLabDataManager/Charts/Containers/SpectraContainerBase.cs +19 −36 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; Loading @@ -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>(); Loading Loading @@ -213,7 +214,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers public virtual void init() { AreBoundariesChanged = false; IsAnySpectrumLoaded = false; XAxisMajorStepValues = new List<double>(2); Loading @@ -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); Loading @@ -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) Loading INAF.Apps.Uwp.SLabDataManager/Charts/SpectrumChartOptionsModel.cs +0 −5 Original line number Diff line number Diff line Loading @@ -181,11 +181,6 @@ namespace INAF.Apps.Uwp.Charts } #endregion //public void p() //{ // RaisePropertyChanged(nameof(MajorLinesVisibilityValues)); //} #region WavelengthMeasureUnits private WavelengthMeasureUnit selectedWavelengthMeasureUnit; public WavelengthMeasureUnit SelectedWavelengthMeasureUnit Loading INAF.Apps.Uwp.SLabDataManager/Converters/SpectrumSummaryConverters.cs +1 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Converters return new RelayCommand(() => { mainViewModel.saveSpectrumOfTypeRaw(spectrum); mainViewModel.trySaveSpectrumOfTypeRawOrRefOnCloudAsync(spectrum); }); } catch (Exception) Loading INAF.Apps.Uwp.SLabDataManager/Helpers/UI/ZoomHelper.cs 0 → 100644 +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
INAF.Apps.Uwp.SLabDataManager/App.xaml.cs +1 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ namespace INAF.Apps.Uwp.SLabDataManager .AddTransient<SpectrumProcessingHelper>() .AddTransient<SpectrumReader>() .AddTransient<SplineFitHelper>() .AddTransient<ZoomHelper>() .AddTransient<XmlHelper>() /* view models */ .AddSingleton<ChartViewModel>() Loading
INAF.Apps.Uwp.SLabDataManager/Charts/Containers/SpectraContainerBase.cs +19 −36 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; Loading @@ -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>(); Loading Loading @@ -213,7 +214,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers public virtual void init() { AreBoundariesChanged = false; IsAnySpectrumLoaded = false; XAxisMajorStepValues = new List<double>(2); Loading @@ -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); Loading @@ -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) Loading
INAF.Apps.Uwp.SLabDataManager/Charts/SpectrumChartOptionsModel.cs +0 −5 Original line number Diff line number Diff line Loading @@ -181,11 +181,6 @@ namespace INAF.Apps.Uwp.Charts } #endregion //public void p() //{ // RaisePropertyChanged(nameof(MajorLinesVisibilityValues)); //} #region WavelengthMeasureUnits private WavelengthMeasureUnit selectedWavelengthMeasureUnit; public WavelengthMeasureUnit SelectedWavelengthMeasureUnit Loading
INAF.Apps.Uwp.SLabDataManager/Converters/SpectrumSummaryConverters.cs +1 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Converters return new RelayCommand(() => { mainViewModel.saveSpectrumOfTypeRaw(spectrum); mainViewModel.trySaveSpectrumOfTypeRawOrRefOnCloudAsync(spectrum); }); } catch (Exception) Loading
INAF.Apps.Uwp.SLabDataManager/Helpers/UI/ZoomHelper.cs 0 → 100644 +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; } } }