]> repos.lx-s.de Git - winmute.git/commitdiff
Started implementing new quiet hours dialogs.
authorlx-s <lx-s@users.noreply.github.com>
Sun, 1 Feb 2026 16:39:30 +0000 (17:39 +0100)
committerlx-s <lx-s@users.noreply.github.com>
Sun, 1 Feb 2026 16:39:30 +0000 (17:39 +0100)
.editorconfig
Translations/lang-de.json
Translations/lang-en.json
WinMute/MediaController.cpp
WinMute/MediaController.h
WinMute/MuteControl.cpp
WinMute/Settings_QuietHoursDlg.cpp
WinMute/WMi18n.cpp
WinMute/WinMute.rc
WinMute/WinMute.vcxproj.filters
WinMute/resource.h

index d7fd50dcf41a81252325ef1144dbd03afd9a80e6..fa1cd8c817f3f6ece56adf0218af233674a003a1 100644 (file)
@@ -7,3 +7,4 @@ indent_style = space
 indent_size = 3
 insert_final_newline = true
 trim_trailing_whitespace = true
+max_line_length = 80
\ No newline at end of file
index 5d5054c28714e555fa6e98b96b4732573a840bc9..100fd5d4597a7c91028fe8e63bb24f8e517716d7 100644 (file)
@@ -88,7 +88,7 @@
   "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... der Computer in den Schlaf-/Ruhemodus geht",
   "settings.mute.mute-without-restore.when-user-logs-out": "... sich der Benutzer abmeldet",
   "settings.mute.mute-without-restore.when-rdp-session-starts": "... eine RDP Session erkannt wird",
-  "settings.mute.try-pause-media-on-mute": "Versuche Medien beim Stummschalten pausieren.",
+  "settings.mute.try-pause-media-on-mute": "Versuche Medien beim Stummschalten zu pausieren.",
   "settings.mute.try-resume-media-on-unmute": "Versuche Medien beim Wiederherstellen wieder abzuspielen.",
   "settings.quiet-hours.intro": "Während der Ruhezeit schaltet WinMute alle Audiogeräte auf Stumm und stellt anschließend die Lautstärke wieder her.",
   "settings.quiet-hours.enable": "Ruhzeit aktivieren",
   "settings.quiet-hours.error.invalid-time-range.text": "Beginn und Ende müssen unterschiedliche Zeiten sein.",
   "settings.quiet-hours.error.error-while-saving.title": "Fehler beim Speichern der Einstellungen",
   "settings.quiet-hours.error.error-while-saving.text": "Während dem Speichern der Ruhezeiteinstellungen trat ein Fehler auf",
+  "settings.quiet-hours.add-edit.add-title": "Ruhezeit hinzufügen",
+  "settings.quiet-hours.add-edit.edit-title": "Ruhezeit bearbeiten",
   "settings.wifi.intro": "Das WLAN basiert Stummschalten ermöglicht es die PC-Lautstärke abhängig von dem Namen des verbundenen WLAN Netzwerks zu steuern.",
   "settings.wifi.enable": "Aktiviere WLAN-basiertes Stummschalten",
   "settings.wifi.mute-when-not-in-list": "Stummschalten, wenn das WLAN nicht in der Liste ist",
index 33cd2d1f0001d6dc59cc4a7573e0745c869feffc..9ecb8e325f4e224c94afdfcd06502a0eaf97c418 100644 (file)
   "settings.quiet-hours.error.invalid-time-range.text": "Start and stop must not be the same time.",
   "settings.quiet-hours.error.error-while-saving.title": "Failed to save quiet hours settings",
   "settings.quiet-hours.error.error-while-saving.text": "Something went wrong while saving the settings",
+  "settings.quiet-hours.add-edit.add-title": "Add quiet hours",
+  "settings.quiet-hours.add-edit.edit-title": "Edit quiet hours",
   "settings.wifi.intro": "\"WLAN Mute\" mutes the computer based on the name of the connected wireless network.",
   "settings.wifi.enable": "Enable WLAN based muting",
   "settings.wifi.mute-when-in-list": "Mute if connected WLAN is in list",
index 93d910fac3a7cfc83f768ada772756115fbbd956..3689973c2edfb757ebfcf12e1fbc10ec3a14e555 100644 (file)
@@ -7,7 +7,7 @@
 using namespace winrt;
 using namespace winrt::Windows::Media::Control;
 
-bool MediaController::TryPauseCurrentSession(bool &paused_media)
+bool MediaPlaybackController::TryPauseCurrentSession(bool &paused_media)
 {
    auto &log = WMLog::GetInstance();
    try {
@@ -20,22 +20,22 @@ bool MediaController::TryPauseCurrentSession(bool &paused_media)
 
          if (status == GlobalSystemMediaTransportControlsSessionPlaybackStatus::Playing) {
             session.TryPauseAsync().get();
-            log.LogInfo(L"MediaController: Paused current media session.");
+            log.LogInfo(L"MediaPlaybackController: Paused current media session.");
             paused_media = true;
          } else {
-            log.LogDebug(L"MediaController: Media is not playing, no action needed.\n");
+            log.LogDebug(L"MediaPlaybackController: Media is not playing, no action needed.\n");
             paused_media = false;
          }
       }
    } catch (const hresult_error& e) {
-      log.LogError(L"MediaController: Failed to pause current media session. Error: %s",
+      log.LogError(L"MediaPlaybackController: Failed to pause current media session. Error: %s",
                    e.message().c_str());
       return false;
    }
    return true;
 }
 
-bool MediaController::TryPlayCurrentSession()
+bool MediaPlaybackController::TryPlayCurrentSession()
 {
    auto &log = WMLog::GetInstance();
    try {
@@ -48,11 +48,11 @@ bool MediaController::TryPlayCurrentSession()
 
          if (status == GlobalSystemMediaTransportControlsSessionPlaybackStatus::Paused) {
             session.TryPlayAsync().get();
-            log.LogInfo(L"MediaController: Resumed current media session.");
+            log.LogInfo(L"MediaPlaybackController: Resumed current media session.");
          }
       }
    } catch (const hresult_error &e) {
-      log.LogError(L"MediaController: Failed to resume current media session. Error: %s",
+      log.LogError(L"MediaPlaybackController: Failed to resume current media session. Error: %s",
                    e.message().c_str());
       return false;
    }
index d2a55dece9c06eb22bb2b8aa63fff6d761d4da4a..2b703535378c678162260c460d6e9d9433b7543e 100644 (file)
@@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
 
 #pragma once
 
-class MediaController {
+class MediaPlaybackController {
 public:
    static bool TryPauseCurrentSession(bool& paused_media);
    static bool TryPlayCurrentSession();
index c70f98af72439a4847041a83e0482b3d691255eb..19cff60d8aebdd45c533cb4fb292d1067999af3a 100644 (file)
@@ -237,7 +237,7 @@ void MuteControl::RestoreVolume(bool withDelay)
       }
       winAudio_->RestoreMuteStatus();
       if (mediaWasPlaying_ && mediaConfig_.tryResume) {
-         MediaController::TryPlayCurrentSession();
+         MediaPlaybackController::TryPlayCurrentSession();
          mediaWasPlaying_ = false;
       }
    }
@@ -347,7 +347,7 @@ void MuteControl::MuteNow()
    winAudio_->SetMute(true);
    if (mediaConfig_.tryPause) {
       bool did_pause = false;
-      if (MediaController::TryPauseCurrentSession(did_pause)) {
+      if (MediaPlaybackController::TryPauseCurrentSession(did_pause)) {
          mediaWasPlaying_ = did_pause;
       }
    }
index 00c116f587c8a43a817ccaddf488fb69df09dc72..f00fce10ad604889bb8b9bbfbb2c06d0dea8b387 100644 (file)
@@ -33,6 +33,11 @@ POSSIBILITY OF SUCH DAMAGE.
 
 #include "common.h"
 
+struct QuietHoursEntry {
+   DWORD start = 0;
+   DWORD end = 0;
+};
+
 static bool IsValidTimeRange(
    const LPSYSTEMTIME start,
    const LPSYSTEMTIME end)
@@ -51,33 +56,28 @@ static bool SaveQuietHours(
    const int enabled,
    const int forceUnmute,
    const int showNotifications,
-   const LPSYSTEMTIME start,
-   const LPSYSTEMTIME end)
+   const std::vector<std::pair<DWORD, DWORD>>& times)
 {
-   if (enabled) {
-      if (!IsValidTimeRange(start, end)) {
-         WMi18n &i18n = WMi18n::GetInstance();
-         TaskDialog(
-            nullptr,
-            nullptr,
-            PROGRAM_NAME,
-            i18n.GetTranslationW("settings.quiet-hours.error.invalid-time-range.title").c_str(),
-            i18n.GetTranslationW("settings.quiet-hours.error.invalid-time-range.text").c_str(),
-            TDCBF_OK_BUTTON,
-            TD_WARNING_ICON,
-            nullptr);
-         return false;
-      }
-   }
-
-   int setStart = start->wHour * 3600 + start->wMinute * 60 + start->wSecond;
-   int setEnd = end->wHour * 3600 + end->wMinute * 60 + end->wSecond;
+   //if (enabled) {
+   //   if (!IsValidTimeRange(start, end)) {
+   //      WMi18n &i18n = WMi18n::GetInstance();
+   //      TaskDialog(
+   //         nullptr,
+   //         nullptr,
+   //         PROGRAM_NAME,
+   //         i18n.GetTranslationW("settings.quiet-hours.error.invalid-time-range.title").c_str(),
+   //         i18n.GetTranslationW("settings.quiet-hours.error.invalid-time-range.text").c_str(),
+   //         TDCBF_OK_BUTTON,
+   //         TD_WARNING_ICON,
+   //         nullptr);
+   //      return false;
+   //   }
+   //}
 
    if (!settings->SetValue(SettingsKey::QUIETHOURS_ENABLE, enabled)
        || !settings->SetValue(SettingsKey::QUIETHOURS_FORCEUNMUTE, forceUnmute)
        || !settings->SetValue(SettingsKey::QUIETHOURS_NOTIFICATIONS, showNotifications)
-       || !settings->SetValue(SettingsKey::QUIETHOURS_START_V0_DEPRECATED, setStart)
-       || !settings->SetValue(SettingsKey::QUIETHOURS_END_V0_DEPRECATED, setEnd)) {
+       || !settings->StoreQuietHoursTimes(times)) {
       WMi18n &i18n = WMi18n::GetInstance();
 
       TaskDialog(
@@ -95,14 +95,115 @@ static bool SaveQuietHours(
    return true;
 }
 
+static void LoadQuietHoursAddDlgTranslation(HWND hDlg, bool isEdit)
+{
+   WMi18n &i18n = WMi18n::GetInstance();
+   if (isEdit) {
+      i18n.SetItemText(hDlg, "settings.quiet-hours.add-edit.edit-title");
+   } else {
+      i18n.SetItemText(hDlg, "settings.quiet-hours.add-edit.add-title");
+   }
+   i18n.SetItemText(hDlg, IDC_QUIET_HOURS_START_LABEL, "settings.quiet-hours.start-time-label");
+   i18n.SetItemText(hDlg, IDC_QUIET_HOURS_END_LABEL, "settings.quiet-hours.end-time-label");
+   i18n.SetItemText(hDlg, IDOK, "settings.btn-save");
+   i18n.SetItemText(hDlg, IDCANCEL, "settings.btn-cancel");
+}
+
+static void SetQuietHourPickerTime(HWND hPicker, DWORD savedTime)
+{
+   SYSTEMTIME tp{};
+   if (savedTime > 0) {
+      tp.wSecond = static_cast<WORD>(savedTime % 60);
+      tp.wMinute = static_cast<WORD>(((savedTime - tp.wSecond) / 60) % 60);
+      tp.wHour = static_cast<WORD>((savedTime - tp.wMinute - tp.wSecond) / 3600);
+   } else {
+      GetLocalTime(&tp);
+   }
+   DateTime_SetSystemtime(hPicker, GDT_VALID, &tp);
+}
+
+static INT_PTR CALLBACK Settings_QuietHoursAddDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+   switch (msg) {
+   case WM_INITDIALOG:
+   {
+      HWND hStart = GetDlgItem(hDlg, IDC_QUIET_HOURS_START_PICKER);
+      HWND hEnd = GetDlgItem(hDlg, IDC_QUIET_HOURS_END_PICKER);
+
+      QuietHoursEntry *qh_entry = reinterpret_cast<QuietHoursEntry *>(lParam);
+      if (qh_entry == nullptr) {
+         return FALSE;
+      }
+      SetWindowLongPtr(hDlg, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(qh_entry));
+
+      LoadQuietHoursAddDlgTranslation(hDlg, qh_entry != nullptr);
+      if (qh_entry->start != 0) {
+         SetQuietHourPickerTime(hStart, qh_entry->start);
+      }
+      if (qh_entry->end != 0) {
+         SetQuietHourPickerTime(hEnd, qh_entry->start);
+      }
+      return TRUE;
+   }
+   case WM_COMMAND:
+      if (LOWORD(wParam) == IDOK) {
+         HWND hStart = GetDlgItem(hDlg, IDC_QUIET_HOURS_START_PICKER);
+         HWND hEnd = GetDlgItem(hDlg, IDC_QUIET_HOURS_END_PICKER);
+         SYSTEMTIME start{};
+         SYSTEMTIME end{};
+         DateTime_GetSystemtime(hStart, &start);
+         DateTime_GetSystemtime(hEnd, &end);
+         if (!IsValidTimeRange(&start, &end)) {
+            WMi18n &i18n = WMi18n::GetInstance();
+            TaskDialog(
+               nullptr,
+               nullptr,
+               PROGRAM_NAME,
+               i18n.GetTranslationW("settings.quiet-hours.error.invalid-time-range.title").c_str(),
+               i18n.GetTranslationW("settings.quiet-hours.error.invalid-time-range.text").c_str(),
+               TDCBF_OK_BUTTON,
+               TD_WARNING_ICON,
+               nullptr);
+            return false;
+         } else {
+            auto *qh_entry = reinterpret_cast<QuietHoursEntry *>(GetWindowLongPtr(hDlg, GWLP_USERDATA));
+            qh_entry->start = start.wHour * 3600 + start.wMinute * 60 + start.wSecond;
+            qh_entry->end = end.wHour * 3600 + end.wMinute * 60 + end.wSecond;
+            EndDialog(hDlg, 0);
+         }
+      } else if (LOWORD(wParam) == IDCANCEL) {
+         EndDialog(hDlg, 1);
+      }
+      return FALSE;
+   case WM_CLOSE:
+      EndDialog(hDlg, 1);
+      return TRUE;
+   default:
+      break;
+   }
+   return FALSE;
+}
+
+
+// ===========================================================================
+//    Quiet Hours Main Settings Dialog
+// ===========================================================================
+
 static void LoadQuietHoursDlgTranslation(HWND hDlg)
 {
    WMi18n &i18n = WMi18n::GetInstance();
 
    i18n.SetItemText(hDlg, IDC_QUIET_HOURS_DESCRIPTION, "settings.quiet-hours.intro");
    i18n.SetItemText(hDlg, IDC_ENABLEQUIETHOURS, "settings.quiet-hours.enable");
-   i18n.SetItemText(hDlg, IDC_QUIET_HOURS_START_LABEL, "settings.quiet-hours.start-time-label");
-   i18n.SetItemText(hDlg, IDC_QUIET_HOURS_END_LABEL, "settings.quiet-hours.end-time-label");
+   i18n.SetItemText(hDlg, IDC_ENDPOINT_ADD, "settings.btn-add");
+   i18n.SetItemText(hDlg, IDC_ENDPOINT_EDIT, "settings.btn-edit");
+   i18n.SetItemText(hDlg, IDC_ENDPOINT_REMOVE, "settings.btn-remove");
+   i18n.SetItemText(hDlg, IDC_ENDPOINT_REMOVEALL, "settings.btn-remove-all");
+
+
+   //IDC_QUIET_HOURS_ADD
+//IDC_QUIET_HOURS_EDIT
+//IDC_QUIET_HOURS_REMOVE
    i18n.SetItemText(hDlg, IDC_FORCEUNMUTE, "settings.quiet-hours.force-unmute");
    i18n.SetItemText(hDlg, IDC_QUIET_HOURS_FORCE_UNMUTE_DESCRIPTION, "settings.quiet-hours.force-unmute-description");
    i18n.SetItemText(hDlg, IDC_SHOWNOTIFICATIONS, "settings.quiet-hours.show-notifications");
@@ -117,8 +218,11 @@ INT_PTR CALLBACK Settings_QuietHoursDlgProc(HWND hDlg, UINT msg, WPARAM wParam,
       HWND hEnable = GetDlgItem(hDlg, IDC_ENABLEQUIETHOURS);
       HWND hForce = GetDlgItem(hDlg, IDC_FORCEUNMUTE);
       HWND hNotify = GetDlgItem(hDlg, IDC_SHOWNOTIFICATIONS);
-      HWND hStart = GetDlgItem(hDlg, IDC_QUIETHOURS_START);
-      HWND hEnd = GetDlgItem(hDlg, IDC_QUIETHOURS_END);
+      HWND hQuietHoursTimes = GetDlgItem(hDlg, IDC_QUIET_HOURS_TIMES);
+      HWND hAdd = GetDlgItem(hDlg, IDC_QUIET_HOURS_ADD);
+      HWND hEdit = GetDlgItem(hDlg, IDC_QUIET_HOURS_EDIT);
+      HWND hDelete = GetDlgItem(hDlg, IDC_QUIET_HOURS_REMOVE);
+      HWND hDeleteAll = GetDlgItem(hDlg, IDC_QUIET_HOURS_REMOVEALL);
 
       WMSettings* settings = reinterpret_cast<WMSettings*>(lParam);
       assert(settings != nullptr);
@@ -140,49 +244,44 @@ INT_PTR CALLBACK Settings_QuietHoursDlgProc(HWND hDlg, UINT msg, WPARAM wParam,
 
       EnableWindow(hForce, qhEnabled);
       EnableWindow(hNotify, qhEnabled);
-      EnableWindow(hStart, qhEnabled);
-      EnableWindow(hEnd, qhEnabled);
-
-      int setStart = settings->QueryValue(SettingsKey::QUIETHOURS_START_V0_DEPRECATED);
-      int setEnd = settings->QueryValue(SettingsKey::QUIETHOURS_END_V0_DEPRECATED);
-
-      SYSTEMTIME start;
-      GetLocalTime(&start);
-      if (setStart > 0) {
-         start.wSecond = static_cast<WORD>(setStart % 60);
-         start.wMinute = static_cast<WORD>(((setStart - start.wSecond) / 60) % 60);
-         start.wHour = static_cast<WORD>((setStart - start.wMinute - start.wSecond) / 3600);
-      }
-      DateTime_SetSystemtime(hStart, GDT_VALID, &start);
-
-      SYSTEMTIME end;
-      GetLocalTime(&end);
-      if (setEnd > 0) {
-         end.wSecond = static_cast<WORD>(setEnd % 60);
-         end.wMinute = static_cast<WORD>(((setEnd - end.wSecond) / 60) % 60);
-         end.wHour = static_cast<WORD>((setEnd - end.wMinute - end.wSecond) / 3600);
-      }
-      DateTime_SetSystemtime(hEnd, GDT_VALID, &end);
+      EnableWindow(hQuietHoursTimes, qhEnabled);
+      EnableWindow(hAdd, qhEnabled);
+      EnableWindow(hEdit, qhEnabled);
+      EnableWindow(hDelete, qhEnabled);
+      EnableWindow(hDeleteAll, qhEnabled);
 
       return TRUE;
    }
    case WM_SAVESETTINGS:
    {
-      SYSTEMTIME start;
-      SYSTEMTIME end;
       HWND hEnable  = GetDlgItem(hDlg, IDC_ENABLEQUIETHOURS);
       HWND hForce  = GetDlgItem(hDlg, IDC_FORCEUNMUTE);
       HWND hNotify = GetDlgItem(hDlg, IDC_SHOWNOTIFICATIONS);
-      HWND hStart  = GetDlgItem(hDlg, IDC_QUIETHOURS_START);
-      HWND hEnd    = GetDlgItem(hDlg, IDC_QUIETHOURS_END);
+      HWND hQuietHoursTimes = GetDlgItem(hDlg, IDC_QUIET_HOURS_TIMES);
       WMSettings* settings = reinterpret_cast<WMSettings*>(GetWindowLongPtr(hDlg, GWLP_USERDATA));
       int qhEnabled       = Button_GetCheck(hEnable) == BST_CHECKED;
       int qhForceUnmute   = Button_GetCheck(hForce)  == BST_CHECKED;
       int qhNotifications = Button_GetCheck(hNotify) == BST_CHECKED;
-      DateTime_GetSystemtime(hStart, &start);
-      DateTime_GetSystemtime(hEnd, &end);
       settings->SetValue(SettingsKey::QUIETHOURS_ENABLE, qhEnabled);
-      if (SaveQuietHours(settings, qhEnabled, qhForceUnmute, qhNotifications, &start, &end)) {
+
+      // Get number of items from IDC_QUIET_HOURS_TIMES
+      // Get each item from IDC_QUIET_HOURS_TIMES
+      // Read meta data of each item
+      const int entries = ListView_GetItemCount(hQuietHoursTimes);
+      std::vector<std::pair<DWORD, DWORD>> times(entries);
+      for (int i = 0; i < entries; ++i) {
+         LVITEM lvi{};
+         lvi.iItem = i;
+         lvi.mask = LVIF_PARAM;
+         if (ListView_GetItem(hQuietHoursTimes, &lvi)) {
+            QuietHoursEntry* qh_entry = reinterpret_cast<QuietHoursEntry*>(lvi.lParam);
+            if (qh_entry != nullptr) {
+               times[i] = std::make_pair(qh_entry->start, qh_entry->end);
+            }
+         }
+      }
+
+      if (SaveQuietHours(settings, qhEnabled, qhForceUnmute, qhNotifications, times)) {
          EndDialog(hDlg, 0);
       }
       return 0;
@@ -192,14 +291,44 @@ INT_PTR CALLBACK Settings_QuietHoursDlgProc(HWND hDlg, UINT msg, WPARAM wParam,
       HWND hEnable = GetDlgItem(hDlg, IDC_ENABLEQUIETHOURS);
       HWND hForce  = GetDlgItem(hDlg, IDC_FORCEUNMUTE);
       HWND hNotify = GetDlgItem(hDlg, IDC_SHOWNOTIFICATIONS);
-      HWND hStart  = GetDlgItem(hDlg, IDC_QUIETHOURS_START);
-      HWND hEnd    = GetDlgItem(hDlg, IDC_QUIETHOURS_END);
+      HWND hQuietHoursTimes  = GetDlgItem(hDlg, IDC_QUIET_HOURS_TIMES);
+      HWND hAdd = GetDlgItem(hDlg, IDC_QUIET_HOURS_ADD);
+      HWND hEdit = GetDlgItem(hDlg, IDC_QUIET_HOURS_EDIT);
+      HWND hDelete = GetDlgItem(hDlg, IDC_QUIET_HOURS_REMOVE);
+      HWND hDeleteAll = GetDlgItem(hDlg, IDC_QUIET_HOURS_REMOVEALL);
+      
       if (LOWORD(wParam) == IDC_ENABLEQUIETHOURS) {
          int qhEnabled = Button_GetCheck(hEnable) == BST_CHECKED;
-         EnableWindow(hStart, qhEnabled);
-         EnableWindow(hEnd, qhEnabled);
+         EnableWindow(hQuietHoursTimes, qhEnabled);
+         EnableWindow(hAdd, qhEnabled);
+         EnableWindow(hEdit, qhEnabled);
+         EnableWindow(hDelete, qhEnabled);
+         EnableWindow(hDeleteAll, qhEnabled);
          EnableWindow(hNotify, qhEnabled);
          EnableWindow(hForce, qhEnabled);
+         
+      } else if (LOWORD(wParam) == IDC_QUIET_HOURS_ADD) {
+         QuietHoursEntry qh_entry;
+         if (DialogBoxParam(
+               nullptr,
+               MAKEINTRESOURCE(IDD_SETTINGS_QUIETHOURS_ADD),
+               hDlg,
+               Settings_QuietHoursAddDlgProc,
+               reinterpret_cast<LPARAM>(&qh_entry)) == 0) {
+            // Add entry to ListView
+            // TODO
+         }
+      } else if (LOWORD(wParam) == IDC_QUIET_HOURS_EDIT) {
+         // Get selected item
+         // Open dialog with selected item data
+         // Update ListView item
+         // TODO
+      } else if (LOWORD(wParam) == IDC_QUIET_HOURS_REMOVE) {
+         // Get selected item
+         // Remove from ListView
+         // TODO
+      } else if (LOWORD(wParam) == IDC_QUIET_HOURS_REMOVEALL) {
+         ListView_DeleteAllItems(hQuietHoursTimes);
       }
       return 0;
    }
index 548da113f31df554ea329ee855c91f94c1755bd0..f4aa480c08456cd297ee29d3fae240d36a49eafe 100644 (file)
@@ -221,7 +221,7 @@ const std::wstring WMi18n::GetTranslationW(const std::string& textId) const
       std::wstring err = std::format(
          L"Translation for {} not found",
          ConvertStringToWideString(textId));
-      return text;
+      return err;
    }
    return text;
 }
index 5e2105bb8019b0c5686baecb004ca2a60cb528ea..f15495e9c2e31e7d06f190ff9a5d0de7592009b3 100644 (file)
@@ -95,20 +95,21 @@ BEGIN
     PUSHBUTTON      "Show log...",IDC_OPENLOGDLG,129,118,94,16
 END
 
-IDD_SETTINGS_QUIETHOURS DIALOGEX 0, 0, 246, 198
+IDD_SETTINGS_QUIETHOURS DIALOGEX 0, 0, 246, 204
 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
     LTEXT           "During Quiet Hours WinMute automatically mutes your PC volumes and unmutes it afterwards.",IDC_QUIET_HOURS_DESCRIPTION,7,9,232,22
     CONTROL         "Enable Quiet Hours",IDC_ENABLEQUIETHOURS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,31,120,15
-    CONTROL         "Force unmute",IDC_FORCEUNMUTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,113,86,16
-    LTEXT           "If force unmute is enabled, WinMute will unmute your workstation when quiet hours end and not take into account if your workstation was already muted before quiet hours started.",IDC_QUIET_HOURS_FORCE_UNMUTE_DESCRIPTION,33,130,204,37
+    CONTROL         "Force unmute",IDC_FORCEUNMUTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,123,216,16
+    LTEXT           "If force unmute is enabled, WinMute will unmute your workstation when quiet hours end and not take into account if your workstation was already muted before quiet hours started.",IDC_QUIET_HOURS_FORCE_UNMUTE_DESCRIPTION,33,140,204,37
     CONTROL         "Show quiet hours notifications",IDC_SHOWNOTIFICATIONS,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,165,180,21
-    CONTROL         "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,22,47,155,61
-    PUSHBUTTON      "Add",IDC_WIFI_ADD,183,46,56,16
-    PUSHBUTTON      "Edit",IDC_WIFI_EDIT,183,65,56,16
-    PUSHBUTTON      "Remove",IDC_WIFI_REMOVE,183,84,56,16
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,175,180,21
+    CONTROL         "",IDC_QUIET_HOURS_TIMES,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,22,47,155,72
+    PUSHBUTTON      "Add",IDC_QUIET_HOURS_ADD,183,46,56,16
+    PUSHBUTTON      "Edit",IDC_QUIET_HOURS_EDIT,183,65,56,16
+    PUSHBUTTON      "Remove",IDC_QUIET_HOURS_REMOVE,183,84,56,16
+    PUSHBUTTON      "Remove All",IDC_QUIET_HOURS_REMOVEALL,183,103,56,16
 END
 
 IDD_ABOUT_LICENSE DIALOGEX 0, 0, 300, 181
@@ -259,6 +260,19 @@ BEGIN
     EDITTEXT        IDC_LOG_CONTENT,7,7,389,238,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL
 END
 
+IDD_SETTINGS_QUIETHOURS_ADD DIALOGEX 0, 0, 163, 71
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Edit Entry"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+    DEFPUSHBUTTON   "OK",IDOK,54,50,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,106,50,50,14
+    CONTROL         "",IDC_QUIET_HOURS_START_PICKER,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_UPDOWN | WS_TABSTOP | 0x8,54,7,102,15
+    LTEXT           "Start:",IDC_QUIET_HOURS_START_LABEL,7,7,37,15,SS_CENTERIMAGE
+    CONTROL         "",IDC_QUIET_HOURS_END_PICKER,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_UPDOWN | WS_TABSTOP | 0x8,54,27,102,15
+    LTEXT           "End:",IDC_QUIET_HOURS_END_LABEL,7,28,37,14,SS_CENTERIMAGE
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -297,7 +311,8 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 239
         TOPMARGIN, 7
-        BOTTOMMARGIN, 191
+        BOTTOMMARGIN, 197
+        HORZGUIDE, 119
     END
 
     IDD_ABOUT_LICENSE, DIALOG
@@ -379,6 +394,18 @@ BEGIN
         TOPMARGIN, 7
         BOTTOMMARGIN, 245
     END
+
+    IDD_SETTINGS_QUIETHOURS_ADD, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 156
+        VERTGUIDE, 54
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 64
+        HORZGUIDE, 22
+        HORZGUIDE, 27
+        HORZGUIDE, 42
+    END
 END
 #endif    // APSTUDIO_INVOKED
 
@@ -460,6 +487,11 @@ BEGIN
     0, 0, 100, 100
 END
 
+IDD_SETTINGS_QUIETHOURS_ADD AFX_DIALOG_LAYOUT
+BEGIN
+    0
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
index 3a77671b842a95087728a992dc4021e7a9f7b058..0fc4ce4d991efb5f5c11efce860eba0578572ab4 100644 (file)
@@ -63,6 +63,9 @@
     <Filter Include="Source Files\_External">
       <UniqueIdentifier>{825b7134-b70c-4e13-a95a-0a72645b1ec4}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Source Files\Controllers\MediaPlayback">
+      <UniqueIdentifier>{da8d211c-0ba1-418d-9480-5cc15d8f8a5a}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="WinAudio.h">
     <ClInclude Include="Utility.h">
       <Filter>Source Files\Base\Helper</Filter>
     </ClInclude>
+    <ClInclude Include="MediaController.h">
+      <Filter>Source Files\Controllers\MediaPlayback</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="WinMute.rc">
     <ClCompile Include="LogDialog.cpp">
       <Filter>Source Files\UI\Dialogs</Filter>
     </ClCompile>
+    <ClCompile Include="MediaController.cpp">
+      <Filter>Source Files\Controllers\MediaPlayback</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <CustomBuild Include="..\Translations\lang-de.json">
index b3d0db49ab2491a9fd9cf77dd1bb830d981c2a07..eac69edd204eb328f03d582ba6a5cf7668cf4936 100644 (file)
@@ -26,6 +26,8 @@
 #define IDI_APP_UPDATE                  141
 #define IDI_APPUPDATE                   141
 #define IDD_LOG                         142
+#define IDD_EDIT_QUIET_HOURS_ENTRY      144
+#define IDD_SETTINGS_QUIETHOURS_ADD     144
 #define IDC_LINK_HOMEPAGE               1001
 #define IDC_LINK_SUPPORT                1002
 #define IDC_LINK_PROJECT                1002
 #define IDC_LINK_HELP_TRANSLATING       1073
 #define IDC_EDIT1                       1075
 #define IDC_LOG_CONTENT                 1075
-#define IDC_LIST1                       1077
+#define IDC_QUIET_HOURS_TIMES           1077
+#define IDC_QUIET_HOURS_START_PICKER    1078
+#define IDC_QUIET_HOURS_END_PICKER      1079
+#define IDC_QUIET_HOURS_ADD             1079
+#define IDC_QUIET_HOURS_EDIT            1080
+#define IDC_QUIET_HOURS_REMOVE          1081
+#define IDC_QUIET_HOURS_REMOVEALL       1082
 #define ID_TRAYMENU_INFO                40001
 #define ID_TRAYMENU_                    40002
 #define ID_TRAYMENU_MUTEON              40003
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        144
+#define _APS_NEXT_RESOURCE_VALUE        146
 #define _APS_NEXT_COMMAND_VALUE         40042
-#define _APS_NEXT_CONTROL_VALUE         1078
+#define _APS_NEXT_CONTROL_VALUE         1082
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif