File:  [RetroPC.NET] / np2 / win9x / dialog / d_screen.cpp
Revision 1.18: download - view: text, annotated - select for diffs
Mon Mar 7 18:54:11 2011 JST (14 years, 7 months ago) by yui
Branches: MAIN
CVS tags: HEAD
changes build settings

/**
 * @file	d_screen.cpp
 * @brief	Screen configure dialog procedure
 *
 * @author	$Author: yui $
 * @date	$Date: 2011/03/07 09:54:11 $
 */

#include "compiler.h"
#include <commctrl.h>
#include <prsht.h>
#include "strres.h"
#include "resource.h"
#include "np2.h"
#include "oemtext.h"
#include "scrnmng.h"
#include "sysmng.h"
#include "np2class.h"
#include "dialog.h"
#include "dialogs.h"
#include "pccore.h"
#include "iocore.h"
#include "scrndraw.h"
#include "palettes.h"

#if !defined(__GNUC__)
#pragma comment(lib, "comctl32.lib")
#endif	// !defined(__GNUC__)

static LRESULT CALLBACK Scropt1DlgProc(HWND hWnd, UINT msg,
													WPARAM wp, LPARAM lp) {
	TCHAR	work[32];
	UINT16	ret;
	UINT8	b;
	int		renewal;

	switch(msg) {
		case WM_INITDIALOG:
			SetDlgItemCheck(hWnd, IDC_LCD, np2cfg.LCD_MODE & 1);
			EnableWindow(GetDlgItem(hWnd, IDC_LCDX), np2cfg.LCD_MODE & 1);
			SetDlgItemCheck(hWnd, IDC_LCDX, np2cfg.LCD_MODE & 2);

			SetDlgItemCheck(hWnd, IDC_SKIPLINE, np2cfg.skipline);
			SendDlgItemMessage(hWnd, IDC_SKIPLIGHT, TBM_SETRANGE, TRUE,
											MAKELONG(0, 255));
			SendDlgItemMessage(hWnd, IDC_SKIPLIGHT, TBM_SETPOS, TRUE,
											np2cfg.skiplight);
			wsprintf(work, tchar_u, np2cfg.skiplight);
			SetDlgItemText(hWnd, IDC_LIGHTSTR, work);
			return(TRUE);

		case WM_COMMAND:
			switch(LOWORD(wp)) {
				case IDC_LCD:
					EnableWindow(GetDlgItem(hWnd, IDC_LCDX),
											GetDlgItemCheck(hWnd, IDC_LCD));
					break;
			}
			break;

		case WM_HSCROLL:
			switch(GetDlgCtrlID((HWND)lp)) {
				case IDC_SKIPLIGHT:
					ret = (UINT16)SendDlgItemMessage(hWnd, IDC_SKIPLIGHT,
													TBM_GETPOS, 0, 0);
					wsprintf(work, tchar_u, ret);
					SetDlgItemText(hWnd, IDC_LIGHTSTR, work);
					break;
			}
			break;

		case WM_NOTIFY:
			if ((((NMHDR *)lp)->code) == (UINT)PSN_APPLY) {
				renewal = 0;
				b = (UINT8)GetDlgItemCheck(hWnd, IDC_SKIPLINE);
				if (np2cfg.skipline != b) {
					np2cfg.skipline = b;
					renewal = 1;
				}
				ret = (UINT16)SendDlgItemMessage(hWnd, IDC_SKIPLIGHT,
														TBM_GETPOS, 0, 0);
				if (ret > 255) {
					ret = 255;
				}
				if (np2cfg.skiplight != ret) {
					np2cfg.skiplight = ret;
					renewal = 1;
				}
				if (renewal) {
					pal_makeskiptable();
				}
				b = (GetDlgItemCheck(hWnd, IDC_LCD)?0x01:0x00) |
					(GetDlgItemCheck(hWnd, IDC_LCDX)?0x02:0x00);
				if (np2cfg.LCD_MODE != b) {
					np2cfg.LCD_MODE = b;
					pal_makelcdpal();
					renewal = 1;
				}
				if (renewal) {
					scrndraw_redraw();
					sysmng_update(SYS_UPDATECFG);
				}
				return(TRUE);
			}
			break;
	}
	return(FALSE);
}

static const int gdcchip[4] = {IDC_GRCGNON, IDC_GRCG, IDC_GRCG2, IDC_EGC};

static LRESULT CALLBACK Scropt2DlgProc(HWND hWnd, UINT msg,
													WPARAM wp, LPARAM lp) {

	UINT8	b;
	UINT	update;

	switch(msg) {
		case WM_INITDIALOG:
			if (!np2cfg.uPD72020) {
				SetDlgItemCheck(hWnd, IDC_GDC7220, TRUE);
			}
			else {
				SetDlgItemCheck(hWnd, IDC_GDC72020, TRUE);
			}
			SetDlgItemCheck(hWnd, gdcchip[np2cfg.grcg & 3], TRUE);
			SetDlgItemCheck(hWnd, IDC_PC980124, np2cfg.color16);
#if defined(SUPPORT_PC9821)
			EnableWindow(GetDlgItem(hWnd, IDC_GCBOX), FALSE);
			EnableWindow(GetDlgItem(hWnd, IDC_GRCGNON), FALSE);
			EnableWindow(GetDlgItem(hWnd, IDC_GRCG), FALSE);
			EnableWindow(GetDlgItem(hWnd, IDC_GRCG2), FALSE);
			EnableWindow(GetDlgItem(hWnd, IDC_EGC), FALSE);
			EnableWindow(GetDlgItem(hWnd, IDC_PC980124), FALSE);
#endif
			return(TRUE);

		case WM_NOTIFY:
			if ((((NMHDR *)lp)->code) == (UINT)PSN_APPLY) {
				update = 0;
				b = (UINT8)GetDlgItemCheck(hWnd, IDC_GDC72020);
				if (np2cfg.uPD72020 != b) {
					np2cfg.uPD72020 = b;
					update |= SYS_UPDATECFG;
					gdc_restorekacmode();
					gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
				}
				for (b=0; (b<3) && (!GetDlgItemCheck(hWnd, gdcchip[b])); b++);
				if (np2cfg.grcg != b) {
					np2cfg.grcg = b;
					update |= SYS_UPDATECFG;
					gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
				}
				b = (UINT8)GetDlgItemCheck(hWnd, IDC_PC980124);
				if (np2cfg.color16 != b) {
					np2cfg.color16 = b;
					update |= SYS_UPDATECFG;
				}
				sysmng_update(update);
				return(TRUE);
			}
			break;
	}
	return(FALSE);
}

static LRESULT CALLBACK Scropt3DlgProc(HWND hWnd, UINT msg,
													WPARAM wp, LPARAM lp) {

	TCHAR	work[32];
	UINT8	value[6];
	UINT8	b;
	UINT	update;

	switch(msg) {
		case WM_INITDIALOG:
			SendDlgItemMessage(hWnd, IDC_TRAMWAIT, TBM_SETRANGE, TRUE,
											MAKELONG(0, 32));
			SendDlgItemMessage(hWnd, IDC_TRAMWAIT, TBM_SETPOS, TRUE,
											np2cfg.wait[0]);
			wsprintf(work, tchar_u, np2cfg.wait[0]);
			SetDlgItemText(hWnd, IDC_TRAMSTR, work);
			SendDlgItemMessage(hWnd, IDC_VRAMWAIT, TBM_SETRANGE, TRUE,
											MAKELONG(0, 32));
			SendDlgItemMessage(hWnd, IDC_VRAMWAIT, TBM_SETPOS, TRUE,
											np2cfg.wait[2]);
			wsprintf(work, tchar_u, np2cfg.wait[2]);
			SetDlgItemText(hWnd, IDC_VRAMSTR, work);
			SendDlgItemMessage(hWnd, IDC_GRCGWAIT, TBM_SETRANGE, TRUE,
											MAKELONG(0, 32));
			SendDlgItemMessage(hWnd, IDC_GRCGWAIT, TBM_SETPOS, TRUE,
											np2cfg.wait[4]);
			wsprintf(work, tchar_u, np2cfg.wait[4]);
			SetDlgItemText(hWnd, IDC_GRCGSTR, work);

			SendDlgItemMessage(hWnd, IDC_REALPAL, TBM_SETRANGE, TRUE,
											MAKELONG(0, 64));
			SendDlgItemMessage(hWnd, IDC_REALPAL, TBM_SETPOS, TRUE,
											np2cfg.realpal);
			wsprintf(work, tchar_d, (int)np2cfg.realpal - 32);
			SetDlgItemText(hWnd, IDC_REALPALSTR, work);

			return(TRUE);

		case WM_HSCROLL:
			switch(GetDlgCtrlID((HWND)lp)) {
				case IDC_TRAMWAIT:
					b = (UINT8)SendDlgItemMessage(hWnd, IDC_TRAMWAIT,
													TBM_GETPOS, 0, 0);
					wsprintf(work, tchar_u, b);
					SetDlgItemText(hWnd, IDC_TRAMSTR, work);
					break;

				case IDC_VRAMWAIT:
					b = (UINT8)SendDlgItemMessage(hWnd, IDC_VRAMWAIT,
													TBM_GETPOS, 0, 0);
					wsprintf(work, tchar_u, b);
					SetDlgItemText(hWnd, IDC_VRAMSTR, work);
					break;

				case IDC_GRCGWAIT:
					b = (UINT8)SendDlgItemMessage(hWnd, IDC_GRCGWAIT,
													TBM_GETPOS, 0, 0);
					wsprintf(work, tchar_u, b);
					SetDlgItemText(hWnd, IDC_GRCGSTR, work);
					break;

				case IDC_REALPAL:
					b = (UINT8)SendDlgItemMessage(hWnd, IDC_REALPAL,
													TBM_GETPOS, 0, 0);
					wsprintf(work, tchar_d, (int)b - 32);
					SetDlgItemText(hWnd, IDC_REALPALSTR, work);
			}
			break;

		case WM_NOTIFY:
			if ((((NMHDR *)lp)->code) == (UINT)PSN_APPLY) {
				update = 0;
				ZeroMemory(value, sizeof(value));
				value[0] = (UINT8)SendDlgItemMessage(hWnd, IDC_TRAMWAIT,
													TBM_GETPOS, 0, 0);
				if (value[0]) {
					value[1] = 1;
				}
				value[2] = (UINT8)SendDlgItemMessage(hWnd, IDC_VRAMWAIT,
													TBM_GETPOS, 0, 0);
				if (value[2]) {
					value[3] = 1;
				}
				value[4] = (UINT8)SendDlgItemMessage(hWnd, IDC_GRCGWAIT,
													TBM_GETPOS, 0, 0);
				if (value[4]) {
					value[5] = 1;
				}
				for (b=0; b<6; b++) {
					if (np2cfg.wait[b] != value[b]) {
						np2cfg.wait[b] = value[b];
						update |= SYS_UPDATECFG;
					}
				}
				b = (UINT8)SendDlgItemMessage(hWnd, IDC_REALPAL,
														TBM_GETPOS, 0, 0);
				if (np2cfg.realpal != b) {
					np2cfg.realpal = b;
					update |= SYS_UPDATECFG;
				}
				sysmng_update(update);
				return(TRUE);
			}
			break;
	}
	return(FALSE);
}

static const CBPARAM cpZoom[] =
{
	{MAKEINTRESOURCE(IDS_ZOOM_NONE),			0},
	{MAKEINTRESOURCE(IDS_ZOOM_FIXEDASPECT),		1},
	{MAKEINTRESOURCE(IDS_ZOOM_ADJUSTASPECT),	2},
	{MAKEINTRESOURCE(IDS_ZOOM_FULL),			3},
};

static LRESULT CALLBACK ScroptFullScreenDlgProc(HWND hWnd, UINT uMsg,
												WPARAM wParam, LPARAM lParam)
{
	UINT8	c;

	switch(uMsg)
	{
		case WM_INITDIALOG:
			c = np2oscfg.fscrnmod;
			SetDlgItemCheck(hWnd, IDC_FULLSCREEN_SAMEBPP,
													(c & FSCRNMOD_SAMEBPP));
			SetDlgItemCheck(hWnd, IDC_FULLSCREEN_SAMERES,
													(c & FSCRNMOD_SAMERES));
			dlgs_setcbitem(hWnd, IDC_FULLSCREEN_ZOOM,
												cpZoom, NELEMENTS(cpZoom));
			dlgs_setcbcur(hWnd, IDC_FULLSCREEN_ZOOM, (c & 3));
			EnableWindow(GetDlgItem(hWnd, IDC_FULLSCREEN_ZOOM),
												(c & FSCRNMOD_SAMERES) != 0);
			return(TRUE);

		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
				case IDC_FULLSCREEN_SAMERES:
					dlgs_enablebyautocheck(hWnd, IDC_FULLSCREEN_ZOOM,
													IDC_FULLSCREEN_SAMERES);
					break;
			}
			break;

		case WM_NOTIFY:
			if ((((NMHDR *)lParam)->code) == (UINT)PSN_APPLY)
			{
				c = 0;
				if (GetDlgItemCheck(hWnd, IDC_FULLSCREEN_SAMEBPP))
				{
					c |= FSCRNMOD_SAMEBPP;
				}
				if (GetDlgItemCheck(hWnd, IDC_FULLSCREEN_SAMERES))
				{
					c |= FSCRNMOD_SAMERES;
				}
				c |= dlgs_getcbcur(hWnd, IDC_FULLSCREEN_ZOOM, 0);
				if (np2oscfg.fscrnmod != c)
				{
					np2oscfg.fscrnmod = c;
					sysmng_update(SYS_UPDATEOSCFG);
				}
				return(TRUE);
			}
			break;
	}
	return(FALSE);
}

void dialog_scropt(HWND hWnd)
{
	HINSTANCE		hInstance;
	PROPSHEETPAGE	psp;
	PROPSHEETHEADER	psh;
	HPROPSHEETPAGE	hpsp[4];
	TCHAR			szTitle[128];

	hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);

	ZeroMemory(&psp, sizeof(psp));
	psp.dwSize = sizeof(PROPSHEETPAGE);
	psp.dwFlags = PSP_DEFAULT;
	psp.hInstance = hInstance;

	psp.pszTemplate = MAKEINTRESOURCE(IDD_SCROPT1);
	psp.pfnDlgProc = (DLGPROC)Scropt1DlgProc;
	hpsp[0] = CreatePropertySheetPage(&psp);

	psp.pszTemplate = MAKEINTRESOURCE(IDD_SCROPT2);
	psp.pfnDlgProc = (DLGPROC)Scropt2DlgProc;
	hpsp[1] = CreatePropertySheetPage(&psp);

	psp.pszTemplate = MAKEINTRESOURCE(IDD_SCROPT3);
	psp.pfnDlgProc = (DLGPROC)Scropt3DlgProc;
	hpsp[2] = CreatePropertySheetPage(&psp);

	psp.pszTemplate = MAKEINTRESOURCE(IDD_SCROPT_FULLSCREEN);
	psp.pfnDlgProc = (DLGPROC)ScroptFullScreenDlgProc;
	hpsp[3] = CreatePropertySheetPage(&psp);

	loadstringresource(IDS_SCREENOPTION, szTitle, NELEMENTS(szTitle));

	ZeroMemory(&psh, sizeof(psh));
	psh.dwSize = sizeof(PROPSHEETHEADER);
	psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEHICON | PSH_USECALLBACK;
	psh.hwndParent = hWnd;
	psh.hInstance = hInstance;
	psh.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2));
	psh.nPages = 4;
	psh.phpage = hpsp;
	psh.pszCaption = szTitle;
	psh.pfnCallback = np2class_propetysheet;
	PropertySheet(&psh);
	InvalidateRect(hWnd, NULL, TRUE);
}


RetroPC.NET-CVS <cvs@retropc.net>