From e3f92ff9b8922e06a717a84b76c4e43cbb165f28 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 3 Apr 2020 19:59:38 +0300 Subject: mtextcontrol became an usual library --- plugins/mTextControl/src/main.cpp | 66 +++------ plugins/mTextControl/src/richeditutils.cpp | 4 +- plugins/mTextControl/src/services.cpp | 230 ++++++----------------------- plugins/mTextControl/src/services.h | 8 - plugins/mTextControl/src/stdafx.h | 14 +- plugins/mTextControl/src/textcontrol.cpp | 13 +- plugins/mTextControl/src/textusers.cpp | 49 +++--- plugins/mTextControl/src/textusers.h | 5 - 8 files changed, 103 insertions(+), 286 deletions(-) (limited to 'plugins/mTextControl/src') diff --git a/plugins/mTextControl/src/main.cpp b/plugins/mTextControl/src/main.cpp index d1ded43909..edd26d0e98 100644 --- a/plugins/mTextControl/src/main.cpp +++ b/plugins/mTextControl/src/main.cpp @@ -21,58 +21,38 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -CMPlugin g_plugin; - HMODULE hMsfteditDll = nullptr; +HINSTANCE g_hInst = nullptr; PCreateTextServices MyCreateTextServices = nullptr; -///////////////////////////////////////////////////////////////////////////////////////// - -PLUGININFOEX pluginInfoEx = -{ - sizeof(PLUGININFOEX), - __PLUGIN_NAME, - PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), - __DESCRIPTION, - __AUTHOR, - __COPYRIGHT, - __AUTHORWEB, - UNICODE_AWARE, - // {69B9443B-DC58-4876-AD39-E3F418A133C5} - { 0x69b9443b, 0xdc58, 0x4876, { 0xad, 0x39, 0xe3, 0xf4, 0x18, 0xa1, 0x33, 0xc5 } } -}; - -CMPlugin::CMPlugin() : - PLUGIN("MTextControl", pluginInfoEx) -{} - -///////////////////////////////////////////////////////////////////////////////////////// - void MTextControl_RegisterClass(); -int CMPlugin::Load() -{ - MyCreateTextServices = nullptr; - hMsfteditDll = LoadLibrary(L"msftedit.dll"); - if (hMsfteditDll) - MyCreateTextServices = (PCreateTextServices)GetProcAddress(hMsfteditDll, "CreateTextServices"); - - LoadTextUsers(); - LoadServices(); - - MTextControl_RegisterClass(); - return 0; -} - ///////////////////////////////////////////////////////////////////////////////////////// void UnloadEmfCache(); -int CMPlugin::Unload() +BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD ul_reason_for_call, LPVOID) { - UnloadTextUsers(); - UnloadEmfCache(); - FreeLibrary(hMsfteditDll); - return 0; + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH: + g_hInst = hInst; + MyCreateTextServices = nullptr; + hMsfteditDll = LoadLibrary(L"msftedit.dll"); + if (hMsfteditDll) + MyCreateTextServices = (PCreateTextServices)GetProcAddress(hMsfteditDll, "CreateTextServices"); + + LoadTextUsers(); + + MTextControl_RegisterClass(); + break; + + case DLL_PROCESS_DETACH: + UnloadTextUsers(); + UnloadEmfCache(); + FreeLibrary(hMsfteditDll); + break; + } + + return TRUE; } diff --git a/plugins/mTextControl/src/richeditutils.cpp b/plugins/mTextControl/src/richeditutils.cpp index c5cb7eeb9e..4da0b75d40 100644 --- a/plugins/mTextControl/src/richeditutils.cpp +++ b/plugins/mTextControl/src/richeditutils.cpp @@ -127,14 +127,14 @@ HWND CreateProxyWindow(ITextServices *ts) wcl.cbSize = sizeof(wcl); wcl.lpfnWndProc = RichEditProxyWndProc; wcl.style = CS_GLOBALCLASS; - wcl.hInstance = g_plugin.getInst(); + wcl.hInstance = g_hInst; wcl.hCursor = LoadCursor(nullptr, IDC_ARROW); wcl.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wcl.lpszClassName = L"NBRichEditProxyWndClass"; winClass = RegisterClassEx(&wcl); } - HWND hwnd = CreateWindow(L"NBRichEditProxyWndClass", L"", 0, 0, 0, 0, 0, nullptr, nullptr, g_plugin.getInst(), nullptr); + HWND hwnd = CreateWindow(L"NBRichEditProxyWndClass", L"", 0, 0, 0, 0, 0, nullptr, nullptr, g_hInst, nullptr); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)ts); return hwnd; } diff --git a/plugins/mTextControl/src/services.cpp b/plugins/mTextControl/src/services.cpp index d004fc2c07..8d4e637050 100644 --- a/plugins/mTextControl/src/services.cpp +++ b/plugins/mTextControl/src/services.cpp @@ -28,8 +28,9 @@ struct TextObject ~TextObject() { if (ftd) delete ftd; } }; -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // elper functions + void MText_InitFormatting0(IFormattedTextDraw *ftd, DWORD) { LRESULT lResult; @@ -69,48 +70,11 @@ void MText_InitFormatting1(TextObject *text) */ } -//--------------------------------------------------------------------------- -// NEW mtextcontrol interface: -// -// obtain the full mtextcontrol interface from the library. it is much faster as use of -// miranda core CallService to access to mtextcontrol (no core traffic). -// This interface provides full access to mtextcontrol internal functions, -// thus enabling devs to fully utilize the mtextcontrol API. -// All functions will be exported as miranda services for compatibility. -// -// the interface is populated during the Load(void) handler, so you can assume it is ready when Miranda -// throw the ME_SYSTEM_MODULESLOADED event and you can generate a warning in your ModulesLoaded() when -// it depends on the mtextcontrol interface and the mtextcontrol plugin is missing. -// -// example: -// -// MTEXT_INTERFACE MText = {0}; -// -// mir_getMTI(&MText); -// -// all interface function designed as old mtextcontrol helper functions. -// therefore it is easy to convert your old plugin code to new interface. -// -// example: -// -// old code: MTextCreate (... -// new code: MText.Create(... - -//--------------------------------------------------------------------------- -// subscribe to MText services -INT_PTR MText_Register(WPARAM wParam, LPARAM lParam) -{ - DWORD userOptions = (DWORD)wParam; - char *userTitle = (char *)lParam; - return (INT_PTR)MTI_TextUserAdd(userTitle, userOptions); -} - -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // allocate text object (unicode) -HANDLE DLL_CALLCONV -MTI_MTextCreateW(HANDLE userHandle, WCHAR *text) -{ +MTEXTCONTROL_DLL(HANDLE) MTextCreateW(HANDLE userHandle, WCHAR *text) +{ TextObject *result = new TextObject; result->options = TextUserGetOptions(userHandle); result->ftd = new CFormattedTextDraw; @@ -122,22 +86,12 @@ MTI_MTextCreateW(HANDLE userHandle, WCHAR *text) MText_InitFormatting1(result); return (HANDLE)result; - } -INT_PTR MText_CreateW(WPARAM wParam, LPARAM lParam) -{ - - //HANDLE userHandle = (HANDLE)wParam; - //WCHAR *wtext = (WCHAR *)lParam; - return (INT_PTR)(HANDLE)MTI_MTextCreateW((HANDLE)wParam, (WCHAR *)lParam); - -} - -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // allocate text object (advanced) -HANDLE DLL_CALLCONV -MTI_MTextCreateEx(HANDLE userHandle, void *text, DWORD flags) + +MTEXTCONTROL_DLL(HANDLE) MTextCreateEx(HANDLE userHandle, void *text, DWORD flags) { TextObject *result = new TextObject; result->options = TextUserGetOptions(userHandle); @@ -146,26 +100,20 @@ MTI_MTextCreateEx(HANDLE userHandle, void *text, DWORD flags) InitRichEdit(result->ftd->getTextService()); MText_InitFormatting0(result->ftd, result->options); - if (flags & MTEXT_FLG_WCHAR) result->ftd->putTextW((WCHAR *)text); - else result->ftd->putTextA((char *)text); + if (flags & MTEXT_FLG_WCHAR) + result->ftd->putTextW((WCHAR *)text); + else + result->ftd->putTextA((char *)text); MText_InitFormatting1(result); delete result; return nullptr; } -INT_PTR MText_CreateEx(WPARAM wParam, LPARAM lParam) -{ - HANDLE userHandle = (HANDLE)wParam; - MTEXTCREATE *textCreate = (MTEXTCREATE *)lParam; - MTI_MTextCreateEx(userHandle, textCreate->text, textCreate->flags); - return 0; -} - -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // measure text object -int DLL_CALLCONV -MTI_MTextMeasure(HDC dc, SIZE *sz, HANDLE text) + +MTEXTCONTROL_DLL(int) MTextMeasure(HDC dc, SIZE *sz, HANDLE text) { if (!text) return 0; @@ -173,42 +121,30 @@ MTI_MTextMeasure(HDC dc, SIZE *sz, HANDLE text) ((TextObject *)text)->ftd->get_NaturalSize(dc, &lWidth, &lHeight); sz->cx = lWidth; sz->cy = lHeight; - // FancyMeasure(((TextObject *)text)->fancy, displayInfo); - - return 0; -} - -INT_PTR MText_Measure(WPARAM wParam, LPARAM) -{ - LPMTEXTDISPLAY displayInfo = (LPMTEXTDISPLAY)wParam; - if (!displayInfo) return 0; - if (!(TextObject *)displayInfo->text) return 0; - MTI_MTextMeasure(displayInfo->dc, &displayInfo->sz, displayInfo->text); return 0; } -int DLL_CALLCONV -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // display text object -MTI_MTextDisplay(HDC dc, POINT pos, SIZE sz, HANDLE text) + +MTEXTCONTROL_DLL(int) MTextDisplay(HDC dc, POINT pos, SIZE sz, HANDLE text) { if (!text) return 0; COLORREF cl = GetTextColor(dc); - // if (GetTextColor(dc)&0xffffff != 0) - { - LRESULT lResult; - CHARFORMAT cf = { 0 }; - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_COLOR; - cf.crTextColor = cl; - ((TextObject *)text)->ftd->getTextService()->TxSendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf, &lResult); - } + + LRESULT lResult; + CHARFORMAT cf = { 0 }; + cf.cbSize = sizeof(cf); + cf.dwMask = CFM_COLOR; + cf.crTextColor = cl; + ((TextObject *)text)->ftd->getTextService()->TxSendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf, &lResult); SetBkMode(dc, TRANSPARENT); long lWidth = sz.cx, lHeight; ((TextObject *)text)->ftd->get_NaturalSize(dc, &lWidth, &lHeight); + RECT rt; rt.left = pos.x; rt.top = pos.y; @@ -219,42 +155,25 @@ MTI_MTextDisplay(HDC dc, POINT pos, SIZE sz, HANDLE text) return 0; } -INT_PTR MText_Display(WPARAM wParam, LPARAM) -{ - LPMTEXTDISPLAY displayInfo = (LPMTEXTDISPLAY)wParam; - if (!displayInfo) return 0; - if (!displayInfo->text) return 0; - MTI_MTextDisplay(displayInfo->dc, displayInfo->pos, displayInfo->sz, displayInfo->text); - return 0; -} - -int DLL_CALLCONV -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // set parent window for text object (this is required for mouse handling, etc) -MTI_MTextSetParent(HANDLE text, HWND hwnd, RECT rect) -{ - if (!text) return 0; - ((TextObject *)text)->ftd->setParentWnd(hwnd, rect); - return 0; -} -INT_PTR MText_SetParent(WPARAM wParam, LPARAM) +MTEXTCONTROL_DLL(int) MTextSetParent(HANDLE text, HWND hwnd, RECT rect) { - LPMTEXTSETPARENT info = (LPMTEXTSETPARENT)wParam; - //TextObject *text = (TextObject *)info->text; - if (!info) return 0; - if (!info->text) return 0; - MTI_MTextSetParent(info->text, info->hwnd, info->rc); + if (text) + ((TextObject *)text)->ftd->setParentWnd(hwnd, rect); return 0; } -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // send message to an object -int DLL_CALLCONV -MTI_MTextSendMessage(HWND hwnd, HANDLE text, UINT msg, WPARAM wParam, LPARAM lParam) + +MTEXTCONTROL_DLL(int) MTextSendMessage(HWND hwnd, HANDLE text, UINT msg, WPARAM wParam, LPARAM lParam) { + if (!text) + return 0; + LRESULT lResult; - if (!text) return 0; ((TextObject *)text)->ftd->getTextService()->TxSendMessage(msg, wParam, lParam, &lResult); if (hwnd && (msg == WM_MOUSEMOVE)) { @@ -266,81 +185,22 @@ MTI_MTextSendMessage(HWND hwnd, HANDLE text, UINT msg, WPARAM wParam, LPARAM lPa return lResult; } -INT_PTR MText_SendMessage(WPARAM wParam, LPARAM) -{ - LPMTEXTMESSAGE message = (LPMTEXTMESSAGE)wParam; - if (!message->text) return 0; - return (INT_PTR)MTI_MTextSendMessage(message->hwnd, message->text, message->msg, message->wParam, message->lParam); -} - -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // create a proxy window -HWND DLL_CALLCONV -MTI_MTextCreateProxy(HANDLE text) -{ - if (!text) return nullptr; - return CreateProxyWindow(((TextObject *)text)->ftd->getTextService()); -} -INT_PTR MText_CreateProxy(WPARAM wParam, LPARAM) +MTEXTCONTROL_DLL(HWND) MTextCreateProxy(HANDLE text) { - if (!wParam) return 0; - return (INT_PTR)MTI_MTextCreateProxy((HANDLE)wParam); + if (!text) + return nullptr; + + return CreateProxyWindow(((TextObject *)text)->ftd->getTextService()); } -int DLL_CALLCONV -//--------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////////// // destroy text object -MTI_MTextDestroy(HANDLE text) -{ - //HANDLE textHandle = (HANDLE)wParam; - //TextObject *text = (TextObject *)textHandle; - if (text) delete (TextObject *)text; - return 0; -} -INT_PTR MText_Destroy(WPARAM wParam, LPARAM) +MTEXTCONTROL_DLL(int) MTextDestroy(HANDLE text) { - HANDLE textHandle = (HANDLE)wParam; - TextObject *text = (TextObject *)textHandle; - if (text) delete text; + if (text) delete (TextObject *)text; return 0; } - -//--------------------------------------------------------------------------- -// populate the interface -INT_PTR MText_GetInterface(WPARAM, LPARAM lParam) -{ - MTEXT_INTERFACE *MText = (MTEXT_INTERFACE *)lParam; - if (MText == nullptr) - return CALLSERVICE_NOTFOUND; - - MText->version = PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM); - MText->Register = MTI_TextUserAdd; - MText->Create = MTI_MTextCreateW; - MText->CreateEx = MTI_MTextCreateEx; - MText->Measure = MTI_MTextMeasure; - MText->Display = MTI_MTextDisplay; - MText->SetParent = MTI_MTextSetParent; - MText->SendMsg = MTI_MTextSendMessage; - MText->CreateProxy = MTI_MTextCreateProxy; - MText->Destroy = MTI_MTextDestroy; - - return S_OK; -} - -//--------------------------------------------------------------------------- -// Load / Unload services -void LoadServices() -{ - CreateServiceFunction(MS_TEXT_REGISTER, MText_Register); - CreateServiceFunction(MS_TEXT_CREATEW, MText_CreateW); - CreateServiceFunction(MS_TEXT_CREATEEX, MText_CreateEx); - CreateServiceFunction(MS_TEXT_MEASURE, MText_Measure); - CreateServiceFunction(MS_TEXT_DISPLAY, MText_Display); - CreateServiceFunction(MS_TEXT_SETPARENT, MText_SetParent); - CreateServiceFunction(MS_TEXT_SENDMESSAGE, MText_SendMessage); - CreateServiceFunction(MS_TEXT_CREATEPROXY, MText_CreateProxy); - CreateServiceFunction(MS_TEXT_DESTROY, MText_Destroy); - CreateServiceFunction(MS_TEXT_GETINTERFACE, MText_GetInterface); -} diff --git a/plugins/mTextControl/src/services.h b/plugins/mTextControl/src/services.h index d91b1366b3..8a75e24eed 100644 --- a/plugins/mTextControl/src/services.h +++ b/plugins/mTextControl/src/services.h @@ -22,13 +22,5 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA void LoadServices(); -__declspec(dllexport) HANDLE DLL_CALLCONV MTI_MTextCreateW(HANDLE userHandle, WCHAR *text); -__declspec(dllexport) HANDLE DLL_CALLCONV MTI_MTextCreateEx(HANDLE userHandle, void *text, DWORD flags); -__declspec(dllexport) int DLL_CALLCONV MTI_MTextMeasure(HDC dc, SIZE *sz, HANDLE text); -__declspec(dllexport) int DLL_CALLCONV MTI_MTextDisplay(HDC dc, POINT pos, SIZE sz, HANDLE text); -__declspec(dllexport) int DLL_CALLCONV MTI_MTextSetParent(HANDLE text, HWND hwnd, RECT rect); -__declspec(dllexport) int DLL_CALLCONV MTI_MTextSendMessage(HWND hwnd, HANDLE text, UINT msg, WPARAM wParam, LPARAM lParam); -__declspec(dllexport) HWND DLL_CALLCONV MTI_MTextCreateProxy(HANDLE text); -__declspec(dllexport) int DLL_CALLCONV MTI_MTextDestroy(HANDLE text); #endif // __services_h__ diff --git a/plugins/mTextControl/src/stdafx.h b/plugins/mTextControl/src/stdafx.h index ef5263042a..1608622157 100644 --- a/plugins/mTextControl/src/stdafx.h +++ b/plugins/mTextControl/src/stdafx.h @@ -30,7 +30,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include -#include #include #include #include @@ -39,24 +38,15 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include "version.h" -#include "services.h" #include "textusers.h" +extern HINSTANCE g_hInst; extern PCreateTextServices MyCreateTextServices; void InitRichEdit(ITextServices *ts); HWND CreateProxyWindow(ITextServices *ts); #define MODULTITLE "Text Display" - -// globals - -struct CMPlugin : public PLUGIN -{ - CMPlugin(); - - int Load() override; - int Unload() override; -}; +#define MODULENAME "MTextControl" #endif // __headers_h__ diff --git a/plugins/mTextControl/src/textcontrol.cpp b/plugins/mTextControl/src/textcontrol.cpp index a9f3263794..596677f23f 100644 --- a/plugins/mTextControl/src/textcontrol.cpp +++ b/plugins/mTextControl/src/textcontrol.cpp @@ -36,7 +36,7 @@ void MTextControl_RegisterClass() wcl.cbSize = sizeof(wcl); wcl.lpfnWndProc = MTextControlWndProc; wcl.style = CS_GLOBALCLASS; - wcl.hInstance = g_plugin.getInst(); + wcl.hInstance = g_hInst; wcl.hCursor = LoadCursor(nullptr, IDC_ARROW); wcl.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wcl.lpszClassName = L"MTextControl"; @@ -66,15 +66,15 @@ LRESULT CALLBACK MTextControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM case MTM_UPDATE: if (data->text) delete[] data->text; - if (data->mtext) MTI_MTextDestroy(data->mtext); + if (data->mtext) MTextDestroy(data->mtext); { int textLength = GetWindowTextLength(hwnd); data->text = new wchar_t[textLength + 1]; GetWindowText(hwnd, data->text, textLength + 1); - data->mtext = MTI_MTextCreateW(data->htu, data->text); + data->mtext = MTextCreateW(data->htu, data->text); RECT rc; GetClientRect(hwnd, &rc); - MTI_MTextSetParent(data->mtext, hwnd, rc); + MTextSetParent(data->mtext, hwnd, rc); InvalidateRect(hwnd, nullptr, TRUE); } @@ -91,7 +91,7 @@ LRESULT CALLBACK MTextControlWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM case WM_MOUSEMOVE: if (data && data->mtext) - return MTI_MTextSendMessage(hwnd, data->mtext, msg, wParam, lParam); + return MTextSendMessage(hwnd, data->mtext, msg, wParam, lParam); break; } @@ -134,7 +134,7 @@ LRESULT MTextControl_OnPaint(HWND hwnd, WPARAM, LPARAM) SIZE sz; sz.cx = rc.right - rc.left; sz.cy = rc.bottom - rc.top - 4; - MTI_MTextDisplay(hdc, pos, sz, data->mtext); + MTextDisplay(hdc, pos, sz, data->mtext); if (hfntSave) SelectObject(hdc, hfntSave); @@ -142,6 +142,5 @@ LRESULT MTextControl_OnPaint(HWND hwnd, WPARAM, LPARAM) // Release the device context EndPaint(hwnd, &ps); - return 0; } diff --git a/plugins/mTextControl/src/textusers.cpp b/plugins/mTextControl/src/textusers.cpp index 22abd621ae..5b879a70de 100644 --- a/plugins/mTextControl/src/textusers.cpp +++ b/plugins/mTextControl/src/textusers.cpp @@ -21,32 +21,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA HANDLE htuDefault = nullptr; -TextUser *textUserFirst = nullptr; -TextUser *textUserLast = nullptr; +static TextUser *textUserFirst = nullptr; +static TextUser *textUserLast = nullptr; -void LoadTextUsers() -{ - htuDefault = MTI_TextUserAdd("Text Controls", MTEXT_FANCY_MASK); -} - -void UnloadTextUsers() -{ - while (textUserFirst) { - delete[] textUserFirst->name; - TextUser *next = textUserFirst->next; - delete[] textUserFirst; - textUserFirst = next; - } -} - -HANDLE DLL_CALLCONV MTI_TextUserAdd(const char *userTitle, DWORD options) +MTEXTCONTROL_DLL(HANDLE) MTextRegister(const char *userTitle, DWORD options) { TextUser *textUserNew = new TextUser; textUserNew->name = new char[mir_strlen(userTitle) + 1]; mir_strcpy(textUserNew->name, userTitle); textUserNew->options = - (g_plugin.getDword(userTitle, options)&MTEXT_FANCY_MASK) | (textUserNew->options&MTEXT_SYSTEM_MASK); - g_plugin.setDword(userTitle, textUserNew->options); + (db_get_dw(0, MODULENAME, userTitle, options)&MTEXT_FANCY_MASK) | (textUserNew->options&MTEXT_SYSTEM_MASK); + db_set_dw(0, MODULENAME, userTitle, textUserNew->options); textUserNew->prev = textUserLast; textUserNew->next = nullptr; if (textUserLast) { @@ -55,7 +40,7 @@ HANDLE DLL_CALLCONV MTI_TextUserAdd(const char *userTitle, DWORD options) } else textUserFirst = textUserLast = textUserNew; - return (HANDLE)textUserNew; + return textUserNew; } DWORD TextUserGetOptions(HANDLE userHandle) @@ -73,12 +58,28 @@ void TextUserSetOptions(HANDLE userHandle, DWORD options) void TextUsersSave() { for (TextUser *textUser = textUserFirst; textUser; textUser = textUser->next) - g_plugin.setDword(textUser->name, textUser->options); + db_set_dw(0, MODULENAME, textUser->name, textUser->options); } void TextUsersReset() { for (TextUser *textUser = textUserFirst; textUser; textUser = textUser->next) - textUser->options = - (g_plugin.getDword(textUser->name, 0)&MTEXT_FANCY_MASK) | (textUser->options&MTEXT_SYSTEM_MASK); + textUser->options = (db_get_dw(0, MODULENAME, textUser->name, 0) & MTEXT_FANCY_MASK) | (textUser->options&MTEXT_SYSTEM_MASK); +} + +///////////////////////////////////////////////////////////////////////////////////////// + +void LoadTextUsers() +{ + htuDefault = MTextRegister("Text Controls", MTEXT_FANCY_MASK); +} + +void UnloadTextUsers() +{ + while (textUserFirst) { + delete[] textUserFirst->name; + TextUser *next = textUserFirst->next; + delete[] textUserFirst; + textUserFirst = next; + } } diff --git a/plugins/mTextControl/src/textusers.h b/plugins/mTextControl/src/textusers.h index 28e2fb27d3..845386c859 100644 --- a/plugins/mTextControl/src/textusers.h +++ b/plugins/mTextControl/src/textusers.h @@ -29,16 +29,11 @@ struct TextUser : public MZeroedObject TextUser *prev, *next; }; -extern TextUser *textUserFirst; -extern TextUser *textUserLast; - void LoadTextUsers(); void UnloadTextUsers(); extern HANDLE htuDefault; -__declspec(dllexport) HANDLE DLL_CALLCONV MTI_TextUserAdd(const char *userTitle, DWORD options); - DWORD TextUserGetOptions(HANDLE userHandle); void TextUserSetOptions(HANDLE userHandle, DWORD options); void TextUsersSave(); -- cgit v1.2.3