ciderpress/app/AddFilesDialog.cpp

203 lines
6.9 KiB
C++

/*
* CiderPress
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
* See the file LICENSE for distribution terms.
*/
/*
* Support for the "add files" dialog.
*/
#include "stdafx.h"
#include "AddFilesDialog.h"
#include "FileNameConv.h"
#include "HelpTopics.h"
#include "resource.h"
/*
* A lot like DoDataExchange, only different.
*
* We do some OnInitDialog-type stuff in here, because we're a subclass of
* SelectFilesDialog and don't really get to have one of those.
*
* Returns "true" if all is well, "false" if something failed. Usually a
* "false" indication occurs during saveAndValidate==true, and means that we
* shouldn't allow the dialog to close yet.
*/
bool
AddFilesDialog::MyDataExchange(bool saveAndValidate)
{
CWnd* pWnd;
if (saveAndValidate) {
if (GetDlgButtonCheck(this, IDC_ADDFILES_NOPRESERVE) == BST_CHECKED)
fTypePreservation = kPreserveNone;
else if (GetDlgButtonCheck(this, IDC_ADDFILES_PRESERVE) == BST_CHECKED)
fTypePreservation = kPreserveTypes;
else if (GetDlgButtonCheck(this, IDC_ADDFILES_PRESERVEPLUS) == BST_CHECKED)
fTypePreservation = kPreserveAndExtend;
else {
ASSERT(false);
fTypePreservation = kPreserveNone;
}
if (GetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLNONE) == BST_CHECKED)
fConvEOL = kConvEOLNone;
else if (GetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLTYPE) == BST_CHECKED)
fConvEOL = kConvEOLType;
else if (GetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLTEXT) == BST_CHECKED)
fConvEOL = kConvEOLAuto;
else if (GetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLALL) == BST_CHECKED)
fConvEOL = kConvEOLAll;
else {
ASSERT(false);
fConvEOL = kConvEOLNone;
}
fIncludeSubfolders =
(GetDlgButtonCheck(this, IDC_ADDFILES_INCLUDE_SUBFOLDERS) == BST_CHECKED);
fStripFolderNames =
(GetDlgButtonCheck(this, IDC_ADDFILES_STRIP_FOLDER) == BST_CHECKED);
fOverwriteExisting =
(GetDlgButtonCheck(this, IDC_ADDFILES_OVERWRITE) == BST_CHECKED);
pWnd = GetDlgItem(IDC_ADDFILES_PREFIX);
ASSERT(pWnd != nil);
pWnd->GetWindowText(fStoragePrefix);
if (!ValidateStoragePrefix())
return false;
return true;
} else {
SetDlgButtonCheck(this, IDC_ADDFILES_NOPRESERVE,
fTypePreservation == kPreserveNone);
SetDlgButtonCheck(this, IDC_ADDFILES_PRESERVE,
fTypePreservation == kPreserveTypes);
SetDlgButtonCheck(this, IDC_ADDFILES_PRESERVEPLUS,
fTypePreservation == kPreserveAndExtend);
SetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLNONE,
fConvEOL == kConvEOLNone);
SetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLTYPE,
fConvEOL == kConvEOLType);
SetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLTEXT,
fConvEOL == kConvEOLAuto);
SetDlgButtonCheck(this, IDC_ADDFILES_CONVEOLALL,
fConvEOL == kConvEOLAll);
SetDlgButtonCheck(this, IDC_ADDFILES_INCLUDE_SUBFOLDERS,
fIncludeSubfolders != FALSE);
SetDlgButtonCheck(this, IDC_ADDFILES_STRIP_FOLDER,
fStripFolderNames != FALSE);
SetDlgButtonCheck(this, IDC_ADDFILES_OVERWRITE,
fOverwriteExisting != FALSE);
pWnd = GetDlgItem(IDC_ADDFILES_PREFIX);
ASSERT(pWnd != nil);
pWnd->SetWindowText(fStoragePrefix);
if (!fStoragePrefixEnable)
pWnd->EnableWindow(FALSE);
if (!fStripFolderNamesEnable) {
::EnableControl(this, IDC_ADDFILES_STRIP_FOLDER, false);
}
if (!fConvEOLEnable) {
::EnableControl(this, IDC_ADDFILES_CONVEOLNONE, false);
::EnableControl(this, IDC_ADDFILES_CONVEOLTYPE, false);
::EnableControl(this, IDC_ADDFILES_CONVEOLTEXT, false);
::EnableControl(this, IDC_ADDFILES_CONVEOLALL, false);
}
return true;
}
}
/*
* Make sure the storage prefix they entered is valid.
*/
bool
AddFilesDialog::ValidateStoragePrefix(void)
{
if (fStoragePrefix.IsEmpty())
return true;
const char kFssep = PathProposal::kDefaultStoredFssep;
if (fStoragePrefix[0] == kFssep || fStoragePrefix.Right(1) == kFssep) {
CString errMsg;
errMsg.Format(L"The storage prefix may not start or end with '%c'.",
kFssep);
MessageBox(errMsg, m_ofn.lpstrTitle, MB_OK | MB_ICONWARNING);
return false;
}
return true;
}
/*
* Override base class version.
*/
UINT
AddFilesDialog::MyOnCommand(WPARAM wParam, LPARAM lParam)
{
switch (wParam) {
case IDHELP:
OnIDHelp();
return 1;
default:
return SelectFilesDialog::MyOnCommand(wParam, lParam);
}
}
/*
* Override base class version so we can move our stuff around.
*
* It's important that the base class be called last, because it calls
* Invalidate to redraw the dialog.
*/
void
AddFilesDialog::ShiftControls(int deltaX, int deltaY)
{
/*
* These only need to be here so that the initial move puts them
* where they belong. Once the dialog has been created, the
* CFileDialog will move things where they need to go.
*/
MoveControl(this, IDC_ADDFILES_STATIC1, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_NOPRESERVE, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_PRESERVE, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_PRESERVEPLUS, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_STATIC2, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_STRIP_FOLDER, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_INCLUDE_SUBFOLDERS, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_OVERWRITE, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_STATIC3, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_PREFIX, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_STATIC4, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_CONVEOLNONE, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_CONVEOLTYPE, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_CONVEOLTEXT, 0, deltaY, false);
MoveControl(this, IDC_ADDFILES_CONVEOLALL, 0, deltaY, false);
/*
* These actively move.
*/
MoveControl(this, IDHELP, deltaX, deltaY, false);
StretchControl(this, IDC_ADDFILES_PREFIX, deltaX, 0, false);
SelectFilesDialog::ShiftControls(deltaX, deltaY);
}
/*
* User pressed the "Help" button.
*/
void
AddFilesDialog::OnIDHelp(void)
{
CWnd* pWndMain = ::AfxGetMainWnd();
CWinApp* pAppMain = ::AfxGetApp();
::WinHelp(pWndMain->m_hWnd, pAppMain->m_pszHelpFilePath,
HELP_CONTEXT, HELP_TOPIC_ADD_FILES_DLG);
}