From 7fb3e4a0ffcc61fc3f457fe35d46a0e32bdc18f1 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 16 Aug 2015 17:27:21 +0000 Subject: all warnings fixed git-svn-id: http://svn.miranda-ng.org/main/trunk@14968 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- .../ClientChangeNotify/src/CommonLibs/CString.cpp | 309 ------- .../ClientChangeNotify/src/CommonLibs/CString.h | 237 ----- .../ClientChangeNotify/src/CommonLibs/Options.cpp | 963 --------------------- .../ClientChangeNotify/src/CommonLibs/Options.h | 481 ---------- .../ClientChangeNotify/src/CommonLibs/TMyArray.h | 353 -------- plugins/ClientChangeNotify/src/CommonLibs/pcre.cpp | 175 ---- plugins/ClientChangeNotify/src/CommonLibs/pcre.h | 27 - 7 files changed, 2545 deletions(-) delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/CString.cpp delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/CString.h delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/Options.cpp delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/Options.h delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/TMyArray.h delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/pcre.cpp delete mode 100644 plugins/ClientChangeNotify/src/CommonLibs/pcre.h (limited to 'plugins/ClientChangeNotify/src/CommonLibs') diff --git a/plugins/ClientChangeNotify/src/CommonLibs/CString.cpp b/plugins/ClientChangeNotify/src/CommonLibs/CString.cpp deleted file mode 100644 index fafe50b8a3..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/CString.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/* - TCString.cpp - TCString class - Copyright (c) 2005-2008 Chervov Dmitry - - 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 "../stdafx.h" -#include "CString.h" - -#define STR_GROWBY 64 - -#define min(a,b) (((a) < (b)) ? (a) : (b)) - - -template -void TString::Empty() -{ - nBufSize = 1; - SetAllocSize(STR_GROWBY); - pBuf[0] = 0; -} - - -template -void TString::Free() -{ -// HeapFree(GetProcessHeap(), 0, pBuf); - free(pBuf); - pBuf = NULL; - nBufSize = 0; - nAllocSize = 0; -} - - -template -T *TString::GetBuffer(int nNewLen) -{ - if (nNewLen != -1) - { - SetBufSize(nNewLen + 1); - } - _ASSERT(pBuf); - return pBuf; -} - - -template -void TString::ReleaseBuffer(int nNewLen) -{ - if (nNewLen == -1) - { - nBufSize = My_lstrlen(pBuf) + 1; - } else - { - nBufSize = nNewLen + 1; - pBuf[nNewLen] = 0; - _ASSERT(My_lstrlen(pBuf) == nNewLen); - } - _ASSERT(nBufSize <= nAllocSize); // prevent buffer overruns -} - - -template -void TString::SetAllocSize(int nNewAllocSize) -{ - _ASSERT(nNewAllocSize > 0); - T *pNewBuf = /*(char *)HeapAlloc(GetProcessHeap(), 0, sizeof(char) * nNewAllocSize);*/ -(T *)malloc(sizeof(T) * nNewAllocSize); - if (pBuf) - { - memcpy(pNewBuf, pBuf, sizeof(T) * min(nBufSize, nNewAllocSize)); - //HeapFree(GetProcessHeap(), 0, pBuf); - free(pBuf); - } - pBuf = pNewBuf; - nAllocSize = nNewAllocSize; -} - - -template -void TString::SetBufSize(int nNewBufSize) -{ - _ASSERT(nNewBufSize >= 0); - if (nNewBufSize < nBufSize) - { - _ASSERT(pBuf); - pBuf[nNewBufSize - 1] = 0; - } - if ((unsigned)(nAllocSize - nNewBufSize) / STR_GROWBY) - { - SetAllocSize((nNewBufSize + STR_GROWBY - 1) - (nNewBufSize + STR_GROWBY - 1) % STR_GROWBY); - } - nBufSize = nNewBufSize; -} - - -template -TString& TString::Cat(const T *pStr) -{ - _ASSERT(pBuf && pStr); - int StrLen = My_lstrlen(pStr); - SetAllocSize(nBufSize + StrLen); - My_lstrcpy(GetBuffer() + GetLen(), pStr); - ReleaseBuffer(nBufSize + StrLen - 1); - return *this; -} - - -template -TString& TString::Cat(const T c) -{ - _ASSERT(pBuf); - SetAllocSize(nBufSize + 1); - int CurLen = GetLen(); - T *p = GetBuffer(); - p[CurLen] = c; - p[CurLen + 1] = '\0'; - ReleaseBuffer(nBufSize); - return *this; -} - - -template -TString& TString::DiffCat(const T *pStart, const T *pEnd) -{ - _ASSERT(pBuf && pStart && pEnd); - int StrLen = pEnd - pStart; - SetAllocSize(nBufSize + StrLen); - My_strncpy(GetBuffer() + GetLen(), pStart, StrLen); - ReleaseBuffer(nBufSize + StrLen - 1); - return *this; -} - - -template -TString& TString::Replace(const T *szFind, const T *szReplaceBy) -{ - if (!pBuf) - { - return *this; - } - T *pCurPos = pBuf; - int FindLen = My_lstrlen(szFind); - T *p; - TString Result; - Result.GetBuffer(1)[0] = '\0'; - Result.ReleaseBuffer(0); // set the string to ""; we can't do it in a usual way (using a constructor or an assignment) because we don't know whether "" needs to be unicode or ansi - while (p = ( T* )My_strstr(pCurPos, szFind)) - { - Result.DiffCat(pCurPos, p); - Result += szReplaceBy; - pCurPos = p + FindLen; - } - Result += pCurPos; - *this = Result; - return *this; -} - - -template -TString& TString::Replace(int nIndex, int nCount, const T *szReplaceBy) -{ - if (!pBuf || !szReplaceBy || nIndex < 0 || nCount < 0) - { - return *this; - } - - TString Result; - Result.GetBuffer(1)[0] = '\0'; - Result.ReleaseBuffer(0); // set the string to ""; we can't do it in a usual way (using a constructor or an assignment) because we don't know whether "" needs to be unicode or ansi - if (nIndex > GetLen()) - { - nIndex = GetLen(); - } - if (nIndex + nCount > GetLen()) - { - nCount = GetLen() - nIndex; - } - Result.DiffCat(pBuf, pBuf + nIndex); - Result += szReplaceBy; - Result += pBuf + nIndex + nCount; - *this = Result; - return *this; -} - - -template -TString TString::Left(int nCount) const -{ - _ASSERT(nCount >= 0); - TString Result(*this); - Result.SetBufSize(nCount + 1); - return Result; -} - - -template -TString TString::Right(int nCount) const -{ - _ASSERT(nCount >= 0); - if (nCount < GetLen()) - { - return &pBuf[GetLen() - nCount]; - } else - { - return *this; - } -} - - -template -TString TString::SubStr(int nIndex, int nCount) const -{ - _ASSERT(nIndex >= 0 && nCount >= 0); - TString Result; - if (nIndex < GetLen()) - { - My_strncpy(Result.GetBuffer(nCount), &pBuf[nIndex], nCount); - Result.ReleaseBuffer(); - } else - { - Result.GetBuffer(1)[0] = '\0'; - Result.ReleaseBuffer(0); - } - return Result; -} - - -template -TString TString::ToLower() const -{ - TString Result(*this); - if (!pBuf) - { - return Result; // return NULL string - } - My_strlwr((T*)Result); - return Result; -} - - -template -TString& TString::operator = (const T *pStr) -{ - if (pStr) - { - int StrLen = My_lstrlen(pStr); - SetBufSize(StrLen + 1); - My_lstrcpy(GetBuffer(), pStr); - ReleaseBuffer(StrLen); - } else - { - Free(); - } - return *this; -} - -template class TString; -template class TString; -template class TString; - -CString db_get_s(MCONTACT hContact, const char *szModule, const char *szSetting, const char *szDefaultValue) -{ - ptrA p( db_get_sa(hContact, szModule, szSetting)); - return CString(p == NULL ? szDefaultValue : p); -} - -TCString db_get_s(MCONTACT hContact, const char *szModule, const char *szSetting, const TCHAR *szDefaultValue) -{ - ptrT p( db_get_tsa(hContact, szModule, szSetting)); - return TCString(p == NULL ? szDefaultValue : p); -} - -TCString DBGetContactSettingAsString(MCONTACT hContact, const char *szModule, const char *szSetting, const TCHAR *szDefaultValue) -{ // also converts numeric values to a string - DBVARIANT dbv = {0}; - int iRes = db_get_ws(hContact, szModule, szSetting, &dbv); - - TCString Result; - if (!iRes && (dbv.type == DBVT_ASCIIZ || dbv.type == DBVT_WCHAR)) - { - Result = dbv.ptszVal; - } - else if (dbv.type == DBVT_BYTE || dbv.type == DBVT_WORD || dbv.type == DBVT_DWORD) - { - long value = (dbv.type == DBVT_DWORD) ? dbv.dVal : (dbv.type == DBVT_WORD ? dbv.wVal : dbv.bVal); - _ultot(value, Result.GetBuffer(64), 10); - Result.ReleaseBuffer(); - } - else Result = szDefaultValue; - - if (!iRes) - db_free(&dbv); - - return Result; -} diff --git a/plugins/ClientChangeNotify/src/CommonLibs/CString.h b/plugins/ClientChangeNotify/src/CommonLibs/CString.h deleted file mode 100644 index 9218a6459d..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/CString.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - TCString.h - TCString class - Copyright (c) 2005-2008 Chervov Dmitry - - 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 -*/ - -#pragma once - -#include -#include -#include -#ifdef CHARARRAY_CONVERT -#include "TMyArray.h" -#endif -#include "newpluginapi.h" -#include "m_system.h" -#include "m_database.h" - -__inline int My_lstrlen(LPCSTR lpString) {return (int)mir_strlen(lpString);} -__inline int My_lstrlen(LPCWSTR lpString) {return (int)mir_wstrlen(lpString);} -__inline int My_lstrcmp(LPCSTR lpString1, LPCSTR lpString2) {return mir_strcmp(lpString1, lpString2);} -__inline int My_lstrcmp(LPCWSTR lpString1, LPCWSTR lpString2) {return mir_wstrcmp(lpString1, lpString2);} -__inline LPCSTR My_strstr(LPCSTR lpString1, LPCSTR lpString2) {return strstr(lpString1, lpString2);} -__inline LPWSTR My_strstr(LPCWSTR lpString1, LPCWSTR lpString2) {return (LPWSTR)wcsstr(lpString1, lpString2);} -__inline LPSTR My_lstrcpy(LPSTR lpString1, LPCSTR lpString2) {return mir_strcpy(lpString1, lpString2);} -__inline LPWSTR My_lstrcpy(LPWSTR lpString1, LPCWSTR lpString2) {return mir_wstrcpy(lpString1, lpString2);} -__inline LPSTR My_strncpy(LPSTR lpString1, LPCSTR lpString2, int Len) {return strncpy(lpString1, lpString2, Len);} -__inline LPWSTR My_strncpy(LPWSTR lpString1, LPCWSTR lpString2, int Len) {return wcsncpy(lpString1, lpString2, Len);} -__inline LPSTR My_strlwr(LPSTR lpString) {return _strlwr(lpString);} -__inline LPWSTR My_strlwr(LPWSTR lpString) {return _wcslwr(lpString);} - -template -class TString -{ -public: - TString(): pBuf(NULL), nBufSize(0), nAllocSize(0) {} - TString(const T *pStr): pBuf(NULL), nBufSize(0), nAllocSize(0) {*this = pStr;} - TString(const TString &Str): pBuf(NULL), nBufSize(0), nAllocSize(0) {*this = Str.pBuf;} - ~TString() {Free();} - - int GetLen() const {return (nBufSize) ? (nBufSize - 1) : 0;}; - int IsEmpty() const {return (!GetLen());}; - T *GetBuffer(int nNewLen = -1); - void ReleaseBuffer(int nNewLen = -1); - TString& Cat(const T *pStr); - TString& Cat(const T c); - TString& DiffCat(const T *pStart, const T *pEnd); - TString& Replace(const T *szFind, const T *szReplaceBy); - TString& Replace(int nIndex, int nCount, const T *szReplaceBy); - TString Left(int nCount) const; - TString Right(int nCount) const; - TString SubStr(int nIndex, int nCount) const; - TString ToLower() const; - void Empty(); - void Free(); - T& operator [] (int nIndex) {_ASSERT(nIndex >= 0 && nIndex <= GetLen()); return pBuf[nIndex];} - operator const T*() const {return pBuf;} - operator T*() {return pBuf;} - TString& operator = (const T *pStr); - TString& operator = (const TString &Str) {return *this = Str.pBuf;} -// TCString& operator + (const char *pStr) -// {_ASSERT(pBuf && pStr); TCString Result(*this); return Result.Cat(pStr);} - friend TString operator + (const TString &Str1, const T *Str2) - {_ASSERT(Str1.pBuf && Str2); TString Result(Str1); return Result.Cat(Str2);} -/* friend TCString operator + (const char *Str1, const TCString &Str2) - {_ASSERT(Str1 && Str2.pBuf); TCString Result(Str1); return Result.Cat(Str2);}*/ - TString& operator += (const T *pStr) {_ASSERT(pBuf && pStr); return this->Cat(pStr);} - TString& operator += (const T c) {_ASSERT(pBuf); return this->Cat(c);} - int operator == (const T *pStr) const {return (!pBuf || !pStr) ? (pBuf == pStr) : !My_lstrcmp(pBuf, pStr);} - int operator != (const T *pStr) const {return (!pBuf || !pStr) ? (pBuf != pStr) : My_lstrcmp(pBuf, pStr);} - int operator < (const T *pStr) const {_ASSERT(pBuf && pStr); return My_lstrcmp(pBuf, pStr) > 0;} - int operator > (const T *pStr) const {_ASSERT(pBuf && pStr); return My_lstrcmp(pBuf, pStr) < 0;} - int operator <= (const T *pStr) const {_ASSERT(pBuf && pStr); return My_lstrcmp(pBuf, pStr) >= 0;} - int operator >= (const T *pStr) const {_ASSERT(pBuf && pStr); return My_lstrcmp(pBuf, pStr) <= 0;} -// TCString& Format(char *pszFormat, ...); - -private: - void SetBufSize(int nNewBufSize); - void SetAllocSize(int nNewAllocSize); - - T *pBuf; - int nBufSize; // current string length + 1 (including 0 at the end) - int nAllocSize; // allocated memory size -}; - - -typedef TString TCString; -typedef TString CString; -typedef TString WCString; - -#ifdef CHARARRAY_CONVERT - -__inline CHARARRAY WCHAR2ANSI_ARRAY(CHARARRAY &c) -{ - CHARARRAY Result; - int Len = WideCharToMultiByte(CP_ACP, 0, (WCHAR*)c.GetData(), c.GetSize() / sizeof(WCHAR), NULL, 0, NULL, NULL); - if (Len) - { - Result.SetAtGrow(Len - 1); - if (!WideCharToMultiByte(CP_ACP, 0, (WCHAR*)c.GetData(), c.GetSize() / sizeof(WCHAR), Result.GetData(), Len, NULL, NULL)) - { - Result.RemoveAll(); - } - if (Result.GetSize()) - { - Result.RemoveElem(Result.GetSize() - 1); // remove the null terminator - } - } - return Result; -} - -__inline CHARARRAY ANSI2WCHAR_ARRAY(CHARARRAY &c) -{ - CHARARRAY Result; - int Len = MultiByteToWideChar(CP_ACP, 0, c.GetData(), c.GetSize(), NULL, 0); - if (Len) - { - Result.SetAtGrow(Len * sizeof(WCHAR) - 1); - if (!MultiByteToWideChar(CP_ACP, 0, c.GetData(), c.GetSize(), (WCHAR*)Result.GetData(), Len)) - { - Result.RemoveAll(); - } - if (Result.GetSize()) - { - Result.RemoveElem(Result.GetSize() - 1); - Result.RemoveElem(Result.GetSize() - 1); // remove the null terminator - } - } - return Result; -} - - -__inline CHARARRAY WCHAR2UTF8(WCString Str) -{ - CHARARRAY Result; - int Len = WideCharToMultiByte(CP_UTF8, 0, Str, -1, NULL, 0, NULL, NULL); - if (Len) - { - Result.SetAtGrow(Len - 1); - if (!WideCharToMultiByte(CP_UTF8, 0, Str, -1, Result.GetData(), Len, NULL, NULL)) - { - Result.RemoveAll(); - } - } - return Result; -} - - -#endif // CHARARRAY_CONVERT - - -#undef db_get_s -CString db_get_s(MCONTACT hContact, const char *szModule, const char *szSetting, const char *szDefaultValue); -TCString db_get_s(MCONTACT hContact, const char *szModule, const char *szSetting, const TCHAR *szDefaultValue); -int db_get_s(MCONTACT hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv); -TCString DBGetContactSettingAsString(MCONTACT hContact, const char *szModule, const char *szSetting, const TCHAR *szDefaultValue); // also converts numeric values to a string - -// various string helpers. their return values are valid only while the class is visible -class UTF8Encode -{ -public: - UTF8Encode(const char *str) { p = mir_utf8encode(str); } - UTF8Encode(const wchar_t *str) { p = mir_utf8encodeW(str); } - ~UTF8Encode() { mir_free(p); } - operator char*() { return p; } - -private: - char *p; -}; - -class UTF8DecodeA -{ -public: - UTF8DecodeA(const char *str) { p = mir_strdup(str); mir_utf8decode(p, NULL); } - ~UTF8DecodeA() { mir_free(p); } - operator char*() { return p; } - -private: - char *p; -}; - -class UTF8DecodeW -{ -public: - UTF8DecodeW(const char *str) { p = mir_utf8decodeW(str); } - ~UTF8DecodeW() { mir_free(p); } - operator wchar_t*() { return p; } - -private: - wchar_t *p; -}; - - -#define UTF8Decode UTF8DecodeW - - -/*class mallocStrA -{ -public: - mallocStrA(int n) { p = (char*)malloc((n + 1) * sizeof(char)); } - mallocStrA(const char *str) { p = str ? strdup(str) : NULL; } - ~mallocStrA() { if (p) free(p); } - operator char*() { return p; } - -private: - char *p; -}; - -class mallocStrW -{ -public: - mallocStrW(int n) { p = (wchar_t*)malloc((n + 1) * sizeof(wchar_t)); } - mallocStrW(const wchar_t *str) { p = str ? _wcsdup(str) : NULL; } - ~mallocStrW() { if (p) free(p); } - operator wchar_t*() { return p; } - -private: - wchar_t *p; -}; - - -#define mallocStr mallocStrW - -*/ \ No newline at end of file diff --git a/plugins/ClientChangeNotify/src/CommonLibs/Options.cpp b/plugins/ClientChangeNotify/src/CommonLibs/Options.cpp deleted file mode 100644 index f83c9265b3..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/Options.cpp +++ /dev/null @@ -1,963 +0,0 @@ -/* - Options.cpp - Copyright (c) 2005-2008 Chervov Dmitry - - 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 "../stdafx.h" -#include "Options.h" - -static CString sEmptyString(""); - - -COptPage::COptPage(const COptPage &Item) -{ - *this = Item; -} - -COptPage::~COptPage() -{ - int I; - for (I = 0; I < Items.GetSize(); I++) - { - delete Items[I]; - } - Items.RemoveAll(); -} - -void COptPage::MemToPage(int OnlyEnable) -{ - int I; - _ASSERT(hWnd); - for (I = 0; I < Items.GetSize(); I++) - { - if (OnlyEnable) - { - Items[I]->COptItem::MemToWnd(hWnd); - } else - { - Items[I]->MemToWnd(hWnd); - } - } -} - -void COptPage::PageToMem() -{ - int I; - _ASSERT(hWnd); - for (I = 0; I < Items.GetSize(); I++) - { - Items[I]->WndToMem(hWnd); - } -} - -void COptPage::DBToMem() -{ - int I; - _ASSERT(sModule != ""); - for (I = 0; I < Items.GetSize(); I++) - { - Items[I]->DBToMem(sModule, &sDBSettingPrefix); - } -} - -void COptPage::MemToDB() -{ - int I; - _ASSERT(sModule != ""); - for (I = 0; I < Items.GetSize(); I++) - { - Items[I]->MemToDB(sModule, &sDBSettingPrefix); - } -} - -void COptPage::CleanDBSettings() -{ - int I; - _ASSERT(sModule != ""); - for (I = 0; I < Items.GetSize(); I++) - { - Items[I]->CleanDBSettings(sModule, &sDBSettingPrefix); - } -} - -bool COptPage::GetModified() -{ - int I; - _ASSERT(sModule != ""); - for (I = 0; I < Items.GetSize(); I++) - { - if (Items[I]->GetModified()) - { - return true; - } - } - return false; -} - -void COptPage::SetModified(bool Modified) -{ - int I; - _ASSERT(sModule != ""); - for (I = 0; I < Items.GetSize(); I++) - { - Items[I]->SetModified(Modified); - } -} - -COptItem *COptPage::Find(int DlgItemID) -{ - int I; - for (I = 0; I < Items.GetSize(); I++) - { - if (Items[I]->GetID() == DlgItemID) - { - return Items[I]; - } - } - _ASSERT(0); - return 0; -} - -COptPage& COptPage::operator = (const COptPage& Page) -{ - int I; - hWnd = Page.hWnd; - sModule = Page.sModule; - sDBSettingPrefix = Page.sDBSettingPrefix; - Items.RemoveAll(); - for (I = 0; I < Page.Items.GetSize(); I++) - { - Items.AddElem(Page.Items[I]->Copy()); - } - return *this; -} - - -int COptItem::GetIntDBVal(CString &sModule, int bSigned, CString*) -{ // default procedure for reading value from DB; used only for integral types - if (sDBSetting != NULL) - { - _ASSERT(nValueSize == DBVT_BYTE || nValueSize == DBVT_WORD || nValueSize == DBVT_DWORD); - DBVARIANT dbv; - if (db_get(NULL, sModule, sDBSetting, &dbv)) - return GetDefValue(); - - return (nValueSize == DBVT_BYTE) ? (bSigned ? (signed char)dbv.bVal : (unsigned char)dbv.bVal) : ((nValueSize == DBVT_WORD) ? (bSigned ? (signed short)dbv.wVal : (unsigned short)dbv.wVal) : dbv.dVal); - } - return GetDefValue(); -} - -void COptItem::SetIntDBVal(CString &sModule, int Value, CString*) -{ // default procedure for writing value to the DB; used only for integral types - if (sDBSetting != NULL && !ReadOnly) - { - _ASSERT(nValueSize == DBVT_BYTE || nValueSize == DBVT_WORD || nValueSize == DBVT_DWORD); - - DBVARIANT dbv; - dbv.type = nValueSize; - dbv.dVal = Value; - db_set(NULL, sModule, sDBSetting, &dbv); - } -} - -TCString COptItem::GetStrDBVal(CString &sModule, CString *sDBSettingPrefix) -{ - if (sDBSetting != NULL) - { - _ASSERT(GetDefValue()); - return db_get_s(NULL, sModule, sDBSettingPrefix ? (*sDBSettingPrefix + sDBSetting) : sDBSetting, *(TCString*)GetDefValue()); - } - return *(TCString*)GetDefValue(); -} - -void COptItem::SetStrDBVal(CString &sModule, TCString &Str, CString *sDBSettingPrefix) -{ - if (sDBSetting != NULL && !ReadOnly) - { - db_set_ts(NULL, sModule, sDBSettingPrefix ? (*sDBSettingPrefix + sDBSetting) : sDBSetting, Str); - } -} - - - -void COptItem_Checkbox::DBToMem(CString &sModule, CString *sDBSettingPrefix) -{ - if (ValueMask) - { - Value = (GetIntDBVal(sModule, false, sDBSettingPrefix) & ValueMask) ? BST_CHECKED : BST_UNCHECKED; - } else - { - Value = GetIntDBVal(sModule, false, sDBSettingPrefix); - } - COptItem::DBToMem(sModule, sDBSettingPrefix); -} - -void COptItem_Checkbox::MemToDB(CString &sModule, CString *sDBSettingPrefix) -{ - if (ValueMask) - { - if (Value == BST_CHECKED) - { - SetIntDBVal(sModule, GetIntDBVal(sModule, false, sDBSettingPrefix) | ValueMask, sDBSettingPrefix); - } else - { - SetIntDBVal(sModule, GetIntDBVal(sModule, false, sDBSettingPrefix) & ~ValueMask, sDBSettingPrefix); - } - } else - { - SetIntDBVal(sModule, Value, sDBSettingPrefix); - } - COptItem::MemToDB(sModule, sDBSettingPrefix); -} - -void COptItem_Checkbox::WndToMem(HWND hWnd) -{ - Value = IsDlgButtonChecked(hWnd, DlgItemID); -// tri-state checkboxes in combination with ValueMask != 0 are not supported ;) - _ASSERT(!ValueMask || Value != BST_INDETERMINATE); - COptItem::WndToMem(hWnd); -} - -void COptItem_Checkbox::MemToWnd(HWND hWnd) -{ - CheckDlgButton(hWnd, DlgItemID, Value ? BST_CHECKED : BST_UNCHECKED); - COptItem::MemToWnd(hWnd); -} - - - -void COptItem_BitDBSetting::DBToMem(CString &sModule, CString *sDBSettingPrefix) -{ - if (ValueMask) - { - Value = (GetIntDBVal(sModule, false, sDBSettingPrefix) & ValueMask) != 0; - } else - { - Value = GetIntDBVal(sModule, false, sDBSettingPrefix); - } - COptItem::DBToMem(sModule, sDBSettingPrefix); -} - -void COptItem_BitDBSetting::MemToDB(CString &sModule, CString *sDBSettingPrefix) -{ - if (ValueMask) - { - if (Value) - { - SetIntDBVal(sModule, GetIntDBVal(sModule, false, sDBSettingPrefix) | ValueMask, sDBSettingPrefix); - } else - { - SetIntDBVal(sModule, GetIntDBVal(sModule, false, sDBSettingPrefix) & ~ValueMask, sDBSettingPrefix); - } - } else - { - SetIntDBVal(sModule, Value, sDBSettingPrefix); - } - COptItem::MemToDB(sModule, sDBSettingPrefix); -} - - -// ================================================ COptItem_TreeCtrl ================================================ - -int COptItem_TreeCtrl::IDToOrder(int ID) -{ - int I; - for (I = 0; I < RootItems.GetSize(); I++) - { - if (RootItems[I].ID == ID) - { - return ROOT_INDEX_TO_ORDER(I); - } - } - for (I = 0; I < Value.GetSize(); I++) - { - if (Value[I].ID == ID) - { - return I; - } - } - return -1; -} - -int COptItem_TreeCtrl::hItemToOrder(HTREEITEM hItem) -{ - int I; - for (I = 0; I < RootItems.GetSize(); I++) - { - if (RootItems[I].hItem == hItem) - { - return ROOT_INDEX_TO_ORDER(I); - } - } - for (I = 0; I < Value.GetSize(); I++) - { - if (Value[I].hItem == hItem) - { - return I; - } - } - return -1; -} - -int COptItem_TreeCtrl::GenerateID() -{ - int ID = 0; - while (IDToOrder(ID) != -1) - { - ID++; - } - return ID; -} - -typedef struct -{ - COptItem_TreeCtrl *TreeCtrl; - CString *sModule; - CString *sDBSettingPrefix; -} sTreeReadEnumData; - -int TreeReadEnum(const char *szSetting, LPARAM lParam) -{ - sTreeReadEnumData *TreeReadEnumData = (sTreeReadEnumData*)lParam; - int Len = TreeReadEnumData->TreeCtrl->sDBSetting.GetLen() + lengthof(TREEITEM_DBSTR_TITLE) - 1; - if (!strncmp(szSetting, TreeReadEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_TITLE, Len) && isdigit(szSetting[Len])) - { - int ID = atol(szSetting + Len); - short ParentID = (TreeReadEnumData->TreeCtrl->TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL) ? 0 : db_get_w(NULL, *TreeReadEnumData->sModule, - *TreeReadEnumData->sDBSettingPrefix + TreeReadEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_PARENT + (szSetting + Len), -1); - short Order = db_get_w(NULL, *TreeReadEnumData->sModule, - *TreeReadEnumData->sDBSettingPrefix + TreeReadEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_ORDER + (szSetting + Len), -1); - char Flags = (TreeReadEnumData->TreeCtrl->TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL && !(TreeReadEnumData->TreeCtrl->TreeFlags & TREECTRL_FLAG_HAS_CHECKBOXES)) ? 0 : db_get_b(NULL, *TreeReadEnumData->sModule, - *TreeReadEnumData->sDBSettingPrefix + TreeReadEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_FLAGS + (szSetting + Len), 0); - if (ParentID >= 0 && Order >= 0) - { - TreeReadEnumData->TreeCtrl->Value.SetAtGrow(Order).ID = ID; - TreeReadEnumData->TreeCtrl->Value.SetAtGrow(Order).ParentID = ParentID; - TreeReadEnumData->TreeCtrl->Value.SetAtGrow(Order).Flags = Flags; - TreeReadEnumData->TreeCtrl->Value.SetAtGrow(Order).hItem = NULL; - TreeReadEnumData->TreeCtrl->Value.SetAtGrow(Order).Title = db_get_s(NULL, *TreeReadEnumData->sModule, *TreeReadEnumData->sDBSettingPrefix + szSetting, _T("")); - TreeReadEnumData->TreeCtrl->Value.SetAtGrow(Order).User_Str1 = (TreeReadEnumData->TreeCtrl->User_Str1_DBName == NULL) ? NULL : - db_get_s(NULL, *TreeReadEnumData->sModule, - *TreeReadEnumData->sDBSettingPrefix + TreeReadEnumData->TreeCtrl->sDBSetting + TreeReadEnumData->TreeCtrl->User_Str1_DBName + (szSetting + Len), (TCHAR*)NULL); - } - } - return 0; -} - -void COptItem_TreeCtrl::DBToMem(CString &sModule, CString *sDBSettingPrefix) -{ - if (!sDBSettingPrefix) - { - sDBSettingPrefix = &sEmptyString; - } - Value.RemoveAll(); - sTreeReadEnumData TreeReadEnumData; - TreeReadEnumData.TreeCtrl = this; - TreeReadEnumData.sModule = &sModule; - TreeReadEnumData.sDBSettingPrefix = sDBSettingPrefix; - DBCONTACTENUMSETTINGS dbEnum; - dbEnum.lParam = (LPARAM)&TreeReadEnumData; - dbEnum.ofsSettings = 0; - dbEnum.pfnEnumProc = TreeReadEnum; - dbEnum.szModule = sModule; - CallService(MS_DB_CONTACT_ENUMSETTINGS, NULL, (LPARAM)&dbEnum); - if (!Value.GetSize()) - { - Value = DefValue; - } else - { - int I; - for (I = 0; I < Value.GetSize(); I++) - { - if (Value[I].Title == NULL) - { - Value.RemoveElem(I); - I--; - } - } - } - COptItem::DBToMem(sModule, sDBSettingPrefix); -} - -void COptItem_TreeCtrl::MemToDB(CString &sModule, CString *sDBSettingPrefix) -{ - if (!ReadOnly && Modified) - { - if (!sDBSettingPrefix) - { - sDBSettingPrefix = &sEmptyString; - } - CleanDBSettings(sModule, sDBSettingPrefix); - int I; - for (I = 0; I < Value.GetSize(); I++) - { - CString StrID; - _itoa(Value[I].ID, StrID.GetBuffer(64), 10); - StrID.ReleaseBuffer(); - db_set_ts(NULL, sModule, *sDBSettingPrefix + sDBSetting + TREEITEM_DBSTR_TITLE + StrID, Value[I].Title); - if (!(TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL)) - db_set_w(NULL, sModule, *sDBSettingPrefix + sDBSetting + TREEITEM_DBSTR_PARENT + StrID, Value[I].ParentID); - - db_set_w(NULL, sModule, *sDBSettingPrefix + sDBSetting + TREEITEM_DBSTR_ORDER + StrID, I); - if (!(TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL) || TreeFlags & TREECTRL_FLAG_HAS_CHECKBOXES) - db_set_b(NULL, sModule, *sDBSettingPrefix + sDBSetting + TREEITEM_DBSTR_FLAGS + StrID, Value[I].Flags); - - if (User_Str1_DBName != NULL && Value[I].User_Str1 != NULL) - db_set_ts(NULL, sModule, *sDBSettingPrefix + sDBSetting + User_Str1_DBName + StrID, Value[I].User_Str1); - } - COptItem::MemToDB(sModule, sDBSettingPrefix); - } -} - -void COptItem_TreeCtrl::WndToMem(HWND hWnd) -{ // only need to gather info of items state (expanded/collapsed, checked/unchecked) - HWND hTreeView = GetDlgItem(hWnd, DlgItemID); - int I; - for (I = 0; I < Value.GetSize(); I++) - { - DWORD State = TreeView_GetItemState(hTreeView, Value[I].hItem, TVIS_EXPANDED | TVIS_STATEIMAGEMASK); - int OldFlags = Value[I].Flags; - if (State & TVIS_EXPANDED) - { - Value[I].Flags |= TIF_EXPANDED; - } else - { - Value[I].Flags &= ~TIF_EXPANDED; - } - if (TreeFlags & TREECTRL_FLAG_HAS_CHECKBOXES && (State >> 12) - 1) - { - Value[I].Flags |= TIF_ENABLED; - } else - { - Value[I].Flags &= ~TIF_ENABLED; - } - if (Value[I].Flags != OldFlags) - { - Modified = true; - } - } - COptItem::WndToMem(hWnd); -} - -void COptItem_TreeCtrl::MemToWnd(HWND hWnd) -{ - HWND hTreeView = GetDlgItem(hWnd, DlgItemID); - if (TreeFlags & TREECTRL_FLAG_HAS_CHECKBOXES) - { // have to set this in run-time as it's specified in MSDN - LONG_PTR Style = GetWindowLongPtr(hTreeView, GWL_STYLE); - SetWindowLongPtr(hTreeView, GWL_STYLE, Style & ~TVS_CHECKBOXES); - SetWindowLongPtr(hTreeView, GWL_STYLE, Style | TVS_CHECKBOXES); - } - TVINSERTSTRUCT tvIn = {0}; - int ScrollPos = GetScrollPos(hTreeView, SB_VERT); - int SelectOrder = IDToOrder(GetSelectedItemID(hWnd)); - SendMessage(hTreeView, WM_SETREDRAW, false, 0); - TreeView_DeleteAllItems(hTreeView); - _ASSERT(RootItems.GetSize()); - int I; - if (!(TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL)) - { - for (I = 0; I < RootItems.GetSize(); I++) - { - tvIn.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM; - RootItems[I].Flags |= TIF_GROUP; - tvIn.item.state = tvIn.item.stateMask = TVIS_BOLD | ((RootItems[I].Flags & TIF_EXPANDED) ? TVIS_EXPANDED : 0); - tvIn.item.pszText = RootItems[I].Title; - tvIn.hParent = TVI_ROOT; - tvIn.hInsertAfter = TVI_LAST; - tvIn.item.lParam = RootItems[I].ID; - RootItems[I].hItem = TreeView_InsertItem(hTreeView, &tvIn); - } - } - for (I = 0; I < Value.GetSize(); I++) - { - Value[I].hItem = RootItems[0].hItem; // put an item to first group in case of some strange error - } - for (I = 0; I < Value.GetSize(); I++) - { - tvIn.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM; - tvIn.item.state = tvIn.item.stateMask = (Value[I].Flags & TIF_GROUP) ? (TVIS_BOLD | ((Value[I].Flags & TIF_EXPANDED) ? TVIS_EXPANDED : 0)) : 0; - if (TreeFlags & TREECTRL_FLAG_HAS_CHECKBOXES) - { - tvIn.item.stateMask |= TVIS_STATEIMAGEMASK; - tvIn.item.state |= INDEXTOSTATEIMAGEMASK((Value[I].Flags & TIF_ENABLED) ? 2 : 1); - } - tvIn.item.pszText = Value[I].Title; - int Order = IDToOrder(Value[I].ParentID); - if (Order != -1) - { - tvIn.hParent = (Order <= TREECTRL_ROOTORDEROFFS) ? RootItems[ROOT_ORDER_TO_INDEX(Order)].hItem : Value[Order].hItem; - tvIn.hInsertAfter = TVI_LAST; - tvIn.item.lParam = Value[I].ID; - Value[I].hItem = TreeView_InsertItem(hTreeView, &tvIn); - } else - { // found an orphan item; probably it's better just to delete it - Value.RemoveElem(I); - I--; - } - } - TreeView_SelectItem(hTreeView, (SelectOrder >= 0) ? Value[SelectOrder].hItem : ((SelectOrder <= TREECTRL_ROOTORDEROFFS) ? RootItems[ROOT_ORDER_TO_INDEX(SelectOrder)].hItem : NULL)); - SendMessage(hTreeView, WM_SETREDRAW, true, 0); - SCROLLBARINFO sbi; - sbi.cbSize = sizeof(sbi); - GetScrollBarInfo(hTreeView, OBJID_VSCROLL, &sbi); - if (!(sbi.rgstate[0] & STATE_SYSTEM_INVISIBLE)) - { - int MinPos, MaxPos; - GetScrollRange(hTreeView, SB_VERT, &MinPos, &MaxPos); - if (ScrollPos < MinPos) - { - ScrollPos = MinPos; - } else if (ScrollPos > MaxPos) - { - ScrollPos = MaxPos; - } - SetScrollPos(hTreeView, SB_VERT, ScrollPos, true); - } - COptItem::MemToWnd(hWnd); -} - - -typedef struct -{ - TMyArray TreeSettings; - COptItem_TreeCtrl *TreeCtrl; - CString *sDBSettingPrefix; -} sTreeDeleteEnumData; - -int TreeDeleteEnum(const char *szSetting, LPARAM lParam) -{ - sTreeDeleteEnumData *TreeDeleteEnumData = (sTreeDeleteEnumData*)lParam; - CString CurSetting; - CurSetting = *TreeDeleteEnumData->sDBSettingPrefix + TreeDeleteEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_TITLE; - if (!strncmp(szSetting, CurSetting, CurSetting.GetLen())) - { - TreeDeleteEnumData->TreeSettings.AddElem(szSetting); - } - CurSetting = *TreeDeleteEnumData->sDBSettingPrefix + TreeDeleteEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_PARENT; - if (!strncmp(szSetting, CurSetting, CurSetting.GetLen())) - { - TreeDeleteEnumData->TreeSettings.AddElem(szSetting); - } - CurSetting = *TreeDeleteEnumData->sDBSettingPrefix + TreeDeleteEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_ORDER; - if (!strncmp(szSetting, CurSetting, CurSetting.GetLen())) - { - TreeDeleteEnumData->TreeSettings.AddElem(szSetting); - } - CurSetting = *TreeDeleteEnumData->sDBSettingPrefix + TreeDeleteEnumData->TreeCtrl->sDBSetting + TREEITEM_DBSTR_FLAGS; - if (!strncmp(szSetting, CurSetting, CurSetting.GetLen())) - { - TreeDeleteEnumData->TreeSettings.AddElem(szSetting); - } - if (TreeDeleteEnumData->TreeCtrl->User_Str1_DBName != NULL) - { - CurSetting = *TreeDeleteEnumData->sDBSettingPrefix + TreeDeleteEnumData->TreeCtrl->sDBSetting + TreeDeleteEnumData->TreeCtrl->User_Str1_DBName; - if (!strncmp(szSetting, CurSetting, CurSetting.GetLen())) - { - TreeDeleteEnumData->TreeSettings.AddElem(szSetting); - } - } - return 0; -} - -void COptItem_TreeCtrl::CleanDBSettings(CString &sModule, CString *sDBSettingPrefix) -{ - if (!sDBSettingPrefix) - { - sDBSettingPrefix = &sEmptyString; - } - sTreeDeleteEnumData TreeDeleteEnumData; - TreeDeleteEnumData.TreeCtrl = this; - TreeDeleteEnumData.sDBSettingPrefix = sDBSettingPrefix; - DBCONTACTENUMSETTINGS dbEnum; - dbEnum.lParam = (LPARAM)&TreeDeleteEnumData; - dbEnum.ofsSettings = 0; - dbEnum.pfnEnumProc = TreeDeleteEnum; - dbEnum.szModule = sModule; - CallService(MS_DB_CONTACT_ENUMSETTINGS, NULL, (LPARAM)&dbEnum); - int I; - for (I = 0; I < TreeDeleteEnumData.TreeSettings.GetSize(); I++) - { - db_unset(NULL, sModule, TreeDeleteEnumData.TreeSettings[I]); - } -} - - -int COptItem_TreeCtrl::GetSelectedItemID(HWND hWnd) -{ - HWND hTreeView = GetDlgItem(hWnd, DlgItemID); - TVITEM tvi = {0}; - tvi.hItem = TreeView_GetSelection(hTreeView); - if (!tvi.hItem) - { - return -1; - } - tvi.mask = TVIF_HANDLE | TVIF_PARAM; - TreeView_GetItem(hTreeView, &tvi); - return tvi.lParam; -} - -void COptItem_TreeCtrl::Delete(HWND hWnd, int ID) -{ - int SelectedOrder = IDToOrder(ID); - _ASSERT(SelectedOrder >= 0); - RecursiveDelete(hWnd, SelectedOrder); - Modified = true; -} - -void COptItem_TreeCtrl::RecursiveDelete(HWND hWnd, int I) -{ - if (Value[I].Flags & TIF_GROUP) - { - int J; - for (J = I + 1; J < Value.GetSize(); J++) - { - if (Value[J].ParentID == Value[I].ID) - { - RecursiveDelete(hWnd, J--); - } - } - } - HWND hTreeView = GetDlgItem(hWnd, DlgItemID); - TreeView_DeleteItem(hTreeView, Value[I].hItem); - Value.RemoveElem(I); -} - -CTreeItem* COptItem_TreeCtrl::InsertItem(HWND hWnd, CTreeItem &Item) -// Item's ID and ParentID are not used (the new item position is determined by current selection in the tree) -// returns a pointer to the newly inserted item info -{ - _ASSERT(!(TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL) || !(Item.Flags & TIF_GROUP)); - HWND hTreeView = GetDlgItem(hWnd, DlgItemID); - TVITEM tvi; - int SelOrder = -1; - Item.ParentID = RootItems[0].ID; - TVINSERTSTRUCT tvIn = {0}; - tvIn.hParent = RootItems[0].hItem; - tvIn.hInsertAfter = TVI_FIRST; - if (tvi.hItem = TreeView_GetSelection(hTreeView)) - { - tvi.mask = TVIF_HANDLE | TVIF_PARAM; - TreeView_GetItem(hTreeView, &tvi); - SelOrder = IDToOrder(tvi.lParam); - if (SelOrder <= TREECTRL_ROOTORDEROFFS) - { - Item.ParentID = RootItems[ROOT_ORDER_TO_INDEX(SelOrder)].ID; - tvIn.hParent = RootItems[ROOT_ORDER_TO_INDEX(SelOrder)].hItem; - SelOrder = -1; - } else - { - if (Value[SelOrder].Flags & TIF_GROUP) - { - Item.ParentID = Value[SelOrder].ID; - tvIn.hParent = Value[SelOrder].hItem; - } else - { - Item.ParentID = Value[SelOrder].ParentID; - int Order = IDToOrder(Value[SelOrder].ParentID); - tvIn.hParent = (Order <= TREECTRL_ROOTORDEROFFS) ? RootItems[ROOT_ORDER_TO_INDEX(Order)].hItem : Value[Order].hItem; - tvIn.hInsertAfter = Value[SelOrder].hItem; - } - } - } - tvIn.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM; - tvIn.item.state = tvIn.item.stateMask = (Item.Flags & TIF_GROUP) ? (TVIS_BOLD | - ((Item.Flags & TIF_EXPANDED) ? TVIS_EXPANDED : 0)) : 0; - if (TreeFlags & TREECTRL_FLAG_HAS_CHECKBOXES) - { - tvIn.item.stateMask |= TVIS_STATEIMAGEMASK; - tvIn.item.state |= INDEXTOSTATEIMAGEMASK((Item.Flags & TIF_ENABLED) ? 2 : 1); - } - tvIn.item.pszText = Item.Title; - tvIn.item.lParam = Item.ID = GenerateID(); - Value.InsertElem(Item, SelOrder + 1); - Value[SelOrder + 1].hItem = TreeView_InsertItem(hTreeView, &tvIn); - TreeView_SelectItem(hTreeView, Value[SelOrder + 1].hItem); - Modified = true; - return &Value[SelOrder + 1]; -} - -int COptItem_TreeCtrl::RecursiveMove(int ItemOrder, int ParentID, int InsertAtOrder) -// ItemOrder must be a movable item (i.e. ItemOrder >= 0) -// InsertAtOrder must be >= 0 too. -{ - int ItemsMoved = 1; - Value.MoveElem(ItemOrder, InsertAtOrder); - Value[InsertAtOrder].ParentID = ParentID; - if (Value[InsertAtOrder].Flags & TIF_GROUP) // need to ensure that no items were left before their group by an order. - { - int GroupID = Value[InsertAtOrder].ID; - int I; - for (I = ItemOrder; I < InsertAtOrder; I++) // if ItemOrder > InsertAtOrder then there is simply nothing to do - { - if (Value[I].ParentID == GroupID) - { - int CurrentItemsMoved = RecursiveMove(I, GroupID, InsertAtOrder); - ItemsMoved += CurrentItemsMoved; - InsertAtOrder -= CurrentItemsMoved; - I--; - } - } - } - return ItemsMoved; -} - -void COptItem_TreeCtrl::MoveItem(HWND hWnd, HTREEITEM hItem, HTREEITEM hMoveTo) -{ // hMoveTo can be NULL and it means that we must move hItem to the beginning of the list - _ASSERT(hItem && (hMoveTo || TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL)); - if (hItem == hMoveTo) - { - return; - } - HWND hTreeView = GetDlgItem(hWnd, DlgItemID); - TVITEM tvi; - tvi.mask = TVIF_HANDLE | TVIF_PARAM; - tvi.hItem = hItem; - TreeView_GetItem(hTreeView, &tvi); - int ItemOrder = IDToOrder(tvi.lParam); - _ASSERT(ItemOrder != -1); - int MoveToOrder; - if (hMoveTo) - { - tvi.hItem = hMoveTo; - TreeView_GetItem(hTreeView, &tvi); - MoveToOrder = IDToOrder(tvi.lParam); - _ASSERT(MoveToOrder != -1); - } else - { - MoveToOrder = -1; - } - if (ItemOrder <= TREECTRL_ROOTORDEROFFS) - { - return; // can't move root items - } - if (Value[ItemOrder].Flags & TIF_GROUP) - { // need to check for a case when trying to move a group to its own subgroup. - int Order = MoveToOrder; - while (Order >= 0) - { - Order = IDToOrder(Value[Order].ParentID); - if (Order == ItemOrder) - { - return; - } - } - } -// well, everything is ok, we really can move that item. - WndToMem(hWnd); // save groups state (expanded/collapsed) - if (MoveToOrder != -1 && ((MoveToOrder <= TREECTRL_ROOTORDEROFFS) ? RootItems[ROOT_ORDER_TO_INDEX(MoveToOrder)].Flags : Value[MoveToOrder].Flags) & TIF_GROUP) - { // if the destination is a group, then move the item to that group - RecursiveMove(ItemOrder, (MoveToOrder <= TREECTRL_ROOTORDEROFFS) ? RootItems[ROOT_ORDER_TO_INDEX(MoveToOrder)].ID : Value[MoveToOrder].ID, (MoveToOrder >= 0) ? ((ItemOrder < MoveToOrder) ? MoveToOrder : (MoveToOrder + 1)) : 0); - } else - { // else place the item after the destination item - RecursiveMove(ItemOrder, (MoveToOrder == -1) ? 0 : Value[MoveToOrder].ParentID, (ItemOrder < MoveToOrder) ? MoveToOrder : (MoveToOrder + 1)); // when TREECTRL_FLAG_IS_SINGLE_LEVEL, we always have a root item with ID = 0. - } - MemToWnd(hWnd); // update the tree - Modified = true; -} - - -// ================================================ COptItem_ListCtrl ================================================ - -typedef struct -{ - COptItem_ListCtrl *ListCtrl; - CString *sModule; - CString *sDBSettingPrefix; -} sListReadEnumData; - -int ListReadEnum(const char *szSetting, LPARAM lParam) -{ - sListReadEnumData *ListReadEnumData = (sListReadEnumData*)lParam; - int Len = ListReadEnumData->sDBSettingPrefix->GetLen() + ListReadEnumData->ListCtrl->sDBSetting.GetLen() + lengthof(LISTITEM_DBSTR_TEXT) - 1; - if (!strncmp(szSetting, *ListReadEnumData->sDBSettingPrefix + ListReadEnumData->ListCtrl->sDBSetting + LISTITEM_DBSTR_TEXT, Len) && isdigit(szSetting[Len])) - { - int ID = atol(szSetting + Len); - ListReadEnumData->ListCtrl->Value.SetAtGrow(ID).Text = db_get_s(NULL, *ListReadEnumData->sModule, *ListReadEnumData->sDBSettingPrefix + szSetting, _T("")); - } - return 0; -} - -void COptItem_ListCtrl::DBToMem(CString &sModule, CString *sDBSettingPrefix) -{ - if (!sDBSettingPrefix) - { - sDBSettingPrefix = &sEmptyString; - } - Value.RemoveAll(); - sListReadEnumData ListReadEnumData; - ListReadEnumData.ListCtrl = this; - ListReadEnumData.sModule = &sModule; - ListReadEnumData.sDBSettingPrefix = sDBSettingPrefix; - DBCONTACTENUMSETTINGS dbEnum; - dbEnum.lParam = (LPARAM)&ListReadEnumData; - dbEnum.ofsSettings = 0; - dbEnum.pfnEnumProc = ListReadEnum; - dbEnum.szModule = sModule; - CallService(MS_DB_CONTACT_ENUMSETTINGS, NULL, (LPARAM)&dbEnum); - if (!Value.GetSize()) - { - Value = DefValue; - } else - { - int I; - for (I = 0; I < Value.GetSize(); I++) - { - if (Value[I].Text == NULL) // NULL is not ""! - { - Value.RemoveElem(I); - I--; - } - } - } - COptItem::DBToMem(sModule, sDBSettingPrefix); -} - -void COptItem_ListCtrl::MemToDB(CString &sModule, CString *sDBSettingPrefix) -{ - if (!ReadOnly && Modified) - { - if (!sDBSettingPrefix) - { - sDBSettingPrefix = &sEmptyString; - } - CleanDBSettings(sModule, sDBSettingPrefix); - int I; - for (I = 0; I < Value.GetSize(); I++) - { - CString StrID; - _itoa(I, StrID.GetBuffer(64), 10); - StrID.ReleaseBuffer(); - db_set_ts(NULL, sModule, *sDBSettingPrefix + sDBSetting + LISTITEM_DBSTR_TEXT + StrID, Value[I].Text); - } - COptItem::MemToDB(sModule, sDBSettingPrefix); - } -} - -void COptItem_ListCtrl::WndToMem(HWND hWnd) -{ -// nothing to do - COptItem::WndToMem(hWnd); -} - -void COptItem_ListCtrl::MemToWnd(HWND hWnd) -{ - HWND hListView = GetDlgItem(hWnd, DlgItemID); - SendMessage(hListView, WM_SETREDRAW, false, 0); - SendMessage(hListView, LB_RESETCONTENT, 0, 0); - int I; - for (I = 0; I < Value.GetSize(); I++) - { - SendMessage(hListView, LB_INSERTSTRING, -1, (LPARAM)(TCHAR*)Value[I].Text); - } - SendMessage(hListView, WM_SETREDRAW, true, 0); - COptItem::MemToWnd(hWnd); -} - - -typedef struct -{ - TMyArray ListSettings; - COptItem_ListCtrl *ListCtrl; - CString *sDBSettingPrefix; -} sListDeleteEnumData; - -int ListDeleteEnum(const char *szSetting, LPARAM lParam) -{ - sListDeleteEnumData *ListDeleteEnumData = (sListDeleteEnumData*)lParam; - CString CurSetting = *ListDeleteEnumData->sDBSettingPrefix + ListDeleteEnumData->ListCtrl->sDBSetting + LISTITEM_DBSTR_TEXT; - if (!strncmp(szSetting, CurSetting, CurSetting.GetLen())) - { - ListDeleteEnumData->ListSettings.AddElem(szSetting); - } - return 0; -} - -void COptItem_ListCtrl::CleanDBSettings(CString &sModule, CString *sDBSettingPrefix) -{ - if (!sDBSettingPrefix) - { - sDBSettingPrefix = &sEmptyString; - } - sListDeleteEnumData ListDeleteEnumData; - ListDeleteEnumData.ListCtrl = this; - ListDeleteEnumData.sDBSettingPrefix = sDBSettingPrefix; - DBCONTACTENUMSETTINGS dbEnum; - dbEnum.lParam = (LPARAM)&ListDeleteEnumData; - dbEnum.ofsSettings = 0; - dbEnum.pfnEnumProc = ListDeleteEnum; - dbEnum.szModule = sModule; - CallService(MS_DB_CONTACT_ENUMSETTINGS, NULL, (LPARAM)&dbEnum); - int I; - for (I = 0; I < ListDeleteEnumData.ListSettings.GetSize(); I++) - { - db_unset(NULL, sModule, ListDeleteEnumData.ListSettings[I]); - } -} - - -int COptItem_ListCtrl::GetSelectedItemID(HWND hWnd) -{ - int Res = SendDlgItemMessage(hWnd, DlgItemID, LB_GETCURSEL, 0, 0); - return (Res == LB_ERR) ? -1 : Res; // I know that LB_ERR = -1 ;) -} - -int COptItem_ListCtrl::SetSelectedItemID(HWND hWnd, int ID) -{ - int Res = SendDlgItemMessage(hWnd, DlgItemID, LB_SETCURSEL, ID, 0); - return (Res == LB_ERR) ? -1 : Res; -} - -void COptItem_ListCtrl::Delete(HWND hWnd, int ID) -{ - _ASSERT(ID >= 0); - HWND hListView = GetDlgItem(hWnd, DlgItemID); - int Res = SendMessage(hListView, LB_DELETESTRING, ID, 0); - _ASSERT(Res != LB_ERR); - Value.RemoveElem(ID); - Modified = true; -} - -void COptItem_ListCtrl::ModifyItem(HWND hWnd, int ID, CListItem &Item) -{ // changes the text of item with the specified ID - _ASSERT(ID >= 0); - HWND hListView = GetDlgItem(hWnd, DlgItemID); - SendMessage(hListView, WM_SETREDRAW, false, 0); - int CurSel = SendMessage(hListView, LB_GETCURSEL, 0, 0); - int TopIndex = SendMessage(hListView, LB_GETTOPINDEX, 0, 0); - int Res = SendMessage(hListView, LB_DELETESTRING, ID, 0); - _ASSERT(Res != LB_ERR); - Res = SendMessage(hListView, LB_INSERTSTRING, ID, (LPARAM)(TCHAR*)(Item.Text)); - _ASSERT(Res != LB_ERR && Res != LB_ERRSPACE); - SendMessage(hListView, LB_SETCURSEL, CurSel, 0); - SendMessage(hListView, LB_SETTOPINDEX, TopIndex, 0); - SendMessage(hListView, WM_SETREDRAW, true, 0); - Value[ID].Text = Item.Text; - Modified = true; -} - -CListItem* COptItem_ListCtrl::InsertItem(HWND hWnd, int ID, CListItem &Item) -// returns a pointer to the newly inserted item info -// ID is position at which to insert the item; -1 = add to the end of the list -{ - HWND hListView = GetDlgItem(hWnd, DlgItemID); - int Res = SendMessage(hListView, LB_INSERTSTRING, ID, (LPARAM)(TCHAR*)(Item.Text)); // LB_INSERTSTRING doesn't sort the lists even with LBS_SORT style - _ASSERT(Res != LB_ERR && Res != LB_ERRSPACE); - int I = Value.AddElem(Item); - Modified = true; - return &Value[I]; -} diff --git a/plugins/ClientChangeNotify/src/CommonLibs/Options.h b/plugins/ClientChangeNotify/src/CommonLibs/Options.h deleted file mode 100644 index 5d429b8a8a..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/Options.h +++ /dev/null @@ -1,481 +0,0 @@ -/* - Options.h - Copyright (c) 2005-2008 Chervov Dmitry - - 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 -*/ - -#pragma once - -#include "CString.h" -#include "TMyArray.h" - -#ifndef lengthof -#define lengthof(s) (sizeof(s) / sizeof(*s)) -#endif - - -class COptItem -{ -public: - COptItem() {} - COptItem(int DlgItemID, char *szDBSetting, int nValueSize, int lParam = 0, bool ReadOnly = false): - DlgItemID(DlgItemID), nValueSize(nValueSize), sDBSetting(szDBSetting), lParam(lParam), Enabled(true), ReadOnly(ReadOnly), Modified(false) {} - virtual ~COptItem() {} - - virtual void DBToMem(CString&, CString* = NULL) { Modified = false; } - virtual void MemToDB(CString&, CString* = NULL) { Modified = false; } - virtual void WndToMem(HWND) {} - virtual void MemToWnd(HWND hWnd) {EnableWindow(GetDlgItem(hWnd, DlgItemID), Enabled);} - void DBToMemToWnd(CString &sModule, HWND hWnd, CString *sDBSettingPrefix = NULL) {DBToMem(sModule, sDBSettingPrefix); MemToWnd(hWnd);} - void WndToMemToDB(HWND hWnd, CString &sModule, CString *sDBSettingPrefix = NULL) {WndToMem(hWnd); MemToDB(sModule, sDBSettingPrefix);} - virtual void CleanDBSettings(CString &sModule, CString *sDBSettingPrefix = NULL) {db_unset(NULL, sModule, sDBSettingPrefix ? (*sDBSettingPrefix + sDBSetting) : sDBSetting);}; // TODO: also set Value to DefValue? - - virtual void SetValue(int) {Modified = true;} - virtual void SetDefValue(int) {} - virtual int GetValue() {return 0;} - virtual int GetDefValue() {return 0;} - int GetDBValue(CString &sModule, CString *sDBSettingPrefix = NULL) {DBToMem(sModule, sDBSettingPrefix); return GetValue();} - void SetDBValue(CString &sModule, int Value, CString *sDBSettingPrefix = NULL) {SetValue(Value); MemToDB(sModule, sDBSettingPrefix);} - int GetDBValueCopy(CString &sModule, CString *sDBSettingPrefix = NULL) {COptItem* Item = Copy(); Item->DBToMem(sModule, sDBSettingPrefix); int Value = Item->GetValue(); delete Item; return Value;} // retrieves DB value, but doesn't affect current page/item state; beware! it doesn't work with string values / other dynamic pointers - void SetDBValueCopy(CString &sModule, int Value, CString *sDBSettingPrefix = NULL) {COptItem* Item = Copy(); Item->SetValue(Value); Item->MemToDB(sModule, sDBSettingPrefix); delete Item;} - int GetWndValue(HWND hWnd) {WndToMem(hWnd); return GetValue();} - void SetWndValue(HWND hWnd, int Value) {SetValue(Value); MemToWnd(hWnd);} - void SetDlgItemID(int DlgItemID) {this->DlgItemID = DlgItemID;} - bool GetModified() {return Modified;} - void SetModified(bool Modified) {this->Modified = Modified;} - - void Enable(int Enabled) {this->Enabled = Enabled;} - int GetParam() {return lParam;} - int GetID() {return DlgItemID;} - -// virtual COptItem& operator = (const COptItem& Item) {return *this;}; - virtual COptItem* Copy() {_ASSERT(0); return NULL;} // Attention! Free Copy() result when it's not needed anymore! - - CString sDBSetting; - -protected: - int GetIntDBVal(CString &sModule, int bSigned = false, CString *sDBSettingPrefix = NULL); - void SetIntDBVal(CString &sModule, int Value, CString *sDBSettingPrefix = NULL); - TCString GetStrDBVal(CString &sModule, CString *sDBSettingPrefix = NULL); - void SetStrDBVal(CString &sModule, TCString &Str, CString *sDBSettingPrefix = NULL); - - int DlgItemID; - int Enabled; - bool ReadOnly; - bool Modified; - int nValueSize; // maximum pValue size in bytes - int lParam; -}; - - -class COptItem_Generic : public COptItem -{ -public: - COptItem_Generic() {} - COptItem_Generic(int DlgItemID, int lParam = 0): COptItem(DlgItemID, NULL, 0, lParam) {} - virtual COptItem* Copy() {return new COptItem_Generic(*this);} -}; - - -class COptItem_Edit : public COptItem -{ -public: - COptItem_Edit() {} - COptItem_Edit(int DlgItemID, char *szDBSetting, int nMaxLen, TCHAR *szDefValue, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nMaxLen, lParam, ReadOnly), sDefValue(szDefValue) {} -// COptItem_Edit(const COptItem_Edit &Item): sDefValue(Item.sDefValue), sValue(Item.sValue) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {sValue = GetStrDBVal(sModule, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetStrDBVal(sModule, sValue, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {GetDlgItemText(hWnd, DlgItemID, sValue.GetBuffer(nValueSize), nValueSize); sValue.ReleaseBuffer(); COptItem::MemToWnd(hWnd);} - void MemToWnd(HWND hWnd) {SetDlgItemText(hWnd, DlgItemID, sValue); COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {sValue = *(TCString*)Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {sDefValue = *(TCString*)DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return (int)&sValue;} - int GetDefValue() {return (int)&sDefValue;} - -// COptItem_Edit& operator = (const COptItem_Edit& Item) {return *this;}; - virtual COptItem* Copy() {return new COptItem_Edit(*this);} - - TCString sDefValue; - TCString sValue; -}; - - -class COptItem_IntEdit : public COptItem -{ -public: - COptItem_IntEdit() {} - COptItem_IntEdit(int DlgItemID, char *szDBSetting, int nValueSize = DBVT_BYTE, int bSigned = true, int DefValue = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0), bSigned(bSigned) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {Value = GetIntDBVal(sModule, bSigned, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetIntDBVal(sModule, Value, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {Value = GetDlgItemInt(hWnd, DlgItemID, NULL, bSigned); COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {SetDlgItemInt(hWnd, DlgItemID, Value, bSigned); COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_IntEdit(*this);} - - int DefValue; - int Value; - int bSigned; -}; - - -class COptItem_Checkbox : public COptItem -{ -public: - COptItem_Checkbox() {} - COptItem_Checkbox(int DlgItemID, char *szDBSetting, int nValueSize = DBVT_BYTE, int DefValue = 0, int ValueMask = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0), ValueMask(ValueMask) {} - - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL); - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL); - void WndToMem(HWND hWnd); - void MemToWnd(HWND hWnd); - - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_Checkbox(*this);} - - int Value; - int DefValue; - int ValueMask; -}; - - -class COptItem_Radiobutton : public COptItem -{ -public: - COptItem_Radiobutton() {} - COptItem_Radiobutton(int DlgItemID, char *szDBSetting, int nValueSize, int DefValue, int ValueMask, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0), ValueMask(ValueMask) {} - - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {Value = (GetIntDBVal(sModule, false, sDBSettingPrefix) == ValueMask) ? BST_CHECKED : BST_UNCHECKED; COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {if ((Value == BST_CHECKED)) SetIntDBVal(sModule, ValueMask, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {Value = IsDlgButtonChecked(hWnd, DlgItemID); COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {CheckDlgButton(hWnd, DlgItemID, Value ? BST_CHECKED : BST_UNCHECKED); COptItem::MemToWnd(hWnd);} - - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_Radiobutton(*this);} - - int Value; - int DefValue; - int ValueMask; -}; - - -class COptItem_Combobox : public COptItem -{ -public: - COptItem_Combobox() {} - COptItem_Combobox(int DlgItemID, char *szDBSetting, int nValueSize = DBVT_BYTE, int DefValue = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {Value = GetIntDBVal(sModule, false, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetIntDBVal(sModule, Value, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {Value = SendDlgItemMessage(hWnd, DlgItemID, CB_GETITEMDATA, (WPARAM)SendDlgItemMessage(hWnd, DlgItemID, CB_GETCURSEL, 0, 0), 0); COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {SendDlgItemMessage(hWnd, DlgItemID, CB_SETCURSEL, Value, 0); COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_Combobox(*this);} - - int DefValue; - int Value; -}; - - -class COptItem_Colourpicker : public COptItem -{ -public: - COptItem_Colourpicker() {} - COptItem_Colourpicker(int DlgItemID, char *szDBSetting, int DefValue = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, DBVT_DWORD, lParam, ReadOnly), DefValue(DefValue), Value(0) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {Value = GetIntDBVal(sModule, false, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetIntDBVal(sModule, Value, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {Value = SendDlgItemMessage(hWnd, DlgItemID, CPM_GETCOLOUR, 0, 0); COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {SendDlgItemMessage(hWnd, DlgItemID, CPM_SETCOLOUR, 0, Value); COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_Colourpicker(*this);} - - DWORD DefValue; - DWORD Value; -}; - - -class COptItem_Slider : public COptItem -{ -public: - COptItem_Slider() {} - COptItem_Slider(int DlgItemID, char *szDBSetting, int nValueSize = DBVT_BYTE, int DefValue = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {Value = GetIntDBVal(sModule, false, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetIntDBVal(sModule, Value, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {Value = SendDlgItemMessage(hWnd, DlgItemID, TBM_GETPOS, 0, 0); COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {SendDlgItemMessage(hWnd, DlgItemID, TBM_SETPOS, true, Value); COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_Slider(*this);} - - int DefValue; - int Value; -}; - - -class COptItem_IntDBSetting : public COptItem -{ -public: - COptItem_IntDBSetting() {} - COptItem_IntDBSetting(int DlgItemID, char *szDBSetting, int nValueSize = DBVT_BYTE, int bSigned = true, int DefValue = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0), bSigned(bSigned) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {Value = GetIntDBVal(sModule, bSigned, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetIntDBVal(sModule, Value, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_IntDBSetting(*this);} - - int Value; - int DefValue; - int bSigned; -}; - - -class COptItem_BitDBSetting : public COptItem -{ -public: - COptItem_BitDBSetting() {} - COptItem_BitDBSetting(int DlgItemID, char *szDBSetting, int nValueSize = DBVT_BYTE, int DefValue = 0, int ValueMask = 0, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nValueSize, lParam, ReadOnly), DefValue(DefValue), Value(0), ValueMask(ValueMask) {} - - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL); - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL); - void WndToMem(HWND hWnd) {COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {COptItem::MemToWnd(hWnd);} - - void SetValue(int Value) {this->Value = Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return Value;} - int GetDefValue() {return DefValue;} - virtual COptItem* Copy() {return new COptItem_BitDBSetting(*this);} - - int Value; - int DefValue; - int ValueMask; -}; - - -class COptItem_StrDBSetting : public COptItem -{ -public: - COptItem_StrDBSetting() {} - COptItem_StrDBSetting(int DlgItemID, char *szDBSetting, int nMaxLen, TCHAR *szDefValue, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, nMaxLen, lParam, ReadOnly), sDefValue(szDefValue) {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL) {sValue = GetStrDBVal(sModule, sDBSettingPrefix); COptItem::DBToMem(sModule, sDBSettingPrefix);} - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL) {SetStrDBVal(sModule, sValue, sDBSettingPrefix); COptItem::MemToDB(sModule, sDBSettingPrefix);} - void WndToMem(HWND hWnd) {COptItem::WndToMem(hWnd);} - void MemToWnd(HWND hWnd) {COptItem::MemToWnd(hWnd);} - void SetValue(int Value) {sValue = *(TCString*)Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {sDefValue = *(TCString*)DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return (int)&sValue;} - int GetDefValue() {return (int)&sDefValue;} - virtual COptItem* Copy() {return new COptItem_StrDBSetting(*this);} - - TCString sDefValue; - TCString sValue; -}; - - -// Tree item flags -#define TIF_GROUP 1 // is a group -#define TIF_EXPANDED 2 // item is expanded -#define TIF_ENABLED 4 // item is checked (has sense when the tree has checkboxes) -#define TIF_ROOTITEM 0x80 // item is a root item - -class CBaseTreeItem -{ -public: - CBaseTreeItem(); - CBaseTreeItem(TCString Title, int ID, int Flags): Title(Title), ID(ID), Flags(Flags), hItem(NULL) {} - - TCString Title; - int ID; - int Flags; - HTREEITEM hItem; -}; - -class CTreeItem : public CBaseTreeItem -{ -public: - CTreeItem(); - CTreeItem(TCString Title, int ParentID, int ID, int Flags = 0, TCString User_Str1 = NULL): - CBaseTreeItem(Title, ID, Flags & ~TIF_ROOTITEM), ParentID(ParentID), User_Str1(User_Str1) {} - - int ParentID; - TCString User_Str1; -}; - -class CTreeRootItem : public CBaseTreeItem -{ -public: - CTreeRootItem(); - CTreeRootItem(TCString Title, int ID, int Flags): CBaseTreeItem(Title, ID, Flags | TIF_ROOTITEM) {} -}; - -typedef TMyArray TreeItemArray; -typedef TMyArray TreeRootItemArray; - -#define TREECTRL_ROOTORDEROFFS -2 -#define ROOT_INDEX_TO_ORDER(i) (TREECTRL_ROOTORDEROFFS - (i)) -#define ROOT_ORDER_TO_INDEX(i) (TREECTRL_ROOTORDEROFFS - (i)) - -#define TREEITEMTITLE_MAXLEN 128 -#define TREEITEM_DBSTR_TITLE "Title" -#define TREEITEM_DBSTR_PARENT "Parent" -#define TREEITEM_DBSTR_ORDER "Order" -#define TREEITEM_DBSTR_FLAGS "Flags" - -// Tree control flags -#define TREECTRL_FLAG_IS_SINGLE_LEVEL 1 // means that the tree items can't have children, i.e. the tree is a plain list of items -#define TREECTRL_FLAG_HAS_CHECKBOXES 2 -//#define TREECTRL_FLAG_UNORDERED 4 TODO? - -class COptItem_TreeCtrl : public COptItem -{ -public: - COptItem_TreeCtrl() {} - COptItem_TreeCtrl(int DlgItemID, char *szDBSetting, TreeItemArray &DefValue, TreeRootItemArray RootItems, int lParam = 0, CString User_Str1_DBName = NULL, bool ReadOnly = false, int TreeFlags = 0): COptItem(DlgItemID, szDBSetting, DBVT_DWORD, lParam, ReadOnly), DefValue(DefValue), RootItems(RootItems), User_Str1_DBName(User_Str1_DBName), TreeFlags(TreeFlags) - { - if (TreeFlags & TREECTRL_FLAG_IS_SINGLE_LEVEL) - { - _ASSERT(!RootItems.GetSize()); // there can't be any root items when the tree is a plain list - this->RootItems.AddElem(CTreeRootItem(_T(""), 0, TIF_EXPANDED)); // TODO?? - this->RootItems[0].hItem = TVI_ROOT; - } - } - ~COptItem_TreeCtrl() {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL); - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL); - void WndToMem(HWND hWnd); - void MemToWnd(HWND hWnd); - void CleanDBSettings(CString &sModule, CString *sDBSettingPrefix = NULL); - void SetValue(int Value) {this->Value = *(TreeItemArray*)Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = *(TreeItemArray*)DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return (int)&Value;} - int GetDefValue() {return (int)&DefValue;} - virtual COptItem* Copy() {return new COptItem_TreeCtrl(*this);} - - int IDToOrder(int ID); - int hItemToOrder(HTREEITEM hItem); - int GenerateID(); - int GetSelectedItemID(HWND hWnd); - void Delete(HWND hWnd, int ID); - CTreeItem* InsertItem(HWND hWnd, CTreeItem &Item); - void MoveItem(HWND hWnd, HTREEITEM hItem, HTREEITEM hMoveTo); - - TreeItemArray DefValue, Value; - TreeRootItemArray RootItems; - CString User_Str1_DBName; - int TreeFlags; - -protected: - void RecursiveDelete(HWND hWnd, int I); - int RecursiveMove(int ItemOrder, int ParentID, int InsertAtOrder); -}; - - -class CListItem -{ -public: - CListItem(); - CListItem(TCString Text): Text(Text) {} - - TCString Text; -}; - -typedef TMyArray ListItemArray; - -#define LISTITEM_DBSTR_TEXT "Text" - -class COptItem_ListCtrl : public COptItem -{ -public: - COptItem_ListCtrl() {} - COptItem_ListCtrl(int DlgItemID, char *szDBSetting, ListItemArray &DefValue, int lParam = 0, bool ReadOnly = false): COptItem(DlgItemID, szDBSetting, DBVT_DWORD, lParam, ReadOnly), DefValue(DefValue) {} - ~COptItem_ListCtrl() {} - void DBToMem(CString &sModule, CString *sDBSettingPrefix = NULL); - void MemToDB(CString &sModule, CString *sDBSettingPrefix = NULL); - void WndToMem(HWND hWnd); - void MemToWnd(HWND hWnd); - void CleanDBSettings(CString &sModule, CString *sDBSettingPrefix = NULL); - void SetValue(int Value) {this->Value = *(ListItemArray*)Value; COptItem::SetValue(Value);} - void SetDefValue(int DefValue) {this->DefValue = *(ListItemArray*)DefValue; COptItem::SetDefValue(DefValue);} - int GetValue() {return (int)&Value;} - int GetDefValue() {return (int)&DefValue;} - virtual COptItem* Copy() {return new COptItem_ListCtrl(*this);} - - int GetSelectedItemID(HWND hWnd); // returns -1 if there's no selection - int SetSelectedItemID(HWND hWnd, int ID); - void Delete(HWND hWnd, int ID); - CListItem* InsertItem(HWND hWnd, int ID, CListItem &Item); - void ModifyItem(HWND hWnd, int ID, CListItem &Item); - - ListItemArray DefValue, Value; -}; - - -class COptPage -{ -public: - COptPage(): hWnd(NULL), sDBSettingPrefix("") {} - COptPage(char *szModule, HWND hWnd, CString sDBSettingPrefix = ""): sModule(szModule), hWnd(hWnd), sDBSettingPrefix(sDBSettingPrefix) {} - COptPage(const COptPage &Item); - ~COptPage(); - - void DBToMem(); - void MemToDB(); - void MemToPage(int OnlyEnable = 0); - void PageToMem(); - void DBToMemToPage() {DBToMem(); MemToPage();} - void PageToMemToDB() {PageToMem(); MemToDB();} - void CleanDBSettings(); - - COptItem *Find(int DlgItemID); - int GetValue(int DlgItemID) {return Find(DlgItemID)->GetValue();} - void SetValue(int DlgItemID, int Value) {Find(DlgItemID)->SetValue(Value);} - int GetDBValue(int DlgItemID) {return Find(DlgItemID)->GetDBValue(sModule, &sDBSettingPrefix);} - void SetDBValue(int DlgItemID, int Value) {Find(DlgItemID)->SetDBValue(sModule, Value, &sDBSettingPrefix);} - int GetDBValueCopy(int DlgItemID) {return Find(DlgItemID)->GetDBValueCopy(sModule, &sDBSettingPrefix);} - void SetDBValueCopy(int DlgItemID, int Value) {Find(DlgItemID)->SetDBValueCopy(sModule, Value, &sDBSettingPrefix);} - int GetWndValue(int DlgItemID) {return Find(DlgItemID)->GetWndValue(hWnd);} - void SetWndValue(int DlgItemID, int Value) {Find(DlgItemID)->SetWndValue(hWnd, Value);} - HWND GetWnd() {return hWnd;} - void SetWnd(HWND hWnd) {_ASSERT(!this->hWnd || !hWnd); this->hWnd = hWnd;} - void Enable(int DlgItemID, int Enabled) {Find(DlgItemID)->Enable(Enabled);} - bool GetModified(); - void SetModified(bool Modified); - - COptPage& operator = (const COptPage& Page); - - HWND hWnd; - CString sModule, sDBSettingPrefix; - TMyArray Items; -}; diff --git a/plugins/ClientChangeNotify/src/CommonLibs/TMyArray.h b/plugins/ClientChangeNotify/src/CommonLibs/TMyArray.h deleted file mode 100644 index 3e676bf816..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/TMyArray.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - TMyArray.h - TMyArray template - Copyright (c) 2005-2008 Chervov Dmitry - - 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 -*/ - -#pragma once - -#include - -#define ARRAY_GROWBY 4 -// if there is more than ARRAY_FREETHRESHOLD free array elements, then we're reallocating the array -#define ARRAY_FREETHRESHOLD 16 - -template -class TMyArray -{ -public: - TMyArray(); - TMyArray(const TMyArray &A); - ~TMyArray(); - - int GetSize() const; - T* GetData() const; - int AddElem(ARG_T pElem); - int Add(const T *pItems, int nItems); - void InsertElem(ARG_T pElem, int nInsertAt); - void MoveElem(int nIndex, int nMoveTo); - T& SetAtGrow(int nIndex); - int Find(ARG_T pElem); // returns an index of the specified item, or -1 if the array doesn't contain the item - int BinarySearch(int (*CmpFunc)(ARG_T pItem, LPARAM lParam), LPARAM lParam, int *pIndex = NULL); // returns an index of the specified item, or -1 if the array doesn't contain the item; - // also it's possible to specify pIndex so that even if the array doesn't contain the item, the function will set *pIndex to a position where the item can be inserted; - // CmpFunc must return -1, 0 and 1 depending whether pItem is lesser, equal or greater than needed; - // BinarySearch() requires the array to be sorted in an ascending order - void RemoveElem(int nIndex, int nItems = 1); - void RemoveAll(); - const T& operator[](int nIndex) const; - T& operator[](int nIndex); - TMyArray& operator = (const TMyArray &A); - TMyArray& operator += (const TMyArray &A); - -private: - int SetAllocNum(int nNewAllocNum); - - T* pData; - int nElemNum; - int nAllocNum; -}; - -template -TMyArray::TMyArray() -{ - nElemNum = 0; - nAllocNum = 0; - pData = NULL; -} - -template -TMyArray::TMyArray(const TMyArray &A)//: TMyArray() -{ - nElemNum = 0; - nAllocNum = 0; - pData = NULL; - *this = A; -} - -template -TMyArray::~TMyArray() -{ - RemoveAll(); -} - -template -__forceinline int TMyArray::GetSize() const -{ - return nElemNum; -} - -template -__forceinline T* TMyArray::GetData() const -{ - return pData; -} - -template -__forceinline int TMyArray::SetAllocNum(int nNewAllocNum) -{ - _ASSERT(nNewAllocNum >= nElemNum); - T*pNewData = (nNewAllocNum) ? (T*)malloc(sizeof(T) * nNewAllocNum) : NULL; - if (pData) - { - if (pNewData) - { - memcpy(pNewData, pData, sizeof(T) * nElemNum); - } - free(pData); - } - pData = pNewData; - if (!pNewData) - { - nAllocNum = 0; - return -1; // not enough memory? - } else - { - nAllocNum = nNewAllocNum; - return 0; // everything's ok - } -} - -template -__forceinline int TMyArray::AddElem(ARG_T pElem) -{ - if (nElemNum >= nAllocNum) - { // reallocate memory to fit new element - SetAllocNum(nAllocNum + GrowBy); - } - memset(pData + nElemNum, 0, sizeof(T)); - pData[nElemNum] = pElem; - return nElemNum++; -} - -template -__forceinline int TMyArray::Add(const T *pItems, int nItems) -{ - if (nElemNum + nItems > nAllocNum) - { // reallocate memory to fit new items - SetAllocNum(nAllocNum + nElemNum + nItems - 1 - ((nElemNum + nItems - 1) % GrowBy) + GrowBy); - } - memset(pData + nElemNum, 0, sizeof(T) * nItems); - int I; - for (I = 0; I < nItems; I++) - { - pData[nElemNum++] = pItems[I]; - } - return nElemNum - nItems; // returns an index of the first item added -} - -template -__forceinline void TMyArray::InsertElem(ARG_T pElem, int nInsertAt) -{ - _ASSERT(nInsertAt >= 0 && nInsertAt <= nElemNum); - if (nElemNum >= nAllocNum) - { // reallocate memory to fit new items - SetAllocNum(nAllocNum + GrowBy); - } - memmove(pData + nInsertAt + 1, pData + nInsertAt, sizeof(T) * (nElemNum - nInsertAt)); - memset(pData + nInsertAt, 0, sizeof(T)); - pData[nInsertAt] = pElem; - nElemNum++; -} - -template -__forceinline void TMyArray::MoveElem(int nIndex, int nMoveTo) -{ - _ASSERT(nIndex >= 0 && nIndex < nElemNum && nMoveTo >= 0 && nMoveTo < nElemNum); - if (nIndex == nMoveTo) - { - return; // nothing to do - } - char Elem[sizeof(T)]; - memcpy(Elem, pData + nIndex, sizeof(T)); - if (nIndex < nMoveTo) - { - memmove(pData + nIndex, pData + nIndex + 1, sizeof(T) * (nMoveTo - nIndex)); - } else - { - memmove(pData + nMoveTo + 1, pData + nMoveTo, sizeof(T) * (nIndex - nMoveTo)); - } - memcpy(pData + nMoveTo, Elem, sizeof(T)); -} - -template -__forceinline T& TMyArray::SetAtGrow(int nIndex) -{ - _ASSERT(nIndex >= 0); - if (nIndex < nElemNum) - { - return pData[nIndex]; - } - if (nIndex >= nAllocNum) - { - if (SetAllocNum(nIndex - (nIndex % GrowBy) + GrowBy)) - { // if there was an error - nElemNum = 0; - return *pData; - } - } - memset(pData + nElemNum, 0, sizeof(T) * (nIndex - nElemNum + 1)); - nElemNum = nIndex + 1; - return pData[nIndex]; -} - -template -__forceinline int TMyArray::Find(ARG_T pElem) -{ - int I; - for (I = 0; I < nElemNum; I++) - { - if (pData[I] == pElem) - { - return I; - } - } - return -1; -} - -template -__forceinline int TMyArray::BinarySearch(int (*CmpFunc)(ARG_T pItem, LPARAM lParam), LPARAM lParam, int *pIndex) -{ - int L, R; - int CmpResult; - if (!nElemNum) - { - if (pIndex) - { - *pIndex = -1; - } - return -1; - } - for (L = 0, R = nElemNum; R - L > 1;) - { - int C = (L + R) >> 1; // rounds always to a lesser index if L + R is odd - CmpResult = CmpFunc(pData[C], lParam); // usually, CmpFunc = pData[C] - lParam; i.e. CmpFunc > 0 when pData[C] is greater than necessary, < 0 when pData[C] is less, and = 0 when pData[C] is the item we search for - if (CmpResult < 0) - { - L = C; - } else if (CmpResult > 0) - { - R = C; - } else - { // CmpResult == 0 - if (pIndex) - { - *pIndex = C; - } - return C; - } - } - if (pIndex) - { - *pIndex = L; - } - CmpResult = CmpFunc(pData[L], lParam); - if (!CmpResult) - { - return L; - } - if (CmpResult > 0) - { // we don't need to check pData[R], as pData[R] > pData[L] > lParam, i.e. there are no suitable item in the array - return -1; - } -// CmpResult < 0, we have to check pData[R] too - if (pIndex) - { - *pIndex = R; - } - if (R >= nElemNum) - { - return -1; - } - return CmpFunc(pData[R], lParam) ? -1 : R; -} - -template -__forceinline void TMyArray::RemoveElem(int nIndex, int nItems) -{ - _ASSERT(nIndex >= 0 && nIndex + nItems <= nElemNum); - if (!nItems) - { - return; - } -// delete pData[nIndex]; -// ~pData[nIndex]; - int I; - for (I = nIndex; I < nIndex + nItems; I++) - { - (pData + I)->~T(); - } - memmove(pData + nIndex, pData + nIndex + nItems, sizeof(T) * (nElemNum - nIndex - nItems)); - nElemNum -= nItems; - if (nAllocNum - nElemNum >= FreeThreshold) - { - SetAllocNum(nAllocNum - FreeThreshold); - }/* else - { - memset(pData + nElemNum, 0, sizeof(T)); - }*/ -} - -template -__forceinline void TMyArray::RemoveAll() -{ - int I; - for (I = 0; I < nElemNum; I++) - { - //delete pData[I]; - (pData + I)->~T(); - } - nElemNum = 0; - SetAllocNum(0); -} - -template -__forceinline const T& TMyArray::operator[](int nIndex) const -{ - _ASSERT(nIndex >= 0 && nIndex < nElemNum); - return pData[nIndex]; -} - -template -__forceinline T& TMyArray::operator[](int nIndex) -{ - _ASSERT(nIndex >= 0 && nIndex < nElemNum); - return pData[nIndex]; -} - -template -__forceinline TMyArray& TMyArray::operator = (const TMyArray &A) -{ - RemoveAll(); - int I; - for (I = 0; I < A.GetSize(); I++) - { - AddElem(A[I]); - } - return *this; -} - -template -__forceinline TMyArray& TMyArray::operator += (const TMyArray &A) -{ - int I; - for (I = 0; I < A.GetSize(); I++) - { - AddElem(A[I]); - } - return *this; -} - -typedef TMyArray CHARARRAY; diff --git a/plugins/ClientChangeNotify/src/CommonLibs/pcre.cpp b/plugins/ClientChangeNotify/src/CommonLibs/pcre.cpp deleted file mode 100644 index 5fbc1d1f50..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/pcre.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - Pcre.cpp - Copyright (c) 2007-2008 Chervov Dmitry - - 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 "../stdafx.h" -#include -#include -#include -#include "newpluginapi.h" -#include "m_utils.h" -#include "TMyArray.h" -#include "CString.h" -#include "pcre.h" - -typedef struct -{ - pcre16 *pPcre; - pcre16_extra *pExtra; - TCString Pattern; // used when it's not a valid regexp - int ID; // user-defined ID of the pattern; returned by PcreCheck on a match -} sPcreCompileData; - -TMyArray PcreCompileData; - - -void FreePcreCompileData() -{ - int I; - for (I = 0; I < PcreCompileData.GetSize(); I++) - { - if (PcreCompileData[I].pPcre) - { - pcre16_free(PcreCompileData[I].pPcre); - if (PcreCompileData[I].pExtra) - { - pcre16_free(PcreCompileData[I].pExtra); - } - } - } - PcreCompileData.RemoveAll(); -} - - -TCString CompileRegexp(TCString Regexp, int bAddAsUsualSubstring, int ID) -{ - TCString Result(_T("")); - sPcreCompileData s = {0}; - int NewID = PcreCompileData.AddElem(s); - PcreCompileData[NewID].ID = ID; - if (!bAddAsUsualSubstring) - { - const char *Err; - int ErrOffs; - int Flags = PCRE_CASELESS; - if (Regexp[0] == '/') - { - TCString OrigRegexp = Regexp; - Regexp = Regexp.Right(Regexp.GetLen() - 1); - TCHAR *pRegexpEnd = (TCHAR*)Regexp + Regexp.GetLen(); - TCHAR *p = _tcsrchr(Regexp.GetBuffer(), '/'); - if (!p) - { - Regexp = OrigRegexp; - } else - { - *p = 0; - Flags = 0; - while (++p < pRegexpEnd) - { - switch (*p) { - case 'i': - Flags |= PCRE_CASELESS; - break; - case 'm': - Flags |= PCRE_MULTILINE; - break; - case 's': - Flags |= PCRE_DOTALL; - break; - case 'x': - Flags |= PCRE_EXTENDED; - break; - case 'A': - Flags |= PCRE_ANCHORED; - break; - case 'f': - Flags |= PCRE_FIRSTLINE; - break; - case 'D': - Flags |= PCRE_DOLLAR_ENDONLY; - break; - case 'U': - Flags |= PCRE_UNGREEDY; - break; - case 'X': - Flags |= PCRE_EXTRA; - break; - default: - // Result += LogMessage(Translate("Warning, unknown pattern modifier '%c':\n"), *p ); - break; - } - } - } - Regexp.ReleaseBuffer(); - } - - PcreCompileData[NewID].pPcre = pcre16_compile(Regexp, PCRE_UTF8 | PCRE_NO_UTF8_CHECK | Flags, &Err, &ErrOffs, NULL); - - if (PcreCompileData[NewID].pPcre) { - PcreCompileData[NewID].pExtra = NULL; - PcreCompileData[NewID].pExtra = pcre16_study(PcreCompileData[NewID].pPcre, 0, &Err); - } - else { - // Result += LogMessage(TranslateT("Syntax error in regexp\n%s\nat offset %d: %s."), (TCHAR*)Regexp, ErrOffs, (TCHAR*)ANSI2TCHAR(Err)) + _T("\n\n"); - PcreCompileData[NewID].Pattern = Regexp; - } - } - else PcreCompileData[NewID].Pattern = Regexp; - - return Result; -} - -int PcreCheck(TCString Str, int StartingID) -{ // StartingID specifies the pattern from which to start checking, i.e. the check starts from the next pattern after the one that has ID == StartingID - int I; - if (StartingID == -1) - { - I = 0; - } else - { - for (I = 0; I < PcreCompileData.GetSize(); I++) - { - if (PcreCompileData[I].ID == StartingID) - { - I++; - break; - } - } - } - for (; I < PcreCompileData.GetSize(); I++) - { - if (PcreCompileData[I].pPcre) - { - - int Res = pcre16_exec(PcreCompileData[I].pPcre, PcreCompileData[I].pExtra, Str, Str.GetLen() - 1, 0, PCRE_NOTEMPTY | PCRE_NO_UTF8_CHECK, NULL, 0); - - if (Res >= 0) - { - return PcreCompileData[I].ID; - } - } else - { - if (_tcsstr(Str.ToLower(), PcreCompileData[I].Pattern.ToLower())) - { - return PcreCompileData[I].ID; - } - } - } - return -1; -} diff --git a/plugins/ClientChangeNotify/src/CommonLibs/pcre.h b/plugins/ClientChangeNotify/src/CommonLibs/pcre.h deleted file mode 100644 index d6e80a4194..0000000000 --- a/plugins/ClientChangeNotify/src/CommonLibs/pcre.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - Pcre.h - Copyright (c) 2007-2008 Chervov Dmitry - - 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 "CString.h" -#include "..\..\..\..\libs\pcre16\src\pcre.h" - -#pragma once - -int PcreCheck(TCString Str, int StartingID = -1); -void FreePcreCompileData(); -TCString CompileRegexp(TCString Regexp, int bAddAsUsualSubstring = 0, int ID = 0); -- cgit v1.2.3