summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/miranda.h8
-rw-r--r--src/mir_core/mir_core_10.vcxproj1
-rw-r--r--src/mir_core/mir_core_10.vcxproj.filters3
-rw-r--r--src/mir_core/mir_core_12.vcxproj3
-rw-r--r--src/mir_core/mir_core_12.vcxproj.filters9
-rw-r--r--src/mir_core/src/commonheaders.h5
-rw-r--r--src/mir_core/src/mir_core.def468
-rw-r--r--src/mir_core/src/mir_core64.def468
-rw-r--r--src/mir_core/src/miranda.h4
-rw-r--r--src/mir_core/src/protos.cpp89
-rw-r--r--src/mir_core/src/threads.cpp2
-rw-r--r--src/mir_core/src/ui_utils.cpp2081
-rw-r--r--src/modules/protocols/protocols.cpp63
-rw-r--r--src/modules/protocols/protoopts.cpp5
14 files changed, 3138 insertions, 71 deletions
diff --git a/src/core/miranda.h b/src/core/miranda.h
index 61b17cd6fa..c079e26324 100644
--- a/src/core/miranda.h
+++ b/src/core/miranda.h
@@ -148,7 +148,6 @@ PROTOACCOUNT* Proto_CreateAccount(const char *szModuleName, const char *szBasePr
PROTOACCOUNT* __fastcall Proto_GetAccount(const char *accName);
PROTOACCOUNT* __fastcall Proto_GetAccount(MCONTACT hContact);
-PROTOCOLDESCRIPTOR* __fastcall Proto_IsProtocolLoaded(const char *szProtoName);
bool __fastcall Proto_IsAccountEnabled(PROTOACCOUNT *pa);
bool __fastcall Proto_IsAccountLocked(PROTOACCOUNT *pa);
@@ -211,7 +210,10 @@ public:
extern "C"
{
- MIR_CORE_DLL(int)Langpack_MarkPluginLoaded(PLUGININFOEX* pInfo);
- MIR_CORE_DLL(int)GetSubscribersCount(HANDLE hHook);
+ MIR_CORE_DLL(int) Langpack_MarkPluginLoaded(PLUGININFOEX* pInfo);
+ MIR_CORE_DLL(int) GetSubscribersCount(HANDLE hHook);
MIR_CORE_DLL(void) db_setCurrent(MIDatabase* _db);
+
+ MIR_CORE_DLL(PROTOCOLDESCRIPTOR*) Proto_IsProtocolLoaded(const char *szProtoName);
+ MIR_CORE_DLL(PROTOCOLDESCRIPTOR*) Proto_RegisterModule(PROTOCOLDESCRIPTOR *pd);
};
diff --git a/src/mir_core/mir_core_10.vcxproj b/src/mir_core/mir_core_10.vcxproj
index 9b7fd8f38c..f41eb0202c 100644
--- a/src/mir_core/mir_core_10.vcxproj
+++ b/src/mir_core/mir_core_10.vcxproj
@@ -88,6 +88,7 @@
<ClCompile Include="src\sha1.cpp" />
<ClCompile Include="src\subclass.cpp" />
<ClCompile Include="src\threads.cpp" />
+ <ClCompile Include="src\ui_utils.cpp" />
<ClCompile Include="src\utf.cpp" />
<ClCompile Include="src\utils.cpp" />
<ClCompile Include="src\winver.cpp" />
diff --git a/src/mir_core/mir_core_10.vcxproj.filters b/src/mir_core/mir_core_10.vcxproj.filters
index 59ed6773fb..a1af8ffb9e 100644
--- a/src/mir_core/mir_core_10.vcxproj.filters
+++ b/src/mir_core/mir_core_10.vcxproj.filters
@@ -109,6 +109,9 @@
<ClCompile Include="src\mc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\ui_utils.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\commonheaders.h">
diff --git a/src/mir_core/mir_core_12.vcxproj b/src/mir_core/mir_core_12.vcxproj
index 0ee739d83f..6be5f7e179 100644
--- a/src/mir_core/mir_core_12.vcxproj
+++ b/src/mir_core/mir_core_12.vcxproj
@@ -21,8 +21,10 @@
<ItemGroup>
<ClInclude Include="..\..\include\m_core.h" />
<ClInclude Include="..\..\include\m_database.h" />
+ <ClInclude Include="..\..\include\m_gui.h" />
<ClInclude Include="..\..\include\m_json.h" />
<ClInclude Include="..\..\include\m_metacontacts.h" />
+ <ClInclude Include="..\..\include\m_protoint.h" />
<ClInclude Include="..\..\include\m_string.h" />
<ClInclude Include="..\..\include\m_system.h" />
<ClInclude Include="..\..\include\m_system_cpp.h" />
@@ -86,6 +88,7 @@
<ClCompile Include="src\sha1.cpp" />
<ClCompile Include="src\subclass.cpp" />
<ClCompile Include="src\threads.cpp" />
+ <ClCompile Include="src\ui_utils.cpp" />
<ClCompile Include="src\utf.cpp" />
<ClCompile Include="src\utils.cpp" />
<ClCompile Include="src\winver.cpp" />
diff --git a/src/mir_core/mir_core_12.vcxproj.filters b/src/mir_core/mir_core_12.vcxproj.filters
index 832c3f3b5f..ad3bf82317 100644
--- a/src/mir_core/mir_core_12.vcxproj.filters
+++ b/src/mir_core/mir_core_12.vcxproj.filters
@@ -106,6 +106,9 @@
<ClCompile Include="src\mc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\ui_utils.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\m_core.h">
@@ -159,6 +162,12 @@
<ClInclude Include="..\..\include\m_string.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\..\include\m_gui.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\m_protoint.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\include\m_string.inl">
diff --git a/src/mir_core/src/commonheaders.h b/src/mir_core/src/commonheaders.h
index 5a8d414682..a3a7896ca2 100644
--- a/src/mir_core/src/commonheaders.h
+++ b/src/mir_core/src/commonheaders.h
@@ -35,6 +35,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <shlobj.h>
#include <commctrl.h>
#include <vssym32.h>
+#include <Uxtheme.h>
#include <malloc.h>
#include <stdio.h>
@@ -57,6 +58,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <m_langpack.h>
#include <m_string.h>
#include <m_metacontacts.h>
+#include <m_protomod.h>
+#include <m_protoint.h>
+#include <m_skin.h>
+#include <m_netlib.h>
#include "miranda.h"
diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def
index 043c374ea3..d43ffd571c 100644
--- a/src/mir_core/src/mir_core.def
+++ b/src/mir_core/src/mir_core.def
@@ -608,3 +608,471 @@ mir_wstrcmpi @280
?setWString@PROTO_INTERFACE@@QAEXPBDPB_W@Z @606 NONAME
?setWord@PROTO_INTERFACE@@QAEXIPBDG@Z @607 NONAME
?setWord@PROTO_INTERFACE@@QAEXPBDG@Z @608 NONAME
+??0CCtrlBase@@QAE@ABV0@@Z @609 NONAME
+??0CCtrlBase@@QAE@PAVCDlgBase@@H@Z @610 NONAME
+??0CCtrlButton@@QAE@ABV0@@Z @611 NONAME
+??0CCtrlButton@@QAE@PAVCDlgBase@@H@Z @612 NONAME
+??0CCtrlCheck@@QAE@ABV0@@Z @613 NONAME
+??0CCtrlCheck@@QAE@PAVCDlgBase@@H@Z @614 NONAME
+??0CCtrlClc@@QAE@ABV0@@Z @615 NONAME
+??0CCtrlClc@@QAE@PAVCDlgBase@@H@Z @616 NONAME
+??0CCtrlCombo@@QAE@ABV0@@Z @617 NONAME
+??0CCtrlCombo@@QAE@PAVCDlgBase@@H@Z @618 NONAME
+??0CCtrlData@@QAE@ABV0@@Z @619 NONAME
+??0CCtrlData@@QAE@PAVCDlgBase@@H@Z @620 NONAME
+??0CCtrlEdit@@QAE@ABV0@@Z @621 NONAME
+??0CCtrlEdit@@QAE@PAVCDlgBase@@H@Z @622 NONAME
+??0CCtrlHyperlink@@QAE@ABV0@@Z @623 NONAME
+??0CCtrlHyperlink@@QAE@PAVCDlgBase@@HPBD@Z @624 NONAME
+??0CCtrlListBox@@QAE@ABV0@@Z @625 NONAME
+??0CCtrlListBox@@QAE@PAVCDlgBase@@H@Z @626 NONAME
+??0CCtrlListView@@QAE@ABV0@@Z @627 NONAME
+??0CCtrlListView@@QAE@PAVCDlgBase@@H@Z @628 NONAME
+??0CCtrlMButton@@QAE@ABV0@@Z @629 NONAME
+??0CCtrlMButton@@QAE@PAVCDlgBase@@HHPBD@Z @630 NONAME
+??0CCtrlMButton@@QAE@PAVCDlgBase@@HPAUHICON__@@PBD@Z @631 NONAME
+??0CCtrlPages@@QAE@ABV0@@Z @632 NONAME
+??0CCtrlPages@@QAE@PAVCDlgBase@@H@Z @633 NONAME
+??0CCtrlTreeView@@QAE@ABV0@@Z @634 NONAME
+??0CCtrlTreeView@@QAE@PAVCDlgBase@@H@Z @635 NONAME
+??0CDataLink@@QAE@ABV0@@Z @636 NONAME
+??0CDataLink@@QAE@E_N@Z @637 NONAME
+??0CDbLink@@QAE@ABV0@@Z @638 NONAME
+??0CDbLink@@QAE@PBD0EK_N@Z @639 NONAME
+??0CDbLink@@QAE@PBD0EPA_W@Z @640 NONAME
+??0CDlgBase@@QAE@ABV0@@Z @641 NONAME
+??0CDlgBase@@QAE@PAUHINSTANCE__@@HPAUHWND__@@@Z @642 NONAME
+??0CProtoIntDlgBase@@QAE@ABV0@@Z @643 NONAME
+??0CProtoIntDlgBase@@QAE@PAUPROTO_INTERFACE@@HPAUHWND__@@_N@Z @644 NONAME
+??1CCtrlBase@@UAE@XZ @645 NONAME
+??1CCtrlButton@@UAE@XZ @646 NONAME
+??1CCtrlCheck@@UAE@XZ @647 NONAME
+??1CCtrlClc@@UAE@XZ @648 NONAME
+??1CCtrlCombo@@UAE@XZ @649 NONAME
+??1CCtrlData@@UAE@XZ @650 NONAME
+??1CCtrlEdit@@UAE@XZ @651 NONAME
+??1CCtrlHyperlink@@UAE@XZ @652 NONAME
+??1CCtrlListBox@@UAE@XZ @653 NONAME
+??1CCtrlListView@@UAE@XZ @654 NONAME
+??1CCtrlMButton@@UAE@XZ @655 NONAME
+??1CCtrlPages@@UAE@XZ @656 NONAME
+??1CCtrlTreeView@@UAE@XZ @657 NONAME
+??1CDataLink@@UAE@XZ @658 NONAME
+??1CDbLink@@UAE@XZ @659 NONAME
+??1CDlgBase@@UAE@XZ @660 NONAME
+??1CProtoIntDlgBase@@UAE@XZ @661 NONAME
+??4CCtrlBase@@QAEAAV0@ABV0@@Z @662 NONAME
+??4CCtrlButton@@QAEAAV0@ABV0@@Z @663 NONAME
+??4CCtrlCheck@@QAEAAV0@ABV0@@Z @664 NONAME
+??4CCtrlClc@@QAEAAV0@ABV0@@Z @665 NONAME
+??4CCtrlCombo@@QAEAAV0@ABV0@@Z @666 NONAME
+??4CCtrlData@@QAEAAV0@ABV0@@Z @667 NONAME
+??4CCtrlEdit@@QAEAAV0@ABV0@@Z @668 NONAME
+??4CCtrlHyperlink@@QAEAAV0@ABV0@@Z @669 NONAME
+??4CCtrlListBox@@QAEAAV0@ABV0@@Z @670 NONAME
+??4CCtrlListView@@QAEAAV0@ABV0@@Z @671 NONAME
+??4CCtrlMButton@@QAEAAV0@ABV0@@Z @672 NONAME
+??4CCtrlPages@@QAEAAV0@ABV0@@Z @673 NONAME
+??4CCtrlTreeView@@QAEAAV0@ABV0@@Z @674 NONAME
+??4CDataLink@@QAEAAV0@ABV0@@Z @675 NONAME
+??4CDbLink@@QAEAAV0@ABV0@@Z @676 NONAME
+??4CDlgBase@@QAEAAV0@ABV0@@Z @677 NONAME
+??4CProtoIntDlgBase@@QAEAAV0@ABV0@@Z @678 NONAME
+??_7CCtrlBase@@6B@ @679 NONAME
+??_7CCtrlButton@@6B@ @680 NONAME
+??_7CCtrlCheck@@6B@ @681 NONAME
+??_7CCtrlClc@@6B@ @682 NONAME
+??_7CCtrlCombo@@6B@ @683 NONAME
+??_7CCtrlData@@6B@ @684 NONAME
+??_7CCtrlEdit@@6B@ @685 NONAME
+??_7CCtrlHyperlink@@6B@ @686 NONAME
+??_7CCtrlListBox@@6B@ @687 NONAME
+??_7CCtrlListView@@6B@ @688 NONAME
+??_7CCtrlMButton@@6B@ @689 NONAME
+??_7CCtrlPages@@6B@ @690 NONAME
+??_7CCtrlTreeView@@6B@ @691 NONAME
+??_7CDataLink@@6B@ @692 NONAME
+??_7CDbLink@@6B@ @693 NONAME
+??_7CDlgBase@@6B@ @694 NONAME
+??_7CProtoIntDlgBase@@6B@ @695 NONAME
+?ActivatePage@CCtrlPages@@QAEXH@Z @696 NONAME
+?ActiveMessage@CDlgBase@@QBEPBUtagMSG@@XZ @697 NONAME
+?AddColumn@CCtrlListView@@QAEXHPA_WH@Z @698 NONAME
+?AddContact@CCtrlClc@@QAEXI@Z @699 NONAME
+?AddControl@CDlgBase@@IAEXPAVCCtrlBase@@@Z @700 NONAME
+?AddGroup@CCtrlClc@@QAEXPAX@Z @701 NONAME
+?AddGroup@CCtrlListView@@QAEXHPA_W@Z @702 NONAME
+?AddInfoItem@CCtrlClc@@QAEPAXPAUCLCINFOITEM@@@Z @703 NONAME
+?AddItem@CCtrlListView@@QAEHPA_WHJH@Z @704 NONAME
+?AddPage@CCtrlPages@@QAEXPA_WPAUHICON__@@U?$CCallback@X@@PAX@Z @705 NONAME
+?AddString@CCtrlCombo@@QAEHPB_WJ@Z @706 NONAME
+?AddString@CCtrlListBox@@QAEHPA_WJ@Z @707 NONAME
+?AddStringA@CCtrlCombo@@QAEHPBDJ@Z @708 NONAME
+?ApproximateViewRect@CCtrlListView@@QAEKHHH@Z @709 NONAME
+?Arrange@CCtrlListView@@QAEXI@Z @710 NONAME
+?AttachDialog@CCtrlPages@@QAEXHPAVCDlgBase@@@Z @711 NONAME
+?AutoRebuild@CCtrlClc@@QAEXXZ @712 NONAME
+?CancelEditLabel@CCtrlListView@@QAEXXZ @713 NONAME
+?Close@CDlgBase@@QAEXXZ @714 NONAME
+?Create@CDlgBase@@QAEXXZ @715 NONAME
+?CreateDbLink@CCtrlData@@QAEXPAVCDataLink@@@Z @716 NONAME
+?CreateDbLink@CCtrlData@@QAEXPBD0EK_N@Z @717 NONAME
+?CreateDbLink@CCtrlData@@QAEXPBD0PA_W@Z @718 NONAME
+?CreateDragImage@CCtrlListView@@QAEPAU_IMAGELIST@@HPAUtagPOINT@@@Z @719 NONAME
+?CreateDragImage@CCtrlTreeView@@QAEPAU_IMAGELIST@@PAU_TREEITEM@@@Z @720 NONAME
+?CreateImageList@CCtrlListView@@QAEPAU_IMAGELIST@@H@Z @721 NONAME
+?CreateLink@CProtoIntDlgBase@@QAEXAAVCCtrlData@@PADEK_N@Z @722 NONAME
+?CreateLink@CProtoIntDlgBase@@QAEXAAVCCtrlData@@PBDPA_W@Z @723 NONAME
+?CustomWndProc@CCtrlBase@@MAEJIIJ@Z @724 NONAME
+?CustomWndProc@CCtrlPages@@MAEJIIJ@Z @725 NONAME
+?DeleteAllItems@CCtrlListView@@QAEXXZ @726 NONAME
+?DeleteAllItems@CCtrlTreeView@@QAEXXZ @727 NONAME
+?DeleteColumn@CCtrlListView@@QAEXH@Z @728 NONAME
+?DeleteItem@CCtrlClc@@QAEXPAX@Z @729 NONAME
+?DeleteItem@CCtrlListView@@QAEXH@Z @730 NONAME
+?DeleteItem@CCtrlTreeView@@QAEXPAU_TREEITEM@@@Z @731 NONAME
+?DeleteString@CCtrlCombo@@QAEXH@Z @732 NONAME
+?DeleteString@CCtrlListBox@@QAEXH@Z @733 NONAME
+?Disable@CCtrlBase@@QAEXXZ @734 NONAME
+?DlgProc@CDlgBase@@MAEHIIJ@Z @735 NONAME
+?DlgProc@CProtoIntDlgBase@@MAEHIIJ@Z @736 NONAME
+?DoModal@CDlgBase@@QAEHXZ @737 NONAME
+?DynamicDlgProc@CDlgBase@@SGHPAUHWND__@@IIJ@Z @738 NONAME
+?EditLabel@CCtrlClc@@QAEXPAX@Z @739 NONAME
+?EditLabel@CCtrlListView@@QAEPAUHWND__@@H@Z @740 NONAME
+?EditLabel@CCtrlTreeView@@QAEPAUHWND__@@PAU_TREEITEM@@@Z @741 NONAME
+?Enable@CCtrlBase@@QAEXH@Z @742 NONAME
+?EnableGroupView@CCtrlListView@@QAEHH@Z @743 NONAME
+?Enabled@CCtrlBase@@QBEHXZ @744 NONAME
+?EndEditLabel@CCtrlClc@@QAEX_N@Z @745 NONAME
+?EndEditLabelNow@CCtrlTreeView@@QAEXH@Z @746 NONAME
+?EnsureVisible@CCtrlClc@@QAEXPAX_N@Z @747 NONAME
+?EnsureVisible@CCtrlListView@@QAEHHH@Z @748 NONAME
+?EnsureVisible@CCtrlTreeView@@QAEXPAU_TREEITEM@@@Z @749 NONAME
+?Expand@CCtrlClc@@QAEXPAXK@Z @750 NONAME
+?Expand@CCtrlTreeView@@QAEXPAU_TREEITEM@@K@Z @751 NONAME
+?FindContact@CCtrlClc@@QAEPAXI@Z @752 NONAME
+?FindControl@CDlgBase@@AAEPAVCCtrlBase@@H@Z @753 NONAME
+?FindGroup@CCtrlClc@@QAEPAXPAX@Z @754 NONAME
+?FindItem@CCtrlListView@@QAEHHPBUtagLVFINDINFOW@@@Z @755 NONAME
+?FindNamedItem@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@PB_W@Z @756 NONAME
+?FindString@CCtrlCombo@@QAEHPB_WH_N@Z @757 NONAME
+?FindString@CCtrlListBox@@QAEHPA_WH_N@Z @758 NONAME
+?FindStringA@CCtrlCombo@@QAEHPBDH_N@Z @759 NONAME
+?GetBkColor@CCtrlClc@@QAEKXZ @760 NONAME
+?GetBkColor@CCtrlListView@@QAEKXZ @761 NONAME
+?GetBkColor@CCtrlTreeView@@QAEKXZ @762 NONAME
+?GetBkImage@CCtrlListView@@QAEXPAUtagLVBKIMAGEW@@@Z @763 NONAME
+?GetCallbackMask@CCtrlListView@@QAEIXZ @764 NONAME
+?GetCheck@CCtrlClc@@QAE_NPAX@Z @765 NONAME
+?GetCheckState@CCtrlListView@@QAEHI@Z @766 NONAME
+?GetCheckState@CCtrlTreeView@@QAEKPAU_TREEITEM@@@Z @767 NONAME
+?GetChild@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@@Z @768 NONAME
+?GetColumn@CCtrlListView@@QAEXHPAUtagLVCOLUMNW@@@Z @769 NONAME
+?GetColumnOrderArray@CCtrlListView@@QAEXHPAH@Z @770 NONAME
+?GetColumnWidth@CCtrlListView@@QAEHH@Z @771 NONAME
+?GetCount@CCtrlClc@@QAEHXZ @772 NONAME
+?GetCount@CCtrlCombo@@QAEHXZ @773 NONAME
+?GetCount@CCtrlListBox@@QAEHXZ @774 NONAME
+?GetCount@CCtrlTreeView@@QAEHXZ @775 NONAME
+?GetCountPerPage@CCtrlListView@@QAEHXZ @776 NONAME
+?GetCurSel@CCtrlCombo@@QAEHXZ @777 NONAME
+?GetCurSel@CCtrlListBox@@QAEHXZ @778 NONAME
+?GetDataSigned@CCtrlData@@IAE_NXZ @779 NONAME
+?GetDataSigned@CDataLink@@QAEEXZ @780 NONAME
+?GetDataType@CCtrlData@@IAEEXZ @781 NONAME
+?GetDataType@CDataLink@@QAEEXZ @782 NONAME
+?GetDropHilight@CCtrlTreeView@@QAEPAU_TREEITEM@@XZ @783 NONAME
+?GetDroppedState@CCtrlCombo@@QAE_NXZ @784 NONAME
+?GetEditControl@CCtrlClc@@QAEPAUHWND__@@XZ @785 NONAME
+?GetEditControl@CCtrlListView@@QAEPAUHWND__@@XZ @786 NONAME
+?GetEditControl@CCtrlTreeView@@QAEPAUHWND__@@XZ @787 NONAME
+?GetExStyle@CCtrlClc@@QAEKXZ @788 NONAME
+?GetExpand@CCtrlClc@@QAEKPAX@Z @789 NONAME
+?GetExtendedListViewStyle@CCtrlListView@@QAEKXZ @790 NONAME
+?GetExtraColumns@CCtrlClc@@QAEHXZ @791 NONAME
+?GetExtraImage@CCtrlClc@@QAEEPAXH@Z @792 NONAME
+?GetExtraImageList@CCtrlClc@@QAEPAU_IMAGELIST@@XZ @793 NONAME
+?GetFirstVisible@CCtrlTreeView@@QAEPAU_TREEITEM@@XZ @794 NONAME
+?GetFont@CCtrlClc@@QAEPAUHFONT__@@H@Z @795 NONAME
+?GetGroupMetrics@CCtrlListView@@QAEXPAUtagLVGROUPMETRICS@@@Z @796 NONAME
+?GetHeader@CCtrlListView@@QAEPAUHWND__@@XZ @797 NONAME
+?GetHideOfflineRoot@CCtrlClc@@QAE_NXZ @798 NONAME
+?GetHotCursor@CCtrlListView@@QAEPAUHICON__@@XZ @799 NONAME
+?GetHotItem@CCtrlListView@@QAEHXZ @800 NONAME
+?GetHoverTime@CCtrlListView@@QAEKXZ @801 NONAME
+?GetHwnd@CCtrlBase@@QBEPAUHWND__@@XZ @802 NONAME
+?GetHwnd@CDlgBase@@QBEPAUHWND__@@XZ @803 NONAME
+?GetISearchString@CCtrlListView@@QAEHPAD@Z @804 NONAME
+?GetImageList@CCtrlListView@@QAEPAU_IMAGELIST@@H@Z @805 NONAME
+?GetImageList@CCtrlTreeView@@QAEPAU_IMAGELIST@@H@Z @806 NONAME
+?GetIndent@CCtrlTreeView@@QAEHXZ @807 NONAME
+?GetInsertMark@CCtrlListView@@QAEHPAULVINSERTMARK@@@Z @808 NONAME
+?GetInsertMarkColor@CCtrlListView@@QAEKXZ @809 NONAME
+?GetInsertMarkColor@CCtrlTreeView@@QAEKXZ @810 NONAME
+?GetInsertMarkRect@CCtrlListView@@QAEHPAUtagRECT@@@Z @811 NONAME
+?GetInt@CCtrlBase@@QAEHXZ @812 NONAME
+?GetItem@CCtrlListView@@QAEXPAUtagLVITEMW@@@Z @813 NONAME
+?GetItem@CCtrlTreeView@@QAEXPAU_TREEITEM@@PAUtagTVITEMEXW@@@Z @814 NONAME
+?GetItem@CCtrlTreeView@@QAEXPAU_TREEITEM@@PAUtagTVITEMEXW@@PA_WH@Z @815 NONAME
+?GetItem@CCtrlTreeView@@QAEXPAUtagTVITEMEXW@@@Z @816 NONAME
+?GetItemCount@CCtrlListView@@QAEHXZ @817 NONAME
+?GetItemData@CCtrlCombo@@QAEJH@Z @818 NONAME
+?GetItemData@CCtrlListBox@@QAEJH@Z @819 NONAME
+?GetItemData@CCtrlListView@@QAEJH@Z @820 NONAME
+?GetItemHeight@CCtrlTreeView@@QAEHXZ @821 NONAME
+?GetItemPosition@CCtrlListView@@QAEXHPAUtagPOINT@@@Z @822 NONAME
+?GetItemRect@CCtrlListView@@QAEXHPAUtagRECT@@H@Z @823 NONAME
+?GetItemRect@CCtrlTreeView@@QAEXPAU_TREEITEM@@PAUtagRECT@@H@Z @824 NONAME
+?GetItemSpacing@CCtrlListView@@QAEKH@Z @825 NONAME
+?GetItemState@CCtrlListView@@QAEIHI@Z @826 NONAME
+?GetItemState@CCtrlTreeView@@QAEKPAU_TREEITEM@@K@Z @827 NONAME
+?GetItemText@CCtrlCombo@@QAEPA_WH@Z @828 NONAME
+?GetItemText@CCtrlCombo@@QAEPA_WHPA_WH@Z @829 NONAME
+?GetItemText@CCtrlListBox@@QAEPA_WH@Z @830 NONAME
+?GetItemText@CCtrlListBox@@QAEPA_WHPA_WH@Z @831 NONAME
+?GetItemText@CCtrlListView@@QAEXHHPA_WH@Z @832 NONAME
+?GetItemType@CCtrlClc@@QAEHPAX@Z @833 NONAME
+?GetLastVisible@CCtrlTreeView@@QAEPAU_TREEITEM@@XZ @834 NONAME
+?GetLefrMargin@CCtrlClc@@QAEHXZ @835 NONAME
+?GetLineColor@CCtrlTreeView@@QAEKXZ @836 NONAME
+?GetNextItem@CCtrlClc@@QAEPAXPAXK@Z @837 NONAME
+?GetNextItem@CCtrlListView@@QAEHHI@Z @838 NONAME
+?GetNextItem@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@K@Z @839 NONAME
+?GetNextSibling@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@@Z @840 NONAME
+?GetNextVisible@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@@Z @841 NONAME
+?GetNumberOfWorkAreas@CCtrlListView@@QAEHPAI@Z @842 NONAME
+?GetOrigin@CCtrlListView@@QAEHPAUtagPOINT@@@Z @843 NONAME
+?GetOutlineColor@CCtrlListView@@QAEKXZ @844 NONAME
+?GetParent@CCtrlBase@@QAEPAVCDlgBase@@XZ @845 NONAME
+?GetParent@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@@Z @846 NONAME
+?GetPrevSibling@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@@Z @847 NONAME
+?GetPrevVisible@CCtrlTreeView@@QAEPAU_TREEITEM@@PAU2@@Z @848 NONAME
+?GetProtoInterface@CProtoIntDlgBase@@QAEPAUPROTO_INTERFACE@@XZ @849 NONAME
+?GetRoot@CCtrlTreeView@@QAEPAU_TREEITEM@@XZ @850 NONAME
+?GetScrollTime@CCtrlTreeView@@QAEKXZ @851 NONAME
+?GetSel@CCtrlListBox@@QAE_NH@Z @852 NONAME
+?GetSelCount@CCtrlListBox@@QAEHXZ @853 NONAME
+?GetSelItems@CCtrlListBox@@QAEPAHPAHH@Z @854 NONAME
+?GetSelItems@CCtrlListBox@@QAEPAHXZ @855 NONAME
+?GetSelectedColumn@CCtrlListView@@QAEIXZ @856 NONAME
+?GetSelectedCount@CCtrlListView@@QAEIXZ @857 NONAME
+?GetSelection@CCtrlClc@@QAEPAXXZ @858 NONAME
+?GetSelection@CCtrlTreeView@@QAEPAU_TREEITEM@@XZ @859 NONAME
+?GetSelectionMark@CCtrlListView@@QAEHXZ @860 NONAME
+?GetState@CCtrlCheck@@QAEHXZ @861 NONAME
+?GetStringWidth@CCtrlListView@@QAEHPBD@Z @862 NONAME
+?GetSubItemRect@CCtrlListView@@QAEHHHHPAUtagRECT@@@Z @863 NONAME
+?GetText@CCtrlBase@@QAEPA_WPA_WH@Z @864 NONAME
+?GetText@CCtrlBase@@QAEPA_WXZ @865 NONAME
+?GetTextA@CCtrlBase@@QAEPADPADH@Z @866 NONAME
+?GetTextA@CCtrlBase@@QAEPADXZ @867 NONAME
+?GetTextBkColor@CCtrlListView@@QAEKXZ @868 NONAME
+?GetTextColor@CCtrlListView@@QAEKXZ @869 NONAME
+?GetTextColor@CCtrlTreeView@@QAEKXZ @870 NONAME
+?GetTextColot@CCtrlClc@@QAEKH@Z @871 NONAME
+?GetTileInfo@CCtrlListView@@QAEXPAUtagLVTILEINFO@@@Z @872 NONAME
+?GetTileViewInfo@CCtrlListView@@QAEXPAUtagLVTILEVIEWINFO@@@Z @873 NONAME
+?GetToolTips@CCtrlListView@@QAEPAUHWND__@@XZ @874 NONAME
+?GetToolTips@CCtrlTreeView@@QAEPAUHWND__@@XZ @875 NONAME
+?GetTopIndex@CCtrlListView@@QAEHXZ @876 NONAME
+?GetUnicodeFormat@CCtrlListView@@QAEHXZ @877 NONAME
+?GetUnicodeFormat@CCtrlTreeView@@QAEHXZ @878 NONAME
+?GetView@CCtrlListView@@QAEKXZ @879 NONAME
+?GetViewRect@CCtrlListView@@QAEHPAUtagRECT@@@Z @880 NONAME
+?GetVisibleCount@CCtrlTreeView@@QAEIXZ @881 NONAME
+?GetWorkAreas@CCtrlListView@@QAEXHPAUtagRECT@@@Z @882 NONAME
+?GlobalDlgProc@CDlgBase@@CGHPAUHWND__@@IIJ@Z @883 NONAME
+?GlobalDlgResizer@CDlgBase@@CAHPAUHWND__@@JPAUUTILRESIZECONTROL@@@Z @884 NONAME
+?GlobalSubclassWndProc@CCtrlBase@@CGJPAUHWND__@@IIJ@Z @885 NONAME
+?HasGroup@CCtrlListView@@QAEHH@Z @886 NONAME
+?HitTest@CCtrlClc@@QAEPAXHHPAK@Z @887 NONAME
+?HitTest@CCtrlListView@@QAEHPAUtagLVHITTESTINFO@@@Z @888 NONAME
+?HitTest@CCtrlTreeView@@QAEPAU_TREEITEM@@PAUtagTVHITTESTINFO@@@Z @889 NONAME
+?InsertColumn@CCtrlListView@@QAEHHQAUtagLVCOLUMNW@@@Z @890 NONAME
+?InsertGroup@CCtrlListView@@QAEHHPAUtagLVGROUP@@@Z @891 NONAME
+?InsertGroupSorted@CCtrlListView@@QAEXPAUtagLVINSERTGROUPSORTED@@@Z @892 NONAME
+?InsertItem@CCtrlListView@@QAEHQAUtagLVITEMW@@@Z @893 NONAME
+?InsertItem@CCtrlTreeView@@QAEPAU_TREEITEM@@PAUtagTVINSERTSTRUCTW@@@Z @894 NONAME
+?InsertMarkHitTest@CCtrlListView@@QAEHPAUtagPOINT@@PAULVINSERTMARK@@@Z @895 NONAME
+?InsertString@CCtrlCombo@@QAEHPA_WHJ@Z @896 NONAME
+?InsertString@CCtrlListBox@@QAEHPA_WHJ@Z @897 NONAME
+?IsChanged@CCtrlData@@QBE_NXZ @898 NONAME
+?IsGroupViewEnabled@CCtrlListView@@QAEHXZ @899 NONAME
+?IsInitialized@CDlgBase@@QBE_NXZ @900 NONAME
+?LoadSigned@CCtrlData@@IAEHXZ @901 NONAME
+?LoadSigned@CDbLink@@UAEHXZ @902 NONAME
+?LoadText@CCtrlData@@IAEPB_WXZ @903 NONAME
+?LoadText@CDbLink@@UAEPA_WXZ @904 NONAME
+?LoadUnsigned@CCtrlData@@IAEKXZ @905 NONAME
+?LoadUnsigned@CDbLink@@UAEKXZ @906 NONAME
+?MakeFlat@CCtrlMButton@@QAEXXZ @907 NONAME
+?MakePush@CCtrlMButton@@QAEXXZ @908 NONAME
+?MapIDToIndex@CCtrlListView@@QAEII@Z @909 NONAME
+?MapIndexToID@CCtrlListView@@QAEII@Z @910 NONAME
+?NotifyChange@CCtrlData@@IAEXXZ @911 NONAME
+?NotifyControls@CDlgBase@@AAEXP8CCtrlBase@@AEXXZ@Z @912 NONAME
+?OnApply@CCtrlBase@@UAEXXZ @913 NONAME
+?OnApply@CCtrlCheck@@UAEXXZ @914 NONAME
+?OnApply@CCtrlCombo@@UAEXXZ @915 NONAME
+?OnApply@CCtrlEdit@@UAEXXZ @916 NONAME
+?OnApply@CDlgBase@@MAEXXZ @917 NONAME
+?OnChange@CDlgBase@@MAEXPAVCCtrlBase@@@Z @918 NONAME
+?OnClose@CDlgBase@@MAEXXZ @919 NONAME
+?OnCommand@CCtrlBase@@UAEHPAUHWND__@@GG@Z @920 NONAME
+?OnCommand@CCtrlButton@@UAEHPAUHWND__@@GG@Z @921 NONAME
+?OnCommand@CCtrlCheck@@UAEHPAUHWND__@@GG@Z @922 NONAME
+?OnCommand@CCtrlCombo@@UAEHPAUHWND__@@GG@Z @923 NONAME
+?OnCommand@CCtrlEdit@@UAEHPAUHWND__@@GG@Z @924 NONAME
+?OnCommand@CCtrlHyperlink@@UAEHPAUHWND__@@GG@Z @925 NONAME
+?OnCommand@CCtrlListBox@@MAEHPAUHWND__@@GG@Z @926 NONAME
+?OnDeleteItem@CCtrlBase@@UAEHPAUtagDELETEITEMSTRUCT@@@Z @927 NONAME
+?OnDestroy@CCtrlBase@@UAEXXZ @928 NONAME
+?OnDestroy@CCtrlPages@@MAEXXZ @929 NONAME
+?OnDestroy@CDlgBase@@MAEXXZ @930 NONAME
+?OnDrawItem@CCtrlBase@@UAEHPAUtagDRAWITEMSTRUCT@@@Z @931 NONAME
+?OnInit@CCtrlBase@@UAEXXZ @932 NONAME
+?OnInit@CCtrlCheck@@UAEXXZ @933 NONAME
+?OnInit@CCtrlCombo@@UAEXXZ @934 NONAME
+?OnInit@CCtrlData@@UAEXXZ @935 NONAME
+?OnInit@CCtrlEdit@@UAEXXZ @936 NONAME
+?OnInit@CCtrlMButton@@UAEXXZ @937 NONAME
+?OnInit@CCtrlPages@@MAEXXZ @938 NONAME
+?OnInitDialog@CDlgBase@@MAEXXZ @939 NONAME
+?OnMeasureItem@CCtrlBase@@UAEHPAUtagMEASUREITEMSTRUCT@@@Z @940 NONAME
+?OnNotify@CCtrlBase@@UAEHHPAUtagNMHDR@@@Z @941 NONAME
+?OnNotify@CCtrlClc@@MAEHHPAUtagNMHDR@@@Z @942 NONAME
+?OnNotify@CCtrlListView@@MAEHHPAUtagNMHDR@@@Z @943 NONAME
+?OnNotify@CCtrlPages@@MAEHHPAUtagNMHDR@@@Z @944 NONAME
+?OnNotify@CCtrlTreeView@@MAEHHPAUtagNMHDR@@@Z @945 NONAME
+?OnProtoActivate@CProtoIntDlgBase@@MAEXIJ@Z @946 NONAME
+?OnProtoCheckOnline@CProtoIntDlgBase@@MAEXIJ@Z @947 NONAME
+?OnProtoRefresh@CProtoIntDlgBase@@MAEXIJ@Z @948 NONAME
+?OnReset@CCtrlBase@@UAEXXZ @949 NONAME
+?OnReset@CCtrlCheck@@UAEXXZ @950 NONAME
+?OnReset@CCtrlCombo@@UAEXXZ @951 NONAME
+?OnReset@CCtrlEdit@@UAEXXZ @952 NONAME
+?OnReset@CDlgBase@@MAEXXZ @953 NONAME
+?RedrawItems@CCtrlListView@@QAEHHH@Z @954 NONAME
+?RemoveAllGroups@CCtrlListView@@QAEXXZ @955 NONAME
+?RemoveGroup@CCtrlListView@@QAEHH@Z @956 NONAME
+?ResetContent@CCtrlCombo@@QAEXXZ @957 NONAME
+?ResetContent@CCtrlListBox@@QAEXXZ @958 NONAME
+?Resizer@CDlgBase@@MAEHPAUUTILRESIZECONTROL@@@Z @959 NONAME
+?SaveInt@CCtrlData@@IAEXK@Z @960 NONAME
+?SaveInt@CDbLink@@UAEXK@Z @961 NONAME
+?SaveText@CCtrlData@@IAEXPA_W@Z @962 NONAME
+?SaveText@CDbLink@@UAEXPA_W@Z @963 NONAME
+?Scroll@CCtrlListView@@QAEHHH@Z @964 NONAME
+?Select@CCtrlTreeView@@QAEXPAU_TREEITEM@@K@Z @965 NONAME
+?SelectDropTarget@CCtrlTreeView@@QAEXPAU_TREEITEM@@@Z @966 NONAME
+?SelectItem@CCtrlClc@@QAEXPAX@Z @967 NONAME
+?SelectItem@CCtrlTreeView@@QAEXPAU_TREEITEM@@@Z @968 NONAME
+?SelectSetFirstVisible@CCtrlTreeView@@QAEXPAU_TREEITEM@@@Z @969 NONAME
+?SelectString@CCtrlCombo@@QAEHPA_W@Z @970 NONAME
+?SelectString@CCtrlListBox@@QAEHPA_W@Z @971 NONAME
+?SendMsg@CCtrlBase@@QAEJIIJ@Z @972 NONAME
+?SetBkBitmap@CCtrlClc@@QAEXKPAUHBITMAP__@@@Z @973 NONAME
+?SetBkColor@CCtrlClc@@QAEXK@Z @974 NONAME
+?SetBkColor@CCtrlListView@@QAEHK@Z @975 NONAME
+?SetBkColor@CCtrlTreeView@@QAEKK@Z @976 NONAME
+?SetBkImage@CCtrlListView@@QAEHPAUtagLVBKIMAGEW@@@Z @977 NONAME
+?SetCallbackMask@CCtrlListView@@QAEHI@Z @978 NONAME
+?SetCheck@CCtrlClc@@QAEXPAX_N@Z @979 NONAME
+?SetCheckState@CCtrlListView@@QAEXIH@Z @980 NONAME
+?SetCheckState@CCtrlTreeView@@QAEXPAU_TREEITEM@@K@Z @981 NONAME
+?SetColumn@CCtrlListView@@QAEHHPAUtagLVCOLUMNW@@@Z @982 NONAME
+?SetColumnOrderArray@CCtrlListView@@QAEHHPAH@Z @983 NONAME
+?SetColumnWidth@CCtrlListView@@QAEHHH@Z @984 NONAME
+?SetCurSel@CCtrlCombo@@QAEHH@Z @985 NONAME
+?SetCurSel@CCtrlListBox@@QAEHH@Z @986 NONAME
+?SetExStyle@CCtrlClc@@QAEXK@Z @987 NONAME
+?SetExtendedListViewStyle@CCtrlListView@@QAEXK@Z @988 NONAME
+?SetExtendedListViewStyleEx@CCtrlListView@@QAEXKK@Z @989 NONAME
+?SetExtraColumns@CCtrlClc@@QAEXH@Z @990 NONAME
+?SetExtraImage@CCtrlClc@@QAEXPAXHH@Z @991 NONAME
+?SetExtraImageList@CCtrlClc@@QAEXPAU_IMAGELIST@@@Z @992 NONAME
+?SetFont@CCtrlClc@@QAEXHPAX_N@Z @993 NONAME
+?SetGreyoutFlags@CCtrlClc@@QAEXK@Z @994 NONAME
+?SetGroupInfo@CCtrlListView@@QAEHHPAUtagLVGROUP@@@Z @995 NONAME
+?SetGroupMetrics@CCtrlListView@@QAEXPAUtagLVGROUPMETRICS@@@Z @996 NONAME
+?SetHideEmptyGroups@CCtrlClc@@QAEX_N@Z @997 NONAME
+?SetHideOfflineRoot@CCtrlClc@@QAEX_N@Z @998 NONAME
+?SetHotCursor@CCtrlListView@@QAEPAUHICON__@@PAU2@@Z @999 NONAME
+?SetHotItem@CCtrlListView@@QAEHH@Z @1000 NONAME
+?SetHoverTime@CCtrlListView@@QAEXK@Z @1001 NONAME
+?SetIconSpacing@CCtrlListView@@QAEKHH@Z @1002 NONAME
+?SetImageList@CCtrlListView@@QAEPAU_IMAGELIST@@PAU2@H@Z @1003 NONAME
+?SetImageList@CCtrlTreeView@@QAEXPAU_IMAGELIST@@H@Z @1004 NONAME
+?SetIndent@CCtrlClc@@QAEXH@Z @1005 NONAME
+?SetIndent@CCtrlTreeView@@QAEXH@Z @1006 NONAME
+?SetInfoTip@CCtrlListView@@QAEHPAUtagLVSETINFOTIP@@@Z @1007 NONAME
+?SetInsertMark@CCtrlListView@@QAEHPAULVINSERTMARK@@@Z @1008 NONAME
+?SetInsertMark@CCtrlTreeView@@QAEXPAU_TREEITEM@@H@Z @1009 NONAME
+?SetInsertMarkColor@CCtrlListView@@QAEKK@Z @1010 NONAME
+?SetInsertMarkColor@CCtrlTreeView@@QAEKK@Z @1011 NONAME
+?SetInt@CCtrlBase@@QAEXH@Z @1012 NONAME
+?SetItem@CCtrlListView@@QAEHQAUtagLVITEMW@@@Z @1013 NONAME
+?SetItem@CCtrlListView@@QAEXHHPA_WH@Z @1014 NONAME
+?SetItem@CCtrlTreeView@@QAEXPAUtagTVITEMEXW@@@Z @1015 NONAME
+?SetItemCount@CCtrlListView@@QAEXH@Z @1016 NONAME
+?SetItemCountEx@CCtrlListView@@QAEXHK@Z @1017 NONAME
+?SetItemData@CCtrlCombo@@QAEXHJ@Z @1018 NONAME
+?SetItemData@CCtrlListBox@@QAEXHJ@Z @1019 NONAME
+?SetItemHeight@CCtrlTreeView@@QAEXF@Z @1020 NONAME
+?SetItemPosition32@CCtrlListView@@QAEXHHH@Z @1021 NONAME
+?SetItemPosition@CCtrlListView@@QAEHHHH@Z @1022 NONAME
+?SetItemState@CCtrlListView@@QAEXHII@Z @1023 NONAME
+?SetItemState@CCtrlTreeView@@QAEXPAU_TREEITEM@@KK@Z @1024 NONAME
+?SetItemText@CCtrlClc@@QAEXPAXPAD@Z @1025 NONAME
+?SetItemText@CCtrlListView@@QAEXHHPA_W@Z @1026 NONAME
+?SetLeftMargin@CCtrlClc@@QAEXH@Z @1027 NONAME
+?SetLineColor@CCtrlTreeView@@QAEKK@Z @1028 NONAME
+?SetOfflineModes@CCtrlClc@@QAEXK@Z @1029 NONAME
+?SetOutlineColor@CCtrlListView@@QAEKK@Z @1030 NONAME
+?SetScrollTime@CCtrlTreeView@@QAEXI@Z @1031 NONAME
+?SetSel@CCtrlListBox@@QAEXH_N@Z @1032 NONAME
+?SetSelectedColumn@CCtrlListView@@QAEXH@Z @1033 NONAME
+?SetSelectionMark@CCtrlListView@@QAEHH@Z @1034 NONAME
+?SetState@CCtrlCheck@@QAEXH@Z @1035 NONAME
+?SetStatusText@CProtoIntDlgBase@@QAEXPB_W@Z @1036 NONAME
+?SetText@CCtrlBase@@QAEXPB_W@Z @1037 NONAME
+?SetTextA@CCtrlBase@@QAEXPBD@Z @1038 NONAME
+?SetTextBkColor@CCtrlListView@@QAEHK@Z @1039 NONAME
+?SetTextColor@CCtrlClc@@QAEXHK@Z @1040 NONAME
+?SetTextColor@CCtrlListView@@QAEHK@Z @1041 NONAME
+?SetTextColor@CCtrlTreeView@@QAEKK@Z @1042 NONAME
+?SetTileInfo@CCtrlListView@@QAEHPAUtagLVTILEINFO@@@Z @1043 NONAME
+?SetTileViewInfo@CCtrlListView@@QAEHPAUtagLVTILEVIEWINFO@@@Z @1044 NONAME
+?SetToolTips@CCtrlListView@@QAEPAUHWND__@@PAU2@@Z @1045 NONAME
+?SetToolTips@CCtrlTreeView@@QAEPAUHWND__@@PAU2@@Z @1046 NONAME
+?SetUnicodeFormat@CCtrlListView@@QAEHH@Z @1047 NONAME
+?SetUnicodeFormat@CCtrlTreeView@@QAEHH@Z @1048 NONAME
+?SetUseGroups@CCtrlClc@@QAEX_N@Z @1049 NONAME
+?SetView@CCtrlListView@@QAEHK@Z @1050 NONAME
+?SetWorkAreas@CCtrlListView@@QAEXHPAUtagRECT@@@Z @1051 NONAME
+?Show@CDlgBase@@QAEXH@Z @1052 NONAME
+?ShowDropdown@CCtrlCombo@@QAEX_N@Z @1053 NONAME
+?ShowPage@CCtrlPages@@AAEXPAVCDlgBase@@@Z @1054 NONAME
+?SortChildren@CCtrlTreeView@@QAEXPAU_TREEITEM@@H@Z @1055 NONAME
+?SortChildrenCB@CCtrlTreeView@@QAEXPAUtagTVSORTCB@@H@Z @1056 NONAME
+?SortGroups@CCtrlListView@@QAEHP6GHHHPAX@Z0@Z @1057 NONAME
+?SortItems@CCtrlListView@@QAEHP6GHJJJ@ZJ@Z @1058 NONAME
+?SortItemsEx@CCtrlListView@@QAEHP6GHJJJ@ZJ@Z @1059 NONAME
+?SubItemHitTest@CCtrlListView@@QAEHPAUtagLVHITTESTINFO@@@Z @1060 NONAME
+?Subclass@CCtrlBase@@IAEXXZ @1061 NONAME
+?ThemeDialogBackground@CDlgBase@@IAEXH@Z @1062 NONAME
+?TranslateItem@CCtrlTreeView@@QAEXPAU_TREEITEM@@@Z @1063 NONAME
+?TranslateTree@CCtrlTreeView@@QAEXXZ @1064 NONAME
+?Unsubclass@CCtrlBase@@IAEXXZ @1065 NONAME
+?Update@CCtrlListView@@QAEHH@Z @1066 NONAME
+?UpdateProtoTitle@CProtoIntDlgBase@@AAEXPB_W@Z @1067 NONAME
+?UpdateStatusBar@CProtoIntDlgBase@@AAEXXZ @1068 NONAME
+?WindowSubscribe@PROTO_INTERFACE@@QAEXPAUHWND__@@@Z @1069 NONAME
+?WindowUnsubscribe@PROTO_INTERFACE@@QAEXPAUHWND__@@@Z @1070 NONAME
+?cmp@CCtrlBase@@SAHPBV1@0@Z @1071 NONAME
+?GetCtrlId@CCtrlBase@@QBEHXZ @1072 NONAME
+ProtoWindowAdd @1073
+ProtoWindowRemove @1074
+Proto_IsProtocolLoaded @1075
+Proto_RegisterModule @1076
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def
index b66aa36d74..b281f47266 100644
--- a/src/mir_core/src/mir_core64.def
+++ b/src/mir_core/src/mir_core64.def
@@ -608,3 +608,471 @@ mir_wstrcmpi @280
?setWString@PROTO_INTERFACE@@QEAAXPEBDPEB_W@Z @606 NONAME
?setWord@PROTO_INTERFACE@@QEAAXIPEBDG@Z @607 NONAME
?setWord@PROTO_INTERFACE@@QEAAXPEBDG@Z @608 NONAME
+??0CCtrlBase@@QEAA@AEBV0@@Z @609 NONAME
+??0CCtrlBase@@QEAA@PEAVCDlgBase@@H@Z @610 NONAME
+??0CCtrlButton@@QEAA@AEBV0@@Z @611 NONAME
+??0CCtrlButton@@QEAA@PEAVCDlgBase@@H@Z @612 NONAME
+??0CCtrlCheck@@QEAA@AEBV0@@Z @613 NONAME
+??0CCtrlCheck@@QEAA@PEAVCDlgBase@@H@Z @614 NONAME
+??0CCtrlClc@@QEAA@AEBV0@@Z @615 NONAME
+??0CCtrlClc@@QEAA@PEAVCDlgBase@@H@Z @616 NONAME
+??0CCtrlCombo@@QEAA@AEBV0@@Z @617 NONAME
+??0CCtrlCombo@@QEAA@PEAVCDlgBase@@H@Z @618 NONAME
+??0CCtrlData@@QEAA@AEBV0@@Z @619 NONAME
+??0CCtrlData@@QEAA@PEAVCDlgBase@@H@Z @620 NONAME
+??0CCtrlEdit@@QEAA@AEBV0@@Z @621 NONAME
+??0CCtrlEdit@@QEAA@PEAVCDlgBase@@H@Z @622 NONAME
+??0CCtrlHyperlink@@QEAA@AEBV0@@Z @623 NONAME
+??0CCtrlHyperlink@@QEAA@PEAVCDlgBase@@HPEBD@Z @624 NONAME
+??0CCtrlListBox@@QEAA@AEBV0@@Z @625 NONAME
+??0CCtrlListBox@@QEAA@PEAVCDlgBase@@H@Z @626 NONAME
+??0CCtrlListView@@QEAA@AEBV0@@Z @627 NONAME
+??0CCtrlListView@@QEAA@PEAVCDlgBase@@H@Z @628 NONAME
+??0CCtrlMButton@@QEAA@AEBV0@@Z @629 NONAME
+??0CCtrlMButton@@QEAA@PEAVCDlgBase@@HHPEBD@Z @630 NONAME
+??0CCtrlMButton@@QEAA@PEAVCDlgBase@@HPEAUHICON__@@PEBD@Z @631 NONAME
+??0CCtrlPages@@QEAA@AEBV0@@Z @632 NONAME
+??0CCtrlPages@@QEAA@PEAVCDlgBase@@H@Z @633 NONAME
+??0CCtrlTreeView@@QEAA@AEBV0@@Z @634 NONAME
+??0CCtrlTreeView@@QEAA@PEAVCDlgBase@@H@Z @635 NONAME
+??0CDataLink@@QEAA@AEBV0@@Z @636 NONAME
+??0CDataLink@@QEAA@E_N@Z @637 NONAME
+??0CDbLink@@QEAA@AEBV0@@Z @638 NONAME
+??0CDbLink@@QEAA@PEBD0EK_N@Z @639 NONAME
+??0CDbLink@@QEAA@PEBD0EPEA_W@Z @640 NONAME
+??0CDlgBase@@QEAA@AEBV0@@Z @641 NONAME
+??0CDlgBase@@QEAA@PEAUHINSTANCE__@@HPEAUHWND__@@@Z @642 NONAME
+??0CProtoIntDlgBase@@QEAA@AEBV0@@Z @643 NONAME
+??0CProtoIntDlgBase@@QEAA@PEAUPROTO_INTERFACE@@HPEAUHWND__@@_N@Z @644 NONAME
+??1CCtrlBase@@UEAA@XZ @645 NONAME
+??1CCtrlButton@@UEAA@XZ @646 NONAME
+??1CCtrlCheck@@UEAA@XZ @647 NONAME
+??1CCtrlClc@@UEAA@XZ @648 NONAME
+??1CCtrlCombo@@UEAA@XZ @649 NONAME
+??1CCtrlData@@UEAA@XZ @650 NONAME
+??1CCtrlEdit@@UEAA@XZ @651 NONAME
+??1CCtrlHyperlink@@UEAA@XZ @652 NONAME
+??1CCtrlListBox@@UEAA@XZ @653 NONAME
+??1CCtrlListView@@UEAA@XZ @654 NONAME
+??1CCtrlMButton@@UEAA@XZ @655 NONAME
+??1CCtrlPages@@UEAA@XZ @656 NONAME
+??1CCtrlTreeView@@UEAA@XZ @657 NONAME
+??1CDataLink@@UEAA@XZ @658 NONAME
+??1CDbLink@@UEAA@XZ @659 NONAME
+??1CDlgBase@@UEAA@XZ @660 NONAME
+??1CProtoIntDlgBase@@UEAA@XZ @661 NONAME
+??4CCtrlBase@@QEAAAEAV0@AEBV0@@Z @662 NONAME
+??4CCtrlButton@@QEAAAEAV0@AEBV0@@Z @663 NONAME
+??4CCtrlCheck@@QEAAAEAV0@AEBV0@@Z @664 NONAME
+??4CCtrlClc@@QEAAAEAV0@AEBV0@@Z @665 NONAME
+??4CCtrlCombo@@QEAAAEAV0@AEBV0@@Z @666 NONAME
+??4CCtrlData@@QEAAAEAV0@AEBV0@@Z @667 NONAME
+??4CCtrlEdit@@QEAAAEAV0@AEBV0@@Z @668 NONAME
+??4CCtrlHyperlink@@QEAAAEAV0@AEBV0@@Z @669 NONAME
+??4CCtrlListBox@@QEAAAEAV0@AEBV0@@Z @670 NONAME
+??4CCtrlListView@@QEAAAEAV0@AEBV0@@Z @671 NONAME
+??4CCtrlMButton@@QEAAAEAV0@AEBV0@@Z @672 NONAME
+??4CCtrlPages@@QEAAAEAV0@AEBV0@@Z @673 NONAME
+??4CCtrlTreeView@@QEAAAEAV0@AEBV0@@Z @674 NONAME
+??4CDataLink@@QEAAAEAV0@AEBV0@@Z @675 NONAME
+??4CDbLink@@QEAAAEAV0@AEBV0@@Z @676 NONAME
+??4CDlgBase@@QEAAAEAV0@AEBV0@@Z @677 NONAME
+??4CProtoIntDlgBase@@QEAAAEAV0@AEBV0@@Z @678 NONAME
+??_7CCtrlBase@@6B@ @679 NONAME
+??_7CCtrlButton@@6B@ @680 NONAME
+??_7CCtrlCheck@@6B@ @681 NONAME
+??_7CCtrlClc@@6B@ @682 NONAME
+??_7CCtrlCombo@@6B@ @683 NONAME
+??_7CCtrlData@@6B@ @684 NONAME
+??_7CCtrlEdit@@6B@ @685 NONAME
+??_7CCtrlHyperlink@@6B@ @686 NONAME
+??_7CCtrlListBox@@6B@ @687 NONAME
+??_7CCtrlListView@@6B@ @688 NONAME
+??_7CCtrlMButton@@6B@ @689 NONAME
+??_7CCtrlPages@@6B@ @690 NONAME
+??_7CCtrlTreeView@@6B@ @691 NONAME
+??_7CDataLink@@6B@ @692 NONAME
+??_7CDbLink@@6B@ @693 NONAME
+??_7CDlgBase@@6B@ @694 NONAME
+??_7CProtoIntDlgBase@@6B@ @695 NONAME
+?ActivatePage@CCtrlPages@@QEAAXH@Z @696 NONAME
+?ActiveMessage@CDlgBase@@QEBAPEBUtagMSG@@XZ @697 NONAME
+?AddColumn@CCtrlListView@@QEAAXHPEA_WH@Z @698 NONAME
+?AddContact@CCtrlClc@@QEAAXI@Z @699 NONAME
+?AddControl@CDlgBase@@IEAAXPEAVCCtrlBase@@@Z @700 NONAME
+?AddGroup@CCtrlClc@@QEAAXPEAX@Z @701 NONAME
+?AddGroup@CCtrlListView@@QEAAXHPEA_W@Z @702 NONAME
+?AddInfoItem@CCtrlClc@@QEAAPEAXPEAUCLCINFOITEM@@@Z @703 NONAME
+?AddItem@CCtrlListView@@QEAAHPEA_WH_JH@Z @704 NONAME
+?AddPage@CCtrlPages@@QEAAXPEA_WPEAUHICON__@@U?$CCallback@X@@PEAX@Z @705 NONAME
+?AddString@CCtrlCombo@@QEAAHPEB_W_J@Z @706 NONAME
+?AddString@CCtrlListBox@@QEAAHPEA_W_J@Z @707 NONAME
+?AddStringA@CCtrlCombo@@QEAAHPEBD_J@Z @708 NONAME
+?ApproximateViewRect@CCtrlListView@@QEAAKHHH@Z @709 NONAME
+?Arrange@CCtrlListView@@QEAAXI@Z @710 NONAME
+?AttachDialog@CCtrlPages@@QEAAXHPEAVCDlgBase@@@Z @711 NONAME
+?AutoRebuild@CCtrlClc@@QEAAXXZ @712 NONAME
+?CancelEditLabel@CCtrlListView@@QEAAXXZ @713 NONAME
+?Close@CDlgBase@@QEAAXXZ @714 NONAME
+?Create@CDlgBase@@QEAAXXZ @715 NONAME
+?CreateDbLink@CCtrlData@@QEAAXPEAVCDataLink@@@Z @716 NONAME
+?CreateDbLink@CCtrlData@@QEAAXPEBD0EK_N@Z @717 NONAME
+?CreateDbLink@CCtrlData@@QEAAXPEBD0PEA_W@Z @718 NONAME
+?CreateDragImage@CCtrlListView@@QEAAPEAU_IMAGELIST@@HPEAUtagPOINT@@@Z @719 NONAME
+?CreateDragImage@CCtrlTreeView@@QEAAPEAU_IMAGELIST@@PEAU_TREEITEM@@@Z @720 NONAME
+?CreateImageList@CCtrlListView@@QEAAPEAU_IMAGELIST@@H@Z @721 NONAME
+?CreateLink@CProtoIntDlgBase@@QEAAXAEAVCCtrlData@@PEADEK_N@Z @722 NONAME
+?CreateLink@CProtoIntDlgBase@@QEAAXAEAVCCtrlData@@PEBDPEA_W@Z @723 NONAME
+?CustomWndProc@CCtrlBase@@MEAA_JI_K_J@Z @724 NONAME
+?CustomWndProc@CCtrlPages@@MEAA_JI_K_J@Z @725 NONAME
+?DeleteAllItems@CCtrlListView@@QEAAXXZ @726 NONAME
+?DeleteAllItems@CCtrlTreeView@@QEAAXXZ @727 NONAME
+?DeleteColumn@CCtrlListView@@QEAAXH@Z @728 NONAME
+?DeleteItem@CCtrlClc@@QEAAXPEAX@Z @729 NONAME
+?DeleteItem@CCtrlListView@@QEAAXH@Z @730 NONAME
+?DeleteItem@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@@Z @731 NONAME
+?DeleteString@CCtrlCombo@@QEAAXH@Z @732 NONAME
+?DeleteString@CCtrlListBox@@QEAAXH@Z @733 NONAME
+?Disable@CCtrlBase@@QEAAXXZ @734 NONAME
+?DlgProc@CDlgBase@@MEAA_JI_K_J@Z @735 NONAME
+?DlgProc@CProtoIntDlgBase@@MEAA_JI_K_J@Z @736 NONAME
+?DoModal@CDlgBase@@QEAAHXZ @737 NONAME
+?DynamicDlgProc@CDlgBase@@SA_JPEAUHWND__@@I_K_J@Z @738 NONAME
+?EditLabel@CCtrlClc@@QEAAXPEAX@Z @739 NONAME
+?EditLabel@CCtrlListView@@QEAAPEAUHWND__@@H@Z @740 NONAME
+?EditLabel@CCtrlTreeView@@QEAAPEAUHWND__@@PEAU_TREEITEM@@@Z @741 NONAME
+?Enable@CCtrlBase@@QEAAXH@Z @742 NONAME
+?EnableGroupView@CCtrlListView@@QEAAHH@Z @743 NONAME
+?Enabled@CCtrlBase@@QEBAHXZ @744 NONAME
+?EndEditLabel@CCtrlClc@@QEAAX_N@Z @745 NONAME
+?EndEditLabelNow@CCtrlTreeView@@QEAAXH@Z @746 NONAME
+?EnsureVisible@CCtrlClc@@QEAAXPEAX_N@Z @747 NONAME
+?EnsureVisible@CCtrlListView@@QEAAHHH@Z @748 NONAME
+?EnsureVisible@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@@Z @749 NONAME
+?Expand@CCtrlClc@@QEAAXPEAXK@Z @750 NONAME
+?Expand@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@K@Z @751 NONAME
+?FindContact@CCtrlClc@@QEAAPEAXI@Z @752 NONAME
+?FindControl@CDlgBase@@AEAAPEAVCCtrlBase@@H@Z @753 NONAME
+?FindGroup@CCtrlClc@@QEAAPEAXPEAX@Z @754 NONAME
+?FindItem@CCtrlListView@@QEAAHHPEBUtagLVFINDINFOW@@@Z @755 NONAME
+?FindNamedItem@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@PEB_W@Z @756 NONAME
+?FindString@CCtrlCombo@@QEAAHPEB_WH_N@Z @757 NONAME
+?FindString@CCtrlListBox@@QEAAHPEA_WH_N@Z @758 NONAME
+?FindStringA@CCtrlCombo@@QEAAHPEBDH_N@Z @759 NONAME
+?GetBkColor@CCtrlClc@@QEAAKXZ @760 NONAME
+?GetBkColor@CCtrlListView@@QEAAKXZ @761 NONAME
+?GetBkColor@CCtrlTreeView@@QEAAKXZ @762 NONAME
+?GetBkImage@CCtrlListView@@QEAAXPEAUtagLVBKIMAGEW@@@Z @763 NONAME
+?GetCallbackMask@CCtrlListView@@QEAAIXZ @764 NONAME
+?GetCheck@CCtrlClc@@QEAA_NPEAX@Z @765 NONAME
+?GetCheckState@CCtrlListView@@QEAAHI@Z @766 NONAME
+?GetCheckState@CCtrlTreeView@@QEAAKPEAU_TREEITEM@@@Z @767 NONAME
+?GetChild@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@@Z @768 NONAME
+?GetColumn@CCtrlListView@@QEAAXHPEAUtagLVCOLUMNW@@@Z @769 NONAME
+?GetColumnOrderArray@CCtrlListView@@QEAAXHPEAH@Z @770 NONAME
+?GetColumnWidth@CCtrlListView@@QEAAHH@Z @771 NONAME
+?GetCount@CCtrlClc@@QEAAHXZ @772 NONAME
+?GetCount@CCtrlCombo@@QEAAHXZ @773 NONAME
+?GetCount@CCtrlListBox@@QEAAHXZ @774 NONAME
+?GetCount@CCtrlTreeView@@QEAAHXZ @775 NONAME
+?GetCountPerPage@CCtrlListView@@QEAAHXZ @776 NONAME
+?GetCurSel@CCtrlCombo@@QEAAHXZ @777 NONAME
+?GetCurSel@CCtrlListBox@@QEAAHXZ @778 NONAME
+?GetDataSigned@CCtrlData@@IEAA_NXZ @779 NONAME
+?GetDataSigned@CDataLink@@QEAAEXZ @780 NONAME
+?GetDataType@CCtrlData@@IEAAEXZ @781 NONAME
+?GetDataType@CDataLink@@QEAAEXZ @782 NONAME
+?GetDropHilight@CCtrlTreeView@@QEAAPEAU_TREEITEM@@XZ @783 NONAME
+?GetDroppedState@CCtrlCombo@@QEAA_NXZ @784 NONAME
+?GetEditControl@CCtrlClc@@QEAAPEAUHWND__@@XZ @785 NONAME
+?GetEditControl@CCtrlListView@@QEAAPEAUHWND__@@XZ @786 NONAME
+?GetEditControl@CCtrlTreeView@@QEAAPEAUHWND__@@XZ @787 NONAME
+?GetExStyle@CCtrlClc@@QEAAKXZ @788 NONAME
+?GetExpand@CCtrlClc@@QEAAKPEAX@Z @789 NONAME
+?GetExtendedListViewStyle@CCtrlListView@@QEAAKXZ @790 NONAME
+?GetExtraColumns@CCtrlClc@@QEAAHXZ @791 NONAME
+?GetExtraImage@CCtrlClc@@QEAAEPEAXH@Z @792 NONAME
+?GetExtraImageList@CCtrlClc@@QEAAPEAU_IMAGELIST@@XZ @793 NONAME
+?GetFirstVisible@CCtrlTreeView@@QEAAPEAU_TREEITEM@@XZ @794 NONAME
+?GetFont@CCtrlClc@@QEAAPEAUHFONT__@@H@Z @795 NONAME
+?GetGroupMetrics@CCtrlListView@@QEAAXPEAUtagLVGROUPMETRICS@@@Z @796 NONAME
+?GetHeader@CCtrlListView@@QEAAPEAUHWND__@@XZ @797 NONAME
+?GetHideOfflineRoot@CCtrlClc@@QEAA_NXZ @798 NONAME
+?GetHotCursor@CCtrlListView@@QEAAPEAUHICON__@@XZ @799 NONAME
+?GetHotItem@CCtrlListView@@QEAAHXZ @800 NONAME
+?GetHoverTime@CCtrlListView@@QEAAKXZ @801 NONAME
+?GetHwnd@CCtrlBase@@QEBAPEAUHWND__@@XZ @802 NONAME
+?GetHwnd@CDlgBase@@QEBAPEAUHWND__@@XZ @803 NONAME
+?GetISearchString@CCtrlListView@@QEAAHPEAD@Z @804 NONAME
+?GetImageList@CCtrlListView@@QEAAPEAU_IMAGELIST@@H@Z @805 NONAME
+?GetImageList@CCtrlTreeView@@QEAAPEAU_IMAGELIST@@H@Z @806 NONAME
+?GetIndent@CCtrlTreeView@@QEAAHXZ @807 NONAME
+?GetInsertMark@CCtrlListView@@QEAAHPEAULVINSERTMARK@@@Z @808 NONAME
+?GetInsertMarkColor@CCtrlListView@@QEAAKXZ @809 NONAME
+?GetInsertMarkColor@CCtrlTreeView@@QEAAKXZ @810 NONAME
+?GetInsertMarkRect@CCtrlListView@@QEAAHPEAUtagRECT@@@Z @811 NONAME
+?GetInt@CCtrlBase@@QEAAHXZ @812 NONAME
+?GetItem@CCtrlListView@@QEAAXPEAUtagLVITEMW@@@Z @813 NONAME
+?GetItem@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@PEAUtagTVITEMEXW@@@Z @814 NONAME
+?GetItem@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@PEAUtagTVITEMEXW@@PEA_WH@Z @815 NONAME
+?GetItem@CCtrlTreeView@@QEAAXPEAUtagTVITEMEXW@@@Z @816 NONAME
+?GetItemCount@CCtrlListView@@QEAAHXZ @817 NONAME
+?GetItemData@CCtrlCombo@@QEAA_JH@Z @818 NONAME
+?GetItemData@CCtrlListBox@@QEAA_JH@Z @819 NONAME
+?GetItemData@CCtrlListView@@QEAA_JH@Z @820 NONAME
+?GetItemHeight@CCtrlTreeView@@QEAAHXZ @821 NONAME
+?GetItemPosition@CCtrlListView@@QEAAXHPEAUtagPOINT@@@Z @822 NONAME
+?GetItemRect@CCtrlListView@@QEAAXHPEAUtagRECT@@H@Z @823 NONAME
+?GetItemRect@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@PEAUtagRECT@@H@Z @824 NONAME
+?GetItemSpacing@CCtrlListView@@QEAAKH@Z @825 NONAME
+?GetItemState@CCtrlListView@@QEAAIHI@Z @826 NONAME
+?GetItemState@CCtrlTreeView@@QEAAKPEAU_TREEITEM@@K@Z @827 NONAME
+?GetItemText@CCtrlCombo@@QEAAPEA_WH@Z @828 NONAME
+?GetItemText@CCtrlCombo@@QEAAPEA_WHPEA_WH@Z @829 NONAME
+?GetItemText@CCtrlListBox@@QEAAPEA_WH@Z @830 NONAME
+?GetItemText@CCtrlListBox@@QEAAPEA_WHPEA_WH@Z @831 NONAME
+?GetItemText@CCtrlListView@@QEAAXHHPEA_WH@Z @832 NONAME
+?GetItemType@CCtrlClc@@QEAAHPEAX@Z @833 NONAME
+?GetLastVisible@CCtrlTreeView@@QEAAPEAU_TREEITEM@@XZ @834 NONAME
+?GetLefrMargin@CCtrlClc@@QEAAHXZ @835 NONAME
+?GetLineColor@CCtrlTreeView@@QEAAKXZ @836 NONAME
+?GetNextItem@CCtrlClc@@QEAAPEAXPEAXK@Z @837 NONAME
+?GetNextItem@CCtrlListView@@QEAAHHI@Z @838 NONAME
+?GetNextItem@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@K@Z @839 NONAME
+?GetNextSibling@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@@Z @840 NONAME
+?GetNextVisible@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@@Z @841 NONAME
+?GetNumberOfWorkAreas@CCtrlListView@@QEAAHPEAI@Z @842 NONAME
+?GetOrigin@CCtrlListView@@QEAAHPEAUtagPOINT@@@Z @843 NONAME
+?GetOutlineColor@CCtrlListView@@QEAAKXZ @844 NONAME
+?GetParent@CCtrlBase@@QEAAPEAVCDlgBase@@XZ @845 NONAME
+?GetParent@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@@Z @846 NONAME
+?GetPrevSibling@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@@Z @847 NONAME
+?GetPrevVisible@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAU2@@Z @848 NONAME
+?GetProtoInterface@CProtoIntDlgBase@@QEAAPEAUPROTO_INTERFACE@@XZ @849 NONAME
+?GetRoot@CCtrlTreeView@@QEAAPEAU_TREEITEM@@XZ @850 NONAME
+?GetScrollTime@CCtrlTreeView@@QEAAKXZ @851 NONAME
+?GetSel@CCtrlListBox@@QEAA_NH@Z @852 NONAME
+?GetSelCount@CCtrlListBox@@QEAAHXZ @853 NONAME
+?GetSelItems@CCtrlListBox@@QEAAPEAHPEAHH@Z @854 NONAME
+?GetSelItems@CCtrlListBox@@QEAAPEAHXZ @855 NONAME
+?GetSelectedColumn@CCtrlListView@@QEAAIXZ @856 NONAME
+?GetSelectedCount@CCtrlListView@@QEAAIXZ @857 NONAME
+?GetSelection@CCtrlClc@@QEAAPEAXXZ @858 NONAME
+?GetSelection@CCtrlTreeView@@QEAAPEAU_TREEITEM@@XZ @859 NONAME
+?GetSelectionMark@CCtrlListView@@QEAAHXZ @860 NONAME
+?GetState@CCtrlCheck@@QEAAHXZ @861 NONAME
+?GetStringWidth@CCtrlListView@@QEAAHPEBD@Z @862 NONAME
+?GetSubItemRect@CCtrlListView@@QEAAHHHHPEAUtagRECT@@@Z @863 NONAME
+?GetText@CCtrlBase@@QEAAPEA_WPEA_WH@Z @864 NONAME
+?GetText@CCtrlBase@@QEAAPEA_WXZ @865 NONAME
+?GetTextA@CCtrlBase@@QEAAPEADPEADH@Z @866 NONAME
+?GetTextA@CCtrlBase@@QEAAPEADXZ @867 NONAME
+?GetTextBkColor@CCtrlListView@@QEAAKXZ @868 NONAME
+?GetTextColor@CCtrlListView@@QEAAKXZ @869 NONAME
+?GetTextColor@CCtrlTreeView@@QEAAKXZ @870 NONAME
+?GetTextColot@CCtrlClc@@QEAAKH@Z @871 NONAME
+?GetTileInfo@CCtrlListView@@QEAAXPEAUtagLVTILEINFO@@@Z @872 NONAME
+?GetTileViewInfo@CCtrlListView@@QEAAXPEAUtagLVTILEVIEWINFO@@@Z @873 NONAME
+?GetToolTips@CCtrlListView@@QEAAPEAUHWND__@@XZ @874 NONAME
+?GetToolTips@CCtrlTreeView@@QEAAPEAUHWND__@@XZ @875 NONAME
+?GetTopIndex@CCtrlListView@@QEAAHXZ @876 NONAME
+?GetUnicodeFormat@CCtrlListView@@QEAAHXZ @877 NONAME
+?GetUnicodeFormat@CCtrlTreeView@@QEAAHXZ @878 NONAME
+?GetView@CCtrlListView@@QEAAKXZ @879 NONAME
+?GetViewRect@CCtrlListView@@QEAAHPEAUtagRECT@@@Z @880 NONAME
+?GetVisibleCount@CCtrlTreeView@@QEAAIXZ @881 NONAME
+?GetWorkAreas@CCtrlListView@@QEAAXHPEAUtagRECT@@@Z @882 NONAME
+?GlobalDlgProc@CDlgBase@@CA_JPEAUHWND__@@I_K_J@Z @883 NONAME
+?GlobalDlgResizer@CDlgBase@@CAHPEAUHWND__@@_JPEAUUTILRESIZECONTROL@@@Z @884 NONAME
+?GlobalSubclassWndProc@CCtrlBase@@CA_JPEAUHWND__@@I_K_J@Z @885 NONAME
+?HasGroup@CCtrlListView@@QEAAHH@Z @886 NONAME
+?HitTest@CCtrlClc@@QEAAPEAXHHPEAK@Z @887 NONAME
+?HitTest@CCtrlListView@@QEAAHPEAUtagLVHITTESTINFO@@@Z @888 NONAME
+?HitTest@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAUtagTVHITTESTINFO@@@Z @889 NONAME
+?InsertColumn@CCtrlListView@@QEAAHHQEAUtagLVCOLUMNW@@@Z @890 NONAME
+?InsertGroup@CCtrlListView@@QEAAHHPEAUtagLVGROUP@@@Z @891 NONAME
+?InsertGroupSorted@CCtrlListView@@QEAAXPEAUtagLVINSERTGROUPSORTED@@@Z @892 NONAME
+?InsertItem@CCtrlListView@@QEAAHQEAUtagLVITEMW@@@Z @893 NONAME
+?InsertItem@CCtrlTreeView@@QEAAPEAU_TREEITEM@@PEAUtagTVINSERTSTRUCTW@@@Z @894 NONAME
+?InsertMarkHitTest@CCtrlListView@@QEAAHPEAUtagPOINT@@PEAULVINSERTMARK@@@Z @895 NONAME
+?InsertString@CCtrlCombo@@QEAAHPEA_WH_J@Z @896 NONAME
+?InsertString@CCtrlListBox@@QEAAHPEA_WH_J@Z @897 NONAME
+?IsChanged@CCtrlData@@QEBA_NXZ @898 NONAME
+?IsGroupViewEnabled@CCtrlListView@@QEAAHXZ @899 NONAME
+?IsInitialized@CDlgBase@@QEBA_NXZ @900 NONAME
+?LoadSigned@CCtrlData@@IEAAHXZ @901 NONAME
+?LoadSigned@CDbLink@@UEAAHXZ @902 NONAME
+?LoadText@CCtrlData@@IEAAPEB_WXZ @903 NONAME
+?LoadText@CDbLink@@UEAAPEA_WXZ @904 NONAME
+?LoadUnsigned@CCtrlData@@IEAAKXZ @905 NONAME
+?LoadUnsigned@CDbLink@@UEAAKXZ @906 NONAME
+?MakeFlat@CCtrlMButton@@QEAAXXZ @907 NONAME
+?MakePush@CCtrlMButton@@QEAAXXZ @908 NONAME
+?MapIDToIndex@CCtrlListView@@QEAAII@Z @909 NONAME
+?MapIndexToID@CCtrlListView@@QEAAII@Z @910 NONAME
+?NotifyChange@CCtrlData@@IEAAXXZ @911 NONAME
+?NotifyControls@CDlgBase@@AEAAXP8CCtrlBase@@EAAXXZ@Z @912 NONAME
+?OnApply@CCtrlBase@@UEAAXXZ @913 NONAME
+?OnApply@CCtrlCheck@@UEAAXXZ @914 NONAME
+?OnApply@CCtrlCombo@@UEAAXXZ @915 NONAME
+?OnApply@CCtrlEdit@@UEAAXXZ @916 NONAME
+?OnApply@CDlgBase@@MEAAXXZ @917 NONAME
+?OnChange@CDlgBase@@MEAAXPEAVCCtrlBase@@@Z @918 NONAME
+?OnClose@CDlgBase@@MEAAXXZ @919 NONAME
+?OnCommand@CCtrlBase@@UEAAHPEAUHWND__@@GG@Z @920 NONAME
+?OnCommand@CCtrlButton@@UEAAHPEAUHWND__@@GG@Z @921 NONAME
+?OnCommand@CCtrlCheck@@UEAAHPEAUHWND__@@GG@Z @922 NONAME
+?OnCommand@CCtrlCombo@@UEAAHPEAUHWND__@@GG@Z @923 NONAME
+?OnCommand@CCtrlEdit@@UEAAHPEAUHWND__@@GG@Z @924 NONAME
+?OnCommand@CCtrlHyperlink@@UEAAHPEAUHWND__@@GG@Z @925 NONAME
+?OnCommand@CCtrlListBox@@MEAAHPEAUHWND__@@GG@Z @926 NONAME
+?OnDeleteItem@CCtrlBase@@UEAAHPEAUtagDELETEITEMSTRUCT@@@Z @927 NONAME
+?OnDestroy@CCtrlBase@@UEAAXXZ @928 NONAME
+?OnDestroy@CCtrlPages@@MEAAXXZ @929 NONAME
+?OnDestroy@CDlgBase@@MEAAXXZ @930 NONAME
+?OnDrawItem@CCtrlBase@@UEAAHPEAUtagDRAWITEMSTRUCT@@@Z @931 NONAME
+?OnInit@CCtrlBase@@UEAAXXZ @932 NONAME
+?OnInit@CCtrlCheck@@UEAAXXZ @933 NONAME
+?OnInit@CCtrlCombo@@UEAAXXZ @934 NONAME
+?OnInit@CCtrlData@@UEAAXXZ @935 NONAME
+?OnInit@CCtrlEdit@@UEAAXXZ @936 NONAME
+?OnInit@CCtrlMButton@@UEAAXXZ @937 NONAME
+?OnInit@CCtrlPages@@MEAAXXZ @938 NONAME
+?OnInitDialog@CDlgBase@@MEAAXXZ @939 NONAME
+?OnMeasureItem@CCtrlBase@@UEAAHPEAUtagMEASUREITEMSTRUCT@@@Z @940 NONAME
+?OnNotify@CCtrlBase@@UEAAHHPEAUtagNMHDR@@@Z @941 NONAME
+?OnNotify@CCtrlClc@@MEAAHHPEAUtagNMHDR@@@Z @942 NONAME
+?OnNotify@CCtrlListView@@MEAAHHPEAUtagNMHDR@@@Z @943 NONAME
+?OnNotify@CCtrlPages@@MEAAHHPEAUtagNMHDR@@@Z @944 NONAME
+?OnNotify@CCtrlTreeView@@MEAAHHPEAUtagNMHDR@@@Z @945 NONAME
+?OnProtoActivate@CProtoIntDlgBase@@MEAAX_K_J@Z @946 NONAME
+?OnProtoCheckOnline@CProtoIntDlgBase@@MEAAX_K_J@Z @947 NONAME
+?OnProtoRefresh@CProtoIntDlgBase@@MEAAX_K_J@Z @948 NONAME
+?OnReset@CCtrlBase@@UEAAXXZ @949 NONAME
+?OnReset@CCtrlCheck@@UEAAXXZ @950 NONAME
+?OnReset@CCtrlCombo@@UEAAXXZ @951 NONAME
+?OnReset@CCtrlEdit@@UEAAXXZ @952 NONAME
+?OnReset@CDlgBase@@MEAAXXZ @953 NONAME
+?RedrawItems@CCtrlListView@@QEAAHHH@Z @954 NONAME
+?RemoveAllGroups@CCtrlListView@@QEAAXXZ @955 NONAME
+?RemoveGroup@CCtrlListView@@QEAAHH@Z @956 NONAME
+?ResetContent@CCtrlCombo@@QEAAXXZ @957 NONAME
+?ResetContent@CCtrlListBox@@QEAAXXZ @958 NONAME
+?Resizer@CDlgBase@@MEAAHPEAUUTILRESIZECONTROL@@@Z @959 NONAME
+?SaveInt@CCtrlData@@IEAAXK@Z @960 NONAME
+?SaveInt@CDbLink@@UEAAXK@Z @961 NONAME
+?SaveText@CCtrlData@@IEAAXPEA_W@Z @962 NONAME
+?SaveText@CDbLink@@UEAAXPEA_W@Z @963 NONAME
+?Scroll@CCtrlListView@@QEAAHHH@Z @964 NONAME
+?Select@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@K@Z @965 NONAME
+?SelectDropTarget@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@@Z @966 NONAME
+?SelectItem@CCtrlClc@@QEAAXPEAX@Z @967 NONAME
+?SelectItem@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@@Z @968 NONAME
+?SelectSetFirstVisible@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@@Z @969 NONAME
+?SelectString@CCtrlCombo@@QEAAHPEA_W@Z @970 NONAME
+?SelectString@CCtrlListBox@@QEAAHPEA_W@Z @971 NONAME
+?SendMsg@CCtrlBase@@QEAA_JI_K_J@Z @972 NONAME
+?SetBkBitmap@CCtrlClc@@QEAAXKPEAUHBITMAP__@@@Z @973 NONAME
+?SetBkColor@CCtrlClc@@QEAAXK@Z @974 NONAME
+?SetBkColor@CCtrlListView@@QEAAHK@Z @975 NONAME
+?SetBkColor@CCtrlTreeView@@QEAAKK@Z @976 NONAME
+?SetBkImage@CCtrlListView@@QEAAHPEAUtagLVBKIMAGEW@@@Z @977 NONAME
+?SetCallbackMask@CCtrlListView@@QEAAHI@Z @978 NONAME
+?SetCheck@CCtrlClc@@QEAAXPEAX_N@Z @979 NONAME
+?SetCheckState@CCtrlListView@@QEAAXIH@Z @980 NONAME
+?SetCheckState@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@K@Z @981 NONAME
+?SetColumn@CCtrlListView@@QEAAHHPEAUtagLVCOLUMNW@@@Z @982 NONAME
+?SetColumnOrderArray@CCtrlListView@@QEAAHHPEAH@Z @983 NONAME
+?SetColumnWidth@CCtrlListView@@QEAAHHH@Z @984 NONAME
+?SetCurSel@CCtrlCombo@@QEAAHH@Z @985 NONAME
+?SetCurSel@CCtrlListBox@@QEAAHH@Z @986 NONAME
+?SetExStyle@CCtrlClc@@QEAAXK@Z @987 NONAME
+?SetExtendedListViewStyle@CCtrlListView@@QEAAXK@Z @988 NONAME
+?SetExtendedListViewStyleEx@CCtrlListView@@QEAAXKK@Z @989 NONAME
+?SetExtraColumns@CCtrlClc@@QEAAXH@Z @990 NONAME
+?SetExtraImage@CCtrlClc@@QEAAXPEAXHH@Z @991 NONAME
+?SetExtraImageList@CCtrlClc@@QEAAXPEAU_IMAGELIST@@@Z @992 NONAME
+?SetFont@CCtrlClc@@QEAAXHPEAX_N@Z @993 NONAME
+?SetGreyoutFlags@CCtrlClc@@QEAAXK@Z @994 NONAME
+?SetGroupInfo@CCtrlListView@@QEAAHHPEAUtagLVGROUP@@@Z @995 NONAME
+?SetGroupMetrics@CCtrlListView@@QEAAXPEAUtagLVGROUPMETRICS@@@Z @996 NONAME
+?SetHideEmptyGroups@CCtrlClc@@QEAAX_N@Z @997 NONAME
+?SetHideOfflineRoot@CCtrlClc@@QEAAX_N@Z @998 NONAME
+?SetHotCursor@CCtrlListView@@QEAAPEAUHICON__@@PEAU2@@Z @999 NONAME
+?SetHotItem@CCtrlListView@@QEAAHH@Z @1000 NONAME
+?SetHoverTime@CCtrlListView@@QEAAXK@Z @1001 NONAME
+?SetIconSpacing@CCtrlListView@@QEAAKHH@Z @1002 NONAME
+?SetImageList@CCtrlListView@@QEAAPEAU_IMAGELIST@@PEAU2@H@Z @1003 NONAME
+?SetImageList@CCtrlTreeView@@QEAAXPEAU_IMAGELIST@@H@Z @1004 NONAME
+?SetIndent@CCtrlClc@@QEAAXH@Z @1005 NONAME
+?SetIndent@CCtrlTreeView@@QEAAXH@Z @1006 NONAME
+?SetInfoTip@CCtrlListView@@QEAAHPEAUtagLVSETINFOTIP@@@Z @1007 NONAME
+?SetInsertMark@CCtrlListView@@QEAAHPEAULVINSERTMARK@@@Z @1008 NONAME
+?SetInsertMark@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@H@Z @1009 NONAME
+?SetInsertMarkColor@CCtrlListView@@QEAAKK@Z @1010 NONAME
+?SetInsertMarkColor@CCtrlTreeView@@QEAAKK@Z @1011 NONAME
+?SetInt@CCtrlBase@@QEAAXH@Z @1012 NONAME
+?SetItem@CCtrlListView@@QEAAHQEAUtagLVITEMW@@@Z @1013 NONAME
+?SetItem@CCtrlListView@@QEAAXHHPEA_WH@Z @1014 NONAME
+?SetItem@CCtrlTreeView@@QEAAXPEAUtagTVITEMEXW@@@Z @1015 NONAME
+?SetItemCount@CCtrlListView@@QEAAXH@Z @1016 NONAME
+?SetItemCountEx@CCtrlListView@@QEAAXHK@Z @1017 NONAME
+?SetItemData@CCtrlCombo@@QEAAXH_J@Z @1018 NONAME
+?SetItemData@CCtrlListBox@@QEAAXH_J@Z @1019 NONAME
+?SetItemHeight@CCtrlTreeView@@QEAAXF@Z @1020 NONAME
+?SetItemPosition32@CCtrlListView@@QEAAXHHH@Z @1021 NONAME
+?SetItemPosition@CCtrlListView@@QEAAHHHH@Z @1022 NONAME
+?SetItemState@CCtrlListView@@QEAAXHII@Z @1023 NONAME
+?SetItemState@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@KK@Z @1024 NONAME
+?SetItemText@CCtrlClc@@QEAAXPEAXPEAD@Z @1025 NONAME
+?SetItemText@CCtrlListView@@QEAAXHHPEA_W@Z @1026 NONAME
+?SetLeftMargin@CCtrlClc@@QEAAXH@Z @1027 NONAME
+?SetLineColor@CCtrlTreeView@@QEAAKK@Z @1028 NONAME
+?SetOfflineModes@CCtrlClc@@QEAAXK@Z @1029 NONAME
+?SetOutlineColor@CCtrlListView@@QEAAKK@Z @1030 NONAME
+?SetScrollTime@CCtrlTreeView@@QEAAXI@Z @1031 NONAME
+?SetSel@CCtrlListBox@@QEAAXH_N@Z @1032 NONAME
+?SetSelectedColumn@CCtrlListView@@QEAAXH@Z @1033 NONAME
+?SetSelectionMark@CCtrlListView@@QEAAHH@Z @1034 NONAME
+?SetState@CCtrlCheck@@QEAAXH@Z @1035 NONAME
+?SetStatusText@CProtoIntDlgBase@@QEAAXPEB_W@Z @1036 NONAME
+?SetText@CCtrlBase@@QEAAXPEB_W@Z @1037 NONAME
+?SetTextA@CCtrlBase@@QEAAXPEBD@Z @1038 NONAME
+?SetTextBkColor@CCtrlListView@@QEAAHK@Z @1039 NONAME
+?SetTextColor@CCtrlClc@@QEAAXHK@Z @1040 NONAME
+?SetTextColor@CCtrlListView@@QEAAHK@Z @1041 NONAME
+?SetTextColor@CCtrlTreeView@@QEAAKK@Z @1042 NONAME
+?SetTileInfo@CCtrlListView@@QEAAHPEAUtagLVTILEINFO@@@Z @1043 NONAME
+?SetTileViewInfo@CCtrlListView@@QEAAHPEAUtagLVTILEVIEWINFO@@@Z @1044 NONAME
+?SetToolTips@CCtrlListView@@QEAAPEAUHWND__@@PEAU2@@Z @1045 NONAME
+?SetToolTips@CCtrlTreeView@@QEAAPEAUHWND__@@PEAU2@@Z @1046 NONAME
+?SetUnicodeFormat@CCtrlListView@@QEAAHH@Z @1047 NONAME
+?SetUnicodeFormat@CCtrlTreeView@@QEAAHH@Z @1048 NONAME
+?SetUseGroups@CCtrlClc@@QEAAX_N@Z @1049 NONAME
+?SetView@CCtrlListView@@QEAAHK@Z @1050 NONAME
+?SetWorkAreas@CCtrlListView@@QEAAXHPEAUtagRECT@@@Z @1051 NONAME
+?Show@CDlgBase@@QEAAXH@Z @1052 NONAME
+?ShowDropdown@CCtrlCombo@@QEAAX_N@Z @1053 NONAME
+?ShowPage@CCtrlPages@@AEAAXPEAVCDlgBase@@@Z @1054 NONAME
+?SortChildren@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@H@Z @1055 NONAME
+?SortChildrenCB@CCtrlTreeView@@QEAAXPEAUtagTVSORTCB@@H@Z @1056 NONAME
+?SortGroups@CCtrlListView@@QEAAHP6AHHHPEAX@Z0@Z @1057 NONAME
+?SortItems@CCtrlListView@@QEAAHP6AH_J00@Z0@Z @1058 NONAME
+?SortItemsEx@CCtrlListView@@QEAAHP6AH_J00@Z0@Z @1059 NONAME
+?SubItemHitTest@CCtrlListView@@QEAAHPEAUtagLVHITTESTINFO@@@Z @1060 NONAME
+?Subclass@CCtrlBase@@IEAAXXZ @1061 NONAME
+?ThemeDialogBackground@CDlgBase@@IEAAXH@Z @1062 NONAME
+?TranslateItem@CCtrlTreeView@@QEAAXPEAU_TREEITEM@@@Z @1063 NONAME
+?TranslateTree@CCtrlTreeView@@QEAAXXZ @1064 NONAME
+?Unsubclass@CCtrlBase@@IEAAXXZ @1065 NONAME
+?Update@CCtrlListView@@QEAAHH@Z @1066 NONAME
+?UpdateProtoTitle@CProtoIntDlgBase@@AEAAXPEB_W@Z @1067 NONAME
+?UpdateStatusBar@CProtoIntDlgBase@@AEAAXXZ @1068 NONAME
+?WindowSubscribe@PROTO_INTERFACE@@QEAAXPEAUHWND__@@@Z @1069 NONAME
+?WindowUnsubscribe@PROTO_INTERFACE@@QEAAXPEAUHWND__@@@Z @1070 NONAME
+?cmp@CCtrlBase@@SAHPEBV1@0@Z @1071 NONAME
+?GetCtrlId@CCtrlBase@@QEBAHXZ @1072 NONAME
+ProtoWindowAdd @1073
+ProtoWindowRemove @1074
+Proto_IsProtocolLoaded @1075
+Proto_RegisterModule @1076
diff --git a/src/mir_core/src/miranda.h b/src/mir_core/src/miranda.h
index 268d023190..9cd924348c 100644
--- a/src/mir_core/src/miranda.h
+++ b/src/mir_core/src/miranda.h
@@ -26,6 +26,9 @@ extern "C"
{
MIR_CORE_DLL(int) Langpack_MarkPluginLoaded(PLUGININFOEX* pInfo);
MIR_CORE_DLL(MUUID*) Langpack_LookupUuid(WPARAM wParam);
+
+ MIR_CORE_DLL(PROTOCOLDESCRIPTOR*) Proto_IsProtocolLoaded(const char *szProtoName);
+ MIR_CORE_DLL(PROTOCOLDESCRIPTOR*) Proto_RegisterModule(PROTOCOLDESCRIPTOR *pd);
};
void UnloadLangPackModule(void);
@@ -37,6 +40,7 @@ int InitPathUtils(void);
void InitProtocols();
void UninitProtocols();
+HINSTANCE ProtoGetInstance(const char *szModuleName);
extern HINSTANCE hInst;
extern HWND hAPCWindow;
diff --git a/src/mir_core/src/protos.cpp b/src/mir_core/src/protos.cpp
index 6ac870da74..075ea581d9 100644
--- a/src/mir_core/src/protos.cpp
+++ b/src/mir_core/src/protos.cpp
@@ -23,24 +23,54 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "commonheaders.h"
-#include <m_protomod.h>
-#include <m_protoint.h>
-#include <m_skin.h>
-#include <m_netlib.h>
+static int CompareProtos(const PROTOCOLDESCRIPTOR *p1, const PROTOCOLDESCRIPTOR *p2)
+{
+ return strcmp(p1->szName, p2->szName);
+}
+
+static LIST<PROTOCOLDESCRIPTOR> protos(10, CompareProtos);
static HANDLE hAckEvent;
-void InitProtocols()
+/////////////////////////////////////////////////////////////////////////////////////////
+
+MIR_CORE_DLL(PROTOCOLDESCRIPTOR*) Proto_IsProtocolLoaded(const char *szProtoName)
{
- hAckEvent = CreateHookableEvent(ME_PROTO_ACK);
+ if (szProtoName == NULL)
+ return NULL;
+
+ PROTOCOLDESCRIPTOR tmp;
+ tmp.szName = (char*)szProtoName;
+ return protos.find(&tmp);
}
-void UninitProtocols()
+INT_PTR Proto_EnumProtocols(WPARAM wParam, LPARAM lParam)
{
- if (hAckEvent) {
- DestroyHookableEvent(hAckEvent);
- hAckEvent = NULL;
- }
+ *(int*)wParam = protos.getCount();
+ *(PROTOCOLDESCRIPTOR***)lParam = protos.getArray();
+ return 0;
+}
+
+MIR_CORE_DLL(PROTOCOLDESCRIPTOR*) Proto_RegisterModule(PROTOCOLDESCRIPTOR *pd)
+{
+ PROTOCOLDESCRIPTOR *p = (PROTOCOLDESCRIPTOR*)mir_calloc(sizeof(PROTOCOLDESCRIPTOR));
+ if (!p)
+ return NULL;
+
+ memcpy(p, pd, pd->cbSize);
+ p->szName = mir_strdup(pd->szName);
+ protos.insert(p);
+ return p;
+}
+
+HINSTANCE ProtoGetInstance(const char *szModuleName)
+{
+ PROTOACCOUNT *pa = ProtoGetAccount(szModuleName);
+ if (pa == NULL)
+ return NULL;
+
+ PROTOCOLDESCRIPTOR *p = Proto_IsProtocolLoaded(pa->szProtoName);
+ return (p == NULL) ? NULL : GetInstByAddress(p->fnInit);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -120,6 +150,8 @@ MIR_CORE_DLL(void) ProtoDestructor(PROTO_INTERFACE *pThis)
{
mir_free(pThis->m_szModuleName);
mir_free(pThis->m_tszUserName);
+
+ WindowList_Destroy(pThis->m_hWindowList);
}
MIR_CORE_DLL(void) ProtoCreateService(PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFunc serviceProc)
@@ -163,6 +195,19 @@ MIR_CORE_DLL(HANDLE) ProtoForkThreadEx(PROTO_INTERFACE *pThis, ProtoThreadFunc p
return (HANDLE)::mir_forkthreadowner((pThreadFuncOwner)*(void**)&pFunc, pThis, param, threadID ? threadID : &lthreadID);
}
+MIR_CORE_DLL(void) ProtoWindowAdd(PROTO_INTERFACE *pThis, HWND hwnd)
+{
+ if (pThis->m_hWindowList == NULL)
+ pThis->m_hWindowList = WindowList_Create();
+
+ WindowList_Add(pThis->m_hWindowList, hwnd, NULL);
+}
+
+MIR_CORE_DLL(void) ProtoWindowRemove(PROTO_INTERFACE *pThis, HWND hwnd)
+{
+ WindowList_Remove(pThis->m_hWindowList, hwnd);
+}
+
/////////////////////////////////////////////////////////////////////////////////////////
MIR_CORE_DLL(LPCTSTR) ProtoGetAvatarExtension(int format)
@@ -426,3 +471,25 @@ int PROTO_INTERFACE::OnEvent(PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lP
{
return 1; // not an error, vitally important
}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+void InitProtocols()
+{
+ CreateServiceFunction(MS_PROTO_ENUMPROTOS, Proto_EnumProtocols);
+ hAckEvent = CreateHookableEvent(ME_PROTO_ACK);
+}
+
+void UninitProtocols()
+{
+ for (int i = 0; i < protos.getCount(); i++) {
+ mir_free(protos[i]->szName);
+ mir_free(protos[i]);
+ }
+ protos.destroy();
+
+ if (hAckEvent) {
+ DestroyHookableEvent(hAckEvent);
+ hAckEvent = NULL;
+ }
+}
diff --git a/src/mir_core/src/threads.cpp b/src/mir_core/src/threads.cpp
index 237bc2ed97..ea47e19260 100644
--- a/src/mir_core/src/threads.cpp
+++ b/src/mir_core/src/threads.cpp
@@ -210,7 +210,7 @@ MIR_CORE_DLL(void) KillObjectThreads(void* owner)
if (p->pObject == owner) {
char szModuleName[MAX_PATH];
GetModuleFileNameA(p->hOwner, szModuleName, sizeof(szModuleName));
- Netlib_Logf(0, "Killing objec thread %s:%p", szModuleName, p->dwThreadId);
+ Netlib_Logf(0, "Killing object thread %s:%p", szModuleName, p->dwThreadId);
TerminateThread(p->hThread, 9999);
CloseHandle(p->hThread);
threads.remove(j);
diff --git a/src/mir_core/src/ui_utils.cpp b/src/mir_core/src/ui_utils.cpp
new file mode 100644
index 0000000000..3fb58c11a1
--- /dev/null
+++ b/src/mir_core/src/ui_utils.cpp
@@ -0,0 +1,2081 @@
+/*
+
+Object UI extensions
+Copyright (c) 2008 Victor Pavlychko, George Hazan
+Copyright (ñ) 2012-15 Miranda NG project
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#include "commonheaders.h"
+
+#include <m_button.h>
+#include <m_gui.h>
+#include <m_icolib.h>
+#include <m_skin.h>
+
+#pragma comment(lib, "uxtheme")
+
+CDlgBase::CDlgBase(HINSTANCE hInst, int idDialog, HWND hwndParent) :
+ m_controls(1, CCtrlBase::cmp)
+{
+ m_hInst = hInst;
+ m_idDialog = idDialog;
+ m_hwndParent = hwndParent;
+ m_hwnd = NULL;
+ m_first = NULL;
+ m_isModal = false;
+ m_initialized = false;
+ m_autoClose = CLOSE_ON_OK | CLOSE_ON_CANCEL;
+ m_forceResizable = false;
+}
+
+CDlgBase::~CDlgBase()
+{
+ if (m_hwnd)
+ DestroyWindow(m_hwnd);
+}
+
+void CDlgBase::Create()
+{
+ ShowWindow(CreateDialogParam(m_hInst, MAKEINTRESOURCE(m_idDialog), m_hwndParent, GlobalDlgProc, (LPARAM)(CDlgBase *)this), SW_HIDE);
+}
+
+void CDlgBase::Show(int nCmdShow)
+{
+ ShowWindow(CreateDialogParam(m_hInst, MAKEINTRESOURCE(m_idDialog), m_hwndParent, GlobalDlgProc, (LPARAM)(CDlgBase *)this), nCmdShow);
+}
+
+int CDlgBase::DoModal()
+{
+ m_isModal = true;
+ return DialogBoxParam(m_hInst, MAKEINTRESOURCE(m_idDialog), m_hwndParent, GlobalDlgProc, (LPARAM)(CDlgBase *)this);
+}
+
+int CDlgBase::Resizer(UTILRESIZECONTROL*)
+{
+ return RD_ANCHORX_LEFT|RD_ANCHORY_TOP;
+}
+
+INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg) {
+ case WM_INITDIALOG:
+ m_initialized = false;
+ TranslateDialogDefault(m_hwnd);
+ {
+ for (CCtrlBase* p = m_first; p != NULL; p = p->m_next)
+ AddControl(p);
+ }
+ NotifyControls(&CCtrlBase::OnInit);
+ OnInitDialog();
+
+ m_initialized = true;
+ return TRUE;
+
+ case WM_MEASUREITEM:
+ {
+ MEASUREITEMSTRUCT *param = (MEASUREITEMSTRUCT *)lParam;
+ if (param && param->CtlID)
+ if (CCtrlBase *ctrl = FindControl(param->CtlID))
+ return ctrl->OnMeasureItem(param);
+ }
+ return FALSE;
+
+ case WM_DRAWITEM:
+ {
+ DRAWITEMSTRUCT *param = (DRAWITEMSTRUCT *)lParam;
+ if (param && param->CtlID)
+ if (CCtrlBase *ctrl = FindControl(param->CtlID))
+ return ctrl->OnDrawItem(param);
+ }
+ return FALSE;
+
+ case WM_DELETEITEM:
+ {
+ DELETEITEMSTRUCT *param = (DELETEITEMSTRUCT *)lParam;
+ if (param && param->CtlID)
+ if (CCtrlBase *ctrl = FindControl(param->CtlID))
+ return ctrl->OnDeleteItem(param);
+ }
+ return FALSE;
+
+ case WM_COMMAND:
+ {
+ HWND hwndCtrl = (HWND)lParam;
+ WORD idCtrl = LOWORD(wParam);
+ WORD idCode = HIWORD(wParam);
+ if (CCtrlBase *ctrl = FindControl(idCtrl)) {
+ BOOL result = ctrl->OnCommand(hwndCtrl, idCtrl, idCode);
+ if (result != FALSE)
+ return result;
+ }
+
+ if (idCode == BN_CLICKED &&
+ ((idCtrl == IDOK) && (m_autoClose & CLOSE_ON_OK) ||
+ (idCtrl == IDCANCEL) && (m_autoClose & CLOSE_ON_CANCEL)))
+ {
+ PostMessage(m_hwnd, WM_CLOSE, 0, 0);
+ }
+ return FALSE;
+ }
+
+ case WM_NOTIFY:
+ {
+ int idCtrl = wParam;
+ NMHDR *pnmh = (NMHDR *)lParam;
+ if (pnmh->idFrom == 0) {
+ if (pnmh->code == PSN_APPLY) {
+ NotifyControls(&CCtrlBase::OnApply);
+ OnApply();
+ }
+ else if (pnmh->code == PSN_RESET) {
+ NotifyControls(&CCtrlBase::OnReset);
+ OnReset();
+ }
+ }
+
+ if (CCtrlBase *ctrl = FindControl(pnmh->idFrom))
+ return ctrl->OnNotify(idCtrl, pnmh);
+ return FALSE;
+ }
+
+ case WM_SIZE:
+ if (m_forceResizable || (GetWindowLongPtr(m_hwnd, GWL_STYLE) & WS_SIZEBOX)) {
+ UTILRESIZEDIALOG urd;
+ urd.cbSize = sizeof(urd);
+ urd.hwndDlg = m_hwnd;
+ urd.hInstance = m_hInst;
+ urd.lpTemplate = MAKEINTRESOURCEA(m_idDialog);
+ urd.lParam = 0;
+ urd.pfnResizer = GlobalDlgResizer;
+ CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd);
+ }
+ return TRUE;
+
+ case WM_CLOSE:
+ m_lresult = FALSE;
+ OnClose();
+ if (!m_lresult) {
+ if (m_isModal)
+ EndDialog(m_hwnd, 0);
+ else
+ DestroyWindow(m_hwnd);
+ }
+ return TRUE;
+
+ case WM_DESTROY:
+ OnDestroy();
+ NotifyControls(&CCtrlBase::OnDestroy);
+
+ SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0);
+ m_hwnd = NULL;
+ if (m_isModal)
+ m_isModal = false;
+ else // modeless dialogs MUST be allocated with 'new'
+ delete this;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+INT_PTR CALLBACK CDlgBase::GlobalDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ CDlgBase *wnd = NULL;
+ if (msg == WM_INITDIALOG) {
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+ wnd = (CDlgBase *)lParam;
+ wnd->m_hwnd = hwnd;
+ }
+ else wnd = (CDlgBase *)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+
+ if (!wnd)
+ return FALSE;
+
+ wnd->m_msg.hwnd = hwnd;
+ wnd->m_msg.message = msg;
+ wnd->m_msg.wParam = wParam;
+ wnd->m_msg.lParam = lParam;
+ return wnd->DlgProc(msg, wParam, lParam);
+}
+
+int CDlgBase::GlobalDlgResizer(HWND hwnd, LPARAM, UTILRESIZECONTROL *urc)
+{
+ CDlgBase *wnd = (CDlgBase *)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ return (wnd == NULL) ? 0 : wnd->Resizer(urc);
+}
+
+void CDlgBase::ThemeDialogBackground(BOOL tabbed)
+{
+ EnableThemeDialogTexture(m_hwnd, (tabbed ? ETDT_ENABLE : ETDT_DISABLE) | ETDT_USETABTEXTURE);
+}
+
+void CDlgBase::AddControl(CCtrlBase *ctrl)
+{
+ m_controls.insert(ctrl);
+}
+
+void CDlgBase::NotifyControls(void (CCtrlBase::*fn)())
+{
+ for (int i=0; i < m_controls.getCount(); i++)
+ (m_controls[i]->*fn)();
+}
+
+CCtrlBase* CDlgBase::FindControl(int idCtrl)
+{
+ CCtrlBase search(NULL, idCtrl);
+ return m_controls.find(&search);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlCombo class
+
+CCtrlCombo::CCtrlCombo(CDlgBase* dlg, int ctrlId) :
+ CCtrlData(dlg, ctrlId)
+{
+}
+
+int CCtrlCombo::AddString(const TCHAR *text, LPARAM data)
+{
+ int iItem = SendMessage(m_hwnd, CB_ADDSTRING, 0, (LPARAM)text);
+ if (data)
+ SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data);
+ return iItem;
+}
+
+int CCtrlCombo::AddStringA(const char *text, LPARAM data)
+{
+ int iItem = SendMessageA(m_hwnd, CB_ADDSTRING, 0, (LPARAM)text);
+ if (data)
+ SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data);
+ return iItem;
+}
+
+void CCtrlCombo::DeleteString(int index)
+{ SendMessage(m_hwnd, CB_DELETESTRING, index, 0);
+}
+
+int CCtrlCombo::FindString(const TCHAR *str, int index, bool exact)
+{ return SendMessage(m_hwnd, exact?CB_FINDSTRINGEXACT:CB_FINDSTRING, index, (LPARAM)str);
+}
+
+int CCtrlCombo::FindStringA(const char *str, int index, bool exact)
+{ return SendMessageA(m_hwnd, exact?CB_FINDSTRINGEXACT:CB_FINDSTRING, index, (LPARAM)str);
+}
+
+int CCtrlCombo::GetCount()
+{ return SendMessage(m_hwnd, CB_GETCOUNT, 0, 0);
+}
+
+int CCtrlCombo::GetCurSel()
+{ return SendMessage(m_hwnd, CB_GETCURSEL, 0, 0);
+}
+
+bool CCtrlCombo::GetDroppedState()
+{ return SendMessage(m_hwnd, CB_GETDROPPEDSTATE, 0, 0) ? true : false;
+}
+
+LPARAM CCtrlCombo::GetItemData(int index)
+{ return SendMessage(m_hwnd, CB_GETITEMDATA, index, 0);
+}
+
+TCHAR* CCtrlCombo::GetItemText(int index)
+{
+ TCHAR *result = (TCHAR *)mir_alloc(sizeof(TCHAR) * (SendMessage(m_hwnd, CB_GETLBTEXTLEN, index, 0) + 1));
+ SendMessage(m_hwnd, CB_GETLBTEXT, index, (LPARAM)result);
+ return result;
+}
+
+TCHAR* CCtrlCombo::GetItemText(int index, TCHAR *buf, int size)
+{
+ TCHAR *result = (TCHAR *)_alloca(sizeof(TCHAR) * (SendMessage(m_hwnd, CB_GETLBTEXTLEN, index, 0) + 1));
+ SendMessage(m_hwnd, CB_GETLBTEXT, index, (LPARAM)result);
+ mir_tstrncpy(buf, result, size);
+ return buf;
+}
+
+int CCtrlCombo::InsertString(TCHAR *text, int pos, LPARAM data)
+{
+ int iItem = SendMessage(m_hwnd, CB_INSERTSTRING, pos, (LPARAM)text);
+ SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data);
+ return iItem;
+}
+
+void CCtrlCombo::ResetContent()
+{ SendMessage(m_hwnd, CB_RESETCONTENT, 0, 0);
+}
+
+int CCtrlCombo::SelectString(TCHAR *str)
+{ return SendMessage(m_hwnd, CB_SELECTSTRING, 0, (LPARAM)str);
+}
+
+int CCtrlCombo::SetCurSel(int index)
+{ return SendMessage(m_hwnd, CB_SETCURSEL, index, 0);
+}
+
+void CCtrlCombo::SetItemData(int index, LPARAM data)
+{ SendMessage(m_hwnd, CB_SETITEMDATA, index, data);
+}
+
+void CCtrlCombo::ShowDropdown(bool show)
+{ SendMessage(m_hwnd, CB_SHOWDROPDOWN, show ? TRUE : FALSE, 0);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlListBox class
+
+CCtrlListBox::CCtrlListBox(CDlgBase* dlg, int ctrlId) :
+ CCtrlBase(dlg, ctrlId)
+{
+}
+
+BOOL CCtrlListBox::OnCommand(HWND, WORD, WORD idCode)
+{
+ switch (idCode) {
+ case LBN_DBLCLK: OnDblClick(this); break;
+ case LBN_SELCANCEL: OnSelCancel(this); break;
+ case LBN_SELCHANGE: OnSelChange(this); break;
+ }
+ return TRUE;
+}
+
+int CCtrlListBox::AddString(TCHAR *text, LPARAM data)
+{
+ int iItem = SendMessage(m_hwnd, LB_ADDSTRING, 0, (LPARAM)text);
+ SendMessage(m_hwnd, LB_SETITEMDATA, iItem, data);
+ return iItem;
+}
+
+void CCtrlListBox::DeleteString(int index)
+{ SendMessage(m_hwnd, LB_DELETESTRING, index, 0);
+}
+
+int CCtrlListBox::FindString(TCHAR *str, int index, bool exact)
+{ return SendMessage(m_hwnd, exact?LB_FINDSTRINGEXACT:LB_FINDSTRING, index, (LPARAM)str);
+}
+
+int CCtrlListBox::GetCount()
+{ return SendMessage(m_hwnd, LB_GETCOUNT, 0, 0);
+}
+
+int CCtrlListBox::GetCurSel()
+{ return SendMessage(m_hwnd, LB_GETCURSEL, 0, 0);
+}
+
+LPARAM CCtrlListBox::GetItemData(int index)
+{ return SendMessage(m_hwnd, LB_GETITEMDATA, index, 0);
+}
+
+TCHAR* CCtrlListBox::GetItemText(int index)
+{
+ TCHAR *result = (TCHAR *)mir_alloc(sizeof(TCHAR) * (SendMessage(m_hwnd, LB_GETTEXTLEN, index, 0) + 1));
+ SendMessage(m_hwnd, LB_GETTEXT, index, (LPARAM)result);
+ return result;
+}
+
+TCHAR* CCtrlListBox::GetItemText(int index, TCHAR *buf, int size)
+{
+ TCHAR *result = (TCHAR *)_alloca(sizeof(TCHAR) * (SendMessage(m_hwnd, LB_GETTEXTLEN, index, 0) + 1));
+ SendMessage(m_hwnd, LB_GETTEXT, index, (LPARAM)result);
+ mir_tstrncpy(buf, result, size);
+ return buf;
+}
+
+bool CCtrlListBox::GetSel(int index)
+{ return SendMessage(m_hwnd, LB_GETSEL, index, 0) ? true : false;
+}
+
+int CCtrlListBox::GetSelCount()
+{ return SendMessage(m_hwnd, LB_GETSELCOUNT, 0, 0);
+}
+
+int* CCtrlListBox::GetSelItems(int *items, int count)
+{
+ SendMessage(m_hwnd, LB_GETSELITEMS, count, (LPARAM)items);
+ return items;
+}
+
+int* CCtrlListBox::GetSelItems()
+{
+ int count = GetSelCount() + 1;
+ int *result = (int *)mir_alloc(sizeof(int) * count);
+ SendMessage(m_hwnd, LB_GETSELITEMS, count, (LPARAM)result);
+ result[count-1] = -1;
+ return result;
+}
+
+int CCtrlListBox::InsertString(TCHAR *text, int pos, LPARAM data)
+{
+ int iItem = SendMessage(m_hwnd, CB_INSERTSTRING, pos, (LPARAM)text);
+ SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data);
+ return iItem;
+}
+
+void CCtrlListBox::ResetContent()
+{ SendMessage(m_hwnd, LB_RESETCONTENT, 0, 0);
+}
+
+int CCtrlListBox::SelectString(TCHAR *str)
+{ return SendMessage(m_hwnd, LB_SELECTSTRING, 0, (LPARAM)str);
+}
+
+int CCtrlListBox::SetCurSel(int index)
+{ return SendMessage(m_hwnd, LB_SETCURSEL, index, 0);
+}
+
+void CCtrlListBox::SetItemData(int index, LPARAM data)
+{ SendMessage(m_hwnd, LB_SETITEMDATA, index, data);
+}
+
+void CCtrlListBox::SetSel(int index, bool sel)
+{ SendMessage(m_hwnd, LB_SETSEL, sel ? TRUE : FALSE, index);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlCheck class
+
+CCtrlCheck::CCtrlCheck(CDlgBase* dlg, int ctrlId) :
+ CCtrlData(dlg, ctrlId)
+{
+}
+
+int CCtrlCheck::GetState()
+{
+ return SendMessage(m_hwnd, BM_GETCHECK, 0, 0);
+}
+
+void CCtrlCheck::SetState(int state)
+{
+ SendMessage(m_hwnd, BM_SETCHECK, state, 0);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlEdit class
+
+CCtrlEdit::CCtrlEdit(CDlgBase* dlg, int ctrlId) :
+ CCtrlData(dlg, ctrlId)
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlData class
+
+CCtrlData::CCtrlData(CDlgBase *wnd, int idCtrl) :
+ CCtrlBase(wnd, idCtrl),
+ m_dbLink(NULL)
+{
+}
+
+void CCtrlData::OnInit()
+{
+ CCtrlBase::OnInit();
+ m_changed = false;
+}
+
+void CCtrlData::NotifyChange()
+{
+ if (!m_parentWnd || m_parentWnd->IsInitialized()) m_changed = true;
+ if (m_parentWnd) {
+ m_parentWnd->OnChange(this);
+ if (m_parentWnd->IsInitialized())
+ ::SendMessage(::GetParent(m_parentWnd->GetHwnd()), PSM_CHANGED, 0, 0);
+ }
+
+ OnChange(this);
+}
+
+void CCtrlData::CreateDbLink(const char* szModuleName, const char* szSetting, BYTE type, DWORD iValue, bool bSigned)
+{
+ m_dbLink = new CDbLink(szModuleName, szSetting, type, iValue, bSigned);
+}
+
+void CCtrlData::CreateDbLink(const char* szModuleName, const char* szSetting, TCHAR* szValue)
+{
+ m_dbLink = new CDbLink(szModuleName, szSetting, DBVT_TCHAR, szValue);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlMButton
+
+CCtrlMButton::CCtrlMButton(CDlgBase* dlg, int ctrlId, HICON hIcon, const char* tooltip) :
+ CCtrlButton(dlg, ctrlId),
+ m_hIcon(hIcon),
+ m_toolTip(tooltip)
+{
+}
+
+CCtrlMButton::CCtrlMButton(CDlgBase* dlg, int ctrlId, int iCoreIcon, const char* tooltip) :
+ CCtrlButton(dlg, ctrlId),
+ m_hIcon(::LoadSkinnedIcon(iCoreIcon)),
+ m_toolTip(tooltip)
+{
+}
+
+CCtrlMButton::~CCtrlMButton()
+{
+ ::Skin_ReleaseIcon(m_hIcon);
+}
+
+void CCtrlMButton::OnInit()
+{
+ CCtrlButton::OnInit();
+
+ SendMessage(m_hwnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM)m_hIcon);
+ SendMessage(m_hwnd, BUTTONADDTOOLTIP, (WPARAM)m_toolTip, 0);
+ SendMessage(m_hwnd, BUTTONSETASFLATBTN, (WPARAM)m_toolTip, 0);
+}
+
+void CCtrlMButton::MakeFlat()
+{
+ SendMessage(m_hwnd, BUTTONSETASFLATBTN, TRUE, 0);
+}
+
+void CCtrlMButton::MakePush()
+{
+ SendMessage(m_hwnd, BUTTONSETASPUSHBTN, TRUE, 0);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlButton
+
+CCtrlButton::CCtrlButton(CDlgBase* wnd, int idCtrl) :
+ CCtrlBase(wnd, idCtrl)
+{
+}
+
+BOOL CCtrlButton::OnCommand(HWND, WORD, WORD idCode)
+{
+ if (idCode == BN_CLICKED || idCode == STN_CLICKED)
+ OnClick(this);
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlHyperlink
+
+CCtrlHyperlink::CCtrlHyperlink(CDlgBase* wnd, int idCtrl, const char* url) :
+ CCtrlBase(wnd, idCtrl),
+ m_url(url)
+{
+}
+
+BOOL CCtrlHyperlink::OnCommand(HWND, WORD, WORD)
+{
+ ShellExecuteA(m_hwnd, "open", m_url, "", "", SW_SHOW);
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlClc
+CCtrlClc::CCtrlClc(CDlgBase* dlg, int ctrlId):
+ CCtrlBase(dlg, ctrlId)
+{
+}
+
+BOOL CCtrlClc::OnNotify(int, NMHDR *pnmh)
+{
+ TEventInfo evt = { this, (NMCLISTCONTROL *)pnmh };
+ switch (pnmh->code) {
+ case CLN_EXPANDED: OnExpanded(&evt); break;
+ case CLN_LISTREBUILT: OnListRebuilt(&evt); break;
+ case CLN_ITEMCHECKED: OnItemChecked(&evt); break;
+ case CLN_DRAGGING: OnDragging(&evt); break;
+ case CLN_DROPPED: OnDropped(&evt); break;
+ case CLN_LISTSIZECHANGE: OnListSizeChange(&evt); break;
+ case CLN_OPTIONSCHANGED: OnOptionsChanged(&evt); break;
+ case CLN_DRAGSTOP: OnDragStop(&evt); break;
+ case CLN_NEWCONTACT: OnNewContact(&evt); break;
+ case CLN_CONTACTMOVED: OnContactMoved(&evt); break;
+ case CLN_CHECKCHANGED: OnCheckChanged(&evt); break;
+ case NM_CLICK: OnClick(&evt); break;
+ }
+ return FALSE;
+}
+
+void CCtrlClc::AddContact(MCONTACT hContact)
+{ SendMessage(m_hwnd, CLM_ADDCONTACT, hContact, 0);
+}
+
+void CCtrlClc::AddGroup(HANDLE hGroup)
+{ SendMessage(m_hwnd, CLM_ADDGROUP, (WPARAM)hGroup, 0);
+}
+
+void CCtrlClc::AutoRebuild()
+{ SendMessage(m_hwnd, CLM_AUTOREBUILD, 0, 0);
+}
+
+void CCtrlClc::DeleteItem(HANDLE hItem)
+{ SendMessage(m_hwnd, CLM_DELETEITEM, (WPARAM)hItem, 0);
+}
+
+void CCtrlClc::EditLabel(HANDLE hItem)
+{ SendMessage(m_hwnd, CLM_EDITLABEL, (WPARAM)hItem, 0);
+}
+
+void CCtrlClc::EndEditLabel(bool save)
+{ SendMessage(m_hwnd, CLM_ENDEDITLABELNOW, save ? 0 : 1, 0);
+}
+
+void CCtrlClc::EnsureVisible(HANDLE hItem, bool partialOk)
+{ SendMessage(m_hwnd, CLM_ENSUREVISIBLE, (WPARAM)hItem, partialOk ? TRUE : FALSE);
+}
+
+void CCtrlClc::Expand(HANDLE hItem, DWORD flags)
+{ SendMessage(m_hwnd, CLM_EXPAND, (WPARAM)hItem, flags);
+}
+
+HANDLE CCtrlClc::FindContact(MCONTACT hContact)
+{ return (HANDLE)SendMessage(m_hwnd, CLM_FINDCONTACT, hContact, 0);
+}
+
+HANDLE CCtrlClc::FindGroup(HANDLE hGroup)
+{ return (HANDLE)SendMessage(m_hwnd, CLM_FINDGROUP, (WPARAM)hGroup, 0);
+}
+
+COLORREF CCtrlClc::GetBkColor()
+{ return (COLORREF)SendMessage(m_hwnd, CLM_GETBKCOLOR, 0, 0);
+}
+
+bool CCtrlClc::GetCheck(HANDLE hItem)
+{ return SendMessage(m_hwnd, CLM_GETCHECKMARK, (WPARAM)hItem, 0) ? true : false;
+}
+
+int CCtrlClc::GetCount()
+{ return SendMessage(m_hwnd, CLM_GETCOUNT, 0, 0);
+}
+
+HWND CCtrlClc::GetEditControl()
+{ return (HWND)SendMessage(m_hwnd, CLM_GETEDITCONTROL, 0, 0);
+}
+
+DWORD CCtrlClc::GetExpand(HANDLE hItem)
+{ return SendMessage(m_hwnd, CLM_GETEXPAND, (WPARAM)hItem, 0);
+}
+
+int CCtrlClc::GetExtraColumns()
+{ return SendMessage(m_hwnd, CLM_GETEXTRACOLUMNS, 0, 0);
+}
+
+BYTE CCtrlClc::GetExtraImage(HANDLE hItem, int iColumn)
+{
+ return (BYTE)(SendMessage(m_hwnd, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, 0)) & 0xFFFF);
+}
+
+HIMAGELIST CCtrlClc::GetExtraImageList()
+{ return (HIMAGELIST)SendMessage(m_hwnd, CLM_GETEXTRAIMAGELIST, 0, 0);
+}
+
+HFONT CCtrlClc::GetFont(int iFontId)
+{ return (HFONT)SendMessage(m_hwnd, CLM_GETFONT, (WPARAM)iFontId, 0);
+}
+
+HANDLE CCtrlClc::GetSelection()
+{ return (HANDLE)SendMessage(m_hwnd, CLM_GETSELECTION, 0, 0);
+}
+
+HANDLE CCtrlClc::HitTest(int x, int y, DWORD *hitTest)
+{ return (HANDLE)SendMessage(m_hwnd, CLM_HITTEST, (WPARAM)hitTest, MAKELPARAM(x,y));
+}
+
+void CCtrlClc::SelectItem(HANDLE hItem)
+{ SendMessage(m_hwnd, CLM_SELECTITEM, (WPARAM)hItem, 0);
+}
+
+void CCtrlClc::SetBkBitmap(DWORD mode, HBITMAP hBitmap)
+{ SendMessage(m_hwnd, CLM_SETBKBITMAP, mode, (LPARAM)hBitmap);
+}
+
+void CCtrlClc::SetBkColor(COLORREF clBack)
+{ SendMessage(m_hwnd, CLM_SETBKCOLOR, (WPARAM)clBack, 0);
+}
+
+void CCtrlClc::SetCheck(HANDLE hItem, bool check)
+{ SendMessage(m_hwnd, CLM_SETCHECKMARK, (WPARAM)hItem, check ? 1 : 0);
+}
+
+void CCtrlClc::SetExtraColumns(int iColumns)
+{ SendMessage(m_hwnd, CLM_SETEXTRACOLUMNS, (WPARAM)iColumns, 0);
+}
+
+void CCtrlClc::SetExtraImage(HANDLE hItem, int iColumn, int iImage)
+{ SendMessage(m_hwnd, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage));
+}
+
+void CCtrlClc::SetExtraImageList(HIMAGELIST hImgList)
+{ SendMessage(m_hwnd, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hImgList);
+}
+
+void CCtrlClc::SetFont(int iFontId, HANDLE hFont, bool bRedraw)
+{ SendMessage(m_hwnd, CLM_SETFONT, (WPARAM)hFont, MAKELPARAM(bRedraw ? 1 : 0, iFontId));
+}
+
+void CCtrlClc::SetIndent(int iIndent)
+{ SendMessage(m_hwnd, CLM_SETINDENT, (WPARAM)iIndent, 0);
+}
+
+void CCtrlClc::SetItemText(HANDLE hItem, char *szText)
+{ SendMessage(m_hwnd, CLM_SETITEMTEXT, (WPARAM)hItem, (LPARAM)szText);
+}
+
+void CCtrlClc::SetHideEmptyGroups(bool state)
+{ SendMessage(m_hwnd, CLM_SETHIDEEMPTYGROUPS, state ? 1 : 0, 0);
+}
+
+void CCtrlClc::SetGreyoutFlags(DWORD flags)
+{ SendMessage(m_hwnd, CLM_SETGREYOUTFLAGS, (WPARAM)flags, 0);
+}
+
+bool CCtrlClc::GetHideOfflineRoot()
+{ return SendMessage(m_hwnd, CLM_GETHIDEOFFLINEROOT, 0, 0) ? true : false;
+}
+
+void CCtrlClc::SetHideOfflineRoot(bool state)
+{ SendMessage(m_hwnd, CLM_SETHIDEOFFLINEROOT, state ? 1 : 0, 9);
+}
+
+void CCtrlClc::SetUseGroups(bool state)
+{ SendMessage(m_hwnd, CLM_SETUSEGROUPS, state ? 1 : 0, 0);
+}
+
+void CCtrlClc::SetOfflineModes(DWORD modes)
+{ SendMessage(m_hwnd, CLM_SETOFFLINEMODES, modes, 0);
+}
+
+DWORD CCtrlClc::GetExStyle()
+{ return SendMessage(m_hwnd, CLM_GETEXSTYLE, 0, 0);
+}
+
+void CCtrlClc::SetExStyle(DWORD exStyle)
+{ SendMessage(m_hwnd, CLM_SETEXSTYLE, (WPARAM)exStyle, 0);
+}
+
+int CCtrlClc::GetLefrMargin()
+{ return SendMessage(m_hwnd, CLM_GETLEFTMARGIN, 0, 0);
+}
+
+void CCtrlClc::SetLeftMargin(int iMargin)
+{ SendMessage(m_hwnd, CLM_SETLEFTMARGIN, (WPARAM)iMargin, 0);
+}
+
+HANDLE CCtrlClc::AddInfoItem(CLCINFOITEM *cii)
+{ return (HANDLE)SendMessage(m_hwnd, CLM_ADDINFOITEM, 0, (LPARAM)cii);
+}
+
+int CCtrlClc::GetItemType(HANDLE hItem)
+{ return SendMessage(m_hwnd, CLM_GETITEMTYPE, (WPARAM)hItem, 0);
+}
+
+HANDLE CCtrlClc::GetNextItem(HANDLE hItem, DWORD flags)
+{ return (HANDLE)SendMessage(m_hwnd, CLM_GETNEXTITEM, (WPARAM)flags, (LPARAM)hItem);
+}
+
+COLORREF CCtrlClc::GetTextColot(int iFontId)
+{ return (COLORREF)SendMessage(m_hwnd, CLM_GETTEXTCOLOR, (WPARAM)iFontId, 0);
+}
+
+void CCtrlClc::SetTextColor(int iFontId, COLORREF clText)
+{ SendMessage(m_hwnd, CLM_SETTEXTCOLOR, (WPARAM)iFontId, (LPARAM)clText);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlListView
+
+CCtrlListView::CCtrlListView(CDlgBase* dlg, int ctrlId) :
+ CCtrlBase(dlg, ctrlId)
+{
+}
+
+BOOL CCtrlListView::OnNotify(int, NMHDR *pnmh)
+{
+ TEventInfo evt = { this, pnmh };
+
+ switch (pnmh->code) {
+ case NM_DBLCLK: OnDoubleClick(&evt); return TRUE;
+ case LVN_BEGINDRAG: OnBeginDrag(&evt); return TRUE;
+ case LVN_BEGINLABELEDIT: OnBeginLabelEdit(&evt); return TRUE;
+ case LVN_BEGINRDRAG: OnBeginRDrag(&evt); return TRUE;
+ case LVN_BEGINSCROLL: OnBeginScroll(&evt); return TRUE;
+ case LVN_COLUMNCLICK: OnColumnClick(&evt); return TRUE;
+ case LVN_DELETEALLITEMS: OnDeleteAllItems(&evt); return TRUE;
+ case LVN_DELETEITEM: OnDeleteItem(&evt); return TRUE;
+ case LVN_ENDLABELEDIT: OnEndLabelEdit(&evt); return TRUE;
+ case LVN_ENDSCROLL: OnEndScroll(&evt); return TRUE;
+ case LVN_GETDISPINFO: OnGetDispInfo(&evt); return TRUE;
+ case LVN_GETINFOTIP: OnGetInfoTip(&evt); return TRUE;
+ case LVN_HOTTRACK: OnHotTrack(&evt); return TRUE;
+ //case LVN_INCREMENTALSEARCH: OnIncrementalSearch(&evt); return TRUE;
+ case LVN_INSERTITEM: OnInsertItem(&evt); return TRUE;
+ case LVN_ITEMACTIVATE: OnItemActivate(&evt); return TRUE;
+ case LVN_ITEMCHANGED: OnItemChanged(&evt); return TRUE;
+ case LVN_ITEMCHANGING: OnItemChanging(&evt); return TRUE;
+ case LVN_KEYDOWN: OnKeyDown(&evt); return TRUE;
+ case LVN_MARQUEEBEGIN: OnMarqueeBegin(&evt); return TRUE;
+ case LVN_SETDISPINFO: OnSetDispInfo(&evt); return TRUE;
+ }
+
+ return FALSE;
+}
+
+// additional api
+HIMAGELIST CCtrlListView::CreateImageList(int iImageList)
+{
+ HIMAGELIST hIml;
+ if (hIml = GetImageList(iImageList))
+ return hIml;
+
+ hIml = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1);
+ SetImageList(hIml, iImageList);
+ return hIml;
+}
+
+void CCtrlListView::AddColumn(int iSubItem, TCHAR *name, int cx)
+{
+ LVCOLUMN lvc;
+ lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
+ lvc.iImage = 0;
+ lvc.pszText = name;
+ lvc.cx = cx;
+ lvc.iSubItem = iSubItem;
+ InsertColumn(iSubItem, &lvc);
+}
+
+void CCtrlListView::AddGroup(int iGroupId, TCHAR *name)
+{
+ LVGROUP lvg = {0};
+ lvg.cbSize = sizeof(lvg);
+ lvg.mask = LVGF_HEADER | LVGF_GROUPID;
+ lvg.pszHeader = name;
+ lvg.cchHeader = (int)mir_tstrlen(lvg.pszHeader);
+ lvg.iGroupId = iGroupId;
+ InsertGroup(-1, &lvg);
+}
+
+int CCtrlListView::AddItem(TCHAR *text, int iIcon, LPARAM lParam, int iGroupId)
+{
+ LVITEM lvi = {0};
+ lvi.mask = LVIF_PARAM | LVIF_TEXT | LVIF_IMAGE;
+ lvi.iSubItem = 0;
+ lvi.pszText = text;
+ lvi.iImage = iIcon;
+ lvi.lParam = lParam;
+ if (iGroupId >= 0) {
+ lvi.mask |= LVIF_GROUPID;
+ lvi.iGroupId = iGroupId;
+ }
+
+ return InsertItem(&lvi);
+}
+
+void CCtrlListView::SetItem(int iItem, int iSubItem, TCHAR *text, int iIcon)
+{
+ LVITEM lvi = {0};
+ lvi.mask = LVIF_TEXT;
+ lvi.iItem = iItem;
+ lvi.iSubItem = iSubItem;
+ lvi.pszText = text;
+ if (iIcon >= 0) {
+ lvi.mask |= LVIF_IMAGE;
+ lvi.iImage = iIcon;
+ }
+
+ SetItem(&lvi);
+}
+
+LPARAM CCtrlListView::GetItemData(int iItem)
+{
+ LVITEM lvi = {0};
+ lvi.mask = LVIF_PARAM;
+ lvi.iItem = iItem;
+ GetItem(&lvi);
+ return lvi.lParam;
+}
+
+// classic api
+DWORD CCtrlListView::ApproximateViewRect(int cx, int cy, int iCount)
+{ return ListView_ApproximateViewRect(m_hwnd, cx, cy, iCount);
+}
+void CCtrlListView::Arrange(UINT code)
+{ ListView_Arrange(m_hwnd, code);
+}
+void CCtrlListView::CancelEditLabel()
+{ ListView_CancelEditLabel(m_hwnd);
+}
+HIMAGELIST CCtrlListView::CreateDragImage(int iItem, LPPOINT lpptUpLeft)
+{ return ListView_CreateDragImage(m_hwnd, iItem, lpptUpLeft);
+}
+void CCtrlListView::DeleteAllItems()
+{ ListView_DeleteAllItems(m_hwnd);
+}
+void CCtrlListView::DeleteColumn(int iCol)
+{ ListView_DeleteColumn(m_hwnd, iCol);
+}
+void CCtrlListView::DeleteItem(int iItem)
+{ ListView_DeleteItem(m_hwnd, iItem);
+}
+HWND CCtrlListView::EditLabel(int iItem)
+{ return ListView_EditLabel(m_hwnd, iItem);
+}
+int CCtrlListView::EnableGroupView(BOOL fEnable)
+{ return ListView_EnableGroupView(m_hwnd, fEnable);
+}
+BOOL CCtrlListView::EnsureVisible(int i, BOOL fPartialOK)
+{ return ListView_EnsureVisible(m_hwnd, i, fPartialOK);
+}
+int CCtrlListView::FindItem(int iStart, const LVFINDINFO *plvfi)
+{ return ListView_FindItem(m_hwnd, iStart, plvfi);
+}
+COLORREF CCtrlListView::GetBkColor()
+{ return ListView_GetBkColor(m_hwnd);
+}
+void CCtrlListView::GetBkImage(LPLVBKIMAGE plvbki)
+{ ListView_GetBkImage(m_hwnd, plvbki);
+}
+UINT CCtrlListView::GetCallbackMask()
+{ return ListView_GetCallbackMask(m_hwnd);
+}
+BOOL CCtrlListView::GetCheckState(UINT iIndex)
+{ return ListView_GetCheckState(m_hwnd, iIndex);
+}
+void CCtrlListView::GetColumn(int iCol, LPLVCOLUMN pcol)
+{ ListView_GetColumn(m_hwnd, iCol, pcol);
+}
+void CCtrlListView::GetColumnOrderArray(int iCount, int *lpiArray)
+{ ListView_GetColumnOrderArray(m_hwnd, iCount, lpiArray);
+}
+int CCtrlListView::GetColumnWidth(int iCol)
+{ return ListView_GetColumnWidth(m_hwnd, iCol);
+}
+int CCtrlListView::GetCountPerPage()
+{ return ListView_GetCountPerPage(m_hwnd);
+}
+HWND CCtrlListView::GetEditControl()
+{ return ListView_GetEditControl(m_hwnd);
+}
+DWORD CCtrlListView::GetExtendedListViewStyle()
+{ return ListView_GetExtendedListViewStyle(m_hwnd);
+}
+void CCtrlListView::GetGroupMetrics(LVGROUPMETRICS *pGroupMetrics)
+{ ListView_GetGroupMetrics(m_hwnd, pGroupMetrics);
+}
+HWND CCtrlListView::GetHeader()
+{ return ListView_GetHeader(m_hwnd);
+}
+HCURSOR CCtrlListView::GetHotCursor()
+{ return ListView_GetHotCursor(m_hwnd);
+}
+INT CCtrlListView::GetHotItem()
+{ return ListView_GetHotItem(m_hwnd);
+}
+DWORD CCtrlListView::GetHoverTime()
+{ return ListView_GetHoverTime(m_hwnd);
+}
+HIMAGELIST CCtrlListView::GetImageList(int iImageList)
+{ return ListView_GetImageList(m_hwnd, iImageList);
+}
+BOOL CCtrlListView::GetInsertMark(LVINSERTMARK *plvim)
+{ return ListView_GetInsertMark(m_hwnd, plvim);
+}
+COLORREF CCtrlListView::GetInsertMarkColor()
+{ return ListView_GetInsertMarkColor(m_hwnd);
+}
+int CCtrlListView::GetInsertMarkRect(LPRECT prc)
+{ return ListView_GetInsertMarkRect(m_hwnd, prc);
+}
+BOOL CCtrlListView::GetISearchString(LPSTR lpsz)
+{ return ListView_GetISearchString(m_hwnd, lpsz);
+}
+void CCtrlListView::GetItem(LPLVITEM pitem)
+{ ListView_GetItem(m_hwnd, pitem);
+}
+int CCtrlListView::GetItemCount()
+{ return ListView_GetItemCount(m_hwnd);
+}
+void CCtrlListView::GetItemPosition(int i, POINT *ppt)
+{ ListView_GetItemPosition(m_hwnd, i, ppt);
+}
+void CCtrlListView::GetItemRect(int i, RECT *prc, int code)
+{ ListView_GetItemRect(m_hwnd, i, prc, code);
+}
+DWORD CCtrlListView::GetItemSpacing(BOOL fSmall)
+{ return ListView_GetItemSpacing(m_hwnd, fSmall);
+}
+UINT CCtrlListView::GetItemState(int i, UINT mask)
+{ return ListView_GetItemState(m_hwnd, i, mask);
+}
+void CCtrlListView::GetItemText(int iItem, int iSubItem, LPTSTR pszText, int cchTextMax)
+{ ListView_GetItemText(m_hwnd, iItem, iSubItem, pszText, cchTextMax);
+}
+int CCtrlListView::GetNextItem(int iStart, UINT flags)
+{ return ListView_GetNextItem(m_hwnd, iStart, flags);
+}
+BOOL CCtrlListView::GetNumberOfWorkAreas(LPUINT lpuWorkAreas)
+{ return ListView_GetNumberOfWorkAreas(m_hwnd, lpuWorkAreas);
+}
+BOOL CCtrlListView::GetOrigin(LPPOINT lpptOrg)
+{ return ListView_GetOrigin(m_hwnd, lpptOrg);
+}
+COLORREF CCtrlListView::GetOutlineColor()
+{ return ListView_GetOutlineColor(m_hwnd);
+}
+UINT CCtrlListView::GetSelectedColumn()
+{ return ListView_GetSelectedColumn(m_hwnd);
+}
+UINT CCtrlListView::GetSelectedCount()
+{ return ListView_GetSelectedCount(m_hwnd);
+}
+INT CCtrlListView::GetSelectionMark()
+{ return ListView_GetSelectionMark(m_hwnd);
+}
+int CCtrlListView::GetStringWidth(LPCSTR psz)
+{ return ListView_GetStringWidth(m_hwnd, psz);
+}
+BOOL CCtrlListView::GetSubItemRect(int iItem, int iSubItem, int code, LPRECT lpRect)
+{ return ListView_GetSubItemRect(m_hwnd, iItem, iSubItem, code, lpRect);
+}
+COLORREF CCtrlListView::GetTextBkColor()
+{ return ListView_GetTextBkColor(m_hwnd);
+}
+COLORREF CCtrlListView::GetTextColor()
+{ return ListView_GetTextColor(m_hwnd);
+}
+void CCtrlListView::GetTileInfo(PLVTILEINFO plvtinfo)
+{ ListView_GetTileInfo(m_hwnd, plvtinfo);
+}
+void CCtrlListView::GetTileViewInfo(PLVTILEVIEWINFO plvtvinfo)
+{ ListView_GetTileViewInfo(m_hwnd, plvtvinfo);
+}
+HWND CCtrlListView::GetToolTips()
+{ return ListView_GetToolTips(m_hwnd);
+}
+int CCtrlListView::GetTopIndex()
+{ return ListView_GetTopIndex(m_hwnd);
+}
+BOOL CCtrlListView::GetUnicodeFormat()
+{ return ListView_GetUnicodeFormat(m_hwnd);
+}
+DWORD CCtrlListView::GetView()
+{ return ListView_GetView(m_hwnd);
+}
+BOOL CCtrlListView::GetViewRect(RECT *prc)
+{ return ListView_GetViewRect(m_hwnd, prc);
+}
+void CCtrlListView::GetWorkAreas(INT nWorkAreas, LPRECT lprc)
+{ ListView_GetWorkAreas(m_hwnd, nWorkAreas, lprc);
+}
+BOOL CCtrlListView::HasGroup(int dwGroupId)
+{ return ListView_HasGroup(m_hwnd, dwGroupId);
+}
+int CCtrlListView::HitTest(LPLVHITTESTINFO pinfo)
+{ return ListView_HitTest(m_hwnd, pinfo);
+}
+int CCtrlListView::InsertColumn(int iCol, const LPLVCOLUMN pcol)
+{ return ListView_InsertColumn(m_hwnd, iCol, pcol);
+}
+int CCtrlListView::InsertGroup(int index, PLVGROUP pgrp)
+{ return ListView_InsertGroup(m_hwnd, index, pgrp);
+}
+void CCtrlListView::InsertGroupSorted(PLVINSERTGROUPSORTED structInsert)
+{ ListView_InsertGroupSorted(m_hwnd, structInsert);
+}
+int CCtrlListView::InsertItem(const LPLVITEM pitem)
+{ return ListView_InsertItem(m_hwnd, pitem);
+}
+BOOL CCtrlListView::InsertMarkHitTest(LPPOINT point, LVINSERTMARK *plvim)
+{ return ListView_InsertMarkHitTest(m_hwnd, point, plvim);
+}
+BOOL CCtrlListView::IsGroupViewEnabled()
+{ return ListView_IsGroupViewEnabled(m_hwnd);
+}
+UINT CCtrlListView::MapIDToIndex(UINT id)
+{ return ListView_MapIDToIndex(m_hwnd, id);
+}
+UINT CCtrlListView::MapIndexToID(UINT index)
+{ return ListView_MapIndexToID(m_hwnd, index);
+}
+BOOL CCtrlListView::RedrawItems(int iFirst, int iLast)
+{ return ListView_RedrawItems(m_hwnd, iFirst, iLast);
+}
+void CCtrlListView::RemoveAllGroups()
+{ ListView_RemoveAllGroups(m_hwnd);
+}
+int CCtrlListView::RemoveGroup(int iGroupId)
+{ return ListView_RemoveGroup(m_hwnd, iGroupId);
+}
+BOOL CCtrlListView::Scroll(int dx, int dy)
+{ return ListView_Scroll(m_hwnd, dx, dy);
+}
+BOOL CCtrlListView::SetBkColor(COLORREF clrBk)
+{ return ListView_SetBkColor(m_hwnd, clrBk);
+}
+BOOL CCtrlListView::SetBkImage(LPLVBKIMAGE plvbki)
+{ return ListView_SetBkImage(m_hwnd, plvbki);
+}
+BOOL CCtrlListView::SetCallbackMask(UINT mask)
+{ return ListView_SetCallbackMask(m_hwnd, mask);
+}
+void CCtrlListView::SetCheckState(UINT iIndex, BOOL fCheck)
+{ ListView_SetCheckState(m_hwnd, iIndex, fCheck);
+}
+BOOL CCtrlListView::SetColumn(int iCol, LPLVCOLUMN pcol)
+{ return ListView_SetColumn(m_hwnd, iCol, pcol);
+}
+BOOL CCtrlListView::SetColumnOrderArray(int iCount, int *lpiArray)
+{ return ListView_SetColumnOrderArray(m_hwnd, iCount, lpiArray);
+}
+BOOL CCtrlListView::SetColumnWidth(int iCol, int cx)
+{ return ListView_SetColumnWidth(m_hwnd, iCol, cx);
+}
+void CCtrlListView::SetExtendedListViewStyle(DWORD dwExStyle)
+{ ListView_SetExtendedListViewStyle(m_hwnd, dwExStyle);
+}
+void CCtrlListView::SetExtendedListViewStyleEx(DWORD dwExMask, DWORD dwExStyle)
+{ ListView_SetExtendedListViewStyleEx(m_hwnd, dwExMask, dwExStyle);
+}
+int CCtrlListView::SetGroupInfo(int iGroupId, PLVGROUP pgrp)
+{ return ListView_SetGroupInfo(m_hwnd, iGroupId, pgrp);
+}
+void CCtrlListView::SetGroupMetrics(PLVGROUPMETRICS pGroupMetrics)
+{ ListView_SetGroupMetrics(m_hwnd, pGroupMetrics);
+}
+HCURSOR CCtrlListView::SetHotCursor(HCURSOR hCursor)
+{ return ListView_SetHotCursor(m_hwnd, hCursor);
+}
+INT CCtrlListView::SetHotItem(INT iIndex)
+{ return ListView_SetHotItem(m_hwnd, iIndex);
+}
+void CCtrlListView::SetHoverTime(DWORD dwHoverTime)
+{ ListView_SetHoverTime(m_hwnd, dwHoverTime);
+}
+DWORD CCtrlListView::SetIconSpacing(int cx, int cy)
+{ return ListView_SetIconSpacing(m_hwnd, cx, cy);
+}
+HIMAGELIST CCtrlListView::SetImageList(HIMAGELIST himl, int iImageList)
+{ return ListView_SetImageList(m_hwnd, himl, iImageList);
+}
+BOOL CCtrlListView::SetInfoTip(PLVSETINFOTIP plvSetInfoTip)
+{ return ListView_SetInfoTip(m_hwnd, plvSetInfoTip);
+}
+BOOL CCtrlListView::SetInsertMark(LVINSERTMARK *plvim)
+{ return ListView_SetInsertMark(m_hwnd, plvim);
+}
+COLORREF CCtrlListView::SetInsertMarkColor(COLORREF color)
+{ return ListView_SetInsertMarkColor(m_hwnd, color);
+}
+BOOL CCtrlListView::SetItem(const LPLVITEM pitem)
+{ return ListView_SetItem(m_hwnd, pitem);
+}
+void CCtrlListView::SetItemCount(int cItems)
+{ ListView_SetItemCount(m_hwnd, cItems);
+}
+void CCtrlListView::SetItemCountEx(int cItems, DWORD dwFlags)
+{ ListView_SetItemCountEx(m_hwnd, cItems, dwFlags);
+}
+BOOL CCtrlListView::SetItemPosition(int i, int x, int y)
+{ return ListView_SetItemPosition(m_hwnd, i, x, y);
+}
+void CCtrlListView::SetItemPosition32(int iItem, int x, int y)
+{ ListView_SetItemPosition32(m_hwnd, iItem, x, y);
+}
+void CCtrlListView::SetItemState(int i, UINT state, UINT mask)
+{ ListView_SetItemState(m_hwnd, i, state, mask);
+}
+void CCtrlListView::SetItemText(int i, int iSubItem, TCHAR *pszText)
+{ ListView_SetItemText(m_hwnd, i, iSubItem, pszText);
+}
+COLORREF CCtrlListView::SetOutlineColor(COLORREF color)
+{ return ListView_SetOutlineColor(m_hwnd, color);
+}
+void CCtrlListView::SetSelectedColumn(int iCol)
+{ ListView_SetSelectedColumn(m_hwnd, iCol);
+}
+INT CCtrlListView::SetSelectionMark(INT iIndex)
+{ return ListView_SetSelectionMark(m_hwnd, iIndex);
+}
+BOOL CCtrlListView::SetTextBkColor(COLORREF clrText)
+{ return ListView_SetTextBkColor(m_hwnd, clrText);
+}
+BOOL CCtrlListView::SetTextColor(COLORREF clrText)
+{ return ListView_SetTextColor(m_hwnd, clrText);
+}
+BOOL CCtrlListView::SetTileInfo(PLVTILEINFO plvtinfo)
+{ return ListView_SetTileInfo(m_hwnd, plvtinfo);
+}
+BOOL CCtrlListView::SetTileViewInfo(PLVTILEVIEWINFO plvtvinfo)
+{ return ListView_SetTileViewInfo(m_hwnd, plvtvinfo);
+}
+HWND CCtrlListView::SetToolTips(HWND ToolTip)
+{ return ListView_SetToolTips(m_hwnd, ToolTip);
+}
+BOOL CCtrlListView::SetUnicodeFormat(BOOL fUnicode)
+{ return ListView_SetUnicodeFormat(m_hwnd, fUnicode);
+}
+int CCtrlListView::SetView(DWORD iView)
+{ return ListView_SetView(m_hwnd, iView);
+}
+void CCtrlListView::SetWorkAreas(INT nWorkAreas, LPRECT lprc)
+{ ListView_SetWorkAreas(m_hwnd, nWorkAreas, lprc);
+}
+int CCtrlListView::SortGroups(PFNLVGROUPCOMPARE pfnGroupCompare, LPVOID plv)
+{ return ListView_SortGroups(m_hwnd, pfnGroupCompare, plv);
+}
+BOOL CCtrlListView::SortItems(PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
+{ return ListView_SortItems(m_hwnd, pfnCompare, lParamSort);
+}
+BOOL CCtrlListView::SortItemsEx(PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
+{ return ListView_SortItemsEx(m_hwnd, pfnCompare, lParamSort);
+}
+INT CCtrlListView::SubItemHitTest(LPLVHITTESTINFO pInfo)
+{ return ListView_SubItemHitTest(m_hwnd, pInfo);
+}
+//INT CCtrlListView::SubItemHitTestEx(LPLVHITTESTINFO plvhti)
+//{ return ListView_SubItemHitTestEx(m_hwnd, plvhti);
+//}
+BOOL CCtrlListView::Update(int iItem)
+{ return ListView_Update(m_hwnd, iItem);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlTreeView
+
+CCtrlTreeView::CCtrlTreeView(CDlgBase* dlg, int ctrlId):
+ CCtrlBase(dlg, ctrlId)
+{
+}
+
+BOOL CCtrlTreeView::OnNotify(int, NMHDR *pnmh)
+{
+ TEventInfo evt = { this, pnmh };
+
+ switch (pnmh->code) {
+ case TVN_BEGINDRAG: OnBeginDrag(&evt); return TRUE;
+ case TVN_BEGINLABELEDIT: OnBeginLabelEdit(&evt); return TRUE;
+ case TVN_BEGINRDRAG: OnBeginRDrag(&evt); return TRUE;
+ case TVN_DELETEITEM: OnDeleteItem(&evt); return TRUE;
+ case TVN_ENDLABELEDIT: OnEndLabelEdit(&evt); return TRUE;
+ case TVN_GETDISPINFO: OnGetDispInfo(&evt); return TRUE;
+ case TVN_GETINFOTIP: OnGetInfoTip(&evt); return TRUE;
+ case TVN_ITEMEXPANDED: OnItemExpanded(&evt); return TRUE;
+ case TVN_ITEMEXPANDING: OnItemExpanding(&evt); return TRUE;
+ case TVN_KEYDOWN: OnKeyDown(&evt); return TRUE;
+ case TVN_SELCHANGED: OnSelChanged(&evt); return TRUE;
+ case TVN_SELCHANGING: OnSelChanging(&evt); return TRUE;
+ case TVN_SETDISPINFO: OnSetDispInfo(&evt); return TRUE;
+ case TVN_SINGLEEXPAND: OnSingleExpand(&evt); return TRUE;
+ }
+
+ return FALSE;
+}
+
+void CCtrlTreeView::TranslateItem(HTREEITEM hItem)
+{
+ TVITEMEX tvi;
+ TCHAR buf[128];
+ GetItem(hItem, &tvi, buf, SIZEOF(buf));
+ tvi.pszText = TranslateTS(tvi.pszText);
+ SetItem(&tvi);
+}
+
+void CCtrlTreeView::TranslateTree()
+{
+ HTREEITEM hItem = GetRoot();
+ while (hItem) {
+ TranslateItem(hItem);
+
+ HTREEITEM hItemTmp = 0;
+ if (hItemTmp = GetChild(hItem))
+ hItem = hItemTmp;
+ else if (hItemTmp = GetNextSibling(hItem))
+ hItem = hItemTmp;
+ else {
+ while (true) {
+ if (!(hItem = GetParent(hItem)))
+ break;
+ if (hItemTmp = GetNextSibling(hItem)) {
+ hItem = hItemTmp;
+ break;
+ }
+ }
+ }
+ }
+}
+
+HTREEITEM CCtrlTreeView::FindNamedItem(HTREEITEM hItem, const TCHAR *name)
+{
+ TVITEMEX tvi = {0};
+ TCHAR str[MAX_PATH];
+
+ if (hItem)
+ tvi.hItem = GetChild(hItem);
+ else
+ tvi.hItem = GetRoot();
+
+ if (!name)
+ return tvi.hItem;
+
+ tvi.mask = TVIF_TEXT;
+ tvi.pszText = str;
+ tvi.cchTextMax = SIZEOF(str);
+
+ while (tvi.hItem) {
+ GetItem(&tvi);
+
+ if (!mir_tstrcmp(tvi.pszText, name))
+ return tvi.hItem;
+
+ tvi.hItem = GetNextSibling(tvi.hItem);
+ }
+ return NULL;
+}
+
+void CCtrlTreeView::GetItem(HTREEITEM hItem, TVITEMEX *tvi)
+{
+ memset(tvi, 0, sizeof(*tvi));
+ tvi->mask = TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_INTEGRAL|TVIF_PARAM|TVIF_SELECTEDIMAGE|TVIF_STATE;
+ tvi->hItem = hItem;
+ GetItem(tvi);
+}
+
+void CCtrlTreeView::GetItem(HTREEITEM hItem, TVITEMEX *tvi, TCHAR *szText, int iTextLength)
+{
+ memset(tvi, 0, sizeof(*tvi));
+ tvi->mask = TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_INTEGRAL|TVIF_PARAM|TVIF_SELECTEDIMAGE|TVIF_STATE|TVIF_TEXT;
+ tvi->hItem = hItem;
+ tvi->pszText = szText;
+ tvi->cchTextMax = iTextLength;
+ GetItem(tvi);
+}
+
+HIMAGELIST CCtrlTreeView::CreateDragImage(HTREEITEM hItem)
+{ return TreeView_CreateDragImage(m_hwnd, hItem);
+}
+
+void CCtrlTreeView::DeleteAllItems()
+{ TreeView_DeleteAllItems(m_hwnd);
+}
+
+void CCtrlTreeView::DeleteItem(HTREEITEM hItem)
+{ TreeView_DeleteItem(m_hwnd, hItem);
+}
+
+HWND CCtrlTreeView::EditLabel(HTREEITEM hItem)
+{ return TreeView_EditLabel(m_hwnd, hItem);
+}
+
+void CCtrlTreeView::EndEditLabelNow(BOOL cancel)
+{ TreeView_EndEditLabelNow(m_hwnd, cancel);
+}
+
+void CCtrlTreeView::EnsureVisible(HTREEITEM hItem)
+{ TreeView_EnsureVisible(m_hwnd, hItem);
+}
+
+void CCtrlTreeView::Expand(HTREEITEM hItem, DWORD flag)
+{ TreeView_Expand(m_hwnd, hItem, flag);
+}
+
+COLORREF CCtrlTreeView::GetBkColor()
+{ return TreeView_GetBkColor(m_hwnd);
+}
+
+DWORD CCtrlTreeView::GetCheckState(HTREEITEM hItem)
+{ return TreeView_GetCheckState(m_hwnd, hItem);
+}
+
+HTREEITEM CCtrlTreeView::GetChild(HTREEITEM hItem)
+{ return TreeView_GetChild(m_hwnd, hItem);
+}
+
+int CCtrlTreeView::GetCount()
+{ return TreeView_GetCount(m_hwnd);
+}
+
+HTREEITEM CCtrlTreeView::GetDropHilight()
+{ return TreeView_GetDropHilight(m_hwnd);
+}
+
+HWND CCtrlTreeView::GetEditControl()
+{ return TreeView_GetEditControl(m_hwnd);
+}
+
+HTREEITEM CCtrlTreeView::GetFirstVisible()
+{ return TreeView_GetFirstVisible(m_hwnd);
+}
+
+HIMAGELIST CCtrlTreeView::GetImageList(int iImage)
+{ return TreeView_GetImageList(m_hwnd, iImage);
+}
+
+int CCtrlTreeView::GetIndent()
+{ return TreeView_GetIndent(m_hwnd);
+}
+
+COLORREF CCtrlTreeView::GetInsertMarkColor()
+{ return TreeView_GetInsertMarkColor(m_hwnd);
+}
+
+void CCtrlTreeView::GetItem(TVITEMEX *tvi)
+{ TreeView_GetItem(m_hwnd, tvi);
+}
+
+int CCtrlTreeView::GetItemHeight()
+{ return TreeView_GetItemHeight(m_hwnd);
+}
+
+void CCtrlTreeView::GetItemRect(HTREEITEM hItem, RECT *rcItem, BOOL fItemRect)
+{ TreeView_GetItemRect(m_hwnd, hItem, rcItem, fItemRect);
+}
+
+DWORD CCtrlTreeView::GetItemState(HTREEITEM hItem, DWORD stateMask)
+{ return TreeView_GetItemState(m_hwnd, hItem, stateMask);
+}
+
+HTREEITEM CCtrlTreeView::GetLastVisible()
+{ return TreeView_GetLastVisible(m_hwnd);
+}
+
+COLORREF CCtrlTreeView::GetLineColor()
+{ return TreeView_GetLineColor(m_hwnd);
+}
+
+HTREEITEM CCtrlTreeView::GetNextItem(HTREEITEM hItem, DWORD flag)
+{ return TreeView_GetNextItem(m_hwnd, hItem, flag);
+}
+
+HTREEITEM CCtrlTreeView::GetNextSibling(HTREEITEM hItem)
+{ return TreeView_GetNextSibling(m_hwnd, hItem);
+}
+
+HTREEITEM CCtrlTreeView::GetNextVisible(HTREEITEM hItem)
+{ return TreeView_GetNextVisible(m_hwnd, hItem);
+}
+
+HTREEITEM CCtrlTreeView::GetParent(HTREEITEM hItem)
+{ return TreeView_GetParent(m_hwnd, hItem);
+}
+
+HTREEITEM CCtrlTreeView::GetPrevSibling(HTREEITEM hItem)
+{ return TreeView_GetPrevSibling(m_hwnd, hItem);
+}
+
+HTREEITEM CCtrlTreeView::GetPrevVisible(HTREEITEM hItem)
+{ return TreeView_GetPrevVisible(m_hwnd, hItem);
+}
+
+HTREEITEM CCtrlTreeView::GetRoot()
+{ return TreeView_GetRoot(m_hwnd);
+}
+
+DWORD CCtrlTreeView::GetScrollTime()
+{ return TreeView_GetScrollTime(m_hwnd);
+}
+
+HTREEITEM CCtrlTreeView::GetSelection()
+{ return TreeView_GetSelection(m_hwnd);
+}
+
+COLORREF CCtrlTreeView::GetTextColor()
+{ return TreeView_GetTextColor(m_hwnd);
+}
+
+HWND CCtrlTreeView::GetToolTips()
+{ return TreeView_GetToolTips(m_hwnd);
+}
+
+BOOL CCtrlTreeView::GetUnicodeFormat()
+{ return TreeView_GetUnicodeFormat(m_hwnd);
+}
+
+unsigned CCtrlTreeView::GetVisibleCount()
+{ return TreeView_GetVisibleCount(m_hwnd);
+}
+
+HTREEITEM CCtrlTreeView::HitTest(TVHITTESTINFO *hti)
+{ return TreeView_HitTest(m_hwnd, hti);
+}
+
+HTREEITEM CCtrlTreeView::InsertItem(TVINSERTSTRUCT *tvis)
+{ return TreeView_InsertItem(m_hwnd, tvis);
+}
+
+/*
+HTREEITEM CCtrlTreeView::MapAccIDToHTREEITEM(UINT id)
+{ return TreeView_MapAccIDToHTREEITEM(m_hwnd, id);
+}
+
+UINT CCtrlTreeView::MapHTREEITEMtoAccID(HTREEITEM hItem)
+{ return TreeView_MapHTREEITEMtoAccID(m_hwnd, hItem);
+}
+
+*/
+void CCtrlTreeView::Select(HTREEITEM hItem, DWORD flag)
+{ TreeView_Select(m_hwnd, hItem, flag);
+}
+
+void CCtrlTreeView::SelectDropTarget(HTREEITEM hItem)
+{ TreeView_SelectDropTarget(m_hwnd, hItem);
+}
+
+void CCtrlTreeView::SelectItem(HTREEITEM hItem)
+{ TreeView_SelectItem(m_hwnd, hItem);
+}
+
+void CCtrlTreeView::SelectSetFirstVisible(HTREEITEM hItem)
+{ TreeView_SelectSetFirstVisible(m_hwnd, hItem);
+}
+
+COLORREF CCtrlTreeView::SetBkColor(COLORREF clBack)
+{ return TreeView_SetBkColor(m_hwnd, clBack);
+}
+
+void CCtrlTreeView::SetCheckState(HTREEITEM hItem, DWORD state)
+{ TreeView_SetCheckState(m_hwnd, hItem, state);
+}
+
+void CCtrlTreeView::SetImageList(HIMAGELIST hIml, int iImage)
+{ TreeView_SetImageList(m_hwnd, hIml, iImage);
+}
+
+void CCtrlTreeView::SetIndent(int iIndent)
+{ TreeView_SetIndent(m_hwnd, iIndent);
+}
+
+void CCtrlTreeView::SetInsertMark(HTREEITEM hItem, BOOL fAfter)
+{ TreeView_SetInsertMark(m_hwnd, hItem, fAfter);
+}
+
+COLORREF CCtrlTreeView::SetInsertMarkColor(COLORREF clMark)
+{ return TreeView_SetInsertMarkColor(m_hwnd, clMark);
+}
+
+void CCtrlTreeView::SetItem(TVITEMEX *tvi)
+{ TreeView_SetItem(m_hwnd, tvi);
+}
+
+void CCtrlTreeView::SetItemHeight(short cyItem)
+{ TreeView_SetItemHeight(m_hwnd, cyItem);
+}
+
+void CCtrlTreeView::SetItemState(HTREEITEM hItem, DWORD state, DWORD stateMask)
+{ TreeView_SetItemState(m_hwnd, hItem, state, stateMask);
+}
+
+COLORREF CCtrlTreeView::SetLineColor(COLORREF clLine)
+{ return TreeView_SetLineColor(m_hwnd, clLine);
+}
+
+void CCtrlTreeView::SetScrollTime(UINT uMaxScrollTime)
+{ TreeView_SetScrollTime(m_hwnd, uMaxScrollTime);
+}
+
+COLORREF CCtrlTreeView::SetTextColor(COLORREF clText)
+{ return TreeView_SetTextColor(m_hwnd, clText);
+}
+
+HWND CCtrlTreeView::SetToolTips(HWND hwndToolTips)
+{ return TreeView_SetToolTips(m_hwnd, hwndToolTips);
+}
+
+BOOL CCtrlTreeView::SetUnicodeFormat(BOOL fUnicode)
+{ return TreeView_SetUnicodeFormat(m_hwnd, fUnicode);
+}
+
+void CCtrlTreeView::SortChildren(HTREEITEM hItem, BOOL fRecurse)
+{ TreeView_SortChildren(m_hwnd, hItem, fRecurse);
+}
+
+void CCtrlTreeView::SortChildrenCB(TVSORTCB *cb, BOOL fRecurse)
+{ TreeView_SortChildrenCB(m_hwnd, cb, fRecurse);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlPages
+
+CCtrlPages::CCtrlPages(CDlgBase* dlg, int ctrlId):
+ CCtrlBase(dlg, ctrlId), m_hIml(NULL), m_pActivePage(NULL)
+{
+}
+
+void CCtrlPages::OnInit()
+{
+ CSuper::OnInit();
+ Subclass();
+}
+
+LRESULT CCtrlPages::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ if (msg == WM_SIZE)
+ ShowPage(m_pActivePage);
+
+ return CSuper::CustomWndProc(msg, wParam, lParam);
+}
+
+void CCtrlPages::AddPage(TCHAR *ptszName, HICON hIcon, CCallback<void> onCreate, void *param)
+{
+ TPageInfo *info = new TPageInfo;
+ info->m_onCreate = onCreate;
+ info->m_param = param;
+ info->m_pDlg = NULL;
+
+ TCITEM tci = {0};
+ tci.mask = TCIF_PARAM|TCIF_TEXT;
+ tci.lParam = (LPARAM)info;
+ tci.pszText = ptszName;
+ if (hIcon)
+ {
+ if (!m_hIml)
+ {
+ m_hIml = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1);
+ TabCtrl_SetImageList(m_hwnd, m_hIml);
+ }
+
+ tci.mask |= TCIF_IMAGE;
+ tci.iImage = ImageList_AddIcon(m_hIml, hIcon);
+ }
+
+ TabCtrl_InsertItem(m_hwnd, TabCtrl_GetItemCount(m_hwnd), &tci);
+}
+
+void CCtrlPages::AttachDialog(int iPage, CDlgBase *pDlg)
+{
+ if ((iPage < 0) || (iPage >= TabCtrl_GetItemCount(m_hwnd)))
+ return;
+
+ TCITEM tci = {0};
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(m_hwnd, iPage, &tci);
+
+ if (TPageInfo *info = (TPageInfo *)tci.lParam) {
+ if (info->m_pDlg)
+ info->m_pDlg->Close();
+
+ info->m_pDlg = pDlg;
+ //SetParent(info->m_pDlg->GetHwnd(), m_hwnd);
+
+ if (iPage == TabCtrl_GetCurSel(m_hwnd)) {
+ m_pActivePage = info->m_pDlg;
+ ShowPage(info->m_pDlg);
+ }
+ }
+}
+
+void CCtrlPages::ShowPage(CDlgBase *pDlg)
+{
+ if (!pDlg) return;
+
+ RECT rc;
+ GetClientRect(m_hwnd, &rc);
+ TabCtrl_AdjustRect(m_hwnd, FALSE, &rc);
+ MapWindowPoints(m_hwnd, ::GetParent(m_hwnd), (LPPOINT)&rc, 2);
+ SetWindowPos(pDlg->GetHwnd(), HWND_TOP, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, SWP_SHOWWINDOW);
+}
+
+void CCtrlPages::ActivatePage(int iPage)
+{
+ TabCtrl_SetCurSel(m_hwnd, iPage);
+ //ShowPage(iPage);
+}
+
+BOOL CCtrlPages::OnNotify(int /*idCtrl*/, NMHDR *pnmh)
+{
+ switch (pnmh->code) {
+ case TCN_SELCHANGING:
+ {
+ TCITEM tci = {0};
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(m_hwnd, TabCtrl_GetCurSel(m_hwnd), &tci);
+
+ if (TPageInfo *info = (TPageInfo *)tci.lParam) {
+ if (info->m_pDlg) {
+ m_pActivePage = NULL;
+ ShowWindow(info->m_pDlg->GetHwnd(), SW_HIDE);
+ }
+ }
+ }
+ return TRUE;
+
+ case TCN_SELCHANGE:
+ {
+ TCITEM tci = {0};
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(m_hwnd, TabCtrl_GetCurSel(m_hwnd), &tci);
+
+ if (TPageInfo *info = (TPageInfo *)tci.lParam) {
+ if (info->m_pDlg) {
+ m_pActivePage = info->m_pDlg;
+ ShowPage(info->m_pDlg);
+ }
+ else {
+ m_pActivePage = NULL;
+ info->m_onCreate(info->m_param);
+ }
+ }
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void CCtrlPages::OnDestroy()
+{
+ int count = TabCtrl_GetItemCount(m_hwnd);
+ for (int i=0; i < count; i++) {
+ TCITEM tci = {0};
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(m_hwnd, i, &tci);
+
+ if (TPageInfo *info = (TPageInfo *)tci.lParam) {
+ if (info->m_pDlg)
+ info->m_pDlg->Close();
+
+ delete info;
+ }
+ }
+
+ TabCtrl_DeleteAllItems(m_hwnd);
+
+ if (m_hIml) {
+ TabCtrl_SetImageList(m_hwnd, NULL);
+ ImageList_Destroy(m_hIml);
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlBase
+
+CCtrlBase::CCtrlBase(CDlgBase *wnd, int idCtrl) :
+ m_parentWnd(wnd),
+ m_idCtrl(idCtrl),
+ m_hwnd(NULL),
+ m_wndproc(NULL)
+{
+ if (wnd) {
+ m_next = wnd->m_first;
+ wnd->m_first = this;
+} }
+
+void CCtrlBase::OnInit()
+{
+ m_hwnd = (m_idCtrl && m_parentWnd && m_parentWnd->GetHwnd()) ? GetDlgItem(m_parentWnd->GetHwnd(), m_idCtrl) : NULL;
+}
+
+void CCtrlBase::OnDestroy()
+{
+ Unsubclass();
+ m_hwnd = NULL;
+}
+
+void CCtrlBase::Enable(int bIsEnable)
+{
+ ::EnableWindow(m_hwnd, bIsEnable);
+}
+
+BOOL CCtrlBase::Enabled() const
+{
+ return (m_hwnd) ? IsWindowEnabled(m_hwnd) : FALSE;
+}
+
+LRESULT CCtrlBase::SendMsg(UINT Msg, WPARAM wParam, LPARAM lParam)
+{
+ return ::SendMessage(m_hwnd, Msg, wParam, lParam);
+}
+
+void CCtrlBase::SetText(const TCHAR *text)
+{
+ ::SetWindowText(m_hwnd, text);
+}
+
+void CCtrlBase::SetTextA(const char *text)
+{
+ ::SetWindowTextA(m_hwnd, text);
+}
+
+void CCtrlBase::SetInt(int value)
+{
+ TCHAR buf[32] = {0};
+ mir_sntprintf(buf, SIZEOF(buf), _T("%d"), value);
+ SetWindowText(m_hwnd, buf);
+}
+
+TCHAR* CCtrlBase::GetText()
+{
+ int length = GetWindowTextLength(m_hwnd) + 1;
+ TCHAR *result = (TCHAR *)mir_alloc(length * sizeof(TCHAR));
+ GetWindowText(m_hwnd, result, length);
+ return result;
+}
+
+char* CCtrlBase::GetTextA()
+{
+ int length = GetWindowTextLength(m_hwnd) + 1;
+ char *result = (char *)mir_alloc(length * sizeof(char));
+ GetWindowTextA(m_hwnd, result, length);
+ return result;
+}
+
+TCHAR* CCtrlBase::GetText(TCHAR *buf, int size)
+{
+ GetWindowText(m_hwnd, buf, size);
+ buf[size-1] = 0;
+ return buf;
+}
+
+char* CCtrlBase::GetTextA(char *buf, int size)
+{
+ GetWindowTextA(m_hwnd, buf, size);
+ buf[size-1] = 0;
+ return buf;
+}
+
+int CCtrlBase::GetInt()
+{
+ int length = GetWindowTextLength(m_hwnd) + 1;
+ TCHAR *result = (TCHAR *)_alloca(length * sizeof(TCHAR));
+ GetWindowText(m_hwnd, result, length);
+ return _ttoi(result);
+}
+
+LRESULT CCtrlBase::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ if (msg == WM_DESTROY) Unsubclass();
+ return CallWindowProc(m_wndproc, m_hwnd, msg, wParam, lParam);
+}
+
+void CCtrlBase::Subclass()
+{
+ SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this);
+ m_wndproc = (WNDPROC)SetWindowLongPtr(m_hwnd, GWLP_WNDPROC, (LONG_PTR)GlobalSubclassWndProc);
+}
+
+void CCtrlBase::Unsubclass()
+{
+ if (m_wndproc) {
+ SetWindowLongPtr(m_hwnd, GWLP_WNDPROC, (LONG_PTR)m_wndproc);
+ SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0);
+ m_wndproc = 0;
+} }
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// CDbLink class
+
+CDbLink::CDbLink(const char *szModule, const char *szSetting, BYTE type, DWORD iValue, bool bSigned): CDataLink(type, bSigned)
+{
+ m_szModule = mir_strdup(szModule);
+ m_szSetting = mir_strdup(szSetting);
+ m_iDefault = iValue;
+ m_szDefault = 0;
+ dbv.type = DBVT_DELETED;
+}
+
+CDbLink::CDbLink(const char *szModule, const char *szSetting, BYTE type, TCHAR *szValue): CDataLink(type, false)
+{
+ m_szModule = mir_strdup(szModule);
+ m_szSetting = mir_strdup(szSetting);
+ m_szDefault = mir_tstrdup(szValue);
+ dbv.type = DBVT_DELETED;
+}
+
+CDbLink::~CDbLink()
+{
+ mir_free(m_szModule);
+ mir_free(m_szSetting);
+ mir_free(m_szDefault);
+ if (dbv.type != DBVT_DELETED)
+ db_free(&dbv);
+}
+
+DWORD CDbLink::LoadUnsigned()
+{
+ switch (m_type) {
+ case DBVT_BYTE: return db_get_b(NULL, m_szModule, m_szSetting, m_iDefault);
+ case DBVT_WORD: return db_get_w(NULL, m_szModule, m_szSetting, m_iDefault);
+ case DBVT_DWORD: return db_get_dw(NULL, m_szModule, m_szSetting, m_iDefault);
+ default: return m_iDefault;
+ }
+}
+
+int CDbLink::LoadSigned()
+{
+ switch (m_type) {
+ case DBVT_BYTE: return (signed char)db_get_b(NULL, m_szModule, m_szSetting, m_iDefault);
+ case DBVT_WORD: return (signed short)db_get_w(NULL, m_szModule, m_szSetting, m_iDefault);
+ case DBVT_DWORD: return (signed int)db_get_dw(NULL, m_szModule, m_szSetting, m_iDefault);
+ default: return m_iDefault;
+ }
+}
+
+void CDbLink::SaveInt(DWORD value)
+{
+ switch (m_type) {
+ case DBVT_BYTE: db_set_b(NULL, m_szModule, m_szSetting, (BYTE)value); break;
+ case DBVT_WORD: db_set_w(NULL, m_szModule, m_szSetting, (WORD)value); break;
+ case DBVT_DWORD: db_set_dw(NULL, m_szModule, m_szSetting, value); break;
+ }
+}
+
+TCHAR* CDbLink::LoadText()
+{
+ if (dbv.type != DBVT_DELETED) db_free(&dbv);
+ if (!db_get_ts(NULL, m_szModule, m_szSetting, &dbv)) {
+ if (dbv.type == DBVT_TCHAR)
+ return dbv.ptszVal;
+ return m_szDefault;
+ }
+
+ dbv.type = DBVT_DELETED;
+ return m_szDefault;
+}
+
+void CDbLink::SaveText(TCHAR *value)
+{
+ db_set_ts(NULL, m_szModule, m_szSetting, value);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Base protocol dialog
+
+CProtoIntDlgBase::CProtoIntDlgBase(PROTO_INTERFACE *proto, int idDialog, HWND parent, bool show_label) :
+ CDlgBase(::ProtoGetInstance(proto->m_szModuleName), idDialog, parent),
+ m_proto_interface(proto),
+ m_show_label(show_label),
+ m_hwndStatus(NULL)
+{}
+
+void CProtoIntDlgBase::CreateLink(CCtrlData& ctrl, char *szSetting, BYTE type, DWORD iValue, bool bSigned)
+{
+ ctrl.CreateDbLink(m_proto_interface->m_szModuleName, szSetting, type, iValue, bSigned);
+}
+
+void CProtoIntDlgBase::CreateLink(CCtrlData& ctrl, const char *szSetting, TCHAR *szValue)
+{
+ ctrl.CreateDbLink(m_proto_interface->m_szModuleName, szSetting, szValue);
+}
+
+void CProtoIntDlgBase::OnProtoRefresh(WPARAM, LPARAM) {}
+void CProtoIntDlgBase::OnProtoActivate(WPARAM, LPARAM) {}
+void CProtoIntDlgBase::OnProtoCheckOnline(WPARAM, LPARAM) {}
+
+void CProtoIntDlgBase::SetStatusText(const TCHAR *statusText)
+{
+ if (m_hwndStatus)
+ SendMessage(m_hwndStatus, SB_SETTEXT, 0, (LPARAM)statusText);
+}
+
+INT_PTR CProtoIntDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ INT_PTR result;
+
+ switch (msg) {
+ case WM_INITDIALOG: // call inherited init code first
+ result = CSuper::DlgProc(msg, wParam, lParam);
+ m_proto_interface->WindowSubscribe(m_hwnd);
+ if (m_show_label) {
+ m_hwndStatus = CreateStatusWindow(WS_CHILD | WS_VISIBLE, NULL, m_hwnd, 999);
+ SetWindowPos(m_hwndStatus, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
+ UpdateStatusBar();
+ UpdateProtoTitle();
+ }
+ return result;
+
+ case WM_DESTROY:
+ Skin_ReleaseIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_BIG, 0));
+ Skin_ReleaseIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, 0));
+ m_proto_interface->WindowUnsubscribe(m_hwnd);
+ break;
+
+ case WM_SETTEXT:
+ if (m_show_label && IsWindowUnicode(m_hwnd)) {
+ TCHAR *szTitle = (TCHAR *)lParam;
+ if (!_tcsstr(szTitle, m_proto_interface->m_tszUserName)) {
+ UpdateProtoTitle(szTitle);
+ return TRUE;
+ }
+ }
+ break;
+
+ case WM_SIZE:
+ if (m_hwndStatus) {
+ RECT rcStatus; GetWindowRect(m_hwndStatus, &rcStatus);
+ RECT rcClient; GetClientRect(m_hwnd, &rcClient);
+ SetWindowPos(m_hwndStatus, NULL, 0, rcClient.bottom-(rcStatus.bottom-rcStatus.top), rcClient.right, (rcStatus.bottom-rcStatus.top), SWP_NOZORDER);
+ UpdateStatusBar();
+ }
+ break;
+
+ // Protocol events
+ case WM_PROTO_ACTIVATE:
+ OnProtoActivate(wParam, lParam);
+ return m_lresult;
+
+ case WM_PROTO_CHECK_ONLINE:
+ if (m_hwndStatus)
+ UpdateStatusBar();
+ OnProtoCheckOnline(wParam, lParam);
+ return m_lresult;
+
+ case WM_PROTO_REFRESH:
+ OnProtoRefresh(wParam, lParam);
+ return m_lresult;
+ }
+
+ return CSuper::DlgProc(msg, wParam, lParam);
+}
+
+void CProtoIntDlgBase::UpdateProtoTitle(const TCHAR *szText)
+{
+ if (!m_show_label) return;
+
+ int curLength;
+ const TCHAR *curText;
+
+ if (szText) {
+ curText = szText;
+ curLength = (int)mir_tstrlen(curText);
+ }
+ else {
+ curLength = GetWindowTextLength(m_hwnd) + 1;
+ TCHAR *tmp = (TCHAR *)_alloca(curLength * sizeof(TCHAR));
+ GetWindowText(m_hwnd, tmp, curLength);
+ curText = tmp;
+ }
+
+ if (!_tcsstr(curText, m_proto_interface->m_tszUserName)) {
+ size_t length = curLength + mir_tstrlen(m_proto_interface->m_tszUserName) + 256;
+ TCHAR *text = (TCHAR *)_alloca(length * sizeof(TCHAR));
+ mir_sntprintf(text, length, _T("%s [%s: %s]"), curText, TranslateT("Account"), m_proto_interface->m_tszUserName);
+ SetWindowText(m_hwnd, text);
+ }
+}
+
+void CProtoIntDlgBase::UpdateStatusBar()
+{
+ SIZE sz;
+
+ HDC hdc = GetDC(m_hwndStatus);
+ HFONT hFntSave = (HFONT)SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
+ GetTextExtentPoint32(hdc, m_proto_interface->m_tszUserName, (int)mir_tstrlen(m_proto_interface->m_tszUserName), &sz);
+ sz.cx += GetSystemMetrics(SM_CXSMICON) * 3;
+ SelectObject(hdc, hFntSave);
+ ReleaseDC(m_hwndStatus, hdc);
+
+ RECT rcStatus; GetWindowRect(m_hwndStatus, &rcStatus);
+ int parts[] = { rcStatus.right-rcStatus.left - sz.cx, -1 };
+ SendMessage(m_hwndStatus, SB_SETPARTS, 2, (LPARAM)parts);
+ SendMessage(m_hwndStatus, SB_SETICON, 1, (LPARAM)LoadSkinnedProtoIcon(m_proto_interface->m_szModuleName, m_proto_interface->m_iStatus));
+ SendMessage(m_hwndStatus, SB_SETTEXT, 1, (LPARAM)m_proto_interface->m_tszUserName);
+}
diff --git a/src/modules/protocols/protocols.cpp b/src/modules/protocols/protocols.cpp
index 5eef009c36..688c2f5428 100644
--- a/src/modules/protocols/protocols.cpp
+++ b/src/modules/protocols/protocols.cpp
@@ -47,14 +47,7 @@ static LIST<TServiceListItem> serviceItems(10, CompareServiceItems);
//------------------------------------------------------------------------------------
-static int CompareProtos(const PROTOCOLDESCRIPTOR* p1, const PROTOCOLDESCRIPTOR* p2)
-{
- return strcmp(p1->szName, p2->szName);
-}
-
-static LIST<PROTOCOLDESCRIPTOR> protos(10, CompareProtos);
-
-static int CompareProtos2(const PROTOCOLDESCRIPTOR* p1, const PROTOCOLDESCRIPTOR* p2)
+static int CompareProtos(const PROTOCOLDESCRIPTOR *p1, const PROTOCOLDESCRIPTOR *p2)
{
if (p1->type != p2->type)
return p1->type - p2->type;
@@ -62,53 +55,33 @@ static int CompareProtos2(const PROTOCOLDESCRIPTOR* p1, const PROTOCOLDESCRIPTOR
return strcmp(p1->szName, p2->szName);
}
-LIST<PROTOCOLDESCRIPTOR> filters(10, CompareProtos2);
+LIST<PROTOCOLDESCRIPTOR> filters(10, CompareProtos);
//------------------------------------------------------------------------------------
void FreeFilesMatrix(TCHAR ***files);
-PROTOCOLDESCRIPTOR* __fastcall Proto_IsProtocolLoaded(const char *szProtoName)
-{
- if (szProtoName) {
- PROTOCOLDESCRIPTOR tmp;
- tmp.szName = (char*)szProtoName;
- return protos.find(&tmp);
- }
- return NULL;
-}
-
INT_PTR srvProto_IsLoaded(WPARAM, LPARAM lParam)
{
return (INT_PTR)Proto_IsProtocolLoaded((char*)lParam);
}
-INT_PTR Proto_EnumProtocols(WPARAM wParam, LPARAM lParam)
-{
- *(int*)wParam = protos.getCount();
- *(PROTOCOLDESCRIPTOR***)lParam = protos.getArray();
- return 0;
-}
-
static PROTO_INTERFACE* defInitProto(const char* szModuleName, const TCHAR*)
{
return AddDefaultAccount(szModuleName);
}
-static INT_PTR Proto_RegisterModule(WPARAM, LPARAM lParam)
+static INT_PTR srvProto_RegisterModule(WPARAM, LPARAM lParam)
{
- PROTOCOLDESCRIPTOR* pd = (PROTOCOLDESCRIPTOR*)lParam, *p;
+ PROTOCOLDESCRIPTOR *pd = (PROTOCOLDESCRIPTOR*)lParam;
if (pd->cbSize != sizeof(PROTOCOLDESCRIPTOR) && pd->cbSize != PROTOCOLDESCRIPTOR_V3_SIZE)
return 1;
- p = (PROTOCOLDESCRIPTOR*)mir_alloc(sizeof(PROTOCOLDESCRIPTOR));
- if (!p)
+ PROTOCOLDESCRIPTOR *p = Proto_RegisterModule(pd);
+ if (p == NULL)
return 2;
if (pd->cbSize == PROTOCOLDESCRIPTOR_V3_SIZE) {
- memset(p, 0, sizeof(PROTOCOLDESCRIPTOR));
- p->cbSize = PROTOCOLDESCRIPTOR_V3_SIZE;
- p->type = pd->type;
if (p->type == PROTOTYPE_PROTOCOL || p->type == PROTOTYPE_VIRTUAL) {
// let's create a new container
PROTO_INTERFACE* ppi = AddDefaultAccount(pd->szName);
@@ -132,9 +105,7 @@ static INT_PTR Proto_RegisterModule(WPARAM, LPARAM lParam)
}
}
}
- else *p = *pd;
- p->szName = mir_strdup(pd->szName);
- protos.insert(p);
+
if (p->type != PROTOTYPE_PROTOCOL && p->type != PROTOTYPE_VIRTUAL)
filters.insert(p);
return 0;
@@ -680,8 +651,7 @@ int LoadProtocolsModule(void)
CreateServiceFunction(MS_PROTO_BROADCASTACK, Proto_BroadcastAck);
CreateServiceFunction(MS_PROTO_ISPROTOCOLLOADED, srvProto_IsLoaded);
- CreateServiceFunction(MS_PROTO_ENUMPROTOS, Proto_EnumProtocols);
- CreateServiceFunction(MS_PROTO_REGISTERMODULE, Proto_RegisterModule);
+ CreateServiceFunction(MS_PROTO_REGISTERMODULE, srvProto_RegisterModule);
CreateServiceFunction(MS_PROTO_SELFISTYPING, Proto_SelfIsTyping);
CreateServiceFunction(MS_PROTO_CONTACTISTYPING, Proto_ContactIsTyping);
@@ -708,14 +678,6 @@ void UnloadProtocolsModule()
hAccListChanged = NULL;
}
- if (protos.getCount()) {
- for (int i = 0; i < protos.getCount(); i++) {
- mir_free(protos[i]->szName);
- mir_free(protos[i]);
- }
- protos.destroy();
- }
-
for (int i = 0; i < serviceItems.getCount(); i++)
mir_free(serviceItems[i]);
serviceItems.destroy();
@@ -725,11 +687,6 @@ void UnloadProtocolsModule()
pfnUninitProto GetProtocolDestructor(char *szProto)
{
- PROTOCOLDESCRIPTOR temp;
- temp.szName = szProto;
- int idx = protos.getIndex(&temp);
- if (idx != -1)
- return protos[idx]->fnUninit;
-
- return NULL;
+ PROTOCOLDESCRIPTOR *p = Proto_IsProtocolLoaded(szProto);
+ return (p == NULL) ? NULL : p->fnUninit;
}
diff --git a/src/modules/protocols/protoopts.cpp b/src/modules/protocols/protoopts.cpp
index 68b341fbda..f5d6a7a04d 100644
--- a/src/modules/protocols/protoopts.cpp
+++ b/src/modules/protocols/protoopts.cpp
@@ -30,7 +30,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define WM_MY_REFRESH (WM_USER+0x1000)
#define WM_MY_RENAME (WM_USER+0x1001)
-INT_PTR Proto_EnumProtocols(WPARAM, LPARAM);
bool CheckProtocolOrder(void);
#define errMsg \
@@ -181,9 +180,9 @@ static INT_PTR CALLBACK AccFormDlgProc(HWND hwndDlg, UINT message, WPARAM wParam
case WM_INITDIALOG:
TranslateDialogDefault(hwndDlg);
{
- PROTOCOLDESCRIPTOR** proto;
+ PROTOCOLDESCRIPTOR **proto;
int protoCount, i, cnt = 0;
- Proto_EnumProtocols((WPARAM)&protoCount, (LPARAM)&proto);
+ CallService(MS_PROTO_ENUMPROTOS, (WPARAM)&protoCount, (LPARAM)&proto);
for (i = 0; i < protoCount; i++) {
PROTOCOLDESCRIPTOR* pd = proto[i];
if (pd->type == PROTOTYPE_PROTOCOL && pd->cbSize == sizeof(*pd)) {