From 048aaf0c4e77402adf584e3318e5aae6f1cdd749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Mon, 5 Nov 2012 21:11:48 +0000 Subject: XFire adoption (crashes on login, no 64bit) git-svn-id: http://svn.miranda-ng.org/main/trunk@2212 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Xfire/src/addgamedialog.cpp | 867 ++++++++++++++++++++++++++++++++++ 1 file changed, 867 insertions(+) create mode 100644 protocols/Xfire/src/addgamedialog.cpp (limited to 'protocols/Xfire/src/addgamedialog.cpp') diff --git a/protocols/Xfire/src/addgamedialog.cpp b/protocols/Xfire/src/addgamedialog.cpp new file mode 100644 index 0000000000..4d3d717b8c --- /dev/null +++ b/protocols/Xfire/src/addgamedialog.cpp @@ -0,0 +1,867 @@ +#include "stdafx.h" + +#include "addgamedialog.h" + +extern HANDLE XFireWorkingFolder; +extern Xfire_gamelist xgamelist; + +char inipath[MAX_PATH]; +char* buffer=NULL; +BOOL dontClose=FALSE; + +vector Inicache; +Xfire_game* editgame=NULL; + +HWND hwndTab,hPage; + +void AddGameDialog(HWND hwndDlg,Xfire_game* game) { + //übergebendes game, dem editgame zuordnen, damit wechselt es in den editmodus + editgame=game; + if(DialogBox(hinstance,MAKEINTRESOURCE(IDD_ADDGAMEMAIN),hwndDlg,DlgAddGameProcMain)) { + } + //wieder auf NULL setzen + editgame=NULL; +} + +static void FillGameList( LPVOID hwndDlg ) { + //liste.,suche und suchlabel unsichtbar machen + ShowWindow(GetDlgItem((HWND)hwndDlg,IDC_GAMELIST),SW_HIDE); + ShowWindow(GetDlgItem((HWND)hwndDlg,IDC_SEARCH),SW_HIDE); + ShowWindow(GetDlgItem((HWND)hwndDlg,IDC_STC14),SW_HIDE); + + //handle von progressbar holen + HWND hwndPB=GetDlgItem((HWND)hwndDlg,IDC_PROGRESS); + + //das schließen des dialogs verhindern + dontClose=TRUE; + + if(Inicache.size()==0) + { + //temp xfirebaseob für strlower + Xfire_base tempxfire; + //vector für doppelfilter + vector dublBuffer; + //Cache ist leer, Cache füllen + FoldersGetCustomPath( XFireWorkingFolder, inipath, 1024, "" ); + strcat_s(inipath,MAX_PATH,"\\"); + strcat_s(inipath,MAX_PATH,"xfire_games.ini"); + + //ini soll in den RAM geladen werden, fürs schnellere ausparsen + FILE* f=fopen(inipath,"rb"); + //wenn ini nicht aufrufbar, abbrechen + if(f==NULL) + return; + //ans ende der datei springen + fseek(f,0,SEEK_END); + //aktuelle position im filepoitner als größe zwischenspeichern + int size=ftell(f); + //buffer anelgen + buffer=new char[size+1]; + //wenn nicht genug ram, abbruch + if(buffer==NULL) + return; + //buffer nullen + memset(buffer,0,size+1); + //zum anfang springen + fseek(f,0,SEEK_SET); + //ini komplett in den ram lesen + fread(buffer,size,1,f); + //datei schließen + fclose(f); + + //parse einzelne sections aus + + //pointer vom buffer + char*p=buffer; + //zahlenbufer1 und pointer + char zahlbuffer[10]=""; + char*z=zahlbuffer; + //zahlenbuffer2 uznd pointer + char zahlbuffer2[10]=""; + char*z2=zahlbuffer2; + + //progressbar auf bytegröße anpassen + SendMessage(hwndPB, PBM_SETRANGE32, 0,size); + + //solange bis wir bei 0 angekommen sind + if(*p!=0) + p++; + while(*p!=0) + { + if(*p=='['&&*(p-1)=='\n') + { + z=zahlbuffer; + z2=zahlbuffer2; + p++; + while(*p>='0'&&*p<='9'&&p!=0) + { + *z=*p; + p++; + z++; + } + *z=0; + if(*p=='_') { + p++; + while(*p>='0'&&*p<='9'&&p!=0) + { + *z2=*p; + p++; + z2++; + } + *z2=0; + } + + //erste zahl gefunden + if(z!=zahlbuffer) + { + int gameid=atoi(zahlbuffer); + //prüfe ob das game schon in der gameliste ist + if(!xgamelist.Gameinlist(gameid)) + { + char*name=p; + lbInicache listentry; + char gameidtemp[10]=""; + char ret[512]; + DWORD uniqid=0; + BYTE accLaunch=0; + BYTE accDetect=0; + + //bis zum nächsten isgleich springen + while(*name!='=') + name++; + name++; + + //jetzt den umbruch suchen + p=name; + while(*p!='\n'&&*p!='\r') p++; + *p=0; + p++; + + //spielnamen in den listentry einfügen + strcpy_s(listentry.name,255,name); + + if(z2!=zahlbuffer2) + { + listentry.gameid=MAKELONG(gameid,atoi(zahlbuffer2)); + sprintf_s(gameidtemp,10,"%d_%d",gameid,atoi(zahlbuffer2)); + } + else + { + listentry.gameid=gameid; + sprintf_s(gameidtemp,10,"%d",gameid); + } + + + if(xfire_GetPrivateProfileString(gameidtemp, "LauncherExe", "", ret, 512, inipath)) { + //lower launchstring + tempxfire.strtolower(ret); + //einzelnen ziechen zusammenrechnen + if(z2!=zahlbuffer2) + { + //wenn pfad, dann exe vorher rausziehen + if(strrchr(ret,'\\')) + accLaunch=tempxfire.accStringByte(strrchr(ret,'\\')); + else + accLaunch=tempxfire.accStringByte(ret); + } + //Steam.exe als launcher? + if((ret[0]=='s')&& + ret[1]=='t'&& + ret[2]=='e'&& + ret[3]=='a'&& + ret[4]=='m'&& + ret[5]=='.'&& + ret[6]=='e'&& + ret[7]=='x'&& + ret[8]=='e') + { + strcat_s(listentry.name,255," (Steam)"); + } + } + + if(z2!=zahlbuffer2) { + if(xfire_GetPrivateProfileString(gameidtemp, "DetectExe", "", ret, 512, inipath)) { + //lower launchstring + tempxfire.strtolower(ret); + //einzelnen ziechen zusammenrechnen + //wenn pfad, dann exe vorher rausziehen + if(strrchr(ret,'\\')) + accDetect=tempxfire.accStringByte(strrchr(ret,'\\')); + else + accDetect=tempxfire.accStringByte(ret); + } + } + + //standardmäßig TRUE + BOOL addtolist=TRUE; + + //schon ein eintrag vorhanden? + if(z2!=zahlbuffer2) { + //uniq id zusammen bauen aus spielid sowie zusammengerechneten launchstring und detectstring + uniqid=MAKELONG(gameid,MAKEWORD(accLaunch,accDetect)); + for(uint i = 0 ; i < dublBuffer.size() ; i ++) { + if(dublBuffer.at(i)==uniqid) + { + addtolist=FALSE; + break; + } + } + } + + //nur eintragen, wenn kein doppelter gefunden wurde + if(addtolist) { + //eintrag einfügen + int idx=SendDlgItemMessage( (HWND)hwndDlg, IDC_GAMELIST, LB_ADDSTRING, 0, (LPARAM)listentry.name); + SendDlgItemMessage( (HWND)hwndDlg, IDC_GAMELIST, LB_SETITEMDATA, idx, listentry.gameid); + //eintrag in den buffer für die dublikateprüfung + dublBuffer.push_back(uniqid); + //und eintrag in den cache + Inicache.push_back(listentry); + SendMessage(hwndPB, PBM_SETPOS, (WPARAM)(p-buffer), 0); + } + } + } + } + else + p++; + } + } + else + { + //liste mit dem cache aufbauen + for(uint i = 0 ; i < Inicache.size() ; i ++) { + //spielid in der liste spielliste? + if(!xgamelist.Gameinlist(LOWORD(Inicache.at(i).gameid))) + { + //eintrag in die listeeinfügen + int idx=SendDlgItemMessage( (HWND)hwndDlg, IDC_GAMELIST, LB_ADDSTRING, 0, (LPARAM)Inicache.at(i).name); + //gameid zuweisen + SendDlgItemMessage( (HWND)hwndDlg, IDC_GAMELIST, LB_SETITEMDATA, idx, Inicache.at(i).gameid); + } + } + } + + //progressbar unsichtbar + ShowWindow(hwndPB,SW_HIDE); + //liste sichtbar machen + ShowWindow(GetDlgItem((HWND)hwndDlg,IDC_GAMELIST),SW_SHOW); + //suche und suchlabel sichtbar machen + ShowWindow(GetDlgItem((HWND)hwndDlg,IDC_SEARCH),SW_SHOW); + ShowWindow(GetDlgItem((HWND)hwndDlg,IDC_STC14),SW_SHOW); + + dontClose=FALSE; +} + +BOOL OpenFileDialog(HWND hwndDlg,OPENFILENAME*ofn,char*exe) { + //pointer zum exenamen + char* exename=NULL; + //buffer vom pfad + static char szFile[260]=""; //static damit noch nach dem aufruf lesbar bleibt + //buffer vom filter + char szFilter[260]=""; + //backslash suchen + exename=strrchr(exe,'\\')+1; + //kein backslash dann normal ret als exenamen verwenden + if((int)exename==1) exename=exe; + //filterstring aufbauen + sprintf(szFilter,"%s|%s|%s|*.*|",exename,exename,Translate("All Files")); + //umbruch in 0 wandeln + unsigned int sizeFilter=strlen(szFilter); + for(unsigned int i=0;ilStructSize = sizeof(OPENFILENAME); + ofn->hwndOwner = hwndDlg; + ofn->lpstrFile = szFile; + ofn->nMaxFile = sizeof(szFile); + ofn->lpstrFilter = szFilter; + ofn->nFilterIndex = 1; + ofn->lpstrFileTitle = exe; + ofn->nMaxFileTitle = 0; + ofn->lpstrInitialDir = NULL; + ofn->Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + + return GetOpenFileName(ofn); +} + +INT_PTR CALLBACK DlgAddGameProc (HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + switch (uMsg) { + case WM_INITDIALOG: + { + //übersetzen lassen + TranslateDialogDefault(hwndDlg); + + + //per thread liste füllen + mir_forkthread(FillGameList,hwndDlg); + } + break; + case WM_COMMAND: + if(LOWORD(wParam) == IDC_SEARCH && HIWORD(wParam)==EN_CHANGE) + { + char temp[256]; + //eingabe bei der suche auslesen + GetDlgItemText(hwndDlg,IDC_SEARCH,temp,256); + //eingabe in der liste suchen + int idx=SendDlgItemMessage(hwndDlg, IDC_GAMELIST, LB_FINDSTRING, 0, (LPARAM)temp); + //gefunden? + if(idx!=LB_ERR) + { + //als aktiv setzen + SendDlgItemMessage(hwndDlg, IDC_GAMELIST,LB_SETCURSEL,idx,0); + } + } + else if(LOWORD(wParam) == IDCANCEL) + { + //nicht schließen, wenn noch der thread läuft + if(dontClose) { + MessageBoxA(hwndDlg, Translate("Please wait, gameini will be currently parsed ..."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + return FALSE; + } + return SendMessage(GetParent(hwndDlg),WM_CLOSE,0,0); + } + else if(LOWORD(wParam) == IDC_CUSTOM) + { + int idx=SendDlgItemMessage(hwndDlg, IDC_GAMELIST, LB_GETCURSEL, 0, 0); + //es wurde was ausgewählt? + if(idx==LB_ERR) { + MessageBoxA(hwndDlg,Translate("Please choose one game in the list!"),Translate("XFire Options"),MB_OK|MB_ICONEXCLAMATION); + } + else + { + char ret[512]=""; + char gameidtemp[10]=""; + + int gameids=SendDlgItemMessage( (HWND)hwndDlg, IDC_GAMELIST, LB_GETITEMDATA, idx, 0); + //gameid splitten + int gameid1=LOWORD(gameids); + int gameid2=HIWORD(gameids); + + if(gameid2!=0) + sprintf_s(gameidtemp,10,"%d_%d",gameid1,gameid2); + else + sprintf_s(gameidtemp,10,"%d",gameid1); + + //spielnamen holen + if(xfire_GetPrivateProfileString(gameidtemp, "LongName", "", ret, 512, inipath)) { + sprintf_s(gameidtemp,10,"%d",gameid1); + + //einige felder vorbelegen + SetDlgItemText(hPage,IDC_ADD_NAME,ret); + SetDlgItemText(hPage,IDC_ADD_DETECTEXE,""); + SetDlgItemText(hPage,IDC_ADD_LAUNCHEREXE,""); + SetDlgItemText(hPage,IDC_ADD_ID,gameidtemp); + SetDlgItemText(hPage,IDC_ADD_STATUSMSG,""); + SetDlgItemText(hPage,IDC_ADD_CUSTOMPARAMS,""); + SetDlgItemText(hPage,IDC_ADD_SENDID,gameidtemp); + + //auf customeintrag edit tab wechseln + TabCtrl_SetCurSel(hwndTab, 1); + ShowWindow(hwndDlg,SW_HIDE); + ShowWindow(hPage,SW_SHOW); + } + } + } + else if(LOWORD(wParam) == IDOK) + { + int idx=SendDlgItemMessage(hwndDlg, IDC_GAMELIST, LB_GETCURSEL, 0, 0); + //es wurde was ausgewählt? + if(idx==LB_ERR) { + MessageBoxA(hwndDlg,Translate("Please choose one game in the list!"),Translate("XFire Options"),MB_OK|MB_ICONEXCLAMATION); + } + else + { + //datei öffnen dialog + OPENFILENAME ofn; + //listdata auslesen, wo die gameid gespeihcert ist + int gameids=SendDlgItemMessage( (HWND)hwndDlg, IDC_GAMELIST, LB_GETITEMDATA, idx, 0); + //gameid splitten + int gameid1=LOWORD(gameids); + int gameid2=HIWORD(gameids); + char gameidtemp[10]=""; + char ret[512]; + + if(gameid2!=0) + sprintf_s(gameidtemp,10,"%d_%d",gameid1,gameid2); + else + sprintf_s(gameidtemp,10,"%d",gameid1); + + //neuen gameeintrag anlegen + Xfire_game* newgame=new Xfire_game(); + //gameid und sendid setzen + newgame->id=gameid1; + newgame->send_gameid=gameid1; + //es handelt sich um einen customeintrag, man staune xD + newgame->custom=1; + + //launcherexe abfragen + if(xfire_GetPrivateProfileString(gameidtemp, "LauncherExe", "", ret, 512, inipath)) { + //datei vom user öffnen lassen + if(OpenFileDialog(hwndDlg,&ofn,ret)) + { + //lowercase pfad + newgame->strtolower(ofn.lpstrFile); + //pfad dem spiel zuordnen + newgame->setString(ofn.lpstrFile,&newgame->launchparams); + } + else + { + //speicher freigeben + delete newgame; + return FALSE; + } + } + + //detectexe abfragen + if(xfire_GetPrivateProfileString(gameidtemp, "DetectExe", "", ret, 512, inipath)) { + //datei vom user öffnen lassen + if(OpenFileDialog(hwndDlg,&ofn,ret)) + { + //lowercase pfad + newgame->strtolower(ofn.lpstrFile); + //pfad dem spiel zuordnen + newgame->setString(ofn.lpstrFile,&newgame->path); + } + else + { + //speicher freigeben + delete newgame; + return FALSE; + } + } //MatchExe abfragen + else if(xfire_GetPrivateProfileString(gameidtemp, "MatchExe", "", ret, 512, inipath)) { + //datei vom user öffnen lassen + if(OpenFileDialog(hwndDlg,&ofn,ret)) + { + //lowercase pfad + newgame->strtolower(ofn.lpstrFile); + //pfad dem spiel zuordnen + newgame->setString(ofn.lpstrFile,&newgame->path); + } + else + { + //speicher freigeben + delete newgame; + return FALSE; + } + } + + + //prüfe ob schon ein launchstring festgelegt wurde, wenn nicht die detectexe nehmen + if(!newgame->launchparams&&newgame->path) { + newgame->setString(newgame->path,&newgame->launchparams); + } + + //prüfe ob schon ein detectexe festgelegt wurde, wenn nicht die launchstring nehmen + if(newgame->launchparams&&!newgame->path) { + newgame->setString(newgame->launchparams,&newgame->path); + } + + //LauncherUrl wird der launcherstring überschrieben + if(xfire_GetPrivateProfileString(gameidtemp, "LauncherUrl", "", ret, 512, inipath)) { + newgame->setString(ret,&newgame->launchparams); + } + else if(xfire_GetPrivateProfileString(gameidtemp, "Launch", "", ret, 512, inipath)) { + str_replace(ret,"%UA_LAUNCHER_EXE_PATH%",""); //erstmal unwichtige sachen entfernen + //str_replace(ret,"%UA_LAUNCHER_EXTRA_ARGS%",""); // - auch entfernen + str_replace(ret,"%UA_LAUNCHER_LOGIN_ARGS%",""); // - auch entfernen + + //ein leerzeichen anfügen + newgame->appendString(" ",&newgame->launchparams); + //nun commandline des launchstringes dranhängen + newgame->appendString(ret,&newgame->launchparams); + } + + //restliche wichtige felder einfügen + if(xfire_GetPrivateProfileString(gameidtemp, "LauncherPasswordArgs", "", ret, 512, inipath)) + newgame->setString(ret,&newgame->pwparams); + if(xfire_GetPrivateProfileString(gameidtemp, "LauncherNetworkArgs", "", ret, 512, inipath)) + newgame->setString(ret,&newgame->networkparams); + if(xfire_GetPrivateProfileString(gameidtemp, "CommandLineMustContain[0]", "", ret, 512, inipath)) + newgame->setString(ret,&newgame->mustcontain); + if(xfire_GetPrivateProfileString(gameidtemp, "XUSERSendId", "", ret, 512, inipath)) + newgame->send_gameid=atoi(ret); + if(xfire_GetPrivateProfileString(gameidtemp, "XUSERSetStatusMsg", "", ret, 512, inipath)) + newgame->setstatusmsg=atoi(ret); + + //namen setzen und icon laden + newgame->setNameandIcon(); + //spiel in die gameliste einfügen + xgamelist.Addgame(newgame); + //derzeitige gameliste in die datenbank eintragen + xgamelist.writeDatabase(); + //startmenu leeren + xgamelist.clearStartmenu(); + //startmenu neuerzeugen + xgamelist.createStartmenu(); + + return SendMessage(GetParent(hwndDlg),WM_CLOSE,0,0); + } + } + break; + case WM_CLOSE: + //nicht schließen, wenn noch der thread läuft + if(dontClose) { + MessageBoxA(hwndDlg, Translate("Please wait, gameini will be currently parsed ..."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + return FALSE; + } + //hauptfenster schließen + SendMessage(GetParent(hwndDlg),WM_CLOSE,0,0); + break; + } + return FALSE; +} + + +INT_PTR CALLBACK DlgAddGameProc2 (HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + switch (uMsg) + { + case WM_INITDIALOG: + //ein spiel wurde zum editieren geöffnet, felder alle vorbelegen + if(editgame) { + //add augf übernehmen umstellen + SetDlgItemTextA(hwndDlg,IDOK,Translate("Apply")); + + //namen vorbelegen + if(editgame->customgamename) + SetDlgItemTextA(hwndDlg,IDC_ADD_NAME,editgame->customgamename); + else if(editgame->name) + SetDlgItemTextA(hwndDlg,IDC_ADD_NAME,editgame->name); + + //gameid setzen und feld schreibschützen + char gameid[10]=""; + _itoa_s(editgame->id,gameid,10,10); + SetDlgItemTextA(hwndDlg,IDC_ADD_ID,gameid); + EnableWindow(GetDlgItem(hwndDlg,IDC_ADD_ID),FALSE); + + //sendgameid setzen, bei -1 leer lassen + if(editgame->send_gameid!=-1) + { + _itoa_s(editgame->send_gameid,gameid,10,10); + SetDlgItemTextA(hwndDlg,IDC_ADD_SENDID,gameid); + } + + //launcherstring + if(editgame->launchparams) { + SetDlgItemTextA(hwndDlg,IDC_ADD_LAUNCHEREXE,editgame->launchparams); + } + + //detectstring + if(editgame->path) { + SetDlgItemTextA(hwndDlg,IDC_ADD_DETECTEXE,editgame->path); + } + + //statusmsg + if(editgame->statusmsg) { + SetDlgItemTextA(hwndDlg,IDC_ADD_STATUSMSG,editgame->statusmsg); + } + + //mustcontain parameter + if(editgame->mustcontain) { + SetDlgItemTextA(hwndDlg,IDC_ADD_CUSTOMPARAMS,editgame->mustcontain); + } + } + //dialog übersetzen + TranslateDialogDefault(hwndDlg); + + return TRUE; + + case WM_COMMAND: + { + if(LOWORD(wParam) == IDC_SENDIDHELP) + { + MessageBoxA(hwndDlg, Translate("If you add a mod of a Xfire supported game, then you can specify what gameid will be sent to Xfire. So if you add a Half-Life mod, you can set the Half-Life game id and if you start the game, your Xfire buddies will see the Half-Life game icon next to your name and the game time will be tracked."), Translate("XFire Options"), MB_OK|MB_ICONASTERISK); + } + else if(LOWORD(wParam) == IDC_GAMEIDHELP) + { + MessageBoxA(hwndDlg, Translate("Every game in Xfire needs an id. Use a number above the last used id to avoid problems with used ids. Every number above 10000 should be save. This id will not be sent to Xfire, when you start a game."), Translate("XFire Options"), MB_OK|MB_ICONASTERISK); + } + else if(LOWORD(wParam) == IDC_ADD_BROWSEDETECT) + { + OPENFILENAME ofn; + if(OpenFileDialog(hwndDlg,&ofn,"*.exe")) + { + SetDlgItemText(hwndDlg,IDC_ADD_DETECTEXE,ofn.lpstrFile); + } + } + else if(LOWORD(wParam) == IDC_ADD_BROWSELAUNCHER) + { + OPENFILENAME ofn; + if(OpenFileDialog(hwndDlg,&ofn,"*.exe")) + { + SetDlgItemText(hwndDlg,IDC_ADD_LAUNCHEREXE,ofn.lpstrFile); + } + } + else if(LOWORD(wParam) == IDCANCEL) + { + //nicht schließen, wenn noch der thread läuft + if(dontClose) { + MessageBoxA(hwndDlg, Translate("Please wait, gameini will be currently parsed ..."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + return FALSE; + } + return SendMessage(GetParent(hwndDlg),WM_CLOSE,0,0); + } + else if(LOWORD(wParam) == IDOK) + { + char temp[256]; + + //fillgames sucht noch + if(dontClose) { + MessageBoxA(hwndDlg, Translate("Please wait, gameini will be currently parsed ..."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + return FALSE; + } + + //neuen gameeintrag anlegen + Xfire_game* newgame=NULL; + + if(editgame) + newgame=editgame; + else + newgame=new Xfire_game(); + + //Spielname + GetDlgItemText(hwndDlg,IDC_ADD_NAME,temp,256); + if(!strlen(temp)) + { + if(!editgame) delete newgame; + return MessageBoxA(hwndDlg, Translate("Please enter a game name."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + } + else + { + //spielname zuordnen + newgame->setString(temp,&newgame->customgamename); + //spielnamen fürs menü + newgame->setString(temp,&newgame->name); + } + //spielid nur setzen/prüfen, wenn kein editgame + if(!editgame) { + GetDlgItemText(hwndDlg,IDC_ADD_ID,temp,256); + if(!strlen(temp)) + { + if(!editgame) delete newgame; + return MessageBoxA(hwndDlg, Translate("Please enter a game id."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + } + else + { + int gameid=atoi(temp); + //negative gameid blocken + if(gameid<1) + { + if(!editgame) delete newgame; + return MessageBoxA(hwndDlg, Translate("Please enter a game id above 1."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + } + //gameid auf uniq prüfen + else if(xgamelist.getGamebyGameid(gameid)) + { + if(!editgame) delete newgame; + return MessageBoxA(hwndDlg, Translate("This game id is already in use."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + } + //gameid zuordnen + newgame->id=gameid; + //standardmäßig wird bei einem customeintrag keine id versendet + newgame->send_gameid=-1; + } + } + //zu sendene spielid + GetDlgItemText(hwndDlg,IDC_ADD_SENDID,temp,256); + if(strlen(temp)) + { + //standardmäßig wird bei einem customeintrag keine id versendet + int sendid=atoi(temp); + if(sendid>0) + newgame->send_gameid=sendid; + } + + //launcher exe + GetDlgItemText(hwndDlg,IDC_ADD_LAUNCHEREXE,temp,256); + if(strlen(temp)) + { + //lowercase pfad + newgame->strtolower(temp); + //detect exe + newgame->setString(temp,&newgame->launchparams); + } + //detectexe + GetDlgItemText(hwndDlg,IDC_ADD_DETECTEXE,temp,256); + if(!strlen(temp)) + { + if(!editgame) delete newgame; + return MessageBoxA(hwndDlg, Translate("Please select a game exe. Note: If you dont select a launcher exe, the game exe will be used in the game start menu."), Translate("XFire Options"), MB_OK|MB_ICONEXCLAMATION); + } + else + { + //lowercase pfad + newgame->strtolower(temp); + //detect exe + newgame->setString(temp,&newgame->path); + //wenn kein launcher exe/pfad angeben wurde, dann den gamepath nehmen + if(!newgame->launchparams) + newgame->setString(temp,&newgame->launchparams); + + } + //mustcontain parameter + GetDlgItemText(hwndDlg,IDC_ADD_CUSTOMPARAMS,temp,256); + if(strlen(temp)) + { + newgame->setString(temp,&newgame->mustcontain); + } + //statusmsg speichern + GetDlgItemText(hwndDlg,IDC_ADD_STATUSMSG,temp,256); + if(strlen(temp)) + { + newgame->setString(temp,&newgame->statusmsg); + newgame->setstatusmsg=1; + } + //custom eintrag aktivieren + newgame->custom=1; + //spiel in die gameliste einfügen, aber nur im nicht editmodus + if(!editgame) + xgamelist.Addgame(newgame); + //derzeitige gameliste in die datenbank eintragen + xgamelist.writeDatabase(); + //startmenu leeren + xgamelist.clearStartmenu(); + //startmenu neuerzeugen + xgamelist.createStartmenu(); + + return SendMessage(GetParent(hwndDlg),WM_CLOSE,0,0); + } + break; + } + } + return FALSE; +} + + +INT_PTR CALLBACK DlgAddGameProcMain (HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + TCITEMA tci = {0}; + int iTotal; + RECT rcClient; + + //icon des dialogs setzen + SendMessage(hwndDlg,WM_SETICON, (WPARAM)false, (LPARAM)LoadIcon(hinstance, MAKEINTRESOURCE(IDI_TM))); + + hwndTab = GetDlgItem(hwndDlg, IDC_OPTIONSTAB); + TabCtrl_DeleteAllItems(hwndTab); + GetClientRect(GetParent(hwndTab), &rcClient); + + hPage=CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ADDGAME), hwndDlg, DlgAddGameProc); + + //bei editgame keine spiellisteauswahl + if(!editgame) + { + iTotal = TabCtrl_GetItemCount(hwndTab); + tci.mask = TCIF_PARAM|TCIF_TEXT; + tci.lParam = (LPARAM)hPage; + tci.pszText = Translate("Supported Games"); + SendMessageA(hwndTab, TCM_INSERTITEMA, iTotal, (WPARAM)&tci); + MoveWindow(hPage, 3, 24, rcClient.right - 10, rcClient.bottom - 28, 1); + iTotal++; + } + else + ShowWindow(hPage,FALSE); + + hPage=CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ADDGAME2), hwndDlg, DlgAddGameProc2); + iTotal = TabCtrl_GetItemCount(hwndTab); + tci.mask = TCIF_PARAM|TCIF_TEXT; + tci.lParam = (LPARAM)hPage; + tci.pszText = Translate("Custom game"); + SendMessageA(hwndTab, TCM_INSERTITEMA, iTotal, (WPARAM)&tci); + MoveWindow(hPage, 3, 24, rcClient.right - 10, rcClient.bottom - 28, 1); + iTotal++; + + //bei editgame 2. registerkarte aktiv schalten + if(!editgame) { + ShowWindow(hPage,FALSE); + TabCtrl_SetCurSel(hwndTab, 0); + } + + return TRUE; + } + case WM_CLOSE: + //nicht schließen, wenn noch der thread läuft + if(dontClose) return FALSE; + //buffer leeren + if(buffer) + { + delete[] buffer; + buffer=NULL; + } + EndDialog(hwndDlg,0); + break; + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->idFrom) + { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + TCITEM tci; + int i,count; + + tci.mask = TCIF_PARAM; + count = TabCtrl_GetItemCount(GetDlgItem(hwndDlg,IDC_OPTIONSTAB)); + for (i=0; icode) + { + case TCN_SELCHANGING: + { + TCITEM tci; + + tci.mask = TCIF_PARAM; + TabCtrl_GetItem(hTabCtrl, TabCtrl_GetCurSel(hTabCtrl), &tci); + ShowWindow((HWND)tci.lParam, SW_HIDE); + } + break; + + case TCN_SELCHANGE: + { + TCITEM tci; + + tci.mask = TCIF_PARAM; + TabCtrl_GetItem(hTabCtrl, TabCtrl_GetCurSel(hTabCtrl), &tci); + ShowWindow((HWND)tci.lParam,SW_SHOW); + } + break; + } + break; + } + } + break; + } + return FALSE; +} \ No newline at end of file -- cgit v1.2.3