예제 #1
0
파일: Main.cs 프로젝트: rbarraud/CKAN
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            // Only close the window, when the user has access to the "Exit" of the menu.
            if (!menuStrip1.Enabled)
            {
                e.Cancel = true;
                return;
            }

            if (Conflicts != null)
            {
                if (Conflicts.Any())
                {
                    // Ask if they want to resolve conflicts
                    string confDescrip = Conflicts
                                         .Select(kvp => kvp.Value)
                                         .Aggregate((a, b) => $"{a}, {b}");
                    if (!YesNoDialog($"There are conflicts. Really quit?\r\n\r\n{confDescrip}"))
                    {
                        e.Cancel = true;
                        return;
                    }
                }
                else
                {
                    // The Conflicts dictionary is empty even when there are unmet dependencies.
                    if (!YesNoDialog("There are unmet dependencies. Really quit?"))
                    {
                        e.Cancel = true;
                        return;
                    }
                }
            }
            else if (ChangeSet?.Any() ?? false)
            {
                // Ask if they want to discard the change set
                string changeDescrip = ChangeSet
                                       .GroupBy(ch => ch.ChangeType, ch => ch.Mod.Name)
                                       .Select(grp => $"{grp.Key}: "
                                               + grp.Aggregate((a, b) => $"{a}, {b}"))
                                       .Aggregate((a, b) => $"{a}\r\n{b}");
                if (!YesNoDialog($"You have unapplied changes. Really quit?\r\n\r\n{changeDescrip}"))
                {
                    e.Cancel = true;
                    return;
                }
            }

            // Copy window location to app settings
            configuration.WindowLoc = Location;

            // Copy window size to app settings if not maximized
            configuration.WindowSize = WindowState == FormWindowState.Normal ? Size : RestoreBounds.Size;

            //copy window maximized state to app settings
            configuration.IsWindowMaximised = WindowState == FormWindowState.Maximized;

            // Copy panel position to app settings
            configuration.PanelPosition = splitContainer1.SplitterDistance;

            // Copy metadata panel split height to app settings
            configuration.ModInfoPosition = ModInfoTabControl.ModMetaSplitPosition;

            // Save the active filter
            configuration.ActiveFilter = (int)mainModList.ModFilter;

            // Save settings.
            configuration.Save();
            base.OnFormClosing(e);
        }