From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- custom_status_list/cslist.c | 1246 +++++++++++++++++++++++++++++ custom_status_list/cslist.dsp | 109 +++ custom_status_list/cslist.dsw | 29 + custom_status_list/cslist.h | 346 ++++++++ custom_status_list/cslist.ncb | Bin 0 -> 41984 bytes custom_status_list/cslist.opt | Bin 0 -> 48640 bytes custom_status_list/cslist.plg | 36 + custom_status_list/cslist.rc | 245 ++++++ custom_status_list/cslist.sln | 23 + custom_status_list/cslist.suo | Bin 0 -> 8192 bytes custom_status_list/cslist.vcproj | 415 ++++++++++ custom_status_list/cslist.vcxproj | 230 ++++++ custom_status_list/cslist.vcxproj.filters | 70 ++ custom_status_list/cslist.vcxproj.user | 3 + custom_status_list/res/add.ico | Bin 0 -> 2550 bytes custom_status_list/res/apply.ico | Bin 0 -> 2550 bytes custom_status_list/res/clear.ico | Bin 0 -> 2550 bytes custom_status_list/res/fav.ico | Bin 0 -> 2550 bytes custom_status_list/res/import.ico | Bin 0 -> 2550 bytes custom_status_list/res/main.ico | Bin 0 -> 2550 bytes custom_status_list/res/modify.ico | Bin 0 -> 2550 bytes custom_status_list/res/nochng.ico | Bin 0 -> 2550 bytes custom_status_list/res/options.ico | Bin 0 -> 2550 bytes custom_status_list/res/remove.ico | Bin 0 -> 2550 bytes custom_status_list/res/watch.ico | Bin 0 -> 2550 bytes custom_status_list/resource.h | 78 ++ 26 files changed, 2830 insertions(+) create mode 100644 custom_status_list/cslist.c create mode 100644 custom_status_list/cslist.dsp create mode 100644 custom_status_list/cslist.dsw create mode 100644 custom_status_list/cslist.h create mode 100644 custom_status_list/cslist.ncb create mode 100644 custom_status_list/cslist.opt create mode 100644 custom_status_list/cslist.plg create mode 100644 custom_status_list/cslist.rc create mode 100644 custom_status_list/cslist.sln create mode 100644 custom_status_list/cslist.suo create mode 100644 custom_status_list/cslist.vcproj create mode 100644 custom_status_list/cslist.vcxproj create mode 100644 custom_status_list/cslist.vcxproj.filters create mode 100644 custom_status_list/cslist.vcxproj.user create mode 100644 custom_status_list/res/add.ico create mode 100644 custom_status_list/res/apply.ico create mode 100644 custom_status_list/res/clear.ico create mode 100644 custom_status_list/res/fav.ico create mode 100644 custom_status_list/res/import.ico create mode 100644 custom_status_list/res/main.ico create mode 100644 custom_status_list/res/modify.ico create mode 100644 custom_status_list/res/nochng.ico create mode 100644 custom_status_list/res/options.ico create mode 100644 custom_status_list/res/remove.ico create mode 100644 custom_status_list/res/watch.ico create mode 100644 custom_status_list/resource.h (limited to 'custom_status_list') diff --git a/custom_status_list/cslist.c b/custom_status_list/cslist.c new file mode 100644 index 0000000..6a1bb84 --- /dev/null +++ b/custom_status_list/cslist.c @@ -0,0 +1,1246 @@ +/* ########################################################################## 80 + + Custom Status List + __________________ + + Custom Status List plugin for Miranda-IM (www.miranda-im.org) + Follower of Custom Status History List by HANAX + Copyright 2006,2007 HANAX + Copyright 2007,2008 jarvis + + 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. + + ---------------------------------------------------------------------------- + + File name : $URL$ + Revision : $Rev$ + Last change on : $Date$ + Last change by : $Author$ + + ---------------------------------------------------------------------------- + + + DESCRIPTION: + + Offers List of your Custom Statuses. + + ---------------------------------------------------------------------------- + + + HISTORY: + + TODO + ---- + - duplicities detection (during Import, adding, ..) + - stage 2 of code revision + - save window positions + - resetting custom status on when selected users log in + - exactly, CSList-like system + - optionally set Away/NA/DND/Occ + - saving dialog positions + - all TODOs listed in this source x) + - feature requests maybe .. + + 0.0.0.18 - fixing trip :) + -------- + - icon selector shows only icons, that are supported by installed ICQ plugin + - fixed memory leak and possible crash when modifying status and then importing 0 DB entries (helpItem not nulled) + - merged Add/Modify processes together :) + - Unicode build, finally :) + + 0.0.0.17 - I become to be useful :) + -------- + - CSList menu item can be placed elsewhere, also instead of Xstatus menu (currently ICQ eternity/PlusPlus++ mod only) + - importing statuses from database (ICQ key) + - list sorting (Procedure + calls) + - dialog openable only once :) + - new icons by inducti0n :) + - no more infinite width when adding x-message + - new Options dialog + + 0.0.0.16 - rework + -------- + - code redesigned + - fix for Windows Vista crash (free) and ANSI Windows crash (init extended controls) + - preimplementation for new features that will come (favourites, ...) + + 0.0.0.15 - make me nice + -------- + - stage 1 of code revision + - Options dialog (in development) :) + - IcoLib group renamed to CSLIST_MODULE_LONG_NAME + - status titles in Add/Modify ComboBox were strangely corrected x) + - possibility to turn off "Release Notes" dialog + + 0.0.0.14 - will you use me? :) + -------- + - new lines in message input creatable via Enter + - NULLED XSTATUS now available :) + + 0.0.0.13 - oooops x)) + -------- + - hotfix for Miranda cores < 0.7 + - CSList appears in Main Menu + - fixed icons not loaded when IcoLib is missing + + 0.0.0.12 - goin' my way now x) + -------- + - DB saving method/format slightly modified + [+] multi-line messages now working + [-] LOST compatibility with HANAX's plugin (but is auto-imported if exists) + NOTE: I think "importing-only" of older releases will stay, + I have many Feature Requests that would need changing + DB format anyway, so this problem looks solved x) + - "Release notes" dialog on first run + - Updater support + + 0.0.0.11 - will this work? x) + -------- + - some similar procedures merged together :P + - another procedures more generalized 8) + - separated Add/Modify dialog finally in use :) + [+] solves some bahaviour problems x) + + 0.0.0.10 - ohhh, basics ]:) + -------- + - icons support - complete xstatus service :) + [+] no more static angry ;) :D + - iconized buttons - supporting IcoLib :) + - better method for DB entry format - old was little.."dizzy" x) :D + - TEMPORARILY DISABLED modifying of items - needs some fixes x)) + + 0.0.0.9 - working a little? O:) + ------- + - enhanced List Control behaviour (selecting, deselecting, editation, adding) + - LOADING from + SAVING to DB! + [+] my parser is also compatible with HANAX plugin's DB entries ;) + + 0.0.0.8 - behaviour testing :o) + ------- + - setting status by double-clicking list item + - much better procedures, debugging, better exceptions, dialog behaviour + + 0.0.0.7 - crash testing :o) + ------- + - basic functions coding + + 0.0.0.6 - resource testing + ------- + - basic resources modeling + + +// ############################ INCLUDES & DEFINITIONS ###################### */ + +#include "cslist.h" + + +// ############################### MAIN ######################################## + +BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { + hInst = hinstDLL; + return TRUE; +} + + +// ########################### MIM MENU COMMAND ################################ + +static int PluginMenuCommand( WPARAM wParam, LPARAM lParam ) { + if ( !opened ) + DialogBox( hInst, MAKEINTRESOURCE( IDD_CSLIST ), NULL, ( DLGPROC )CSListProc ); + else if ( opened == 1 ) + { + opened++; + MessageBox( NULL, L"Some instance of Custom Status List is already opened.", L"Custom Status List", MB_OK ); + opened--; + } + return 0; +} + + +// ############################# PLUGIN INFO ################################### + +__declspec( dllexport ) PLUGININFOEX* MirandaPluginInfoEx( DWORD mirandaVersion ) { + gMirandaVersion = mirandaVersion; + return &pluginInfoEx; +} + +__declspec( dllexport ) PLUGININFO* MirandaPluginInfo( DWORD mirandaVersion ) { + gMirandaVersion = mirandaVersion; + return &pluginInfo; +} + + +// ############################# INTERFACES #################################### + +__declspec( dllexport ) const MUUID* MirandaPluginInterfaces( void ) { + return interfaces; +} + + +// ############################### LOADER ###################################### + +int __declspec( dllexport ) Load( PLUGINLINK *link ) { + pluginLink = link; + + { // are we running under Unicode core? + char szVer[MAX_PATH]; + + CallService( MS_SYSTEM_GETVERSIONTEXT, MAX_PATH, ( LPARAM )szVer ); + _strlwr( szVer ); // make sure it is lowercase + gbUnicodeCore = ( strstr( szVer, "unicode" ) != NULL ); + if ( !gbUnicodeCore ) + { + pluginInfoEx.flags = 0; + pluginInfo.flags = 0; + } + } + + hSvcShowList = CreateServiceFunction( MS_CSLIST_SHOWLIST, PluginMenuCommand ); + + cslist_init_icons(); + + if ( DBGetContactSettingByte( NULL, "ICQ", "XStatusEnabled", 1 ) ) + { // if xstatuses are enabled, declare, if we can use status menu or main menu only + if ( bStatusMenu = ServiceExists( MS_CLIST_ADDSTATUSMENUITEM ) ) + hHookMenuBuild = HookEvent( ME_CLIST_PREBUILDSTATUSMENU, cslist_init_menu_item ); + else + cslist_init_menu_item( 0, 0 ); + } + + hHookOnPluginsLoaded = HookEvent( ME_SYSTEM_MODULESLOADED, onPluginsLoaded ); + hHookOnOptionsInit = HookEvent( ME_OPT_INITIALISE, onOptionsInit ); + { // Katy's easter-egg :)) + hHookOnKatynkaIsLoggedIn = HookEvent( ME_DB_CONTACT_SETTINGCHANGED, cslist_KatysEasterEgg ); + } + { // fix for ANSI Windows - Add and Modify dialogs not loaded when clicking - troubles with not loaded ComboBoxEx + INITCOMMONCONTROLSEX icc; + icc.dwSize = sizeof( icc ); + icc.dwICC = ICC_USEREX_CLASSES; + InitCommonControlsEx( &icc ); + } + return 0; +} + + +// ############################## UNLOADER ##################################### + +int __declspec( dllexport ) Unload( void ) { + int i; + // unhooking, unservicing & unhandling + UnhookEvent( hHookMenuBuild ); + UnhookEvent( hHookOnPluginsLoaded ); + UnhookEvent( hHookOnOptionsInit ); + UnhookEvent( hHookOnKatynkaIsLoggedIn ); + DestroyServiceFunction( hSvcShowList ); + for ( i = 0; i < SIZEOF( cslforms ); i++ ) + cslforms[i].hIcoLibItem = NULL; + hList = NULL; + hXCombo = NULL; + hIml = NULL; + hDlg = NULL; + return 0; +} + + +// ############################# AFTER-LOADER ################################## + +static int onPluginsLoaded( WPARAM wparam, LPARAM lparam ) +{ + // updater section - needs optimalization x) + if( ServiceExists( MS_UPDATE_REGISTER ) ) + { + static Update upd = { 0 }; + +//#if defined( _UNICODE ) + static char szCurrentVersion[30]; + static char *szVersionUrl = CSLIST_UPD_VERURL; + static char *szUpdateUrl = CSLIST_UPD_UPDURL; + // todo: complete FL updating + static char *szFLVersionUrl = CSLIST_UPD_FLVERURL; + static char *szFLUpdateurl = CSLIST_UPD_FLUPDURL; +//#endif + static char *szPrefix = CSLIST_UPD_SZPREFIX; + + upd.cbSize = sizeof( upd ); + upd.szComponentName = pluginInfo.shortName; + if ( gMirandaVersion < PLUGIN_MAKE_VERSION( 0, 7, 0, 0 ) ) + upd.pbVersion = ( BYTE * )CreateVersionStringPlugin( ( PLUGININFO * )&pluginInfo, szCurrentVersion ); // updater support for < 0.7 core + else + upd.pbVersion = ( BYTE * )CreateVersionStringPluginEx( ( PLUGININFOEX * )&pluginInfoEx, szCurrentVersion ); + upd.cpbVersion = strlen( ( char * )upd.pbVersion ); + //upd.szVersionURL = szFLVersionUrl; + //upd.szUpdateURL = szFLUpdateurl; +//#if defined( _UNICODE ) + upd.pbVersionPrefix = ( BYTE * )CSLIST_UPD_SZPREFIX; +//#endif + upd.cpbVersionPrefix = strlen( ( char * )upd.pbVersionPrefix ); + + upd.szBetaUpdateURL = szUpdateUrl; + upd.szBetaVersionURL = szVersionUrl; + upd.pbVersion = szCurrentVersion; + upd.cpbVersion = lstrlenA( szCurrentVersion ); + upd.pbBetaVersionPrefix = ( BYTE * )szPrefix; + upd.cpbBetaVersionPrefix = strlen( ( char * )upd.pbBetaVersionPrefix ); + + CallService( MS_UPDATE_REGISTER, 0, ( LPARAM )&upd ); + } + // 0.8+ hotkeys service + if ( ServiceExists( MS_HOTKEY_REGISTER ) ) + { + HOTKEYDESC hotkey = { 0 }; + hotkey.cbSize = sizeof( hotkey ); + hotkey.pszName = MS_CSLIST_SHOWLIST; + hotkey.pszDescription = "Show Custom Status List"; + hotkey.pszSection = "Status"; + hotkey.pszService = MS_CSLIST_SHOWLIST; + hotkey.DefHotKey = MAKEWORD( 'L', HOTKEYF_CONTROL | HOTKEYF_SHIFT ); + CallService( MS_HOTKEY_REGISTER, 0, ( LPARAM )&hotkey ); + } + // modern toolbar + if ( ServiceExists( MS_TB_ADDBUTTON ) ) + { + TBButton button = { 0 }; + SKINICONDESC sid = { 0 }; + TCHAR szFile[MAX_PATH]; + GetModuleFileName( hInst, szFile, MAX_PATH ); + + sid.cbSize = sizeof( sid ); + sid.flags = SIDF_ALL_TCHAR; + sid.ptszSection = L"ToolBar"; + sid.ptszDefaultFile = ( TCHAR * )szFile; + sid.cx = sid.cy = 16; + + sid.pszName = "CSList_TB_Icon"; + sid.ptszDescription = L"Custom Status List"; + sid.iDefaultIndex = -IDI_CSLIST; + hMainIcon = CallService( MS_SKIN2_ADDICON, 0, ( LPARAM )&sid ); + + button.cbSize = sizeof( button ); + button.pszButtonID = MS_CSLIST_SHOWLIST; + button.pszTooltipUp = button.pszTooltipDn = button.pszButtonName = CSLIST_MODULE_LONG_NAME; + button.pszServiceName = MS_CSLIST_SHOWLIST; + button.defPos = 200; + button.tbbFlags = TBBF_SHOWTOOLTIP | TBBF_VISIBLE; + button.hPrimaryIconHandle = ( HANDLE )hMainIcon; + button.hSecondaryIconHandle = button.hPrimaryIconHandle; + CallService( MS_TB_ADDBUTTON, 0, ( LPARAM )&button ); + } + // release notes dialog + { + int relnotes, showit; + relnotes = DBGetContactSettingWord( NULL, CSLIST_MODULE_SHORT_NAME, "RelNotes", 0 ); + showit = DBGetContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "ShowRelNotes", 1 ); + if ( relnotes != CSLIST_RELNOTES && showit ) + DialogBox( hInst, MAKEINTRESOURCE(IDD_RELNOTES), NULL, ( DLGPROC )RelNotesProc ); + } + { // take care of DB entries + // not needed :) current structure allows to write them into DB when it's needed :) + } + return 0; +} + + +// ############################# OPTIONS LOADER ############################## + +int onOptionsInit( WPARAM wparam, LPARAM lparam ) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + + odp.cbSize = sizeof( odp ); + odp.position = 955000000; + odp.hInstance = hInst; + odp.pszTemplate = MAKEINTRESOURCEA( IDD_OPTIONS ); + odp.ptszTitle = TranslateTS( ( TCHAR * )CSLIST_MODULE_LONG_NAME ); + odp.pfnDlgProc = CSListOptionsProc; + odp.ptszGroup = TranslateTS( ( TCHAR * )"Status" ); + odp.flags = ODPF_BOLDGROUPS; + + CallService( MS_OPT_ADDPAGE, wparam, ( LPARAM )&odp ); + return 0; +} + + +// ############################################################################# +// ############################################################################# +// ############################################################################# +// ############################################################################# +// ############################# MAIN PROCEDURE ################################ +// ############################################################################# +// ############################################################################# +// ############################################################################# + +INT_PTR CALLBACK CSListProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + NMHDR* pnmh = 0; + hDlg = hwndDlg; + switch ( uMsg ) + { + case WM_NOTIFY: // some notifying message is sent + { + if ( wParam == IDC_CSLIST ) { + pnmh = ( NMHDR * )lParam; // TODO : optimize? maybe cleaner solution is possible (switching lParam) + // ######################## DBLCLICKING THE LIST ############################### + if ( pnmh->code == NM_DBLCLK ) { + cslist_set_status( hwndDlg ); + //cslist_clear_selection(); + goto savenexit; // stick #1 - edit: not needed ;) so TODO + // EndDialog( hwndDlg, LOWORD( wParam ) ); // OPTIONALLY: end dialog when ListItem is DblClk'd? + } + // #################### CLICKING TO SORT THE LIST ############################## + else if ( pnmh->code == LVN_COLUMNCLICK && pnmh->idFrom == IDC_CSLIST ) { + cslist_sort_list(); + } + // ######################## CLICKING THE LIST ################################## + else { + iSelect = SendMessage( hList, LVM_GETNEXTITEM, -1, LVNI_FOCUSED | LVNI_SELECTED ); // set which row is selected (cannot be only focused, but fully selected - second param ;)) + if ( iSelect == -1 ) // if no selection + flag = 0; + else + flag = 1; + EnableWindow( GetDlgItem( hDlg, IDC_MODIFY ), flag ); + EnableWindow( GetDlgItem( hDlg, IDC_REMOVE ), flag ); + break; + } + } + } + break; +// ################## INITIALIZING MAIN DIALOG ################################# + case WM_INITDIALOG: + { + int i; + char szTemp[MAX_PATH + 128]; + + opened = 1; // instance opened + // ..................................................... creating the list + hList = GetDlgItem( hwndDlg, IDC_CSLIST ); + memset( &LvCol, 0, sizeof( LvCol ) ); + hIml = ImageList_Create( 16, 16, IsWinVerXPPlus() ? ILC_COLOR32 | ILC_MASK : ILC_COLOR16 | ILC_MASK, 37, 1 ); + if ( hIml ) { + for ( i = 0; i < 37; i++ ) + { + null_snprintf( szTemp, sizeof( szTemp ), "%s_%s%d", "ICQ", "xstatus", i ); + ImageList_AddIcon( hIml, ( HANDLE )CallService( MS_SKIN2_GETICON, 0, ( LPARAM )szTemp ) ); + } + ListView_SetImageList( hList, hIml, LVSIL_SMALL ); + } + LvCol.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM; + LvCol.fmt = LVCFMT_LEFT; + LvCol.cx = 0x00; + LvCol.pszText = L""; + LvCol.cx = 0x16; + //ListView_SetExtendedListViewStyle( hList, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP ); + ListView_SetExtendedListViewStyleEx( hList, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP ); + SendMessage( hList, LVM_INSERTCOLUMN , 0, ( LPARAM )&LvCol ); + LvCol.pszText = TranslateT( "Title" ); + LvCol.cx = 0x64; + SendMessage( hList, LVM_INSERTCOLUMN, 1, ( LPARAM )&LvCol ); + LvCol.pszText = TranslateT( "Message" ); + LvCol.cx = 0xa8; + SendMessage( hList, LVM_INSERTCOLUMN, 2, ( LPARAM )&LvCol ); + memset( &LvItem, 0, sizeof( LvItem ) ); + + // ................................................ load + sort list items + cslist_initialize_list_content( hwndDlg ); + cslist_sort_list(); + + // ............................................. creating iconized buttons + for ( i = 0; i < SIZEOF( cslforms ); i++ ) + { + if ( cslforms[i].idc < 0 ) + continue; + SendDlgItemMessage( hwndDlg, cslforms[i].idc, BM_SETIMAGE, IMAGE_ICON, ( LPARAM )LoadIconExEx( cslforms[i].iconIcoLib, cslforms[i].iconNoIcoLib ) ); + SendDlgItemMessage( hwndDlg, cslforms[i].idc, BUTTONSETASFLATBTN, 0, 0 ); //maybe set as BUTTONSETDEFAULT? + SendDlgItemMessage( hwndDlg, cslforms[i].idc, BUTTONADDTOOLTIP, ( WPARAM )TranslateTS( cslforms[i].title ), BATF_TCHAR ); + } + SetWindowText( hwndDlg, TranslateT( "Custom Status List" ) ); + } + break; +// ######################## COMMANDS ########################################### + case WM_COMMAND: + switch ( LOWORD( wParam ) ) + { + //case IDC_CSLIST: TODO: deselection +// ------------------------- EXITING THE LIST ---------------------------------- +savenexit: // stick #1 + case IDC_NOCHNG: // save, no status change and close + case IDCANCEL: // save, no status change and close + case IDOK: // not used + case IDC_APPLY: // save, set selected and close + case IDC_EXIT: // save, set nulled status and close + if ( ( LOWORD( wParam ) ) == IDC_APPLY ) //set selected status + cslist_set_status( hwndDlg ); + else if ( ( LOWORD( wParam ) ) == IDC_EXIT ) + { // set null status + ICQ_CUSTOM_STATUS helpStatus; + int icon = 0; + char* title = ""; + char* message = ""; + helpStatus.cbSize = sizeof( ICQ_CUSTOM_STATUS ); + helpStatus.flags = CSSF_MASK_STATUS | CSSF_MASK_NAME | CSSF_MASK_MESSAGE; + helpStatus.status = &icon; + helpStatus.ptszName = ( TCHAR * )title; + helpStatus.ptszMessage = ( TCHAR * )message; + CallService( PS_ICQ_SETCUSTOMSTATUSEX, 0, ( LPARAM )&helpStatus ); + } + flag = 0; + iSelect = -1; + if ( bChanged ) cslist_save_list_content( hwndDlg ); + ListView_DeleteAllItems( hList ); + bChanged = 0; + opened = 0; // closing instance + EndDialog( hwndDlg, LOWORD( wParam ) ); + break; +// -------------------------- OPTIONS BUTTON ----------------------------------- + case IDC_OPTS: + DialogBox( hInst, MAKEINTRESOURCE( IDD_OPTIONS ), hwndDlg, ( DLGPROC )CSListOptionsProc ); + break; +// --------------------- ADDING/MODIFYING ITEM -------------------------------- + case IDC_MODIFY: + action = 1; + case IDC_ADD: + { + DialogBox( hInst, MAKEINTRESOURCE( IDD_ADDMODIFY ), hwndDlg, ( DLGPROC )CSListAddModifyProc ); + if ( AMResult == 1 ) + { + if ( action == 1 ) + { + ModifiedPos = iSelect; + cslist_modify_item(); + ModifiedPos = -1; + } + else + { + cslist_add_item(); + } + AMResult = 0; + bChanged = 1; + } + action = 0; + cslist_clear_help_item(); + cslist_sort_list(); + } + break; +// ----------------- REMOVING ITEM FROM THE LIST ------------------------------- + case IDC_REMOVE: + { + cslist_remove_item(); + bChanged = 1; + } + break; + case IDC_IMPORT: + cslist_import_statuses_from_icq(); + break; + } + break; + } + return FALSE; +} + +// ############################################################################# +// ########################### END OF MAIN PROCEDURE ########################### +// ############################################################################# +// ############################################################################# +// ########################## ADD/MODIFY DLG PROCEDURE ######################### +// ############################################################################# + +INT_PTR CALLBACK CSListAddModifyProc( HWND hwndAMDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + switch ( uMsg ) + { + case WM_INITDIALOG: + { + // .........................................creating comboboxex for xicons + // TODO: changing statics and dialog title in order of action :) + int i, maxCount; + if ( action ^ 1 ) // action == 1 + { + SetWindowText( hwndAMDlg, TranslateT( "Add new item" ) ); + SetDlgItemText( hwndAMDlg, IDC_AM_OK, TranslateT( "Add" ) ); + } + else + { + SetWindowText( hwndAMDlg, TranslateT( "Modify selected item" ) ); + SetDlgItemText( hwndAMDlg, IDC_AM_OK, TranslateT( "Modify" ) ); + } + SetDlgItemText( hwndAMDlg, IDC_AM_CN, TranslateT( "Cancel" ) ); + SetDlgItemText( hwndAMDlg, IDC_ST_XICON, TranslateT( "Icon:" ) ); + SetDlgItemText( hwndAMDlg, IDC_ST_XTITLE, TranslateT( "Title:" ) ); + SetDlgItemText( hwndAMDlg, IDC_ST_XMESSAGE, TranslateT( "Message:" ) ); + + hXCombo = GetDlgItem( hwndAMDlg, IDC_CB_ICON ); + SendMessage( hXCombo, CBEM_SETIMAGELIST, 0, ( LPARAM )hIml ); + ZeroMemory( &CbItem, sizeof( CbItem ) ); + + if ( DBGetContactSettingByte( NULL, "ICQ", "NonStandartXstatus", 0 ) ) + maxCount = SIZEOF( xstatuses ); + else + maxCount = 32; + for ( i = 0; i < maxCount; i++ ) + { + CbItem.mask = CBEIF_IMAGE | CBEIF_TEXT | CBEIF_SELECTEDIMAGE; + CbItem.pszText = TranslateTS( xstatuses[i].xname ); + CbItem.iImage = i; // or xstatuses[i].xnum? x) + CbItem.iItem = i; + CbItem.iSelectedImage = i; + SendMessage( hXCombo, CBEM_INSERTITEM, 0, ( LPARAM )&CbItem ); + } + SendMessage( hXCombo, CB_SETCURSEL, 0, 0 ); // first zero sets selection to top + if ( action == 1 ) // modifying + { + // get values from selection.. + LvItem.iItem = iSelect; + LvItem.iSubItem = 0; + ListView_GetItem( hList, &LvItem ); + ListView_GetItemText( hList, iSelect, 1, helpItem.ItemTitle, CSLIST_XTITLE_LIMIT ); + ListView_GetItemText( hList, iSelect, 2, helpItem.ItemMessage, CSLIST_XMESSAGE_LIMIT ); + // ..and send them to edit controls + SendMessage( hXCombo, CB_SETCURSEL, LvItem.iImage, 0 ); + SetDlgItemText( hwndAMDlg, IDC_XTITLE, helpItem.ItemTitle ); + SetDlgItemText( hwndAMDlg, IDC_XMESSAGE, helpItem.ItemMessage ); + } + } + break; + case WM_COMMAND: + { + switch ( LOWORD( wParam ) ) + { + case IDC_XTITLE: + if ( ( HIWORD( wParam ) == EN_CHANGE ) ) + { + if ( GetWindowTextLength( GetDlgItem( hwndAMDlg, IDC_XTITLE ) ) > CSLIST_XTITLE_LIMIT ) + SendDlgItemMessage( hwndAMDlg, IDC_XTITLE, WM_APP, ( WPARAM )Translate( "Warning" ), ( LPARAM )Translate( "This field do not accept string longer than 64 characters. String will be truncated." ) ); + else + SendDlgItemMessage( hwndAMDlg, IDC_XTITLE, WM_APP, 0, 0 ); + } + break; + case IDC_XMESSAGE: + if ( ( HIWORD( wParam ) == EN_CHANGE ) ) + { + if ( GetWindowTextLength( GetDlgItem( hwndAMDlg, IDC_XMESSAGE ) ) > CSLIST_XMESSAGE_LIMIT ) + SendDlgItemMessage( hwndAMDlg, IDC_XMESSAGE, WM_APP, ( WPARAM )Translate( "Warning" ), ( LPARAM )Translate( "This field do not accept string longer than 2048 characters. String will be truncated." ) ); + else + SendDlgItemMessage( hwndAMDlg, IDC_XMESSAGE, WM_APP, 0, 0 ); + } + break; + case IDOK: + case IDC_AM_OK: + cslist_AM_set_help_item( hwndAMDlg ); + AMResult = 1; + EndDialog( hwndAMDlg, LOWORD( wParam ) ); + break; + case IDCANCEL: + case IDC_AM_CN: + AMResult = 0; + EndDialog( hwndAMDlg, LOWORD( wParam ) ); + break; + } + } + break; + } + return FALSE; +} + + +// ############################################################################# +// ####################### END OF ADD/MODIFY DLG PROCEDURE ##################### +// ############################################################################# +// ############################ OPTIONS DLG PROCEDURE ########################## +// ############################################################################# + +BOOL CALLBACK CSListOptionsProc( HWND hwndOptsDlg, UINT msg, WPARAM wparam, LPARAM lparam ) +{ + // WORD flags = DBGetContactSettingWord( NULL, MODULENAME, "flags", default_flags ); + // EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL ), 1 ); + // IsDlgButtonChecked( hwndRNDlg, IDC_SHOWIT ) + // CheckDlgButton(hwndDlg, IDC_META, DBGetContactSettingByte(NULL,"CLC","Meta",SETTING_USEMETAICON_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); /// by FYR + + switch ( msg ) + { + case WM_INITDIALOG: + { + int hideCS = DBGetContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "hideCS", 0 ); + int place = DBGetContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "placement", 11 ); + CheckDlgButton( hwndOptsDlg, IDC_HIDE_CSMENU, hideCS ? BST_CHECKED : BST_UNCHECKED ); + switch ( place ) { + case 0: + case 1: + case 11: + case 12: + CheckDlgButton( hwndOptsDlg, IDC_PLACE_GLOBAL, 1 ); + EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL_TOP ), 1 ); + EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL_BOTTOM ), 1 ); + break; + case 2: + CheckDlgButton( hwndOptsDlg, IDC_PLACE_ICQ_STATUS, 1 ); + break; + case 3: + CheckDlgButton( hwndOptsDlg, IDC_PLACE_MAIN, 1 ); + break; + } + switch ( place ) { + case 0: + case 1: + case 11 : + CheckDlgButton( hwndOptsDlg, IDC_PLACE_GLOBAL_TOP, 1 ); + break; + case 12 : + CheckDlgButton( hwndOptsDlg, IDC_PLACE_GLOBAL_BOTTOM, 1 ); + break; + } + } + break; + + case WM_COMMAND: + { + switch ( LOWORD( wparam ) ) + { + case IDC_PLACE_GLOBAL: + EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL_TOP ), 1 ); + EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL_BOTTOM ), 1 ); + break; + case IDC_PLACE_ICQ_STATUS: + case IDC_PLACE_MAIN: + EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL_TOP ), 0 ); + EnableWindow( GetDlgItem( hwndOptsDlg, IDC_PLACE_GLOBAL_BOTTOM ), 0 ); + break; + case IDOK: + case IDCANCEL: + { + int place, hideCS; + hideCS = IsDlgButtonChecked( hwndOptsDlg, IDC_HIDE_CSMENU ); + DBWriteContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "hideCS", hideCS ); + if( IsDlgButtonChecked( hwndOptsDlg, IDC_PLACE_GLOBAL ) ) + { + if ( IsDlgButtonChecked( hwndOptsDlg, IDC_PLACE_GLOBAL_TOP ) ) + place = 11; + else if ( IsDlgButtonChecked( hwndOptsDlg, IDC_PLACE_GLOBAL_BOTTOM ) ) + place = 12; + else + place = 11; + } + else if ( IsDlgButtonChecked( hwndOptsDlg, IDC_PLACE_ICQ_STATUS ) ) + place = 2; + else if ( IsDlgButtonChecked( hwndOptsDlg, IDC_PLACE_MAIN ) ) + place = 3; + if ( place != DBGetContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "placement", 0 ) ) + DBWriteContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "placement", place ); + } + EndDialog( hwndOptsDlg, LOWORD( wparam ) ); + break; + } + } + break; + } + return 0; +} + + +// ############################################################################# +// ######################## END OF OPTIONS DLG PROCEDURE ####################### +// ############################################################################# +// ############################# LIST SORT PROCEDURE ########################### +// ############################################################################# + +static int CALLBACK CSListSortProc( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort ) +{ + LVITEM first, second; + + first.mask = LVIF_IMAGE; + first.iItem = lParam1; + first.iSubItem = lParamSort; + + second.mask = LVIF_IMAGE; + second.iItem = lParam2; + second.iSubItem = lParamSort; + + ListView_GetItem( hList, &first ); + ListView_GetItem( hList, &second ); + + if ( first.iImage > second.iImage ) return 1; + else if ( first.iImage < second.iImage ) return -1; + else return 0; +} + + +// ############################################################################# +// ########################## END OF LIST SORT PROCEDURE ####################### +// ############################################################################# +// ######################## RELEASE NOTES DIALOG PROCEDURE ##################### +// ############################################################################# + +INT_PTR CALLBACK RelNotesProc( HWND hwndRNDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + switch ( uMsg ) + { + case WM_INITDIALOG: + { + SetDlgItemText( hwndRNDlg, IDC_TXHTEXT, rnthanks ); + } + break; + case WM_COMMAND: + { + switch ( LOWORD( wParam ) ) + { + case IDOK: + case IDCANCEL: + { + int showit; + showit = IsDlgButtonChecked( hwndRNDlg, IDC_SHOWIT ) ? 1 : 0; + DBWriteContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "ShowRelNotes", !showit ); + DBWriteContactSettingWord( NULL, CSLIST_MODULE_SHORT_NAME, "RelNotes", CSLIST_RELNOTES ); + EndDialog( hwndRNDlg, LOWORD( wParam ) ); + } + break; + } + } + break; + } + return FALSE; +} + + +// ############################################################################# +// #################### END OF RELEASE NOTES DIALOG PROCEDURE ################## +// ############################################################################# + +// ############################# HELP FUNCTIONS ################################ + +int null_snprintf( char *buffer, size_t count, const char* fmt, ... ) // deprecated? O_o +{ + va_list va; + int len; + + ZeroMemory( buffer, count ); + va_start( va, fmt ); + len = mir_vsnprintf( buffer, count - 1, fmt, va ); + va_end( va ); + return len; +} + +static int cslist_init_menu_item( WPARAM wParam, LPARAM lParam ) +{ + CLISTMENUITEM mi = { 0 }; + int miPlacement = 3; + if ( hHookMenuBuild != NULL ) + miPlacement = DBGetContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "placement", 11 ); + ZeroMemory( &mi, sizeof( mi ) ); + mi.cbSize = sizeof( mi ); + mi.position = -0x7FFFFFFF; // top + mi.flags = 0; + mi.hIcon = LoadIconExEx( "csl_icon", IDI_CSLIST ); + mi.ptszName = TranslateTS( ( TCHAR * )"Custom Status List..." ); + mi.pszService = "CSList/ShowList"; + mi.pszContactOwner = "ICQ"; + if ( miPlacement == 12 ) mi.position = 2000040000; // bottom + else if ( miPlacement == 2 ) { + int protoCount; + PROTOCOLDESCRIPTOR** pdesc; + CallService(MS_PROTO_ENUMPROTOCOLS,(WPARAM)&protoCount,(LPARAM)&pdesc); + if ( protoCount > 1 ) mi.ptszPopupName = ( TCHAR * )"ICQ"; + } + switch ( miPlacement ) { + case 0 : // obsolete I think :)) + case 1 : + case 11: + case 12: + case 2: + if( DBGetContactSettingByte( NULL, CSLIST_MODULE_SHORT_NAME, "hideCS", 0 ) ) + { + mi.position = 00000001; // when hiding CSMenu, move to its place + mi.ptszName = TranslateTS( ( TCHAR * )"Custom status" ); + } + CallService( MS_CLIST_ADDSTATUSMENUITEM, 0, ( LPARAM )&mi ); + break; + case 3: // add to main menu + CallService( MS_CLIST_ADDMAINMENUITEM, 0, ( LPARAM )&mi ); + break; + //case 2: // add to tray menu + // CallService( "CList/AddTrayMenuItem", 0, ( LPARAM )&mi ); + // break; + } + return 0; +} + +// dialog box ANSI or Unicode? + + +// ################## COMMANDS OF CSLIST ####################################### + +int cslist_add_item() +{ // final adding with helpItem + int iItem; + +// -------------------------------------------------------- define list style -- + if ( ModifiedPos >= 0 ) + iItem = ModifiedPos; + else + iItem = SendMessage( hList, LVM_GETITEMCOUNT, 0, 0 ); + memset( &LvItem, 0, sizeof( LvItem ) ); + LvItem.mask = LVIF_TEXT | LVIF_IMAGE; + + LvItem.cchTextMax = 256; + LvItem.iItem = iItem; +// -------------------------------------------------------------------- first -- + LvItem.iSubItem = 0; + LvItem.iImage = helpItem.ItemIcon; // use selected xicon + + SendMessage( hList, LVM_INSERTITEM, 0, ( LPARAM )&LvItem ); +// ------------------------------------------------------------------- second -- + + LvItem.iSubItem = 1; + LvItem.pszText = helpItem.ItemTitle; + SendMessage( hList, LVM_SETITEM, 0, ( LPARAM )&LvItem ); +// -------------------------------------------------------------------- third -- + LvItem.iSubItem = 2; + LvItem.pszText = helpItem.ItemMessage; + SendMessage( hList, LVM_SETITEM, 0, ( LPARAM )&LvItem ); +// --------------------------------------------------------------------- end --- + cslist_clear_selection(); + return 0; +} + +int cslist_modify_item() +{ + if ( ModifiedPos < 0 ) + return FALSE; + memset( &LvItem, 0, sizeof( LvItem ) ); + LvItem.mask = LVIF_TEXT | LVIF_IMAGE; + LvItem.cchTextMax = 256; + LvItem.iItem = ModifiedPos; + LvItem.iSubItem = 0; + LvItem.iImage = helpItem.ItemIcon; + SendMessage( hList, LVM_SETITEM, 0, ( LPARAM )&LvItem ); + LvItem.iSubItem = 1; + LvItem.pszText = helpItem.ItemTitle; + SendMessage( hList, LVM_SETITEM, 0, ( LPARAM )&LvItem ); + LvItem.iSubItem = 2; + LvItem.pszText = helpItem.ItemMessage; + SendMessage( hList, LVM_SETITEM, 0, ( LPARAM )&LvItem ); + return TRUE; +} + +int cslist_remove_item() +{ + if ( flag ) SendMessage( hList, LVM_DELETEITEM, iSelect, 0 ); + cslist_clear_selection(); + return 0; +} + +int cslist_AM_set_help_item(HWND hwndAMDlg) +{ + // get and set helpItem xicon + ZeroMemory( &CbItem, sizeof( CbItem ) ); + CbItem.mask = CBEIF_IMAGE | CBEIF_TEXT; + CbItem.iItem = SendDlgItemMessage( hwndAMDlg, IDC_CB_ICON, CB_GETCURSEL, 0, 0 ); + SendDlgItemMessage( hwndAMDlg, IDC_CB_ICON, CBEM_GETITEM, 0, ( LPARAM )&CbItem ); + helpItem.ItemIcon = CbItem.iImage; + + GetDlgItemText( hwndAMDlg, IDC_XTITLE, helpItem.ItemTitle, CSLIST_XTITLE_LIMIT ); // set helpItem xtitle + GetDlgItemText( hwndAMDlg, IDC_XMESSAGE, helpItem.ItemMessage, CSLIST_XMESSAGE_LIMIT ); // set helpItem xmessage + return 0; +} + + +// ################## SERVICES FOR CSLIST ###################################### + +void cslist_clear_selection() { + flag = 0; + iSelect = -1; + SendMessage( hList, LVM_SETITEMSTATE, -1, 0 ); + //SendMessage( hList, LVM_GETNEXTITEM, -1, LVNI_FOCUSED | LVNI_SELECTED ); +} + +void cslist_clear_help_item() { + ZeroMemory( &helpItem, sizeof( helpItem ) ); +} + +void cslist_sort_list() { + ListView_SortItemsEx( hList, CSListSortProc, (LPARAM)0 ); +} + +void cslist_import_statuses_from_icq() { + int i, result; + result = MessageBox( hDlg, L"Do you want to delete those DB entries after Import?", L"Custom Status List", MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION ); + for ( i = 0; i < 37; i++ ) + { + DBVARIANT dbv = { 0 }; + char bufName[64], bufMsg[64]; + cslist_clear_help_item( ); + mir_snprintf( bufName, 32, "XStatus%luName", i ); + mir_snprintf( bufMsg, 32, "XStatus%luMsg", i ); + helpItem.ItemIcon = i - 1; + DBGetContactSettingTString( NULL, "ICQ", bufName, &dbv ); + lstrcpy( helpItem.ItemTitle, dbv.ptszVal ); + DBGetContactSettingTString( NULL, "ICQ", bufMsg, &dbv ); + lstrcpy( helpItem.ItemMessage, dbv.ptszVal ); + if ( lstrlen( helpItem.ItemTitle ) || lstrlen( helpItem.ItemMessage ) ) + cslist_add_item(); + if ( result == IDYES ) + { + DBDeleteContactSetting( NULL, "ICQ", bufName ); + DBDeleteContactSetting( NULL, "ICQ", bufMsg ); + } + } + cslist_sort_list(); + bChanged = 1; +} + +int cslist_KatysEasterEgg( WPARAM wParam, LPARAM lParam ) +{ + DBCONTACTWRITESETTING *cws = ( DBCONTACTWRITESETTING* )lParam; + if ( ( HANDLE )wParam == NULL || lstrcmpA( cws->szSetting, "Status" ) ) + return 0; + if ( ( DBGetContactSettingDword( ( HANDLE )wParam, "ICQ", "UIN", 0 ) == 0x1831BA1A ) && + ( DBGetContactSettingWord( ( HANDLE )wParam, "UserOnline", "OldStatus2", 0 ) == ID_STATUS_OFFLINE ) && + ( cws->value.wVal > ID_STATUS_OFFLINE ) ) + { + ICQ_CUSTOM_STATUS helpStatus; + int icon = 0; + char * title = ""; + char * message = ""; + helpStatus.cbSize = sizeof( ICQ_CUSTOM_STATUS ); + helpStatus.flags = CSSF_MASK_STATUS | CSSF_MASK_NAME | CSSF_MASK_MESSAGE; + helpStatus.status = &icon; + helpStatus.ptszName = ( TCHAR * )title; + helpStatus.ptszMessage = ( TCHAR * )message; + CallService( PS_ICQ_SETCUSTOMSTATUSEX, 0, ( LPARAM )&helpStatus ); + } + return 0; +} + +// ################## DB - LOAD AND SAVE ####################################### + +int cslist_initialize_list_content( HWND hwndDlg ) +{ + // get DB string, parse to statuses, add by helpItem + DBVARIANT dbv = { DBVT_TCHAR }; + int parseResult; + int dbLoadResult; + const TCHAR* rowDelim = L""; // new line + TCHAR *row = NULL; + + dbLoadResult = DBGetContactSettingTString( NULL, CSLIST_MODULE_SHORT_NAME, "listhistory", &dbv ); + if ( dbv.ptszVal ) + { + row = tcstok( dbv.ptszVal, rowDelim ); + while( row != NULL ) { + // process current row.. + parseResult = cslist_parse_row( row ); + // ..add item.. + if ( parseResult == TRUE ) cslist_add_item(); + // ..and go to the other, while some remains + row = tcstok( NULL, rowDelim ); + } + } + //free( rowDelim ); + //free( row ); + return 0; +} + +int cslist_parse_row( TCHAR *row ) // parse + helpItem +{ + int pIconInt; + TCHAR pIcon[4], pTitle[CSLIST_XTITLE_LIMIT+2], pMsg[CSLIST_XMESSAGE_LIMIT+2], pFav[4]; + +#if defined( _UNICODE ) + if ( swscanf( row, L"%2[^]%64[^]%2048[^]%2[^]", &pIcon, &pTitle, &pMsg, &pFav ) == 4 ) // PLEASE!! x) use DEFs xO +#else + if ( sscanf( row, "%2[^]%64[^]%2048[^]%2[^]", pIcon, pTitle, pMsg, pFav ) == 4 ) // PLEASE!! x) use DEFs xO +#endif + { +#if defined( _UNICODE ) + pIconInt = _wtoi( pIcon ); +#else + pIconInt = atoi( pIcon ); +#endif + helpItem.ItemIcon = pIconInt; + lstrcpy( helpItem.ItemTitle, pTitle ); + lstrcpy( helpItem.ItemMessage, pMsg ); + } +#if defined( _UNICODE ) + else if ( swscanf( row, L"%2[^]%2048[^]%2[^]", &pIcon, &pMsg, &pFav ) == 3 ) +#else + else if ( sscanf( row, "%2[^]%2048[^]%2[^]", pIcon, pMsg, pFav ) == 3 ) +#endif + { +#if defined( _UNICODE ) + pIconInt = _wtoi( pIcon ); +#else + pIconInt = atoi( pIcon ); +#endif + helpItem.ItemIcon = pIconInt; + lstrcpy( helpItem.ItemTitle, L"" ); + lstrcpy( helpItem.ItemMessage, pMsg ); + } +#if defined( _UNICODE ) + else if ( swscanf( row, L"%2[^]%64[^]%2[^]", &pIcon, &pTitle, &pFav ) == 3 ) +#else + else if ( sscanf( row, "%2[^]%64[^]%2[^]", pIcon, pTitle, pFav ) == 3 ) +#endif + { +#if defined( _UNICODE ) + pIconInt = _wtoi( pIcon ); +#else + pIconInt = atoi( pIcon ); +#endif + helpItem.ItemIcon = pIconInt; + lstrcpy( helpItem.ItemTitle, pTitle ); + lstrcpy( helpItem.ItemMessage, L"" ); + } +//#if defined( _UNICODE ) +// else if( swscanf( row, L"%2[^]%2[^]", &pIcon, &pFav ) == 2 ) +//#else +// else if( sscanf( row, "%2[^]%2[^]", pIcon, pFav ) == 2 ) +//#endif +// { +//#if defined( _UNICODE ) +// pIconInt = _wtoi( pIcon ); +//#else +// pIconInt = atoi( pIcon ); +//#endif +// helpItem.ItemIcon = pIconInt; +// lstrcpy( helpItem.ItemTitle, "" ); +// lstrcpy( helpItem.ItemMessage, "" ); +// } // why allow empty xstatuses? O_o + else { + //free(row); + //free(pIcon); + //free(pTitle); + //free(pMsg); + //free(pFav); + return FALSE; + } + //free(row); + //free(pIcon); + //free(pTitle); + //free(pMsg); + //free(pFav); + return TRUE; +} + + +int cslist_save_list_content( HWND hwndDlg ) +{ + TCHAR cImageToString[64]; + int i = 0; + LPTSTR dbString = { 0 }; + TCHAR dbStringTmp[65536]; + lstrcpy( dbStringTmp, L"" ); // set to empty - caused "dizzy" string begin x) O_o + lstrcpy( cImageToString, L"" ); + for ( i = 0; i < ListView_GetItemCount( hList ); i++ ) + { + // insert xint to string + LvItem.iItem = i; + LvItem.iSubItem = 0; + ListView_GetItem( hList, &LvItem ); + tcprintf( cImageToString, 8, L"%d", LvItem.iImage ); + lstrcat( dbStringTmp, cImageToString ); + lstrcpy( cImageToString, L"" ); + lstrcat( dbStringTmp, L"" ); + ListView_GetItemText( hList, i, 1, helpItem.ItemTitle, CSLIST_XTITLE_LIMIT ); + if ( wcslen( helpItem.ItemTitle ) > 0 ) lstrcat( dbStringTmp, helpItem.ItemTitle ); + lstrcat( dbStringTmp, L"" ); + ListView_GetItemText( hList, i, 2, helpItem.ItemMessage, CSLIST_XMESSAGE_LIMIT ); + if ( wcslen( helpItem.ItemMessage ) > 0 ) lstrcat( dbStringTmp, helpItem.ItemMessage ); + lstrcat( dbStringTmp, L"0" ); + } + dbString = dbStringTmp; + // save to DB + DBWriteContactSettingTString( NULL, CSLIST_MODULE_SHORT_NAME, "listhistory", dbString ); + free( dbString ); + free( dbStringTmp ); + lstrcpy( helpItem.ItemTitle, L"" ); + lstrcpy( helpItem.ItemMessage, L"" ); + return 0; +} + + +// ######################### CREATING DIALOG ################################### + +int cslist_set_status( HWND hwndDlg ) +{ + ICQ_CUSTOM_STATUS helpStatus; + memset( &helpStatus, 0, sizeof( helpStatus ) ); + helpStatus.cbSize = sizeof( ICQ_CUSTOM_STATUS ); + helpStatus.flags = CSSF_MASK_STATUS | CSSF_MASK_NAME | CSSF_MASK_MESSAGE | CSSF_UNICODE; + iSelect = SendMessage( hList, LVM_GETNEXTITEM, -1, LVNI_FOCUSED | LVNI_SELECTED ); // set which row is selected + if ( iSelect == -1 ) // no status selected + flag = 0; + else + { // else get values from selection + LvItem.iItem = iSelect; + LvItem.iSubItem = 0; + ListView_GetItem( hList, &LvItem ); + helpItem.ItemIcon = LvItem.iImage; // TODO: get xicon int and set .. + ListView_GetItemText( hList, iSelect, 1, helpItem.ItemTitle, CSLIST_XTITLE_LIMIT ); + ListView_GetItemText( hList, iSelect, 2, helpItem.ItemMessage, CSLIST_XMESSAGE_LIMIT ); + // ..and set xstatus + helpItem.ItemIcon++; // need revision of redirected xstatus numbers xo) + helpStatus.status = &helpItem.ItemIcon; + helpStatus.ptszName = helpItem.ItemTitle; + helpStatus.ptszMessage = helpItem.ItemMessage; + CallService( PS_ICQ_SETCUSTOMSTATUSEX, 0, ( LPARAM )&helpStatus ); // f**king function, 4 hours of thinking xDD + // ..and clean helper + selection + cslist_clear_selection(); + } + return 0; +} + +void cslist_init_icons( void ) +{ + int i; + SKINICONDESC sid = { 0 }; + char szFile[MAX_PATH]; + GetModuleFileNameA( hInst, szFile, MAX_PATH ); + + sid.cbSize = sizeof( SKINICONDESC ); + sid.ptszDefaultFile = ( TCHAR * )szFile; + sid.cx = sid.cy = 16; + sid.ptszSection = TranslateTS( CSLIST_MODULE_LONG_NAME ); + + for ( i = 0; i < SIZEOF( cslforms ); i++ ) + { + char szSettingName[64]; + mir_snprintf( szSettingName, sizeof( szSettingName ), "%s_%s", CSLIST_MODULE_SHORT_NAME, cslforms[i].iconIcoLib ); + sid.pszName = szSettingName; + sid.ptszDescription = TranslateTS( cslforms[i].szDescr ); + sid.iDefaultIndex = -cslforms[i].iconNoIcoLib; + cslforms[i].hIcoLibItem = ( HANDLE )CallService( MS_SKIN2_ADDICON, 0, ( LPARAM )&sid ); + } +} + + +// ######################### OTHER FUNCTIONS ################################### + +HICON LoadIconExEx( const char* IcoLibName, int NonIcoLibIcon ) +{ + if ( ServiceExists( MS_SKIN2_GETICON ) ) { + char szSettingName[64]; + mir_snprintf( szSettingName, sizeof( szSettingName ), "%s_%s", CSLIST_MODULE_SHORT_NAME, IcoLibName ); + return ( HICON )CallService( MS_SKIN2_GETICON, 0, ( LPARAM )szSettingName ); + } + else + return ( HICON )LoadImage( hInst, MAKEINTRESOURCE( NonIcoLibIcon ), IMAGE_ICON, 0, 0, 0 ); +} + + +/* ########################################################################## 80 + + Custom Status List + __________________ + + by jarvis + +// ############################################################ 2008/01/28 ## */ diff --git a/custom_status_list/cslist.dsp b/custom_status_list/cslist.dsp new file mode 100644 index 0000000..277c030 --- /dev/null +++ b/custom_status_list/cslist.dsp @@ -0,0 +1,109 @@ +# Microsoft Developer Studio Project File - Name="cslist" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=CSLIST - WIN32 RELEASE +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "cslist.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "cslist.mak" CFG="CSLIST - WIN32 RELEASE" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "cslist - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CSLIST_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CSLIST_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /i "../../include/" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../../bin/release/plugins/cslist.dll" +# Begin Target + +# Name "cslist - Win32 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\cslist.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\cslist.h +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\res\add.ico +# End Source File +# Begin Source File + +SOURCE=.\res\cancel.ico +# End Source File +# Begin Source File + +SOURCE=.\cslist.rc +# End Source File +# Begin Source File + +SOURCE=.\res\delete.ico +# End Source File +# Begin Source File + +SOURCE=.\res\edit.ico +# End Source File +# Begin Source File + +SOURCE=.\res\follow_status_changes.ico +# End Source File +# Begin Source File + +SOURCE=.\res\ok.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/custom_status_list/cslist.dsw b/custom_status_list/cslist.dsw new file mode 100644 index 0000000..ac3de9c --- /dev/null +++ b/custom_status_list/cslist.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "cslist"=".\cslist.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/custom_status_list/cslist.h b/custom_status_list/cslist.h new file mode 100644 index 0000000..da3cc26 --- /dev/null +++ b/custom_status_list/cslist.h @@ -0,0 +1,346 @@ +// ############################ INCLUDES & DEFINITIONS ######################### + +#ifndef __CSLIST_H +#define __CSLIST_H 1 + +#if defined( UNICODE ) && !defined( _UNICODE ) + #define _UNICODE +#endif + +#include +//#include // already in windows.h +#include +#include +#if defined( _UNICODE ) + #include + #include + #include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +#include "resource.h" + +#define MIID_STATUSLIST { 0x8b86253, 0xec6e, 0x4d09, { 0xb7, 0xa9, 0x64, 0xac, 0xdf, 0x6, 0x27, 0xb8 } } + +#define CSLIST_RELNOTES 19 // actual eternity relnotes +#define CSLIST_TESTING "1" +#define CSLIST_XTITLE_LIMIT 64 // limit of chars for x-status title +#define CSLIST_XMESSAGE_LIMIT 2048 // limit of chars for x-status message + +#define CSLIST_MODULE_LONG_NAME "Custom Status List" +#define CSLIST_MODULE_SHORT_NAME "CSList" + +// updater strings + +#define CSLIST_UPD_VERURL "http://dev.mirandaim.ru/~jarvis/" +#define CSLIST_UPD_UPDURL "http://mirandapack.ic.cz/eternity_plugins/cslist.zip" +#define CSLIST_UPD_FLVERURL "http://addons.miranda-im.org/details.php?action=viewfile&id=3483" +#define CSLIST_UPD_FLUPDURL "http://addons.miranda-im.org/feed.php?dlfile=3483" +#define CSLIST_UPD_SZPREFIX "Custom Status List " + +// services + +#define MS_CLIST_ADDSTATUSMENUITEM "CList/AddStatusMenuItem" +#define ME_CLIST_PREBUILDSTATUSMENU "CList/PreBuildStatusMenu" +#define PS_ICQ_SETCUSTOMSTATUSEX "ICQ/SetXStatusEx" +#define MS_CSLIST_SHOWLIST "CSList/ShowList" + +// status flags + +#define CSSF_MASK_STATUS 0x0001 // status member valid for set/get +#define CSSF_MASK_NAME 0x0002 // pszName member valid for set/get +#define CSSF_MASK_MESSAGE 0x0004 // pszMessage member valid for set/get +#define CSSF_DISABLE_UI 0x0040 // disable default custom status UI, wParam = bEnable +#define CSSF_DEFAULT_NAME 0x0080 // only with CSSF_MASK_NAME and get API to get default custom status name (wParam = status) +#define CSSF_STATUSES_COUNT 0x0100 // returns number of custom statuses in wParam, only get API +#define CSSF_STR_SIZES 0x0200 // returns sizes of custom status name & message (wParam & lParam members) in chars +#if defined( _UNICODE ) + #define CSSF_UNICODE 0x1000 // strings are in Unicode +#else + #define CSSF_UNICODE 0x0000 +#endif + +#if defined( _UNICODE ) + #define tcstok( x, y ) wcstok( x, y ) + #define tcprintf( a, b, c, d ) swprintf( a, b, c, d ) +#else + #define tcstok( x, y ) strtok( x, y ) + #define tcprintf( a, b, c, d ) sprintf( a, c, d ) +#endif + +// win2k.h +#define SIZEOF( x ) ( sizeof( x ) / sizeof( x[0] ) ) +#define IsWinVerXPPlus() ( LOBYTE( LOWORD( GetVersion( ) ) ) >= 5 && LOWORD( GetVersion( ) ) != 5 ) + + +// ################################## STRUCTURES ############################### + +// -------------------------- WORKING LIST ITEM STRUCTURE ---------------------- + +typedef struct { + int ItemIcon; + TCHAR ItemTitle[CSLIST_XTITLE_LIMIT]; + TCHAR ItemMessage[CSLIST_XMESSAGE_LIMIT]; + BOOL ItemFavourite; +} CSLISTSTATUSITEM; + + +// -------------------------- ICQ CUSTOM STATUS STRUCTURE ---------------------- + +typedef struct { + int cbSize; // size of the structure + int flags; // combination of CSSF_* + int *status; // custom status id + union { + char *pszName; // buffer for custom status name + TCHAR *ptszName; + WCHAR *pwszName; + }; + union { + char *pszMessage; // buffer for custom status message + TCHAR *ptszMessage; + WCHAR *pwszMessage; + }; + WPARAM *wParam; // extra params, see flags + LPARAM *lParam; +} ICQ_CUSTOM_STATUS; + + +// ------------------------------ ICONS + BUTTONS ------------------------------ + +static struct { + int idc; + TCHAR *title; + TCHAR *szDescr; + char *iconIcoLib; + int iconNoIcoLib; + HANDLE hIcoLibItem; +} cslforms[] = +{ + { -1, L"Main Menu" , ( TCHAR * )"Main Icon", "csl_icon", IDI_CSLIST, NULL }, + { IDC_ADD, L"Add new item", ( TCHAR * )"Add", "csl_add", IDI_ADD, NULL }, + { IDC_MODIFY, L"Modify selected item", ( TCHAR * )"Modify", "csl_modify", IDI_MODIFY, NULL }, + { IDC_REMOVE, L"Delete selected item", ( TCHAR * )"Remove", "csl_remove", IDI_REMOVE, NULL }, + { IDC_IMPORT, L"Import statuses from database", ( TCHAR * )"Import", "csl_import", IDI_IMPORT, NULL }, + { IDC_WATCH, L"Whether or not watch custom status changes and add them into list", ( TCHAR * )"Watch", "csl_watch", IDI_WATCH, NULL }, + { IDC_FAV, L"Set/unset current item as favorite", ( TCHAR * )"Favorite", "csl_fav", IDI_FAV, NULL }, + { IDC_OPTS, L"Options...", ( TCHAR * )"Options", "csl_opts", IDI_OPTIONS, NULL }, + { IDC_NOCHNG, L"Close without changing custom status", ( TCHAR * )"No change", "csl_nochng", IDI_NOCHNG, NULL }, + { IDC_APPLY, L"Set custom status to selected one and close", ( TCHAR * )"Set", "csl_apply", IDI_APPLY, NULL }, + { IDC_EXIT, L"Clear custom status (reset to None) and close", ( TCHAR * )"Clear", "csl_clear", IDI_CLEAR, NULL }, +}; + + +// ----------------------- COMBOBOXEX XICONS STRUCTURE ------------------------- + +static struct +{ + int xnum; + TCHAR *xname; +} xstatuses[] = +{ + {1, _T("Angry")}, + {2, _T("Taking a bath")}, + {3, _T("Tired")}, + {4, _T("Party")}, + {5, _T("Drinking beer")}, + {6, _T("Thinking")}, + {7, _T("Eating")}, + {8, _T("Watching TV")}, + {9, _T("Meeting")}, + {10, _T("Coffee")}, + {11, _T("Listening to music")}, + {12, _T("Business")}, + {13, _T("Shooting")}, + {14, _T("Having fun")}, + {15, _T("On the phone")}, + {16, _T("Gaming")}, + {17, _T("Studying")}, + {18, _T("Shopping")}, + {19, _T("Feeling sick")}, + {20, _T("Sleeping")}, + {21, _T("Surfing")}, + {22, _T("Browsing")}, + {23, _T("Working")}, + {24, _T("Typing")}, + {25, _T("Picnic")}, + {26, _T("Cooking")}, + {27, _T("Smoking")}, + {28, _T("I'm High")}, + {29, _T("On WC")}, + {30, _T("To be or not to be")}, + {31, _T("Watching pro7 on TV")}, + {32, _T("Love")}, + {33, _T("Searching")}, + {34, _T("Love")}, // I don't understand why this falls when 2 same named items appear O_o + {35, _T("Journal")}, // edit: ..and now I REALLY don't understand why it's working now x)) + {36, _T("Sex")}, + {37, _T("Smoking")}, // -||- +}; + + +// ---------------------- LIST SORTING OPTIONS STRUCTURE ----------------------- + +static struct +{ + int columnIndex; + HWND listView; + BOOL isOrderDesc; +} sorting = { + 0, NULL, FALSE +}; + +// ################################## GLOBALS ################################## + +HINSTANCE hInst = NULL; +PLUGINLINK *pluginLink = NULL; + +DWORD gMirandaVersion = 0x00000000; +BYTE gbUnicodeCore; + +TCHAR *rnthanks = L"induction - for his cool iconset :)\r\nfaith_healer - moral support :]\r\nCriS - project hosting @ http://dev.mirandaim.ru/ \r\nRobyer, kaye_styles, dEMoniZaToR, Drugwash, FREAK_THEMIGHTY - useful hints ;)\r\nplugin users, of course :) for their tolerance x) ;)\r\nMiranda IM Project Team - for their work on the best Instant Messenger I ever known :)"; +TCHAR *rnchanges = L""; + +int action = 0; +int AMResult = 0; +int ModifiedPos = -1; +int opened = 0; + +static HWND hDlg = NULL; // Main Dialog handler +static HWND hList = NULL; // List View handler +HIMAGELIST hIml = NULL; +HWND hXCombo = NULL; +int hMainIcon = 0; // modern toolbar // TODO: is it needed? +LVCOLUMN LvCol = { 0 }; // Make Coluom struct for ListView +LVITEM LvItem = { 0 }; // ListView Item struct +COMBOBOXEXITEM CbItem = { 0 }; +int iSelect = 0; +int flag = 0; +BOOL bChanged = 0; +CSLISTSTATUSITEM helpItem = { 0 }; + +// hooks +HANDLE hHookMenuBuild = NULL; +HANDLE hHookOnPluginsLoaded = NULL; +HANDLE hHookOnOptionsInit = NULL; +HANDLE hHookOnKatynkaIsLoggedIn = NULL; + +// services +HANDLE hSvcShowList = NULL; + +BOOL bStatusMenu = FALSE; + +PLUGININFOEX pluginInfoEx = { + sizeof( PLUGININFOEX ), + CSLIST_MODULE_LONG_NAME, + PLUGIN_MAKE_VERSION( 0, 0, 0, 19 ), + "Offers list of your Custom Statuses. [test build #"CSLIST_TESTING" "__DATE__" "__TIME__"]", + "jarvis [eThEreAL] .., HANAX", + "mike.taussick@seznam.cz", + "© 2007-2008 eternity crew .., © 2006-2007 HANAX Software", + "http://dev.mirandaim.ru/~jarvis/", + UNICODE_AWARE, //not transient + 0, //doesn't replace anything built-in + // Generate your own unique id for your plugin. + // Do not use this UUID! + // Use uuidgen.exe to generate the uuuid + {0x8b86253, 0xec6e, 0x4d09, { 0xb7, 0xa9, 0x64, 0xac, 0xdf, 0x6, 0x27, 0xb8 }} //{08B86253-EC6E-4d09-B7A9-64ACDF0627B8} +}; + +PLUGININFO pluginInfo = { + sizeof( PLUGININFO ), + CSLIST_MODULE_LONG_NAME, + PLUGIN_MAKE_VERSION( 0, 0, 0, 19 ), + "Offers list of your Custom Statuses. [test build #"CSLIST_TESTING" "__DATE__" "__TIME__"]", + "jarvis [eThEreAL] .., HANAX", + "mike.taussick@seznam.cz", + "© 2007-2008 eternity crew .., © 2006-2007 HANAX Software", + "http://dev.mirandaim.ru/~jarvis/", + UNICODE_AWARE, //not transient + 0 +}; + +// ############################# INIT STUFF #################################### + +BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ); +static int PluginMenuCommand( WPARAM wParam, LPARAM lParam ); + +__declspec( dllexport ) PLUGININFOEX* MirandaPluginInfoEx( DWORD mirandaVersion ); +__declspec( dllexport ) PLUGININFO* MirandaPluginInfo( DWORD mirandaVersion ); + +static const MUUID interfaces[] = { MIID_TESTPLUGIN, MIID_STATUSLIST, MIID_LAST }; +__declspec( dllexport ) const MUUID* MirandaPluginInterfaces( void ); + +int __declspec( dllexport ) Load( PLUGINLINK *link ); +int __declspec( dllexport ) Unload( void ); +static int onPluginsLoaded( WPARAM wparam, LPARAM lparam ); +int onOptionsInit( WPARAM wparam, LPARAM lparam ); + +// ############################### PROCEDURES ################################## + +INT_PTR CALLBACK CSListProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); +INT_PTR CALLBACK CSListAddModifyProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); +BOOL CALLBACK CSListOptionsProc( HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam ); +static int CALLBACK CSListSortProc( LPARAM, LPARAM, LPARAM ); +INT_PTR CALLBACK RelNotesProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); + +// ############################# HELP FUNCTIONS ################################ + +int null_snprintf( char*, size_t, const char*, ... ); +static int cslist_init_menu_item( WPARAM wParam, LPARAM lParam ); + +// ################## COMMANDS OF CSLIST ####################################### + +int cslist_add_item(); +int cslist_modify_item(); +int cslist_remove_item(); +int cslist_AM_set_help_item( HWND hwndAMDlg ); + +// ################## SERVICES FOR CSLIST ###################################### + +void cslist_clear_selection(); +void cslist_clear_help_item(); +void cslist_sort_list(); +void cslist_import_statuses_from_icq(); +int cslist_KatysEasterEgg( WPARAM, LPARAM ); + +// ################## DB - LOAD AND SAVE ####################################### + +int cslist_initialize_list_content( HWND hwndDlg ); +int cslist_parse_row( TCHAR *row ); +int cslist_save_list_content( HWND hwndDlg ); + +// ######################### CREATING DIALOG ################################### + +int cslist_set_status( HWND hwndDlg ); +void cslist_init_icons( void ); + + +// ######################### OTHER FUNCTIONS ################################### + +HICON LoadIconExEx( const char* IcoLibName, int NonIcoLibIcon ); +//void DBDeleteContactSetting( char Module[64], char Setting[64] ); + +// ############################## EXTERNS ###################################### + +//extern int mir_free( const int & ); +//extern int ImageList_AddIcon_IconLibLoaded( HIMAGELIST hIml, int iconId ); + +#pragma comment( lib, "comctl32.lib" ) + +#endif /* __CSLIST_H */ \ No newline at end of file diff --git a/custom_status_list/cslist.ncb b/custom_status_list/cslist.ncb new file mode 100644 index 0000000..d1ea4e0 Binary files /dev/null and b/custom_status_list/cslist.ncb differ diff --git a/custom_status_list/cslist.opt b/custom_status_list/cslist.opt new file mode 100644 index 0000000..7812836 Binary files /dev/null and b/custom_status_list/cslist.opt differ diff --git a/custom_status_list/cslist.plg b/custom_status_list/cslist.plg new file mode 100644 index 0000000..890ea14 --- /dev/null +++ b/custom_status_list/cslist.plg @@ -0,0 +1,36 @@ + + +
+

Build Log

+

+--------------------Configuration: cslist - Win32 Release-------------------- +

+

Command Lines

+Creating command line "rc.exe /l 0x809 /fo"Release/cslist.res" /i "../../include/" /d "NDEBUG" "D:\Sources\svn.miranda.im\custom_status_list\trunk\cslist.rc"" +Creating temporary file "C:\Temp\RSP41D9.tmp" with contents +[ +/nologo /MT /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CSLIST_EXPORTS" /Fp"Release/cslist.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +"D:\Sources\svn.miranda.im\custom_status_list\trunk\cslist.c" +] +Creating command line "cl.exe @C:\Temp\RSP41D9.tmp" +Creating temporary file "C:\Temp\RSP41DA.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/cslist.pdb" /machine:I386 /out:"../../bin/release/plugins/cslist.dll" /implib:"Release/cslist.lib" +.\Release\cslist.obj +.\Release\cslist.res +] +Creating command line "link.exe @C:\Temp\RSP41DA.tmp" +

Output Window

+Compiling resources... +Compiling... +cslist.c +D:\Sources\svn.miranda.im\custom_status_list\trunk\cslist.h(27) : fatal error C1083: Cannot open include file: 'm_updater.h': No such file or directory +Error executing cl.exe. + + + +

Results

+cslist.dll - 1 error(s), 0 warning(s) +
+ + diff --git a/custom_status_list/cslist.rc b/custom_status_list/cslist.rc new file mode 100644 index 0000000..f02fb44 --- /dev/null +++ b/custom_status_list/cslist.rc @@ -0,0 +1,245 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CSLIST DIALOGEX 0, 0, 210, 226 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Custom Status List" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_CSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,1,3,207,204 + CONTROL "A",IDC_ADD,"MButtonClass",WS_TABSTOP,2,210,16,14 + CONTROL "M",IDC_MODIFY,"MButtonClass",WS_TABSTOP,22,210,16,14 + CONTROL "D",IDC_REMOVE,"MButtonClass",WS_TABSTOP,42,210,16,14 + CONTROL "I",IDC_IMPORT,"MButtonClass",WS_TABSTOP,65,210,16,14 + CONTROL "W",IDC_WATCH,"MButtonClass",WS_DISABLED | WS_TABSTOP,85,210,16,14 + CONTROL "F",IDC_FAV,"MButtonClass",WS_DISABLED | WS_TABSTOP,105,210,16,14 + CONTROL "N",IDC_NOCHNG,"MButtonClass",WS_TABSTOP,152,210,16,14 + CONTROL "E",IDC_EXIT,"MButtonClass",WS_TABSTOP,172,210,16,14 + CONTROL "P",IDC_APPLY,"MButtonClass",WS_TABSTOP,192,210,16,14 + CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | SS_SUNKEN,146,211,1,13 + CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | SS_SUNKEN,61,211,1,13 + CONTROL "O",IDC_OPTS,"MButtonClass",WS_TABSTOP,125,210,16,14 +END + +IDD_ADDMODIFY DIALOGEX 100, 100, 199, 121 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Add/Modify Custom Status" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Icon:",IDC_ST_XICON,4,2,44,8 + CONTROL "",IDC_CB_ICON,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,2,11,84,95 + LTEXT "Title:",IDC_ST_XTITLE,89,2,43,8 + EDITTEXT IDC_XTITLE,89,11,108,14,ES_AUTOHSCROLL + LTEXT "Message:",IDC_ST_XMESSAGE,4,27,85,8 + EDITTEXT IDC_XMESSAGE,2,36,195,66,ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL + DEFPUSHBUTTON "Add/Modify",IDC_AM_OK,49,105,50,14 + PUSHBUTTON "Cancel",IDC_AM_CN,102,105,50,14 +END + +IDD_RELNOTES DIALOGEX 0, 0, 192, 269 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Custom Status List Release Notes" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Latest Changes",IDC_RNCHNGS,4,104,184,83 + GROUPBOX "Notice",IDC_RNNOTICE,4,55,184,49 + GROUPBOX "Special Thanks",IDC_THX,4,189,184,58 + RTEXT "Plugin name:",IDC_RNPLGNM,7,4,53,8 + RTEXT "Version:",IDC_RNVER,7,14,53,8 + LTEXT "Custom Status List",IDC_RLNPLGNM2,66,4,98,8 + LTEXT "0.0.0.18 (Unicode)",IDC_RNVER2,66,14,95,8 + LTEXT "Plugin development is currently in Beta stage. It's not recommended to generally use, but stable enough for testing purposes. Stable release will be available as soon as possible ;)",IDC_STATIC,20,65,150,34 + RTEXT "Author:",IDC_RNAUTH,7,24,53,8 + LTEXT "jarvis (original idea by HANAX)",IDC_RNAUTH2,66,24,115,8 + RTEXT "Copyright:",IDC_RNCPR,7,34,53,8 + LTEXT "© 2007-8 eternity crew ..\n© 2006-7 HANAX Software",IDC_RNCPR2,66,34,115,18 + ICON IDI_ADD,IDC_RNCSICON,163,3,20,20 + EDITTEXT IDC_TXHTEXT,7,199,176,43,ES_MULTILINE | ES_READONLY | WS_VSCROLL + CONTROL "Don't show this dialog again",IDC_SHOWIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,253,118,10 + DEFPUSHBUTTON "Close",IDOK,137,251,50,14 + CONTROL "Unicode build, finally :)",IDC_STATIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,119,155,10 + CONTROL "fixed memory leak and possible crash when modifying status and then importing 0 DB entries",IDC_STATIC, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,17,158,155,26 + CONTROL "merged Add/Modify processes together :)",IDC_STATIC, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,129,155,10 + CONTROL "icon selector shows only icons, that are supported by installed ICQ plugin",IDC_STATIC, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,17,139,155,18 +END + +IDD_OPTIONS DIALOGEX 0, 0, 172, 222 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Options" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Menu Item placement",IDC_PLACEMENT_OPTIONS,3,102,165,81 + CONTROL "Global Status Menu",IDC_PLACE_GLOBAL,"Button",BS_AUTORADIOBUTTON | WS_GROUP,11,115,119,10 + CONTROL "ICQ Status Menu",IDC_PLACE_ICQ_STATUS,"Button",BS_AUTORADIOBUTTON,11,147,125,10 + CONTROL "Main Menu",IDC_PLACE_MAIN,"Button",BS_AUTORADIOBUTTON,11,158,134,10 + CONTROL "Tray Menu",IDC_PLACE_TRAY,"Button",BS_AUTOCHECKBOX | WS_DISABLED,11,168,122,10 + CONTROL "At the top",IDC_PLACE_GLOBAL_TOP,"Button",BS_AUTORADIOBUTTON | WS_DISABLED | WS_GROUP,17,126,108,10 + CONTROL "At the bottom",IDC_PLACE_GLOBAL_BOTTOM,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,17,136,119,10 + CONTROL "Hide ""Custom status"" menu\n(ICQ eternity/PlusPlus++ Mod only, restart needed)",IDC_HIDE_CSMENU, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,11,65,149,26 + GROUPBOX "List settings",IDC_LIST_SETTINGS,3,0,165,47 + DEFPUSHBUTTON "Save Options",IDOK,43,205,82,14 + CTEXT "Note: Some options will be applied after restart of Miranda IM",IDC_STATIC,11,185,144,15,WS_DISABLED + CONTROL "Confirm deletion of items",IDC_DEL_CONFIRM,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,11,13,148,10 + CONTROL "Delete entries in ICQ Custom status menu after Import",IDC_DEL_AFTER_IMPORT, + "Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_DISABLED | WS_TABSTOP,11,24,153,16 + GROUPBOX "ICQ integration",IDC_ICQ_INTG,3,50,165,50 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CSLIST, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 202 + TOPMARGIN, 7 + BOTTOMMARGIN, 219 + END + + IDD_RELNOTES, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 185 + TOPMARGIN, 7 + BOTTOMMARGIN, 262 + END + + IDD_OPTIONS, DIALOG + BEGIN + VERTGUIDE, 11 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 0,0,0,18 + PRODUCTVERSION 0,0,0,18 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Offers List of your Custom Statuses. All acclaims go to HANAX, original publisher and inventor of this idea." + VALUE "FileDescription", "Custom Status List" + VALUE "FileVersion", "0, 0, 0, 18" + VALUE "InternalName", "cslist" + VALUE "LegalCopyright", "© 2007-2008 eternity crew .., © 2006-2007 HANAX" + VALUE "OriginalFilename", "cslist.dll" + VALUE "ProductName", "Custom Status List" + VALUE "ProductVersion", "0, 0, 0, 18" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_CSLIST ICON "res\\main.ico" +IDI_ADD ICON "res\\add.ico" +IDI_MODIFY ICON "res\\modify.ico" +IDI_REMOVE ICON "res\\remove.ico" +IDI_IMPORT ICON "res\\import.ico" +IDI_WATCH ICON "res\\watch.ico" +IDI_FAV ICON "res\\fav.ico" +IDI_NOCHNG ICON "res\\nochng.ico" +IDI_CLEAR ICON "res\\clear.ico" +IDI_APPLY ICON "res\\apply.ico" +IDI_OPTIONS ICON "res\\options.ico" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/custom_status_list/cslist.sln b/custom_status_list/cslist.sln new file mode 100644 index 0000000..7d0066c --- /dev/null +++ b/custom_status_list/cslist.sln @@ -0,0 +1,23 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "custom_status_list", "cslist.vcxproj", "{2AD2FF74-06E1-4BD8-984A-526F3C6315B3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release Unicode [Dynamic SSE2 Fast]|Win32 = Release Unicode [Dynamic SSE2 Fast]|Win32 + Release Unicode|Win32 = Release Unicode|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3}.Release Unicode [Dynamic SSE2 Fast]|Win32.ActiveCfg = Release Unicode [Dynamic SSE2 Fast]|Win32 + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3}.Release Unicode [Dynamic SSE2 Fast]|Win32.Build.0 = Release Unicode [Dynamic SSE2 Fast]|Win32 + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3}.Release|Win32.ActiveCfg = Release|Win32 + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/custom_status_list/cslist.suo b/custom_status_list/cslist.suo new file mode 100644 index 0000000..03471f3 Binary files /dev/null and b/custom_status_list/cslist.suo differ diff --git a/custom_status_list/cslist.vcproj b/custom_status_list/cslist.vcproj new file mode 100644 index 0000000..84824f8 --- /dev/null +++ b/custom_status_list/cslist.vcproj @@ -0,0 +1,415 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/custom_status_list/cslist.vcxproj b/custom_status_list/cslist.vcxproj new file mode 100644 index 0000000..84f0179 --- /dev/null +++ b/custom_status_list/cslist.vcxproj @@ -0,0 +1,230 @@ + + + + + Release Unicode [Dynamic SSE2 Fast] + Win32 + + + Release Unicode + Win32 + + + Release + Win32 + + + + custom_status_list + {2AD2FF74-06E1-4BD8-984A-526F3C6315B3} + cslist + + + + DynamicLibrary + false + Unicode + + + DynamicLibrary + false + NotSet + + + DynamicLibrary + false + Unicode + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Configuration)/Plugins\ + $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\Plugins\ + $(SolutionDir)$(Configuration)\Plugins\ + false + D:\Sources\externalapi;D:\Sources\include;$(IncludePath) + D:\Sources\externalapi;D:\Sources\include;$(IncludePath) + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/cslist.tlb + + + + + MaxSpeed + OnlyExplicitInline + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CSLIST_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + MultiThreaded + true + .\Release/cslist.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + false + .\Release/cslist.pdb + .\Release/cslist.lib + MachineX86 + + + true + .\Release/cslist.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/cslist.tlb + + + + + MinSpace + OnlyExplicitInline + Size + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CSLIST_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreaded + true + .\Release/cslist.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)cslist.dll + true + false + .\Release/cslist.pdb + .\Release/cslist.lib + MachineX86 + + + true + .\Release/cslist.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/cslist.tlb + + + + + MaxSpeed + OnlyExplicitInline + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CSLIST_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreaded + true + .\Release/cslist.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)cslist.dll + true + false + .\Release/cslist.pdb + .\Release/cslist.lib + MachineX86 + + + true + .\Release/cslist.bsc + + + + + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/custom_status_list/cslist.vcxproj.filters b/custom_status_list/cslist.vcxproj.filters new file mode 100644 index 0000000..1972989 --- /dev/null +++ b/custom_status_list/cslist.vcxproj.filters @@ -0,0 +1,70 @@ + + + + + {6500573a-3334-47b6-a046-8b8d10ddf076} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {0b9b0ea6-1449-4473-a62c-a97543975df5} + h;hpp;hxx;hm;inl + + + {988747e3-74b2-4aaa-8f88-ffe48242db16} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + + + Header Files + + + Header Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/custom_status_list/cslist.vcxproj.user b/custom_status_list/cslist.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/custom_status_list/cslist.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/custom_status_list/res/add.ico b/custom_status_list/res/add.ico new file mode 100644 index 0000000..de1ea5b Binary files /dev/null and b/custom_status_list/res/add.ico differ diff --git a/custom_status_list/res/apply.ico b/custom_status_list/res/apply.ico new file mode 100644 index 0000000..8411a36 Binary files /dev/null and b/custom_status_list/res/apply.ico differ diff --git a/custom_status_list/res/clear.ico b/custom_status_list/res/clear.ico new file mode 100644 index 0000000..485ef78 Binary files /dev/null and b/custom_status_list/res/clear.ico differ diff --git a/custom_status_list/res/fav.ico b/custom_status_list/res/fav.ico new file mode 100644 index 0000000..4fc2eb6 Binary files /dev/null and b/custom_status_list/res/fav.ico differ diff --git a/custom_status_list/res/import.ico b/custom_status_list/res/import.ico new file mode 100644 index 0000000..480c4c4 Binary files /dev/null and b/custom_status_list/res/import.ico differ diff --git a/custom_status_list/res/main.ico b/custom_status_list/res/main.ico new file mode 100644 index 0000000..ba883a2 Binary files /dev/null and b/custom_status_list/res/main.ico differ diff --git a/custom_status_list/res/modify.ico b/custom_status_list/res/modify.ico new file mode 100644 index 0000000..5321379 Binary files /dev/null and b/custom_status_list/res/modify.ico differ diff --git a/custom_status_list/res/nochng.ico b/custom_status_list/res/nochng.ico new file mode 100644 index 0000000..0c7cf1e Binary files /dev/null and b/custom_status_list/res/nochng.ico differ diff --git a/custom_status_list/res/options.ico b/custom_status_list/res/options.ico new file mode 100644 index 0000000..824719f Binary files /dev/null and b/custom_status_list/res/options.ico differ diff --git a/custom_status_list/res/remove.ico b/custom_status_list/res/remove.ico new file mode 100644 index 0000000..4a02959 Binary files /dev/null and b/custom_status_list/res/remove.ico differ diff --git a/custom_status_list/res/watch.ico b/custom_status_list/res/watch.ico new file mode 100644 index 0000000..69fd3f6 Binary files /dev/null and b/custom_status_list/res/watch.ico differ diff --git a/custom_status_list/resource.h b/custom_status_list/resource.h new file mode 100644 index 0000000..6ded910 --- /dev/null +++ b/custom_status_list/resource.h @@ -0,0 +1,78 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by cslist.rc +// +#define IDD_CSLIST 101 +#define IDD_ADDMODIFY 102 +#define IDD_OPTIONS 103 +#define IDD_RELNOTES 104 +#define IDI_CSLIST 105 +#define IDI_ADD 106 +#define IDI_MODIFY 107 +#define IDI_REMOVE 108 +#define IDI_WATCH 110 +#define IDI_FAV 111 +#define IDI_NOCHNG 112 +#define IDI_CLEAR 113 +#define IDI_APPLY 114 +#define IDI_OPTIONS 115 +#define IDI_IMPORT 119 +#define IDC_CSLIST 1001 +#define IDC_ADD 1002 +#define IDC_MODIFY 1003 +#define IDC_REMOVE 1004 +#define IDC_IMPORT 1005 +#define IDC_WATCH 1006 +#define IDC_FAV 1007 +#define IDC_NOCHNG 1008 +#define IDC_EXIT 1009 +#define IDC_APPLY 1010 +#define IDC_ST_XICON 1011 +#define IDC_CB_ICON 1012 +#define IDC_ST_XTITLE 1013 +#define IDC_XTITLE 1014 +#define IDC_ST_XMESSAGE 1015 +#define IDC_XMESSAGE 1016 +#define IDC_AM_OK 1017 +#define IDC_AM_CN 1018 +#define IDC_RNCHNGS 1019 +#define IDC_RNNOTICE 1020 +#define IDC_RNPLGNM 1021 +#define IDC_RLNPLGNM2 1022 +#define IDC_RNVER 1023 +#define IDC_RNVER2 1024 +#define IDC_RNAUTH 1025 +#define IDC_RNAUTH2 1026 +#define IDC_RNCPR 1027 +#define IDC_RNCPR2 1028 +#define IDC_RNVERSTICK 1029 +#define IDC_VERSTICK 1030 +#define IDC_RNCSICON 1031 +#define IDC_THX 1032 +#define IDC_TXHTEXT 1033 +#define IDC_SHOWIT 1034 +#define IDC_PLACEMENT_OPTIONS 1035 +#define IDC_PLACE_GLOBAL 1036 +#define IDC_PLACE_GLOBAL_TOP 1038 +#define IDC_PLACE_GLOBAL_BOTTOM 1039 +#define IDC_PLACE_ICQ_STATUS 1040 +#define IDC_PLACE_ICQ_REPLACE 1041 +#define IDC_HIDE_CSMENU 1041 +#define IDC_LIST_SETTINGS 1042 +#define IDC_PLACE_MAIN 1044 +#define IDC_PLACE_TRAY 1046 +#define IDC_DEL_CONFIRM 1047 +#define IDC_DEL_AFTER_IMPORT 1048 +#define IDC_ICQ_INTG 1049 +#define IDC_OPTS 1050 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 116 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1053 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif -- cgit v1.2.3