Files
Work/common/OPNDLGEX.CPP
2024-08-07 09:09:36 -04:00

220 lines
6.4 KiB
C++

#include <common/opndlgex.hpp>
#include <common/notify.hpp>
#include <common/array.hpp>
CustomOpenDialog::CustomOpenDialog(void)
{
mInitHandler.setCallback(this,&CustomOpenDialog::initHandler);
mCommandHandler.setCallback(this,&CustomOpenDialog::commandHandler);
mNotifyHandler.setCallback(this,&CustomOpenDialog::notifyHandler);
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::NotifyHandler,&mNotifyHandler);
}
CustomOpenDialog::CustomOpenDialog(const CustomOpenDialog &someCustomOpenDialog)
{ // private implementation
*this=someCustomOpenDialog;
}
CustomOpenDialog::~CustomOpenDialog()
{
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::NotifyHandler,&mNotifyHandler);
}
CustomOpenDialog &CustomOpenDialog::operator=(const CustomOpenDialog &someCustomOpenDialog)
{ // private implementation
return *this;
}
const String &CustomOpenDialog::openFileName(void)
{
return mOpenFileNameString;
}
void CustomOpenDialog::setFilterPattern(const String &strFilterPattern)
{
mFilterPatternString=strFilterPattern;
}
void CustomOpenDialog::setTitle(const String &strTitle)
{
mTitleString=strTitle;
}
void CustomOpenDialog::setFileTitle(const String &strFileTitle)
{
mFileTitleString=strFileTitle;
}
BOOL CustomOpenDialog::perform(GUIWindow &parentWindow,const String &strTemplateName)
{
String filterString;
if(strTemplateName.isNull())return FALSE;
if(mFilterPatternString.isNull()||mTitleString.isNull())return FALSE;
filterString=mFilterPatternString.betweenString('.',0);
mOpenDialog.instance(parentWindow.processInstance());
mOpenDialog.templateName(strTemplateName);
mOpenDialog.filter(filterString);
mOpenDialog.filterPattern(mFilterPatternString);
if(mFileTitleString.isNull())mOpenDialog.fileName(mFilterPatternString);
else mOpenDialog.fileName(mFileTitleString);
mOpenDialog.title(mTitleString);
mOpenDialog.fileTitle(mTitleString);
mOpenDialog.creationFlags(OpenDialog::Flags(OpenDialog::EXPLORER|OpenDialog::PATHMUSTEXIST|OpenDialog::ENABLEHOOK|OpenDialog::ENABLETEMPLATE));
mOpenDialog.hookProc((LPOFNHOOKPROC)&DWindow::OFHookProc);
mOpenDialog.customData((DWORD)(GUIWindow*)(DWindow*)this);
mOpenDialog.owner(parentWindow);
if(!mOpenDialog.getOpenFileName())return FALSE;
mOpenFileNameString=mOpenDialog.fileName();
return TRUE;
}
CallbackData::ReturnType CustomOpenDialog::commandHandler(CallbackData &someCallbackData)
{
return handleCommand(someCallbackData);
}
CallbackData::ReturnType CustomOpenDialog::initHandler(CallbackData &someCallbackData)
{
return handleInit(someCallbackData);
}
CallbackData::ReturnType CustomOpenDialog::notifyHandler(CallbackData &someCallbackData)
{
NotifyMessageHeader notifyMessageHeader;
OFNOTIFY *pOFNOTIFY=(OFNOTIFY*)someCallbackData.lParam();
if(!pOFNOTIFY)return FALSE;
notifyMessageHeader=pOFNOTIFY->hdr;
switch(notifyMessageHeader.code())
{
case CDN_FILEOK :
if(handleFileOk(notifyMessageHeader)){::SetWindowLong(*this,DWL_MSGRESULT,TRUE);return TRUE;}
return FALSE;
case CDN_FOLDERCHANGE :
return handleFolderChange(notifyMessageHeader);
case CDN_HELP :
return handleHelp(notifyMessageHeader);
case CDN_INITDONE :
return handleInitDone(notifyMessageHeader);
case CDN_SELCHANGE :
return handleSelChange(notifyMessageHeader);
case CDN_SHAREVIOLATION :
return handleShareViolation(notifyMessageHeader);
case CDN_TYPECHANGE :
return handleTypeChange(notifyMessageHeader);
}
return FALSE;
}
BOOL CustomOpenDialog::getFilePath(String &strFilePath)const
{
String svFilePath;
if(!isValid())return FALSE;
if(0>GUIWindow::sendMessage(parent(),CDM_GETFILEPATH,String::MaxString,(LPARAM)(LPSTR)svFilePath))return FALSE;
strFilePath=svFilePath;
return TRUE;
}
BOOL CustomOpenDialog::setDefaultExtension(const String &strDefExt)const
{
if(!isValid()||strDefExt.isNull())return FALSE;
GUIWindow::sendMessage(parent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefExt);
return TRUE;
}
BOOL CustomOpenDialog::getFolderIDList(Array<BYTE> &arrayList)const
{
DWORD requiredBytes;
if(!isValid())return FALSE;
requiredBytes=GUIWindow::sendMessage(parent(),CDM_GETFOLDERIDLIST,0,0L);
arrayList.size(requiredBytes);
return arrayList.size()==GUIWindow::sendMessage(parent(),CDM_GETFOLDERIDLIST,requiredBytes,(LPARAM)(LPSTR)&arrayList[0]);
}
BOOL CustomOpenDialog::getFolderPath(String &strFolderPath)const
{
String svFolderPath;
if(!isValid())return FALSE;
if(0>GUIWindow::sendMessage(parent(),CDM_GETFOLDERPATH,String::MaxString,(LPARAM)(LPSTR)svFolderPath))return FALSE;
strFolderPath=svFolderPath;
return TRUE;
}
BOOL CustomOpenDialog::getSpec(String &strFileSpec)const
{
String svFileSpec;
if(!isValid())return FALSE;
if(0>GUIWindow::sendMessage(parent(),CDM_GETSPEC,String::MaxString,(LPARAM)(LPSTR)svFileSpec))return FALSE;
strFileSpec=svFileSpec;
return TRUE;
}
BOOL CustomOpenDialog::hideControl(UINT controlID)const
{
if(!isValid())return FALSE;
GUIWindow::sendMessage(parent(),CDM_HIDECONTROL,(WPARAM)controlID,0L);
return TRUE;
}
BOOL CustomOpenDialog::setControlText(UINT controlID,const String &strControlText)const
{
if(!isValid()||strControlText.isNull())return FALSE;
GUIWindow::sendMessage(parent(),CDM_SETCONTROLTEXT,(WPARAM)controlID,(LPARAM)(LPSTR)(String&)strControlText);
return TRUE;
}
// **** virtuals
BOOL CustomOpenDialog::handleFileOk(const NotifyMessageHeader &/*notifyMessageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleFolderChange(const NotifyMessageHeader &/*notifyMessageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleHelp(const NotifyMessageHeader &/*notifyMessageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleInitDone(const NotifyMessageHeader &/*notifyMesageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleSelChange(const NotifyMessageHeader &/*notifyMessageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleShareViolation(const NotifyMessageHeader &/*notifyMessageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleTypeChange(const NotifyMessageHeader &/*notifyMessageHeader*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleCommand(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
BOOL CustomOpenDialog::handleInit(CallbackData &/*someCallbackData*/)
{
return TRUE;
}