Added a save file dialog.

This commit is contained in:
Pietro Gagliardi 2015-05-22 21:59:32 -04:00
parent ded1bf05de
commit 13a4e3f4e5
3 changed files with 50 additions and 0 deletions

View File

@ -14,6 +14,19 @@ static void openFile(uiButton *b, void *data)
}
}
static void saveFile(uiButton *b, void *data)
{
char *fn;
fn = uiSaveFile();
if (fn == NULL)
uiLabelSetText(uiLabel(data), "(cancelled)");
else {
uiLabelSetText(uiLabel(data), fn);
uiFreeText(fn);
}
}
uiBox *makePage5(void)
{
uiBox *page5;
@ -34,6 +47,7 @@ uiBox *makePage5(void)
uiBoxAppend(page5, uiControl(hbox), 0);
D("Open File", openFile);
D("Save File", saveFile);
return page5;
}

View File

@ -206,5 +206,6 @@ interface MenuItem {
};
func OpenFile(void) *char;
func SaveFile(void) *char;
};

View File

@ -39,3 +39,38 @@ char *uiOpenFile(void)
endDialogHelper(dialogHelper);
return toUTF8(wfilename);
}
char *uiSaveFile(void)
{
WCHAR wfilename[NFILENAME];
OPENFILENAMEW ofn;
HWND dialogHelper;
DWORD err;
dialogHelper = beginDialogHelper();
wfilename[0] = L'\0'; // required by GetOpenFileName() to indicate no previous filename
ZeroMemory(&ofn, sizeof (OPENFILENAMEW));
ofn.lStructSize = sizeof (OPENFILENAMEW);
ofn.hwndOwner = dialogHelper;
ofn.hInstance = hInstance;
ofn.lpstrFilter = NULL; // no filters
ofn.lpstrFile = wfilename;
ofn.nMaxFile = NFILENAME; // seems to include null terminator according to docs
ofn.lpstrInitialDir = NULL; // let system decide
ofn.lpstrTitle = NULL; // let system decide
// TODO OFN_SHAREAWARE?
// better question: TODO keep networking?
// TODO OFN_PATHMUSTEXIST?
ofn.Flags = OFN_EXPLORER | OFN_FORCESHOWHIDDEN | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_NOCHANGEDIR | OFN_NODEREFERENCELINKS | OFN_NOTESTFILECREATE | OFN_OVERWRITEPROMPT;
if (GetSaveFileNameW(&ofn) == FALSE) {
err = CommDlgExtendedError();
if (err != 0)
// TODO
complain("error running open file dialog", err);
// otherwise user cancelled
endDialogHelper(dialogHelper);
return NULL;
}
endDialogHelper(dialogHelper);
return toUTF8(wfilename);
}