summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2021-05-13 11:40:17 +0300
committerGeorge Hazan <ghazan@miranda.im>2021-05-13 11:40:17 +0300
commit1aecfbf8295912ccfc26bdbd9d745aed96966e66 (patch)
tree0032ec38ed3a3efeb0b7bd2dfb9c3c70e3c75c83
parentfcd8fed654606c80c4ec8a0f6718ba62de331e95 (diff)
UI classes & core code cleaning:
- MS_CLIST_DELETECONTACT introduced to avoid the usage of string constants directly; - start menu item id parameter added to Clist_GroupBuildMenu(); - CNF_MAX macro added to simplify cycles over CNF_* array; - custom draw support for CCtrlListView & CCtrlTreeView; - Miranda's specific WM_MEASUREITEM & WM_DRAWITEM processing in CDlgBase
-rw-r--r--include/m_clist.h10
-rw-r--r--include/m_contacts.h1
-rw-r--r--include/m_gui.h4
-rw-r--r--libs/win32/mir_app.libbin221344 -> 221344 bytes
-rw-r--r--libs/win32/mir_core.libbin477920 -> 477920 bytes
-rw-r--r--libs/win64/mir_app.libbin217150 -> 217150 bytes
-rw-r--r--libs/win64/mir_core.libbin483088 -> 483088 bytes
-rw-r--r--plugins/Utils.pas/mircontacts.pas40
-rw-r--r--plugins/Utils.pas/wrapper.pas24
-rw-r--r--src/mir_app/src/clcutils.cpp2
-rw-r--r--src/mir_app/src/clistgroups.cpp4
-rw-r--r--src/mir_app/src/clui.cpp2
-rw-r--r--src/mir_core/src/CCtrlListView.cpp1
-rw-r--r--src/mir_core/src/CCtrlTreeView.cpp1
-rw-r--r--src/mir_core/src/CDlgBase.cpp4
15 files changed, 20 insertions, 73 deletions
diff --git a/include/m_clist.h b/include/m_clist.h
index 37d8520cbd..a5e61560e2 100644
--- a/include/m_clist.h
+++ b/include/m_clist.h
@@ -344,6 +344,13 @@ EXTERN_C MIR_APP_DLL(BOOL) Clist_IsDocked(void);
#define MS_CLIST_SHOWHIDE "CList/ShowHide"
/////////////////////////////////////////////////////////////////////////////////////////
+// deletes a contact from contact list
+// wParam = MCONTACT - contact to be deleted
+// lParam = 0
+
+#define MS_CLIST_DELETECONTACT "CList/DeleteContactCommand"
+
+/////////////////////////////////////////////////////////////////////////////////////////
// sent when the group get modified (created, renamed or deleted)
// or contact is moving from group to group
// wParam = hContact - NULL if operation on group
@@ -435,9 +442,8 @@ EXTERN_C MIR_APP_DLL(int) Clist_GroupMoveBefore(MGROUP hGroup, MGROUP hGroupBefo
// The return value must be DestroyMenu()ed when you're done with it.
// NULL will be returned if the user doesn't have any groups
// The dwItemData of every menu item is the handle to that group.
-// Menu item IDs are assigned starting at 100, in no particular order.
-EXTERN_C MIR_APP_DLL(HMENU) Clist_GroupBuildMenu(void);
+EXTERN_C MIR_APP_DLL(HMENU) Clist_GroupBuildMenu(int iStartMenuId = 100);
/////////////////////////////////////////////////////////////////////////////////////////
// gets group name for a contact
diff --git a/include/m_contacts.h b/include/m_contacts.h
index b7a693b809..a83acd22c1 100644
--- a/include/m_contacts.h
+++ b/include/m_contacts.h
@@ -63,6 +63,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define CNF_COCOUNTRY 37 // returns company country (string)
#define CNF_COHOMEPAGE 38 // returns company homepage (string)
#define CNF_DISPLAYUID 39 // returns uniqueid to display in interface (must check type for type of return)
+#define CNF_MAX 40 // maximum number
// Special types
// Return the custom name using the name order setting
diff --git a/include/m_gui.h b/include/m_gui.h
index d5fd8ebf98..8662659a7a 100644
--- a/include/m_gui.h
+++ b/include/m_gui.h
@@ -1140,6 +1140,7 @@ public:
NMLVFINDITEM *nmlvfi;
NMITEMACTIVATE *nmlvia;
NMLVKEYDOWN *nmlvkey;
+ NMLVCUSTOMDRAW *nmcd;
};
};
@@ -1148,6 +1149,7 @@ public:
CCallback<TEventInfo> OnBeginRDrag;
CCallback<TEventInfo> OnBeginScroll;
CCallback<TEventInfo> OnColumnClick;
+ CCallback<TEventInfo> OnCustomDraw;
CCallback<TEventInfo> OnDeleteAllItems;
CCallback<TEventInfo> OnDeleteItem;
CCallback<TEventInfo> OnClick;
@@ -1284,6 +1286,7 @@ public:
NMTVKEYDOWN *nmtvkey;
NMTVDISPINFO *nmtvdi;
NMTVGETINFOTIP *nmtvit;
+ NMTVCUSTOMDRAW *nmcd;
HTREEITEM hItem; // for OnItemChanged
};
};
@@ -1291,6 +1294,7 @@ public:
CCallback<TEventInfo> OnBeginDrag;
CCallback<TEventInfo> OnBeginLabelEdit;
CCallback<TEventInfo> OnBeginRDrag;
+ CCallback<TEventInfo> OnCustomDraw;
CCallback<TEventInfo> OnDeleteItem;
CCallback<TEventInfo> OnEndLabelEdit;
CCallback<TEventInfo> OnGetDispInfo;
diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib
index 500915ce91..78d3785dd6 100644
--- a/libs/win32/mir_app.lib
+++ b/libs/win32/mir_app.lib
Binary files differ
diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib
index 22bc892e44..76bba9dd4d 100644
--- a/libs/win32/mir_core.lib
+++ b/libs/win32/mir_core.lib
Binary files differ
diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib
index d983cd449f..8a29686761 100644
--- a/libs/win64/mir_app.lib
+++ b/libs/win64/mir_app.lib
Binary files differ
diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib
index b4c632d51f..4733b8bff4 100644
--- a/libs/win64/mir_core.lib
+++ b/libs/win64/mir_core.lib
Binary files differ
diff --git a/plugins/Utils.pas/mircontacts.pas b/plugins/Utils.pas/mircontacts.pas
index 93e0b0b057..f8c9c359c7 100644
--- a/plugins/Utils.pas/mircontacts.pas
+++ b/plugins/Utils.pas/mircontacts.pas
@@ -16,11 +16,6 @@ function GetContactStatus(hContact:TMCONTACT):integer;
function IsChat(hContact:TMCONTACT):bool;
function IsMirandaUser(hContact:TMCONTACT):integer; // >0=Miranda; 0=Not miranda; -1=unknown
-// -2 - deleted account, -1 - disabled account, 0 - hidden
-// 1 - metacontact, 2 - submetacontact, positive - active
-// proto - ASSIGNED buffer
-function IsContactActive(hContact:TMCONTACT;Proto:PAnsiChar=nil):integer;
-
//----- Save / Load contact -----
function LoadContact(group,setting:PAnsiChar):TMCONTACT;
@@ -83,41 +78,6 @@ begin
result:=-1;
end;
-function IsContactActive(hContact:TMCONTACT;Proto:PAnsiChar=nil):integer;
-var
- p:PPROTOACCOUNT;
- name: array [0..31] of AnsiChar;
-begin
-
- if db_get_static(hContact,'Protocol','p',@name,SizeOf(name))=0 then
- begin
- result:=0;
-
- p:=Proto_GetAccount(@name);
- if p=nil then
- result:=-2 // deleted
- else if (not p^.bIsEnabled) or p^.bDynDisabled then
- result:=-1; // disabled
-
- if (result=0) and (DBReadByte(hContact,strCList,'Hidden',0)=0) then
- begin
- result:=255;
- if db_mc_getMeta(hContact)<>0 then
- result:=2;
- if StrCmp(Proto_GetBaseAccountName(hContact),META_PROTO)=0 then
- result:=1;
- end;
- if Proto<>nil then
- StrCopy(Proto,@name);
- end
- else
- begin
- result:=-2;
- if Proto<>nil then
- Proto^:=#0;
- end;
-end;
-
//----- Save / Load contact -----
const
diff --git a/plugins/Utils.pas/wrapper.pas b/plugins/Utils.pas/wrapper.pas
index 91e2f9d27e..65d8d3dae7 100644
--- a/plugins/Utils.pas/wrapper.pas
+++ b/plugins/Utils.pas/wrapper.pas
@@ -9,10 +9,6 @@ function CreateHiddenWindow(proc:pointer=nil):HWND;
function DoInitCommonControls(dwICC:dword):boolean;
-function GetScreenRect:TRect;
-procedure SnapToScreen(var rc:TRect;dx:integer=0;dy:integer=0{;
- minw:integer=240;minh:integer=100});
-
function GetDlgText(Dialog:HWND;idc:integer;getAnsi:boolean=false):pointer; overload;
function GetDlgText(wnd:HWND;getAnsi:boolean=false):pointer; overload;
@@ -133,26 +129,6 @@ begin
result:=InitCommonControlsEx(ICC);
end;
-function GetScreenRect:TRect;
-begin
- result.left := GetSystemMetrics( SM_XVIRTUALSCREEN );
- result.top := GetSystemMetrics( SM_YVIRTUALSCREEN );
- result.right := GetSystemMetrics( SM_CXVIRTUALSCREEN ) + result.left;
- result.bottom:= GetSystemMetrics( SM_CYVIRTUALSCREEN ) + result.top;
-end;
-
-procedure SnapToScreen(var rc:TRect;dx:integer=0;dy:integer=0{;
- minw:integer=240;minh:integer=100});
-var
- rect:TRect;
-begin
- rect:=GetScreenRect;
- if rc.right >rect.right then rc.right :=rect.right -dx;
- if rc.bottom>rect.bottom then rc.bottom:=rect.bottom-dy;
- if rc.left <rect.left then rc.left :=rect.left;
- if rc.top <rect.top then rc.top :=rect.top;
-end;
-
function GetDlgText(wnd:HWND;getAnsi:boolean=false):pointer;
var
a:cardinal;
diff --git a/src/mir_app/src/clcutils.cpp b/src/mir_app/src/clcutils.cpp
index 8edb3231bd..9147c6e75a 100644
--- a/src/mir_app/src/clcutils.cpp
+++ b/src/mir_app/src/clcutils.cpp
@@ -445,7 +445,7 @@ MIR_APP_DLL(void) Clist_DeleteFromContactList(HWND hwnd, ClcData *dat)
Clist_GroupDelete(contact->groupId);
break;
case CLCIT_CONTACT:
- CallService("CList/DeleteContactCommand", (WPARAM)contact->hContact, (LPARAM)hwnd);
+ CallService(MS_CLIST_DELETECONTACT, (WPARAM)contact->hContact, (LPARAM)hwnd);
break;
}
}
diff --git a/src/mir_app/src/clistgroups.cpp b/src/mir_app/src/clistgroups.cpp
index efba13cccb..22dc25f11a 100644
--- a/src/mir_app/src/clistgroups.cpp
+++ b/src/mir_app/src/clistgroups.cpp
@@ -448,13 +448,11 @@ MIR_APP_DLL(void) Clist_SetGroup(MCONTACT hContact, const wchar_t *pwszName)
/////////////////////////////////////////////////////////////////////////////////////////
-MIR_APP_DLL(HMENU) Clist_GroupBuildMenu()
+MIR_APP_DLL(HMENU) Clist_GroupBuildMenu(int nextMenuId)
{
if (arByIds.getCount() == 0)
return nullptr;
- int nextMenuId = 100;
-
HMENU hRootMenu = CreateMenu();
for (int i = 0; i < arByIds.getCount(); i++) {
const wchar_t *pNextField = arByIds[i]->groupName + 1;
diff --git a/src/mir_app/src/clui.cpp b/src/mir_app/src/clui.cpp
index 0aabd2f7f1..d7a78df9f3 100644
--- a/src/mir_app/src/clui.cpp
+++ b/src/mir_app/src/clui.cpp
@@ -340,7 +340,7 @@ int LoadCLUIModule(void)
mi.position = 2000070000;
mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_DELETE);
mi.name.a = LPGEN("De&lete");
- mi.pszService = "CList/DeleteContactCommand";
+ mi.pszService = MS_CLIST_DELETECONTACT;
Menu_AddContactMenuItem(&mi);
CreateServiceFunction(mi.pszService, MenuItem_DeleteContact);
diff --git a/src/mir_core/src/CCtrlListView.cpp b/src/mir_core/src/CCtrlListView.cpp
index 9ef8687bc6..5ac8f4d32e 100644
--- a/src/mir_core/src/CCtrlListView.cpp
+++ b/src/mir_core/src/CCtrlListView.cpp
@@ -36,6 +36,7 @@ BOOL CCtrlListView::OnNotify(int, NMHDR *pnmh)
switch (pnmh->code) {
case NM_CLICK: OnClick(&evt); return TRUE;
case NM_DBLCLK: OnDoubleClick(&evt); return TRUE;
+ case NM_CUSTOMDRAW: OnCustomDraw(&evt); return TRUE;
case LVN_BEGINDRAG: OnBeginDrag(&evt); return TRUE;
case LVN_BEGINLABELEDIT: OnBeginLabelEdit(&evt); return TRUE;
case LVN_BEGINRDRAG: OnBeginRDrag(&evt); return TRUE;
diff --git a/src/mir_core/src/CCtrlTreeView.cpp b/src/mir_core/src/CCtrlTreeView.cpp
index 056f149588..0522bfee03 100644
--- a/src/mir_core/src/CCtrlTreeView.cpp
+++ b/src/mir_core/src/CCtrlTreeView.cpp
@@ -285,6 +285,7 @@ BOOL CCtrlTreeView::OnNotify(int, NMHDR *pnmh)
switch (pnmh->code) {
case NM_RCLICK: OnRightClick(&evt); return TRUE;
+ case NM_CUSTOMDRAW: OnCustomDraw(&evt); return TRUE;
case TVN_BEGINLABELEDIT: OnBeginLabelEdit(&evt); return TRUE;
case TVN_BEGINRDRAG: OnBeginRDrag(&evt); return TRUE;
case TVN_DELETEITEM: OnDeleteItem(&evt); return TRUE;
diff --git a/src/mir_core/src/CDlgBase.cpp b/src/mir_core/src/CDlgBase.cpp
index de23eec3d9..bc051554de 100644
--- a/src/mir_core/src/CDlgBase.cpp
+++ b/src/mir_core/src/CDlgBase.cpp
@@ -245,7 +245,7 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
break;
case WM_MEASUREITEM:
- {
+ if (!Menu_MeasureItem(lParam)) {
MEASUREITEMSTRUCT *param = (MEASUREITEMSTRUCT *)lParam;
if (param && param->CtlID)
if (CCtrlBase *ctrl = FindControl(param->CtlID))
@@ -254,7 +254,7 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
return FALSE;
case WM_DRAWITEM:
- {
+ if (!Menu_DrawItem(lParam)) {
DRAWITEMSTRUCT *param = (DRAWITEMSTRUCT *)lParam;
if (param && param->CtlID)
if (CCtrlBase *ctrl = FindControl(param->CtlID))