From 9ea691dd251b5e29b51c78d713fb5f6360f524f6 Mon Sep 17 00:00:00 2001 From: Alexander Gluzsky Date: Sun, 29 Jul 2012 20:21:22 +0000 Subject: added msg_export plugin port git-svn-id: http://svn.miranda-ng.org/main/trunk@1249 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/msg_export/src/options.cpp | 1483 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1483 insertions(+) create mode 100755 plugins/msg_export/src/options.cpp (limited to 'plugins/msg_export/src/options.cpp') diff --git a/plugins/msg_export/src/options.cpp b/plugins/msg_export/src/options.cpp new file mode 100755 index 0000000000..17bc917bb7 --- /dev/null +++ b/plugins/msg_export/src/options.cpp @@ -0,0 +1,1483 @@ + +//This file is part of Msg_Export a Miranda IM plugin +//Copyright (C)2002 Kennet Nielsen ( http://sourceforge.net/projects/msg-export/ ) +// +//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., 675 Mass Ave, Cambridge, MA 02139, USA. + + +#include +#include +#include "Shlobj.h" + + +#include "Utils.h" +#include "Glob.h" +#include "FileViewer.h" + +#include "resource.h" + +#include +#include +//#include + +#define STRINGIZE(x) #x +#define EVAL_STRINGIZE(x) STRINGIZE(x) +#define __LOC__ __FILE__ "("EVAL_STRINGIZE(__LINE__)") : " + + +#pragma message ( __LOC__ "My warning: STD list contains a bug when sorting lists of more than 32,768 elements, you need to fix this") +/* Change code for VC 6.0 + if (_I == _MAXN) + _A[_I].merge(_X); + SHOULD BE + if (_I == _MAXN) + _A[_I - 1].merge(_X); + + - And - + + if (_I == _MAXN) + _A[_I].merge(_X, _Pr); + SHOULD BE + if (_I == _MAXN) + _A[_I - 1].merge(_X, _Pr); + +You need to change this in the file function sort() and sort(_Pr3 _Pr) +*/ + +using namespace std; + + +// width in pixels of the UIN column in the List Ctrl +const int nUINColWitdh = 80; +// width in pixels of the UIN column in the List Ctrl +const int nProtoColWitdh = 40; + + +// Used to controle the sending of the PSM_CHANGED to miranda +// and to se if the user has unapplyed changes when he presses the +// Export All button +BOOL bUnaplyedChanges = FALSE; + + +///////////////////////////////////////////////////////////////////// +// Class : CLDBEvent +// Superclass : +// Project : Mes_export +// Designer : Kennet Nielsen +// Version : 1.0.0 +// Date : 020422 , 22 April 2002 +// +// +// Description: This class is used to store one DB event dyring the export +// All history function +// +// Version History: +// Ver: Initials: Date: Text: +// 1.0.0 KN 020422 First edition +// +///////////////////////////////////////////////////////////////////// + +class CLDBEvent +{ + DWORD time; + public: + HANDLE hUser; + HANDLE hDbEvent; + + CLDBEvent( HANDLE hU , HANDLE hDBE ) + { + hUser = hU; + hDbEvent = hDBE; + + DBEVENTINFO dbei={0}; //dbei.cbBlob=0; + dbei.cbSize=sizeof(dbei); + CallService(MS_DB_EVENT_GET,(WPARAM)hDbEvent,(LPARAM)&dbei); + time = dbei.timestamp; + } + bool operator <(const CLDBEvent& rOther) const + { + return time < rOther.time; + } +}; + +///////////////////////////////////////////////////////////////////// +// Member Function : CompareFunc +// Type : Global +// Parameters : lParam1 - ? +// lParam2 - ? +// lParamSort - ? +// Returns : int CALLBACK +// Description : Used to sort list view by Nick +// +// References : - +// Remarks : - +// Created : 020422 , 22 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) +{ + if( lParamSort == 1 ) + { + return _tcsicmp( NickFromHandle((HANDLE)lParam1) , NickFromHandle((HANDLE)lParam2) ); + } + + if( lParamSort == 2 ) + { + return _DBGetString( (HANDLE)lParam1 , "Protocol" , "p" , _T("") ).compare( + _DBGetString( (HANDLE)lParam2 , "Protocol" , "p" , _T("") ) + ); + } + if( lParamSort == 3 ) + { + DWORD dwUin1 = DBGetContactSettingDword( + (HANDLE)lParam1, + _DBGetStringA( (HANDLE)lParam1 , "Protocol" , "p" , "" ).c_str(), + "UIN", + 0); + DWORD dwUin2 = DBGetContactSettingDword( + (HANDLE)lParam2, + _DBGetStringA( (HANDLE)lParam2 , "Protocol" , "p" , "" ).c_str(), + "UIN", + 0); + + if( dwUin1 == dwUin2 ) + return 0; + if( dwUin1 > dwUin2 ) + return -1; + return 1; + } + return 0; +} + + +///////////////////////////////////////////////////////////////////// +// Member Function : DialogProc +// Type : Global +// Parameters : hwndDlg - ? +// uMsg - ? +// wParam - ? +// parameter - ? +// Returns : INT_PTR CALLBACK +// Description : Progress bar window function +// +// References : - +// Remarks : - +// Created : 020422 , 22 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +INT_PTR CALLBACK __stdcall DialogProc( + HWND hwndDlg, // handle to dialog box + UINT uMsg, // message + WPARAM /*wParam*/, // first message parameter + LPARAM /*lParam*/ // second message parameter +) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + return TRUE; + } + } + return FALSE; +} + +///////////////////////////////////////////////////////////////////// +// Member Function : nExportCompleatList +// Type : Global +// Parameters : hParent - handle to the parrent, ( Options Dlg ) +// bOnlySelected - Only Export the userges that hase been selected in the list view +// Returns : int not used currently +// Description : +// +// References : - +// Remarks : - +// Created : 020422 , 22 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +int nExportCompleatList(HWND hParent , bool bOnlySelected ) +{ + HWND hMapUser = GetDlgItem( hParent , IDC_MAP_USER_LIST ); + + int nTotalContacts = ListView_GetItemCount( hMapUser ); + + int nContacts; + if( bOnlySelected ) + nContacts = ListView_GetSelectedCount( hMapUser ); + else + nContacts = nTotalContacts; + + if( !hMapUser || nContacts <= 0 ) + { + MessageBox( hParent , TranslateTS(_T("No contacts found to export")),MSG_BOX_TITEL,MB_OK ); + return 0; + } + + HWND hDlg = CreateDialog( hInstance, MAKEINTRESOURCE( IDD_EXPORT_ALL_DLG ) , hParent , DialogProc ); + HWND hProg = GetDlgItem( hDlg , IDC_EXPORT_PROGRESS ); + HWND hStatus = GetDlgItem( hDlg , IDC_EXP_ALL_STATUS ); + + SendMessage( hProg , PBM_SETRANGE , 0 , MAKELPARAM( 0 , nContacts ) ); + + SetWindowText( hStatus , TranslateTS(_T("Reading database information ( Phase 1 of 2 )")) ); + + { // position and show proigrassbar dialog + + RECT rParrent; + RECT rDlg; + if( GetWindowRect( hParent , &rParrent ) && GetWindowRect( hDlg , &rDlg ) ) + { + int x = ( (rParrent.right + rParrent.left) / 2 ) - ( (rDlg.right - rDlg.left) / 2 ); + int y = ( (rParrent.bottom + rParrent.top) / 2 ) - ( (rDlg.bottom - rDlg.top) / 2 ); + SetWindowPos( hDlg , 0 , x , y , 0 ,0 , SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW ); + } + else + ShowWindow( hDlg , SW_SHOWNORMAL ); + } + + // map with list to stored all DB history before it is exported + map, less > AllEvents; + + { // reading from the database !!! + LVITEM sItem = { 0 }; + sItem.mask = LVIF_PARAM; + + for( int nCur = 0 ; nCur < nTotalContacts ; nCur++ ) + { + if( bOnlySelected ) + { + if( ! (ListView_GetItemState( hMapUser , nCur , LVIS_SELECTED ) & LVIS_SELECTED) ) + continue; + } + + sItem.iItem = nCur; + if( ! ListView_GetItem( hMapUser, &sItem ) ) + { + MessageBox( hParent , TranslateTS(_T("Failed to export at least one contact")),MSG_BOX_TITEL,MB_OK ); + continue; + } + + HANDLE hContact = (HANDLE)sItem.lParam; + + list< CLDBEvent > & rclCurList = AllEvents[ GetFilePathFromUser( hContact ) ]; + + HANDLE hDbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST,(WPARAM)hContact,0); + while( hDbEvent ) + { + rclCurList.push_back( CLDBEvent( hContact , hDbEvent ) ); + + // Get next event in chain + hDbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDNEXT,(WPARAM)hDbEvent,0); + } + + SendMessage( hProg , PBM_SETPOS , nCur , 0); + RedrawWindow( hDlg , NULL , NULL , RDW_ALLCHILDREN | RDW_UPDATENOW ); + } + +/* + if( hContact ) + MessageBox( hParent , TranslateTS(_T("Failed to export at least one contact")),MSG_BOX_TITEL,MB_OK ); + */ + } + + + { // window text update + + SetWindowText( hStatus , TranslateTS(_T("Sorting and writing database information ( Phase 2 of 2 )")) ); + SendMessage( hProg , PBM_SETRANGE , 0 , MAKELPARAM( 0 , AllEvents.size() ) ); + SendMessage( hProg , PBM_SETPOS , 0 , 0); + } + + { // time to write to files !!! + map, less >::iterator FileIterator; + + int nCur=0; + for( FileIterator = AllEvents.begin() ; FileIterator != AllEvents.end() ; ++FileIterator ) + { + (FileIterator->second).sort(); // Sort is preformed here !! + // events with same time will not be swaped, they will + // remain in there original order + + list< CLDBEvent >::const_iterator iterator; + for( iterator = FileIterator->second.begin() ; iterator != FileIterator->second.end() ; ++iterator ) + { + HANDLE hDbEvent = (*iterator).hDbEvent; + nExportEvent( (WPARAM) (*iterator).hUser , (LPARAM) hDbEvent ); + } + SendMessage( hProg , PBM_SETPOS , ++nCur , 0); + RedrawWindow( hDlg , NULL , NULL , RDW_ALLCHILDREN | RDW_UPDATENOW ); + } + } + + DestroyWindow( hDlg ); + return 0; +} + +///////////////////////////////////////////////////////////////////// +// Member Function : SetToDefault +// Type : Global +// Parameters : hwndDlg - ? +// Returns : void +// Description : +// +// References : - +// Remarks : - +// Created : 021228 , 28 December 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +void SetToDefault( HWND hParent ) +{ + HWND hMapUser = GetDlgItem( hParent , IDC_MAP_USER_LIST ); + + int nContacts = ListView_GetItemCount( hMapUser ); + + if( !hMapUser || nContacts <= 0 ) + { + return; + } + + _TCHAR szTemp[ 500 ]; + if( ! GetDlgItemText( hParent , IDC_DEFAULT_FILE , szTemp , sizeof( szTemp ) ) ) + return; + + LVITEM sItem = { 0 }; + + for( int nCur = 0 ; nCur < nContacts ; nCur++ ) + { + if( ! (ListView_GetItemState( hMapUser , nCur , LVIS_SELECTED ) & LVIS_SELECTED) ) + continue; + + sItem.iItem = nCur; + sItem.mask = LVIF_PARAM; + if( ! ListView_GetItem( hMapUser, &sItem ) ) + continue; + + tstring sFileName = szTemp; + ReplaceDefines( (HANDLE)sItem.lParam , sFileName ); + ReplaceTimeVariables( sFileName ); + + sItem.mask = LVIF_TEXT; + sItem.pszText = (_TCHAR*)sFileName.c_str(); + ListView_SetItem( hMapUser, &sItem ); + + if( ! bUnaplyedChanges ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hParent), PSM_CHANGED, 0, 0); + } + } +} + +///////////////////////////////////////////////////////////////////// +// Member Function : bApplyChanges +// Type : Global +// Parameters : hwndDlg - handle to the parrent, ( Options Dlg ) +// Returns : Returns true if the changes was applyed +// Description : but since we cant abort an apply opperation , +// this can not currently be used +// References : - +// Remarks : - +// Created : 020422 , 22 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +BOOL bApplyChanges( HWND hwndDlg ) +{ + BOOL bTrans; + BOOL bRet = true; + _TCHAR szTemp[500]; + + int nTmp = GetDlgItemInt( hwndDlg , IDC_MAX_CLOUMN_WIDTH , &bTrans , TRUE ); + if( !bTrans || nTmp < 5 ) + { + _sntprintf( szTemp , sizeof( szTemp ) ,CheckedTranslate(_T("Max line width must be at least %d"),1) , 5 ); + MessageBox( hwndDlg , szTemp ,MSG_BOX_TITEL,MB_OK ); + bRet = false; + } + else + { + nMaxLineWidth = nTmp; + } + + GetDlgItemText( hwndDlg , IDC_EXPORT_TIMEFORMAT , szTemp , sizeof( szTemp ) ); + sTimeFormat = szTemp; + + GetDlgItemText( hwndDlg , IDC_EXPORT_DIR , szTemp , sizeof( szTemp ) ); + sExportDir = szTemp; + + GetDlgItemText( hwndDlg , IDC_DEFAULT_FILE , szTemp , sizeof( szTemp ) ); + sDefaultFile = szTemp; + + GetDlgItemText( hwndDlg , IDC_FILE_VIEWER , szTemp , sizeof( szTemp ) ); + sFileViewerPrg = szTemp; + + bUseInternalViewer( IsDlgButtonChecked( hwndDlg , IDC_USE_INTERNAL_VIEWER ) == BST_CHECKED ); + + bool bNewRp = IsDlgButtonChecked( hwndDlg , IDC_REPLACE_MIRANDA_HISTORY ) == BST_CHECKED; + if( bReplaceHistory != bNewRp ) + { + bReplaceHistory = bNewRp; + MessageBox( hwndDlg , TranslateTS(_T("You need to restart miranda to change the history function")) ,MSG_BOX_TITEL,MB_OK ); + } + + bAppendNewLine = IsDlgButtonChecked( hwndDlg , IDC_APPEND_NEWLINE ) == BST_CHECKED; + bUseUtf8InNewFiles = IsDlgButtonChecked( hwndDlg , IDC_USE_UTF8_IN_NEW_FILES ) == BST_CHECKED; + + bUseLessAndGreaterInExport = IsDlgButtonChecked( hwndDlg , IDC_USE_LESS_AND_GREATER_IN_EXPORT ) == BST_CHECKED; + + + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + int nCount = ListView_GetItemCount( hMapUser ); + for( int nCur = 0 ; nCur < nCount ; nCur++ ) + { + LVITEM sItem = { 0 }; + sItem.iItem = nCur; + sItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; + sItem.pszText = szTemp; + sItem.cchTextMax = sizeof( szTemp ); + + if( ListView_GetItem( hMapUser, &sItem ) ) + { + HANDLE hUser = (HANDLE)sItem.lParam; + if( _tcslen( szTemp ) > 0 ) + DBWriteContactSettingTString( hUser , MODULE , "FileName" , szTemp ); + else + DBDeleteContactSetting( hUser , MODULE , "FileName" ); + + if( sItem.iImage ) + DBDeleteContactSetting( hUser , MODULE , "EnableLog" ); // default is Enabled !! + else + DBWriteContactSettingByte( hUser , MODULE , "EnableLog",0); + } + } + UpdateFileToColWidth(); + + SaveSettings(); + + + bUnaplyedChanges = FALSE; + return bRet; +} + +///////////////////////////////////////////////////////////////////// +// Member Function : ClearAllFileNames +// Type : Global +// Parameters : hwndDlg - handle to the parrent, ( Options Dlg ) +// Returns : void +// Description : Just clear all file name's entered +// +// References : - +// Remarks : - +// Created : 020422 , 23 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +void ClearAllFileNames(HWND hwndDlg) +{ + LVITEM sItem = { 0 }; + sItem.mask = LVIF_TEXT; + sItem.pszText = _T(""); + + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + int nCount = ListView_GetItemCount( hMapUser ); + for( int nCur = 0 ; nCur < nCount ; nCur++ ) + { + sItem.iItem = nCur; + ListView_SetItem( hMapUser, &sItem ); + } + if( ! bUnaplyedChanges ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } +} + +///////////////////////////////////////////////////////////////////// +// Member Function : AutoFindeFileNames +// Type : Global +// Parameters : hwndDlg - handle to the parrent, ( Options Dlg ) +// Returns : void +// Description : Try to finde new file names for user's with 2or more UIN's +// +// References : - +// Remarks : - +// Created : 020422 , 23 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +void AutoFindeFileNames(HWND hwndDlg) +{ + + _TCHAR szDefaultFile[500]; + GetDlgItemText( hwndDlg , IDC_DEFAULT_FILE , szDefaultFile , sizeof( szDefaultFile ) ); + + LVITEM sItem = { 0 }; + + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + int nCount = ListView_GetItemCount( hMapUser ); + for( int nCur = 0 ; nCur < nCount ; nCur++ ) + { + _TCHAR szSearch[ 100 ]; + + sItem.mask = LVIF_TEXT; + sItem.iItem = nCur; + sItem.iSubItem = 1; + sItem.pszText = szSearch; + sItem.cchTextMax = sizeof( szSearch ); + + if( ! ListView_GetItem( hMapUser, &sItem ) ) + { + continue; + } + + int nShortestMatch = 0xFFFF; + HANDLE hStortest = 0; + int nStortestIndex = -1; + for( int nSubCur = 0 ; nSubCur < nCount ; nSubCur++ ) + { + if( nSubCur == nCur ) + continue; + _TCHAR szSubCur[ 100 ]; + sItem.mask = LVIF_TEXT | LVIF_PARAM; + sItem.iItem = nSubCur; + sItem.iSubItem = 1; + sItem.pszText = szSubCur; + sItem.cchTextMax = sizeof( szSubCur ); + if( ListView_GetItem( hMapUser, &sItem ) ) + { + int nLen = _tcslen( szSubCur ); + if( _tcsncicmp( szSubCur , szSearch , nLen ) == 0 ) + { + if( nLen < nShortestMatch ) + { + nShortestMatch = nLen; + nStortestIndex = nSubCur; + hStortest = (HANDLE)sItem.lParam; + } + } + } + } + if( nShortestMatch != 0xFFFF ) + { + tstring sFileName; + szSearch[0] = 0; + ListView_GetItemText( hMapUser, nCur , 0 , szSearch , sizeof( szSearch )); + bool bPriHasFileName = szSearch[0] != 0; + if( bPriHasFileName ) + sFileName = szSearch; + + szSearch[0] = 0; + ListView_GetItemText( hMapUser, nStortestIndex , 0 , szSearch , sizeof( szSearch )); + bool bSubHasFileName = szSearch[0] != 0; + if( bSubHasFileName ) + sFileName = szSearch; + + if( sFileName.empty() ) + { + sFileName = szDefaultFile; + ReplaceDefines( hStortest , sFileName ); + ReplaceTimeVariables( sFileName ); + } + + if( !bPriHasFileName ) + ListView_SetItemText( hMapUser, nCur , 0 , (_TCHAR*)sFileName.c_str() ); + + if( !bSubHasFileName ) + ListView_SetItemText( hMapUser, nStortestIndex , 0 , (_TCHAR*)sFileName.c_str() ); + + if( ! bUnaplyedChanges ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + } + } +} + + +///////////////////////////////////////////////////////////////////// +// Member Function : OpenHelp +// Type : Global +// Parameters : hwndDlg - handle to the parrent, ( Options Dlg ) +// Returns : void +// Description : +// +// References : - +// Remarks : - +// Created : 020427 , 27 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +void OpenHelp(HWND hwndDlg) +{ + _TCHAR szPath[MAX_PATH]; + if( GetModuleFileName( hInstance , szPath , sizeof( szPath ) ) ) + { + int nLen = _tcslen( szPath ); + if( nLen > 3 ) + { + szPath[nLen-1] = 't'; + szPath[nLen-2] = 'x'; + szPath[nLen-3] = 't'; + + SHELLEXECUTEINFO st = {0}; + st.cbSize = sizeof(st); + st.fMask = SEE_MASK_INVOKEIDLIST; + st.hwnd = NULL; + st.lpFile = szPath; + st.nShow = SW_SHOWDEFAULT; + ShellExecuteEx(&st); + + return; + } + } + + MessageBox( hwndDlg , TranslateTS(_T("Failed to get the path to Msg_Export.dll\nPlease locate Msg_Export.txt your self")),MSG_BOX_TITEL,MB_OK ); +} + +///////////////////////////////////////////////////////////////////// +// Member Function : DlgProcMsgExportOpts +// Type : Global +// Parameters : hwndDlg - handle to this dialog +// msg - ? +// wParam - ? +// lParam - ? +// Returns : static BOOL CALLBACK +// Description : Main message prossing fore my options dialog +// +// References : - +// Remarks : - +// Created : 020422 , 22 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +static BOOL CALLBACK DlgProcMsgExportOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ +// Used to prevent sending the PSM_CHANGED to miranda +// when initilizing + static BOOL bWindowTextSet = FALSE; + + switch (msg) + { + case WM_INITDIALOG: + { + bWindowTextSet = FALSE; + + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + + { // init adv. win styles + DWORD dw = ListView_GetExtendedListViewStyle( hMapUser ); + dw |= LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT; + ListView_SetExtendedListViewStyle( hMapUser , dw /*| LVS_EX_LABELTIP*/); + } + + + int nColumnWidth = 100; + RECT rListSize; + if( GetWindowRect( hMapUser , &rListSize ) ) + { + nColumnWidth = (rListSize.right - rListSize.left- GetSystemMetrics(SM_CXVSCROLL) - 5 - nUINColWitdh - nProtoColWitdh) / 2; + if( nColumnWidth < 10 ) + nColumnWidth = 10; + } + + { // header setup !! + + LVCOLUMN cCol = { 0 }; + cCol.mask = LVCF_TEXT | LVCF_WIDTH; + cCol.cx = nColumnWidth; + cCol.pszText = TranslateTS(_T("File")); + ListView_InsertColumn( hMapUser , 0 , &cCol ); + cCol.pszText = TranslateTS(_T("Nick")); + ListView_InsertColumn( hMapUser , 1 , &cCol ); + cCol.cx = nProtoColWitdh; + cCol.pszText = TranslateTS(_T("Proto")); + ListView_InsertColumn( hMapUser , 2 , &cCol ); + cCol.cx = nUINColWitdh; + cCol.mask |= LVCF_FMT; + cCol.fmt = LVCFMT_RIGHT; + cCol.pszText = TranslateTS(_T("UIN")); + + ListView_InsertColumn( hMapUser , 3 , &cCol ); + + /* + int nOrder[3] = { 1 , 2 , 0 }; + ListView_SetColumnOrderArray( hMapUser , 3 , nOrder );*/ + } + + { + HIMAGELIST hIml; + hIml = ImageList_Create( GetSystemMetrics(SM_CXSMICON) , GetSystemMetrics(SM_CYSMICON),ILC_COLOR4|ILC_MASK,2,2); + ImageList_AddIcon(hIml,LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_NOTICK))); + ImageList_AddIcon(hIml,LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_TICK))); + ListView_SetImageList( hMapUser, hIml, LVSIL_SMALL); + } + + { + tstring sTmp; + LVITEM sItem = { 0 }; + HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); + for( int nUser = 0; /*hContact*/ ; nUser++ ) + { + sItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; + sItem.iItem = nUser; + sItem.iSubItem = 0; + sItem.iImage = DBGetContactSettingByte(hContact,MODULE,"EnableLog",1); + sItem.lParam = (LPARAM) hContact; + + + sTmp = _DBGetString( hContact , MODULE , "FileName" , _T("") ); + sItem.pszText = (_TCHAR*)sTmp.c_str(); + + ListView_InsertItem( hMapUser , &sItem ); + + sItem.mask = LVIF_TEXT; + sItem.iSubItem = 1; + sItem.pszText = (_TCHAR*)NickFromHandle(hContact); + ListView_SetItem( hMapUser , &sItem ); + + sItem.iSubItem = 2; + + sTmp = _DBGetString( hContact , "Protocol" , "p" , _T("") ); + string sTmpA = _DBGetStringA( hContact , "Protocol" , "p" , "" ); + sItem.pszText = (_TCHAR*)sTmp.c_str(); + ListView_SetItem( hMapUser , &sItem ); + + + DWORD dwUIN = DBGetContactSettingDword(hContact, sTmpA.c_str(), "UIN", 0); + _TCHAR szTmp[50]; + _sntprintf( szTmp , sizeof(szTmp) ,_T("%d") , dwUIN ); + sItem.iSubItem = 3; + sItem.pszText = szTmp; + ListView_SetItem( hMapUser , &sItem ); + + if( ! hContact ) // written like this to add the current user ( handle = 0 ) + break; + + hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); + } + ListView_SortItems( hMapUser , CompareFunc , 1 ); + + sItem.mask = LVIF_STATE; + sItem.iItem = 0; + sItem.iSubItem = 0; + sItem.state = LVIS_FOCUSED; + sItem.stateMask = LVIS_FOCUSED; + ListView_SetItem( hMapUser , &sItem ); + + } + HWND hComboBox; + + SetDlgItemInt( hwndDlg , IDC_MAX_CLOUMN_WIDTH , nMaxLineWidth , TRUE ); + + {// Export dir + SetDlgItemText( hwndDlg , IDC_EXPORT_DIR , sExportDir.c_str() ); + hComboBox = GetDlgItem( hwndDlg , IDC_EXPORT_DIR ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%dbpath%\\MsgExport\\") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("C:\\Backup\\MsgExport\\") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%dbpath%\\MsgExport\\%group% - ") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%dbpath%\\MsgExport\\%group%\\") ); + } + {// default file + SetDlgItemText( hwndDlg , IDC_DEFAULT_FILE , sDefaultFile.c_str() ); + hComboBox = GetDlgItem( hwndDlg , IDC_DEFAULT_FILE ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%nick%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%UIN%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%group%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%e-mail%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%identifier%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%year%-%month%-%day%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%group%\\%nick%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%group%\\%UIN%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%group%\\%identifier%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("%protocol%\\%nick%.txt") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("History.txt")); + } + {// time format + SetDlgItemText( hwndDlg , IDC_EXPORT_TIMEFORMAT , sTimeFormat.c_str() ); + hComboBox = GetDlgItem( hwndDlg , IDC_EXPORT_TIMEFORMAT ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("d t") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("d s") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("d m") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("D s") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("D m :")); + } + {// File viewer + SetDlgItemText( hwndDlg , IDC_FILE_VIEWER , sFileViewerPrg.c_str() ); + hComboBox = GetDlgItem( hwndDlg , IDC_FILE_VIEWER ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("C:\\Windows\\Notepad.exe") ); + SendMessage( hComboBox , CB_ADDSTRING, 0 , (LPARAM)_T("C:\\WinNT\\Notepad.exe") ); + //EnableWindow( GetDlgItem( hwndDlg , IDC_FILE_VIEWER ) , ! bUseInternalViewer() ); + } + + + CheckDlgButton( hwndDlg , IDC_USE_INTERNAL_VIEWER , bUseInternalViewer() ? BST_CHECKED : BST_UNCHECKED ); + CheckDlgButton( hwndDlg , IDC_REPLACE_MIRANDA_HISTORY , bReplaceHistory ? BST_CHECKED : BST_UNCHECKED ); + CheckDlgButton( hwndDlg , IDC_APPEND_NEWLINE , bAppendNewLine ? BST_CHECKED : BST_UNCHECKED ); + CheckDlgButton( hwndDlg , IDC_USE_UTF8_IN_NEW_FILES , bUseUtf8InNewFiles ? BST_CHECKED : BST_UNCHECKED ); + CheckDlgButton( hwndDlg , IDC_USE_LESS_AND_GREATER_IN_EXPORT , bUseLessAndGreaterInExport ? BST_CHECKED : BST_UNCHECKED ); + + + TranslateDialogDefault(hwndDlg); + + bWindowTextSet = TRUE; + return TRUE; + } + case WM_COMMAND: + { + switch(LOWORD(wParam)) + { + case ID_EXPORTSELECTED: + case IDC_EXPORTALL: + { + if( bUnaplyedChanges ) + { + DWORD res = MessageBox( hwndDlg , TranslateTS(_T("You have unapplyed changes do you wish to apply these first ?")),MSG_BOX_TITEL,MB_YESNOCANCEL ); + if( res == IDCANCEL ) + return TRUE; + if( res == IDYES ) + { + if( ! bApplyChanges( hwndDlg ) ) + { + return TRUE; + } + } + } + nExportCompleatList( hwndDlg , LOWORD(wParam) == ID_EXPORTSELECTED ); + return TRUE; + } + case IDC_EXPORT_DIR: + case IDC_EXPORT_TIMEFORMAT: + case IDC_DEFAULT_FILE: + case IDC_FILE_VIEWER: + { + if( !bWindowTextSet ) + return TRUE; + + if( HIWORD(wParam) == CBN_EDITUPDATE || HIWORD(wParam) == CBN_SELCHANGE ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + return TRUE; + } + case IDC_MAX_CLOUMN_WIDTH: + { + if( !bWindowTextSet ) + return TRUE; + + if( HIWORD(wParam) == EN_CHANGE ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + return TRUE; + } + case IDC_USE_INTERNAL_VIEWER: +/* { + EnableWindow( + GetDlgItem( hwndDlg , IDC_FILE_VIEWER ) , + !IsDlgButtonChecked( hwndDlg , IDC_USE_INTERNAL_VIEWER ) + ); + }// fall thru here !!*/ + case IDC_REPLACE_MIRANDA_HISTORY: + case IDC_APPEND_NEWLINE: + case IDC_USE_UTF8_IN_NEW_FILES: + case IDC_USE_LESS_AND_GREATER_IN_EXPORT: + { + if( HIWORD(wParam) == BN_CLICKED ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + return TRUE; + } + case ID_USERLIST_USERDETAILS: + { + LVITEM sItem = { 0 }; + sItem.mask = LVIF_PARAM; + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + sItem.iItem = ListView_GetNextItem( hMapUser , -1 , LVIS_SELECTED ); + if( sItem.iItem >= 0 && ListView_GetItem( hMapUser, &sItem )) + { + CallService(MS_USERINFO_SHOWDIALOG,(WPARAM)sItem.lParam ,0); + } + return TRUE; + } + case IDC_AUTO_FILENAME: + { + AutoFindeFileNames(hwndDlg); + return TRUE; + } + case IDC_CLEAR_ALL: + { + ClearAllFileNames(hwndDlg); + return TRUE; + + } + case IDC_OPEN_HELP: + { + OpenHelp(hwndDlg); + return TRUE; + } + case ID_SET_TO_DEFAULT: + { + SetToDefault( hwndDlg ); + return TRUE; + } + case IDC_FILE_VIEWER_BROWSE: + { + OPENFILENAME ofn = { 0 }; // common dialog box structure + _TCHAR szFile[260]; // buffer for file name + + GetDlgItemText( hwndDlg , IDC_FILE_VIEWER , szFile , sizeof(szFile)); + // Initialize OPENFILENAME + //ZeroMemory(&ofn, sizeof(OPENFILENAME)); + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hwndDlg; + ofn.lpstrFile = szFile; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = _T("Executable files (*.exe;*.com;*.bat;*.cmd)\0*.exe;*.com;*.bat;*.cmd\0All files(*.*)\0*.*\0"); + ofn.nFilterIndex = 1; + //ofn.lpstrFileTitle = NULL; + //ofn.nMaxFileTitle = 0; + //ofn.lpstrInitialDir = NULL; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + + // Display the Open dialog box. + + if (GetOpenFileName(&ofn)) + { + SetDlgItemText( hwndDlg , IDC_FILE_VIEWER , szFile ); + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + // OPENFILENAME + //GetOpenFileName( + return TRUE; + } + case IDC_EXPORT_DIR_BROWSE: + { + LPMALLOC pMalloc; + + //CoInitializeEx(NULL,COINIT_APARTMENTTHREADED ); + // Get the shells allocator + if (FAILED(SHGetMalloc(&pMalloc))) // we need to use this to support old Windows versions + { + MessageBox( hwndDlg , _T("Failed to get the shells allocator !"),MSG_BOX_TITEL,MB_OK ); + return TRUE; // TRUE because we have handled the message , sort of *S* + } + + // Allocate the Dest Dir buffer to receive browse info + _TCHAR * lpDestDir = (_TCHAR * ) pMalloc->Alloc(MAX_PATH+100); + if ( ! lpDestDir ) + { + pMalloc->Release(); + MessageBox( hwndDlg , _T("Failed to Allocate buffer space"),MSG_BOX_TITEL,MB_OK ); + return TRUE; + } + + BROWSEINFO sBrowseInfo; + sBrowseInfo.hwndOwner = hwndDlg; + sBrowseInfo.pidlRoot = NULL; + sBrowseInfo.pszDisplayName = lpDestDir; + sBrowseInfo.lpszTitle = TranslateTS(_T("Select Destination Directory")); + sBrowseInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX;; + sBrowseInfo.lpfn = NULL; + sBrowseInfo.lParam = 0; + sBrowseInfo.iImage = 0; + + LPITEMIDLIST psItemIDList = SHBrowseForFolder(&sBrowseInfo); + if( psItemIDList ) + { + SHGetPathFromIDList(psItemIDList, lpDestDir); + int n = _tcslen( lpDestDir ); + if( n > 0 && lpDestDir[n] != '\\' ) + { + lpDestDir[n] = '\\' ; + lpDestDir[n+1] = 0; + } + SetDlgItemText( hwndDlg , IDC_EXPORT_DIR , lpDestDir ); + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + // Clean up + pMalloc->Free( psItemIDList ); + } + pMalloc->Free( lpDestDir ); + pMalloc->Release(); + return TRUE; + } + } + break; + } + case WM_CONTEXTMENU: + { + if( wParam != (WPARAM)GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ) ) + return FALSE; + + HMENU hMainMenu = LoadMenu(hInstance ,MAKEINTRESOURCE(IDR_MSG_EXPORT)); + if( hMainMenu ) + { + HMENU hMenu = GetSubMenu(hMainMenu,0); + + POINT pt; + pt.x=(short)LOWORD(lParam); + pt.y=(short)HIWORD(lParam); + if( pt.x == -1 && pt.y == -1 ) + { + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + int nFirst = ListView_GetNextItem( hMapUser , -1 , LVNI_FOCUSED ); + if( nFirst >= 0 ) + { + ListView_GetItemPosition( hMapUser , nFirst , &pt ); + } + + if( pt.y < 16 ) + pt.y = 16; + else + { + RECT rUserList; + GetClientRect( hMapUser , &rUserList ); + if( pt.y > rUserList.bottom - 16 ) + pt.y = rUserList.bottom - 16; + else + pt.y += 8; + } + pt.x = 8; + ClientToScreen(hMapUser,&pt); + } + + CallService(MS_LANGPACK_TRANSLATEMENU,(WPARAM)hMenu,0); + TrackPopupMenu(hMenu,TPM_TOPALIGN|TPM_LEFTALIGN|TPM_RIGHTBUTTON,pt.x,pt.y,0,hwndDlg,NULL); + + DestroyMenu(hMainMenu); + } + return TRUE; + } + case WM_NOTIFY: + { + NMHDR * p = ((LPNMHDR)lParam); + if( p->idFrom == IDC_MAP_USER_LIST ) + { + switch (p->code) + { + case NM_CLICK: + { LVHITTESTINFO hti; + LVITEM lvi; + hti.pt=((NMLISTVIEW*)lParam)->ptAction; + ListView_SubItemHitTest( p->hwndFrom ,&hti); + + if( hti.flags != LVHT_ONITEMICON ) + break; + + lvi.mask=LVIF_IMAGE; + lvi.iItem=hti.iItem; + lvi.iSubItem=0; + ListView_GetItem( p->hwndFrom , &lvi); + lvi.iImage^=1; + ListView_SetItem( p->hwndFrom , &lvi); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + } + case LVN_ENDLABELEDIT: + { + NMLVDISPINFO * pdi = (NMLVDISPINFO *) lParam; + if( pdi->item.mask & LVIF_TEXT ) + { + pdi->item.mask &= LVIF_TEXT; + ListView_SetItem( p->hwndFrom , &pdi->item ); + + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + return TRUE; + } + case LVN_KEYDOWN: + { + NMLVKEYDOWN * lpnmk = (NMLVKEYDOWN *) lParam; + if( lpnmk->wVKey == 'A' && (GetKeyState( VK_CONTROL ) & 0x8000) ) + { + // select all + int nCount = ListView_GetItemCount( p->hwndFrom ); + for( int nCur = 0 ; nCur < nCount ; nCur++ ) + { + ListView_SetItemState( p->hwndFrom , nCur , LVIS_SELECTED , LVIS_SELECTED ); + } + return TRUE; + } + + + if( lpnmk->wVKey == VK_F2 || + ( lpnmk->wVKey >= 'A' && lpnmk->wVKey <= 'Z') || + ( lpnmk->wVKey >= '1' && lpnmk->wVKey <= '9') || + lpnmk->wVKey == VK_BACK + ) + { + HWND hEdit = ListView_EditLabel( p->hwndFrom , ListView_GetSelectionMark(p->hwndFrom) ); + if( hEdit && lpnmk->wVKey != VK_F2 ) + { + if( isupper( lpnmk->wVKey ) ) + SendMessage( hEdit , WM_CHAR , tolower( lpnmk->wVKey ) , 0 ); + else + SendMessage( hEdit , WM_CHAR , lpnmk->wVKey , 0 ); + } + } + return TRUE; + } + case NM_DBLCLK: + { + NMITEMACTIVATE * pdi = (NMITEMACTIVATE *) lParam; + if( pdi->iItem >= 0 ) + { + ListView_EditLabel( p->hwndFrom , pdi->iItem ); + } + return TRUE; + } + case NM_CUSTOMDRAW: + { + LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; + switch(lplvcd->nmcd.dwDrawStage) + { + case CDDS_PREPAINT: + { + SetWindowLong(hwndDlg, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW); + return true; + } + case CDDS_ITEMPREPAINT: + { + if( lplvcd->nmcd.lItemlParam == 0 ) + { + lplvcd->clrText = RGB( 0 , 0 , 255 ); + } + SetWindowLong(hwndDlg, DWL_MSGRESULT, CDRF_NEWFONT); + return true; + } + } + return FALSE; + } + } + } + else + { + switch (p->code) + { + case PSN_APPLY: + { + bApplyChanges( hwndDlg ); + return TRUE; + } + case HDN_ITEMCLICK: + { + NMHEADER * phdr = (LPNMHEADER) p; + if( phdr->iButton == 0 )// 0 => Left button + { + HWND hMapUser = GetDlgItem( hwndDlg , IDC_MAP_USER_LIST ); + ListView_SortItems( hMapUser , CompareFunc , phdr->iItem ); + return TRUE; + } + return FALSE; + } + } + } + break; + } + } + return FALSE; +} + +///////////////////////////////////////////////////////////////////// +// Member Function : bApplyChanges2 +// Type : Global +// Parameters : hwndDlg - ? +// Returns : Returns true if +// Description : +// +// References : - +// Remarks : - +// Created : 050429 , 29 april 2005 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +BOOL bApplyChanges2( HWND hwndDlg ) +{ + if( IsDlgButtonChecked( hwndDlg , IDC_FC_PROMPT ) == BST_CHECKED ) + enRenameAction = eDAPromptUser; + else if( IsDlgButtonChecked( hwndDlg , IDC_FC_RENAME ) == BST_CHECKED ) + enRenameAction = eDAAutomatic; + else if( IsDlgButtonChecked( hwndDlg , IDC_FC_NOTHING ) == BST_CHECKED ) + enRenameAction = eDANothing; + + if( IsDlgButtonChecked( hwndDlg , IDC_FD_PROMPT ) == BST_CHECKED ) + enDeleteAction = eDAPromptUser; + else if( IsDlgButtonChecked( hwndDlg , IDC_FD_DELETE ) == BST_CHECKED ) + enDeleteAction = eDAAutomatic; + else if( IsDlgButtonChecked( hwndDlg , IDC_FD_NOTHING ) == BST_CHECKED ) + enDeleteAction = eDANothing; + + char szTemp[ 500 ]; + strcpy( szTemp , "DisableProt_" ); + + HWND hMapUser = GetDlgItem( hwndDlg , IDC_EXPORT_PROTOS ); + int nCount = ListView_GetItemCount( hMapUser ); + for( int nCur = 0 ; nCur < nCount ; nCur++ ) + { + LVITEMA sItem = { 0 }; + sItem.iItem = nCur; + sItem.mask = LVIF_TEXT | LVIF_IMAGE; + sItem.pszText = &szTemp[12]; + sItem.cchTextMax = sizeof( szTemp )-15; + if( ::SendMessage(hMapUser, LVM_GETITEMA, 0, (LPARAM)&sItem ) ) + { + if( sItem.iImage ) + DBDeleteContactSetting( NULL , MODULE , szTemp ); // default is Enabled !! + else + DBWriteContactSettingByte( NULL , MODULE , szTemp,0); + } + } + SaveSettings(); + return TRUE; +} + +///////////////////////////////////////////////////////////////////// +// Member Function : DlgProcMsgExportOpts2 +// Type : Global +// Parameters : hwndDlg - ? +// msg - ? +// wParam - ? +// lParam - ? +// Returns : static BOOL CALLBACK +// Description : +// +// References : - +// Remarks : - +// Created : 040205 , 05 februar 2004 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +static BOOL CALLBACK DlgProcMsgExportOpts2(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static BOOL bWindowTextSet = FALSE; + + switch (msg) + { + case WM_INITDIALOG: + { + bWindowTextSet = FALSE; + switch( enRenameAction ) + { + case eDAPromptUser: + CheckDlgButton( hwndDlg , IDC_FC_PROMPT , true ); + break; + case eDAAutomatic: + CheckDlgButton( hwndDlg , IDC_FC_RENAME , true ); + break; + case eDANothing: + CheckDlgButton( hwndDlg , IDC_FC_NOTHING , true ); + break; + } + switch( enDeleteAction ) + { + case eDAPromptUser: + CheckDlgButton( hwndDlg , IDC_FD_PROMPT , true ); + break; + case eDAAutomatic: + CheckDlgButton( hwndDlg , IDC_FD_DELETE , true ); + break; + case eDANothing: + CheckDlgButton( hwndDlg , IDC_FD_NOTHING , true ); + break; + } + HWND hMapUser = GetDlgItem( hwndDlg , IDC_EXPORT_PROTOS ); +/* + { // init adv. win styles + DWORD dw = ListView_GetExtendedListViewStyle( hMapUser ); + dw |= LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT; + ListView_SetExtendedListViewStyle( hMapUser , dw /); + } +*/ + int nColumnWidth = 100; + RECT rListSize; + if( GetWindowRect( hMapUser , &rListSize ) ) + { + nColumnWidth = (rListSize.right - rListSize.left- GetSystemMetrics(SM_CXVSCROLL) - 5 ); + if( nColumnWidth < 10 ) + nColumnWidth = 10; + } + + { // header setup !! + LVCOLUMN cCol = { 0 }; + cCol.mask = LVCF_TEXT | LVCF_WIDTH; + cCol.cx = nColumnWidth; + cCol.pszText = TranslateTS(_T("Export Protocols")); + ListView_InsertColumn( hMapUser , 0 , &cCol ); + } + + { + HIMAGELIST hIml; + hIml = ImageList_Create( GetSystemMetrics(SM_CXSMICON) , GetSystemMetrics(SM_CYSMICON),ILC_COLOR4|ILC_MASK,2,2); + ImageList_AddIcon(hIml,LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_NOTICK))); + ImageList_AddIcon(hIml,LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_TICK))); + ListView_SetImageList( hMapUser, hIml, LVSIL_SMALL); + } + + { + PROTOCOLDESCRIPTOR **proto; + int nCount; + LVITEMA sItem = { 0 }; + sItem.mask = LVIF_TEXT | LVIF_IMAGE; + char szTemp[ 500 ]; + + CallService(MS_PROTO_ENUMPROTOCOLS,(WPARAM)&nCount,(LPARAM)&proto); + + for( int i=0 ; i < nCount ; i++) + { + if( proto[i]->type==PROTOTYPE_IGNORE) //PROTOTYPE_PROTOCOL + continue; + _snprintf( szTemp , sizeof( szTemp ) , "DisableProt_%s" , proto[i]->szName ); + sItem.pszText = proto[i]->szName; + sItem.iImage = DBGetContactSettingByte(NULL,MODULE,szTemp,1); + ::SendMessage( hMapUser , LVM_INSERTITEMA , 0 ,(LPARAM)&sItem ); + sItem.iItem++; + } + } + + TranslateDialogDefault(hwndDlg); + + bWindowTextSet = TRUE; + return TRUE; + } + case WM_COMMAND: + { + switch(LOWORD(wParam)) + { + case IDC_FC_PROMPT: + case IDC_FC_RENAME: + case IDC_FC_NOTHING: + case IDC_FD_PROMPT: + case IDC_FD_DELETE: + case IDC_FD_NOTHING: + { + if( !bWindowTextSet ) + return TRUE; + + if( HIWORD(wParam) == BN_CLICKED ) + { + bUnaplyedChanges = TRUE; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + return TRUE; + } + case IDC_DEBUG_INFO: + { + ShowDebugInfo(); + return TRUE; + } + } + break; + } + case WM_NOTIFY: + { + NMHDR * p = ((LPNMHDR)lParam); + if( p->idFrom == IDC_EXPORT_PROTOS ) + { + switch (p->code) + { + case NM_CLICK: + { LVHITTESTINFO hti; + LVITEM lvi; + hti.pt=((NMLISTVIEW*)lParam)->ptAction; + ListView_SubItemHitTest( p->hwndFrom ,&hti); + + if( hti.flags != LVHT_ONITEMICON ) + break; + + lvi.mask=LVIF_IMAGE; + lvi.iItem=hti.iItem; + lvi.iSubItem=0; + ListView_GetItem( p->hwndFrom , &lvi); + lvi.iImage^=1; + ListView_SetItem( p->hwndFrom , &lvi); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + } + } + break; + } + switch (p->code) + { + case PSN_APPLY: + { + bApplyChanges2(hwndDlg); + return TRUE; + } + case HDN_ITEMCLICK: + { + return FALSE; + } + } + break; + } + } + // + return FALSE; +} + + +///////////////////////////////////////////////////////////////////// +// Member Function : OptionsInitialize +// Type : Global +// Parameters : wParam - ? +// lParam - ? +// Returns : int +// Description : Called when the user openes the options dialog +// I need to add my options page. +// References : - +// Remarks : - +// Created : 020422 , 22 April 2002 +// Developer : KN +///////////////////////////////////////////////////////////////////// + +int OptionsInitialize(WPARAM wParam,LPARAM /*lParam*/) +{ + OPTIONSDIALOGPAGE odp; + + bUnaplyedChanges = FALSE; + + ZeroMemory(&odp,sizeof(odp)); + odp.cbSize = sizeof(odp); + odp.position = 100000000; + odp.hInstance = hInstance; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_MSGEXPORT); + odp.flags = ODPF_BOLDGROUPS; + odp.pszTitle = Translate("Message export"); + odp.pszGroup = Translate("Plugins"); + odp.groupPosition = 100000000; + odp.pfnDlgProc = DlgProcMsgExportOpts; + Options_AddPage(wParam,&odp); + + + odp.position = 100000001; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_MSGEXPORT2); + odp.pszTitle = Translate("Message export2"); + odp.pfnDlgProc = DlgProcMsgExportOpts2; + Options_AddPage(wParam,&odp); + return 0; +} -- cgit v1.2.3