示例#1
0
        /// <summary>
        /// Collects the current set of open windows and collects a new <see cref="Arrangement"/> object.
        /// </summary>
        public static Arrangement Save()
        {
            var windows     = OpenWindowGetter.GetOpenWindows();
            var windowInfos = from window in windows
                              let sef = SideEffectHelper.EliminateSideEffects <WindowKey, WindowHandle, WindowInfo, bool>(WindowInfo.TrySave, window.Value, window.Key)
                                        where sef.result
                                        select sef.side;

            return(new Arrangement(windowInfos));
        }
示例#2
0
        public static bool CheckNeedsRestore()
        {
            var openWindows = OpenWindowGetter.GetOpenWindows();

            if (!openWindows.Any())
            {
                return(false);
            }
            return /*openWindows
                    * .Select(window => Desktop.FromWindow(window.Key))
                    * .All(desktop => desktop.Left is null)*/(true);
        }
示例#3
0
        /// <summary>
        /// Applies the window arrangement from the <paramref name="arrangement"/> parameter to open windows.
        /// </summary>
        /// <param name="arrangement">The target arrangement of windows.</param>
        public static void Apply(Arrangement arrangement)
        {
            var windows = OpenWindowGetter.GetOpenWindows().ToDictionary();

            foreach (var windowInfo in arrangement.WindowInfos)
            {
                if (windows.TryGetSingle(window => window.Value.Equals(windowInfo.Key), out var singleWindow))
                {
                    var windowHandle = singleWindow.Key;
                    windows.Remove(windowHandle);

                    windowInfo.Apply(windowHandle);
                }
            }
        }