[NEW_FEATURE] Set extension automatically (according to set document language) in save as dialog.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@542 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2009-09-22 21:30:29 +00:00
parent ea2caf3d1d
commit dfaed129b5
4 changed files with 40 additions and 8 deletions

View File

@ -983,7 +983,7 @@ generic_string exts2Filters(generic_string exts) {
return filters; return filters;
}; };
void Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg) int Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg, int langType)
{ {
NppParameters *pNppParam = NppParameters::getInstance(); NppParameters *pNppParam = NppParameters::getInstance();
NppGUI & nppGUI = (NppGUI & )pNppParam->getNppGUI(); NppGUI & nppGUI = (NppGUI & )pNppParam->getNppGUI();
@ -991,6 +991,8 @@ void Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg)
int i = 0; int i = 0;
Lang *l = NppParameters::getInstance()->getLangFromIndex(i++); Lang *l = NppParameters::getInstance()->getLangFromIndex(i++);
int ltIndex = 0;
bool ltFound = false;
while (l) while (l)
{ {
LangType lid = l->getLangID(); LangType lid = l->getLangID();
@ -1032,10 +1034,27 @@ void Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg)
if (filters[0]) if (filters[0])
{ {
fDlg.setExtsFilter(getLangDesc(lid, true).c_str(), filters); fDlg.setExtsFilter(getLangDesc(lid, true).c_str(), filters);
//
// Get index of lang type to find
//
if (langType != -1 && !ltFound)
{
ltFound = langType == lid;
}
if (langType != -1 && !ltFound)
{
ltIndex++;
}
} }
} }
l = (NppParameters::getInstance())->getLangFromIndex(i++); l = (NppParameters::getInstance())->getLangFromIndex(i++);
} }
if (!ltFound)
return -1;
return ltIndex;
} }
void Notepad_plus::fileOpen() void Notepad_plus::fileOpen()
@ -1198,9 +1217,10 @@ bool Notepad_plus::fileSaveAs(BufferID id, bool isSaveCopy)
FileDialog fDlg(_hSelf, _hInst); FileDialog fDlg(_hSelf, _hInst);
fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL); fDlg.setExtFilter(TEXT("All types"), TEXT(".*"), NULL);
setFileOpenSaveDlgFilters(fDlg); int langTypeIndex = setFileOpenSaveDlgFilters(fDlg, buf->getLangType());
fDlg.setDefFileName(buf->getFileName()); fDlg.setDefFileName(buf->getFileName());
fDlg.setExtIndex(langTypeIndex+1); // +1 for "All types"
TCHAR *pfn = fDlg.doSaveDlg(); TCHAR *pfn = fDlg.doSaveDlg();
if (pfn) if (pfn)

View File

@ -557,7 +557,7 @@ private:
int getLangFromMenuName(const TCHAR * langName); int getLangFromMenuName(const TCHAR * langName);
generic_string getLangFromMenu(const Buffer * buf); generic_string getLangFromMenu(const Buffer * buf);
void setFileOpenSaveDlgFilters(FileDialog & fDlg); int setFileOpenSaveDlgFilters(FileDialog & fDlg, int langType = -1);
void markSelectedTextInc(bool enable); void markSelectedTextInc(bool enable);
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

View File

@ -24,7 +24,7 @@ FileDialog *FileDialog::staticThis = NULL;
//int FileDialog::_dialogFileBoxId = (NppParameters::getInstance())->getWinVersion() < WV_W2K?edt1:cmb13; //int FileDialog::_dialogFileBoxId = (NppParameters::getInstance())->getWinVersion() < WV_W2K?edt1:cmb13;
FileDialog::FileDialog(HWND hwnd, HINSTANCE hInst) FileDialog::FileDialog(HWND hwnd, HINSTANCE hInst)
: _nbCharFileExt(0), _nbExt(0), _fileExt(NULL) : _nbCharFileExt(0), _nbExt(0), _fileExt(NULL), _extTypeIndex(-1)
{ {
staticThis = this; staticThis = this;
//for (int i = 0 ; i < nbExtMax ; i++) //for (int i = 0 ; i < nbExtMax ; i++)
@ -374,13 +374,25 @@ BOOL APIENTRY FileDialog::run(HWND hWnd, UINT uMsg, WPARAM, LPARAM lParam)
LPNMHDR pNmhdr = (LPNMHDR)lParam; LPNMHDR pNmhdr = (LPNMHDR)lParam;
switch(pNmhdr->code) switch(pNmhdr->code)
{ {
case CDN_INITDONE :
{
if (_extTypeIndex == -1)
return TRUE;
HWND fnControl = ::GetDlgItem(::GetParent(hWnd), _dialogFileBoxId);
HWND typeControl = ::GetDlgItem(::GetParent(hWnd), cmb1);
::SendMessage(typeControl, CB_SETCURSEL, _extTypeIndex, 0);
currentExt = addExt(fnControl, typeControl);
return TRUE;
}
case CDN_TYPECHANGE : case CDN_TYPECHANGE :
{ {
HWND fnControl = ::GetDlgItem(::GetParent(hWnd), _dialogFileBoxId); HWND fnControl = ::GetDlgItem(::GetParent(hWnd), _dialogFileBoxId);
HWND typeControl = ::GetDlgItem(::GetParent(hWnd), cmb1); HWND typeControl = ::GetDlgItem(::GetParent(hWnd), cmb1);
currentExt = addExt(fnControl, typeControl); currentExt = addExt(fnControl, typeControl);
return TRUE; return TRUE;
//break;
} }
case CDN_FILEOK : case CDN_FILEOK :
@ -390,7 +402,6 @@ BOOL APIENTRY FileDialog::run(HWND hWnd, UINT uMsg, WPARAM, LPARAM lParam)
NppParameters *pNppParam = NppParameters::getInstance(); NppParameters *pNppParam = NppParameters::getInstance();
pNppParam->setFileSaveDlgFilterIndex(index); pNppParam->setFileSaveDlgFilterIndex(index);
return TRUE; return TRUE;
//break;
} }
default : default :

View File

@ -70,6 +70,7 @@ public:
stringVector * doOpenMultiFilesDlg(); stringVector * doOpenMultiFilesDlg();
TCHAR * doOpenSingleFileDlg(); TCHAR * doOpenSingleFileDlg();
bool isReadOnly() {return _ofn.Flags & OFN_READONLY;}; bool isReadOnly() {return _ofn.Flags & OFN_READONLY;};
void setExtIndex(int extTypeIndex) {_extTypeIndex = extTypeIndex;};
static int _dialogFileBoxId; static int _dialogFileBoxId;
protected : protected :
@ -90,7 +91,7 @@ private:
//TCHAR _extArray[nbExtMax][extLenMax]; //TCHAR _extArray[nbExtMax][extLenMax];
int _nbExt; int _nbExt;
int _extTypeIndex;
static FileDialog *staticThis; static FileDialog *staticThis;
}; };