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

fixed closing/opening of panels after lab/xml file has been loaded

parent b1792c04
Loading
Loading
Loading
Loading
+33 −10
Original line number Diff line number Diff line
@@ -31,12 +31,15 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI

        public string RequiredUserControlName { get; set; }

        /* those are usercontrols currently opened (items are added in ChartPage.openUserControlAsync) */
        public List<UserControl> UserControls { get; private set; }

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

        /* those are user controls to be closed in ChartPage (items are added when the 'clearChartPageAsync' method is called) */
        public List<string> UserControlsToBeClosed { get; private set; }

        /* those are user controls to be opened when navigating to ChartPage (items are added during 'manageProcessedFileAsync' method, while reading xml files) */
        public List<string> UserControlsToBeOpened { get; private set; }

        #endregion
@@ -131,6 +134,12 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
            if (UserControlsToBeClosed?.Count() > 0)
                UserControlsToBeClosed.Clear();
        }

        public bool containsUserControlToBeClosed(string name)
        {
            return UserControlsToBeClosed.Any(x => x.Equals(name));
        }

        public void initUserControlsToBeClosed()
        {
            if (UserControlsToBeClosed == null)
@@ -141,10 +150,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI

        public void removeUserControlToBeClosed(string userControlName)
        {
            if (!containsUserControl(userControlName))
                return;

            if (!UserControlsToBeClosed.Any(x => x.Equals(userControlName)))
            if (!containsUserControlToBeClosed(userControlName))
                return;

            /* remove usercontrol from collection */
@@ -153,10 +159,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI

        public void tryAddUserControlToBeClosed(string userControlName)
        {
            if (!containsUserControl(userControlName))
                return;

            if (UserControlsToBeClosed.Any(x => x.Equals(userControlName)))
            if (containsUserControlToBeClosed(userControlName))
                return;

            /* add usercontrol to collection */
@@ -175,7 +178,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
            if (UserControlsToBeOpened == null)
                UserControlsToBeOpened = new List<string>();
            else
                UserControlsToBeClosed.Clear();
                UserControlsToBeOpened.Clear();
        }

        public void clearUserControlsToBeOpened()
@@ -184,9 +187,23 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
                UserControlsToBeOpened.Clear();
        }

        public bool containsUserControlToBeOpened(string name)
        {
            return UserControlsToBeOpened.Any(x => x.Equals(name));
        }

        public void removeUserControlToBeOpened(string userControlName)
        {
            if (!containsUserControlToBeOpened(userControlName))
                return;

            /* remove usercontrol from collection */
            UserControlsToBeOpened.Remove(userControlName);
        }

        public void tryAddUserControlToBeOpened(string userControlName)
        {
            if (UserControlsToBeOpened.Any(x => x.Equals(userControlName)))
            if (containsUserControlToBeOpened(userControlName))
                return;

            /* add usercontrol to collection */
@@ -196,6 +213,12 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI

        public void selectUserControlsToBeClosed()
        {
            if (UserControlsToBeClosed == null || !UserControlsToBeClosed.Any())
                return;

            if (UserControlsToBeOpened == null || !UserControlsToBeOpened.Any())
                return;

            var remainingUserControlsToBeClosed = UserControlsToBeClosed.Except(UserControlsToBeOpened);
            if (remainingUserControlsToBeClosed.Any())
                UserControlsToBeClosed = remainingUserControlsToBeClosed.ToList();
+1 −3
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
        #endregion

        #region clear all
        protected async Task<ChartViewModel> clearChartPageAsync()
        protected async Task clearChartPageAsync()
        {
            /* retrieve chartViewModel and delete RAW file and derived ones */
            var chartViewModel = serviceProvider.GetRequiredService<ChartViewModel>();
@@ -188,8 +188,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            await chartViewModel.deleteProcessedSpectraProcedureAsync();
            /* add all sercontrols to the list for being closed */
            chartViewModel.closeAllUserControlsProcedure();

            return chartViewModel;
        }

        private async Task clearFilesAsync()
+2 −2
Original line number Diff line number Diff line
@@ -70,9 +70,9 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels

        private async Task clearSegmentsFitAsync(bool isAskDeleteContinuumRemovedSpectrumRequired = true)
        {
            /* remove all items in left-panel with data about segments fit */
            /* remove all items in left-panel with data about segments fit (do it if SegmentsFitViewModel has been initialized) */
            SegmentsFitViewModel?.init();
            SegmentsFitViewModel.raiseIsPointsRemovalRequired();
            SegmentsFitViewModel?.raiseIsPointsRemovalRequired();

            /* remove continuum spectrum */
            await WorkingItems.SpectraContainer.tryRemoveSpectrumOfTypeAsync(SpectrumType.Continuum);
+22 −22
Original line number Diff line number Diff line
@@ -148,10 +148,10 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            initUserControlsManagement();

            /* read permissions for current user */
            await tryReadUserPermissionsAsync();
            await tryReadUserPermissionsAsync().ConfigureAwait(true);

            /* read data for remote operations */
            await readRemoteOperationsAsync();
            await readRemoteOperationsAsync().ConfigureAwait(true);

            /* fill list of recent files */
            await tryReadRecentFilesProcedureAsync().ConfigureAwait(true);
@@ -165,7 +165,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
                showDialogMessage("RemoteOperationsNotAvailableErrorMessage".GetText(), DialogMessageType.Warning);
            }

            IsLoading = false;
            UpdateUIHelper.UpdateUIAsync(() =>  IsLoading = false);
        }

        private void initUserControlsManagement()
@@ -313,16 +313,16 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            if (spectrumType == SpectrumType.Raw)
            {
                /* clearing chart page and processedspectracontainer is not required on 1st file loading */
                if (!App.IsFirstRawFileReading)
                {
                //if (!App.IsFirstRawFileReading)
                //{
                /* clear chart page, if any chart is available */
                await clearChartPageAsync();

                /* clear all retrieved processed spectra, if any is available */
                tryClearProcessedSpectra();
                }
                //}

                App.IsFirstRawFileReading = false;
                //App.IsFirstRawFileReading = false;
            }

            /* try reading the file to make spectrum available */
@@ -448,7 +448,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
                hideInfoBar();

                /* retrieve info about parent file */
                await retrieveRelatedFileAsync((int)spectrum.ParentId);
                await retrieveRelatedFileAsync((int)spectrum.ParentId).ConfigureAwait(true);
            }
            else
            {
@@ -467,7 +467,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            DeserializedSpectrum spectrumObj = null;

            var remoteOperationsManager = serviceProvider.GetRequiredService<RemoteOperationsManager>();
            var spectrumFile = await remoteOperationsManager.getParentFileAsync(relatedFileId);
            var spectrumFile = await remoteOperationsManager.getParentFileAsync(relatedFileId).ConfigureAwait(true);
            if (spectrumFile != null)
            {
                var xmlSerializer = new XmlSerializer(typeof(DeserializedSpectrum));
@@ -489,7 +489,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
                    await WorkingItems.SpectraContainer.addOrUpdateSpectrumAsync(chartSpectrumModel, updateSpectraSummariesContainer: false);

                    /* try to load settings for current processed file and to load parent files */
                    await manageProcessedFileAsync(chartSpectrumModel);
                    await manageProcessedFileAsync(chartSpectrumModel).ConfigureAwait(true);
                }
            }
        }
@@ -504,7 +504,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            if (!isFromRecentFileSelection)
            {
                string token = storageItemsAccessHelper.save(file);
                addToRecentFilesAsync(file.Path, token, key);
                addToRecentFilesAsync(file.Path, token, key).ConfigureAwait(true);
            }

            /* remember access to file */
@@ -515,13 +515,13 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            WorkingItems.LabSpectraSummaries.resetSummaryOfType(SpectrumType.Ref);

            /* clear chart for adding newly loaded spectra */
            ChartViewModel = await clearChartPageAsync();
            await clearChartPageAsync();

            /* init container for user controls to be opened after all files have been retrieved */
            UserControlsHelper.initUserControlsToBeOpened();

            var xmlSpectrumFileReader = serviceProvider.GetRequiredService<XmlSpectrumFileReader>();
            (IChartSpectrumModel spectrum, string exMsg) result = await xmlSpectrumFileReader.readFileAsync(key);
            (IChartSpectrumModel spectrum, string exMsg) result = await xmlSpectrumFileReader.readFileAsync(key).ConfigureAwait(true);

            if (!string.IsNullOrEmpty(result.exMsg))
            {
@@ -544,7 +544,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
                await WorkingItems.SpectraContainer.addOrUpdateSpectrumAsync(result.spectrum, updateSpectraSummariesContainer: false);

                /* try to load settings for current processed file and to load parent files */
                await manageProcessedFileAsync(result.spectrum);
                await manageProcessedFileAsync(result.spectrum).ConfigureAwait(true);
            }

            IsLoading = false;
@@ -558,7 +558,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
                IsHideRecentFilesFlyoutRequired = true;
                isHideRecentFilesFlyoutRequired = false; // reset variable for next notification

                await readXmlFileAsync(file, isFromRecentFileSelection: true);
                await readXmlFileAsync(file, isFromRecentFileSelection: true).ConfigureAwait(true);
            }
        }

+19 −11
Original line number Diff line number Diff line
@@ -194,10 +194,10 @@ namespace INAF.Apps.Uwp.SLabDataManager.Views
                        //spectrumChart.Loaded += (s, evt) =>
                        //{
                        /* 1st, close opened user controls after raw file has changed */
                            tryCloseUserControls();
                        await tryCloseUserControlsAsync();

                        /* open required user controls, if necessary */
                            tryOpenUserControls();
                        await tryOpenUserControlsAsync();
                        //};
                    }
                    break;
@@ -695,6 +695,8 @@ namespace INAF.Apps.Uwp.SLabDataManager.Views
                /* if user control is already open, then execute settings restore... */
                var localUserControl = ViewModel.UserControlsHelper.UserControls.FirstOrDefault(x => x.Name.Equals(userControlName));
                await ViewModel.tryManageProcessedSpectraSettingsAsync(localUserControl);
                /* user control is already opened, so let's remove it from list of items to be opened */
                ViewModel.UserControlsHelper.removeUserControlToBeOpened(userControlName);
                return;
            }

@@ -770,32 +772,38 @@ namespace INAF.Apps.Uwp.SLabDataManager.Views
            hideFlyout(userControlName);
        }

        private async Task tryCloseUserControls()
        private async Task tryCloseUserControlsAsync()
        {
            if (!ViewModel.UserControlsHelper.areUserControleToBeClosedAvailable())
                return;

            ViewModel.UserControlsHelper.selectUserControlsToBeClosed();

            foreach (var userControlName in ViewModel.UserControlsHelper.UserControlsToBeClosed)
            int userControlsToBeClosedNum = ViewModel.UserControlsHelper.UserControlsToBeClosed.Count;
            for (int i = userControlsToBeClosedNum - 1; i >= 0; i--)
            {
                System.Diagnostics.Debug.WriteLine($"closing {userControlName}...");
                var userControlName = ViewModel.UserControlsHelper.UserControlsToBeClosed[i];
                closeUserControl(userControlName);
                await Task.Delay(TimeSpan.FromMilliseconds((AnimationsHelper.ANIMATION_DURATION_MS + 100)));
                /* remove item from collection */
                /* user control has been opencloseded, so let's remove it from list of items to be closed */
                ViewModel.UserControlsHelper.removeUserControlToBeClosed(userControlName);
            }
        }

        private async void tryOpenUserControls()
        private async Task tryOpenUserControlsAsync()
        {
            if (!ViewModel.UserControlsHelper.areUserControleToBeOpenedAvailable())
                return;

            foreach (var userControlName in ViewModel.UserControlsHelper.UserControlsToBeOpened)
            int userControlsToBeOpenedNum = ViewModel.UserControlsHelper.UserControlsToBeOpened.Count;
            for (int i = userControlsToBeOpenedNum - 1; i >= 0; i--)
            {
                var userControlName = ViewModel.UserControlsHelper.UserControlsToBeOpened[i];
                /* open user control */
                await openUserControlAsync(userControlName);
                await Task.Delay(TimeSpan.FromMilliseconds((AnimationsHelper.ANIMATION_DURATION_MS + 100)));
                /* user control has been opened, so let's remove it from list of items to be opened */
                ViewModel.UserControlsHelper.removeUserControlToBeOpened(userControlName);
            }
        }
        #endregion
Loading