Full-screen: Added Config UI checkbox for the display of subunit status (ie. keyboard caps, disk activity, paused/stepping state) - #224

This commit is contained in:
tomcw
2017-10-02 22:22:26 +01:00
parent 666b45ff71
commit 9616df504e
8 changed files with 139 additions and 74 deletions
+16 -15
View File
@@ -89,25 +89,26 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "&Model:",IDC_STATIC,5,7,40,8
COMBOBOX IDC_COMPUTER,45,5,95,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "&Confirm reboot",IDC_CHECK_CONFIRM_REBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,8,62,10
GROUPBOX "Video",IDC_STATIC,5,22,200,43
CONTROL "Confirm reboot",IDC_CHECK_CONFIRM_REBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,8,62,10
GROUPBOX "Video",IDC_STATIC,5,22,200,56
LTEXT "Mo&de:",IDC_STATIC,12,33,33,8
COMBOBOX IDC_VIDEOTYPE,45,30,95,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Monochrome &Color...",IDC_MONOCOLOR,12,46,80,14
CONTROL "&50% Scan lines",IDC_CHECK_HALF_SCAN_LINES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,48,62,10
LTEXT "&Serial Port:",IDC_STATIC,5,74,40,8
COMBOBOX IDC_SERIALPORT,45,72,95,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Ethernet Settings...",IDC_ETHERNET,4,90,80,14
GROUPBOX "Emulation Speed Control",IDC_STATIC,5,115,200,85
CONTROL "50% Scan lines",IDC_CHECK_HALF_SCAN_LINES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,48,62,10
CONTROL "Full-Screen: Show drive/keyboard status",IDC_CHECK_FS_SHOW_SUBUNIT_STATUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,64,140,10
LTEXT "&Serial Port:",IDC_STATIC,5,89,40,8
COMBOBOX IDC_SERIALPORT,45,87,95,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Ethernet Settings...",IDC_ETHERNET,4,105,80,14
GROUPBOX "Emulation Speed Control",IDC_STATIC,5,130,200,85
CONTROL "Use &Authentic Machine Speed",IDC_AUTHENTIC_SPEED,
"Button",BS_AUTORADIOBUTTON,15,126,115,10
CONTROL "Select C&ustom Speed (in MHz)",IDC_CUSTOM_SPEED,"Button",BS_AUTORADIOBUTTON,15,138,115,10
CONTROL "Generic2",IDC_SLIDER_CPU_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,25,149,160,15
CTEXT "0.5",IDC_0_5_MHz,23,165,20,10
CTEXT "1.0",IDC_1_0_MHz,59,165,20,10
CTEXT "2.0",IDC_2_0_MHz,96,165,20,10
RTEXT "Fastest",IDC_MAX_MHz,150,165,29,10
PUSHBUTTON "&Benchmark Emulator",IDC_BENCHMARK,15,179,85,15
"Button",BS_AUTORADIOBUTTON,15,141,115,10
CONTROL "Select C&ustom Speed (in MHz)",IDC_CUSTOM_SPEED,"Button",BS_AUTORADIOBUTTON,15,153,115,10
CONTROL "Generic2",IDC_SLIDER_CPU_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,25,164,160,15
CTEXT "0.5",IDC_0_5_MHz,23,180,20,10
CTEXT "1.0",IDC_1_0_MHz,59,180,20,10
CTEXT "2.0",IDC_2_0_MHz,96,180,20,10
RTEXT "Fastest",IDC_MAX_MHz,150,180,29,10
PUSHBUTTON "&Benchmark Emulator",IDC_BENCHMARK,15,194,85,15
END
IDD_PROPPAGE_INPUT DIALOGEX 0, 0, 210, 215
+1
View File
@@ -113,6 +113,7 @@
#define IDC_COMBO_HDD2 1079
#define IDC_COMBO_DISK1 1080
#define IDC_COMBO_DISK2 1081
#define IDC_CHECK_FS_SHOW_SUBUNIT_STATUS 1082
#define IDM_EXIT 40001
#define IDM_HELP 40002
#define IDM_ABOUT 40003
+4 -1
View File
@@ -596,7 +596,7 @@ void LoadConfiguration(void)
}
char aySerialPortName[ CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM ];
if (RegLoadString( TEXT("Configuration"),
if (RegLoadString( TEXT(REG_CONFIG),
TEXT(REGVALUE_SERIAL_PORT_NAME),
TRUE,
aySerialPortName,
@@ -618,6 +618,9 @@ void LoadConfiguration(void)
DWORD dwTmp;
if(REGLOAD(TEXT(REGVALUE_FS_SHOW_SUBUNIT_STATUS), &dwTmp))
SetFullScreenShowSubunitStatus(dwTmp ? true : false);
if(REGLOAD(TEXT(REGVALUE_THE_FREEZES_F8_ROM), &dwTmp))
sg_PropertySheet.SetTheFreezesF8Rom(dwTmp);
+1
View File
@@ -75,6 +75,7 @@ enum AppMode_e
#define REGVALUE_CPU_TYPE "CPU Type"
#define REGVALUE_OLD_APPLE2_TYPE "Computer Emulation" // Deprecated
#define REGVALUE_CONFIRM_REBOOT "Confirm Reboot" // Added at 1.24.1 PageConfig
#define REGVALUE_FS_SHOW_SUBUNIT_STATUS "Full-screen show subunit status"
#define REGVALUE_SPKR_VOLUME "Speaker Volume"
#define REGVALUE_MB_VOLUME "Mockingboard Volume"
#define REGVALUE_SAVESTATE_FILENAME "Save State Filename"
+37 -15
View File
@@ -118,10 +118,8 @@ BOOL CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM
break;
case IDC_CHECK_CONFIRM_REBOOT:
g_bConfirmReboot = IsDlgButtonChecked(hWnd, IDC_CHECK_CONFIRM_REBOOT) ? 1 : 0;
break;
case IDC_CHECK_HALF_SCAN_LINES:
case IDC_CHECK_FS_SHOW_SUBUNIT_STATUS:
// Checked in DlgOK()
break;
@@ -189,6 +187,7 @@ BOOL CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM
m_PropertySheetHelper.FillComboBox(hWnd,IDC_VIDEOTYPE,g_aVideoChoices,g_eVideoType);
CheckDlgButton(hWnd, IDC_CHECK_HALF_SCAN_LINES, g_uHalfScanLines ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hWnd, IDC_CHECK_FS_SHOW_SUBUNIT_STATUS, GetFullScreenShowSubunitStatus() ? BST_CHECKED : BST_UNCHECKED);
m_PropertySheetHelper.FillComboBox(hWnd,IDC_SERIALPORT, sg_SSC.GetSerialPortChoices(), sg_SSC.GetSerialPort());
EnableWindow(GetDlgItem(hWnd, IDC_SERIALPORT), !sg_SSC.IsActive() ? TRUE : FALSE);
@@ -245,22 +244,24 @@ void CPageConfig::DlgOK(HWND hWnd)
{
bool bVideoReinit = false;
const DWORD newvidtype = (DWORD) SendDlgItemMessage(hWnd, IDC_VIDEOTYPE, CB_GETCURSEL, 0, 0);
if (g_eVideoType != newvidtype)
const DWORD uNewVideoType = (DWORD) SendDlgItemMessage(hWnd, IDC_VIDEOTYPE, CB_GETCURSEL, 0, 0);
if (g_eVideoType != uNewVideoType)
{
g_eVideoType = newvidtype;
g_eVideoType = uNewVideoType;
bVideoReinit = true;
}
const DWORD newHalfScanLines = IsDlgButtonChecked(hWnd, IDC_CHECK_HALF_SCAN_LINES) ? 1 : 0;
if (g_uHalfScanLines != newHalfScanLines)
const DWORD uNewHalfScanLines = IsDlgButtonChecked(hWnd, IDC_CHECK_HALF_SCAN_LINES) ? 1 : 0;
if (g_uHalfScanLines != uNewHalfScanLines)
{
g_uHalfScanLines = newHalfScanLines;
g_uHalfScanLines = uNewHalfScanLines;
bVideoReinit = true;
}
if (bVideoReinit)
{
Config_Save_Video();
FrameRefreshStatus(DRAW_TITLE, false);
VideoReinitialize();
@@ -270,15 +271,38 @@ void CPageConfig::DlgOK(HWND hWnd)
}
}
REGSAVE(TEXT(REGVALUE_CONFIRM_REBOOT), g_bConfirmReboot);
//
const DWORD newserialport = (DWORD) SendDlgItemMessage(hWnd, IDC_SERIALPORT, CB_GETCURSEL, 0, 0);
sg_SSC.CommSetSerialPort(hWnd, newserialport);
const bool bNewFSSubunitStatus = IsDlgButtonChecked(hWnd, IDC_CHECK_FS_SHOW_SUBUNIT_STATUS) ? true : false;
if (GetFullScreenShowSubunitStatus() != bNewFSSubunitStatus)
{
REGSAVE(TEXT(REGVALUE_FS_SHOW_SUBUNIT_STATUS), bNewFSSubunitStatus ? 1 : 0);
SetFullScreenShowSubunitStatus(bNewFSSubunitStatus);
if (IsFullScreen())
FrameRefreshStatus(DRAW_BACKGROUND | DRAW_LEDS | DRAW_DISK_STATUS);
}
//
const BOOL bNewConfirmReboot = IsDlgButtonChecked(hWnd, IDC_CHECK_CONFIRM_REBOOT) ? 1 : 0;
if (g_bConfirmReboot != bNewConfirmReboot)
{
REGSAVE(TEXT(REGVALUE_CONFIRM_REBOOT), bNewConfirmReboot);
g_bConfirmReboot = bNewConfirmReboot;
}
//
const DWORD uNewSerialPort = (DWORD) SendDlgItemMessage(hWnd, IDC_SERIALPORT, CB_GETCURSEL, 0, 0);
sg_SSC.CommSetSerialPort(hWnd, uNewSerialPort);
RegSaveString( TEXT(REG_CONFIG),
TEXT(REGVALUE_SERIAL_PORT_NAME),
TRUE,
sg_SSC.GetSerialPortName() );
//
if (IsDlgButtonChecked(hWnd, IDC_AUTHENTIC_SPEED))
g_dwSpeed = SPEED_NORMAL;
else
@@ -289,8 +313,6 @@ void CPageConfig::DlgOK(HWND hWnd)
REGSAVE(TEXT(REGVALUE_CUSTOM_SPEED), IsDlgButtonChecked(hWnd, IDC_CUSTOM_SPEED));
REGSAVE(TEXT(REGVALUE_EMULATION_SPEED), g_dwSpeed);
Config_Save_Video();
m_PropertySheetHelper.PostMsgAfterClose(hWnd, m_Page);
}
+71 -38
View File
@@ -130,7 +130,7 @@ static HDC g_hFrameDC = (HDC)0;
static RECT framerect = {0,0,0,0};
HWND g_hFrameWindow = (HWND)0;
BOOL g_bIsFullScreen = 0;
static BOOL g_bIsFullScreen = 0;
BOOL g_bConfirmReboot = 1; // saved PageConfig REGSAVE
BOOL g_bMultiMon = 0; // OFF = load window position & clamp initial frame to screen, ON = use window position as is
@@ -635,11 +635,29 @@ static void DrawFrameWindow ()
}
//===========================================================================
static bool g_bFullScreen_ShowSubunitStatus = true;
bool IsFullScreen(void)
{
return g_bIsFullScreen ? true : false;
}
bool GetFullScreenShowSubunitStatus(void)
{
return g_bFullScreen_ShowSubunitStatus;
}
void SetFullScreenShowSubunitStatus(bool bShow)
{
g_bFullScreen_ShowSubunitStatus = bShow;
}
//===========================================================================
void FrameDrawDiskLEDS( HDC passdc )
{
static Disk_Status_e eDrive1Status = DISK_STATUS_OFF;
static Disk_Status_e eDrive2Status = DISK_STATUS_OFF;
Disk_Status_e eDrive1Status;
Disk_Status_e eDrive2Status;
DiskGetLightStatus(&eDrive1Status, &eDrive2Status);
g_eStatusDrive1 = eDrive1Status;
@@ -654,6 +672,9 @@ void FrameDrawDiskLEDS( HDC passdc )
if (g_bIsFullScreen)
{
if (!g_bFullScreen_ShowSubunitStatus)
return;
SelectObject(dc,smallfont);
SetBkMode(dc,OPAQUE);
SetBkColor(dc,RGB(0,0,0));
@@ -772,6 +793,9 @@ void FrameDrawDiskStatus( HDC passdc )
if (g_bIsFullScreen)
{
if (!g_bFullScreen_ShowSubunitStatus)
return;
#if _DEBUG && 0
SetBkColor(dc,RGB(255,0,255));
#endif
@@ -846,52 +870,61 @@ static void DrawStatusArea (HDC passdc, int drawflags)
if (g_bIsFullScreen)
{
SelectObject(dc,smallfont);
if (!g_bFullScreen_ShowSubunitStatus)
{
// Erase Config button icon too, as trk/sec is written here - see FrameDrawDiskStatus()
RECT rect = {x,y-BUTTONCY,x+BUTTONCX,y+BUTTONCY};
FillRect(dc, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));
}
else
{
SelectObject(dc,smallfont);
if (drawflags & DRAW_DISK_STATUS)
FrameDrawDiskStatus( dc );
if (drawflags & DRAW_DISK_STATUS)
FrameDrawDiskStatus( dc );
#if HD_LED
SetTextColor(dc, g_aDiskFullScreenColorsLED[ eHardDriveStatus ] );
TextOut(dc,x+23,y+2,TEXT("H"),1);
SetTextColor(dc, g_aDiskFullScreenColorsLED[ eHardDriveStatus ] );
TextOut(dc,x+23,y+2,TEXT("H"),1);
#endif
// Feature Request #3581 ] drive lights in full screen mode
// This has been in for a while, at least since 1.12.7.1
// Feature Request #3581 ] drive lights in full screen mode
// This has been in for a while, at least since 1.12.7.1
// Full Screen Drive LED
// Note: Made redundant with above code
// RECT rect = {0,0,8,8};
// CONST int DriveLedY = 12; // 8 in windowed mode
// DrawBitmapRect(dc,x+12,y+DriveLedY,&rect,g_hDiskFullScreenLED[ eDrive1Status ]);
// DrawBitmapRect(dc,x+30,y+DriveLedY,&rect,g_hDiskFullScreenLED[ eDrive2Status ]);
// SetTextColor(dc, g_aDiskFullScreenColors[ eDrive1Status ] );
// TextOut(dc,x+ 10,y+2,TEXT("*"),1);
// SetTextColor(dc, g_aDiskFullScreenColors[ eDrive2Status ] );
// TextOut(dc,x+ 20,y+2,TEXT("*"),1);
// Full Screen Drive LED
// Note: Made redundant with above code
// RECT rect = {0,0,8,8};
// CONST int DriveLedY = 12; // 8 in windowed mode
// DrawBitmapRect(dc,x+12,y+DriveLedY,&rect,g_hDiskFullScreenLED[ eDrive1Status ]);
// DrawBitmapRect(dc,x+30,y+DriveLedY,&rect,g_hDiskFullScreenLED[ eDrive2Status ]);
// SetTextColor(dc, g_aDiskFullScreenColors[ eDrive1Status ] );
// TextOut(dc,x+ 10,y+2,TEXT("*"),1);
// SetTextColor(dc, g_aDiskFullScreenColors[ eDrive2Status ] );
// TextOut(dc,x+ 20,y+2,TEXT("*"),1);
if (!IS_APPLE2)
{
SetTextAlign(dc,TA_RIGHT | TA_TOP);
SetTextColor(dc,(bCaps
? RGB(128,128,128)
: RGB( 0, 0, 0) ));
if (!IS_APPLE2)
{
SetTextAlign(dc,TA_RIGHT | TA_TOP);
SetTextColor(dc,(bCaps
? RGB(128,128,128)
: RGB( 0, 0, 0) ));
// const TCHAR sCapsStatus[] = TEXT("Caps"); // Caps or A
// const int nCapsLen = sizeof(sCapsStatus) / sizeof(TCHAR);
// TextOut(dc,x+BUTTONCX,y+2,"Caps",4); // sCapsStatus,nCapsLen - 1);
// const TCHAR sCapsStatus[] = TEXT("Caps"); // Caps or A
// const int nCapsLen = sizeof(sCapsStatus) / sizeof(TCHAR);
// TextOut(dc,x+BUTTONCX,y+2,"Caps",4); // sCapsStatus,nCapsLen - 1);
TextOut(dc,x+BUTTONCX,y+2,TEXT("A"),1); // NB. Caps Lock indicator is already flush right!
TextOut(dc,x+BUTTONCX,y+2,TEXT("A"),1); // NB. Caps Lock indicator is already flush right!
}
SetTextAlign(dc,TA_CENTER | TA_TOP);
SetTextColor(dc,(g_nAppMode == MODE_PAUSED || g_nAppMode == MODE_STEPPING
? RGB(255,255,255)
: RGB( 0, 0, 0)));
TextOut(dc,x+BUTTONCX/2,y+13,(g_nAppMode == MODE_PAUSED
? TITLE_PAUSED
: TITLE_STEPPING) ,8);
}
SetTextAlign(dc,TA_CENTER | TA_TOP);
SetTextColor(dc,(g_nAppMode == MODE_PAUSED || g_nAppMode == MODE_STEPPING
? RGB(255,255,255)
: RGB( 0, 0, 0)));
TextOut(dc,x+BUTTONCX/2,y+13,(g_nAppMode == MODE_PAUSED
? TITLE_PAUSED
: TITLE_STEPPING) ,8);
}
else // g_bIsFullScreen
else // !g_bIsFullScreen
{
if (drawflags & DRAW_BACKGROUND)
{
+4 -1
View File
@@ -38,7 +38,6 @@
// Win32
extern HWND g_hFrameWindow;
extern BOOL g_bIsFullScreen;
extern int g_nViewportCX;
extern int g_nViewportCY;
extern BOOL g_bConfirmReboot; // saved PageConfig REGSAVE
@@ -69,6 +68,10 @@
void FrameUpdateApple2Type(void);
bool GetBestDisplayResolutionForFullScreen(UINT& bestWidth, UINT& bestHeight, UINT userSpecifiedHeight=0);
bool IsFullScreen(void);
bool GetFullScreenShowSubunitStatus(void);
void SetFullScreenShowSubunitStatus(bool bShow);
void FrameDrawDiskLEDS( HDC hdc );
void FrameDrawDiskStatus( HDC hdc );
+5 -4
View File
@@ -444,7 +444,7 @@ void VideoDisplayLogo ()
nLogoX = (g_nViewportCX - scale*bm.bmWidth )/2;
nLogoY = (g_nViewportCY - scale*bm.bmHeight)/2;
if( g_bIsFullScreen )
if( IsFullScreen() )
{
#if 0
// Draw Logo at top of screen so when the Apple display is refreshed it will automagically clear it
@@ -455,6 +455,7 @@ void VideoDisplayLogo ()
nLogoY += GetFullScreenOffsetY();
#endif
}
VideoDrawLogoBitmap( hFrameDC, nLogoX, nLogoY, bm.bmWidth, bm.bmHeight, scale );
}
}
@@ -666,8 +667,8 @@ void VideoRefreshScreen ( uint32_t uRedrawWholeScreenVideoMode /* =0*/, bool bRe
#define H g_nViewportCY
#else // Stretch
// Stretch - doesn't preserve 1:1 aspect ratio
#define W g_bIsFullScreen ? g_nDDFullScreenW : g_nViewportCX
#define H g_bIsFullScreen ? g_nDDFullScreenH : g_nViewportCY
#define W IsFullScreen() ? g_nDDFullScreenW : g_nViewportCX
#define H IsFullScreen() ? g_nDDFullScreenH : g_nViewportCY
#endif
if (hFrameDC)
@@ -676,7 +677,7 @@ void VideoRefreshScreen ( uint32_t uRedrawWholeScreenVideoMode /* =0*/, bool bRe
int xDst = 0;
int yDst = 0;
if (g_bIsFullScreen)
if ( IsFullScreen() )
{
// Why the need to set the mid-position here, but not for (full-screen) LOGO or DEBUG modes?
xDst = (g_nDDFullScreenW-W)/2 - VIEWPORTX*2;