GameSettings::GameSettings()
        : AbstractWindow("gamesettings.xml", WIT_MOUSE_INPUT)
    {
        // Register sound driver components
        std::list<SoundDriver*> soundDriverList = SoundManager::getSingleton().getDriverList();

        for (std::list<SoundDriver*>::iterator it = soundDriverList.begin();
             it != soundDriverList.end(); it++)
        {
            if ((*it)->isDriverPlugin())
            {
                //registerSoundDriverConfig((*it)->getConfigComponent());
            }
        }

        // Connect actions to callbacks
        getWindow()->subscribeEvent(CEGUI::FrameWindow::EventCloseClicked,
                                    boost::bind(&GameSettings::onCancel, this));

        mVideoRenderer = getCombobox("GameOptionsWindow/Video/Renderer");
        mVideoResolution = getCombobox("GameOptionsWindow/Video/Resolution");
        mVideoFullscreen = getCheckbox("GameOptionsWindow/Video/Fullscreen");
        
        mVideoColorDepth32 = getRadioButton("GameOptionsWindow/Video/ColorDepth/32");
        mVideoColorDepth32->setUserData(new Ogre::String("32"));
        mVideoColorDepth32->setGroupID(1);
        mVideoColorDepth16 = getRadioButton("GameOptionsWindow/Video/ColorDepth/16");
        mVideoColorDepth16->setUserData(new Ogre::String("16"));
        mVideoColorDepth16->setGroupID(1);
        
        mVideoFsaa0 = getRadioButton("GameOptionsWindow/Video/FSAA/Off");
        mVideoFsaa0->setUserData(new Ogre::String("0"));
        mVideoFsaa0->setGroupID(2);
        mVideoFsaa2 = getRadioButton("GameOptionsWindow/Video/FSAA/2x");
        mVideoFsaa2->setUserData(new Ogre::String("2"));
        mVideoFsaa2->setGroupID(2);
        mVideoFsaa4 = getRadioButton("GameOptionsWindow/Video/FSAA/4x");
        mVideoFsaa4->setUserData(new Ogre::String("4"));
        mVideoFsaa4->setGroupID(2);
        mVideoFsaa8 = getRadioButton("GameOptionsWindow/Video/FSAA/8x");
        mVideoFsaa8->setUserData(new Ogre::String("8"));
        mVideoFsaa8->setGroupID(2);
        
        mVideoRttModeFBO = getRadioButton("GameOptionsWindow/Video/RTT/FBO");
        mVideoRttModeFBO->setUserData(new Ogre::String("FBO"));
        mVideoRttModeFBO->setGroupID(3);
        mVideoRttModePBuffer = getRadioButton("GameOptionsWindow/Video/RTT/PBuffer");
        mVideoRttModePBuffer->setUserData(new Ogre::String("PBuffer"));
        mVideoRttModePBuffer->setGroupID(3);
        mVideoRttModeCopy = getRadioButton("GameOptionsWindow/Video/RTT/Copy");
        mVideoRttModeCopy->setUserData(new Ogre::String("Copy"));
        mVideoRttModeCopy->setGroupID(3);
        
        centerWindow();
        setVisible(false);
        update();
    }
//---------------------------------------------------------------------------
BOOL CALLBACK PdfProc(HWND hWnd, UINT msg, WPARAM wP, LPARAM)
{
	struct PageSize {
		int w, h;
		TCHAR *s;
	};
	static const PageSize P[]=
	{{595, 842, _T("A4")}, {421, 595, _T("A5")}, {842, 1190, _T("A3")}};
	static const int L[]={1, 2, 3, 4, 6, 9, 12};
	int i;
	HWND combo;
	Toption *to;
	TCHAR buf[4];

	switch(msg){
		case WM_INITDIALOG:
			setDlgTexts(hWnd, 26);
			SetDlgItemInt(hWnd, 160, pdfObject.count, FALSE);
			SetDlgItemInt(hWnd, 163, pdfObject.pageWidth, FALSE);
			SetDlgItemInt(hWnd, 164, pdfObject.pageHeight, FALSE);
			combo= GetDlgItem(hWnd, 162);
			for(i=0; i<sizeA(P); i++){
				const PageSize *p = &P[i];
				SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)p->s);
				if(pdfObject.pageWidth==p->w && pdfObject.pageHeight==p->h){
					SendMessage(combo, CB_SETCURSEL, i, 0);
				}
			}
			combo= GetDlgItem(hWnd, 161);
			for(i=0; i<sizeA(L); i++){
				_stprintf(buf, _T("%d"), L[i]);
				SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)buf);
			}
			initGameTypeCombo(hWnd);
			SetDlgItemInt(hWnd, 161, pdfObject.countPerPage, FALSE);
			SetDlgItemInt(hWnd, 168, pdfObject.border, FALSE);
			SetDlgItemInt(hWnd, 169, pdfObject.spacing, FALSE);
			CheckRadioButton(hWnd, 350, 352, 350+symbol0);
			for(to=optionA; to<endA(optionA); to++){
				CheckDlgButton(hWnd, to->dialog, *to->value ? BST_CHECKED : BST_UNCHECKED);
			}
			SetDlgItemInt(hWnd, 165, level, FALSE);
			SetDlgItemText(hWnd, 166, pdfObject.fn);
			return TRUE;

		case WM_COMMAND:
			wP=LOWORD(wP);
			if(wP==IDOK){
				pdfObject.count = 2 * GetDlgItemInt(hWnd, 160, 0, FALSE);
				//page properties
				pdfObject.pageWidth = GetDlgItemInt(hWnd, 163, 0, FALSE);
				pdfObject.pageHeight = GetDlgItemInt(hWnd, 164, 0, FALSE);
				pdfObject.countPerPage = GetDlgItemInt(hWnd, 161, 0, FALSE);
				pdfObject.border = GetDlgItemInt(hWnd, 168, 0, FALSE);
				pdfObject.spacing = GetDlgItemInt(hWnd, 169, 0, FALSE);
				//game options
				for(to=optionA; to<endA(optionA); to++){
					*to->value= IsDlgButtonChecked(hWnd, to->dialog);
				}
				level= GetDlgItemInt(hWnd, 165, 0, FALSE);
				symbol0= getRadioButton(hWnd, 350, 352);
				gameType=getGameType(hWnd);

				GetDlgItemText(hWnd, 166, pdfObject.fn, sizeA(pdfObject.fn));
				EnableWindow(GetDlgItem(hWnd, IDOK), FALSE);
				pdfObject.print(hWnd);
				EndDialog(hWnd, wP);
			}
			if(wP==IDCANCEL) EndDialog(hWnd, wP);
			if(wP==162){
				i=SendDlgItemMessage(hWnd, 162, CB_GETCURSEL, 0, 0);
				if(i>=0 && i<sizeA(P)){
					SetDlgItemInt(hWnd, 163, P[i].w, FALSE);
					SetDlgItemInt(hWnd, 164, P[i].h, FALSE);
				}
			}
			if(wP==167){
				if(saveFileDlg(&pdfOfn, hWnd, 0)){
					SetDlgItemText(hWnd, 166, pdfObject.fn);
				}
			}
			break;
	}
	return FALSE;
}