Added API for compiler host to choose a different output path on output error
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7169 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
13121dacfe
commit
322c7ac6d2
6 changed files with 131 additions and 15 deletions
|
@ -497,9 +497,10 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
|||
case MakensisAPI::QUERYHOST: {
|
||||
if (MakensisAPI::QH_OUTPUTCHARSET == wParam) {
|
||||
const UINT reqcp = 1200; // We want UTF-16LE
|
||||
SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)(1+reqcp));
|
||||
return TRUE;
|
||||
return DlgRet(hwndDlg, (LONG_PTR)(1+reqcp));
|
||||
}
|
||||
else if (MakensisAPI::QH_SUPPORTEDVERSION == wParam)
|
||||
return DlgRet(hwndDlg, 0x03006000);
|
||||
return FALSE;
|
||||
}
|
||||
case WM_NOTIFY:
|
||||
|
@ -546,7 +547,8 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
|||
return TRUE;
|
||||
case WM_COPYDATA:
|
||||
{
|
||||
PCOPYDATASTRUCT cds = PCOPYDATASTRUCT(lParam);
|
||||
using namespace MakensisAPI;
|
||||
COPYDATASTRUCT *cds = (COPYDATASTRUCT*) lParam, cdsret;
|
||||
switch (cds->dwData) {
|
||||
case MakensisAPI::NOTIFY_SCRIPT:
|
||||
MemSafeFree(g_sdata.input_script);
|
||||
|
@ -564,6 +566,24 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
|||
g_sdata.output_exe = (TCHAR*) MemAlloc(cds->cbData * sizeof(TCHAR));
|
||||
lstrcpy(g_sdata.output_exe, (TCHAR *)cds->lpData);
|
||||
break;
|
||||
case MakensisAPI::PROMPT_FILEPATH:
|
||||
if ((((PROMPT_FILEPATH_DATA*)cds->lpData)->Platform & 7) == sizeof(TCHAR))
|
||||
{
|
||||
TCHAR buf[MAX_PATH];
|
||||
lstrcpyn(buf, FSPath::FindLastComponent(((PROMPT_FILEPATH_DATA*)cds->lpData)->Path), COUNTOF(buf));
|
||||
OPENFILENAME of = { sizeof(of) };
|
||||
of.hwndOwner = hwndDlg;
|
||||
of.lpstrFilter = _T("*.exe\0*.exe\0*\0*.*\0");
|
||||
of.lpstrFile = buf, of.nMaxFile = COUNTOF(buf);
|
||||
of.Flags = OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST|OFN_NOCHANGEDIR;
|
||||
if (GetSaveFileName(&of))
|
||||
{
|
||||
cdsret.dwData = cds->dwData, cdsret.cbData = (lstrlen(buf) + 1) * sizeof(TCHAR), cdsret.lpData = buf;
|
||||
SendMessage((HWND) wParam, WM_COPYDATA, (SIZE_T) hwndDlg, (SIZE_T) &cdsret);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -94,18 +94,26 @@ namespace MakensisAPI {
|
|||
extern const TCHAR* SigintEventNameFmt;
|
||||
extern const TCHAR* SigintEventNameLegacy;
|
||||
|
||||
enum notify_e {
|
||||
enum datatransfer_e {
|
||||
NOTIFY_SCRIPT,
|
||||
NOTIFY_WARNING,
|
||||
NOTIFY_ERROR,
|
||||
NOTIFY_OUTPUT
|
||||
NOTIFY_OUTPUT,
|
||||
PROMPT_FILEPATH
|
||||
};
|
||||
enum sndmsg_e {
|
||||
QUERYHOST = WM_APP
|
||||
};
|
||||
enum QUERYHOST_e {
|
||||
QH_OUTPUTCHARSET = 1
|
||||
QH_OUTPUTCHARSET = 1,
|
||||
QH_ENABLESTDERR,
|
||||
QH_SUPPORTEDVERSION
|
||||
};
|
||||
typedef struct {
|
||||
unsigned char Platform;
|
||||
unsigned char Reserved;
|
||||
TCHAR Path[1];
|
||||
} PROMPT_FILEPATH_DATA;
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -64,6 +64,7 @@ void LogMessage(HWND hwnd,const TCHAR *str);
|
|||
void ErrorMessage(HWND hwnd,const TCHAR *str);
|
||||
void CenterOnParent(HWND hwnd);
|
||||
void SetDialogFocus(HWND hDlg, HWND hCtl); // Use this and not SetFocus()!
|
||||
#define DlgRet(hDlg, val) ( SetWindowLongPtr((hDlg), DWLP_MSGRESULT, (val)) | TRUE )
|
||||
HWND GetComboEdit(HWND hCB);
|
||||
#define DisableItems(hwnd) EnableDisableItems(hwnd, 0)
|
||||
#define EnableItems(hwnd) EnableDisableItems(hwnd, 1)
|
||||
|
@ -90,6 +91,18 @@ void BuildMRUMenus();
|
|||
void LoadMRUFile(int position);
|
||||
void ClearMRUList();
|
||||
|
||||
struct FSPath {
|
||||
template<class T> static inline bool IsAgnosticSeparator(const T c) { return '\\' == c || '/' == c; }
|
||||
template<class T> static T* FindLastComponent(T*p) // Note: Returns "" for "dir\"
|
||||
{
|
||||
for (T *sep = 0, *start = p;; ++p)
|
||||
if (!*p)
|
||||
return sep ? ++sep : start;
|
||||
else if (IsAgnosticSeparator(*p))
|
||||
sep = p;
|
||||
}
|
||||
};
|
||||
|
||||
bool FileExists(const TCHAR *fname);
|
||||
bool OpenUrlInDefaultBrowser(HWND hwnd, LPCSTR Url);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue