From cd2cc80ede785b3d7959cff6422b90eda98c2b31 Mon Sep 17 00:00:00 2001 From: harrybharry Date: Wed, 23 Apr 2008 20:04:50 +0000 Subject: [PATCH] Add places bar in save as dialog git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@183 f5eea248-9336-0410-98b8-ebc06183d4e3 --- PowerEditor/src/Notepad_plus.cpp | 90 +----------------- PowerEditor/src/Notepad_plus.h | 2 +- PowerEditor/src/Parameters.cpp | 93 ++++++++++++++++++- PowerEditor/src/Parameters.h | 4 + .../src/ScitillaComponent/FindReplaceDlg.h | 2 +- .../src/WinControls/DockingWnd/Gripper.cpp | 2 +- .../OpenSaveFileDialog/FileDialog.cpp | 26 ++++-- .../OpenSaveFileDialog/FileDialog.h | 32 ++++++- .../src/WinControls/TaskList/TaskListDlg.h | 2 +- 9 files changed, 144 insertions(+), 109 deletions(-) diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index a27ddc3df..78e0d021b 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -65,7 +65,7 @@ Notepad_plus::Notepad_plus(): Window(), _mainWindowStatus(0), _pDocTab(NULL), _p { ZeroMemory(&_prevSelectedRange, sizeof(_prevSelectedRange)); - _winVersion = getWindowsVersion(); + _winVersion = (NppParameters::getInstance())->getWinVersion(); TiXmlDocument *nativeLangDocRoot = (NppParameters::getInstance())->getNativeLang(); if (nativeLangDocRoot) @@ -8285,91 +8285,3 @@ void Notepad_plus::markSelectedText() op._isWholeWord = true; _findReplaceDlg.markAll2(text2Find); } - -typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); - -winVer getWindowsVersion() -{ - OSVERSIONINFOEX osvi; - SYSTEM_INFO si; - PGNSI pGNSI; - BOOL bOsVersionInfoEx; - - ZeroMemory(&si, sizeof(SYSTEM_INFO)); - ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); - - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - - if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) - { - osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); - if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) - return WV_UNKNOWN; - } - - pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); - if(pGNSI != NULL) - pGNSI(&si); - else - GetSystemInfo(&si); - - switch (osvi.dwPlatformId) - { - case VER_PLATFORM_WIN32_NT: - { - if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) - { - return WV_VISTA; - } - - if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) - { - if (osvi.wProductType == VER_NT_WORKSTATION && - si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) - { - return WV_XPX64; - } - return WV_S2003; - } - - if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) - return WV_XP; - - if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) - return WV_W2K; - - if ( osvi.dwMajorVersion <= 4 ) - return WV_NT; - } - break; - - // Test for the Windows Me/98/95. - case VER_PLATFORM_WIN32_WINDOWS: - { - if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) - { - return WV_95; - } - - if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) - { - return WV_98; - } - - if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) - { - return WV_ME; - } - } - break; - - case VER_PLATFORM_WIN32s: - return WV_WIN32S; - - default : - return WV_UNKNOWN; - } - return WV_UNKNOWN; -} - - diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index 2b887ae39..dca3b42f4 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -65,7 +65,7 @@ const unsigned char TWO_VIEWS_MASK = 2; const int blockSize = 128 * 1024 + 4; struct TaskListInfo; static TiXmlNode * searchDlgNode(TiXmlNode *node, const char *dlgTagName); -static winVer getWindowsVersion(); + struct iconLocator { int listIndex; int iconIndex; diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index e4abbb28d..7dbe5cc10 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -315,6 +315,91 @@ ScintillaKeyDefinition scintKeyDefs[] = { //array of accelerator keys for all po // }; +typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); + +winVer getWindowsVersion() +{ + OSVERSIONINFOEX osvi; + SYSTEM_INFO si; + PGNSI pGNSI; + BOOL bOsVersionInfoEx; + + ZeroMemory(&si, sizeof(SYSTEM_INFO)); + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + + if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) + { + osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); + if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) + return WV_UNKNOWN; + } + + pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); + if(pGNSI != NULL) + pGNSI(&si); + else + GetSystemInfo(&si); + + switch (osvi.dwPlatformId) + { + case VER_PLATFORM_WIN32_NT: + { + if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) + { + return WV_VISTA; + } + + if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) + { + if (osvi.wProductType == VER_NT_WORKSTATION && + si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) + { + return WV_XPX64; + } + return WV_S2003; + } + + if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) + return WV_XP; + + if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) + return WV_W2K; + + if ( osvi.dwMajorVersion <= 4 ) + return WV_NT; + } + break; + + // Test for the Windows Me/98/95. + case VER_PLATFORM_WIN32_WINDOWS: + { + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) + { + return WV_95; + } + + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) + { + return WV_98; + } + + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) + { + return WV_ME; + } + } + break; + + case VER_PLATFORM_WIN32s: + return WV_WIN32S; + + default : + return WV_UNKNOWN; + } + return WV_UNKNOWN; +} NppParameters * NppParameters::_pSelf = new NppParameters; @@ -326,6 +411,9 @@ NppParameters::NppParameters() : _pXmlDoc(NULL),_pXmlUserDoc(NULL), _pXmlUserSty _transparentFuncAddr(NULL), _enableThemeDialogTextureFuncAddr(NULL),\ _isTaskListRBUTTONUP_Active(false), _fileSaveDlgFilterIndex(-1), _asNotepadStyle(false) { + //Get windows version + _winVersion = getWindowsVersion(); + // Prepare for default path char nppPath[MAX_PATH]; ::GetModuleFileName(NULL, nppPath, sizeof(nppPath)); @@ -4091,8 +4179,3 @@ void NppParameters::addScintillaModifiedIndex(int index) _scintillaModifiedKeyIndices.push_back(index); } } - - - - - diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index 7467e6a55..f9c9ca1d2 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -1071,6 +1071,8 @@ public: bool reloadPluginCmds() { return getPluginCmdsFromXmlTree(); } + + winVer getWinVersion() { return _winVersion; }; private: NppParameters(); ~NppParameters(); @@ -1141,6 +1143,8 @@ private: FindDlgTabTitiles _findDlgTabTitiles; bool _asNotepadStyle; + winVer _winVersion; + static int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam) { vector *pStrVect = (vector *)lParam; size_t vectSize = pStrVect->size(); diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h index 3dd9811b9..5a87a45d0 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h @@ -177,7 +177,7 @@ public : _line = new char[_maxNbCharAllocated + 3]; _uniCharLine = new char[(_maxNbCharAllocated + 3) * 2]; _uniFileName = new char[(_fileNameLenMax + 3) * 2]; - _winVer = (winVer)::SendMessage(_hParent, NPPM_GETWINDOWSVERSION, 0, 0); + _winVer = (NppParameters::getInstance())->getWinVersion(); //strcpy(_findAllResultStr, FIND_RESULT_DEFAULT_TITLE); }; ~FindReplaceDlg() { diff --git a/PowerEditor/src/WinControls/DockingWnd/Gripper.cpp b/PowerEditor/src/WinControls/DockingWnd/Gripper.cpp index fb0986b99..fd48adf67 100644 --- a/PowerEditor/src/WinControls/DockingWnd/Gripper.cpp +++ b/PowerEditor/src/WinControls/DockingWnd/Gripper.cpp @@ -273,7 +273,7 @@ void Gripper::create(void) ::MessageBox(NULL, str, "SetWindowsHookEx(MOUSE) failed", MB_OK | MB_ICONERROR); } - winVer winVersion = (winVer)::SendMessage(_hParent, NPPM_GETWINDOWSVERSION, 0, 0); + winVer winVersion = (NppParameters::getInstance())->getWinVersion(); if (winVersion < WV_VISTA) { hookKeyboard = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)hookProcKeyboard, _hInst, 0); diff --git a/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.cpp b/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.cpp index 23ffac240..723173ff2 100644 --- a/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.cpp +++ b/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.cpp @@ -19,17 +19,23 @@ FileDialog *FileDialog::staticThis = NULL; +int FileDialog::_dialogFileBoxId = (NppParameters::getInstance())->getWinVersion() < WV_W2K?edt1:cmb13; FileDialog::FileDialog(HWND hwnd, HINSTANCE hInst) : _nbCharFileExt(0), _nbExt(0) -{staticThis = this; +{ + staticThis = this; for (int i = 0 ; i < nbExtMax ; i++) _extArray[i][0] = '\0'; memset(_fileExt, 0x00, sizeof(_fileExt)); _fileName[0] = '\0'; - _ofn.lStructSize = sizeof(_ofn); + _winVersion = (NppParameters::getInstance())->getWinVersion(); + + _ofn.lStructSize = sizeof(_ofn); + if (_winVersion < WV_W2K) + _ofn.lStructSize = sizeof(OPENFILENAME); _ofn.hwndOwner = hwnd; _ofn.hInstance = hInst; _ofn.lpstrFilter = _fileExt; @@ -48,9 +54,9 @@ FileDialog::FileDialog(HWND hwnd, HINSTANCE hInst) _ofn.lpstrDefExt = NULL; // No default extension _ofn.lCustData = 0; _ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_LONGNAMES | DS_CENTER | OFN_HIDEREADONLY; - //_ofn.pvReserved = NULL; - //_ofn.dwReserved = 0; - //_ofn.FlagsEx = 0; + _ofn.pvReserved = NULL; + _ofn.dwReserved = 0; + _ofn.FlagsEx = 0; } // This function set and concatenate the filter into the list box of FileDialog. @@ -137,7 +143,7 @@ char * FileDialog::doOpenSingleFileDlg() char *fn = NULL; try { - fn = ::GetOpenFileName(&_ofn)?_fileName:NULL; + fn = ::GetOpenFileName((OPENFILENAME*)&_ofn)?_fileName:NULL; } catch(...) { ::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK); @@ -153,7 +159,7 @@ stringVector * FileDialog::doOpenMultiFilesDlg() _ofn.Flags |= OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT; - if (::GetOpenFileName(&_ofn)) + if (::GetOpenFileName((OPENFILENAME*)&_ofn)) { char fn[MAX_PATH]; char *pFn = _fileName + strlen(_fileName) + 1; @@ -195,7 +201,7 @@ char * FileDialog::doSaveDlg() char *fn = NULL; try { - fn = ::GetSaveFileName(&_ofn)?_fileName:NULL; + fn = ::GetSaveFileName((OPENFILENAME*)&_ofn)?_fileName:NULL; } catch(...) { ::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK); @@ -216,7 +222,7 @@ static BOOL CALLBACK fileDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM { case IDOK : { - HWND fnControl = ::GetDlgItem(hwnd, edt1); + HWND fnControl = ::GetDlgItem(hwnd, FileDialog::_dialogFileBoxId); char fn[256]; ::GetWindowText(fnControl, fn, sizeof(fn)); if (*fn == '\0') @@ -317,7 +323,7 @@ BOOL APIENTRY FileDialog::run(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { case CDN_TYPECHANGE : { - HWND fnControl = ::GetDlgItem(::GetParent(hWnd), edt1); + HWND fnControl = ::GetDlgItem(::GetParent(hWnd), _dialogFileBoxId); HWND typeControl = ::GetDlgItem(::GetParent(hWnd), cmb1); currentExt = addExt(fnControl, typeControl); return TRUE; diff --git a/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.h b/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.h index 63b675e2f..83762b7ad 100644 --- a/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.h +++ b/PowerEditor/src/WinControls/OpenSaveFileDialog/FileDialog.h @@ -36,6 +36,32 @@ typedef vector stringVector; //const bool styleOpen = true; //const bool styleSave = false; +struct OPENFILENAMENPP { + DWORD lStructSize; + HWND hwndOwner; + HINSTANCE hInstance; + LPCTSTR lpstrFilter; + LPTSTR lpstrCustomFilter; + DWORD nMaxCustFilter; + DWORD nFilterIndex; + LPTSTR lpstrFile; + DWORD nMaxFile; + LPTSTR lpstrFileTitle; + DWORD nMaxFileTitle; + LPCTSTR lpstrInitialDir; + LPCTSTR lpstrTitle; + DWORD Flags; + WORD nFileOffset; + WORD nFileExtension; + LPCTSTR lpstrDefExt; + LPARAM lCustData; + LPOFNHOOKPROC lpfnHook; + LPCTSTR lpTemplateName; + void * pvReserved; + DWORD dwReserved; + DWORD FlagsEx; +}; + static string changeExt(string fn, string ext) { @@ -100,6 +126,7 @@ public: char * doOpenSingleFileDlg(); bool isReadOnly() {return _ofn.Flags & OFN_READONLY;}; + static int _dialogFileBoxId; protected : static UINT APIENTRY OFNHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL APIENTRY run(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -111,7 +138,10 @@ private: int _nbCharFileExt; stringVector _fileNames; - OPENFILENAME _ofn; + + OPENFILENAMENPP _ofn; + winVer _winVersion; + char _extArray[nbExtMax][extLenMax]; int _nbExt; diff --git a/PowerEditor/src/WinControls/TaskList/TaskListDlg.h b/PowerEditor/src/WinControls/TaskList/TaskListDlg.h index aa807ed2b..3e1c13d40 100644 --- a/PowerEditor/src/WinControls/TaskList/TaskListDlg.h +++ b/PowerEditor/src/WinControls/TaskList/TaskListDlg.h @@ -112,7 +112,7 @@ protected : #ifndef WH_MOUSE_LL #define WH_MOUSE_LL 14 #endif - winVer ver = (winVer)::SendMessage(_hParent, NPPM_GETWINDOWSVERSION, 0, 0); + winVer ver = (NppParameters::getInstance())->getWinVersion(); _hHooker = ::SetWindowsHookEx(ver >= WV_W2K?WH_MOUSE_LL:WH_MOUSE, (HOOKPROC)hookProc, _hInst, 0); hook = _hHooker; return FALSE;