/// <summary>
        ///     Sets the current position of the fake progress bar.
        /// </summary>
        /// <param name="panel">
        ///     The fake progress bar <see cref="Panel"/> control.
        /// </param>
        /// <param name="value">
        ///     The position to be set.
        /// </param>
        /// <param name="maxValue">
        ///     The maximum range.
        /// </param>
        public static Color SetProgress(Panel panel, int value, int maxValue = 100)
        {
            if (panel == null)
            {
                return(ErrorForeColor);
            }
            var hWnd = panel.GetAncestor()?.Handle ?? IntPtr.Zero;

            if (hWnd != IntPtr.Zero)
            {
                if (value == 0)
                {
                    TaskBarProgress.SetState(hWnd, TaskBarProgressState.Indeterminate);
                }
                else
                {
                    TaskBarProgress.SetValue(hWnd, value, maxValue);
                }
            }
            var color = CompleteForeColor;

            if (CompleteForeColor == default)
            {
                color = Color.FromArgb(byte.MaxValue - (byte)(value * (byte.MaxValue / (float)maxValue)), byte.MaxValue, value);
            }
            using (var g = panel.CreateGraphics())
            {
                var width = value > 0 && value < maxValue ? (int)Math.Round(panel.Width / (double)maxValue * value, MidpointRounding.AwayFromZero) : panel.Width;
                using var b = new SolidBrush(value > 0 ? color : panel.BackColor);
                g.FillRectangle(b, 0, 0, width, panel.Height);
            }
            return(color);
        }
        internal static void Restore(LocalAppData appData, bool quiet = false, Form owner = default)
        {
            if (appData == default)
            {
                return;
            }
            if (owner != default)
            {
                owner.TopMost = false;
                owner.Enabled = false;
                TaskBarProgress.SetState(owner.Handle, TaskBarProgressState.Indeterminate);
                Settings.WriteToFile(true);
            }
            var assocData = appData.Settings.FileTypeAssoc;

            assocData?.SystemRegistryAccess?.LoadRestorePoint(quiet);
            if (owner == default)
            {
                return;
            }
            TaskBarProgress.SetState(owner.Handle, TaskBarProgressState.NoProgress);
            if (WinApi.NativeHelper.GetForegroundWindow() != owner.Handle)
            {
                WinApi.NativeHelper.SetForegroundWindow(owner.Handle);
            }
            owner.Enabled = true;
            owner.TopMost = true;
        }
示例#3
0
        internal void ShowProgressWindow(ProgressTasks progressTask, bool suppressShow = false)
        {
            ProgressTask = progressTask;

            this.CenterHV(Owner !, clientSize: true);

            ProgressMessageLabel.Text = progressTask switch
            {
                ProgressTasks.ScanAllFMs => LText.ProgressBox.Scanning,
                ProgressTasks.InstallFM => LText.ProgressBox.InstallingFM,
                ProgressTasks.UninstallFM => LText.ProgressBox.UninstallingFM,
                ProgressTasks.ConvertFiles => LText.ProgressBox.ConvertingFiles,
                ProgressTasks.ImportFromDarkLoader => LText.ProgressBox.ImportingFromDarkLoader,
                ProgressTasks.ImportFromNDL => LText.ProgressBox.ImportingFromNewDarkLoader,
                ProgressTasks.ImportFromFMSel => LText.ProgressBox.ImportingFromFMSel,
                ProgressTasks.CacheFM => LText.ProgressBox.CachingReadmeFiles,
                ProgressTasks.DeleteFMArchive => LText.ProgressBox.DeletingFMArchive,
                _ => ""
            };

            CurrentThingLabel.Text =
                progressTask == ProgressTasks.ScanAllFMs ? LText.ProgressBox.CheckingInstalledFMs
                : "";

            ProgressPercentLabel.Text = "";

            if (progressTask == ProgressTasks.UninstallFM ||
                progressTask == ProgressTasks.ConvertFiles ||
                progressTask == ProgressTasks.ImportFromDarkLoader ||
                progressTask == ProgressTasks.ImportFromNDL ||
                progressTask == ProgressTasks.ImportFromFMSel ||
                progressTask == ProgressTasks.DeleteFMArchive)
            {
                ProgressBar.Style = ProgressBarStyle.Marquee;
                if (Owner?.IsHandleCreated == true)
                {
                    TaskBarProgress.SetState(Owner.Handle, TaskbarStates.Indeterminate);
                }
                ProgressCancelButton.Hide();
            }
            else
            {
                ProgressBar.Style            = ProgressBarStyle.Blocks;
                ProgressCancelButton.Visible = progressTask != ProgressTasks.CacheFM;
                ProgressBar.SetValueInstant(0);
            }

            if (!suppressShow)
            {
                ShowThis();
            }
        }
示例#4
0
        internal void HideThis()
        {
            if (Owner?.IsHandleCreated == true)
            {
                TaskBarProgress.SetState(Owner.Handle, TaskbarStates.NoProgress);
            }

            Hide();

            ProgressMessageLabel.Text = "";
            CurrentThingLabel.Text    = "";
            ProgressPercentLabel.Text = "";
            ProgressBar.SetValueInstant(0);

            ProgressBar.Style = ProgressBarStyle.Blocks;
            ProgressCancelButton.Show();

            Enabled = false;
            Owner !.EnableEverything(true);
        }
示例#5
0
        internal void ReportCachingProgress(int percent)
        {
            ProgressBar.SetValueInstant(percent.Clamp(0, 100));
            ProgressPercentLabel.Text = percent + @"%";

            if (Visible)
            {
                if (Owner?.IsHandleCreated == true)
                {
                    TaskBarProgress.SetValue(Owner.Handle, percent, 100);
                }
            }
            else
            {
                if (Owner?.IsHandleCreated == true)
                {
                    TaskBarProgress.SetState(Owner.Handle, TaskbarStates.NoProgress);
                }
            }
        }
示例#6
0
        internal static void Associate(LocalAppData appData, bool quiet = false, Form owner = default)
        {
            if (appData?.Settings?.FileTypes?.Any() != true)
            {
                if (!quiet)
                {
                    MessageBoxEx.Show(owner, Language.GetText(nameof(en_US.associateBtnMsg)), Resources.GlobalTitle, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                return;
            }

            if (!Elevation.IsAdministrator)
            {
                if (owner != default)
                {
                    owner.TopMost = false;
                    owner.Enabled = false;
                    TaskBarProgress.SetState(owner.Handle, TaskBarProgressState.Indeterminate);
                }
                _bw?.Dispose();
                _bw         = new BackgroundWorker();
                _bw.DoWork += (sender, args) =>
                {
                    using (var process = ProcessEx.Start(PathEx.LocalPath, $"{ActionGuid.FileTypeAssociation} \"{appData.Key}\"", true, false))
                        if (!process?.HasExited == true)
                        {
                            process.WaitForExit();
                        }
                };
                _bw.RunWorkerCompleted += (sender, args) =>
                {
                    if (owner == default)
                    {
                        return;
                    }
                    TaskBarProgress.SetState(owner.Handle, TaskBarProgressState.NoProgress);
                    if (WinApi.NativeHelper.GetForegroundWindow() != owner.Handle)
                    {
                        WinApi.NativeHelper.SetForegroundWindow(owner.Handle);
                    }
                    owner.Enabled = true;
                    owner.TopMost = true;
                };
                _bw.RunWorkerAsync();
                return;
            }

            var assocData = new FileTypeAssocData
            {
                AppKey    = appData.Key,
                InstallId = Settings.SystemInstallId
            };

            using (var dialog = new IconBrowserDialog(Settings.IconResourcePath, Settings.Window.Colors.BaseDark, Settings.Window.Colors.ControlText, Settings.Window.Colors.Button, Settings.Window.Colors.ButtonText, Settings.Window.Colors.ButtonHover))
            {
                dialog.TopMost = true;
                dialog.Plus();
                dialog.ShowDialog();
                if (!string.IsNullOrEmpty(dialog.IconPath))
                {
                    assocData.IconPath = dialog.IconPath;
                    assocData.IconId   = dialog.IconId.ToString(CultureInfo.InvariantCulture);
                }
            }

            if (!FileEx.Exists(assocData.IconPath) || string.IsNullOrEmpty(assocData.IconId))
            {
                goto Cancel;
            }

            MessageBoxEx.ButtonText.OverrideEnabled = true;
            MessageBoxEx.ButtonText.Yes             = "App";
            MessageBoxEx.ButtonText.No     = "Launcher";
            MessageBoxEx.ButtonText.Cancel = Language.GetText(nameof(en_US.Cancel));
            var result = !quiet?MessageBoxEx.Show(Language.GetText(nameof(en_US.AssociateAppWayQuestion)), Resources.GlobalTitle, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) : DialogResult.Yes;

            switch (result)
            {
            case DialogResult.Yes:
                assocData.StarterPath = EnvironmentEx.GetVariablePathFull(appData.FilePath, false, false);
                break;

            case DialogResult.No:
                assocData.StarterPath = EnvironmentEx.GetVariablePathFull(PathEx.LocalPath, false, false);
                break;

            default:
                goto Cancel;
            }

            if (FileEx.Exists(assocData.StarterPath))
            {
                appData.Settings.FileTypeAssoc = assocData;
            }
            else
            {
                goto Cancel;
            }

            assocData = appData.Settings?.FileTypeAssoc;
            assocData?.SystemRegistryAccess?.AssociateFileTypes(false);
            return;

Cancel:
            if (!quiet)
            {
                MessageBoxEx.Show(owner, Language.GetText(nameof(en_US.OperationCanceledMsg)), MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }