Files
Work/m68hc11/OPENDIR.CPP
2024-08-07 09:16:27 -04:00

185 lines
4.4 KiB
C++

#include <m68hc11/opendir.hpp>
#include <common/guiwnd.hpp>
#include <common/diskinfo.hpp>
OpenDirectory::OpenDirectory(void)
{
}
OpenDirectory::~OpenDirectory()
{
}
bool OpenDirectory::getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory)
{
DiskInfo diskInfo;
String strCurrentDirectory;
if(strInitialDirectory.isNull())diskInfo.getCurrentDirectory(strCurrentDirectory);
else strCurrentDirectory=strInitialDirectory;
owner(parentWindow);
instance(parentWindow.processInstance());
filter("..;.");
filterPattern("..;.");
fileName("");
fileTitle("");
initialDirectory(strCurrentDirectory);
title(titleString);
creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST|OpenDialog::ENABLEHOOK);
OpenDialog::hookProc((LPOFNHOOKPROC)getHookAddress());
mLastFolderChange=String("");
if(!getOpenFileName())return false;
strDirectory=mLastFolderChange;
return true;
}
OpenDirectory::OpenDirectory(const OpenDirectory &someOpenDirectory)
{ // private implementation
*this=someOpenDirectory;
}
OpenDirectory &OpenDirectory::operator=(const OpenDirectory &/*someOpenDirectory*/)
{ // private implementation
return *this;
}
UINT OpenDirectory::hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam)
{
UINT returnCode(false);
switch(uiMsg)
{
case WM_NOTIFY :
{
LPOFNOTIFY pNotify=(LPOFNOTIFY)lParam;
switch(pNotify->hdr.code)
{
case CDN_INITDONE :
::EnableWindow(::GetDlgItem(getParent(),FileNameEditControlID),false);
returnCode=handleInitDone();
break;
case CDN_SELCHANGE :
returnCode=handleSelChange();
break;
case CDN_FOLDERCHANGE :
returnCode=handleFolderChange();
break;
case CDN_SHAREVIOLATION :
returnCode=handleShareViolation();
break;
case CDN_HELP :
returnCode=handleHelp();
break;
case CDN_FILEOK :
returnCode=handleFileOk();
break;
case CDN_TYPECHANGE :
returnCode=handleTypeChange();
break;
}
}
}
return returnCode;
}
// helpers
bool OpenDirectory::getPathFileName(String &strPathFileName)
{
if(!getHandle())return false;
strPathFileName.reserve(MaxString);
return ::SendMessage(getParent(),CDM_GETFILEPATH,MaxString,(LPARAM)(LPSTR)strPathFileName);
}
bool OpenDirectory::getFileName(String &strFileName)
{
if(!getHandle())return false;
strFileName.reserve(MaxString);
return ::SendMessage(getParent(),CDM_GETSPEC,MaxString,(LPARAM)(LPSTR)strFileName);
}
bool OpenDirectory::getFolderPath(String &strFolderPath)
{
if(!getHandle())return false;
strFolderPath.reserve(MaxString);
return ::SendMessage(getParent(),CDM_GETFOLDERPATH,MaxString,(LPARAM)(LPSTR)strFolderPath);
}
bool OpenDirectory::hideControl(UINT controlID)
{
if(!getHandle())return false;
return ::SendMessage(getParent(),CDM_HIDECONTROL,controlID,0);
}
bool OpenDirectory::setControlText(UINT controlID,const String &strControlText)const
{
if(!getHandle())return false;
return ::SendMessage(getParent(),CDM_SETCONTROLTEXT,controlID,(LPARAM)(LPSTR)(String&)strControlText);
}
bool OpenDirectory::getControlText(UINT controlID,String &strControlText)const
{
if(!getHandle())return false;
strControlText.reserve(MaxString);
return ::SendMessage(getParent(),WM_GETTEXT,MaxString,(LPARAM)(char*)strControlText);
}
bool OpenDirectory::setDefaultExtension(const String &strDefaultExtension)
{
if(!getHandle()||strDefaultExtension.isNull())return false;
return ::SendMessage(getParent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefaultExtension);
}
// virtuals
UINT OpenDirectory::handleInitDone(void)
{
return false;
}
UINT OpenDirectory::handleSelChange(void)
{
String strFolderPath;
getFolderPath(strFolderPath);
setControlText(FileNameEditControlID,strFolderPath);
return false;
}
UINT OpenDirectory::handleFolderChange(void)
{
String strFolderPath;
getFolderPath(strFolderPath);
if(strFolderPath==mLastFolderChange)
{
setControlText(FileNameEditControlID,strFolderPath);
::EndDialog(getParent(),TRUE);
}
else
{
mLastFolderChange=strFolderPath;
setControlText(FileNameEditControlID,strFolderPath);
}
return false;
}
UINT OpenDirectory::handleShareViolation(void)
{
return false;
}
UINT OpenDirectory::handleFileOk(void)
{
return false;
}
UINT OpenDirectory::handleHelp(void)
{
return false;
}
UINT OpenDirectory::handleTypeChange(void)
{
return false;
}