Enhance Save file dialog

Make file extensions shorter in the file extension list for Save file dialog, so it displays more nicely while user clicking the drop down commbobox.
This commit is contained in:
Don HO 2020-05-30 16:50:59 +02:00
parent a8bde7fdaf
commit d4124108bc
No known key found for this signature in database
GPG Key ID: 6C429F1D8D84F46E
2 changed files with 15 additions and 8 deletions

View File

@ -583,8 +583,8 @@ private:
int getLangFromMenuName(const TCHAR * langName); int getLangFromMenuName(const TCHAR * langName);
generic_string getLangFromMenu(const Buffer * buf); generic_string getLangFromMenu(const Buffer * buf);
generic_string exts2Filters(const generic_string& exts) const; generic_string exts2Filters(const generic_string& exts, int maxExtsLen = -1) const; // maxExtsLen default value -1 makes no limit of whole exts length
int setFileOpenSaveDlgFilters(FileDialog & fDlg, int langType = -1); int setFileOpenSaveDlgFilters(FileDialog & fDlg, bool showAllExt, int langType = -1); // showAllExt should be true if it's used for open file dialog - all set exts should be used for filtering files
Style * getStyleFromName(const TCHAR *styleName); Style * getStyleFromName(const TCHAR *styleName);
bool dumpFiles(const TCHAR * outdir, const TCHAR * fileprefix = TEXT("")); //helper func bool dumpFiles(const TCHAR * outdir, const TCHAR * fileprefix = TEXT("")); //helper func
void drawTabbarColoursFromStylerArray(); void drawTabbarColoursFromStylerArray();

View File

@ -739,7 +739,7 @@ void Notepad_plus::doClose(BufferID id, int whichOne, bool doDeleteBackup)
return; return;
} }
generic_string Notepad_plus::exts2Filters(const generic_string& exts) const generic_string Notepad_plus::exts2Filters(const generic_string& exts, int maxExtsLen) const
{ {
const TCHAR *extStr = exts.c_str(); const TCHAR *extStr = exts.c_str();
TCHAR aExt[MAX_PATH]; TCHAR aExt[MAX_PATH];
@ -747,6 +747,7 @@ generic_string Notepad_plus::exts2Filters(const generic_string& exts) const
int j = 0; int j = 0;
bool stop = false; bool stop = false;
for (size_t i = 0, len = exts.length(); i < len && j < MAX_PATH - 1; ++i) for (size_t i = 0, len = exts.length(); i < len && j < MAX_PATH - 1; ++i)
{ {
if (extStr[i] == ' ') if (extStr[i] == ' ')
@ -763,6 +764,12 @@ generic_string Notepad_plus::exts2Filters(const generic_string& exts) const
filters += TEXT(";"); filters += TEXT(";");
} }
j = 0; j = 0;
if (maxExtsLen != -1 && i >= maxExtsLen)
{
filters += TEXT(" ... ");
break;
}
} }
} }
else else
@ -789,7 +796,7 @@ generic_string Notepad_plus::exts2Filters(const generic_string& exts) const
return filters; return filters;
} }
int Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg, int langType) int Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg, bool showAllExt, int langType)
{ {
NppParameters& nppParam = NppParameters::getInstance(); NppParameters& nppParam = NppParameters::getInstance();
NppGUI & nppGUI = (NppGUI & )nppParam.getNppGUI(); NppGUI & nppGUI = (NppGUI & )nppParam.getNppGUI();
@ -835,7 +842,7 @@ int Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg, int langType)
list += userList; list += userList;
} }
generic_string stringFilters = exts2Filters(list); generic_string stringFilters = exts2Filters(list, showAllExt ? -1 : 40);
const TCHAR *filters = stringFilters.c_str(); const TCHAR *filters = stringFilters.c_str();
if (filters[0]) if (filters[0])
{ {
@ -1583,7 +1590,7 @@ bool Notepad_plus::fileSaveAs(BufferID id, bool isSaveCopy)
FileDialog fDlg(_pPublicInterface->getHSelf(), _pPublicInterface->getHinst()); FileDialog fDlg(_pPublicInterface->getHSelf(), _pPublicInterface->getHinst());
fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL); fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL);
int langTypeIndex = setFileOpenSaveDlgFilters(fDlg, buf->getLangType()); int langTypeIndex = setFileOpenSaveDlgFilters(fDlg, false, buf->getLangType());
fDlg.setDefFileName(buf->getFileName()); fDlg.setDefFileName(buf->getFileName());
fDlg.setExtIndex(langTypeIndex+1); // +1 for "All types" fDlg.setExtIndex(langTypeIndex+1); // +1 for "All types"
@ -1649,7 +1656,7 @@ bool Notepad_plus::fileRename(BufferID id)
FileDialog fDlg(_pPublicInterface->getHSelf(), _pPublicInterface->getHinst()); FileDialog fDlg(_pPublicInterface->getHSelf(), _pPublicInterface->getHinst());
fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL); fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL);
setFileOpenSaveDlgFilters(fDlg); setFileOpenSaveDlgFilters(fDlg, false);
fDlg.setDefFileName(buf->getFileName()); fDlg.setDefFileName(buf->getFileName());
TCHAR *pfn = fDlg.doSaveDlg(); TCHAR *pfn = fDlg.doSaveDlg();
@ -1759,7 +1766,7 @@ void Notepad_plus::fileOpen()
FileDialog fDlg(_pPublicInterface->getHSelf(), _pPublicInterface->getHinst()); FileDialog fDlg(_pPublicInterface->getHSelf(), _pPublicInterface->getHinst());
fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL); fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL);
setFileOpenSaveDlgFilters(fDlg); setFileOpenSaveDlgFilters(fDlg, true);
BufferID lastOpened = BUFFER_INVALID; BufferID lastOpened = BUFFER_INVALID;
if (stringVector *pfns = fDlg.doOpenMultiFilesDlg()) if (stringVector *pfns = fDlg.doOpenMultiFilesDlg())