diff options
Diffstat (limited to 'plugins/NewStory/src/history.cpp')
-rw-r--r-- | plugins/NewStory/src/history.cpp | 1074 |
1 files changed, 1074 insertions, 0 deletions
diff --git a/plugins/NewStory/src/history.cpp b/plugins/NewStory/src/history.cpp new file mode 100644 index 0000000000..0bc77cdaa4 --- /dev/null +++ b/plugins/NewStory/src/history.cpp @@ -0,0 +1,1074 @@ +//////////////////////////////////////////////////////////////////////// +// NewStory -- new history viewer for Miranda IM +// (c) 2005 Victor Pavlychko (nullbyte@sotline.net.ua) +// Visit http://miranda-im.org/ for details on Miranda Instant Messenger +//////////////////////////////////////////////////////////////////////// + +/* +for the date picker: + case WM_ACTIVATE: + if (wParam == WA_INACTIVE) PostMessage(m_hwndDialog, WM_CLOSE, 0, 0); + break; +*/ + +#include "headers.h" + +HANDLE hNewstoryWindows = 0; + +int evtEventAdded(WPARAM wParam, LPARAM lParam) +{ + HWND hwnd = WindowList_Find(hNewstoryWindows, (HANDLE)wParam); + SendMessage(hwnd, UM_ADDEVENT, wParam, lParam); + return 0; +} + +int evtEventDeleted(WPARAM wParam, LPARAM lParam) +{ + HWND hwnd = WindowList_Find(hNewstoryWindows, (HANDLE)wParam); + SendMessage(hwnd, UM_REMOVEEVENT, wParam, lParam); + return 0; +} + +void InitHistory() +{ + hNewstoryWindows = (HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0); + + HookEvent(ME_DB_EVENT_ADDED, evtEventAdded); + HookEvent(ME_DB_EVENT_DELETED, evtEventDeleted); +} + +void FreeHistory() +{ +} + +enum +{ + HIST_SHOW_IN = 0x001, + HIST_SHOW_OUT = 0x002, + HIST_SHOW_MSGS = 0x004, + HIST_SHOW_FILES = 0x008, + HIST_SHOW_URLS = 0x010, + HIST_SHOW_STATUS = 0x020, + HIST_SHOW_OTHER = 0x040, + HIST_AUTO_FILTER = 0x080, +}; + +enum +{ + WND_OPT_TIMETREE = 0x01, + WND_OPT_SEARCHBAR = 0x02, + WND_OPT_FILTERBAR = 0x04 +}; + +enum +{ + WND_SPACING = 4, + TBTN_SIZE = 25, + TBTN_SPACER = 10 +}; + +enum +{ + TBTN_USERINFO, TBTN_USERMENU, TBTN_MESSAGE, + TBTN_SEARCH, TBTN_FILTER, TBTN_DATEPOPUP, + TBTN_COPY, TBTN_EXPORT, + TBTN_LOGOPTIONS, TBTN_SECURITY, TBTN_CLOSE, + TBTN_COUNT +}; + +int tbtnSpacing[TBTN_COUNT] = {0, 0, TBTN_SPACER, 0, 0, TBTN_SPACER, 0, -1, 0, 0, 0}; + +struct InfoBarEvents +{ + HWND hwndIco, hwndIcoIn, hwndIcoOut; + HWND hwndTxt, hwndTxtIn, hwndTxtOut; +}; + +struct WindowData +{ + HMENU hMenu; + WORD showFlags; + bool gonnaRedraw; + bool isContactHistory; + HANDLE hContact; + int lastYear, lastMonth, lastDay; + HTREEITEM hLastYear, hLastMonth, hLastDay; + bool disableTimeTreeChange; + + // window flags + DWORD wndOptions; + + // toolbar buttons + HWND hwndBtnToolbar[TBTN_COUNT]; + // main controls + HWND hwndTimeTree; + HWND hwndLog; + // searchbar + HWND hwndBtnCloseSearch, hwndBtnFindNext, hwndBtnFindPrev; + HWND hwndSearchText; + // statusbar + HWND hwndStatus; + // filter bar + HWND hwndChkDateFrom, hwndChkDateTo; + HWND hwndDateFrom, hwndDateTo; + InfoBarEvents ibMessages, ibFiles, ibUrls, ibTotal; +}; + +void LayoutFilterBar(HDWP hDwp, HWND hwnd, int x, int y, int w, InfoBarEvents *ib) +{ + hDwp = DeferWindowPos(hDwp, ib->hwndIco, 0, + x, y, 16, 16, SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, ib->hwndTxt, 0, + x+16+WND_SPACING, y, w-16-WND_SPACING, 16, SWP_NOZORDER); + + hDwp = DeferWindowPos(hDwp, ib->hwndIcoIn, 0, + x+16, y+16+WND_SPACING, 16, 16, SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, ib->hwndTxtIn, 0, + x+32+WND_SPACING, y+16+WND_SPACING, w-WND_SPACING-32, 16, SWP_NOZORDER); + + hDwp = DeferWindowPos(hDwp, ib->hwndIcoOut, 0, + x+16, y+(16+WND_SPACING)*2, 16, 16, SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, ib->hwndTxtOut, 0, + x+32+WND_SPACING, y+(16+WND_SPACING)*2, w-WND_SPACING-32, 16, SWP_NOZORDER); + +} + +void ShowHideControls(HWND hwnd, WindowData *data) +{ + int cmd; + + cmd = (data->wndOptions & WND_OPT_FILTERBAR) ? SW_SHOW : SW_HIDE; + ShowWindow(data->ibMessages.hwndIco, cmd); + ShowWindow(data->ibMessages.hwndIcoIn, cmd); + ShowWindow(data->ibMessages.hwndIcoOut, cmd); + ShowWindow(data->ibMessages.hwndTxt, cmd); + ShowWindow(data->ibMessages.hwndTxtIn, cmd); + ShowWindow(data->ibMessages.hwndTxtOut, cmd); + ShowWindow(data->ibFiles.hwndIco, cmd); + ShowWindow(data->ibFiles.hwndIcoIn, cmd); + ShowWindow(data->ibFiles.hwndIcoOut, cmd); + ShowWindow(data->ibFiles.hwndTxt, cmd); + ShowWindow(data->ibFiles.hwndTxtIn, cmd); + ShowWindow(data->ibFiles.hwndTxtOut, cmd); + ShowWindow(data->ibUrls.hwndIco, cmd); + ShowWindow(data->ibUrls.hwndIcoIn, cmd); + ShowWindow(data->ibUrls.hwndIcoOut, cmd); + ShowWindow(data->ibUrls.hwndTxt, cmd); + ShowWindow(data->ibUrls.hwndTxtIn, cmd); + ShowWindow(data->ibUrls.hwndTxtOut, cmd); + ShowWindow(data->ibTotal.hwndIco, cmd); + ShowWindow(data->ibTotal.hwndIcoIn, cmd); + ShowWindow(data->ibTotal.hwndIcoOut, cmd); + ShowWindow(data->ibTotal.hwndTxt, cmd); + ShowWindow(data->ibTotal.hwndTxtIn, cmd); + ShowWindow(data->ibTotal.hwndTxtOut, cmd); + ShowWindow(data->hwndDateFrom, cmd); + ShowWindow(data->hwndDateTo, cmd); + ShowWindow(data->hwndChkDateFrom, cmd); + ShowWindow(data->hwndChkDateTo, cmd); + ShowWindow(GetDlgItem(hwnd, IDC_IB_SEPARATOR), cmd); + + cmd = (data->wndOptions & WND_OPT_SEARCHBAR) ? SW_SHOW : SW_HIDE; + ShowWindow(data->hwndBtnCloseSearch, cmd); + ShowWindow(data->hwndBtnFindNext, cmd); + ShowWindow(data->hwndBtnFindPrev, cmd); + ShowWindow(data->hwndSearchText, cmd); +} + +void LayoutHistoryWnd(HWND hwnd, WindowData *data) +{ + int i; + RECT rc; + GetClientRect(hwnd, &rc); + int x, y; // tmp vars + int w = rc.right - rc.left; + int h = rc.bottom - rc.top; + + HDWP hDwp = BeginDeferWindowPos(50); + + // toolbar + int hToolBar = TBTN_SIZE + WND_SPACING; + x = WND_SPACING; + int btnReverse = -1; + for (i = 0; i < TBTN_COUNT; ++i) + { + hDwp = DeferWindowPos(hDwp, data->hwndBtnToolbar[i], 0, + x, WND_SPACING, + TBTN_SIZE, TBTN_SIZE, + SWP_NOZORDER); + x += TBTN_SIZE + tbtnSpacing[i]; + if (tbtnSpacing[i] < 0) + { + btnReverse = i; + break; + } + } + x = w - WND_SPACING - TBTN_SIZE; + for (i = TBTN_COUNT-1; i > btnReverse; --i) + { + hDwp = DeferWindowPos(hDwp, data->hwndBtnToolbar[i], 0, + x, WND_SPACING, + TBTN_SIZE, TBTN_SIZE, + SWP_NOZORDER); + x -= TBTN_SIZE + tbtnSpacing[i-1]; + } + + // infobar +// hDwp = DeferWindowPos(hDwp, data->hwndIcoProtocol, 0, +// w-100+WND_SPACING, WND_SPACING, +// 16, 16, +// SWP_NOZORDER); +// hDwp = DeferWindowPos(hDwp, data->hwndTxtNickname, 0, +// w-100+WND_SPACING*2+16, WND_SPACING, +// 100, 16, +// SWP_NOZORDER); +// hDwp = DeferWindowPos(hDwp, data->hwndTxtUID, 0, +// w-100+WND_SPACING*2+16, WND_SPACING*2+16, +// 100, 16, +// SWP_NOZORDER); + + // filter bar + int hFilterBar = 0; + if (data->wndOptions & WND_OPT_FILTERBAR) + { + hFilterBar = WND_SPACING + (16 + WND_SPACING)*3; + LayoutFilterBar(hDwp, hwnd, WND_SPACING+(WND_SPACING+75)*0, WND_SPACING*2 + hToolBar, 75, &data->ibMessages); + LayoutFilterBar(hDwp, hwnd, WND_SPACING+(WND_SPACING+75)*1, WND_SPACING*2 + hToolBar, 75, &data->ibFiles); + LayoutFilterBar(hDwp, hwnd, WND_SPACING+(WND_SPACING+75)*2, WND_SPACING*2 + hToolBar, 75, &data->ibUrls); + LayoutFilterBar(hDwp, hwnd, WND_SPACING+(WND_SPACING+75)*3, WND_SPACING*2 + hToolBar, 75, &data->ibTotal); + + GetWindowRect(data->hwndChkDateFrom, &rc); + x = rc.right - rc.left; + GetWindowRect(data->hwndDateFrom, &rc); + y = hToolBar + WND_SPACING + (WND_SPACING + (16 + WND_SPACING)*3 - (rc.bottom-rc.top)*2 - WND_SPACING)/2; + hDwp = DeferWindowPos(hDwp, data->hwndChkDateFrom, 0, + w-x-(rc.right-rc.left)-WND_SPACING*2, y, + x, rc.bottom-rc.top, + SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, data->hwndDateFrom, 0, + w-(rc.right-rc.left)-WND_SPACING, y, + rc.right-rc.left, rc.bottom-rc.top, + SWP_NOZORDER); + + hDwp = DeferWindowPos(hDwp, data->hwndChkDateTo, 0, + w-x-(rc.right-rc.left)-WND_SPACING*2, y + (rc.bottom-rc.top) + WND_SPACING, + x, rc.bottom-rc.top, + SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, data->hwndDateTo, 0, + w-(rc.right-rc.left)-WND_SPACING, y + (rc.bottom-rc.top) + WND_SPACING, + rc.right-rc.left, rc.bottom-rc.top, + SWP_NOZORDER); + + hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_IB_SEPARATOR), 0, + WND_SPACING, hToolBar + WND_SPACING, + w-WND_SPACING*2, 2, + SWP_NOZORDER); + } + + // general + GetWindowRect(data->hwndStatus, &rc); + int hStatus = rc.bottom - rc.top; + hDwp = DeferWindowPos(hDwp, data->hwndStatus, 0, + 0, h-hStatus, + w, hStatus, + SWP_NOZORDER); + + int hSearch = 0; + if (data->wndOptions & WND_OPT_SEARCHBAR) + { + GetWindowRect(data->hwndSearchText, &rc); + hSearch = rc.bottom - rc.top; + hDwp = DeferWindowPos(hDwp, data->hwndBtnCloseSearch, 0, + WND_SPACING, h-hSearch-hStatus-WND_SPACING, + TBTN_SIZE, hSearch, SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, data->hwndSearchText, 0, + TBTN_SIZE+WND_SPACING*2, h-hSearch-hStatus-WND_SPACING, + w-WND_SPACING*4-TBTN_SIZE*3, hSearch, + SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, data->hwndBtnFindPrev, 0, + w-WND_SPACING-TBTN_SIZE*2, h-hSearch-hStatus-WND_SPACING, + TBTN_SIZE, hSearch, + SWP_NOZORDER); + hDwp = DeferWindowPos(hDwp, data->hwndBtnFindNext, 0, + w-WND_SPACING-TBTN_SIZE*1, h-hSearch-hStatus-WND_SPACING, + TBTN_SIZE, hSearch, + SWP_NOZORDER); + hSearch += WND_SPACING; + } + + hDwp = DeferWindowPos(hDwp, data->hwndLog, 0, + WND_SPACING, hToolBar+hFilterBar+WND_SPACING, + w-WND_SPACING*2, h-WND_SPACING*2-hFilterBar-hToolBar-hSearch-hStatus, + SWP_NOZORDER); + + EndDeferWindowPos(hDwp); +// InvalidateRect(hwnd, 0, FALSE); +} + +/* +bool ExportHistoryDialog(HANDLE hContact, HWND hwndHistory) +{ + int filterIndex = 0; + char *filter = 0; + char filterSize = 0; + + char *templates[100] = {0}; + int nTemplates = 0; + + WIN32_FIND_DATA ffd; + HANDLE hFind = FindFirstFile("plugins\\newstory\\x_*.txt", &ffd); + while (hFind != INVALID_HANDLE_VALUE) + { + char *fn = (char *)malloc(MAX_PATH); + wsprintf(fn, "plugins\\newstory\\%s", ffd.cFileName); + + char *szSignature = "newstory export template"; + char line[1024]; + FILE *f = fopen(fn, "r"); + fgets(line, 1024, f); + if (*line) line[lstrlen(line)-1] = 0; + if (!lstrcmp(line, szSignature)) + { + fgets(line, 1024, f); + if (*line) line[lstrlen(line)-1] = 0; + + char *title = strdup(Translate(line)); + + fgets(line, 1024, f); + if (*line) line[lstrlen(line)-1] = 0; + char *ext = line; + + // <title> (*.<ext>)\0*.<ext>\0 + int newFilterSize = filterSize + lstrlen(title) + 2*lstrlen(ext) + 9; + char *newFilter = (char *)calloc(newFilterSize+1, 1); + + if (filterSize) + memcpy(newFilter, filter, filterSize); + + char buf[1024]; + wsprintf(buf, "%s (*.%s)%c*.%s%c", title, ext, '\0', ext, '\0'); + memcpy(newFilter+filterSize, buf, newFilterSize-filterSize); + + free(filter); + filter = newFilter; + filterSize = newFilterSize; + + templates[nTemplates++] = fn; + + free(title); + } else + { + free(fn); + } + fclose(f); + + if (!FindNextFile(hFind, &ffd)) + break; + } + + + char filename[MAX_PATH] = {0}; + + OPENFILENAME ofn = {0}; + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hwndHistory; + ofn.hInstance = hInst; + ofn.lpstrFilter = filter; + ofn.lpstrCustomFilter = 0; + ofn.nMaxCustFilter = 0; + ofn.nFilterIndex = filterIndex; + ofn.lpstrFile = filename; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrFileTitle = 0; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = 0; + ofn.lpstrTitle = Translate("Export History..."); + ofn.Flags = OFN_ENABLESIZING|OFN_LONGNAMES|OFN_NOCHANGEDIR|OFN_NOREADONLYRETURN|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST; + ofn.lpstrDefExt = 0; + ofn.lCustData = 0; + ofn.lpfnHook = 0; + ofn.lpTemplateName = 0; + ofn.FlagsEx = 0; + + if (GetSaveFileName(&ofn)) + { +// ofn.nFilterIndex; + ExportHistory(hContact, templates[ofn.nFilterIndex-1], ofn.lpstrFile, hwndHistory); + } + + for (int i = 0; i < 100; i++) + if (templates[i]) + free(templates[i]); + + return false; +} +*/ + +int CALLBACK HistoryDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + CallSnappingWindowProc(hwnd, msg, wParam, lParam); + + WindowData *data = (WindowData *)GetWindowLong(hwnd, GWL_USERDATA); + + if ((msg >= NSM_FIRST) && (msg < NSM_LAST)) + { + int result = SendMessage(GetDlgItem(hwnd, IDC_ITEMS2), msg, wParam, lParam); + SetWindowLong(hwnd, DWL_MSGRESULT, result); + return result; + } + + switch (msg) + { + case WM_INITDIALOG: + { + data = new WindowData; + data->hContact = (HANDLE)lParam; + data->disableTimeTreeChange = false; + data->showFlags = DBGetContactSettingWord(data->hContact, MODULENAME, "showFlags", 0x7f); + data->lastYear = data->lastMonth = data->lastDay = -1; + data->hLastYear = data->hLastMonth = data->hLastDay = 0; + + data->wndOptions = 0; + + // get handles + data->hwndBtnToolbar[TBTN_USERINFO] = GetDlgItem(hwnd, IDC_USERINFO); + data->hwndBtnToolbar[TBTN_USERMENU] = GetDlgItem(hwnd, IDC_USERMENU); + data->hwndBtnToolbar[TBTN_MESSAGE] = GetDlgItem(hwnd, IDC_MESSAGE); + data->hwndBtnToolbar[TBTN_SEARCH] = GetDlgItem(hwnd, IDC_SEARCH); + data->hwndBtnToolbar[TBTN_COPY] = GetDlgItem(hwnd, IDC_COPY); + data->hwndBtnToolbar[TBTN_EXPORT] = GetDlgItem(hwnd, IDC_EXPORT); + data->hwndBtnToolbar[TBTN_LOGOPTIONS] = GetDlgItem(hwnd, IDC_LOGOPTIONS); + data->hwndBtnToolbar[TBTN_FILTER] = GetDlgItem(hwnd, IDC_FILTER); + data->hwndBtnToolbar[TBTN_DATEPOPUP] = GetDlgItem(hwnd, IDC_DATEPOPUP); + data->hwndBtnToolbar[TBTN_SECURITY] = GetDlgItem(hwnd, IDC_SECURITY); + data->hwndBtnToolbar[TBTN_CLOSE] = GetDlgItem(hwnd, IDC_CLOSE); + data->hwndLog = GetDlgItem(hwnd, IDC_ITEMS2); + data->hwndBtnCloseSearch = GetDlgItem(hwnd, IDC_SEARCHICON); + data->hwndBtnFindPrev = GetDlgItem(hwnd, IDC_FINDPREV); + data->hwndBtnFindNext = GetDlgItem(hwnd, IDC_FINDNEXT); + data->hwndSearchText = GetDlgItem(hwnd, IDC_SEARCHTEXT); + data->hwndStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hwnd, NULL, hInst, NULL); + SendMessage(data->hwndStatus, SB_SETMINHEIGHT, GetSystemMetrics(SM_CYSMICON), 0); + + // filterbar + SendMessage(data->hwndBtnToolbar[TBTN_FILTER], BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->hwndBtnToolbar[TBTN_SEARCH], BUTTONSETASPUSHBTN, 0, 0); + + data->hwndChkDateFrom = GetDlgItem(hwnd, IDC_CHK_DATE_FROM); + data->hwndChkDateTo= GetDlgItem(hwnd, IDC_CHK_DATE_TO); + data->hwndDateFrom = GetDlgItem(hwnd, IDC_DATE_FROM); + data->hwndDateTo= GetDlgItem(hwnd, IDC_DATE_TO); + + data->ibMessages.hwndIco = GetDlgItem(hwnd, IDC_ICO_MESSAGES); + data->ibMessages.hwndTxt = GetDlgItem(hwnd, IDC_TXT_MESSAGES); + data->ibMessages.hwndIcoIn = GetDlgItem(hwnd, IDC_ICO_MESSAGES_IN); + SendMessage(data->ibMessages.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibMessages.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibMessages.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); + data->ibMessages.hwndTxtIn = GetDlgItem(hwnd, IDC_TXT_MESSAGES_IN); + data->ibMessages.hwndIcoOut = GetDlgItem(hwnd, IDC_ICO_MESSAGES_OUT); + SendMessage(data->ibMessages.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibMessages.hwndIcoOut, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibMessages.hwndIcoOut, BM_SETCHECK, BST_CHECKED, 0); + data->ibMessages.hwndTxtOut = GetDlgItem(hwnd, IDC_TXT_MESSAGES_OUT); + + data->ibFiles.hwndIco = GetDlgItem(hwnd, IDC_ICO_FILES); + data->ibFiles.hwndTxt = GetDlgItem(hwnd, IDC_TXT_FILES); + data->ibFiles.hwndIcoIn = GetDlgItem(hwnd, IDC_ICO_FILES_IN); + SendMessage(data->ibFiles.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibFiles.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibFiles.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); + data->ibFiles.hwndTxtIn = GetDlgItem(hwnd, IDC_TXT_FILES_IN); + data->ibFiles.hwndIcoOut = GetDlgItem(hwnd, IDC_ICO_FILES_OUT); + SendMessage(data->ibFiles.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibFiles.hwndIcoOut, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibFiles.hwndIcoOut, BM_SETCHECK, BST_CHECKED, 0); + data->ibFiles.hwndTxtOut = GetDlgItem(hwnd, IDC_TXT_FILES_OUT); + + data->ibUrls.hwndIco = GetDlgItem(hwnd, IDC_ICO_URLS); + data->ibUrls.hwndTxt = GetDlgItem(hwnd, IDC_TXT_URLS); + data->ibUrls.hwndIcoIn = GetDlgItem(hwnd, IDC_ICO_URLS_IN); + SendMessage(data->ibUrls.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibUrls.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibUrls.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); + data->ibUrls.hwndTxtIn = GetDlgItem(hwnd, IDC_TXT_URLS_IN); + data->ibUrls.hwndIcoOut = GetDlgItem(hwnd, IDC_ICO_URLS_OUT); + SendMessage(data->ibUrls.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibUrls.hwndIcoOut, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibUrls.hwndIcoOut, BM_SETCHECK, BST_CHECKED, 0); + data->ibUrls.hwndTxtOut = GetDlgItem(hwnd, IDC_TXT_URLS_OUT); + + data->ibTotal.hwndIco = GetDlgItem(hwnd, IDC_ICO_TOTAL); + data->ibTotal.hwndTxt = GetDlgItem(hwnd, IDC_TXT_TOTAL); + data->ibTotal.hwndIcoIn = GetDlgItem(hwnd, IDC_ICO_TOTAL_IN); + SendMessage(data->ibTotal.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibTotal.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibTotal.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); + data->ibTotal.hwndTxtIn = GetDlgItem(hwnd, IDC_TXT_TOTAL_IN); + data->ibTotal.hwndIcoOut = GetDlgItem(hwnd, IDC_ICO_TOTAL_OUT); + SendMessage(data->ibTotal.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); + SendMessage(data->ibTotal.hwndIcoOut, BUTTONSETASPUSHBTN, 0, 0); + SendMessage(data->ibTotal.hwndIcoOut, BM_SETCHECK, BST_CHECKED, 0); + data->ibTotal.hwndTxtOut = GetDlgItem(hwnd, IDC_TXT_TOTAL_OUT); + + SetWindowLong(hwnd, GWL_USERDATA, (LONG)data); + + data->hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUPS)); + CallService(MS_LANGPACK_TRANSLATEMENU, (WPARAM)data->hMenu, 0); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_INCOMING, + data->showFlags&HIST_SHOW_IN ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_OUTGOING, + data->showFlags&HIST_SHOW_OUT ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_MESSAGES, + data->showFlags&HIST_SHOW_MSGS ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_FILES, + data->showFlags&HIST_SHOW_FILES ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_URLS, + data->showFlags&HIST_SHOW_URLS ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_STATUS, + data->showFlags&HIST_SHOW_STATUS ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_OTHER, + data->showFlags&HIST_SHOW_OTHER ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetSubMenu(data->hMenu, 1), IDD_FILTER_AUTO, + data->showFlags&HIST_AUTO_FILTER ? MF_CHECKED : MF_UNCHECKED); + +// CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_LOGOPTIONS_SHOWTIMETREE, +// data->showFlags&HIST_TIMETREE ? MF_CHECKED : MF_UNCHECKED); +// ShowWindow(GetDlgItem(hwnd, IDC_TIMETREE), data->showFlags&HIST_TIMETREE ? SW_SHOW : SW_HIDE); + + // Ask for layout + PostMessage(hwnd, WM_SIZE, 0, 0); + + SendMessage(GetDlgItem(hwnd, IDC_USERINFO), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_MESSAGE), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_USERMENU), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_COPY), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_LOGOPTIONS),BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_FILTER), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_DATEPOPUP), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_SEARCH), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_EXPORT), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_CLOSE), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_SECURITY), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_FINDPREV), BUTTONSETASFLATBTN, 0, 0); + SendMessage(GetDlgItem(hwnd, IDC_FINDNEXT), BUTTONSETASFLATBTN, 0, 0); + + SendMessage(GetDlgItem(hwnd, IDC_USERINFO), BUTTONADDTOOLTIP, (WPARAM)Translate("User Info"), 0); + SendMessage(GetDlgItem(hwnd, IDC_MESSAGE), BUTTONADDTOOLTIP, (WPARAM)Translate("Send Message"), 0); + SendMessage(GetDlgItem(hwnd, IDC_USERMENU), BUTTONADDTOOLTIP, (WPARAM)Translate("User Menu"), 0); + SendMessage(GetDlgItem(hwnd, IDC_COPY), BUTTONADDTOOLTIP, (WPARAM)Translate("Copy"), 0); + SendMessage(GetDlgItem(hwnd, IDC_LOGOPTIONS),BUTTONADDTOOLTIP, (WPARAM)Translate("Options"), 0); + SendMessage(GetDlgItem(hwnd, IDC_FILTER), BUTTONADDTOOLTIP, (WPARAM)Translate("Filter"), 0); + SendMessage(GetDlgItem(hwnd, IDC_DATEPOPUP), BUTTONADDTOOLTIP, (WPARAM)Translate("Jump2Date"), 0); + SendMessage(GetDlgItem(hwnd, IDC_SEARCH), BUTTONADDTOOLTIP, (WPARAM)Translate("Search..."), 0); + SendMessage(GetDlgItem(hwnd, IDC_EXPORT), BUTTONADDTOOLTIP, (WPARAM)Translate("Export..."), 0); + SendMessage(GetDlgItem(hwnd, IDC_CLOSE), BUTTONADDTOOLTIP, (WPARAM)Translate("Close"), 0); + SendMessage(GetDlgItem(hwnd, IDC_SECURITY), BUTTONADDTOOLTIP, (WPARAM)Translate("Security Options"), 0); + SendMessage(GetDlgItem(hwnd, IDC_FINDPREV), BUTTONADDTOOLTIP, (WPARAM)Translate("Find Previous"), 0); + SendMessage(GetDlgItem(hwnd, IDC_FINDNEXT), BUTTONADDTOOLTIP, (WPARAM)Translate("Find Next"), 0); + + WindowList_Add(hNewstoryWindows, hwnd, data->hContact); + + if (data->hContact && (data->hContact != INVALID_HANDLE_VALUE)) + { + TCHAR *title = TplFormatString(TPL_TITLE, data->hContact, 0); + SetWindowText(hwnd, title); + free(title); + } else + if (data->hContact == INVALID_HANDLE_VALUE) + { + SetWindowText(hwnd, TranslateT("Newstory Search Results")); + } else + { + SetWindowText(hwnd, TranslateT("System Newstory")); + } + + if (data->hContact != INVALID_HANDLE_VALUE) + { +// ShowWindow(GetDlgItem(hwnd, IDC_TIMETREE), SW_HIDE); +// ShowWindow(GetDlgItem(hwnd, IDC_ITEMS), SW_HIDE); +// ShowWindow(GetDlgItem(hwnd, IDC_ITEMS2), SW_HIDE); +// ShowWindow(GetDlgItem(hwnd, IDC_SEARCHICON), SW_HIDE); + PostMessage(GetDlgItem(hwnd, IDC_ITEMS2), WM_USER, (WPARAM)data->hContact, 0); + } + + SendMessage(hwnd, UM_UPDATEICONS, 0, 0); + SetFocus(GetDlgItem(hwnd, IDC_ITEMS2)); + + RECT rc; + rc.left = (int)DBGetContactSettingDword(data->hContact, MODULENAME, "left", 0); + rc.top = (int)DBGetContactSettingDword(data->hContact, MODULENAME, "top", 0); + rc.right = (int)DBGetContactSettingDword(data->hContact, MODULENAME, "right", 0); + rc.bottom = (int)DBGetContactSettingDword(data->hContact, MODULENAME, "bottom", 0); + if ((rc.left-rc.right) && (rc.top-rc.bottom)) + MoveWindow(hwnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, TRUE); + + ShowHideControls(hwnd, data); + + return TRUE; + } + + case WM_MOUSEWHEEL: + SendMessage(GetDlgItem(hwnd, IDC_CUSTOM1), msg, wParam, lParam); + return TRUE; + + case WM_SETFOCUS: + SetFocus(GetDlgItem(hwnd, IDC_CUSTOM1)); + return TRUE; + + case UM_UPDATEICONS: + { + SendMessage(hwnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)icons[ICO_NEWSTORY].hIcon); + + SendMessage(GetDlgItem(hwnd, IDC_SEARCHICON), STM_SETICON, (WPARAM)icons[ICO_SEARCH].hIcon, 0); + + SendMessage(GetDlgItem(hwnd, IDC_USERINFO), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_USERINFO].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_MESSAGE), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_SENDMSG].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_USERMENU), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_USERMENU].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_COPY), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_COPY].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_LOGOPTIONS),BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_OPTIONS].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_FILTER), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_FILTER].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_DATEPOPUP), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_CALENDAR].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_SEARCH), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_SEARCH].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_EXPORT), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_EXPORT].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_CLOSE), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_CLOSE].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_FINDPREV), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_FINDPREV].hIcon); + SendMessage(GetDlgItem(hwnd, IDC_FINDNEXT), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_FINDNEXT].hIcon); + + SendMessage(data->ibMessages.hwndIco, STM_SETICON, (LPARAM)icons[ICO_SENDMSG].hIcon, 0); + SendMessage(data->ibMessages.hwndIcoIn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGIN].hIcon); + SendMessage(data->ibMessages.hwndIcoOut, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGOUT].hIcon); + SendMessage(data->ibFiles.hwndIco, STM_SETICON, (LPARAM)icons[ICO_FILE].hIcon, 0); + SendMessage(data->ibFiles.hwndIcoIn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGIN].hIcon); + SendMessage(data->ibFiles.hwndIcoOut, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGOUT].hIcon); + SendMessage(data->ibUrls.hwndIco, STM_SETICON, (LPARAM)icons[ICO_URL].hIcon, 0); + SendMessage(data->ibUrls.hwndIcoIn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGIN].hIcon); + SendMessage(data->ibUrls.hwndIcoOut, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGOUT].hIcon); + SendMessage(data->ibTotal.hwndIco, STM_SETICON, (LPARAM)icons[ICO_UNKNOWN].hIcon, 0); + SendMessage(data->ibTotal.hwndIcoIn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGIN].hIcon); + SendMessage(data->ibTotal.hwndIcoOut, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_MSGOUT].hIcon); + + if (CheckPassword(data->hContact, "")) + SendMessage(GetDlgItem(hwnd, IDC_SECURITY), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_NOPASSWORD].hIcon); + else + SendMessage(GetDlgItem(hwnd, IDC_SECURITY), BM_SETIMAGE, IMAGE_ICON, (LPARAM)icons[ICO_PASSWORD].hIcon); + + break; + } + + case UM_REBUILDLIST: + { +// if (data->showFlags & HIST_TIMETREE) +// ShowWindow(GetDlgItem(hwnd, IDC_TIMETREE), SW_SHOW); +// ShowWindow(GetDlgItem(hwnd, IDC_ITEMS2), SW_SHOW); +// ShowWindow(GetDlgItem(hwnd, IDC_SEARCHICON), SW_SHOW); + + return TRUE; + } + +/* + case UM_JUMP2TIME: + { + for (int i = 0; i < data->eventCount; i++) + { + ItemData *idata = (ItemData *)SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_GETITEMDATA, i, 0); + if (idata->dbe->timestamp >= wParam) + { + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SETCARETINDEX, i, 0); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SETTOPINDEX, i, 0); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SELITEMRANGE, FALSE, MAKELPARAM(0,data->eventCount)); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SELITEMRANGE, TRUE, MAKELPARAM(i,i)); + break; + } + } + return TRUE; + } +*/ + case WM_MEASUREITEM: + { + LPMEASUREITEMSTRUCT lpmis; + lpmis = (LPMEASUREITEMSTRUCT) lParam; + + if (lpmis->CtlType == ODT_MENU) + return CallService(MS_CLIST_MENUMEASUREITEM, wParam, lParam); + + lpmis->itemHeight = 25; + return TRUE; + } + + case WM_SIZE: + { + LayoutHistoryWnd(hwnd, data); + return TRUE; + } + + case WM_CHARTOITEM: + { + if (!((GetKeyState(VK_CONTROL)&0x80) || (GetKeyState(VK_MENU)&0x80))) + { + TCHAR s[] = { LOWORD(wParam), 0 }; + SetWindowText(GetDlgItem(hwnd, IDC_SEARCHTEXT), s); + SendMessage(GetDlgItem(hwnd, IDC_SEARCHTEXT), EM_SETSEL, 1, 1); + SetFocus(GetDlgItem(hwnd, IDC_SEARCHTEXT)); + } + return -1; + } + + case WM_CLOSE: + { + WindowList_Remove(hNewstoryWindows, hwnd); + + DBWriteContactSettingWord(data->hContact, MODULENAME, "showFlags", data->showFlags); + RECT rc; + GetWindowRect(hwnd, &rc); + DBWriteContactSettingDword(data->hContact, MODULENAME, "left", rc.left); + DBWriteContactSettingDword(data->hContact, MODULENAME, "top", rc.top); + DBWriteContactSettingDword(data->hContact, MODULENAME, "right", rc.right); + DBWriteContactSettingDword(data->hContact, MODULENAME, "bottom", rc.bottom); + +// CLCombo_Cleanup(GetDlgItem(hwnd, IDC_USERLIST)); + + DestroyMenu(data->hMenu); + delete data; + DestroyWindow(hwnd); + return TRUE; + } + + case WM_DRAWITEM: + { + LPDRAWITEMSTRUCT lpdis; + lpdis = (LPDRAWITEMSTRUCT) lParam; + + if (lpdis->CtlType == ODT_MENU) + return CallService(MS_CLIST_MENUDRAWITEM, wParam, lParam); + + if (lpdis->itemID == -1) + return FALSE; + + return TRUE; + } + + case WM_NOTIFY: + { + LPNMHDR hdr = (LPNMHDR)lParam; + switch (hdr->idFrom) + { + case IDC_TIMETREE: + { + switch (hdr->code) + { + case TVN_SELCHANGED: + { + if (data->disableTimeTreeChange) + { + data->disableTimeTreeChange = false; + } else + { + LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; + int id = pnmtv->itemNew.lParam; +// SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SETCARETINDEX, id, 0); +// SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_ITEMS, LBN_SELCHANGE), (LPARAM)GetDlgItem(hwnd, IDC_ITEMS)); +// SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SETTOPINDEX, id, 0); +// SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SELITEMRANGE, FALSE, MAKELPARAM(0,data->eventCount)); +// SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SELITEMRANGE, TRUE, MAKELPARAM(id,id)); + } + break; + } + } + break; + } + } + return TRUE; + } + + case WM_COMMAND: + { + if (CallService(MS_CLIST_MENUPROCESSCOMMAND, MAKEWPARAM(LOWORD(wParam), MPCF_CONTACTMENU), (LPARAM) data->hContact)) + return TRUE; + switch(LOWORD(wParam)) + { + case IDCANCEL: + case IDC_CLOSE: + SendMessage(hwnd, WM_CLOSE, 0, 0); + break; + + case IDC_MESSAGE: + CallService(MS_MSG_SENDMESSAGE, (WPARAM)data->hContact, 0); + break; + + case IDC_USERINFO: + CallService(MS_USERINFO_SHOWDIALOG, (WPARAM)data->hContact, 0); + break; + + case IDC_DATEPOPUP: + { + RECT rc; + GetWindowRect(GetDlgItem(hwnd, LOWORD(wParam)), &rc); + time_t tm_jump = CalendarTool_Show(hwnd, rc.left, rc.bottom); + if (tm_jump) PostMessage(hwnd, UM_JUMP2TIME, tm_jump, 0); + break; + } + + case IDC_USERMENU: + { + RECT rc; + HMENU hMenu = (HMENU) CallService(MS_CLIST_MENUBUILDCONTACT, (WPARAM)data->hContact, 0); + GetWindowRect(GetDlgItem(hwnd, LOWORD(wParam)), &rc); + TrackPopupMenu(hMenu, 0, rc.left, rc.bottom, 0, hwnd, NULL); + DestroyMenu(hMenu); + break; + } + + case IDC_LOGOPTIONS: + { + RECT rc; + GetWindowRect(GetDlgItem(hwnd, LOWORD(wParam)), &rc); + DWORD itemID = 0; + switch (TrackPopupMenu(GetSubMenu(data->hMenu, 2), TPM_RETURNCMD, rc.left, rc.bottom, 0, hwnd, NULL)) + { +// case ID_LOGOPTIONS_SHOWTIMETREE: +// { +// data->showFlags = toggleBit(data->showFlags, HIST_TIMETREE); +// CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_LOGOPTIONS_SHOWTIMETREE, +// data->showFlags&HIST_TIMETREE ? MF_CHECKED : MF_UNCHECKED); +// ShowWindow(GetDlgItem(hwnd, IDC_TIMETREE), data->showFlags&HIST_TIMETREE ? SW_SHOW : SW_HIDE); +// break; +// } + + case ID_LOGOPTIONS_OPTIONS: + { + OptShowPage = 0; + OPENOPTIONSDIALOG ood; + ood.cbSize = sizeof(ood); + ood.pszGroup = 0; + ood.pszPage = "Newstory"; + CallService(MS_OPT_OPENOPTIONS, 0, (LPARAM)&ood); + break; + } + case ID_LOGOPTIONS_TEMPLATES: + { + OptShowPage = 1; + OPENOPTIONSDIALOG ood; + ood.cbSize = sizeof(ood); + ood.pszGroup = 0; + ood.pszPage = "Newstory"; + CallService(MS_OPT_OPENOPTIONS, 0, (LPARAM)&ood); + break; + } + case ID_LOGOPTIONS_PASSWORDS: + { + OptShowPage = 2; + OPENOPTIONSDIALOG ood; + ood.cbSize = sizeof(ood); + ood.pszGroup = 0; + ood.pszPage = "Newstory"; + CallService(MS_OPT_OPENOPTIONS, 0, (LPARAM)&ood); + break; + } + } + PostMessage(hwnd, WM_SIZE, 0, 0); + break; + } + + case IDC_SEARCH: + { + if (data->wndOptions & WND_OPT_SEARCHBAR) + { + data->wndOptions &= ~WND_OPT_SEARCHBAR; + } else + { + data->wndOptions |= WND_OPT_SEARCHBAR; + } + ShowHideControls(hwnd, data); + LayoutHistoryWnd(hwnd, data); + break; + } + + case IDC_FILTER: + { + if (data->wndOptions & WND_OPT_FILTERBAR) + { + data->wndOptions &= ~WND_OPT_FILTERBAR; + } else + { + data->wndOptions |= WND_OPT_FILTERBAR; + } + ShowHideControls(hwnd, data); + LayoutHistoryWnd(hwnd, data); + break; + + RECT rc; + GetWindowRect(GetDlgItem(hwnd, LOWORD(wParam)), &rc); + DWORD itemID = 0; + bool doFilter = true; + switch (TrackPopupMenu(GetSubMenu(data->hMenu, 1), TPM_RETURNCMD, rc.left, rc.bottom, 0, hwnd, NULL)) + { + case ID_FILTER_INCOMING: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_IN); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_INCOMING, + data->showFlags&HIST_SHOW_IN ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_OUTGOING: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_OUT); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_OUTGOING, + data->showFlags&HIST_SHOW_OUT ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_MESSAGES: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_MSGS); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_MESSAGES, + data->showFlags&HIST_SHOW_MSGS ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_FILES: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_FILES); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_FILES, + data->showFlags&HIST_SHOW_FILES ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_URLS: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_URLS); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_URLS, + data->showFlags&HIST_SHOW_URLS ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_STATUS: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_STATUS); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_STATUS, + data->showFlags&HIST_SHOW_STATUS ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_OTHER: + { + data->showFlags = toggleBit(data->showFlags, HIST_SHOW_OTHER); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_OTHER, + data->showFlags&HIST_SHOW_OTHER ? MF_CHECKED : MF_UNCHECKED); + break; + } + case ID_FILTER_AUTO: + { + data->showFlags = toggleBit(data->showFlags, HIST_AUTO_FILTER); + CheckMenuItem(GetSubMenu(data->hMenu, 1), ID_FILTER_AUTO, + data->showFlags&HIST_AUTO_FILTER ? MF_CHECKED : MF_UNCHECKED); + break; + } + default: + { + doFilter = false; + break; + } + } + if (doFilter) + PostMessage(hwnd, UM_REBUILDLIST, 0, 0); + break; + } + + case IDC_SECURITY: + { + ChangePassword(hwnd, data->hContact); + PostMessage(hwnd, UM_UPDATEICONS, 0, 0); + break; + } + + case IDC_EXPORT: + { +// ExportHistoryDialog(data->hContact, hwnd); +// DialogBox(hInst, MAKEINTRESOURCE(IDD_EXPORT), hwnd, ExportWndProc); + break; + } + + case IDC_SEARCHTEXT: + if ((data->showFlags&HIST_AUTO_FILTER) && (HIWORD(wParam) == EN_CHANGE)) + PostMessage(hwnd, UM_REBUILDLIST, 0, 0); + break; +/* + case IDC_EXPORT: + { + RECT rc; + GetWindowRect(GetDlgItem(hwnd, LOWORD(wParam)), &rc); + TrackPopupMenu(GetSubMenu(data->hMenu, 0), TPM_RETURNCMD, rc.left, rc.bottom, 0, hwnd, NULL); + break; + } +*/ +/* + case IDC_SEARCH: + { + int id = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SEARCH), 0, SearchDlgProc, (LPARAM)GetDlgItem(hwnd, IDC_ITEMS)); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SETCARETINDEX, id, 0); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SETTOPINDEX, id, 0); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SELITEMRANGE, FALSE, MAKELPARAM(0,data->eventCount)); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS), LB_SELITEMRANGE, TRUE, MAKELPARAM(id,id)); + break; + } +*/ + case IDC_FINDPREV: + { + int bufSize = GetWindowTextLength(GetDlgItem(hwnd, IDC_SEARCHTEXT))+1; + TCHAR *buf = new TCHAR[bufSize]; + GetWindowText(GetDlgItem(hwnd, IDC_SEARCHTEXT), buf, GetWindowTextLength(GetDlgItem(hwnd, IDC_SEARCHTEXT))+1); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS2), NSM_FINDPREV, (WPARAM)buf, 0); + delete [] buf; + break; + } + + case IDOK: + case IDC_FINDNEXT: + { + int bufSize = GetWindowTextLength(GetDlgItem(hwnd, IDC_SEARCHTEXT))+1; + TCHAR *buf = new TCHAR[bufSize]; + GetWindowText(GetDlgItem(hwnd, IDC_SEARCHTEXT), buf, GetWindowTextLength(GetDlgItem(hwnd, IDC_SEARCHTEXT))+1); + SendMessage(GetDlgItem(hwnd, IDC_ITEMS2), NSM_FINDNEXT, (WPARAM)buf, 0); + delete [] buf; + break; + } + + case IDC_COPY: + { + SendMessage(GetDlgItem(hwnd, IDC_ITEMS2), NSM_COPY, 0, 0); + } + break; + } + return TRUE; + } + } + return FALSE; //DefWindowProc(hwnd, msg, wParam, lParam); +} + +int svcShowNewstory(WPARAM wParam, LPARAM lParam) +{ + HWND hwnd = (HWND)WindowList_Find(hNewstoryWindows, (HANDLE)wParam); + if (hwnd && IsWindow(hwnd)) + { + SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + SetFocus(hwnd); + } else + if (AskPassword((HANDLE)wParam)) + { + HWND hwnd = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_HISTORY), 0, HistoryDlgProc, wParam); + ShowWindow(hwnd, SW_SHOWNORMAL); + } + return 0; +} + +int svcShowSystemNewstory(WPARAM wParam, LPARAM lParam) +{ + HWND hwnd = (HWND)WindowList_Find(hNewstoryWindows, 0); + if (hwnd && IsWindow(hwnd)) + { + SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); + SetFocus(hwnd); + } else + if (AskPassword(0)) + { + HWND hwnd = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_HISTORY), 0, HistoryDlgProc, 0); + ShowWindow(hwnd, SW_SHOWNORMAL); + } + return 0; +} |