From 17b6a94812b2dbf4af29fb5d84064ceb1c7d393e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 21 Jul 2024 15:26:46 +0300 Subject: =?UTF-8?q?fixes=20#4554=20(QuickSearch:=20=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=20=D1=81=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=20=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=BB=D0=B1=D1=86=D0=B0=20=D0=BF=D1=80=D0=BE=D0=BF=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=B5=D1=82=20=D0=B7=D0=BD=D0=B0=D1=87=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=82=D0=BE=D0=BA=D0=BE=D0=BB=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/QuickSearch/src/stdafx.h | 3 ++- plugins/QuickSearch/src/utils.cpp | 38 ++++++++++++++++++++++----------- plugins/QuickSearch/src/window.cpp | 12 +++++++---- plugins/QuickSearch/src/window_misc.cpp | 32 ++++++++++++--------------- 4 files changed, 50 insertions(+), 35 deletions(-) (limited to 'plugins/QuickSearch/src') diff --git a/plugins/QuickSearch/src/stdafx.h b/plugins/QuickSearch/src/stdafx.h index 84ca0c16a7..11aed49bc5 100644 --- a/plugins/QuickSearch/src/stdafx.h +++ b/plugins/QuickSearch/src/stdafx.h @@ -87,6 +87,7 @@ struct ColumnItem : public MZeroedObject ColumnItem(const ColumnItem &src); ~ColumnItem(); + int HasImage(const wchar_t *pwsztext) const; void SetSpecialColumns(); wchar_t *title; @@ -102,13 +103,13 @@ struct ColumnItem : public MZeroedObject bool bFilter : 1; bool isXstatus : 1; bool isGender : 1; + bool isAccount : 1; bool isClient : 1; bool isGroup : 1; bool isContainer : 1; }; }; - union { // 0: db setting struct { diff --git a/plugins/QuickSearch/src/utils.cpp b/plugins/QuickSearch/src/utils.cpp index 96ed8c1f41..eb450e9db1 100644 --- a/plugins/QuickSearch/src/utils.cpp +++ b/plugins/QuickSearch/src/utils.cpp @@ -118,23 +118,36 @@ ColumnItem::~ColumnItem() } } +int ColumnItem::HasImage(const wchar_t *pwsztext) const +{ + if (isClient && (g_plugin.m_flags & QSO_CLIENTICONS) && pwsztext) + return LVIF_IMAGE; + + if (isGender || isXstatus || isAccount) + return LVIF_IMAGE; + + return 0; +} + void ColumnItem::SetSpecialColumns() { - if (setting_type == QST_SETTING) { - if (datatype == QSTS_STRING && !mir_strcmp(module, "CList") && !mir_strcmp(setting, "Group")) - isGroup = true; + if (setting_type == QST_SETTING) { + if (datatype == QSTS_STRING && !mir_strcmp(module, "CList") && !mir_strcmp(setting, "Group")) + isGroup = true; - else if (datatype == QSTS_STRING && !mir_strcmp(module, "Tab_SRMsg") && !mir_strcmp(setting, "containerW")) - isContainer = true; + else if (datatype == QSTS_STRING && !mir_strcmp(module, "Tab_SRMsg") && !mir_strcmp(setting, "containerW")) + isContainer = true; - else if (datatype == QSTS_BYTE && !mir_strcmpi(setting, "XStatusId")) - isXstatus = true; + else if (datatype == QSTS_BYTE && !mir_strcmpi(setting, "XStatusId")) + isXstatus = true; - else if (datatype == QSTS_STRING && !mir_strcmp(setting, "MirVer") && g_bFingerInstalled) - isClient = true; - } - else if (setting_type == QST_CONTACTINFO && cnftype == CNF_GENDER) - isGender = true; + else if (datatype == QSTS_STRING && !mir_strcmp(setting, "MirVer") && g_bFingerInstalled) + isClient = true; + } + else if (setting_type == QST_CONTACTINFO && cnftype == CNF_GENDER) + isGender = true; + else if (setting_type == QST_OTHER && cnftype == QSTO_ACCOUNT) + isAccount = true; } ///////////////////////////////////////////////////////////////////////////////////////// @@ -322,6 +335,7 @@ void CMPlugin::LoadColumn(int n, ColumnItem &col) if (!mir_strcmp(col.svc.service, "Proto/GetContactBaseAccount")) { col.setting_type = QST_OTHER; col.other = QSTO_ACCOUNT; + col.isAccount = true; break; } diff --git a/plugins/QuickSearch/src/window.cpp b/plugins/QuickSearch/src/window.cpp index 8864f9e65b..a39f2761a6 100644 --- a/plugins/QuickSearch/src/window.cpp +++ b/plugins/QuickSearch/src/window.cpp @@ -128,18 +128,19 @@ void QSMainDlg::ToggleColumn(int col) // screen int lvcol = ColumnToListView(col); AddColumn(lvcol, &pCol); + pCol.SetSpecialColumns(); int nCount = m_grid.GetItemCount(); for (int i = 0; i < nCount; i++) { auto *pRow = GetRow(i); - LV_ITEMW li; + LV_ITEM li; li.iItem = i; li.iSubItem = lvcol; - li.mask = LVIF_TEXT; li.pszText = pRow->pValues[col].text; - if ((pCol.isClient && (g_plugin.m_flags & QSO_CLIENTICONS) && li.pszText) || pCol.isGender || pCol.isXstatus) - li.mask |= LVIF_IMAGE; + li.mask = LVIF_TEXT + pCol.HasImage(li.pszText); + if (pCol.isAccount) + li.iImage = Clist_GetContactIcon(pRow->hContact); m_grid.SetItem(&li); } } @@ -753,6 +754,9 @@ void QSMainDlg::onCustomDraw_Grid(CCtrlListView::TEventInfo *ev) pRow->GetCellColor(lplvcd->nmcd.dwItemSpec, lplvcd->clrTextBk, lplvcd->clrText); { int sub = ListViewToColumn(lplvcd->iSubItem); + if (sub == -1) + break; + auto *pCol = &g_plugin.m_columns[sub]; if (pCol == nullptr) break; diff --git a/plugins/QuickSearch/src/window_misc.cpp b/plugins/QuickSearch/src/window_misc.cpp index bd377b09dd..c856533e51 100644 --- a/plugins/QuickSearch/src/window_misc.cpp +++ b/plugins/QuickSearch/src/window_misc.cpp @@ -95,27 +95,23 @@ void QSMainDlg::MakePattern(const wchar_t *pwszPattern) void QSMainDlg::AddColumn(int idx, ColumnItem *pCol) { - LV_COLUMN lvcol = {}; - lvcol.mask = LVCF_TEXT | LVCF_WIDTH; - lvcol.pszText = TranslateW(pCol->title); - lvcol.cx = pCol->width; - m_grid.InsertColumn(idx, &lvcol); + LV_COLUMN lvc = {}; + lvc.mask = LVCF_TEXT | LVCF_WIDTH; + lvc.pszText = TranslateW(pCol->title); + lvc.cx = pCol->width; + m_grid.InsertColumn(idx, &lvc); HDITEM hdi; hdi.mask = HDI_FORMAT; - if (pCol->bFilter) - hdi.fmt = HDF_LEFT | HDF_STRING | HDF_CHECKBOX | HDF_CHECKED; - else - hdi.fmt = HDF_LEFT | HDF_STRING | HDF_CHECKBOX; + hdi.fmt = HDF_LEFT | HDF_STRING | HDF_CHECKBOX | (pCol->bFilter ? HDF_CHECKED : 0); SendMessage(m_grid.GetHeader(), HDM_SETITEM, idx, LPARAM(&hdi)); } void QSMainDlg::AddContactToList(MCONTACT hContact, CRowItem *pRow) { - LV_ITEMW li = {}; - li.mask = LVIF_IMAGE | LVIF_PARAM; + LV_ITEM li = {}; + li.mask = LVIF_PARAM; li.iItem = 100000; - li.iImage = Clist_GetContactIcon(hContact); li.lParam = LPARAM(pRow); li.iItem = m_grid.InsertItem(&li); @@ -129,9 +125,9 @@ void QSMainDlg::AddContactToList(MCONTACT hContact, CRowItem *pRow) // Client icons preprocess li.pszText = pRow->pValues[i].text; - li.mask = LVIF_TEXT; - if ((col.isClient && (g_plugin.m_flags & QSO_CLIENTICONS) && li.pszText != 0) || col.isXstatus || col.isGender) - li.mask |= LVIF_IMAGE; + li.mask = LVIF_TEXT + col.HasImage(li.pszText); + if (col.isAccount) + li.iImage = Clist_GetContactIcon(hContact); m_grid.SetItem(&li); li.iSubItem++; } @@ -171,10 +167,10 @@ void QSMainDlg::ChangeStatusPicture(CRowItem *pRow, MCONTACT, LPARAM lParam) if (idx == -1) return; - LV_ITEMW li = {}; + LV_ITEM li = {}; li.iItem = idx; li.mask = LVIF_IMAGE; - li.iImage = lParam; //CallService(MS_CLIST_GETCONTACTICON,hContact,0); + li.iImage = lParam; m_grid.SetItem(&li); } @@ -432,7 +428,7 @@ void QSMainDlg::PrepareTable(bool bReset) } if (bReset) - for (int i = old + tableColumns - 1; i >= tableColumns; i--) + for (int i = old - 1; i >= tableColumns; i--) m_grid.DeleteColumn(i); } -- cgit v1.2.3