From e3ffab889d900847fa6fb9807bc5f818da28c358 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 14 Jul 2012 19:06:59 +0000 Subject: much less crazy way to organize clist data git-svn-id: http://svn.miranda-ng.org/main/trunk@973 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/clist/clc.cpp | 47 ++++++++++++++++++++++++++++----- src/modules/clist/clc.h | 59 +++--------------------------------------- src/modules/clist/clcitems.cpp | 12 ++++++++- src/modules/clist/clcutils.cpp | 1 + 4 files changed, 57 insertions(+), 62 deletions(-) (limited to 'src') diff --git a/src/modules/clist/clc.cpp b/src/modules/clist/clc.cpp index 56a8b66c35..f7d9ba1411 100644 --- a/src/modules/clist/clc.cpp +++ b/src/modules/clist/clc.cpp @@ -738,7 +738,16 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, case VK_END: dat->selection = cli.pfnGetGroupContentsCount(&dat->list, 1) - 1; selMoved = 1; break; case VK_LEFT: changeGroupExpand = 1; break; case VK_RIGHT: changeGroupExpand = 2; break; - case VK_RETURN: cli.pfnDoSelectionDefaultAction(hwnd, dat); return 0; + case VK_RETURN: cli.pfnDoSelectionDefaultAction(hwnd, dat); + // TODO: clear filtering here somehow? + /*if (dat->filterSearch) { + dat->szQuickSearch[0] = 0; + cli.pfnSaveStateAndRebuildList(hwnd, dat); + //cli.pfnRebuildEntireList(hwnd, dat); + } else { + dat->szQuickSearch[0] = 0; + }*/ + return 0; case VK_F2: cli.pfnBeginRenameSelection(hwnd, dat); return 0; case VK_DELETE: cli.pfnDeleteFromContactList(hwnd, dat); return 0; default: @@ -757,7 +766,11 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, int hit; struct ClcContact *contact; struct ClcGroup *group; - dat->szQuickSearch[0] = 0; + if (dat->filterSearch) { + // this shouldn't clear filtering, but it should refresh highlighting somehow? + } else { + dat->szQuickSearch[0] = 0; + } hit = cli.pfnGetRowByIndex(dat, dat->selection, &contact, &group); if (hit != -1) { if (changeGroupExpand == 1 && contact->type == CLCIT_CONTACT) { @@ -776,7 +789,11 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, return 0; } if (selMoved) { - dat->szQuickSearch[0] = 0; + if (dat->filterSearch) { + // this shouldn't clear filtering, but it should refresh highlighting somehow? + } else { + dat->szQuickSearch[0] = 0; + } if (dat->selection >= cli.pfnGetGroupContentsCount(&dat->list, 1)) dat->selection = cli.pfnGetGroupContentsCount(&dat->list, 1) - 1; if (dat->selection < 0) @@ -827,6 +844,11 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, } _tcscat(dat->szQuickSearch, szNew); } + + if (dat->filterSearch) { + cli.pfnSaveStateAndRebuildList(hwnd, dat); + //cli.pfnRebuildEntireList(hwnd, dat); + } if (dat->szQuickSearch[0]) { int index; index = cli.pfnFindRowByText(hwnd, dat, dat->szQuickSearch, 1); @@ -835,6 +857,7 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, else { MessageBeep(MB_OK); dat->szQuickSearch[ lstrlen(dat->szQuickSearch) - 1] = '\0'; + cli.pfnSaveStateAndRebuildList(hwnd, dat); } cli.pfnInvalidateRect(hwnd, NULL, FALSE); cli.pfnEnsureVisible(hwnd, dat, dat->selection, 0); @@ -928,7 +951,11 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, cli.pfnEndRename(hwnd, dat, 1); dat->ptDragStart.x = (short) LOWORD(lParam); dat->ptDragStart.y = (short) HIWORD(lParam); - dat->szQuickSearch[0] = 0; + if (dat->filterSearch) { + // this shouldn't clear filtering, but it should refresh highlighting somehow? + } else { + dat->szQuickSearch[0] = 0; + } hit = cli.pfnHitTest(hwnd, dat, (short) LOWORD(lParam), (short) HIWORD(lParam), &contact, &group, &hitFlags); if (hit != -1) { if (hit == dat->selection && hitFlags & CLCHT_ONITEMLABEL && dat->exStyle & CLS_EX_EDITLABELS) { @@ -1210,7 +1237,11 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, cli.pfnHideInfoTip(hwnd, dat); KillTimer(hwnd, TIMERID_RENAME); KillTimer(hwnd, TIMERID_INFOTIP); - dat->szQuickSearch[0] = 0; + if (dat->filterSearch) { + // this should remove filtering (same as pressing ENTER)? + } else { + dat->szQuickSearch[0] = 0; + } dat->selection = cli.pfnHitTest(hwnd, dat, (short) LOWORD(lParam), (short) HIWORD(lParam), &contact, NULL, &hitFlags); cli.pfnInvalidateRect(hwnd, NULL, FALSE); if (dat->selection != -1) @@ -1235,7 +1266,11 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, if (GetFocus() != hwnd) SetFocus(hwnd); dat->iHotTrack = -1; - dat->szQuickSearch[0] = 0; + if (dat->filterSearch) { + // this shouldn't remove filtering + } else { + dat->szQuickSearch[0] = 0; + } pt.x = (short) LOWORD(lParam); pt.y = (short) HIWORD(lParam); if (pt.x == -1 && pt.y == -1) { diff --git a/src/modules/clist/clc.h b/src/modules/clist/clc.h index 3662cea1c6..bbcdf85528 100644 --- a/src/modules/clist/clc.h +++ b/src/modules/clist/clc.h @@ -21,63 +21,12 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -struct ClcContact { - BYTE type; - BYTE flags; - union { - struct { - WORD iImage; - HANDLE hContact; - }; - struct { - WORD groupId; - struct ClcGroup *group; - }; - }; - BYTE iExtraImage[MAXEXTRACOLUMNS]; - TCHAR szText[120-MAXEXTRACOLUMNS]; - char * proto; // MS_PROTO_GETBASEPROTO +struct ClcContact : public ClcContactBase +{ }; -struct ClcData { - struct ClcGroup list; - int rowHeight; - int yScroll; - int selection; - struct ClcFontInfo fontInfo[FONTID_MAX + 1]; - int scrollTime; - HIMAGELIST himlHighlight; - int groupIndent; - TCHAR szQuickSearch[128]; - int iconXSpace; - HWND hwndRenameEdit; - COLORREF bkColour, selBkColour, selTextColour, hotTextColour, quickSearchColour; - int iDragItem, iInsertionMark; - int dragStage; - POINT ptDragStart; - int dragAutoScrolling; - int dragAutoScrollHeight; - int leftMargin; - int insertionMarkHitHeight; - HBITMAP hBmpBackground; - int backgroundBmpUse, bkChanged; - int iHotTrack; - int gammaCorrection; - DWORD greyoutFlags; //see m_clc.h - DWORD offlineModes; - DWORD exStyle; - POINT ptInfoTip; - int infoTipTimeout; - HANDLE hInfoTipItem; - HIMAGELIST himlExtraColumns; - int extraColumnsCount; - int extraColumnSpacing; - int checkboxSize; - int showSelAlways; - int showIdle; - int noVScrollbar; - int useWindowsColours; - int needsResort; +struct ClcData : public ClcDataBase +{ }; /* clc.c */ diff --git a/src/modules/clist/clcitems.cpp b/src/modules/clist/clcitems.cpp index 7c0feb52ba..f52d0bc234 100644 --- a/src/modules/clist/clcitems.cpp +++ b/src/modules/clist/clcitems.cpp @@ -394,7 +394,17 @@ void fnRebuildEntireList(HWND hwnd, struct ClcData *dat) if (group != NULL) { group->totalMembers++; - if ( !(style & CLS_NOHIDEOFFLINE) && (style & CLS_HIDEOFFLINE || group->hideOffline)) { + /*if (dat->filterSearch && dat->szQuickSearch) { + // search filtering + + // how to get contact's visible name? this code is crashing :) + ClcCacheEntryBase* cache = cli.pfnGetCacheEntry(hContact); + if (cache) { + //if (!_tcsstr(CharLowerW(pdnce->tszName), CharLowerW(dat->szQuickSearch))) + if (_tcsnicmp(dat->szQuickSearch, cache->tszName, lstrlen(dat->szQuickSearch))) + cli.pfnAddContactToGroup(dat, group, hContact); + } + } else*/ if ( !(style & CLS_NOHIDEOFFLINE) && (style & CLS_HIDEOFFLINE || group->hideOffline)) { szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); if (szProto == NULL) { if ( !cli.pfnIsHiddenMode(dat, ID_STATUS_OFFLINE)) diff --git a/src/modules/clist/clcutils.cpp b/src/modules/clist/clcutils.cpp index 8617d82f9a..6c1b1e94e7 100644 --- a/src/modules/clist/clcutils.cpp +++ b/src/modules/clist/clcutils.cpp @@ -749,6 +749,7 @@ void fnLoadClcOptions(HWND hwnd, struct ClcData *dat) dat->gammaCorrection = DBGetContactSettingByte(NULL, "CLC", "GammaCorrect", CLCDEFAULT_GAMMACORRECT); dat->showIdle = DBGetContactSettingByte(NULL, "CLC", "ShowIdle", CLCDEFAULT_SHOWIDLE); dat->noVScrollbar = DBGetContactSettingByte(NULL, "CLC", "NoVScrollBar", 0); + dat->filterSearch = DBGetContactSettingByte(NULL, "CLC", "FilterSearch", 1); SendMessage(hwnd, INTM_SCROLLBARCHANGED, 0, 0); if ( !dat->bkChanged) { DBVARIANT dbv; -- cgit v1.2.3