📄 dlgoptions.c
字号:
// Description:
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW: http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//
#include "main.h"
#include "dlgOptions.h"
#include "FreeOTFEDebug.h"
#include "FreeOTFElib.h"
#include "FreeOTFEGUIlib.h"
#include "FreeOTFE4PDAlib.h"
#include "FreeOTFE4PDAGUIlib.h"
#include "DriverInterface.h"
#include "DriverInterfaceTwo.h"
#include "DriverInterfaceCommon.h"
#include "resource.h"
#include "SDUGeneral.h"
#include <stdio.h> // Required for _snwprintf_s
#include <winuser.h> // Required for IDOK, etc
#include <Commdlg.h> // Required from OPENFILENAME
#include <aygshell.h> // Required for SH... functions/definitions/etc
#pragma comment(lib, "aygshell") // Link in aygshell.lib
// File association "Open" command
#define FILE_ASSOC_OPEN TEXT("\"%s\" /mount /volume \"%%1\" /freeotfe")
// Local to this file...
HWND G_dlgOptions_MenuBar = NULL;
BOOL G_dlgOptions_FileExtnAssociated = FALSE;
// =========================================================================
// Forward declarations...
BOOL CALLBACK dlgOptions_Proc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
BOOL _dlgOptions_CheckFileAssociationPresent();
// =========================================================================
void DisplayDlgOptions(HWND hWnd)
{
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_DisplaydlgOptions\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Displaying options dialog\n")));
DialogBox(
G_hInstance,
MAKEINTRESOURCE(IDD_OPTIONS),
hWnd,
(DLGPROC)dlgOptions_Proc
);
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_DisplaydlgOptions\n")));
}
// =========================================================================
void _dlgOptions_EnableDisableControls(HWND hDlg)
{
BOOL specifyMntPnt;
specifyMntPnt = (IsDlgButtonChecked(
hDlg,
IDC_RADIO_MNTPNT_DEFAULT
) == BST_CHECKED);
SetControlEnabled(hDlg, IDC_STATIC_MOUNTPOINT, specifyMntPnt);
SetControlEnabled(hDlg, IDC_EDIT_MOUNTPOINT, specifyMntPnt);
}
// =========================================================================
BOOL CALLBACK dlgOptions_HandleMsg_WM_INITDIALOG(HWND hDlg)
{
SHINITDLGINFO shidi;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgOptions_HandleMsg_WM_INITDIALOG\n")));
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = (
SHIDIF_DONEBUTTON |
SHIDIF_SIPDOWN |
SHIDIF_SIZEDLGFULLSCREEN
);
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
G_dlgOptions_MenuBar = SetupMenu(hDlg, IDR_MENU_DONECANCEL);
// Populate display...
// Mountpoint radiobutton...
if (G_Options->MntPntUseVolFilename == TRUE)
{
CheckDlgButton(
hDlg,
IDC_RADIO_MNTPNT_VOL,
BST_CHECKED
);
}
else
{
CheckDlgButton(
hDlg,
IDC_RADIO_MNTPNT_DEFAULT,
BST_CHECKED
);
}
SetDlgItemText(hDlg, IDC_EDIT_MOUNTPOINT, G_Options->MntPntDefault);
SetDlgItemText(hDlg, IDC_EDIT_EXPLORER, G_Options->ExplorerExe);
if (G_Options->ExploreOnMount == TRUE)
{
CheckDlgButton(
hDlg,
IDC_CHECK_EXPLOREONMOUNT,
BST_CHECKED
);
}
if (G_Options->LargeIcons == TRUE)
{
CheckDlgButton(
hDlg,
IDC_CHECK_LARGEICONS,
BST_CHECKED
);
}
if (G_Options->SaveSettings == TRUE)
{
CheckDlgButton(
hDlg,
IDC_CHECK_SAVESETTINGS,
BST_CHECKED
);
}
SetDlgItemText(hDlg, IDC_CHECK_ASSOCIATE, TEXT("Associate with \"."));
AppendStaticText_Simple(hDlg, IDC_CHECK_ASSOCIATE, VOL_FILE_EXTN);
AppendStaticText_Simple(hDlg, IDC_CHECK_ASSOCIATE, TEXT("\" files"));
G_dlgOptions_FileExtnAssociated = _dlgOptions_CheckFileAssociationPresent();
if (G_dlgOptions_FileExtnAssociated)
{
CheckDlgButton(
hDlg,
IDC_CHECK_ASSOCIATE,
BST_CHECKED
);
}
_dlgOptions_EnableDisableControls(hDlg);
SDUTextSetBold(hDlg, IDC_CHECK_SAVESETTINGS, TRUE);
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgOptions_HandleMsg_WM_INITDIALOG\n")));
return TRUE;
}
// =========================================================================
BOOL CALLBACK dlgOptions_HandleMsg_WM_CLOSE(HWND hWnd)
{
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgOptions_HandleMsg_WM_CLOSE\n")));
if (G_dlgOptions_MenuBar != NULL)
{
DestroyWindow(G_dlgOptions_MenuBar);
G_dlgOptions_MenuBar = NULL;
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgOptions_HandleMsg_WM_CLOSE\n")));
return TRUE;
}
// =========================================================================
BOOL
dlgOptions_GetUserInput(HWND hDlg, OPTIONS* Opts)
{
BOOL retval;
WCHAR tmpStr[FREEOTFE_MAX_FILENAME_LENGTH];
retval = TRUE;
Opts->MntPntUseVolFilename = (IsDlgButtonChecked(
hDlg,
IDC_RADIO_MNTPNT_VOL
) == BST_CHECKED);
SecZeroAndFreeWCHARMemory(Opts->MntPntDefault);
GetDlgItemText(
hDlg,
IDC_EDIT_MOUNTPOINT,
tmpStr,
sizeof(tmpStr)
);
// +1 to include terminating NULL
Opts->MntPntDefault = calloc(
(wcslen(tmpStr) + 1),
sizeof(*Opts->MntPntDefault)
);
if (Opts->MntPntDefault == NULL)
{
DEBUGOUTGUI(DEBUGLEV_ERROR, (TEXT("Unable to allocate memory for tmp opt string\n")));
retval = FALSE;
}
else
{
wcscpy(Opts->MntPntDefault, tmpStr);
}
SecZeroAndFreeWCHARMemory(Opts->ExplorerExe);
GetDlgItemText(
hDlg,
IDC_EDIT_EXPLORER,
tmpStr,
sizeof(tmpStr)
);
// +1 to include terminating NULL
Opts->ExplorerExe = calloc(
(wcslen(tmpStr) + 1),
sizeof(*Opts->ExplorerExe)
);
if (Opts->ExplorerExe == NULL)
{
DEBUGOUTGUI(DEBUGLEV_ERROR, (TEXT("Unable to allocate memory for tmp opt string\n")));
retval = FALSE;
}
else
{
wcscpy(Opts->ExplorerExe, tmpStr);
}
Opts->ExploreOnMount = (IsDlgButtonChecked(
hDlg,
IDC_CHECK_EXPLOREONMOUNT
) == BST_CHECKED);
Opts->LargeIcons = (IsDlgButtonChecked(
hDlg,
IDC_CHECK_LARGEICONS
) == BST_CHECKED);
Opts->SaveSettings = (IsDlgButtonChecked(
hDlg,
IDC_CHECK_SAVESETTINGS
) == BST_CHECKED);
return retval;
}
// =========================================================================
BOOL
dlgOptions_ValidateUserInput(HWND hDlg, OPTIONS* Opts)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -