ciderpress/mdc/Main.h
Andy McFadden b2cd857031 File selection dialog update, part 1
This adds a replacement for the SelectFilesDialog class.  It has
been updated to use Explorer-style dialogs, which are a bit nicer
than the old-style dialogs.  Hopefully this will eliminate some of the
brain damage, like the disappearing Accept button.

This change only updates MDC.  A second change will update the main
app and remove the old code.

Also, updated the MDC version to 3.0.0, and changed the web site
linked in the Help menu from faddensoft.com to a2ciderpress.com.
2014-12-02 17:39:56 -08:00

159 lines
4.2 KiB
C++

/*
* CiderPress
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
* See the file LICENSE for distribution terms.
*/
/*
* Main frame window declarations.
*/
#ifndef MDC_MAIN_H
#define MDC_MAIN_H
#include "../diskimg/DiskImg.h"
#include "../nufxlib/NufxLib.h"
using namespace DiskImgLib;
struct Win32dirent;
struct ScanOpts;
typedef enum RecordKind {
kRecordKindUnknown = 0,
kRecordKindDisk,
kRecordKindFile,
kRecordKindForkedFile,
kRecordKindDirectory,
kRecordKindVolumeDir,
} RecordKind;
/*
* The main UI window.
*/
class MainWindow : public CFrameWnd {
public:
/*
* MainWindow constructor. Creates the main window and sets
* its properties.
*/
MainWindow(void);
/*
* MainWindow destructor. Close the archive if one is open, but don't try
* to shut down any controls in child windows. By this point, Windows has
* already snuffed them.
*/
~MainWindow(void);
private:
afx_msg void OnFileScan(void);
afx_msg void OnFileExit(void);
afx_msg void OnHelpWebSite(void);
afx_msg void OnHelpAbout(void);
/*
* Allow events to flow through the message queue whenever the
* progress meter gets updated. This will allow us to redraw with
* reasonable frequency.
*
* Calling this can result in other code being called, such as Windows
* message handlers, which can lead to reentrancy problems. Make sure
* you're adequately semaphored before calling here.
*
* Returns TRUE if all is well, FALSE if we're trying to quit.
*/
BOOL PeekAndPump(void);
/*
* Handle a debug message from the DiskImg library.
*/
static void DebugMsgHandler(const char* file, int line,
const char* msg);
static NuResult NufxErrorMsgHandler(NuArchive* /*pArchive*/,
void* vErrorMessage);
/*
* Prompts the user to select the input set and output file, then starts
* the scan.
*/
void ScanFiles(void);
/*
* Prepare a directory for reading.
*
* Allocates a Win32dirent struct that must be freed by the caller.
*/
Win32dirent* OpenDir(const WCHAR* name);
/*
* Get an entry from an open directory.
*
* Returns a NULL pointer after the last entry has been read.
*/
Win32dirent* ReadDir(Win32dirent* dir);
/*
* Close a directory.
*/
void CloseDir(Win32dirent* dir);
/*
* Process a file or directory. These are expected to be names of files in
* the current directory.
*
* Returns 0 on success, nonzero on error with a message in "*pErrMsg".
*/
int Process(const WCHAR* pathname, ScanOpts* pScanOpts,
CString* pErrMsg);
/*
* Win32 recursive directory descent. Scan the contents of a directory.
* If a subdirectory is found, follow it; otherwise, call Win32AddFile to
* add the file.
*/
int ProcessDirectory(const WCHAR* dirName, ScanOpts* pScanOpts,
CString* pErrMsg);
/*
* Open a disk image and dump the contents.
*
* Returns 0 on success, nonzero on failure.
*/
int ScanDiskImage(const WCHAR* pathName, ScanOpts* pScanOpts);
/*
* Analyze a file's characteristics.
*/
void AnalyzeFile(const A2File* pFile, RecordKind* pRecordKind,
LONGLONG* pTotalLen, LONGLONG* pTotalCompLen);
/*
* Determine whether the access bits on the record make it a read-only
* file or not.
*
* Uses a simplified view of the access flags.
*/
bool IsRecordReadOnly(int access);
/*
* Return a pointer to the three-letter representation of the file type name.
*
* Note to self: code down below tests first char for '?'.
*/
static const char* GetFileTypeString(unsigned long fileType);
/*
* Load the contents of a DiskFS.
*
* Recursively handle sub-volumes.
*/
int LoadDiskFSContents(DiskFS* pDiskFS, const char* volName,
ScanOpts* pScanOpts);
bool fCancelFlag;
//int fTitleAnimation;
DECLARE_MESSAGE_MAP()
};
#endif /*MDC_MAIN_H*/