diff options
author | George Hazan <ghazan@miranda.im> | 2021-05-13 11:40:17 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2021-05-13 11:40:17 +0300 |
commit | 1aecfbf8295912ccfc26bdbd9d745aed96966e66 (patch) | |
tree | 0032ec38ed3a3efeb0b7bd2dfb9c3c70e3c75c83 | |
parent | fcd8fed654606c80c4ec8a0f6718ba62de331e95 (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.h | 10 | ||||
-rw-r--r-- | include/m_contacts.h | 1 | ||||
-rw-r--r-- | include/m_gui.h | 4 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 221344 -> 221344 bytes | |||
-rw-r--r-- | libs/win32/mir_core.lib | bin | 477920 -> 477920 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 217150 -> 217150 bytes | |||
-rw-r--r-- | libs/win64/mir_core.lib | bin | 483088 -> 483088 bytes | |||
-rw-r--r-- | plugins/Utils.pas/mircontacts.pas | 40 | ||||
-rw-r--r-- | plugins/Utils.pas/wrapper.pas | 24 | ||||
-rw-r--r-- | src/mir_app/src/clcutils.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/clistgroups.cpp | 4 | ||||
-rw-r--r-- | src/mir_app/src/clui.cpp | 2 | ||||
-rw-r--r-- | src/mir_core/src/CCtrlListView.cpp | 1 | ||||
-rw-r--r-- | src/mir_core/src/CCtrlTreeView.cpp | 1 | ||||
-rw-r--r-- | src/mir_core/src/CDlgBase.cpp | 4 |
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 Binary files differindex 500915ce91..78d3785dd6 100644 --- a/libs/win32/mir_app.lib +++ b/libs/win32/mir_app.lib diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib Binary files differindex 22bc892e44..76bba9dd4d 100644 --- a/libs/win32/mir_core.lib +++ b/libs/win32/mir_core.lib diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib Binary files differindex d983cd449f..8a29686761 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib Binary files differindex b4c632d51f..4733b8bff4 100644 --- a/libs/win64/mir_core.lib +++ b/libs/win64/mir_core.lib 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)) |