diff --git a/Rapr/DSEForm.cs b/Rapr/DSEForm.cs index 8af08f2..c89d6f8 100644 --- a/Rapr/DSEForm.cs +++ b/Rapr/DSEForm.cs @@ -36,6 +36,7 @@ public partial class DSEForm : Form private HashSet driversWithNewerDate = new HashSet(); private HashSet unusedDriversToReview = new HashSet(); + private ToolStripMenuItem warnBeforeSelectingUnusedDriversStripMenuItem; private static readonly IUpdateManager UpdateManager = CreateUpdateManager(); @@ -110,9 +111,7 @@ public DSEForm() this.Icon = DSEFormHelper.ExtractAssociatedIcon(Application.ExecutablePath); this.BuildLanguageMenu(); - - // Initialize the BootCritical option menu item - this.includeBootCriticalDriversStripMenuItem.Checked = Settings.Default.IncludeBootCriticalInOldDriverSelection; + this.SetupOptionsMenu(); this.lstDriverStoreEntries.PrimarySortColumn = this.driverClassColumn; this.lstDriverStoreEntries.PrimarySortOrder = SortOrder.Ascending; @@ -350,6 +349,23 @@ private void BuildLanguageMenu() } } + // Called after every InitializeComponent(), including when the language is switched, + // so the option menu items always reflect the saved settings. + private void SetupOptionsMenu() + { + this.includeBootCriticalDriversStripMenuItem.Checked = Settings.Default.IncludeBootCriticalInOldDriverSelection; + + // Created here because its text has no generated Language property yet. + this.warnBeforeSelectingUnusedDriversStripMenuItem = new ToolStripMenuItem + { + CheckOnClick = true, + Checked = Settings.Default.WarnBeforeSelectingUnusedDrivers, + Text = Language.ResourceManager.GetString("Menu_Options_WarnBeforeSelectingUnusedDrivers", Language.Culture), + }; + this.warnBeforeSelectingUnusedDriversStripMenuItem.Click += this.WarnBeforeSelectingUnusedDriversStripMenuItem_Click; + this.optionsStripMenuItem.DropDownItems.Add(this.warnBeforeSelectingUnusedDriversStripMenuItem); + } + private void EnsureOnScreen() { var workArea = Screen.GetWorkingArea(this); @@ -931,7 +947,7 @@ private void CtxMenuSelectUnusedDrivers_Click(object sender, EventArgs e) { if (!this.operationInProgress && this.driverStore.SupportDeviceNameColumn && this.lstDriverStoreEntries.Objects != null) { - if (!this.ConfirmUnusedDriverSelection()) + if (Settings.Default.WarnBeforeSelectingUnusedDrivers && !this.ConfirmUnusedDriverSelection()) { return; } @@ -1030,6 +1046,7 @@ private void SwitchCulture(object sender, EventArgs e) this.Controls.Clear(); this.InitializeComponent(); this.BuildLanguageMenu(); + this.SetupOptionsMenu(); this.RightToLeft = ci.TextInfo.IsRightToLeft ? RightToLeft.Yes : RightToLeft.No; this.RightToLeftLayout = ci.TextInfo.IsRightToLeft; this.SetupListViewColumns(); @@ -1491,6 +1508,12 @@ private void IncludeBootCriticalDriversStripMenuItem_Click(object sender, System Settings.Default.Save(); } + private void WarnBeforeSelectingUnusedDriversStripMenuItem_Click(object sender, System.EventArgs e) + { + Settings.Default.WarnBeforeSelectingUnusedDrivers = this.warnBeforeSelectingUnusedDriversStripMenuItem.Checked; + Settings.Default.Save(); + } + private async void CtxMenuExportDriver_Click(object sender, System.EventArgs e) { using (var dialog = new CommonOpenFileDialog { IsFolderPicker = true }) diff --git a/Rapr/Lang/Language.ar-SA.resx b/Rapr/Lang/Language.ar-SA.resx index d9eb128..5c660d2 100644 --- a/Rapr/Lang/Language.ar-SA.resx +++ b/Rapr/Lang/Language.ar-SA.resx @@ -505,4 +505,7 @@ https://github.com/lostindark/DriverStoreExplorer/blob/master/LICENSE قد تظل التعريفات المحددة مطلوبة. راجعها وأنشئ نسخة احتياطية منها قبل حذفها. + + التحذير قبل تحديد التعريفات غير المستخدمة + \ No newline at end of file diff --git a/Rapr/Lang/Language.de-DE.resx b/Rapr/Lang/Language.de-DE.resx index 1bf26df..f8bbe5c 100644 --- a/Rapr/Lang/Language.de-DE.resx +++ b/Rapr/Lang/Language.de-DE.resx @@ -542,4 +542,7 @@ Mit der Auswahl der Treiber fortfahren? Die ausgewählten Treiber werden möglicherweise weiterhin benötigt. Prüfen und sichern Sie die Treiber vor dem Löschen. + + Vor dem Auswählen nicht verwendeter Treiber warnen + diff --git a/Rapr/Lang/Language.el-GR.resx b/Rapr/Lang/Language.el-GR.resx index 44c6090..8dd143e 100644 --- a/Rapr/Lang/Language.el-GR.resx +++ b/Rapr/Lang/Language.el-GR.resx @@ -542,4 +542,7 @@ Credits: Οι επιλεγμένοι οδηγοί ενδέχεται να είναι ακόμα απαραίτητοι. Ελέγξτε τους και δημιουργήστε αντίγραφα ασφαλείας πριν από τη διαγραφή. + + Προειδοποίηση πριν από την επιλογή μη χρησιμοποιούμενων Drivers + diff --git a/Rapr/Lang/Language.es-ES.resx b/Rapr/Lang/Language.es-ES.resx index 273e938..aeb2e28 100644 --- a/Rapr/Lang/Language.es-ES.resx +++ b/Rapr/Lang/Language.es-ES.resx @@ -542,4 +542,7 @@ Borrarlos puede hacer que los programas o dispositivos dejen de funcionar. Revis Los controladores seleccionados podrían seguir siendo necesarios. Revíselos y haga una copia de seguridad antes de borrarlos. + + Advertir antes de seleccionar controladores sin usar + \ No newline at end of file diff --git a/Rapr/Lang/Language.fr-FR.resx b/Rapr/Lang/Language.fr-FR.resx index 0cef7e8..db9b577 100644 --- a/Rapr/Lang/Language.fr-FR.resx +++ b/Rapr/Lang/Language.fr-FR.resx @@ -542,4 +542,7 @@ Continuer la sélection des pilotes ? Les pilotes sélectionnés peuvent encore être nécessaires. Vérifiez-les et sauvegardez-les avant de les supprimer. + + Avertir avant de sélectionner les pilotes inutilisés + diff --git a/Rapr/Lang/Language.he-IL.resx b/Rapr/Lang/Language.he-IL.resx index f35cd14..674d90e 100644 --- a/Rapr/Lang/Language.he-IL.resx +++ b/Rapr/Lang/Language.he-IL.resx @@ -516,4 +516,7 @@ ייתכן שמנהלי ההתקנים שנבחרו עדיין נחוצים. יש לבדוק ולגבות אותם לפני המחיקה. + + הצג אזהרה לפני בחירת מנהלי התקנים שאינם בשימוש + \ No newline at end of file diff --git a/Rapr/Lang/Language.hu-HU.resx b/Rapr/Lang/Language.hu-HU.resx index 0eaea86..1345779 100644 --- a/Rapr/Lang/Language.hu-HU.resx +++ b/Rapr/Lang/Language.hu-HU.resx @@ -542,4 +542,7 @@ Folytatja az illesztőprogramok kiválasztását? A kijelölt illesztőprogramokra továbbra is szükség lehet. Törlés előtt ellenőrizze őket, és készítsen róluk biztonsági másolatot. + + Figyelmeztetés a nem használt illesztőprogramok kijelölése előtt + diff --git a/Rapr/Lang/Language.it-IT.resx b/Rapr/Lang/Language.it-IT.resx index e41fc3e..71bef5c 100644 --- a/Rapr/Lang/Language.it-IT.resx +++ b/Rapr/Lang/Language.it-IT.resx @@ -543,4 +543,7 @@ Continuare con la selezione dei driver? I driver selezionati potrebbero essere ancora necessari. Controllali ed esegui un backup prima di eliminarli. + + Avvisa prima di selezionare i driver non usati + diff --git a/Rapr/Lang/Language.ja-JP.resx b/Rapr/Lang/Language.ja-JP.resx index 1c616d1..2ca8a29 100644 --- a/Rapr/Lang/Language.ja-JP.resx +++ b/Rapr/Lang/Language.ja-JP.resx @@ -542,4 +542,7 @@ Windowsインストールまたはイメージのルートディレクトリ(W 選択したドライバーは引き続き必要な可能性があります。削除前に確認し、バックアップしてください。 + + 未使用のドライバーを選択する前に警告する + diff --git a/Rapr/Lang/Language.ko-KR.resx b/Rapr/Lang/Language.ko-KR.resx index ee08152..13c469f 100644 --- a/Rapr/Lang/Language.ko-KR.resx +++ b/Rapr/Lang/Language.ko-KR.resx @@ -542,4 +542,7 @@ Windows 폴더 자체가 아닌 Windows 설치 또는 이미지의 루트 디렉 선택한 드라이버가 여전히 필요할 수 있습니다. 삭제하기 전에 검토하고 백업하세요. + + 사용하지 않는 드라이버 선택 전에 경고 + diff --git a/Rapr/Lang/Language.nb-NO.resx b/Rapr/Lang/Language.nb-NO.resx index cd56512..e3384e9 100644 --- a/Rapr/Lang/Language.nb-NO.resx +++ b/Rapr/Lang/Language.nb-NO.resx @@ -542,4 +542,7 @@ Vil du fortsette å velge drivere? De valgte driverne kan fortsatt være nødvendige. Gå gjennom og sikkerhetskopier driverne før sletting. + + Advar før ubrukte drivere velges + \ No newline at end of file diff --git a/Rapr/Lang/Language.pl-PL.resx b/Rapr/Lang/Language.pl-PL.resx index 40db74f..e265731 100644 --- a/Rapr/Lang/Language.pl-PL.resx +++ b/Rapr/Lang/Language.pl-PL.resx @@ -542,4 +542,7 @@ Czy kontynuować wybieranie sterowników? Wybrane sterowniki mogą być nadal potrzebne. Sprawdź je i wykonaj kopię zapasową przed usunięciem. + + Ostrzegaj przed wybraniem nieużywanych sterowników + diff --git a/Rapr/Lang/Language.pt-BR.resx b/Rapr/Lang/Language.pt-BR.resx index f2a134e..e83523b 100644 --- a/Rapr/Lang/Language.pt-BR.resx +++ b/Rapr/Lang/Language.pt-BR.resx @@ -506,4 +506,7 @@ Continuar selecionando drivers? Os drivers selecionados ainda podem ser necessários. Revise-os e faça backup antes de excluí-los. + + Avisar antes de selecionar drivers não usados + diff --git a/Rapr/Lang/Language.resx b/Rapr/Lang/Language.resx index 4eb46f6..1515b60 100644 --- a/Rapr/Lang/Language.resx +++ b/Rapr/Lang/Language.resx @@ -542,4 +542,7 @@ Continue selecting drivers? Selected drivers may still be required. Review and back up drivers before deleting. + + Warn Before Selecting Unused Drivers + diff --git a/Rapr/Lang/Language.ru-RU.resx b/Rapr/Lang/Language.ru-RU.resx index 62a6459..c1ddac6 100644 --- a/Rapr/Lang/Language.ru-RU.resx +++ b/Rapr/Lang/Language.ru-RU.resx @@ -542,4 +542,7 @@ Выбранные драйверы могут по-прежнему быть необходимы. Проверьте их и создайте резервную копию перед удалением. + + Предупреждать перед выделением неиспользуемых драйверов + diff --git a/Rapr/Lang/Language.sk-SK.resx b/Rapr/Lang/Language.sk-SK.resx index ec05a4c..c57f762 100644 --- a/Rapr/Lang/Language.sk-SK.resx +++ b/Rapr/Lang/Language.sk-SK.resx @@ -542,4 +542,7 @@ Pokračovať vo výbere ovládačov? Vybrané ovládače môžu byť stále potrebné. Pred odstránením ich skontrolujte a zálohujte. + + Upozorniť pred označením nepoužívaných ovládačov + diff --git a/Rapr/Lang/Language.tr-TR.resx b/Rapr/Lang/Language.tr-TR.resx index 2e9a129..b449486 100644 --- a/Rapr/Lang/Language.tr-TR.resx +++ b/Rapr/Lang/Language.tr-TR.resx @@ -542,4 +542,7 @@ Sürücü seçimine devam edilsin mi? Seçilen sürücüler hâlâ gerekli olabilir. Silmeden önce sürücüleri gözden geçirin ve yedekleyin. + + Kullanılmayan Sürücüleri Seçmeden Önce Uyar + diff --git a/Rapr/Lang/Language.tt-RU.resx b/Rapr/Lang/Language.tt-RU.resx index e97f92f..8d59531 100644 --- a/Rapr/Lang/Language.tt-RU.resx +++ b/Rapr/Lang/Language.tt-RU.resx @@ -542,4 +542,7 @@ Сайланган драйверлар һаман кирәк булырга мөмкин. Бетерер алдыннан аларны тикшерегез һәм резерв күчермәсен ясагыз. + + Кулланылмый торган драйверларны сайлау алдыннан кисәтү + \ No newline at end of file diff --git a/Rapr/Lang/Language.uk-UA.resx b/Rapr/Lang/Language.uk-UA.resx index e52a49d..226fa3c 100644 --- a/Rapr/Lang/Language.uk-UA.resx +++ b/Rapr/Lang/Language.uk-UA.resx @@ -542,4 +542,7 @@ Вибрані драйвери можуть і далі бути потрібними. Перевірте їх і створіть резервну копію перед видаленням. + + Попереджати перед вибором невикористаних драйверів + diff --git a/Rapr/Lang/Language.vi-VN.resx b/Rapr/Lang/Language.vi-VN.resx index cdbd091..1d8a743 100644 --- a/Rapr/Lang/Language.vi-VN.resx +++ b/Rapr/Lang/Language.vi-VN.resx @@ -547,4 +547,7 @@ Tiếp tục chọn driver? Các driver đã chọn có thể vẫn cần thiết. Hãy kiểm tra và sao lưu các driver trước khi xóa. + + Cảnh báo trước khi chọn các driver không sử dụng + \ No newline at end of file diff --git a/Rapr/Lang/Language.zh-CN.resx b/Rapr/Lang/Language.zh-CN.resx index b958818..f5313ff 100644 --- a/Rapr/Lang/Language.zh-CN.resx +++ b/Rapr/Lang/Language.zh-CN.resx @@ -508,4 +508,7 @@ 所选驱动可能仍然需要使用。请在删除前检查并备份驱动。 + + 选择未使用的驱动前显示警告 + diff --git a/Rapr/Lang/Language.zh-TW.resx b/Rapr/Lang/Language.zh-TW.resx index 089f424..44ba6fd 100644 --- a/Rapr/Lang/Language.zh-TW.resx +++ b/Rapr/Lang/Language.zh-TW.resx @@ -541,4 +541,7 @@ 選取的驅動程式可能仍有需要。請在刪除前檢查並備份驅動程式。 + + 選擇未使用的驅動程式前顯示警告 + diff --git a/Rapr/Properties/Settings.Designer.cs b/Rapr/Properties/Settings.Designer.cs index 957abc0..f909f46 100644 --- a/Rapr/Properties/Settings.Designer.cs +++ b/Rapr/Properties/Settings.Designer.cs @@ -147,5 +147,18 @@ public string DriverStoreOption { this["LogRetentionPeriod"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool WarnBeforeSelectingUnusedDrivers { + get { + return ((bool)(this["WarnBeforeSelectingUnusedDrivers"])); + } + set { + this["WarnBeforeSelectingUnusedDrivers"] = value; + } + } } } diff --git a/Rapr/Properties/Settings.settings b/Rapr/Properties/Settings.settings index b00f90a..11638a6 100644 --- a/Rapr/Properties/Settings.settings +++ b/Rapr/Properties/Settings.settings @@ -29,6 +29,9 @@ Native + + True + 180.00:00:00 diff --git a/RaprTests/DSEFormTests.cs b/RaprTests/DSEFormTests.cs index ea45e8c..4fd82a6 100644 --- a/RaprTests/DSEFormTests.cs +++ b/RaprTests/DSEFormTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Configuration; using System.Diagnostics; using System.Drawing; using System.Linq; @@ -207,6 +208,38 @@ public void UnusedDriverSelectionRequiresConfirmationBeforeChangingChecks(string }); } + [TestMethod] + [DataRow("CtxMenuSelectUnusedDrivers_Click")] + [DataRow("ButtonSelectUnusedDrivers_Click")] + public void DisabledUnusedDriverWarningSelectsWithoutConfirmation(string handler) + { + // Settings is internal to Rapr, so reach it through ApplicationSettingsBase. + var settings = (ApplicationSettingsBase)typeof(DSEForm).Assembly + .GetType("Rapr.Properties.Settings") + .GetProperty("Default", BindingFlags.Static | BindingFlags.Public) + .GetValue(null); + object previous = settings["WarnBeforeSelectingUnusedDrivers"]; + settings["WarnBeforeSelectingUnusedDrivers"] = false; + + try + { + WithSelectionForm((form, list) => + { + var unused = CreateDriver("unused.inf", 1); + list.SetObjects(new[] { unused }); + + Invoke(form, handler, null, EventArgs.Empty); + + Assert.AreEqual(0, ((SelectionTestForm)form).ConfirmationCount); + CollectionAssert.AreEquivalent(new[] { unused }, list.CheckedObjects.Cast().ToArray()); + }); + } + finally + { + settings["WarnBeforeSelectingUnusedDrivers"] = previous; + } + } + [TestMethod] [DataRow(true, false)] [DataRow(false, true)]