diff options
Diffstat (limited to 'protocols/Xfire/src/options.cpp')
| -rw-r--r-- | protocols/Xfire/src/options.cpp | 2268 | 
1 files changed, 1136 insertions, 1132 deletions
diff --git a/protocols/Xfire/src/options.cpp b/protocols/Xfire/src/options.cpp index 559c1ed0c7..7465327d41 100644 --- a/protocols/Xfire/src/options.cpp +++ b/protocols/Xfire/src/options.cpp @@ -1,1133 +1,1137 @@ -/*
 - *  Plugin of miranda IM(ICQ) for Communicating with users of the XFire Network. 
 - *
 - *  Copyright (C) 2010 by
 - *          dufte <dufte@justmail.de>
 - *
 - *  This program is free software; you can redistribute it and/or modify
 - *  it under the terms of the GNU General Public License as published by
 - *  the Free Software Foundation; either version 2 of the License, or
 - *  (at your option) any later version.
 - *
 - *  This program is distributed in the hope that it will be useful,
 - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - *  GNU General Public License for more details.
 - *
 - *  You should have received a copy of the GNU General Public License
 - *  along with this program; if not, write to the Free Software
 - *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 - *
 - *  Based on J. Lawler              - BaseProtocol
 - *			 Herbert Poul/Beat Wolf - xfirelib
 - *
 - *  Miranda ICQ: the free icq client for MS Windows 
 - *  Copyright (C) 2000-2008  Richard Hughes, Roland Rabien & Tristan Van de Vreede
 - *
 - */
 -
 -#include "stdafx.h"
 -
 -#include "baseProtocol.h"
 -#include "m_variables.h"
 -#include "recvprefspacket.h"
 -#include "Xfire_gamelist.h"
 -#include "addgamedialog.h"
 -#include "variables.h"
 -
 -extern HANDLE XFireWorkingFolder;
 -extern HANDLE XFireIconFolder;
 -extern xfire_prefitem xfireconfig[XFIRE_RECVPREFSPACKET_MAXCONFIGS];
 -extern Xfire_gamelist xgamelist;
 -
 -struct mytreeitem {
 -	TCHAR name[256];
 -	char dbentry[256];
 -	int parent;
 -	int icon;
 -	HTREEITEM hitem;
 -};
 -
 -extern int bpStatus;
 -BOOL alreadyInit=FALSE;
 -HWND ghwndDlg2;
 -HWND addgameDialog=NULL;
 -
 -xfireconfigitem xfireconfigitems[XFIRE_RECVPREFSPACKET_SUPPORTEDONFIGS] = {
 -	{IDC_KONFIG_1,1,"sendgamestatus"},
 -	{IDC_KONFIG_2,3,"hideprofile"},
 -	{IDC_KONFIG_3,2,"ipportdetec"},
 -	{IDC_KONFIG_4,0xa,"shownicks"},
 -	{IDC_KONFIG_5,0xb,"ts2detection"},
 -	{IDC_KONFIG_6,0xc,"sendtyping"},
 -	{IDC_KONFIG_7,8,"friendsoffriends"},
 -};
 -
 -#define NUM_ICONS 4
 -
 -static mytreeitem mytree[] = {
 -	{LPGENT("Avatars"),"",1,0},
 -	{LPGENT("Disable avatars"),"noavatars",0,0},
 -	{LPGENT("Don't download avatars of clan members"),"noclanavatars",0,0},
 -	{LPGENT("Use alternate way for Avatar download"),"specialavatarload",0,0},
 -	{LPGENT("General"),"",1,0},
 -	{LPGENT("Automatically reconnect on protocol version changes"),"recprotoverchg",0,0},
 -	{LPGENT("No IP/Port in StatusMsg"),"noipportinstatus",0,0},
 -	{LPGENT("Use Online status for unsupported global statuses"),"oninsteadafk",0,0},
 -	{LPGENT("Don't move friends to clan groups"),"skipfriendsgroups",0,0},
 -	{LPGENT("GameServerQuery support"),"gsqsupport",0,0},
 -	{LPGENT("No custom away message"),"nocustomaway",0,0},
 -	{LPGENT("Remove friend of friend buddies from database"),"fofdbremove",0,0},
 -	/*{"Show usernames only","onlyusername",0},*/
 -	{LPGENT("Hide yourself in buddylist"),"skipmyself",0,0},
 -	{LPGENT("Don't display game search results"),"dontdisresults",0,0},
 -	{LPGENT("Don't display game search status window"),"dontdissstatus",0,0},
 -	{LPGENT("Display popup if someone starts a game"),"gamepopup",0,0},
 -	{LPGENT("Don't automatically create clan groups"),"noclangroups",0,0},
 -	{LPGENT("Enable MBot support"),"mbotsupport",0,0},
 -	{LPGENT("Game detection"),"",1,0},
 -	/*{"Scan for games on every Miranda start","scanalways",0},*/
 -	{LPGENT("Disable game detection"),"nogamedetect",0,0},
 -	/*{"Enable server IP/Port detection","ipportdetec",0},*/
 -	/*{"Enable TeamSpeak2/Ventrilo detection","",0},*/
 -	{LPGENT("Use TSRemote.dll to get TeamSpeak server info"),"ts2useremote",0,0},
 -	{LPGENT("Disable popups when ingame"),"nopopups",0,0},
 -	{LPGENT("Disable sound events when ingame"),"nosoundev",0,0},
 -	{LPGENT("Files"),"",1,0},
 -	{LPGENT("Automatically update xfire_games.ini (pro-laming.de)"),"autoiniupdate",0,0},
 -	{LPGENT("Automatically update icons.dll (pro-laming.de)"),"autoicodllupdate",0,0},
 -	{LPGENT("Download missing game icons from Xfire website"),"xfiresitegameico",0,0},
 -	{LPGENT("No backup on update"),"nobackupini",0,0},
 -	{LPGENT("Background updating"),"dontaskforupdate",0,0},
 -};
 -
 -//funktion zum auslesen aller einträge unter XFireBlock
 -static int enumSettingsProc(const char *szSetting,LPARAM lParam)
 -{ 
 -	if (strlen(szSetting)>0)
 -	{
 -		SendDlgItemMessageA( (HWND)lParam, IDC_BLOCKUSER, LB_ADDSTRING, 0, (LPARAM)szSetting);
 -	}
 -	EnableDlgItem((HWND)lParam, IDC_REMUSER, TRUE);
 -	return 0;
 -}
 -
 -//damit die änderungen sofort sichtbar sind
 -static INT_PTR CALLBACK DlgProcOpts2(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 -{
 -	char inipath[XFIRE_MAX_STATIC_STRING_LEN]="";
 -	static BOOL inifound = FALSE;
 -	static BOOL dllfound = FALSE;
 -	static int nomsgboxsel[] = {1,0,2};
 -	static HWND hwndTree = NULL;
 -	static char login[128];
 -
 -	switch (msg)
 -	{
 -		case PSM_CHANGED:
 -		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -		  break;
 -
 -		case WM_INITDIALOG:
 -		{
 -			DBVARIANT dbv;
 -			TranslateDialogDefault(hwndDlg);
 -
 -			ghwndDlg2=hwndDlg;
 -
 -			hwndTree = GetDlgItem(hwndDlg, IDC_TREE);
 -			SetWindowLongPtr(hwndTree,GWL_STYLE,GetWindowLongPtr(hwndTree,GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES);
 -			SendMessage(hwndDlg, DM_REBUILD_TREE, 0, 0);
 -
 -			strcpy(inipath, XFireGetFoldersPath ("IniFile"));
 -			strcat(inipath, "xfire_games.ini");
 -			
 -			FILE * f = fopen(inipath,"r");
 -			if (f!=NULL)
 -			{
 -				fclose(f);
 -				CheckDlgButton(hwndDlg,IDC_CHKG,1);
 -				inifound = TRUE;
 -			}
 -			else
 -			{
 -				EnableDlgItem(hwndDlg, IDC_SETUPGAMES, FALSE);
 -				inifound = FALSE;
 -			}
 -
 -			strcpy(inipath, XFireGetFoldersPath ("IconsFile"));
 -			strcat(inipath, "icons.dll");
 -			
 -			f = fopen(inipath,"r");
 -			if (f!=NULL)
 -			{
 -				fclose(f);
 -				CheckDlgButton(hwndDlg,IDC_CHKI,1);
 -				dllfound = TRUE;
 -			}
 -			else
 -				dllfound = FALSE;
 -
 -			if (!db_get(NULL,protocolname,"login",&dbv)) {
 -				SetDlgItemTextA(hwndDlg,IDC_LOGIN,dbv.pszVal);
 -				db_free(&dbv);
 -			}
 -			if (!db_get(NULL,protocolname,"Nick",&dbv)) {
 -				SetDlgItemTextA(hwndDlg,IDC_NICK,dbv.pszVal);
 -				db_free(&dbv);
 -			}
 -			if (!db_get(NULL,protocolname,"password",&dbv)) {
 -				//bit of a security hole here, since it's easy to extract a password from an edit box
 -				SetDlgItemTextA(hwndDlg,IDC_PASSWORD,dbv.pszVal);
 -				db_free(&dbv);
 -			}
 -
 -			char temp[255]="";
 -			mir_snprintf(temp, SIZEOF(temp), "%d", db_get_b(NULL, protocolname, "protover", 0x5b));
 -			SetDlgItemTextA(hwndDlg,IDC_PVER,temp);
 -
 -			EnableWindow(GetDlgItem(hwndDlg,IDC_LASTGAME),FALSE);
 -			if (!db_get(NULL,protocolname,"LastGame",&dbv)) {
 -				SetDlgItemTextA(hwndDlg,IDC_LASTGAME,dbv.pszVal);
 -				db_free(&dbv);
 -			}
 -
 -			if (bpStatus==ID_STATUS_OFFLINE&&bpStatus!=ID_STATUS_CONNECTING) {
 -				EnableDlgItem(hwndDlg, IDC_NICK, FALSE);
 -			}
 -			else
 -			{
 -				int size=sizeof(xfireconfigitems)/sizeof(xfireconfigitem);
 -				for(int i=0;i<size;i++)
 -				{
 -					EnableDlgItem(hwndDlg, xfireconfigitems[i].id, TRUE);
 -					if (xfireconfig[xfireconfigitems[i].xfireconfigid].wasset==0)
 -					{
 -						CheckDlgButton(hwndDlg,xfireconfigitems[i].id,1);
 -					}
 -					else
 -					{
 -						CheckDlgButton(hwndDlg,xfireconfigitems[i].id,0);
 -					}
 -				}
 -				//wenn die erste option aktiv ist, untere aktivieren, sonst deaktivieren
 -				if (!(BYTE)IsDlgButtonChecked(hwndDlg, IDC_KONFIG_1 ))
 -				{
 -					CheckDlgButton(hwndDlg,IDC_KONFIG_2,0);
 -					CheckDlgButton(hwndDlg,IDC_KONFIG_3,0);
 -					EnableDlgItem(hwndDlg, IDC_KONFIG_2, FALSE);
 -					EnableDlgItem(hwndDlg, IDC_KONFIG_3, FALSE);
 -				}
 -			}
 -
 -			return TRUE;
 -		}
 -
 -
 -
 -		case WM_COMMAND:
 -			if (!(BYTE)IsDlgButtonChecked(hwndDlg, IDC_KONFIG_1 ))
 -			{
 -				CheckDlgButton(hwndDlg,IDC_KONFIG_2,0);
 -				CheckDlgButton(hwndDlg,IDC_KONFIG_3,0);
 -				EnableDlgItem(hwndDlg, IDC_KONFIG_2, FALSE);
 -				EnableDlgItem(hwndDlg, IDC_KONFIG_3, FALSE);
 -			}
 -			else
 -			{
 -				EnableDlgItem(hwndDlg, IDC_KONFIG_2, TRUE);
 -				EnableDlgItem(hwndDlg, IDC_KONFIG_3, TRUE);
 -			}
 -			if ( LOWORD( wParam ) == IDC_URLNEWACC ) {
 -				CallService(MS_UTILS_OPENURL, 1, ( LPARAM )"http://www.xfire.com/register/" );
 -				return TRUE;
 -			}
 -			if ( LOWORD( wParam ) == IDC_LOSTPW ) {
 -				CallService(MS_UTILS_OPENURL, 1, ( LPARAM )"https://secure.xfire.com/lost_password/" );
 -				return TRUE;
 -			}
 -
 -			if ((LOWORD(wParam) == 19901 || LOWORD(wParam) == 25466 || LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_PIP || LOWORD(wParam) == IDC_PPORT || LOWORD(wParam) == IDC_NICK || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) )
 -				return 0;
 -			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -			break;
 -
 -		case WM_NOTIFY:
 -		{
 -			switch (((LPNMHDR)lParam)->code)
 -			{
 -				case PSN_APPLY:
 -				{
 -					int reconnectRequired=0;
 -					char str[128];
 -					DBVARIANT dbv;
 -
 -					GetDlgItemTextA(hwndDlg,IDC_LOGIN,login,sizeof(login));
 -					dbv.pszVal=NULL;
 -					if (db_get(NULL,protocolname,"login",&dbv) || strcmp(login,dbv.pszVal))
 -						reconnectRequired=1;
 -					if (dbv.pszVal!=NULL) db_free(&dbv);
 -					
 -					//den login lowercasen
 -					int size=strlen(login);
 -					BOOL mustlowercase=FALSE;
 -					for(int i=0;i<size;i++)
 -					{
 -						if (login[i]>='A'&&login[i]<='Z')
 -							mustlowercase=TRUE;
 -						login[i]=tolower(login[i]);
 -					}
 -					if (mustlowercase) {
 -						MessageBox(NULL,TranslateT("The username must be lowercase, so it will be lowercased saved."),TranslateT("XFire Options"),MB_OK|MB_ICONINFORMATION);
 -						SetDlgItemTextA(hwndDlg,IDC_LOGIN,login);
 -					}
 -
 -					db_set_s(NULL,protocolname,"login",login);
 -					db_set_s(NULL,protocolname,"Username",login);
 -
 -					//nur wenn der nick erfolgreich übertragen wurde
 -					GetDlgItemTextA(hwndDlg,IDC_NICK,login,sizeof(login));
 -					dbv.pszVal=NULL;
 -					if (db_get(NULL,protocolname,"Nick",&dbv) || strcmp(login,dbv.pszVal))
 -					{
 -						if (CallService(XFIRE_SET_NICK,0,(WPARAM)login))
 -							db_set_s(NULL,protocolname,"Nick",login);
 -					}
 -					if (dbv.pszVal!=NULL) db_free(&dbv);
 -
 -					GetDlgItemTextA(hwndDlg,IDC_PASSWORD,str,sizeof(str));
 -					dbv.pszVal = NULL;
 -					if (db_get(NULL,protocolname,"password",&dbv) || strcmp(str,dbv.pszVal))
 -						reconnectRequired=1;
 -					if (dbv.pszVal!=NULL) db_free(&dbv);
 -					db_set_s(NULL,protocolname,"password",str);
 -					GetDlgItemTextA(hwndDlg,IDC_SERVER,str,sizeof(str));
 -
 -					//neue preferencen sichern
 -					if (bpStatus!=ID_STATUS_OFFLINE&&bpStatus!=ID_STATUS_CONNECTING)
 -					{
 -						int size=sizeof(xfireconfigitems)/sizeof(xfireconfigitem);
 -						for(int i=0;i<size;i++)
 -						{
 -							if (!(BYTE)IsDlgButtonChecked(hwndDlg, xfireconfigitems[i].id))
 -							{
 -								db_set_b(NULL,protocolname,xfireconfigitems[i].dbentry,0);
 -								xfireconfig[xfireconfigitems[i].xfireconfigid].wasset=1;
 -								xfireconfig[xfireconfigitems[i].xfireconfigid].data[0]=1;
 -								xfireconfig[xfireconfigitems[i].xfireconfigid].data[1]=1;
 -								xfireconfig[xfireconfigitems[i].xfireconfigid].data[2]=0;
 -								xfireconfig[xfireconfigitems[i].xfireconfigid].data[3]=0x30;
 -							}
 -							else
 -							{
 -								xfireconfig[xfireconfigitems[i].xfireconfigid].wasset=0;
 -								db_set_b(NULL,protocolname,xfireconfigitems[i].dbentry,1);
 -							}
 -						}
 -						CallService(XFIRE_SEND_PREFS,0,0);
 -					}
 -
 -					//protocolversion wird autoamtisch vergeben
 -					//GetDlgItemTextA(hwndDlg,IDC_PVER,str,sizeof(str));
 -					//db_set_b(NULL,protocolname,"protover",(char)atoi(str));
 -
 -					if (reconnectRequired) MessageBox(hwndDlg,TranslateT("The changes you have made require you to reconnect to the XFire network before they take effect"),TranslateT("XFire Options"),MB_OK|MB_ICONINFORMATION);
 -					return TRUE;
 -				}
 -
 -			}
 -			break;
 -		}
 -	}
 -	return FALSE;
 -}
 -
 -static INT_PTR CALLBACK DlgProcOpts3(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 -{
 -	char inipath[XFIRE_MAX_STATIC_STRING_LEN]="";
 -	static BOOL inifound = FALSE;
 -	static BOOL dllfound = FALSE;
 -	static int nomsgboxsel[] = {1,0,2};
 -	static HWND hwndTree = NULL;
 -
 -	switch (msg)
 -	{
 -		case WM_INITDIALOG:
 -		{
 -			TranslateDialogDefault(hwndDlg);
 -
 -			hwndTree = GetDlgItem(hwndDlg, IDC_TREE);
 -
 -			SetWindowLongPtr(hwndTree,GWL_STYLE,GetWindowLongPtr(hwndTree,GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES);
 -
 -			SendMessage(hwndDlg, DM_REBUILD_TREE, 0, 0);
 -
 -			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_ADDSTRING, 0, (LPARAM)TranslateT("Hidden" ));
 -			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_ADDSTRING, 0, (LPARAM)TranslateT("Message box" ));
 -			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_ADDSTRING, 0, (LPARAM)TranslateT("Popup" ));
 -
 -			//scanalways
 -			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_ADDSTRING, 0, (LPARAM)TranslateT("No" ));
 -			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_ADDSTRING, 0, (LPARAM)TranslateT("On every start" ));
 -			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_ADDSTRING, 0, (LPARAM)TranslateT("Daily" ));
 -
 -			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_SETCURSEL, db_get_b(NULL,protocolname,"scanalways",0), 0);
 -			
 -			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_SETCURSEL, nomsgboxsel[db_get_b(NULL,protocolname,"nomsgbox",0)], 0);
 -
 -			/* Gruppen raussuchen */
 -			{
 -				int gruppen_id=0;
 -				char temp[8];
 -				DBVARIANT dbv;
 -
 -				SendDlgItemMessage( hwndDlg, IDC_CLANGROUP, CB_ADDSTRING, 0, (LPARAM)TranslateT("<Root Group>" ));
 -				SendDlgItemMessage( hwndDlg, IDC_FOFGROUP, CB_ADDSTRING, 0, (LPARAM)TranslateT("<Root Group>" ));
 -
 -				mir_snprintf(temp, SIZEOF(temp), "%d", gruppen_id);
 -				while(!db_get_s(NULL,"CListGroups",temp,&dbv))
 -				{
 -					gruppen_id++;
 -					mir_snprintf(temp, SIZEOF(temp), "%d", gruppen_id);
 -					
 -					if (dbv.pszVal!=NULL) {
 -						SendDlgItemMessageA( hwndDlg, IDC_CLANGROUP, CB_ADDSTRING, 0, (LPARAM)&dbv.pszVal[1]);
 -						SendDlgItemMessageA( hwndDlg, IDC_FOFGROUP, CB_ADDSTRING, 0, (LPARAM)&dbv.pszVal[1]);
 -						db_free(&dbv);
 -					}
 -				}
 -				SendDlgItemMessage( hwndDlg, IDC_CLANGROUP, CB_SETCURSEL, db_get_b(NULL,protocolname,"mainclangroup",0), 0);
 -				SendDlgItemMessage( hwndDlg, IDC_FOFGROUP, CB_SETCURSEL, db_get_b(NULL,protocolname,"fofgroup",0), 0);
 -			}
 -
 -
 -
 -			return TRUE;
 -		}
 -
 -		case DM_REBUILD_TREE:
 -		//baue optionsmenü auf
 -		TreeView_SelectItem(hwndTree, NULL);
 -		ShowWindow(hwndTree, SW_HIDE);
 -		TreeView_DeleteAllItems(hwndTree);
 -		{
 -			TVINSERTSTRUCT tvis;
 -			HTREEITEM lastSec = NULL;
 -
 -			tvis.hParent = NULL;
 -			tvis.hInsertAfter = TVI_SORT;
 -			tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED;
 -
 -			int size=sizeof(mytree)/sizeof(mytreeitem);
 -
 -
 -			for(int i=0;i<size;i++)
 -			{
 -				tvis.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM;
 -				tvis.item.iImage = -1;
 -				tvis.item.stateMask = TVIS_EXPANDED;
 -				tvis.item.state = TVIS_EXPANDED;
 -				tvis.hParent = lastSec;
 -				if ( mytree[i].parent ) {
 -					tvis.hParent = NULL;
 -					tvis.item.lParam = -1;
 -					tvis.item.pszText = TranslateTS(mytree[i].name);
 -					tvis.hParent = tvis.item.hItem = TreeView_InsertItem( hwndTree, &tvis );
 -					lastSec=tvis.hParent;
 -					tvis.item.stateMask = TVIS_STATEIMAGEMASK;
 -					tvis.item.state = INDEXTOSTATEIMAGEMASK(0);
 -					TreeView_SetItem( hwndTree, &tvis.item );
 -				}
 -				else
 -				{
 -					tvis.item.stateMask = TVIS_STATEIMAGEMASK;
 -					tvis.item.state = INDEXTOSTATEIMAGEMASK(db_get_b(NULL,protocolname,mytree[i].dbentry,0)==1?2:1);
 -					tvis.item.lParam = 0;
 -					tvis.item.pszText = TranslateTS(mytree[i].name);
 -					mytree[i].hitem=TreeView_InsertItem( hwndTree, &tvis );
 -				}
 -			}
 -		}	
 -		{
 -			TVITEM tvi;
 -			tvi.hItem = TreeView_GetRoot(hwndTree);
 -			while ( tvi.hItem != NULL ) {
 -				tvi.mask = TVIF_PARAM | TVIF_HANDLE | TVIF_STATE;
 -				TreeView_GetItem(hwndTree, &tvi);
 -				if ( tvi.lParam == -1 )
 -					TreeView_SetItemState(hwndTree, tvi.hItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
 -
 -				tvi.hItem=TreeView_GetNextSibling(hwndTree,tvi.hItem);
 -			}	
 -		}
 -
 -		
 -		ShowWindow(hwndTree, SW_SHOW);
 -
 -		break;
 -
 -		case PSM_CHANGED:
 -		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -		  break;
 -
 -		case WM_COMMAND:
 -			CheckDlgButton(hwndDlg,IDC_CHKI,dllfound);
 -			CheckDlgButton(hwndDlg,IDC_CHKG,inifound);
 -
 -			if (HIWORD(wParam) == CBN_SELCHANGE)
 -			{
 -				SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -				return 0;
 -			}
 -
 -			if ((LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == 1013 || LOWORD(wParam) == 1015 || LOWORD(wParam) == 3 || LOWORD(wParam) == IDC_NICK || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) )
 -				return 0;
 -			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -			break;
 -		
 -		case WM_NOTIFY:
 -		{
 -			switch (((LPNMHDR)lParam)->idFrom)
 -			{
 -				case IDC_TREE:
 -				{
 -					switch(((NMHDR*)lParam)->code) { //wenn was geändert wurde, apply aktivieren
 -						case TVN_SELCHANGEDA:
 -							SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -							break;
 -						case TVN_KEYDOWN: //tastatursteuerung
 -							{
 -								NMTVKEYDOWN* ptkd = (NMTVKEYDOWN*)lParam;
 -								if (ptkd&&ptkd->wVKey==VK_SPACE&&TreeView_GetSelection(ptkd->hdr.hwndFrom))
 -									SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -							break;
 -							}
 -						case NM_CLICK: //wenn was geklickt wurde, apply aktivieren
 -							{
 -								TVHITTESTINFO hti;
 -								hti.pt.x=(short)LOWORD(GetMessagePos());
 -								hti.pt.y=(short)HIWORD(GetMessagePos());
 -								ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt);
 -								if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti))
 -									if (hti.flags&TVHT_ONITEM)
 -										if (hti.flags&TVHT_ONITEMSTATEICON)
 -											if (TreeView_GetParent(hwndTree, hti.hItem)!=NULL)
 -												SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -								break;
 -							}
 -					}
 -				}
 -			}
 -			switch (((LPNMHDR)lParam)->code)
 -			{
 -				case PSN_APPLY:
 -				{
 -					int reconnectRequired=0;
 -					int ccc;
 -
 -					hwndTree = GetDlgItem(hwndDlg, IDC_TREE);
 -
 -					//optionen speichern
 -					for(int i=0;i<sizeof(mytree)/sizeof(mytreeitem);i++)
 -					{
 -						TVITEM tvic;
 -						if (mytree[i].parent==0)
 -						{
 -							tvic.hItem=mytree[i].hitem;
 -							tvic.mask = TVIF_PARAM | TVIF_HANDLE | TVIF_STATE;
 -
 -							TreeView_GetItem(hwndTree, &tvic);
 -							if ((( tvic.state & TVIS_STATEIMAGEMASK ) >> 12 == 2 )) 
 -								db_set_b(NULL,protocolname,mytree[i].dbentry,1);
 -							else 
 -								db_set_b(NULL,protocolname,mytree[i].dbentry,0);
 -						}
 -					}
 -
 -					db_set_b(NULL,protocolname,"nomsgbox",(BYTE)nomsgboxsel[SendDlgItemMessage(hwndDlg, IDC_NOMSG, CB_GETCURSEL, 0, 0)]);
 -
 -					ccc=SendDlgItemMessage(hwndDlg, IDC_CLANGROUP, CB_GETCURSEL, 0, 0);
 -					db_set_b(NULL,protocolname,"mainclangroup",(BYTE)ccc);
 -					ccc=SendDlgItemMessage(hwndDlg, IDC_FOFGROUP, CB_GETCURSEL, 0, 0);
 -					db_set_b(NULL,protocolname,"fofgroup",(BYTE)ccc);
 -					ccc=SendDlgItemMessage(hwndDlg, IDC_SCANUPDATECB, CB_GETCURSEL, 0, 0);
 -					db_set_b(NULL,protocolname,"scanalways",(BYTE)ccc);
 -
 -					//protocolversion wird autoamtisch vergeben
 -					//GetDlgItemTextA(hwndDlg,IDC_PVER,str,sizeof(str));
 -					//db_set_b(NULL,protocolname,"protover",(char)atoi(str));
 -
 -					if (reconnectRequired) MessageBox(hwndDlg,TranslateT("The changes you have made require you to reconnect to the XFire network before they take effect"),TranslateT("XFire Options"),MB_OK|MB_ICONINFORMATION);
 -					return TRUE;
 -				}
 -
 -			}
 -			break;
 -		}
 -	}
 -	return FALSE;
 -}
 -
 -static INT_PTR CALLBACK DlgProcOpts4(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 -{
 -	char inipath[XFIRE_MAX_STATIC_STRING_LEN]="";
 -	static BOOL inifound = FALSE;
 -	static BOOL dllfound = FALSE;
 -	static int nomsgboxsel[] = {1,0,2};
 -	static HWND hwndTree = NULL;
 -
 -	switch (msg)
 -	{
 -		case WM_INITDIALOG:
 -		{
 -			//addgamedia auf 0 setzen
 -			TranslateDialogDefault(hwndDlg);
 -
 -			strcpy(inipath, XFireGetFoldersPath ("IniFile"));
 -			strcat(inipath, "xfire_games.ini");
 -			
 -			FILE * f = fopen(inipath,"r");
 -			if (f!=NULL)
 -			{
 -				fclose(f);
 -				CheckDlgButton(hwndDlg,IDC_CHKG,1);
 -				inifound = TRUE;
 -			}
 -			else
 -			{
 -				EnableDlgItem(hwndDlg, IDC_SETUPGAMES, FALSE);
 -				inifound = FALSE;
 -			}
 -
 -			strcpy(inipath, XFireGetFoldersPath ("IconsFile"));
 -			strcat(inipath, "icons.dll");
 -			
 -			f = fopen(inipath,"r");
 -			if (f!=NULL)
 -			{
 -				fclose(f);
 -				CheckDlgButton(hwndDlg,IDC_CHKI,1);
 -				dllfound = TRUE;
 -			}
 -			else
 -				dllfound = FALSE;
 -
 -			//alle blockierten nutzer in die liste einfügen
 -			DBCONTACTENUMSETTINGS dbces;
 -
 -			// enum all setting the contact has for the module
 -			dbces.pfnEnumProc = enumSettingsProc;
 -			dbces.szModule = "XFireBlock";
 -			dbces.lParam = (LPARAM)hwndDlg; 
 -			CallService(MS_DB_CONTACT_ENUMSETTINGS, 0,(LPARAM)&dbces);
 -
 -			SendMessage(GetDlgItem(hwndDlg,IDC_REMUSER),BM_SETIMAGE,IMAGE_ICON,(WPARAM)LoadSkinnedIcon(SKINICON_OTHER_DELETE));
 -
 -			strcpy(inipath, XFireGetFoldersPath ("IniFile"));
 -			SetDlgItemTextA(hwndDlg,IDC_FILESSHOULDBE,inipath);
 -
 -			EnableDlgItem(hwndDlg, IDC_REMUSER, FALSE);
 -
 -			return TRUE;
 -		}
 -
 -		case PSM_CHANGED:
 -		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -		  break;
 -
 -		case WM_COMMAND:
 -			CheckDlgButton(hwndDlg,IDC_CHKI,dllfound);
 -			CheckDlgButton(hwndDlg,IDC_CHKG,inifound);
 -
 -			if (LOWORD(wParam) == IDC_REMUSER) //nutzer soll aus der blockierliste raus
 -			{
 -				char temp[255];
 -				int sel=SendDlgItemMessage(hwndDlg, IDC_BLOCKUSER, LB_GETCURSEL, 0, 0);
 -				if (sel!=LB_ERR) //nur wenn was ausgewählt wurde
 -				{
 -					SendDlgItemMessageA(hwndDlg, IDC_BLOCKUSER, LB_GETTEXT, sel, (LPARAM)temp); 
 -					SendDlgItemMessage(hwndDlg, IDC_BLOCKUSER, LB_DELETESTRING, sel, 0);
 -					db_unset(NULL,"XFireBlock",temp);
 -					if (SendDlgItemMessage(hwndDlg, IDC_BLOCKUSER, LB_GETCOUNT, 0, 0)==0)
 -						EnableDlgItem(hwndDlg, IDC_REMUSER, FALSE);
 -				}
 -			}
 -
 -
 -			if ((LOWORD(wParam) == 9508 || LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_SETUPGAMES || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) )
 -				return 0;
 -
 -			break;
 -		
 -		case WM_NOTIFY:
 -		{
 -			switch (((LPNMHDR)lParam)->code)
 -			{
 -				case PSN_APPLY:
 -				{
 -					return TRUE;
 -				}
 -
 -			}
 -			break;
 -		}
 -	}
 -	return FALSE;
 -}
 -
 -static INT_PTR CALLBACK DlgProcOpts5(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 -{
 -	DBVARIANT dbv;
 -
 -	switch (msg)
 -	{
 -		case WM_INITDIALOG:
 -		{
 -			TranslateDialogDefault(hwndDlg);
 -			
 -			CheckDlgButton(hwndDlg,IDC_ENABLESTSMSG,db_get_b(NULL,protocolname,"autosetstatusmsg",0));
 -			CheckDlgButton(hwndDlg,IDC_CHGSTATUS,db_get_b(NULL,protocolname,"statuschgtype",0));
 -			CheckDlgButton(hwndDlg,IDC_DNDFIRST,db_get_b(NULL,protocolname,"dndfirst",0));
 -			if (!db_get(NULL,protocolname,"setstatusmsg",&dbv)) {
 -				SetDlgItemTextA(hwndDlg,IDC_STATUSMSG,dbv.pszVal);
 -				db_free(&dbv);
 -			}
 -			if (!IsDlgButtonChecked(hwndDlg, IDC_ENABLESTSMSG))
 -			{
 -				EnableDlgItem(hwndDlg, IDC_STATUSMSG, FALSE);
 -			}
 -		/*	if (!ServiceExists(MS_VARS_FORMATSTRING))
 -			{
 -				EnableDlgItem(hwndDlg, IDC_STATUSMSG, FALSE);
 -				EnableDlgItem(hwndDlg, IDC_ENABLESTSMSG, FALSE);
 -				EnableDlgItem(hwndDlg, IDC_CHGSTATUS, FALSE);
 -				EnableDlgItem(hwndDlg, IDC_DNDFIRST, FALSE);
 -			}*/
 -
 -			return TRUE;
 -		}
 -
 -		case PSM_CHANGED:
 -		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -		  break;
 -
 -		case WM_COMMAND:
 -			if ( IsDlgButtonChecked(hwndDlg, IDC_ENABLESTSMSG) ) {
 -				EnableDlgItem(hwndDlg, IDC_STATUSMSG, TRUE);
 -			}
 -			else
 -			{
 -				EnableDlgItem(hwndDlg, IDC_STATUSMSG, FALSE);
 -			}
 -
 -			if ((LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_STATUSMSG || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) )
 -				return 0;
 -			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 -
 -			break;
 -		
 -		case WM_NOTIFY:
 -		{
 -			switch (((LPNMHDR)lParam)->code)
 -			{
 -				case PSN_APPLY:
 -				{
 -					int reconnectRequired=0;
 -					char str[512];
 -
 -					GetDlgItemTextA(hwndDlg,IDC_STATUSMSG,str,sizeof(str));
 -					db_set_s(NULL,protocolname, "setstatusmsg", str);
 -
 -					db_set_b(NULL,protocolname, "autosetstatusmsg", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ENABLESTSMSG));
 -					db_set_b(NULL,protocolname, "statuschgtype", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CHGSTATUS));
 -					db_set_b(NULL,protocolname, "dndfirst", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_DNDFIRST));
 -
 -					return TRUE;
 -				}
 -
 -			}
 -			break;
 -		}
 -	}
 -	return FALSE;
 -}
 -
 -static INT_PTR CALLBACK DlgProcOpts6(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 -{
 -	switch (msg)
 -	{
 -		case WM_INITDIALOG:
 -		{
 -			addgameDialog=NULL;
 -
 -			TranslateDialogDefault(hwndDlg);
 -
 -			//elemente erstmal abstellen
 -			EnableDlgItem(hwndDlg, IDC_DONTDETECT, FALSE);
 -			EnableDlgItem(hwndDlg, IDC_NOSTATUSMSG, FALSE);
 -			EnableDlgItem(hwndDlg, IDC_NOTINSTARTMENU, FALSE);
 -			EnableDlgItem(hwndDlg, IDC_APPLY, FALSE);
 -			EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, FALSE);	
 -			ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_HIDE);
 -
 -			//gamelist füllen
 -			SendMessage(hwndDlg,WM_FILLGAMELIST,0,0);
 -
 -			//SendMessage(GetDlgItem(hwndDlg,IDC_CREATETXTLIST),BM_SETIMAGE,IMAGE_ICON,(WPARAM)LoadSkinnedIcon(SKINICON_OTHER_USERDETAILS));
 -
 -			return TRUE;
 -		}
 -		case WM_FILLGAMELIST:
 -		{
 -			//spielliste leeren
 -			SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_RESETCONTENT, 0, 0);
 -			//spiele auslesen und in die liste einfügen
 -			int found=db_get_w(NULL,protocolname,"foundgames",0);
 -			char temp[XFIRE_MAXSIZEOFGAMENAME];
 -			for(int i=0;i<found;i++)
 -			{
 -				//id auslesen
 -				mir_snprintf(temp, SIZEOF(temp), "gameid_%d", i);
 -				int gameid=db_get_w(NULL,protocolname,temp,0);
 -				//spielnamen auslesen
 -				xgamelist.getGamename(gameid,temp,XFIRE_MAXSIZEOFGAMENAME);
 -				//eintrag einfügen
 -				int idx=SendDlgItemMessageA( (HWND)hwndDlg, IDC_LGAMELIST, LB_ADDSTRING, 0, (LPARAM)temp);
 -				//id an das element übergeben
 -				SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_SETITEMDATA, idx, gameid);
 -			}
 -			return TRUE;
 -		}
 -		case WM_COMMAND:
 -		{
 -			if (LOWORD(wParam)==IDC_REMOVE)
 -			{
 -				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0);
 -
 -				//was ausgewählt in der liste?
 -				if (idx!=LB_ERR) {
 -					//user fragen ob er das game wirklich löschen will
 -					if (MessageBox(hwndDlg,TranslateT("Are you sure you want to remove this game?"),TranslateT("XFire Options"),MB_YESNO|MB_ICONQUESTION)==IDYES) {
 -						//gameliste blocken
 -						xgamelist.Block(TRUE);
 -						//spielid auslesen
 -						int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0);
 -						//spiel per gameid entfernen
 -						xgamelist.Removegame(gameid);
 -						//db säubern
 -						xgamelist.clearDatabase(TRUE);
 -						//derzeitige gameliste in die datenbank eintragen
 -						xgamelist.writeDatabase();
 -						//startmenu leeren
 -						xgamelist.clearStartmenu();
 -						//startmenu neuerzeugen
 -						xgamelist.createStartmenu();						
 -						//gameliste unblocken
 -						xgamelist.Block(FALSE);
 -						//gamelist neu füllen
 -						SendMessage(hwndDlg,WM_FILLGAMELIST,0,0);
 -						//erstes vorauswählen
 -						SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_SETCURSEL, 0, 0);
 -						//liste refresh
 -						SendMessage(hwndDlg,WM_COMMAND,MAKELONG(IDC_LGAMELIST,LBN_SELCHANGE),0);
 -					}
 -				}
 -				else
 -					MessageBox(hwndDlg,TranslateT("Please select a game."),TranslateT("XFire Options"),MB_OK|MB_ICONEXCLAMATION);
 -
 -			}
 -			else
 -			if (LOWORD(wParam)==IDC_ADDGAME)
 -			{
 -				//gameliste blocken
 -				xgamelist.Block(TRUE);
 -				//if (DialogBox(hinstance,MAKEINTRESOURCE(IDD_ADDGAME),hwndDlg,DlgAddGameProc)) {
 -				AddGameDialog(hwndDlg);
 -				//gameliste unblocken
 -				xgamelist.Block(FALSE);
 -				//gamelist neu füllen
 -				SendMessage(hwndDlg,WM_FILLGAMELIST,0,0);
 -			}
 -			//copy gamelist to clipboard button entfernt
 -			/*else if (LOWORD(wParam)==IDC_CREATETXTLIST) //gameliste als textform für debugging erstellen
 -			{
 -				//gameliste blocken
 -				xgamelist.Block(TRUE);
 -
 -				//alle games durchgehen
 -				Xfire_game* nextgame;
 -				//output string
 -				char* out=new char[10];
 -				xgamelist.setString("Xfire-gamelist:\r\n",&out);
 -				while(xgamelist.getnextGame(&nextgame))
 -				{
 -					if (nextgame->name)
 -					{
 -						xgamelist.appendString("\r\nName: ",&out);
 -						xgamelist.appendString(nextgame->name,&out);
 -					}
 -					if (nextgame->path)
 -					{
 -						xgamelist.appendString("\r\nPath: ",&out);
 -						xgamelist.appendString(nextgame->path,&out);
 -					}
 -					if (nextgame->launchparams)
 -					{
 -						xgamelist.appendString("\r\nLaunch: ",&out);
 -						xgamelist.appendString(nextgame->launchparams,&out);
 -					}
 -
 -					char temp[10];
 -					_itoa(nextgame->id,temp,10);
 -					xgamelist.appendString("\r\nId: ",&out);
 -					xgamelist.appendString(temp,&out);
 -
 -					_itoa(nextgame->send_gameid,temp,10);
 -					xgamelist.appendString("\r\nSend-Id: ",&out);
 -					xgamelist.appendString(temp,&out);
 -
 -					if (nextgame->skip)
 -					{
 -						xgamelist.appendString("\r\nThis game will be skipped in game detection!",&out);
 -					}
 -
 -					xgamelist.appendString("\r\n",&out);
 -				}
 -
 -				if (OpenClipboard(NULL))
 -				{
 -					HGLOBAL clipbuffer;
 -					char* buffer;
 -
 -					EmptyClipboard();
 -					clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(out)+1);
 -					buffer = (char*)GlobalLock(clipbuffer);
 -					strcpy(buffer, LPCSTR(out));
 -					GlobalUnlock(clipbuffer);
 -
 -					SetClipboardData(CF_TEXT, clipbuffer);
 -					CloseClipboard();
 -				}
 -
 -				if (out!=NULL) delete[] out;
 -
 -				//gameliste unblocken
 -				xgamelist.Block(FALSE);
 -			}*/
 -			else if (LOWORD(wParam)==IDC_EDITGAME) {
 -				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0);
 -
 -				//was ausgewählt in der liste?
 -				if (idx!=LB_ERR) {
 -					//gameliste blocken
 -					xgamelist.Block(TRUE);
 -					//gameid der aktuellen auswahl auslesen
 -					int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0);
 -					//spielobject holen
 -					Xfire_game* tempgame=xgamelist.getGamebyGameid(gameid);
 -					//gültiger verweis?
 -					if (tempgame) {
 -						//editmodus des addgamedialog
 -						AddGameDialog(hwndDlg,tempgame);
 -						//elemente wieder unsichtbar machen
 -						EnableDlgItem(hwndDlg, IDC_DONTDETECT, FALSE);
 -						EnableDlgItem(hwndDlg, IDC_NOSTATUSMSG, FALSE);
 -						EnableDlgItem(hwndDlg, IDC_NOTINSTARTMENU, FALSE);
 -						EnableDlgItem(hwndDlg, IDC_APPLY, FALSE);
 -						EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, FALSE);	
 -						ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_HIDE);
 -					}
 -					else
 -						MessageBox(hwndDlg,TranslateT("Error: unknown game ID."),TranslateT("XFire Options"),MB_OK|MB_ICONEXCLAMATION);
 -					//gameliste unblocken
 -					xgamelist.Block(FALSE);
 -					//gamelist neu füllen
 -					SendMessage(hwndDlg,WM_FILLGAMELIST,0,0);
 -				}
 -				else
 -					MessageBox(hwndDlg,TranslateT("Please select a game."),TranslateT("XFire Options"),MB_OK|MB_ICONEXCLAMATION);
 -			}else //wurde ein spiel aus der liste gewählt?
 -			if (HIWORD(wParam)==LBN_SELCHANGE && LOWORD(wParam)==IDC_LGAMELIST)
 -			{
 -				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0);
 -				//es wurde was ausgewählt?
 -				if (idx!=LB_ERR)
 -				{
 -					//textlänge auslesen
 -					int size=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETTEXTLEN, idx, 0);
 -					//textbuffer anlegen
 -					char* text=new char[size+1];
 -					SendDlgItemMessageA(hwndDlg, IDC_LGAMELIST, LB_GETTEXT, idx, (LPARAM)text);
 -					SetDlgItemTextA(hwndDlg,IDC_GAMENAME,text);
 -					//textbuffer löschen
 -					if (text!=NULL)
 -					{
 -						delete text;
 -						text=NULL;
 -					}
 -					//id des spielsbekommen
 -					int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0);
 -
 -					HICON hicon=xgamelist.iconmngr.getGameIcon(gameid);
 -					//iconhandle holen und setzen
 -					if (hicon)
 -						SendMessage(GetDlgItem(hwndDlg,IDC_GAMEICO),STM_SETICON,(WPARAM)hicon,0);
 -					else
 -						SendMessage(GetDlgItem(hwndDlg,IDC_GAMEICO),STM_SETICON,0,0);
 -
 -					//elemente aktivieren
 -					EnableDlgItem(hwndDlg, IDC_DONTDETECT, TRUE);
 -					EnableDlgItem(hwndDlg, IDC_NOSTATUSMSG, TRUE);
 -					EnableDlgItem(hwndDlg, IDC_APPLY, TRUE);
 -					EnableDlgItem(hwndDlg, IDC_NOTINSTARTMENU, TRUE);
 -					EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, TRUE);
 -
 -					Xfire_game* xgtemp = xgamelist.getGamebyGameid(gameid);
 -					if (xgtemp && xgtemp->custom)
 -					{
 -						ShowWindow(GetDlgItem(hwndDlg,IDC_MANADDED),SW_SHOW);
 -						ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_SHOW);
 -					}
 -					else
 -					{
 -						ShowWindow(GetDlgItem(hwndDlg,IDC_MANADDED),SW_HIDE);
 -						ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_HIDE);
 -					}
 -
 -					//gameskip wert setzen
 -					char temp[64]="";
 -					mir_snprintf(temp, SIZEOF(temp), "gameskip_%d", gameid);
 -					CheckDlgButton(hwndDlg,IDC_DONTDETECT,db_get_b(NULL,protocolname,temp,0));
 -					mir_snprintf(temp, SIZEOF(temp), "gamenostatus_%d", gameid);
 -					CheckDlgButton(hwndDlg,IDC_NOSTATUSMSG,db_get_b(NULL,protocolname,temp,0));
 -					mir_snprintf(temp, SIZEOF(temp), "notinstartmenu_%d", gameid);
 -					CheckDlgButton(hwndDlg,IDC_NOTINSTARTMENU,db_get_b(NULL,protocolname,temp,0));
 -					
 -					//extra parameter auslesen, aber nur, wenn das spiel auch sowas unterstützt
 -					if (xgtemp && xgtemp->haveExtraGameArgs())
 -					{
 -						EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, TRUE);
 -						mir_snprintf(temp, SIZEOF(temp), "gameextraparams_%d", gameid);
 -						DBVARIANT dbv;
 -						if (!db_get(NULL,protocolname,temp,&dbv))
 -						{
 -							SetDlgItemTextA(hwndDlg,IDC_EXTRAPARAMS,dbv.pszVal);	
 -							db_free(&dbv);
 -						}
 -						else
 -							SetDlgItemText(hwndDlg,IDC_EXTRAPARAMS,_T(""));	
 -					}
 -					else
 -					{
 -						EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, FALSE);
 -						SetDlgItemText(hwndDlg,IDC_EXTRAPARAMS,TranslateT("Not supported"));	
 -					}
 -				}
 -			}
 -			else if (LOWORD(wParam)==IDC_APPLY)
 -			{
 -				//auswahl speichern
 -				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0);
 -				//es wurde was ausgewählt?
 -				if (idx!=LB_ERR)
 -				{
 -					int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0);
 -					int dbid;
 -					
 -					//gamelist blocken
 -					xgamelist.Block(TRUE);
 -
 -					if (xgamelist.Gameinlist(gameid,&dbid))
 -					{
 -						Xfire_game* game=xgamelist.getGame(dbid);
 -						if (game)
 -						{
 -							game->skip=(BYTE)IsDlgButtonChecked(hwndDlg, IDC_DONTDETECT);
 -							game->noicqstatus=(BYTE)IsDlgButtonChecked(hwndDlg, IDC_NOSTATUSMSG);
 -							game->notinstartmenu=(BYTE)IsDlgButtonChecked(hwndDlg, IDC_NOTINSTARTMENU);
 -
 -							//extra parameter auslesen und das gameobj schreiben
 -							char str[128]="";
 -							GetDlgItemTextA(hwndDlg,IDC_EXTRAPARAMS,str,sizeof(str));
 -							if (str[0]!=0)
 -							{
 -								//extra parameter sind gesetzt, zuweisen
 -								game->setString(str,&game->extraparams);
 -							}
 -							else
 -							{
 -								//extra parameter leer, wenn gesetzt entfernen/freigeben
 -								if (game->extraparams)
 -								{
 -									delete[] game->extraparams;
 -									game->extraparams=NULL;
 -								}
 -							}
 -
 -
 -							game->refreshMenuitem();
 -							game->writeToDB(dbid);
 -
 -							SetDlgItemText(hwndDlg,IDC_TEXTSTATUS,TranslateT("Configuration saved!"));
 -						}
 -						else
 -						{
 -							SetDlgItemText(hwndDlg,IDC_TEXTSTATUS,TranslateT("Game not found?!"));
 -						}
 -					}
 -					else
 -					{
 -						SetDlgItemText(hwndDlg,IDC_TEXTSTATUS,TranslateT("Game not found?!"));
 -					}
 -
 -					//gamelist unblocken
 -					xgamelist.Block(FALSE);
 -				}
 -			}
 -			break;
 -		}
 -		
 -		case WM_NOTIFY:
 -		{
 -			break;
 -		}
 -	}
 -	return FALSE;
 -}
 -
 -int OptInit(WPARAM wParam,LPARAM)
 -{
 -	ghwndDlg2 = NULL;
 -
 -	OPTIONSDIALOGPAGE odp = { sizeof(odp) };
 -	odp.hInstance = hinstance;
 -	odp.ptszTitle = LPGENT("XFire");
 -	odp.ptszGroup = LPGENT("Network");
 -	odp.flags = ODPF_BOLDGROUPS| ODPF_TCHAR;
 -
 -	odp.pfnDlgProc = DlgProcOpts2;
 -	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTLOGIN);
 -	odp.ptszTab = LPGENT("Account");
 -	Options_AddPage(wParam, &odp);
 -
 -	odp.pfnDlgProc = DlgProcOpts3;
 -	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT);
 -	odp.ptszTab = LPGENT("Features");
 -	Options_AddPage(wParam, &odp);
 -
 -	odp.pfnDlgProc = DlgProcOpts4;
 -	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT2);
 -	odp.ptszTab = LPGENT("Blocklist / Games");
 -	Options_AddPage(wParam, &odp);
 -
 -	odp.pfnDlgProc = DlgProcOpts5;
 -	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT3);
 -	odp.ptszTab = LPGENT("StatusMsg");
 -	Options_AddPage(wParam, &odp);
 -
 -	odp.pfnDlgProc = DlgProcOpts6;
 -	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT4);
 -	odp.ptszTab = LPGENT("Games");
 -	Options_AddPage(wParam, &odp);
 -	return 0;
 +/* + *  Plugin of miranda IM(ICQ) for Communicating with users of the XFire Network.  + * + *  Copyright (C) 2010 by + *          dufte <dufte@justmail.de> + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA + * + *  Based on J. Lawler              - BaseProtocol + *			 Herbert Poul/Beat Wolf - xfirelib + * + *  Miranda ICQ: the free icq client for MS Windows  + *  Copyright (C) 2000-2008  Richard Hughes, Roland Rabien & Tristan Van de Vreede + * + */ + +#include "stdafx.h" + +#include "baseProtocol.h" +#include "m_variables.h" +#include "recvprefspacket.h" +#include "Xfire_gamelist.h" +#include "addgamedialog.h" +#include "variables.h" + +extern HANDLE XFireWorkingFolder; +extern HANDLE XFireIconFolder; +extern xfire_prefitem xfireconfig[XFIRE_RECVPREFSPACKET_MAXCONFIGS]; +extern Xfire_gamelist xgamelist; + +struct mytreeitem { +	TCHAR name[256]; +	char dbentry[256]; +	int parent; +	int icon; +	HTREEITEM hitem; +}; + +extern int bpStatus; +BOOL alreadyInit=FALSE; +HWND ghwndDlg2; +HWND addgameDialog=NULL; + +xfireconfigitem xfireconfigitems[XFIRE_RECVPREFSPACKET_SUPPORTEDONFIGS] = { +	{IDC_KONFIG_1,1,"sendgamestatus"}, +	{IDC_KONFIG_2,3,"hideprofile"}, +	{IDC_KONFIG_3,2,"ipportdetec"}, +	{IDC_KONFIG_4,0xa,"shownicks"}, +	{IDC_KONFIG_5,0xb,"ts2detection"}, +	{IDC_KONFIG_6,0xc,"sendtyping"}, +	{IDC_KONFIG_7,8,"friendsoffriends"}, +}; + +#define NUM_ICONS 4 + +static mytreeitem mytree[] = { +	{LPGENT("Avatars"),"",1,0}, +	{LPGENT("Disable avatars"),"noavatars",0,0}, +	{LPGENT("Don't download avatars of clan members"),"noclanavatars",0,0}, +	{LPGENT("Use alternate way for Avatar download"),"specialavatarload",0,0}, +	{LPGENT("General"),"",1,0}, +	{LPGENT("Automatically reconnect on protocol version changes"),"recprotoverchg",0,0}, +	{LPGENT("No IP/Port in StatusMsg"),"noipportinstatus",0,0}, +	{LPGENT("Use Online status for unsupported global statuses"),"oninsteadafk",0,0}, +	{LPGENT("Don't move friends to clan groups"),"skipfriendsgroups",0,0}, +	{LPGENT("GameServerQuery support"),"gsqsupport",0,0}, +	{LPGENT("No custom away message"),"nocustomaway",0,0}, +	{LPGENT("Remove friend of friend buddies from database"),"fofdbremove",0,0}, +	/*{"Show usernames only","onlyusername",0},*/ +	{LPGENT("Hide yourself in buddylist"),"skipmyself",0,0}, +	{LPGENT("Don't display game search results"),"dontdisresults",0,0}, +	{LPGENT("Don't display game search status window"),"dontdissstatus",0,0}, +	{LPGENT("Display popup if someone starts a game"),"gamepopup",0,0}, +	{LPGENT("Don't automatically create clan groups"),"noclangroups",0,0}, +	{LPGENT("Enable MBot support"),"mbotsupport",0,0}, +	{LPGENT("Game detection"),"",1,0}, +	/*{"Scan for games on every Miranda start","scanalways",0},*/ +	{LPGENT("Disable game detection"),"nogamedetect",0,0}, +	/*{"Enable server IP/Port detection","ipportdetec",0},*/ +	/*{"Enable TeamSpeak2/Ventrilo detection","",0},*/ +	{LPGENT("Use TSRemote.dll to get TeamSpeak server info"),"ts2useremote",0,0}, +	{LPGENT("Disable popups when ingame"),"nopopups",0,0}, +	{LPGENT("Disable sound events when ingame"),"nosoundev",0,0}, +	{LPGENT("Files"),"",1,0}, +	{LPGENT("Automatically update xfire_games.ini (pro-laming.de)"),"autoiniupdate",0,0}, +	{LPGENT("Automatically update icons.dll (pro-laming.de)"),"autoicodllupdate",0,0}, +	{LPGENT("Download missing game icons from Xfire website"),"xfiresitegameico",0,0}, +	{LPGENT("No backup on update"),"nobackupini",0,0}, +	{LPGENT("Background updating"),"dontaskforupdate",0,0}, +}; + +//funktion zum auslesen aller einträge unter XFireBlock +static int enumSettingsProc(const char *szSetting,LPARAM lParam) +{  +	if (strlen(szSetting)>0) +	{ +		SendDlgItemMessageA( (HWND)lParam, IDC_BLOCKUSER, LB_ADDSTRING, 0, (LPARAM)szSetting); +	} +	EnableDlgItem((HWND)lParam, IDC_REMUSER, TRUE); +	return 0; +} + +//damit die änderungen sofort sichtbar sind +static INT_PTR CALLBACK DlgProcOpts2(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ +	char inipath[XFIRE_MAX_STATIC_STRING_LEN]=""; +	static BOOL inifound = FALSE; +	static BOOL dllfound = FALSE; +	static int nomsgboxsel[] = {1,0,2}; +	static HWND hwndTree = NULL; +	static char login[128]; + +	switch (msg) +	{ +		case PSM_CHANGED: +		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +		  break; + +		case WM_INITDIALOG: +		{ +			DBVARIANT dbv; +			TranslateDialogDefault(hwndDlg); + +			ghwndDlg2=hwndDlg; + +			hwndTree = GetDlgItem(hwndDlg, IDC_TREE); +			SetWindowLongPtr(hwndTree,GWL_STYLE,GetWindowLongPtr(hwndTree,GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES); +			SendMessage(hwndDlg, DM_REBUILD_TREE, 0, 0); + +			strcpy(inipath, XFireGetFoldersPath ("IniFile")); +			strcat(inipath, "xfire_games.ini"); +			 +			FILE * f = fopen(inipath,"r"); +			if (f!=NULL) +			{ +				fclose(f); +				CheckDlgButton(hwndDlg,IDC_CHKG,1); +				inifound = TRUE; +			} +			else +			{ +				EnableDlgItem(hwndDlg, IDC_SETUPGAMES, FALSE); +				inifound = FALSE; +			} + +			strcpy(inipath, XFireGetFoldersPath ("IconsFile")); +			strcat(inipath, "icons.dll"); +			 +			f = fopen(inipath,"r"); +			if (f!=NULL) +			{ +				fclose(f); +				CheckDlgButton(hwndDlg,IDC_CHKI,1); +				dllfound = TRUE; +			} +			else +				dllfound = FALSE; + +			if (!db_get(NULL,protocolname,"login",&dbv)) { +				SetDlgItemTextA(hwndDlg,IDC_LOGIN,dbv.pszVal); +				db_free(&dbv); +			} +			if (!db_get(NULL,protocolname,"Nick",&dbv)) { +				SetDlgItemTextA(hwndDlg,IDC_NICK,dbv.pszVal); +				db_free(&dbv); +			} +			if (!db_get(NULL,protocolname,"password",&dbv)) { +				//bit of a security hole here, since it's easy to extract a password from an edit box +				SetDlgItemTextA(hwndDlg,IDC_PASSWORD,dbv.pszVal); +				db_free(&dbv); +			} + +			char temp[255]=""; +			mir_snprintf(temp, SIZEOF(temp), "%d", db_get_b(NULL, protocolname, "protover", 0x5b)); +			SetDlgItemTextA(hwndDlg,IDC_PVER,temp); + +			EnableWindow(GetDlgItem(hwndDlg,IDC_LASTGAME),FALSE); +			if (!db_get(NULL,protocolname,"LastGame",&dbv)) { +				SetDlgItemTextA(hwndDlg,IDC_LASTGAME,dbv.pszVal); +				db_free(&dbv); +			} + +			if (bpStatus==ID_STATUS_OFFLINE&&bpStatus!=ID_STATUS_CONNECTING) { +				EnableDlgItem(hwndDlg, IDC_NICK, FALSE); +			} +			else +			{ +				int size=sizeof(xfireconfigitems)/sizeof(xfireconfigitem); +				for(int i=0;i<size;i++) +				{ +					EnableDlgItem(hwndDlg, xfireconfigitems[i].id, TRUE); +					if (xfireconfig[xfireconfigitems[i].xfireconfigid].wasset==0) +					{ +						CheckDlgButton(hwndDlg,xfireconfigitems[i].id,1); +					} +					else +					{ +						CheckDlgButton(hwndDlg,xfireconfigitems[i].id,0); +					} +				} +				//wenn die erste option aktiv ist, untere aktivieren, sonst deaktivieren +				if (!(BYTE)IsDlgButtonChecked(hwndDlg, IDC_KONFIG_1 )) +				{ +					CheckDlgButton(hwndDlg,IDC_KONFIG_2,0); +					CheckDlgButton(hwndDlg,IDC_KONFIG_3,0); +					EnableDlgItem(hwndDlg, IDC_KONFIG_2, FALSE); +					EnableDlgItem(hwndDlg, IDC_KONFIG_3, FALSE); +				} +			} + +			return TRUE; +		} + + + +		case WM_COMMAND: +			if (!(BYTE)IsDlgButtonChecked(hwndDlg, IDC_KONFIG_1 )) +			{ +				CheckDlgButton(hwndDlg,IDC_KONFIG_2,0); +				CheckDlgButton(hwndDlg,IDC_KONFIG_3,0); +				EnableDlgItem(hwndDlg, IDC_KONFIG_2, FALSE); +				EnableDlgItem(hwndDlg, IDC_KONFIG_3, FALSE); +			} +			else +			{ +				EnableDlgItem(hwndDlg, IDC_KONFIG_2, TRUE); +				EnableDlgItem(hwndDlg, IDC_KONFIG_3, TRUE); +			} +			if ( LOWORD( wParam ) == IDC_URLNEWACC ) { +				CallService(MS_UTILS_OPENURL, 1, ( LPARAM )"http://www.xfire.com/register/" ); +				return TRUE; +			} +			if ( LOWORD( wParam ) == IDC_LOSTPW ) { +				CallService(MS_UTILS_OPENURL, 1, ( LPARAM )"https://secure.xfire.com/lost_password/" ); +				return TRUE; +			} + +			if ((LOWORD(wParam) == 19901 || LOWORD(wParam) == 25466 || LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_PIP || LOWORD(wParam) == IDC_PPORT || LOWORD(wParam) == IDC_NICK || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) ) +				return 0; +			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +			break; + +		case WM_NOTIFY: +		{ +			switch (((LPNMHDR)lParam)->code) +			{ +				case PSN_APPLY: +				{ +					int reconnectRequired = 0; +					char str[128]; +					DBVARIANT dbv; + +					GetDlgItemTextA(hwndDlg,IDC_LOGIN,login,sizeof(login)); +					dbv.pszVal = NULL; +					if (db_get(NULL,protocolname,"login",&dbv) || lstrcmpA(login, dbv.pszVal)) +						reconnectRequired = 1; +					if (dbv.pszVal != NULL) +						db_free(&dbv); +					 +					//den login lowercasen +					int size = lstrlenA(login); +					BOOL mustlowercase = FALSE; +					for(int i = 0; i < size; i ++) +					{ +						if (login[i]>='A'&&login[i]<='Z') +							mustlowercase=TRUE; +						login[i]=tolower(login[i]); +					} +					if (mustlowercase) { +						MessageBox(NULL,TranslateT("The username must be lowercase, so it will be lowercased saved."),TranslateT("XFire Options"),MB_OK|MB_ICONINFORMATION); +						SetDlgItemTextA(hwndDlg,IDC_LOGIN,login); +					} + +					db_set_s(NULL,protocolname,"login",login); +					db_set_s(NULL,protocolname,"Username",login); + +					//nur wenn der nick erfolgreich übertragen wurde +					GetDlgItemTextA(hwndDlg,IDC_NICK,login,sizeof(login)); +					dbv.pszVal = NULL; +					if (db_get(NULL,protocolname,"Nick",&dbv) || lstrcmpA(login, dbv.pszVal)) +					{ +						if (CallService(XFIRE_SET_NICK,0,(WPARAM)login)) +							db_set_s(NULL,protocolname,"Nick",login); +					} +					if (dbv.pszVal != NULL) +						db_free(&dbv); + +					GetDlgItemTextA(hwndDlg,IDC_PASSWORD,str,sizeof(str)); +					dbv.pszVal = NULL; +					if (db_get(NULL,protocolname,"password",&dbv) || lstrcmpA(str, dbv.pszVal)) +						reconnectRequired=1; +					if (dbv.pszVal != NULL) +						db_free(&dbv); +					db_set_s(NULL,protocolname,"password",str); +					GetDlgItemTextA(hwndDlg,IDC_SERVER,str,sizeof(str)); + +					//neue preferencen sichern +					if (bpStatus!=ID_STATUS_OFFLINE&&bpStatus!=ID_STATUS_CONNECTING) +					{ +						int size=sizeof(xfireconfigitems)/sizeof(xfireconfigitem); +						for(int i=0;i<size;i++) +						{ +							if (!(BYTE)IsDlgButtonChecked(hwndDlg, xfireconfigitems[i].id)) +							{ +								db_set_b(NULL,protocolname,xfireconfigitems[i].dbentry,0); +								xfireconfig[xfireconfigitems[i].xfireconfigid].wasset=1; +								xfireconfig[xfireconfigitems[i].xfireconfigid].data[0]=1; +								xfireconfig[xfireconfigitems[i].xfireconfigid].data[1]=1; +								xfireconfig[xfireconfigitems[i].xfireconfigid].data[2]=0; +								xfireconfig[xfireconfigitems[i].xfireconfigid].data[3]=0x30; +							} +							else +							{ +								xfireconfig[xfireconfigitems[i].xfireconfigid].wasset=0; +								db_set_b(NULL,protocolname,xfireconfigitems[i].dbentry,1); +							} +						} +						CallService(XFIRE_SEND_PREFS,0,0); +					} + +					//protocolversion wird autoamtisch vergeben +					//GetDlgItemTextA(hwndDlg,IDC_PVER,str,sizeof(str)); +					//db_set_b(NULL,protocolname,"protover",(char)atoi(str)); + +					if (reconnectRequired) +						MessageBox(hwndDlg,TranslateT("The changes you have made require you to reconnect to the XFire network before they take effect"),TranslateT("XFire Options"),MB_OK|MB_ICONINFORMATION); +					return TRUE; +				} + +			} +			break; +		} +	} +	return FALSE; +} + +static INT_PTR CALLBACK DlgProcOpts3(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ +	char inipath[XFIRE_MAX_STATIC_STRING_LEN]=""; +	static BOOL inifound = FALSE; +	static BOOL dllfound = FALSE; +	static int nomsgboxsel[] = {1,0,2}; +	static HWND hwndTree = NULL; + +	switch (msg) +	{ +		case WM_INITDIALOG: +		{ +			TranslateDialogDefault(hwndDlg); + +			hwndTree = GetDlgItem(hwndDlg, IDC_TREE); + +			SetWindowLongPtr(hwndTree,GWL_STYLE,GetWindowLongPtr(hwndTree,GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES); + +			SendMessage(hwndDlg, DM_REBUILD_TREE, 0, 0); + +			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_ADDSTRING, 0, (LPARAM)TranslateT("Hidden" )); +			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_ADDSTRING, 0, (LPARAM)TranslateT("Message box" )); +			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_ADDSTRING, 0, (LPARAM)TranslateT("Popup" )); + +			//scanalways +			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_ADDSTRING, 0, (LPARAM)TranslateT("No" )); +			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_ADDSTRING, 0, (LPARAM)TranslateT("On every start" )); +			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_ADDSTRING, 0, (LPARAM)TranslateT("Daily" )); + +			SendDlgItemMessage( hwndDlg, IDC_SCANUPDATECB, CB_SETCURSEL, db_get_b(NULL,protocolname,"scanalways",0), 0); +			 +			SendDlgItemMessage( hwndDlg, IDC_NOMSG, CB_SETCURSEL, nomsgboxsel[db_get_b(NULL,protocolname,"nomsgbox",0)], 0); + +			/* Gruppen raussuchen */ +			{ +				int gruppen_id=0; +				char temp[8]; +				DBVARIANT dbv; + +				SendDlgItemMessage( hwndDlg, IDC_CLANGROUP, CB_ADDSTRING, 0, (LPARAM)TranslateT("<Root Group>" )); +				SendDlgItemMessage( hwndDlg, IDC_FOFGROUP, CB_ADDSTRING, 0, (LPARAM)TranslateT("<Root Group>" )); + +				mir_snprintf(temp, SIZEOF(temp), "%d", gruppen_id); +				while(!db_get_s(NULL,"CListGroups",temp,&dbv)) +				{ +					gruppen_id++; +					mir_snprintf(temp, SIZEOF(temp), "%d", gruppen_id); +					 +					if (dbv.pszVal!=NULL) { +						SendDlgItemMessageA( hwndDlg, IDC_CLANGROUP, CB_ADDSTRING, 0, (LPARAM)&dbv.pszVal[1]); +						SendDlgItemMessageA( hwndDlg, IDC_FOFGROUP, CB_ADDSTRING, 0, (LPARAM)&dbv.pszVal[1]); +						db_free(&dbv); +					} +				} +				SendDlgItemMessage( hwndDlg, IDC_CLANGROUP, CB_SETCURSEL, db_get_b(NULL,protocolname,"mainclangroup",0), 0); +				SendDlgItemMessage( hwndDlg, IDC_FOFGROUP, CB_SETCURSEL, db_get_b(NULL,protocolname,"fofgroup",0), 0); +			} + + + +			return TRUE; +		} + +		case DM_REBUILD_TREE: +		//baue optionsmenü auf +		TreeView_SelectItem(hwndTree, NULL); +		ShowWindow(hwndTree, SW_HIDE); +		TreeView_DeleteAllItems(hwndTree); +		{ +			TVINSERTSTRUCT tvis; +			HTREEITEM lastSec = NULL; + +			tvis.hParent = NULL; +			tvis.hInsertAfter = TVI_SORT; +			tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED; + +			int size=sizeof(mytree)/sizeof(mytreeitem); + + +			for(int i=0;i<size;i++) +			{ +				tvis.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM; +				tvis.item.iImage = -1; +				tvis.item.stateMask = TVIS_EXPANDED; +				tvis.item.state = TVIS_EXPANDED; +				tvis.hParent = lastSec; +				if ( mytree[i].parent ) { +					tvis.hParent = NULL; +					tvis.item.lParam = -1; +					tvis.item.pszText = TranslateTS(mytree[i].name); +					tvis.hParent = tvis.item.hItem = TreeView_InsertItem( hwndTree, &tvis ); +					lastSec=tvis.hParent; +					tvis.item.stateMask = TVIS_STATEIMAGEMASK; +					tvis.item.state = INDEXTOSTATEIMAGEMASK(0); +					TreeView_SetItem( hwndTree, &tvis.item ); +				} +				else +				{ +					tvis.item.stateMask = TVIS_STATEIMAGEMASK; +					tvis.item.state = INDEXTOSTATEIMAGEMASK(db_get_b(NULL,protocolname,mytree[i].dbentry,0)==1?2:1); +					tvis.item.lParam = 0; +					tvis.item.pszText = TranslateTS(mytree[i].name); +					mytree[i].hitem=TreeView_InsertItem( hwndTree, &tvis ); +				} +			} +		}	 +		{ +			TVITEM tvi; +			tvi.hItem = TreeView_GetRoot(hwndTree); +			while ( tvi.hItem != NULL ) { +				tvi.mask = TVIF_PARAM | TVIF_HANDLE | TVIF_STATE; +				TreeView_GetItem(hwndTree, &tvi); +				if ( tvi.lParam == -1 ) +					TreeView_SetItemState(hwndTree, tvi.hItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK); + +				tvi.hItem=TreeView_GetNextSibling(hwndTree,tvi.hItem); +			}	 +		} + +		 +		ShowWindow(hwndTree, SW_SHOW); + +		break; + +		case PSM_CHANGED: +		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +		  break; + +		case WM_COMMAND: +			CheckDlgButton(hwndDlg,IDC_CHKI,dllfound); +			CheckDlgButton(hwndDlg,IDC_CHKG,inifound); + +			if (HIWORD(wParam) == CBN_SELCHANGE) +			{ +				SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +				return 0; +			} + +			if ((LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == 1013 || LOWORD(wParam) == 1015 || LOWORD(wParam) == 3 || LOWORD(wParam) == IDC_NICK || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) ) +				return 0; +			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +			break; +		 +		case WM_NOTIFY: +		{ +			switch (((LPNMHDR)lParam)->idFrom) +			{ +				case IDC_TREE: +				{ +					switch(((NMHDR*)lParam)->code) { //wenn was geändert wurde, apply aktivieren +						case TVN_SELCHANGEDA: +							SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +							break; +						case TVN_KEYDOWN: //tastatursteuerung +							{ +								NMTVKEYDOWN* ptkd = (NMTVKEYDOWN*)lParam; +								if (ptkd&&ptkd->wVKey==VK_SPACE&&TreeView_GetSelection(ptkd->hdr.hwndFrom)) +									SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +							break; +							} +						case NM_CLICK: //wenn was geklickt wurde, apply aktivieren +							{ +								TVHITTESTINFO hti; +								hti.pt.x=(short)LOWORD(GetMessagePos()); +								hti.pt.y=(short)HIWORD(GetMessagePos()); +								ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); +								if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)) +									if (hti.flags&TVHT_ONITEM) +										if (hti.flags&TVHT_ONITEMSTATEICON) +											if (TreeView_GetParent(hwndTree, hti.hItem)!=NULL) +												SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +								break; +							} +					} +				} +			} +			switch (((LPNMHDR)lParam)->code) +			{ +				case PSN_APPLY: +				{ +					int reconnectRequired=0; +					int ccc; + +					hwndTree = GetDlgItem(hwndDlg, IDC_TREE); + +					//optionen speichern +					for(int i=0;i<sizeof(mytree)/sizeof(mytreeitem);i++) +					{ +						TVITEM tvic; +						if (mytree[i].parent==0) +						{ +							tvic.hItem=mytree[i].hitem; +							tvic.mask = TVIF_PARAM | TVIF_HANDLE | TVIF_STATE; + +							TreeView_GetItem(hwndTree, &tvic); +							if ((( tvic.state & TVIS_STATEIMAGEMASK ) >> 12 == 2 ))  +								db_set_b(NULL,protocolname,mytree[i].dbentry,1); +							else  +								db_set_b(NULL,protocolname,mytree[i].dbentry,0); +						} +					} + +					db_set_b(NULL,protocolname,"nomsgbox",(BYTE)nomsgboxsel[SendDlgItemMessage(hwndDlg, IDC_NOMSG, CB_GETCURSEL, 0, 0)]); + +					ccc=SendDlgItemMessage(hwndDlg, IDC_CLANGROUP, CB_GETCURSEL, 0, 0); +					db_set_b(NULL,protocolname,"mainclangroup",(BYTE)ccc); +					ccc=SendDlgItemMessage(hwndDlg, IDC_FOFGROUP, CB_GETCURSEL, 0, 0); +					db_set_b(NULL,protocolname,"fofgroup",(BYTE)ccc); +					ccc=SendDlgItemMessage(hwndDlg, IDC_SCANUPDATECB, CB_GETCURSEL, 0, 0); +					db_set_b(NULL,protocolname,"scanalways",(BYTE)ccc); + +					//protocolversion wird autoamtisch vergeben +					//GetDlgItemTextA(hwndDlg,IDC_PVER,str,sizeof(str)); +					//db_set_b(NULL,protocolname,"protover",(char)atoi(str)); + +					if (reconnectRequired) MessageBox(hwndDlg,TranslateT("The changes you have made require you to reconnect to the XFire network before they take effect"),TranslateT("XFire Options"),MB_OK|MB_ICONINFORMATION); +					return TRUE; +				} + +			} +			break; +		} +	} +	return FALSE; +} + +static INT_PTR CALLBACK DlgProcOpts4(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ +	char inipath[XFIRE_MAX_STATIC_STRING_LEN]=""; +	static BOOL inifound = FALSE; +	static BOOL dllfound = FALSE; +	static int nomsgboxsel[] = {1,0,2}; +	static HWND hwndTree = NULL; + +	switch (msg) +	{ +		case WM_INITDIALOG: +		{ +			//addgamedia auf 0 setzen +			TranslateDialogDefault(hwndDlg); + +			strcpy(inipath, XFireGetFoldersPath ("IniFile")); +			strcat(inipath, "xfire_games.ini"); +			 +			FILE * f = fopen(inipath,"r"); +			if (f!=NULL) +			{ +				fclose(f); +				CheckDlgButton(hwndDlg,IDC_CHKG,1); +				inifound = TRUE; +			} +			else +			{ +				EnableDlgItem(hwndDlg, IDC_SETUPGAMES, FALSE); +				inifound = FALSE; +			} + +			strcpy(inipath, XFireGetFoldersPath ("IconsFile")); +			strcat(inipath, "icons.dll"); +			 +			f = fopen(inipath,"r"); +			if (f!=NULL) +			{ +				fclose(f); +				CheckDlgButton(hwndDlg,IDC_CHKI,1); +				dllfound = TRUE; +			} +			else +				dllfound = FALSE; + +			//alle blockierten nutzer in die liste einfügen +			DBCONTACTENUMSETTINGS dbces; + +			// enum all setting the contact has for the module +			dbces.pfnEnumProc = enumSettingsProc; +			dbces.szModule = "XFireBlock"; +			dbces.lParam = (LPARAM)hwndDlg;  +			CallService(MS_DB_CONTACT_ENUMSETTINGS, 0,(LPARAM)&dbces); + +			SendMessage(GetDlgItem(hwndDlg,IDC_REMUSER),BM_SETIMAGE,IMAGE_ICON,(WPARAM)LoadSkinnedIcon(SKINICON_OTHER_DELETE)); + +			strcpy(inipath, XFireGetFoldersPath ("IniFile")); +			SetDlgItemTextA(hwndDlg,IDC_FILESSHOULDBE,inipath); + +			EnableDlgItem(hwndDlg, IDC_REMUSER, FALSE); + +			return TRUE; +		} + +		case PSM_CHANGED: +		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +		  break; + +		case WM_COMMAND: +			CheckDlgButton(hwndDlg,IDC_CHKI,dllfound); +			CheckDlgButton(hwndDlg,IDC_CHKG,inifound); + +			if (LOWORD(wParam) == IDC_REMUSER) //nutzer soll aus der blockierliste raus +			{ +				char temp[255]; +				int sel=SendDlgItemMessage(hwndDlg, IDC_BLOCKUSER, LB_GETCURSEL, 0, 0); +				if (sel!=LB_ERR) //nur wenn was ausgewählt wurde +				{ +					SendDlgItemMessageA(hwndDlg, IDC_BLOCKUSER, LB_GETTEXT, sel, (LPARAM)temp);  +					SendDlgItemMessage(hwndDlg, IDC_BLOCKUSER, LB_DELETESTRING, sel, 0); +					db_unset(NULL,"XFireBlock",temp); +					if (SendDlgItemMessage(hwndDlg, IDC_BLOCKUSER, LB_GETCOUNT, 0, 0)==0) +						EnableDlgItem(hwndDlg, IDC_REMUSER, FALSE); +				} +			} + + +			if ((LOWORD(wParam) == 9508 || LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_SETUPGAMES || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) ) +				return 0; + +			break; +		 +		case WM_NOTIFY: +		{ +			switch (((LPNMHDR)lParam)->code) +			{ +				case PSN_APPLY: +				{ +					return TRUE; +				} + +			} +			break; +		} +	} +	return FALSE; +} + +static INT_PTR CALLBACK DlgProcOpts5(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ +	DBVARIANT dbv; + +	switch (msg) +	{ +		case WM_INITDIALOG: +		{ +			TranslateDialogDefault(hwndDlg); +			 +			CheckDlgButton(hwndDlg,IDC_ENABLESTSMSG,db_get_b(NULL,protocolname,"autosetstatusmsg",0)); +			CheckDlgButton(hwndDlg,IDC_CHGSTATUS,db_get_b(NULL,protocolname,"statuschgtype",0)); +			CheckDlgButton(hwndDlg,IDC_DNDFIRST,db_get_b(NULL,protocolname,"dndfirst",0)); +			if (!db_get(NULL,protocolname,"setstatusmsg",&dbv)) { +				SetDlgItemTextA(hwndDlg,IDC_STATUSMSG,dbv.pszVal); +				db_free(&dbv); +			} +			if (!IsDlgButtonChecked(hwndDlg, IDC_ENABLESTSMSG)) +			{ +				EnableDlgItem(hwndDlg, IDC_STATUSMSG, FALSE); +			} +		/*	if (!ServiceExists(MS_VARS_FORMATSTRING)) +			{ +				EnableDlgItem(hwndDlg, IDC_STATUSMSG, FALSE); +				EnableDlgItem(hwndDlg, IDC_ENABLESTSMSG, FALSE); +				EnableDlgItem(hwndDlg, IDC_CHGSTATUS, FALSE); +				EnableDlgItem(hwndDlg, IDC_DNDFIRST, FALSE); +			}*/ + +			return TRUE; +		} + +		case PSM_CHANGED: +		  SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +		  break; + +		case WM_COMMAND: +			if ( IsDlgButtonChecked(hwndDlg, IDC_ENABLESTSMSG) ) { +				EnableDlgItem(hwndDlg, IDC_STATUSMSG, TRUE); +			} +			else +			{ +				EnableDlgItem(hwndDlg, IDC_STATUSMSG, FALSE); +			} + +			if ((LOWORD(wParam) == IDC_LOGIN || LOWORD(wParam) == IDC_STATUSMSG || LOWORD(wParam) == IDC_PASSWORD) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) ) +				return 0; +			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + +			break; +		 +		case WM_NOTIFY: +		{ +			switch (((LPNMHDR)lParam)->code) +			{ +				case PSN_APPLY: +				{ +					int reconnectRequired=0; +					char str[512]; + +					GetDlgItemTextA(hwndDlg,IDC_STATUSMSG,str,sizeof(str)); +					db_set_s(NULL,protocolname, "setstatusmsg", str); + +					db_set_b(NULL,protocolname, "autosetstatusmsg", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ENABLESTSMSG)); +					db_set_b(NULL,protocolname, "statuschgtype", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CHGSTATUS)); +					db_set_b(NULL,protocolname, "dndfirst", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_DNDFIRST)); + +					return TRUE; +				} + +			} +			break; +		} +	} +	return FALSE; +} + +static INT_PTR CALLBACK DlgProcOpts6(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ +	switch (msg) +	{ +		case WM_INITDIALOG: +		{ +			addgameDialog=NULL; + +			TranslateDialogDefault(hwndDlg); + +			//elemente erstmal abstellen +			EnableDlgItem(hwndDlg, IDC_DONTDETECT, FALSE); +			EnableDlgItem(hwndDlg, IDC_NOSTATUSMSG, FALSE); +			EnableDlgItem(hwndDlg, IDC_NOTINSTARTMENU, FALSE); +			EnableDlgItem(hwndDlg, IDC_APPLY, FALSE); +			EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, FALSE);	 +			ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_HIDE); + +			//gamelist füllen +			SendMessage(hwndDlg,WM_FILLGAMELIST,0,0); + +			//SendMessage(GetDlgItem(hwndDlg,IDC_CREATETXTLIST),BM_SETIMAGE,IMAGE_ICON,(WPARAM)LoadSkinnedIcon(SKINICON_OTHER_USERDETAILS)); + +			return TRUE; +		} +		case WM_FILLGAMELIST: +		{ +			//spielliste leeren +			SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_RESETCONTENT, 0, 0); +			//spiele auslesen und in die liste einfügen +			int found=db_get_w(NULL,protocolname,"foundgames",0); +			char temp[XFIRE_MAXSIZEOFGAMENAME]; +			for(int i=0;i<found;i++) +			{ +				//id auslesen +				mir_snprintf(temp, SIZEOF(temp), "gameid_%d", i); +				int gameid=db_get_w(NULL,protocolname,temp,0); +				//spielnamen auslesen +				xgamelist.getGamename(gameid,temp,XFIRE_MAXSIZEOFGAMENAME); +				//eintrag einfügen +				int idx=SendDlgItemMessageA( (HWND)hwndDlg, IDC_LGAMELIST, LB_ADDSTRING, 0, (LPARAM)temp); +				//id an das element übergeben +				SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_SETITEMDATA, idx, gameid); +			} +			return TRUE; +		} +		case WM_COMMAND: +		{ +			if (LOWORD(wParam)==IDC_REMOVE) +			{ +				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0); + +				//was ausgewählt in der liste? +				if (idx!=LB_ERR) { +					//user fragen ob er das game wirklich löschen will +					if (MessageBox(hwndDlg,TranslateT("Are you sure you want to remove this game?"),TranslateT("XFire Options"),MB_YESNO|MB_ICONQUESTION)==IDYES) { +						//gameliste blocken +						xgamelist.Block(TRUE); +						//spielid auslesen +						int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0); +						//spiel per gameid entfernen +						xgamelist.Removegame(gameid); +						//db säubern +						xgamelist.clearDatabase(TRUE); +						//derzeitige gameliste in die datenbank eintragen +						xgamelist.writeDatabase(); +						//startmenu leeren +						xgamelist.clearStartmenu(); +						//startmenu neuerzeugen +						xgamelist.createStartmenu();						 +						//gameliste unblocken +						xgamelist.Block(FALSE); +						//gamelist neu füllen +						SendMessage(hwndDlg,WM_FILLGAMELIST,0,0); +						//erstes vorauswählen +						SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_SETCURSEL, 0, 0); +						//liste refresh +						SendMessage(hwndDlg,WM_COMMAND,MAKELONG(IDC_LGAMELIST,LBN_SELCHANGE),0); +					} +				} +				else +					MessageBox(hwndDlg,TranslateT("Please select a game."),TranslateT("XFire Options"),MB_OK|MB_ICONEXCLAMATION); + +			} +			else +			if (LOWORD(wParam)==IDC_ADDGAME) +			{ +				//gameliste blocken +				xgamelist.Block(TRUE); +				//if (DialogBox(hinstance,MAKEINTRESOURCE(IDD_ADDGAME),hwndDlg,DlgAddGameProc)) { +				AddGameDialog(hwndDlg); +				//gameliste unblocken +				xgamelist.Block(FALSE); +				//gamelist neu füllen +				SendMessage(hwndDlg,WM_FILLGAMELIST,0,0); +			} +			//copy gamelist to clipboard button entfernt +			/*else if (LOWORD(wParam)==IDC_CREATETXTLIST) //gameliste als textform für debugging erstellen +			{ +				//gameliste blocken +				xgamelist.Block(TRUE); + +				//alle games durchgehen +				Xfire_game* nextgame; +				//output string +				char* out=new char[10]; +				xgamelist.setString("Xfire-gamelist:\r\n",&out); +				while(xgamelist.getnextGame(&nextgame)) +				{ +					if (nextgame->name) +					{ +						xgamelist.appendString("\r\nName: ",&out); +						xgamelist.appendString(nextgame->name,&out); +					} +					if (nextgame->path) +					{ +						xgamelist.appendString("\r\nPath: ",&out); +						xgamelist.appendString(nextgame->path,&out); +					} +					if (nextgame->launchparams) +					{ +						xgamelist.appendString("\r\nLaunch: ",&out); +						xgamelist.appendString(nextgame->launchparams,&out); +					} + +					char temp[10]; +					_itoa(nextgame->id,temp,10); +					xgamelist.appendString("\r\nId: ",&out); +					xgamelist.appendString(temp,&out); + +					_itoa(nextgame->send_gameid,temp,10); +					xgamelist.appendString("\r\nSend-Id: ",&out); +					xgamelist.appendString(temp,&out); + +					if (nextgame->skip) +					{ +						xgamelist.appendString("\r\nThis game will be skipped in game detection!",&out); +					} + +					xgamelist.appendString("\r\n",&out); +				} + +				if (OpenClipboard(NULL)) +				{ +					HGLOBAL clipbuffer; +					char* buffer; + +					EmptyClipboard(); +					clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(out)+1); +					buffer = (char*)GlobalLock(clipbuffer); +					strcpy(buffer, LPCSTR(out)); +					GlobalUnlock(clipbuffer); + +					SetClipboardData(CF_TEXT, clipbuffer); +					CloseClipboard(); +				} + +				if (out!=NULL) delete[] out; + +				//gameliste unblocken +				xgamelist.Block(FALSE); +			}*/ +			else if (LOWORD(wParam)==IDC_EDITGAME) { +				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0); + +				//was ausgewählt in der liste? +				if (idx!=LB_ERR) { +					//gameliste blocken +					xgamelist.Block(TRUE); +					//gameid der aktuellen auswahl auslesen +					int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0); +					//spielobject holen +					Xfire_game* tempgame=xgamelist.getGamebyGameid(gameid); +					//gültiger verweis? +					if (tempgame) { +						//editmodus des addgamedialog +						AddGameDialog(hwndDlg,tempgame); +						//elemente wieder unsichtbar machen +						EnableDlgItem(hwndDlg, IDC_DONTDETECT, FALSE); +						EnableDlgItem(hwndDlg, IDC_NOSTATUSMSG, FALSE); +						EnableDlgItem(hwndDlg, IDC_NOTINSTARTMENU, FALSE); +						EnableDlgItem(hwndDlg, IDC_APPLY, FALSE); +						EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, FALSE);	 +						ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_HIDE); +					} +					else +						MessageBox(hwndDlg,TranslateT("Error: unknown game ID."),TranslateT("XFire Options"),MB_OK|MB_ICONEXCLAMATION); +					//gameliste unblocken +					xgamelist.Block(FALSE); +					//gamelist neu füllen +					SendMessage(hwndDlg,WM_FILLGAMELIST,0,0); +				} +				else +					MessageBox(hwndDlg,TranslateT("Please select a game."),TranslateT("XFire Options"),MB_OK|MB_ICONEXCLAMATION); +			}else //wurde ein spiel aus der liste gewählt? +			if (HIWORD(wParam)==LBN_SELCHANGE && LOWORD(wParam)==IDC_LGAMELIST) +			{ +				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0); +				//es wurde was ausgewählt? +				if (idx!=LB_ERR) +				{ +					//textlänge auslesen +					int size=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETTEXTLEN, idx, 0); +					//textbuffer anlegen +					char* text=new char[size+1]; +					SendDlgItemMessageA(hwndDlg, IDC_LGAMELIST, LB_GETTEXT, idx, (LPARAM)text); +					SetDlgItemTextA(hwndDlg,IDC_GAMENAME,text); +					//textbuffer löschen +					if (text!=NULL) +					{ +						delete text; +						text=NULL; +					} +					//id des spielsbekommen +					int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0); + +					HICON hicon=xgamelist.iconmngr.getGameIcon(gameid); +					//iconhandle holen und setzen +					if (hicon) +						SendMessage(GetDlgItem(hwndDlg,IDC_GAMEICO),STM_SETICON,(WPARAM)hicon,0); +					else +						SendMessage(GetDlgItem(hwndDlg,IDC_GAMEICO),STM_SETICON,0,0); + +					//elemente aktivieren +					EnableDlgItem(hwndDlg, IDC_DONTDETECT, TRUE); +					EnableDlgItem(hwndDlg, IDC_NOSTATUSMSG, TRUE); +					EnableDlgItem(hwndDlg, IDC_APPLY, TRUE); +					EnableDlgItem(hwndDlg, IDC_NOTINSTARTMENU, TRUE); +					EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, TRUE); + +					Xfire_game* xgtemp = xgamelist.getGamebyGameid(gameid); +					if (xgtemp && xgtemp->custom) +					{ +						ShowWindow(GetDlgItem(hwndDlg,IDC_MANADDED),SW_SHOW); +						ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_SHOW); +					} +					else +					{ +						ShowWindow(GetDlgItem(hwndDlg,IDC_MANADDED),SW_HIDE); +						ShowWindow(GetDlgItem(hwndDlg, IDC_EDITGAME), SW_HIDE); +					} + +					//gameskip wert setzen +					char temp[64]=""; +					mir_snprintf(temp, SIZEOF(temp), "gameskip_%d", gameid); +					CheckDlgButton(hwndDlg,IDC_DONTDETECT,db_get_b(NULL,protocolname,temp,0)); +					mir_snprintf(temp, SIZEOF(temp), "gamenostatus_%d", gameid); +					CheckDlgButton(hwndDlg,IDC_NOSTATUSMSG,db_get_b(NULL,protocolname,temp,0)); +					mir_snprintf(temp, SIZEOF(temp), "notinstartmenu_%d", gameid); +					CheckDlgButton(hwndDlg,IDC_NOTINSTARTMENU,db_get_b(NULL,protocolname,temp,0)); +					 +					//extra parameter auslesen, aber nur, wenn das spiel auch sowas unterstützt +					if (xgtemp && xgtemp->haveExtraGameArgs()) +					{ +						EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, TRUE); +						mir_snprintf(temp, SIZEOF(temp), "gameextraparams_%d", gameid); +						DBVARIANT dbv; +						if (!db_get(NULL,protocolname,temp,&dbv)) +						{ +							SetDlgItemTextA(hwndDlg,IDC_EXTRAPARAMS,dbv.pszVal);	 +							db_free(&dbv); +						} +						else +							SetDlgItemText(hwndDlg,IDC_EXTRAPARAMS,_T(""));	 +					} +					else +					{ +						EnableDlgItem(hwndDlg, IDC_EXTRAPARAMS, FALSE); +						SetDlgItemText(hwndDlg,IDC_EXTRAPARAMS,TranslateT("Not supported"));	 +					} +				} +			} +			else if (LOWORD(wParam)==IDC_APPLY) +			{ +				//auswahl speichern +				int idx=SendDlgItemMessage(hwndDlg, IDC_LGAMELIST, LB_GETCURSEL, 0, 0); +				//es wurde was ausgewählt? +				if (idx!=LB_ERR) +				{ +					int gameid=SendDlgItemMessage( (HWND)hwndDlg, IDC_LGAMELIST, LB_GETITEMDATA, idx, 0); +					int dbid; +					 +					//gamelist blocken +					xgamelist.Block(TRUE); + +					if (xgamelist.Gameinlist(gameid,&dbid)) +					{ +						Xfire_game* game=xgamelist.getGame(dbid); +						if (game) +						{ +							game->skip=(BYTE)IsDlgButtonChecked(hwndDlg, IDC_DONTDETECT); +							game->noicqstatus=(BYTE)IsDlgButtonChecked(hwndDlg, IDC_NOSTATUSMSG); +							game->notinstartmenu=(BYTE)IsDlgButtonChecked(hwndDlg, IDC_NOTINSTARTMENU); + +							//extra parameter auslesen und das gameobj schreiben +							char str[128]=""; +							GetDlgItemTextA(hwndDlg,IDC_EXTRAPARAMS,str,sizeof(str)); +							if (str[0]!=0) +							{ +								//extra parameter sind gesetzt, zuweisen +								game->setString(str,&game->extraparams); +							} +							else +							{ +								//extra parameter leer, wenn gesetzt entfernen/freigeben +								if (game->extraparams) +								{ +									delete[] game->extraparams; +									game->extraparams=NULL; +								} +							} + + +							game->refreshMenuitem(); +							game->writeToDB(dbid); + +							SetDlgItemText(hwndDlg,IDC_TEXTSTATUS,TranslateT("Configuration saved!")); +						} +						else +						{ +							SetDlgItemText(hwndDlg,IDC_TEXTSTATUS,TranslateT("Game not found?!")); +						} +					} +					else +					{ +						SetDlgItemText(hwndDlg,IDC_TEXTSTATUS,TranslateT("Game not found?!")); +					} + +					//gamelist unblocken +					xgamelist.Block(FALSE); +				} +			} +			break; +		} +		 +		case WM_NOTIFY: +		{ +			break; +		} +	} +	return FALSE; +} + +int OptInit(WPARAM wParam,LPARAM) +{ +	ghwndDlg2 = NULL; + +	OPTIONSDIALOGPAGE odp = { sizeof(odp) }; +	odp.hInstance = hinstance; +	odp.ptszTitle = LPGENT("XFire"); +	odp.ptszGroup = LPGENT("Network"); +	odp.flags = ODPF_BOLDGROUPS| ODPF_TCHAR; + +	odp.pfnDlgProc = DlgProcOpts2; +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTLOGIN); +	odp.ptszTab = LPGENT("Account"); +	Options_AddPage(wParam, &odp); + +	odp.pfnDlgProc = DlgProcOpts3; +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT); +	odp.ptszTab = LPGENT("Features"); +	Options_AddPage(wParam, &odp); + +	odp.pfnDlgProc = DlgProcOpts4; +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT2); +	odp.ptszTab = LPGENT("Blocklist / Games"); +	Options_AddPage(wParam, &odp); + +	odp.pfnDlgProc = DlgProcOpts5; +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT3); +	odp.ptszTab = LPGENT("StatusMsg"); +	Options_AddPage(wParam, &odp); + +	odp.pfnDlgProc = DlgProcOpts6; +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTFEAT4); +	odp.ptszTab = LPGENT("Games"); +	Options_AddPage(wParam, &odp); +	return 0;  }
\ No newline at end of file  | 
