From 9984e12867718ad6b6c4973cf30e5b00d4005d14 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 20 Jul 2012 07:36:46 +0000 Subject: HistoryLinkListPlus: changed folder structure git-svn-id: http://svn.miranda-ng.org/main/trunk@1065 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/HistoryLinkListPlus/linklist_fct.cpp | 1360 -------------------------- 1 file changed, 1360 deletions(-) delete mode 100644 plugins/HistoryLinkListPlus/linklist_fct.cpp (limited to 'plugins/HistoryLinkListPlus/linklist_fct.cpp') diff --git a/plugins/HistoryLinkListPlus/linklist_fct.cpp b/plugins/HistoryLinkListPlus/linklist_fct.cpp deleted file mode 100644 index 4d73448865..0000000000 --- a/plugins/HistoryLinkListPlus/linklist_fct.cpp +++ /dev/null @@ -1,1360 +0,0 @@ -// History Linklist Plus -// Copyright (C) 2010 Thomas Wendel, gureedo -// -// 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -#include -#include "resource.h" -#ifdef _DEBUG -#include -#endif - -// Miranda SDK Includes -#pragma warning(disable:4996) -#pragma warning(disable:4100) -#include -#include -#include -#include -#include -#pragma warning(default:4100) -#pragma warning(default:4996) - -#include "linklist.h" -#include "linklist_fct.h" -#include "language.h" -#include "utils.h" - - -extern HINSTANCE hInst; -extern HANDLE hWindowList; - -/* -The hyperlink detection in this function is taken from the -Miranda core. It looks a bit sophisticated. I'd made a few -changes but I didn't really understand what these guys did! -Great job! It works! ;-) -*/ -int ExtractURI(DBEVENTINFO *dbei, HANDLE hEvent, LISTELEMENT *listStart) -{ - int wordStart,i,iLastAlphaNum, linkFound=0; - int charCount=0,cpLastAlphaNum=0,cpWordStart; - LPCTSTR msg; - LPTSTR word, wordsearch, date_ptr, time_ptr; - static LPCTSTR hyperlinkPrefixes[] = { - _T("http://"),_T("ftp://"),_T("https://"),_T("mailto:"),_T("www."),_T("ftp."), - _T("icq#"),_T("gopher://"),_T("news://"),_T("file://"),_T("\\\\") - }; - static LPCTSTR hyperlinkSubstrings[] = { - _T(".com/"),_T(".net/"),_T(".org/"),_T(".co.uk"),_T(".ru") - }; - DBTIMETOSTRINGT dbtimestring; - LISTELEMENT *newElement, *actualElement; - TCHAR templink[LINK_MAX+1]; - TCHAR dbdate[DATE_SIZE + TIME_SIZE]; - BYTE type = LINK_UNKNOWN; - int direction; - TCHAR date[DATE_SIZE+1]; - TCHAR time[TIME_SIZE+1]; - TCHAR link[LINK_MAX+1]; - - if ( listStart == NULL ) - return -1; - - ZeroMemory(link, _countof(link)*sizeof(TCHAR)); - ZeroMemory(date, _countof(date)*sizeof(TCHAR)); - ZeroMemory(time, _countof(time)*sizeof(TCHAR)); - - msg = DbGetEventTextT(dbei, CP_ACP); - for ( i=0; msg[i]; ) - { - //hyperlinks are delimited by: "hyperlink" - //then all punctuation is stripped from the end of "hyperlink" - iLastAlphaNum = 0; - while ( msg[i] && !_istalnum(msg[i])) - { - // support for files - if ( (msg[i]==_T('\\')) && (msg[i+1]==_T('\\')) && (_istalnum(msg[i+2]))) - { - break; - } - - if(IsDBCSLeadByte(msg[i]) && msg[i+1]) i++; - - i++; - if ( msg[i] != _T('\n')) charCount++; - } - if ( msg[i] == _T('\0')) break; - - cpWordStart = charCount; - wordStart = i; - - while ( msg[i] && !_istspace(msg[i])) - { - - if ( IsDBCSLeadByte(msg[i] ) && msg[i+1]) i++; - else - - if ( _istalnum(msg[i]) || msg[i]==_T('/')) - { - cpLastAlphaNum = charCount; - iLastAlphaNum = i; - } - charCount++; - i++; - } - - charCount = cpLastAlphaNum+1; - i = iLastAlphaNum+1; - - if ( i-wordStart >= 7 ) - { - int j, isLink = 0, wordlen; - - wordlen = i-wordStart+1; - word = (LPTSTR)malloc(wordlen*sizeof(TCHAR)); - wordsearch = (LPTSTR)malloc(wordlen*sizeof(TCHAR)); - - _tcsncpy_s(word, wordlen, msg+wordStart, wordlen-1); - _tcsncpy_s(wordsearch, wordlen, msg+wordStart, wordlen-1); - CharLower(wordsearch); - - for ( j=0; j<_countof(hyperlinkPrefixes); j++ ) - { - if ( !_tcsncmp(wordsearch, hyperlinkPrefixes[j], _tcslen(hyperlinkPrefixes[j]))) - { - isLink = 1; - break; - } - } - - if ( !isLink ) { - for ( j=0; j<_countof(hyperlinkSubstrings); j++ ) - { - if ( _tcsstr(wordsearch+1,hyperlinkSubstrings[j])) - { - isLink = 1; - break; - } - } - } - - if ( _tcschr(wordsearch,_T('@')) && _tcschr(wordsearch,_T('.')) && !_tcschr(wordsearch,_T(':')) && !_tcschr(wordsearch,_T('/'))) - { - isLink = 1; //e-mail addresses - type = LINK_MAIL; - } - else if ( isLink ) { - type = LINK_URL; - } - - if ( isLink && ( (i-wordStart+1) <= (int)(LINK_MAX - _mstrlen(_T("http://"))))) - { - LPTSTR tok_ctx; - - if ( (_tcsstr(wordsearch, _T("www.")) != NULL) && (_tcsstr(wordsearch, _T("http://")) == NULL)) - { - _tcsncpy_s(link, _countof(link), _T("http://"), _mstrlen(_T("http://"))); - // Link longer than defined max -> cut link to max - if ( (i-wordStart+1) > (int)(LINK_MAX-_mstrlen(_T("http://")))) - _tcsncpy_s(link + _mstrlen(_T("http://")), _countof(link), word, LINK_MAX - _mstrlen(_T("http://"))); - else - _tcsncpy_s(link + _mstrlen(_T("http://")), _countof(link), word, i-wordStart+1); - } - else - { - size_t link_size; - if ( (i-wordStart+1) > LINK_MAX ) - link_size = LINK_MAX; - else - link_size = i-wordStart+1; - _tcsncpy_s(link, _countof(link), word, link_size); - } - - dbtimestring.szFormat = _T("d-t"); - dbtimestring.szDest = dbdate; - dbtimestring.cbDest = _countof(dbdate); - CallService(MS_DB_TIME_TIMESTAMPTOSTRINGT,(WPARAM)dbei->timestamp, (LPARAM)&dbtimestring); - date_ptr = _tcstok_s(dbdate, _T("-"), &tok_ctx); - time_ptr = _tcstok_s(NULL, _T("-"), &tok_ctx); - _tcsncpy_s(date, _countof(date), date_ptr, DATE_SIZE); - _tcsncpy_s(time, _countof(time), time_ptr, TIME_SIZE); - // Prevent overflow - date[DATE_SIZE] = _T('\0'); - time[TIME_SIZE] = _T('\0'); - - if ( dbei->flags & DBEF_SENT ) { - direction = DIRECTION_OUT; - } else { - direction = DIRECTION_IN; - } - - if ( type == LINK_MAIL && _tcsstr(link, _T("mailto:")) == NULL ) - { - _tcscpy_s(templink, _countof(templink), link); - _tcscpy_s(link, _countof(link), _T("mailto:")); - _tcsncpy_s(link + _mstrlen(_T("mailto:")), _countof(link), templink, LINK_MAX-_mstrlen(_T("mailto:"))); - } - - // Add new Element to list: - newElement = (LISTELEMENT*)malloc(sizeof(LISTELEMENT)); - if ( newElement == NULL ) - return -1; - - ZeroMemory(newElement, sizeof(LISTELEMENT)); - newElement->direction = direction; - newElement->type = type; - _tcscpy_s(newElement->date, _countof(newElement->date), date); - _tcscpy_s(newElement->time, _countof(newElement->time), time); - _tcscpy_s(newElement->link, _countof(newElement->link), link); - newElement->hEvent = hEvent; - - actualElement = listStart; - while ( actualElement->nextElement != NULL ) - { - actualElement = actualElement->nextElement; - } - - actualElement->nextElement = newElement; - linkFound++; - } - free(word); - free(wordsearch); - } - } - - mir_free((void*)msg); - - return linkFound; -} - - -/* -Remove the linked list an free memory -*/ -int RemoveList(LISTELEMENT *listStart) -{ - LISTELEMENT *actualElement, *tempElement; - - if ( listStart == NULL ) - return -1; - - actualElement = listStart->nextElement; - while ( actualElement != NULL ) - { - tempElement = actualElement->nextElement; - free(actualElement); - actualElement = tempElement; - } - free(listStart); - return 0; -} - - -/* -Count the elements of the list -*/ -int ListCount(LISTELEMENT *listStart) -{ - LISTELEMENT *actualElement; - int count = 0; - - if ( listStart == NULL ) - return -1; - - actualElement = listStart->nextElement; - while ( actualElement != NULL ) - { - count++; - actualElement = actualElement->nextElement; - } - return count; -} - - -/* -Fill the richedit field with informations ;-) - -Special thanks to MatriX for his help with the cursor postion! -*/ -void WriteLinkList(HWND hDlg, BYTE params, LISTELEMENT *listStart, LPCTSTR searchString, int append) -{ - CHARFORMAT2 cf; - PARAFORMAT2 pf; - HWND hwndProgress = NULL; - RECT DesktopRect; - MYCOLOURSET colourSet; - TCHAR textLine[LINK_MAX + DIR_SIZE + TIME_SIZE + TYPE_SIZE + 6]; - TCHAR searchText[320]; - TCHAR lastDate[11] = {0}; - TCHAR filter1, filter2, filter3; - size_t lineLen, listCount=0, realListCount=0, actCount=0, len, appCount = 0; - int linePos = -1; - LISTELEMENT *actualElement; - LISTOPTIONS options; - CHARRANGE sel; - GETTEXTLENGTHEX gtl; - DBEVENTINFO dbe; - - GetListInfo(params, listStart, searchString, &lineLen, &listCount, &realListCount); - GetColour(&colourSet); - GetListOptions(&options); - - if ( append == 0 ) - ShowWindow(GetDlgItem(hDlg, IDC_MAIN), SW_HIDE); - - if ( (append > 0) && (GetMenuState(GetMenu(hDlg), IDM_SEARCH, MF_BYCOMMAND) & MF_DISABLED)) - return; - - if ( GetDlgItem(hDlg, IDC_MAIN) && GetDlgItem(hDlg, IDC_MESSAGE)) - { - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETEVENTMASK, 0, (LPARAM)(ENM_LINK)); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_AUTOURLDETECT, TRUE, 0 ); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETBKGNDCOLOR, FALSE, colourSet.background); - - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_COLOR; - cf.crTextColor = colourSet.text; - SendDlgItemMessage( hDlg, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION|SCF_WORD, (LPARAM)&cf); - SendDlgItemMessage( hDlg, IDC_MESSAGE, EM_AUTOURLDETECT, TRUE, 0 ); - SendDlgItemMessage( hDlg, IDC_MESSAGE, EM_SETBKGNDCOLOR, FALSE, colourSet.background); - - if ( append == 0 ) - { - ClearLinePos(listStart); - - // How to set RTF colour, font, etc.... found at - // http://www.winehq.com/hypermail/wine-devel/2004/08/0608.html - ZeroMemory(&pf, sizeof(pf)); - pf.cbSize = sizeof(pf); - pf.dwMask = PFM_ALIGNMENT; - pf.wAlignment = PFA_LEFT; - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETPARAFORMAT, FALSE, (LPARAM) &pf); - - if ( searchString != NULL ) - { - ZeroMemory( &cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_ITALIC | CFM_BOLD | CFM_FACE | CFM_COLOR; - cf.dwEffects = CFE_BOLD; - cf.crTextColor = colourSet.text; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Arial")); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - - ZeroMemory(searchText, _countof(searchText)*sizeof(TCHAR)); - mir_sntprintf(searchText, _countof(searchText), _T("%s '%s': %d\n\n"), TranslateT("Matches for searchtext"), searchString, listCount); - SendDlgItemMessage(hDlg, IDC_MAIN, EM_REPLACESEL, FALSE, (LPARAM)searchText); - linePos += 2; - } - - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_FACE | CFM_BOLD; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Courier")); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf); - } - - actualElement = listStart->nextElement; - - if ( append > 0 ) - { - linePos = GetLastLinePos(listStart); - - if ((realListCount - append) == 1) - _tcscpy_s(lastDate, _countof(lastDate), actualElement->date); - - for(appCount = 1; appCount <= (realListCount - append); appCount++) - { - actualElement = actualElement->nextElement; - if(appCount == (realListCount - append - 1)) - _tcscpy_s(lastDate, _countof(lastDate), actualElement->date); - } - gtl.flags = GTL_PRECISE; - gtl.codepage = CP_ACP; - sel.cpMin = sel.cpMax = SendMessage(GetDlgItem(hDlg, IDC_MAIN), EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - SendMessage(GetDlgItem(hDlg, IDC_MAIN), EM_EXSETSEL, 0, (LPARAM) &sel); - } - - if ( append == 0 ) - { - // Create Progressbar - GetWindowRect(GetDesktopWindow(), &DesktopRect); - hwndProgress = CreateWindow(_T("Progressbar"), TranslateT("Processing list..."), WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, 350, 45, NULL, NULL, hInst, NULL); - SetWindowPos(hwndProgress,HWND_TOP,(int)(DesktopRect.right*0.5)-175,(int)(DesktopRect.bottom*0.5)-22,0,0,SWP_NOSIZE); - - if ( hwndProgress != NULL ) - { - ShowWindow(hwndProgress, SW_SHOW); - SetForegroundWindow(hwndProgress); - } - } - - while ( actualElement != NULL ) - { - filter1 = 0; - filter2 = 0; - filter3 = 0; - - if ( (params & WLL_IN) && (actualElement->direction == DIRECTION_IN)) - filter1 = 1; - else if ( (params & WLL_OUT) && (actualElement->direction == DIRECTION_OUT)) - filter1 = 1; - - if ( (params & WLL_MAIL) && (actualElement->type == LINK_MAIL)) - filter2 = 1; - else if ( (params & WLL_URL) && (actualElement->type == LINK_URL)) - filter2 = 1; - else if ( (params & WLL_FILE) && (actualElement->type == LINK_FILE)) - filter2 = 1; - - - if ( searchString != NULL ) - { - if ( params & SLL_DEEP ) - { - // Perform deep scan - if ( actualElement->hEvent != NULL ) - { - LPCTSTR msg; - dbe.cbSize = sizeof(dbe); - dbe.cbBlob = (int)CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)actualElement->hEvent, 0); - dbe.pBlob = (PBYTE)malloc(dbe.cbBlob+1); - CallService(MS_DB_EVENT_GET, (WPARAM)actualElement->hEvent, (LPARAM)&dbe); - dbe.pBlob[dbe.cbBlob] = 0; - msg = DbGetEventTextT(&dbe, CP_ACP); - if ( _tcsstr(msg, searchString)) - filter3 = 1; - - free(dbe.pBlob); - mir_free((void*)msg); - } - else - filter3 = 0; - } - else - { - if ( _tcsstr(actualElement->link, searchString)) - filter3 = 1; - } - } - else - filter3 = 1; - - if ( (filter1 == 1) && (filter2 == 1) && (filter3 == 1)) - { - LPCTSTR type; - - if ( _tcscmp(actualElement->date, lastDate) != 0 ) - { - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_COLOR; - cf.crTextColor = colourSet.text; - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf); - if ( options.showLine != 0 ) - DrawLine(hDlg, lineLen); - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_ITALIC | CFM_BOLD | CFM_FACE; - cf.dwEffects = CFE_BOLD; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Arial")); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - if ( options.showDate != 0 ) - { - SendDlgItemMessage( hDlg, IDC_MAIN, EM_REPLACESEL, FALSE, (LPARAM) actualElement->date); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_REPLACESEL, FALSE, (LPARAM) _T("\n\n")); - linePos += 3; - } - _tcscpy_s(lastDate, _countof(lastDate), actualElement->date); - ZeroMemory( &cf, sizeof(cf)); - cf.cbSize = sizeof cf; - cf.dwMask = CFM_ITALIC | CFM_BOLD | CFM_UNDERLINE | CFM_FACE; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Courier")); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - } - ZeroMemory( &cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_COLOR; - - if ( actualElement->direction == DIRECTION_OUT ) - { - cf.crTextColor = colourSet.incoming; - } - else - cf.crTextColor = colourSet.outgoing; - - switch( actualElement->type ) { - case LINK_MAIL: - type = _T("[mail]"); - break; - case LINK_URL: - type = _T("[URL ]"); - break; - case LINK_FILE: - type = _T("[file]"); - break; - default: - type = _T("[UNK ]"); - } - - mir_sntprintf(textLine, _countof(textLine), _T("%s%s%s%s%s%s%s\n"), - options.showDirection ? (actualElement->direction==DIRECTION_IN?_T("[in ]"):_T("[out]")) : _T(""), - options.showDirection? _T(" ") : _T(""), - options.showType ? type : _T(""), - options.showType ? _T(" ") : _T(""), - options.showTime ? actualElement->time : _T(""), - options.showTime ? _T(" ") : _T(""), - actualElement->link); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf); - SendDlgItemMessage(hDlg, IDC_MAIN, EM_REPLACESEL, FALSE,(LPARAM)textLine); - linePos++; - actualElement->linePos = linePos; - actCount++; - if ( hwndProgress && ( ((int)(((float)actCount/listCount)*100.00)) % 10 == 0 )) - SendMessage(hwndProgress, WM_COMMAND, 100,((int)(((float)actCount/listCount)*100.00))); - - } - actualElement = actualElement->nextElement; - } - if ( listCount > 0 ) - { - if ((actCount < listCount) && (append == 0) && (options.showLine != 0)) - DrawLine(hDlg, lineLen); - } - else if ( searchString == NULL ) - { - ZeroMemory( &cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_ITALIC | CFM_BOLD | CFM_FACE; - cf.dwEffects = CFE_BOLD; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Arial")); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_REPLACESEL, FALSE, (LPARAM)TranslateT("No messages found!\nPlease change current filter options.")); - SendDlgItemMessage( hDlg, IDC_MAIN, EM_REPLACESEL, FALSE, (LPARAM)_T("\n")); - } - - } - if ( append == 0 ) - { - SendMessage(hwndProgress, WM_CLOSE, 0, 0); - ShowWindow(GetDlgItem(hDlg, IDC_MAIN), SW_SHOW); - } - - PostMessage(GetDlgItem(hDlg, IDC_MAIN), WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0); - len = GetWindowTextLength(GetDlgItem(hDlg, IDC_MAIN)); - PostMessage(GetDlgItem(hDlg, IDC_MAIN), EM_SETSEL, len, len); -} - - -/* -Output some example text to the options dialog -*/ -int WriteOptionExample(HWND hDlg, DWORD InColourSel, DWORD OutColourSel, DWORD BGColourSel, DWORD TxtColourSel, LISTOPTIONS *options) -{ - CHARFORMAT cf; - PARAFORMAT pf; - - ZeroMemory(&pf, sizeof(pf)); - pf.cbSize = sizeof(pf); - pf.dwMask = PFM_ALIGNMENT; - pf.wAlignment = PFA_LEFT; - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_SETPARAFORMAT, FALSE, (LPARAM)&pf); - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_SETEVENTMASK, 0, (LPARAM)(ENM_LINK)); - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_AUTOURLDETECT, TRUE, 0); - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_SETBKGNDCOLOR, FALSE, BGColourSel); - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, WM_SETTEXT , 0, (LPARAM)NULL); - - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_FACE | CFM_BOLD | CFM_ITALIC | CFM_COLOR; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Courier")); - cf.crTextColor = TxtColourSel; - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - if ( options->showLine == 1 ) - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("___________________________________________\n")); - else - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("\n")); - - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_BOLD | CFM_FACE | CFM_COLOR; - cf.dwEffects = CFE_BOLD; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Arial")); - cf.crTextColor = TxtColourSel; - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - - if(options->showDate == 1) - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)TranslateT(TXT_DATE)); - - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM) _T("\n")); - - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_ITALIC | CFM_BOLD | CFM_UNDERLINE | CFM_FACE; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Courier")); - SendDlgItemMessage( hDlg, IDC_OPTIONS_RE, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM) &cf); - - // incoming - ZeroMemory(&cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_COLOR | CFM_FACE; - cf.crTextColor = InColourSel; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Courier")); - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf ); - - if ( options->showDirection == 1 ) - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("\n[in ] ")); - else - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("\n")); - - if ( options->showType == 1 ) - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("URL ")); - else - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("")); - - if ( options->showTime == 1 ) - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("08:15 http://www.miranda-im.org\n")); - else - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("http://www.miranda-im.org\n")); - - // outgoing - ZeroMemory( &cf, sizeof(cf)); - cf.cbSize = sizeof(cf); - cf.dwMask = CFM_COLOR | CFM_FACE; - cf.crTextColor = OutColourSel; - _tcscpy_s(cf.szFaceName, _countof(cf.szFaceName), _T("Courier")); - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf); - - - if ( options->showDirection == 1 ) - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("[out] ")); - else - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("")); - - if(options->showType == 1) - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("URL ")); - else - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("")); - - if(options->showTime == 1) - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("08:16 http://www.miranda-im.org\n")); - else - SendDlgItemMessage(hDlg, IDC_OPTIONS_RE, EM_REPLACESEL, FALSE, (LPARAM)_T("http://www.miranda-im.org\n")); - - return 0; -} - - -/* -Write Message to window -*/ -void WriteMessage(HWND hDlg, LISTELEMENT *listStart, int actLinePos) -{ - LISTELEMENT *actualElement; - HANDLE hEvent; - DBEVENTINFO dbe; - - actualElement = listStart->nextElement; - while ( actualElement != NULL ) - { - if ( actualElement->linePos == actLinePos ) - { - hEvent = actualElement->hEvent; - if (hEvent != NULL ) - { - LPCTSTR msg; - dbe.cbSize = sizeof(dbe); - dbe.cbBlob = (int)CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hEvent, 0); - dbe.pBlob = (PBYTE)malloc(dbe.cbBlob+1); - CallService(MS_DB_EVENT_GET,(WPARAM)hEvent,(LPARAM)&dbe); - dbe.pBlob[dbe.cbBlob] = 0; - msg = DbGetEventTextT(&dbe, CP_ACP); - SendDlgItemMessage(hDlg, IDC_MESSAGE, WM_SETTEXT , 0, (LPARAM)NULL); - SendDlgItemMessage(hDlg, IDC_MESSAGE, EM_REPLACESEL, FALSE, (LPARAM)msg); - mir_free((void*)msg); - free(dbe.pBlob); - } - break; - } - actualElement = actualElement->nextElement; - } -} - -/* -Little helper functions to get the actual state of -user options. -*/ -BYTE GetFlags(HMENU listMenu) -{ - BYTE returnflags = 0x00; - - if ( GetMenuState(listMenu, IDM_TYPE_WEB, MF_BYCOMMAND) == MF_UNCHECKED ) - returnflags = returnflags | WLL_MAIL; - - if ( GetMenuState(listMenu, IDM_TYPE_MAIL, MF_BYCOMMAND) == MF_UNCHECKED ) - returnflags = returnflags | WLL_URL; - - if ( GetMenuState(listMenu, IDM_DIR_IN, MF_BYCOMMAND) == MF_UNCHECKED ) - returnflags = returnflags | WLL_OUT; - - if ( GetMenuState(listMenu, IDM_DIR_OUT, MF_BYCOMMAND) == MF_UNCHECKED ) - returnflags = returnflags | WLL_IN; - - return returnflags; -} - -void GetFilterText(HMENU listMenu, LPTSTR filter, size_t max_len) -{ - - if ( GetMenuState(listMenu, IDM_TYPE_WEB, MF_BYCOMMAND) == MF_CHECKED ) - { - if ( GetMenuState(listMenu, IDM_DIR_IN, MF_BYCOMMAND) == MF_CHECKED ) - { - //incoming URLs - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_INCOMING), TranslateT(TXT_URLSONLY)); - } - else if ( GetMenuState(listMenu, IDM_DIR_OUT, MF_BYCOMMAND) == MF_CHECKED ) - { - //outgoing URLs - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_OUTGOING), TranslateT(TXT_URLSONLY)); - } - else - { - // both directions (URL) - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), "", TranslateT(TXT_URLSONLY)); - } - } - else if ( GetMenuState(listMenu, IDM_TYPE_MAIL, MF_BYCOMMAND) == MF_CHECKED ) - { - if ( GetMenuState(listMenu, IDM_DIR_IN, MF_BYCOMMAND) == MF_CHECKED ) - { - //incoming mail - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_INCOMING), TranslateT(TXT_MAILSONLY)); - } - else if ( GetMenuState(listMenu, IDM_DIR_OUT, MF_BYCOMMAND) == MF_CHECKED ) - { - //outgoing mail - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_OUTGOING), TranslateT(TXT_MAILSONLY)); - } - else - { - // both directions (mail) - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), "", TranslateT(TXT_MAILSONLY)); - } - } - else - { - if ( GetMenuState(listMenu, IDM_DIR_IN, MF_BYCOMMAND) == MF_CHECKED ) - { - //incoming (both) - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_INCOMING), ""); - } - else if ( GetMenuState(listMenu, IDM_DIR_OUT, MF_BYCOMMAND) == MF_CHECKED ) - { - //outgoing (both) - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_OUTGOING), ""); - } - else - { - // no filter - mir_sntprintf(filter, max_len, _T("%s: %s %s"), TranslateT(TXT_FILTER), TranslateT(TXT_NOFILTER), ""); - } - } -} - - -/* -Little helper function to draw a horizontal line -*/ -void DrawLine(HWND hDlg, size_t lineLen) -{ - TCHAR line[LINK_MAX + 18]; - size_t i; - for (i=0; (inextElement; - - while ( actualElement != NULL ) - { - (*realElementCount)++; - - filter1 = 0; - filter2 = 0; - filter3 = 0; - - if ( (params & WLL_IN) && (actualElement->direction == DIRECTION_IN)) - filter1 = 1; - else if ( (params & WLL_OUT) && (actualElement->direction == DIRECTION_OUT)) - filter1 = 1; - - if ( (params & WLL_MAIL) && (actualElement->type == LINK_MAIL)) - filter2 = 1; - else if ( (params & WLL_URL) && (actualElement->type == LINK_URL)) - filter2 = 1; - - if ( searchString != NULL ) - { - if ( params & SLL_DEEP ) - { - // Perform deep scan - if ( actualElement->hEvent != NULL ) - { - dbe.cbSize = sizeof(dbe); - dbe.pBlob = NULL; - dbe.cbBlob = (int)CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)actualElement->hEvent, 0); - dbe.pBlob = (PBYTE)malloc(dbe.cbBlob+1); - CallService(MS_DB_EVENT_GET, (WPARAM)actualElement->hEvent, (LPARAM)&dbe); - dbe.pBlob[dbe.cbBlob] = 0; - if ( _tcsstr((LPTSTR)dbe.pBlob, searchString)) - filter3 = 1; - - free(dbe.pBlob); - } - else - filter3 = 0; - } - else - { - if(_tcsstr(actualElement->link, searchString)) - filter3 = 1; - } - } - else - filter3 = 1; - - if ((filter1 == 1) && (filter2 == 1) && (filter3 == 1)) - { - (*elementCount)++; - - tempLen = _tcslen(actualElement->link); - if (*maxLen < tempLen) - *maxLen = tempLen; - } - actualElement = actualElement->nextElement; - } - return; -} - - - -void GetListOptions(LISTOPTIONS *options) -{ - - options->openNewWindow = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_OPEN_WINDOW, 0xFF); - if(options->openNewWindow == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_OPEN_WINDOW, 0x00); - options->openNewWindow = 0x00; - } - - - options->updateWindow = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_UPDATE_WINDOW, 0xFF); - if(options->updateWindow == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_UPDATE_WINDOW, 0x00); - options->updateWindow = 0x00; - } - - options->mouseEvent = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_MOUSE_EVENT, 0xFF); - if(options->mouseEvent == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_MOUSE_EVENT, 0x00); - options->mouseEvent = 0x00; - } - - options->saveSpecial = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SAVESPECIAL, 0xFF); - if(options->saveSpecial == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SAVESPECIAL, 0x00); - options->saveSpecial = 0x00; - } - - - options->showDate = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_DATE, 0xFF); - if(options->showDate == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_DATE, 0x01); - options->showDate = 0x01; - } - - options->showLine = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_LINE, 0xFF); - if(options->showLine == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_LINE, 0x01); - options->showLine = 0x01; - } - - options->showTime = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_TIME, 0xFF); - if(options->showTime == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_TIME, 0x01); - options->showTime = 0x01; - } - - options->showDirection = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_DIRECTION, 0xFF); - if(options->showDirection == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_DIRECTION, 0x01); - options->showDirection = 0x01; - } - - options->showType = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_TYPE, 0xFF); - if(options->showType == 0xFF) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_TYPE, 0x01); - options->showType = 0x01; - } - - return; -} - -void SetListOptions(LISTOPTIONS *options) -{ - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_OPEN_WINDOW, options->openNewWindow); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_UPDATE_WINDOW, options->updateWindow); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_MOUSE_EVENT, options->mouseEvent); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SAVESPECIAL, options->saveSpecial); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_DATE, options->showDate); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_LINE, options->showLine); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_TIME, options->showTime); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_DIRECTION, options->showDirection); - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_SHOW_TYPE, options->showType); -} - -/* -Clear temporary stored Linenumbers in List -*/ -void ClearLinePos(LISTELEMENT *listStart) -{ - LISTELEMENT *actualElement; - - if ( listStart == NULL ) - return; - - actualElement = listStart->nextElement; - while ( actualElement != NULL ) - { - actualElement->linePos = -1; - actualElement = actualElement->nextElement; - } -} - -int GetLastLinePos(LISTELEMENT *listStart) -{ - LISTELEMENT *actualElement; - int maxPos = -1; - - if ( listStart == NULL ) - return -1; - - actualElement = listStart->nextElement; - while ( actualElement != NULL ) - { - if ( actualElement->linePos > maxPos ) - maxPos = actualElement->linePos; - - actualElement = actualElement->nextElement; - } - return maxPos; -} - -/* -Read current coloursettings from the database -*/ -void GetColour(MYCOLOURSET *colourSet) -{ - DWORD colour; - BYTE useDefault; - - useDefault = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_USE_DEF, 0xFF); - if ( useDefault == 0xFF ) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_USE_DEF, 0x01); - useDefault = 0x01; - } - - if ( useDefault == 0x01 ) - { - // Use Miranda-IM Default colours - // CHANGED AT MIRANDA 0.4!!!! - // Use SRMM... if it is not there try SRMsg (older Miranda Versions) - colour = DBGetContactSettingDword(NULL, "SRMM", "SRMFont1Col", 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->incoming = colour; - else - { - colour = DBGetContactSettingDword(NULL, "SRMsg", "Font3Col", 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->incoming = colour; - else - { - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_USE_DEF, 0x00); - useDefault = 0x00; - } - } - - // SRMM - colour = DBGetContactSettingDword(NULL, "SRMM", "SRMFont0Col", 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->outgoing = colour; - else - { - // SRMsg - colour = DBGetContactSettingDword(NULL, "SRMsg", "Font0Col", 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->outgoing = colour; - else - { - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_USE_DEF, 0x00); - useDefault = 0x00; - } - } - - // SRMM - colour = DBGetContactSettingDword(NULL, "SRMM", "BkgColour", 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->background = colour; - else - { - // SRMsg - colour = DBGetContactSettingDword(NULL, "SRMsg", "BkgColour", 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->background = colour; - else - { - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_USE_DEF, 0x00); - useDefault = 0x00; - } - } - colourSet->text = MAKE_TXT_COL(colourSet->background); - } - - if ( useDefault == 0x00 ) - { - // Use Plugin user defined or default colours - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_IN_COL, 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->incoming = colour; - else - colourSet->incoming = IN_COL_DEF; - - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_OUT_COL, 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->outgoing = colour; - else - colourSet->outgoing = OUT_COL_DEF; - - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_BG_COL, 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->background = colour; - else - colourSet->background = BG_COL_DEF; - - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_TXT_COL, 0xFF000000); - if ( colour != 0xFF000000 ) - colourSet->text = colour; - else - colourSet->text = TXT_COL_DEF; - } -} - -/* -Read current coloursettings from the database and set default values -if entry does not exist. -*/ -void GetDBColour(MYCOLOURSET *colourSet) -{ - DWORD colour; - - // Use Plugin user defined or default colours - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_IN_COL, 0xFF000000); - if(colour != 0xFF000000) - colourSet->incoming = colour; - else - { - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_IN_COL, IN_COL_DEF); - colourSet->incoming = IN_COL_DEF; - } - - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_OUT_COL, 0xFF000000); - if(colour != 0xFF000000) - colourSet->outgoing = colour; - else - { - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_OUT_COL, OUT_COL_DEF); - colourSet->outgoing = OUT_COL_DEF; - } - - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_BG_COL, 0xFF000000); - if(colour != 0xFF000000) - colourSet->background = colour; - else - { - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_BG_COL, BG_COL_DEF); - colourSet->background = BG_COL_DEF; - } - - colour = DBGetContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_TXT_COL, 0xFF000000); - if(colour != 0xFF000000) - colourSet->text = colour; - else - { - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_TXT_COL, TXT_COL_DEF); - colourSet->text = TXT_COL_DEF; - } -} - -/* -Read current coloursettings from the database (Miranda settings) -*/ -int GetMirandaColour(MYCOLOURSET *colourSet) -{ - DWORD colour; - - // Use Miranda-IM Default colours - // Try SRMM (Miranda 0.4) .... or SRMsg... for older versions - colour = DBGetContactSettingDword(NULL, "SRMM", "SRMFont1Col", 0xFF000000); - if(colour != 0xFF000000) - colourSet->incoming = colour; - else - { - colour = DBGetContactSettingDword(NULL, "SRMsg", "Font3Col", 0xFF000000); - if(colour != 0xFF000000) - colourSet->incoming = colour; - else - return 1; - } - - - colour = DBGetContactSettingDword(NULL, "SRMM", "SRMFont0Col", 0xFF000000); - if(colour != 0xFF000000) - colourSet->outgoing = colour; - else - { - colour = DBGetContactSettingDword(NULL, "SRMsg", "Font0Col", 0xFF000000); - if(colour != 0xFF000000) - colourSet->outgoing = colour; - else - return 1; - } - - colour = DBGetContactSettingDword(NULL, "SRMM", "BkgColour", 0xFF000000); - if(colour != 0xFF000000) - colourSet->background = colour; - else - { - colour = DBGetContactSettingDword(NULL, "SRMsg", "BkgColour", 0xFF000000); - if(colour != 0xFF000000) - colourSet->background = colour; - else - return 1; - } - - colourSet->text = MAKE_TXT_COL(colourSet->background); - return 0; -} - - -/* -Write user defined colours to the database -*/ -void SetDBColour(MYCOLOURSET *colourSet) -{ - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_IN_COL, colourSet->incoming); - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_OUT_COL, colourSet->outgoing); - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_BG_COL, colourSet->background); - DBWriteContactSettingDword(NULL, LINKLIST_MODULE, LINKLIST_TXT_COL, colourSet->text); -} - -BYTE GetUpdateSetting(void) -{ - BYTE updateWindow; - - updateWindow = DBGetContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_UPDATE_WINDOW, 0xFF); - if ( updateWindow == 0xFF ) - { - // No DB entry for this Plugin - DBWriteContactSettingByte(NULL, LINKLIST_MODULE, LINKLIST_UPDATE_WINDOW, 0x00); - return 0; - } - if ( updateWindow == 0x00 ) - return 0; - else - return 1; -} - -/* -Special thanks to Tobi H.! -This function is derived from his Wordlookup Plugin -*/ -int DBUpdate(WPARAM wParam, LPARAM lParam) -{ - HANDLE hEvent=(HANDLE)lParam; - HWND hDlg = WindowList_Find(hWindowList, (HANDLE)wParam); - DBEVENTINFO dbe; - DIALOGPARAM *DlgParam; - HMENU listMenu = GetMenu(hDlg); - int linkNum = 0; - - DlgParam = (DIALOGPARAM *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - - if(GetUpdateSetting() != 1) - return 0; - - if(hDlg) - { - ZeroMemory(&dbe, sizeof(dbe)); - dbe.cbSize = sizeof(dbe); - - dbe.cbBlob = (int)CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hEvent, 0); - dbe.pBlob = (PBYTE)malloc((size_t)dbe.cbBlob+1); - CallService(MS_DB_EVENT_GET, (WPARAM)hEvent, (LPARAM)&dbe); - - if ( (dbe.eventType == EVENTTYPE_URL) || (dbe.eventType == EVENTTYPE_MESSAGE)) - { - // Call function to find URIs - linkNum = ExtractURI(&dbe, hEvent, DlgParam->listStart); - if ( linkNum > 0 ) - WriteLinkList(hDlg, GetFlags(listMenu), DlgParam->listStart, NULL, linkNum); - } - free(dbe.pBlob); - } - return 0; -} - - -/* -Little resize helper -*/ -int LinklistResizer(HWND hDlg, LPARAM lParam, UTILRESIZECONTROL *urc) -{ - DIALOGPARAM *DlgParam = (DIALOGPARAM*)lParam; - UNREFERENCED_PARAMETER(hDlg); - - switch(urc->wId) - { - case IDC_MAIN: - urc->rcItem.bottom -= DlgParam->splitterPosNew - DlgParam->splitterPosOld; - return RD_ANCHORX_WIDTH|RD_ANCHORY_HEIGHT; - - case IDC_MESSAGE: - urc->rcItem.top -= DlgParam->splitterPosNew - DlgParam->splitterPosOld; - return RD_ANCHORX_WIDTH|RD_ANCHORY_BOTTOM; - - case IDC_STATUS: - return RD_ANCHORX_WIDTH|RD_ANCHORY_BOTTOM; - - case IDC_SPLITTER: - urc->rcItem.top -= DlgParam->splitterPosNew - DlgParam->splitterPosOld; - urc->rcItem.bottom -= DlgParam->splitterPosNew - DlgParam->splitterPosOld; - return RD_ANCHORX_WIDTH|RD_ANCHORY_BOTTOM; - } - - return RD_ANCHORX_LEFT|RD_ANCHORY_TOP; -} - - -/* -Next both functions are taken from a example projekt, found at -http://www.programmersheaven.com/zone15/cat236/2405.htm -The author is unknown, but this peace of code made my work much easier! -*/ -BOOL SaveEditAsStream( HWND hDlg ) -{ - EDITSTREAM es; - LONG lOut; - OPENFILENAME ofn; - HANDLE hFile; - TCHAR szFilename[MAX_PATH]; - - // Initialize filename field - _tcscpy_s(szFilename, _countof(szFilename), _T("*.rtf")); - // Fill in OPENFILENAME struct - ZeroMemory(&ofn, sizeof(OPENFILENAME)); - ofn.lStructSize = sizeof(OPENFILENAME); - ofn.hwndOwner = hDlg; - ofn.lpstrFilter = _T("RTF File\0*.rtf\0All Files\0*.*\0\0"); - ofn.lpstrFile = szFilename; - ofn.nMaxFile = _countof(szFilename); - ofn.lpstrTitle = _T("Save RTF File"); - ofn.Flags = OFN_OVERWRITEPROMPT; - // Get a filename or quit - if ( ! GetSaveFileName( &ofn )) - return FALSE; - // Create the specified file - hFile = CreateFile( szFilename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); - // Quit if file creation fails - if ( hFile == INVALID_HANDLE_VALUE ) - return FALSE; - // Pass file handle to callback - // so the callback can do the file write - es.dwCookie = (DWORD_PTR)hFile; - es.dwError = 0; - es.pfnCallback = (EDITSTREAMCALLBACK)RTFSaveStreamCallback; - // Start the callback proc - lOut = SendDlgItemMessage( hDlg, IDC_MAIN, EM_STREAMOUT, SF_RTF, (LPARAM)&es ); - // Close file handle and exit - CloseHandle(hFile); - return TRUE; -} - -DWORD CALLBACK RTFSaveStreamCallback(DWORD_PTR dwCookie, LPBYTE lpBuffer, LONG lSize, LONG *plRead) -{ - // Sanity check...exit if nothing passed - if ( ! lSize ) - return 1; - // Initialize "amount read" variable for WriteFile() - *plRead = 0; - // dwCookie is the file handle - WriteFile( (HANDLE)dwCookie, lpBuffer, lSize, (LPDWORD)plRead, NULL ); - // Continue, if needed - return 0; -} - - -- cgit v1.2.3