/// <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; }
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(); } }
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); }
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); } } }
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); } }