#include "common.h"
+struct QuietHoursEntry {
+ DWORD start = 0;
+ DWORD end = 0;
+};
+
static bool IsValidTimeRange(
const LPSYSTEMTIME start,
const LPSYSTEMTIME end)
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(
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");
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);
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;
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;
}
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
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
+
/////////////////////////////////////////////////////////////////////////////
//
LEFTMARGIN, 7
RIGHTMARGIN, 239
TOPMARGIN, 7
- BOTTOMMARGIN, 191
+ BOTTOMMARGIN, 197
+ HORZGUIDE, 119
END
IDD_ABOUT_LICENSE, DIALOG
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
0, 0, 100, 100
END
+IDD_SETTINGS_QUIETHOURS_ADD AFX_DIALOG_LAYOUT
+BEGIN
+ 0
+END
+
/////////////////////////////////////////////////////////////////////////////
//