185 lines
4.4 KiB
C++
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;
|
|
}
|