summaryrefslogtreecommitdiff
path: root/plugins/WhenWasIt/src/notifiers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/WhenWasIt/src/notifiers.cpp')
-rw-r--r--plugins/WhenWasIt/src/notifiers.cpp159
1 files changed, 131 insertions, 28 deletions
diff --git a/plugins/WhenWasIt/src/notifiers.cpp b/plugins/WhenWasIt/src/notifiers.cpp
index f72530dd9b..7c40bb8995 100644
--- a/plugins/WhenWasIt/src/notifiers.cpp
+++ b/plugins/WhenWasIt/src/notifiers.cpp
@@ -147,50 +147,153 @@ int PopupNotifyMissedBirthday(MCONTACT hContact, int dab, int age)
return 0;
}
-int DialogNotifyBirthday(MCONTACT hContact, int dtb, int age)
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static class CUpcomingDlg *g_pUpcomingDlg = nullptr;
+
+class CUpcomingDlg : public CBasicListDlg
{
- wchar_t *name = Clist_GetContactDisplayName(hContact);
+ int timeout;
- wchar_t text[1024];
- BuildDTBText(dtb, name, text, _countof(text));
- if (!hUpcomingDlg) {
- hUpcomingDlg = CreateDialog(g_plugin.getInst(), MAKEINTRESOURCE(IDD_UPCOMING), nullptr, DlgProcUpcoming);
- ShowWindow(hUpcomingDlg, g_plugin.bOpenInBackground ? SW_SHOWNOACTIVATE : SW_SHOW);
+ CTimer m_timer;
+
+public:
+ CUpcomingDlg() :
+ CBasicListDlg(IDD_UPCOMING),
+ m_timer(this, 1002)
+ {
+ SetMinSize(400, 160);
+
+ m_timer.OnEvent = Callback(this, &CUpcomingDlg::onTimer);
+ }
+
+ bool OnInitDialog() override
+ {
+ Window_SetIcon_IcoLib(m_hwnd, hListMenu);
+
+ g_pUpcomingDlg = this;
+ timeout = g_plugin.cDlgTimeout;
+
+ m_list.SetExtendedListViewStyleEx(LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
+
+ LVCOLUMN col;
+ col.mask = LVCF_TEXT | LVCF_WIDTH;
+ col.pszText = TranslateT("Contact");
+ col.cx = 300;
+ m_list.InsertColumn(0, &col);
+
+ col.pszText = TranslateT("Age");
+ col.cx = 45;
+ m_list.InsertColumn(1, &col);
+
+ col.pszText = TranslateT("DTB");
+ col.cx = 45;
+ m_list.InsertColumn(2, &col);
+
+ m_list.SetColumnWidth(0, LVSCW_AUTOSIZE);
+
+ if (timeout > 0)
+ m_timer.Start(1000);
+
+ Utils_RestoreWindowPosition(m_hwnd, NULL, MODULENAME, "BirthdayListUpcoming");
+ return true;
+ }
+
+ void OnDestroy() override
+ {
+ g_pUpcomingDlg = nullptr;
+ Utils_SaveWindowPosition(m_hwnd, NULL, MODULENAME, "BirthdayListUpcoming");
+ Window_FreeIcon_IcoLib(m_hwnd);
+ m_timer.Stop();
+ }
+
+ void OnResize() override
+ {
+ RECT rcWin;
+ GetWindowRect(m_hwnd, &rcWin);
+
+ int cx = rcWin.right - rcWin.left;
+ int cy = rcWin.bottom - rcWin.top;
+ SetWindowPos(m_list.GetHwnd(), nullptr, 0, 0, (cx - 30), (cy - 80), (SWP_NOZORDER | SWP_NOMOVE));
+
+ m_list.SetColumnWidth(0, (cx - 150));
+ SetWindowPos(GetDlgItem(m_hwnd, IDOK), nullptr, ((cx / 2) - 95), (cy - 67), 0, 0, SWP_NOSIZE);
+ RedrawWindow(m_hwnd, nullptr, nullptr, (RDW_FRAME | RDW_INVALIDATE));
+ }
+
+ void onTimer(CTimer *)
+ {
+ const int MAX_SIZE = 512;
+ wchar_t buffer[MAX_SIZE];
+ timeout--;
+ mir_snwprintf(buffer, (timeout != 2) ? TranslateT("Closing in %d seconds") : TranslateT("Closing in %d second"), timeout);
+ SetDlgItemText(m_hwnd, IDOK, buffer);
+
+ if (timeout <= 0)
+ Close();
}
- TUpcomingBirthday data = { 0 };
- data.name = name;
- data.message = text;
- data.dtb = dtb;
- data.hContact = hContact;
- data.age = age;
+ void AddBirthDay(MCONTACT hContact, wchar_t *message, int dtb, int age)
+ {
+ LVFINDINFO fi = { 0 };
+ fi.flags = LVFI_PARAM;
+ fi.lParam = (LPARAM)hContact;
+ if (-1 != m_list.FindItem(-1, &fi))
+ return; /* Allready in list. */
+
+ int index = m_list.GetItemCount();
+ LVITEM item = { 0 };
+ item.iItem = index;
+ item.mask = LVIF_PARAM | LVIF_TEXT;
+ item.lParam = (LPARAM)hContact;
+ item.pszText = message;
+ m_list.InsertItem(&item);
+
+ wchar_t buffer[512];
+ mir_snwprintf(buffer, L"%d", age);
+ m_list.SetItemText(index, 1, buffer);
+
+ mir_snwprintf(buffer, L"%d", dtb);
+ m_list.SetItemText(index, 2, buffer);
+
+ Sort(2);
+ }
+};
+
+int DialogNotifyBirthday(MCONTACT hContact, int dtb, int age)
+{
+ wchar_t text[1024];
+ BuildDABText(dtb, Clist_GetContactDisplayName(hContact), text, _countof(text));
- SendMessage(hUpcomingDlg, WWIM_ADD_UPCOMING_BIRTHDAY, (WPARAM)&data, NULL);
+ if (!g_pUpcomingDlg) {
+ g_pUpcomingDlg = new CUpcomingDlg();
+ g_pUpcomingDlg->Show(g_plugin.bOpenInBackground ? SW_SHOWNOACTIVATE : SW_SHOW);
+ }
+
+ g_pUpcomingDlg->AddBirthDay(hContact, text, dtb, age);
return 0;
}
int DialogNotifyMissedBirthday(MCONTACT hContact, int dab, int age)
{
- wchar_t *name = Clist_GetContactDisplayName(hContact);
-
wchar_t text[1024];
- BuildDABText(dab, name, text, _countof(text));
- if (!hUpcomingDlg) {
- hUpcomingDlg = CreateDialog(g_plugin.getInst(), MAKEINTRESOURCE(IDD_UPCOMING), nullptr, DlgProcUpcoming);
- ShowWindow(hUpcomingDlg, g_plugin.bOpenInBackground ? SW_SHOWNOACTIVATE : SW_SHOW);
- }
+ BuildDABText(dab, Clist_GetContactDisplayName(hContact), text, _countof(text));
- TUpcomingBirthday data = { 0 };
- data.name = name;
- data.message = text;
- data.dtb = -dab;
- data.hContact = hContact;
- data.age = age;
+ if (!g_pUpcomingDlg) {
+ g_pUpcomingDlg = new CUpcomingDlg();
+ g_pUpcomingDlg->Show(g_plugin.bOpenInBackground ? SW_SHOWNOACTIVATE : SW_SHOW);
+ }
- SendMessage(hUpcomingDlg, WWIM_ADD_UPCOMING_BIRTHDAY, (WPARAM)&data, NULL);
+ g_pUpcomingDlg->AddBirthDay(hContact, text, -dab, age);
return 0;
}
+void CloseUpcoming()
+{
+ if (g_pUpcomingDlg)
+ g_pUpcomingDlg->Close();
+}
+
int SoundNotifyBirthday(int dtb)
{
if (dtb == 0)