2012-04-15 09:50:22 +00:00
// This file is part of Notepad++ project
2020-04-04 21:03:18 +00:00
// Copyright (C)2020 Don HO <don.h@free.fr>
2009-04-24 23:34:47 +00:00
//
2012-04-15 09:50:22 +00:00
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
2009-04-24 23:34:47 +00:00
//
2012-04-15 09:50:22 +00:00
// Note that the GPL places important restrictions on "derived works", yet
2015-07-15 12:09:31 +00:00
// it does not provide a detailed definition of that term. To avoid
// misunderstandings, we consider an application to constitute a
2012-04-15 09:50:22 +00:00
// "derivative work" for the purpose of this license if it does any of the
2015-07-15 12:09:31 +00:00
// following:
2012-04-15 09:50:22 +00:00
// 1. Integrates source code from Notepad++.
// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable
// installer, such as those produced by InstallShield.
// 3. Links to a library or executes a program that does any of the above.
2009-04-24 23:34:47 +00:00
//
2012-04-15 09:50:22 +00:00
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
2009-04-24 23:34:47 +00:00
2016-11-11 17:11:19 +00:00
# pragma once
2009-09-04 00:10:01 +00:00
2009-04-24 23:34:47 +00:00
# include "ScintillaEditView.h"
# include "DocTabView.h"
# include "SplitterContainer.h"
# include "FindReplaceDlg.h"
# include "AboutDlg.h"
# include "RunDlg.h"
# include "StatusBar.h"
# include "lastRecentFileList.h"
# include "GoToLineDlg.h"
2011-05-19 21:19:05 +00:00
# include "FindCharsInRange.h"
2009-04-24 23:34:47 +00:00
# include "columnEditor.h"
# include "WordStyleDlg.h"
# include "trayIconControler.h"
# include "PluginsManager.h"
# include "preferenceDlg.h"
# include "WindowsDlg.h"
# include "RunMacroDlg.h"
# include "DockingManager.h"
2016-01-23 01:24:37 +00:00
# include "Processus.h"
2009-04-24 23:34:47 +00:00
# include "AutoCompletion.h"
# include "SmartHighlighter.h"
2009-09-04 00:10:01 +00:00
# include "ScintillaCtrls.h"
2009-12-13 23:54:02 +00:00
# include "lesDlgs.h"
2016-11-11 17:11:19 +00:00
# include "pluginsAdmin.h"
2018-02-28 01:31:22 +00:00
# include "localization.h"
# include "documentSnapshot.h"
# include "md5Dlgs.h"
2013-08-03 23:40:07 +00:00
# include <vector>
2015-06-30 00:02:13 +00:00
# include <iso646.h>
2011-05-19 21:19:05 +00:00
2010-03-05 00:15:06 +00:00
2009-04-24 23:34:47 +00:00
# define MENU 0x01
# define TOOLBAR 0x02
2010-02-21 18:17:54 +00:00
# define URL_REG_EXPR "[A-Za-z]+: //[A-Za-z0-9_\\-\\+~.:?&@=/%#,;\\{\\}\\(\\)\\[\\]\\|\\*\\!\\\\]+"
2010-02-13 01:12:17 +00:00
2009-04-24 23:34:47 +00:00
enum FileTransferMode {
TransferClone = 0x01 ,
TransferMove = 0x02
} ;
enum WindowStatus { //bitwise mask
WindowMainActive = 0x01 ,
WindowSubActive = 0x02 ,
WindowBothActive = 0x03 , //little helper shortcut
WindowUserActive = 0x04 ,
WindowMask = 0x07
} ;
2010-12-05 19:33:48 +00:00
enum trimOp {
lineHeader = 0 ,
lineTail = 1 ,
lineEol = 2
2009-04-24 23:34:47 +00:00
} ;
2010-01-29 23:52:47 +00:00
2012-08-25 19:23:16 +00:00
enum spaceTab {
tab2Space = 0 ,
space2TabLeading = 1 ,
space2TabAll = 2
} ;
2009-04-24 23:34:47 +00:00
struct TaskListInfo ;
2015-08-04 11:36:22 +00:00
struct VisibleGUIConf final
{
bool isPostIt = false ;
bool isFullScreen = false ;
2015-07-15 12:09:31 +00:00
2009-04-24 23:34:47 +00:00
//Used by both views
2015-08-04 11:36:22 +00:00
bool isMenuShown = true ;
2009-04-24 23:34:47 +00:00
//bool isToolbarShown; //toolbar forcefully hidden by hiding rebar
2015-08-04 11:36:22 +00:00
DWORD_PTR preStyle = ( WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN ) ;
2009-04-24 23:34:47 +00:00
//used by postit only
2015-08-04 11:36:22 +00:00
bool isTabbarShown = true ;
bool isAlwaysOnTop = false ;
bool isStatusbarShown = true ;
2009-04-24 23:34:47 +00:00
//used by fullscreen only
WINDOWPLACEMENT _winPlace ;
2015-08-04 11:36:22 +00:00
VisibleGUIConf ( )
2009-04-24 23:34:47 +00:00
{
2015-08-04 11:36:22 +00:00
memset ( & _winPlace , 0x0 , sizeof ( _winPlace ) ) ;
}
2009-04-24 23:34:47 +00:00
} ;
2018-03-10 10:30:55 +00:00
struct QuoteParams
{
enum Speed { slow = 0 , rapid , speedOfLight } ;
QuoteParams ( ) { } ;
QuoteParams ( const wchar_t * quoter , Speed speed , bool shouldBeTrolling , int encoding , LangType lang , const wchar_t * quote ) :
_quoter ( quoter ) , _speed ( speed ) , _shouldBeTrolling ( shouldBeTrolling ) , _encoding ( encoding ) , _lang ( lang ) , _quote ( quote ) { }
void reset ( ) {
_quoter = nullptr ;
_speed = rapid ;
_shouldBeTrolling = false ;
_encoding = SC_CP_UTF8 ;
_lang = L_TEXT ;
_quote = nullptr ;
} ;
const wchar_t * _quoter = nullptr ;
Speed _speed = rapid ;
bool _shouldBeTrolling = false ;
int _encoding = SC_CP_UTF8 ;
LangType _lang = L_TEXT ;
const wchar_t * _quote = nullptr ;
} ;
2009-04-24 23:34:47 +00:00
class FileDialog ;
2010-03-26 00:22:14 +00:00
class Notepad_plus_Window ;
2011-04-13 07:08:51 +00:00
class AnsiCharPanel ;
2011-05-19 21:19:05 +00:00
class ClipboardHistoryPanel ;
class VerticalFileSwitcher ;
2011-08-29 23:01:41 +00:00
class ProjectPanel ;
2012-01-30 00:00:50 +00:00
class DocumentMap ;
2012-11-24 20:14:52 +00:00
class FunctionListPanel ;
2016-01-23 01:24:37 +00:00
class FileBrowser ;
2018-03-10 10:30:55 +00:00
struct QuoteParams ;
2015-08-04 11:36:22 +00:00
class Notepad_plus final
2015-07-15 12:09:31 +00:00
{
2010-03-26 00:22:14 +00:00
friend class Notepad_plus_Window ;
2014-05-04 20:37:54 +00:00
friend class FileManager ;
2009-04-24 23:34:47 +00:00
public :
Notepad_plus ( ) ;
2015-08-04 11:36:22 +00:00
~ Notepad_plus ( ) ;
2010-03-26 00:22:14 +00:00
LRESULT init ( HWND hwnd ) ;
LRESULT process ( HWND hwnd , UINT Message , WPARAM wParam , LPARAM lParam ) ;
2010-02-13 01:12:17 +00:00
void killAllChildren ( ) ;
2009-04-24 23:34:47 +00:00
2010-03-26 00:22:14 +00:00
enum comment_mode { cm_comment , cm_uncomment , cm_toggle } ;
2009-04-24 23:34:47 +00:00
void setTitle ( ) ;
void getTaskListInfo ( TaskListInfo * tli ) ;
// For filtering the modeless Dialog message
2015-08-04 11:36:22 +00:00
//! \name File Operations
//@{
2009-04-24 23:34:47 +00:00
//The doXXX functions apply to a single buffer and dont need to worry about views, with the excpetion of doClose, since closing one view doesnt have to mean the document is gone
2018-05-31 13:32:44 +00:00
BufferID doOpen ( const generic_string & fileName , bool isRecursive = false , bool isReadOnly = false , int encoding = - 1 , const TCHAR * backupFileName = NULL , FILETIME fileNameTimestamp = { } ) ;
2009-04-24 23:34:47 +00:00
bool doReload ( BufferID id , bool alert = true ) ;
bool doSave ( BufferID , const TCHAR * filename , bool isSaveCopy = false ) ;
2014-03-31 01:01:54 +00:00
void doClose ( BufferID , int whichOne , bool doDeleteBackup = false ) ;
2009-04-24 23:34:47 +00:00
//bool doDelete(const TCHAR *fileName) const {return ::DeleteFile(fileName) != 0;};
void fileOpen ( ) ;
2010-11-13 11:15:06 +00:00
void fileNew ( ) ;
2015-08-04 11:36:22 +00:00
bool fileReload ( ) ;
2009-04-24 23:34:47 +00:00
bool fileClose ( BufferID id = BUFFER_INVALID , int curView = - 1 ) ; //use curView to override view to close from
2014-04-13 01:31:02 +00:00
bool fileCloseAll ( bool doDeleteBackup , bool isSnapshotMode = false ) ;
2009-04-24 23:34:47 +00:00
bool fileCloseAllButCurrent ( ) ;
2015-08-04 11:36:22 +00:00
bool fileCloseAllGiven ( const std : : vector < int > & krvecBufferIndexes ) ;
2013-08-03 23:40:07 +00:00
bool fileCloseAllToLeft ( ) ;
bool fileCloseAllToRight ( ) ;
2019-01-01 09:18:35 +00:00
bool fileCloseAllUnchanged ( ) ;
2009-04-24 23:34:47 +00:00
bool fileSave ( BufferID id = BUFFER_INVALID ) ;
bool fileSaveAll ( ) ;
2015-12-02 15:02:30 +00:00
bool fileSaveSpecific ( const generic_string & fileNameToSave ) ;
2009-04-24 23:34:47 +00:00
bool fileSaveAs ( BufferID id = BUFFER_INVALID , bool isSaveCopy = false ) ;
2009-07-04 11:33:17 +00:00
bool fileDelete ( BufferID id = BUFFER_INVALID ) ;
bool fileRename ( BufferID id = BUFFER_INVALID ) ;
2009-04-24 23:34:47 +00:00
bool switchToFile ( BufferID buffer ) ; //find buffer in active view then in other view.
2015-08-04 11:36:22 +00:00
//@}
2009-04-24 23:34:47 +00:00
bool isFileSession ( const TCHAR * filename ) ;
2015-06-13 15:10:02 +00:00
bool isFileWorkspace ( const TCHAR * filename ) ;
2009-04-24 23:34:47 +00:00
void filePrint ( bool showDialog ) ;
2016-10-23 01:50:41 +00:00
void saveScintillasZoom ( ) ;
2009-04-24 23:34:47 +00:00
2009-09-04 00:10:01 +00:00
bool saveGUIParams ( ) ;
2011-09-25 01:33:34 +00:00
bool saveProjectPanelsParams ( ) ;
2016-02-02 18:06:23 +00:00
bool saveFileBrowserParam ( ) ;
2009-09-04 00:10:01 +00:00
void saveDockingParams ( ) ;
2015-08-04 11:36:22 +00:00
void saveUserDefineLangs ( ) ;
void saveShortcuts ( ) ;
2009-09-04 00:10:01 +00:00
void saveSession ( const Session & session ) ;
2014-04-02 22:02:10 +00:00
void saveCurrentSession ( ) ;
2015-08-04 11:36:22 +00:00
void saveFindHistory ( ) ;
2014-04-02 22:02:10 +00:00
2015-08-04 11:36:22 +00:00
void getCurrentOpenedFiles ( Session & session , bool includUntitledDoc = false ) ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
bool fileLoadSession ( const TCHAR * fn = nullptr ) ;
2009-04-24 23:34:47 +00:00
const TCHAR * fileSaveSession ( size_t nbFile , TCHAR * * fileNames , const TCHAR * sessionFile2save ) ;
2015-08-04 11:36:22 +00:00
const TCHAR * fileSaveSession ( size_t nbFile = 0 , TCHAR * * fileNames = nullptr ) ;
2009-04-24 23:34:47 +00:00
void changeToolBarIcons ( ) ;
bool doBlockComment ( comment_mode currCommentMode ) ;
bool doStreamComment ( ) ;
2017-02-06 19:58:37 +00:00
bool undoStreamComment ( bool tryBlockComment = true ) ;
2015-07-15 12:09:31 +00:00
2009-04-24 23:34:47 +00:00
bool addCurrentMacro ( ) ;
2010-08-15 18:52:55 +00:00
void macroPlayback ( Macro ) ;
2015-07-15 12:09:31 +00:00
2014-05-08 20:48:03 +00:00
void loadLastSession ( ) ;
2014-04-13 01:31:02 +00:00
bool loadSession ( Session & session , bool isSnapshotMode = false ) ;
2015-07-15 12:09:31 +00:00
2017-02-24 22:47:19 +00:00
void prepareBufferChangedDialog ( Buffer * buffer ) ;
2009-04-24 23:34:47 +00:00
void notifyBufferChanged ( Buffer * buffer , int mask ) ;
2016-03-31 07:35:18 +00:00
bool findInFinderFiles ( FindersInfo * findInFolderInfo ) ;
2009-04-24 23:34:47 +00:00
bool findInFiles ( ) ;
bool replaceInFiles ( ) ;
void setFindReplaceFolderFilter ( const TCHAR * dir , const TCHAR * filters ) ;
2015-05-31 20:40:07 +00:00
std : : vector < generic_string > addNppComponents ( const TCHAR * destDir , const TCHAR * extFilterName , const TCHAR * extFilter ) ;
2018-11-17 18:01:24 +00:00
std : : vector < generic_string > addNppPlugins ( const TCHAR * extFilterName , const TCHAR * extFilter ) ;
2009-11-26 01:34:25 +00:00
int getHtmlXmlEncoding ( const TCHAR * fileName ) const ;
2019-10-13 19:48:27 +00:00
2014-08-02 11:28:42 +00:00
HACCEL getAccTable ( ) const {
2010-03-26 00:22:14 +00:00
return _accelerator . getAccTable ( ) ;
2019-10-13 19:48:27 +00:00
} ;
2019-06-13 15:54:42 +00:00
bool emergency ( const generic_string & emergencySavedDir ) ;
2019-10-13 19:48:27 +00:00
2015-08-04 11:36:22 +00:00
Buffer * getCurrentBuffer ( ) {
2014-03-27 01:30:31 +00:00
return _pEditView - > getCurrentBuffer ( ) ;
2019-10-13 19:48:27 +00:00
} ;
2014-03-27 01:30:31 +00:00
void launchDocumentBackupTask ( ) ;
2018-03-07 01:17:26 +00:00
int getQuoteIndexFrom ( const wchar_t * quoter ) const ;
2015-01-10 23:41:49 +00:00
void showQuoteFromIndex ( int index ) const ;
2018-03-10 10:30:55 +00:00
void showQuote ( const QuoteParams * quote ) const ;
2015-07-15 12:09:31 +00:00
2019-10-13 19:48:27 +00:00
generic_string getPluginListVerStr ( ) const {
return _pluginsAdminDlg . getPluginListVerStr ( ) ;
} ;
2015-08-04 11:36:22 +00:00
2009-04-24 23:34:47 +00:00
private :
2015-08-04 11:36:22 +00:00
Notepad_plus_Window * _pPublicInterface = nullptr ;
Window * _pMainWindow = nullptr ;
2009-04-24 23:34:47 +00:00
DockingManager _dockingManager ;
2015-05-31 20:40:07 +00:00
std : : vector < int > _internalFuncIDs ;
2009-04-24 23:34:47 +00:00
AutoCompletion _autoCompleteMain ;
2015-08-04 11:36:22 +00:00
AutoCompletion _autoCompleteSub ; // each Scintilla has its own autoComplete
2009-04-24 23:34:47 +00:00
SmartHighlighter _smartHighlighter ;
2010-03-05 00:15:06 +00:00
NativeLangSpeaker _nativeLangSpeaker ;
2009-04-24 23:34:47 +00:00
DocTabView _mainDocTab ;
DocTabView _subDocTab ;
2015-08-04 11:36:22 +00:00
DocTabView * _pDocTab = nullptr ;
DocTabView * _pNonDocTab = nullptr ;
2009-04-24 23:34:47 +00:00
ScintillaEditView _subEditView ;
ScintillaEditView _mainEditView ;
2015-08-04 11:36:22 +00:00
ScintillaEditView _invisibleEditView ; // for searches
ScintillaEditView _fileEditView ; // for FileManager
ScintillaEditView * _pEditView = nullptr ;
ScintillaEditView * _pNonEditView = nullptr ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
SplitterContainer * _pMainSplitter = nullptr ;
2009-04-24 23:34:47 +00:00
SplitterContainer _subSplitter ;
2015-08-04 11:36:22 +00:00
ContextMenu _tabPopupMenu ;
ContextMenu _tabPopupDropMenu ;
ContextMenu _fileSwitcherMultiFilePopupMenu ;
2009-04-24 23:34:47 +00:00
ToolBar _toolBar ;
IconList _docTabIconList ;
2015-07-15 12:09:31 +00:00
2009-04-24 23:34:47 +00:00
StatusBar _statusBar ;
2015-08-04 11:36:22 +00:00
bool _toReduceTabBar = false ;
2009-04-24 23:34:47 +00:00
ReBar _rebarTop ;
ReBar _rebarBottom ;
// Dialog
FindReplaceDlg _findReplaceDlg ;
2016-03-31 07:35:18 +00:00
FindInFinderDlg _findInFinderDlg ;
2009-04-24 23:34:47 +00:00
FindIncrementDlg _incrementFindDlg ;
AboutDlg _aboutDlg ;
2015-12-06 22:20:14 +00:00
DebugInfoDlg _debugInfoDlg ;
2009-04-24 23:34:47 +00:00
RunDlg _runDlg ;
2018-12-16 19:14:30 +00:00
HashFromFilesDlg _md5FromFilesDlg ;
HashFromTextDlg _md5FromTextDlg ;
HashFromFilesDlg _sha2FromFilesDlg ;
HashFromTextDlg _sha2FromTextDlg ;
2009-04-24 23:34:47 +00:00
GoToLineDlg _goToLineDlg ;
ColumnEditorDlg _colEditorDlg ;
WordStyleDlg _configStyleDlg ;
PreferenceDlg _preference ;
2011-05-19 21:19:05 +00:00
FindCharsInRangeDlg _findCharsInRangeDlg ;
2016-11-11 17:11:19 +00:00
PluginsAdminDlg _pluginsAdminDlg ;
2017-05-15 07:22:31 +00:00
DocumentPeeker _documentPeeker ;
2015-07-15 12:09:31 +00:00
2009-04-24 23:34:47 +00:00
// a handle list of all the Notepad++ dialogs
2015-05-31 20:40:07 +00:00
std : : vector < HWND > _hModelessDlgs ;
2009-04-24 23:34:47 +00:00
LastRecentFileList _lastRecentFileList ;
2010-03-16 22:32:58 +00:00
//vector<iconLocator> _customIconVect;
2009-04-24 23:34:47 +00:00
WindowsMenu _windowsMenu ;
2015-08-04 11:36:22 +00:00
HMENU _mainMenuHandle = NULL ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
bool _sysMenuEntering = false ;
2015-07-15 12:09:31 +00:00
2016-06-02 20:47:13 +00:00
// make sure we don't recursively call doClose when closing the last file with -quitOnEmpty
bool _isAttemptingCloseOnQuit = false ;
2009-04-24 23:34:47 +00:00
// For FullScreen/PostIt features
VisibleGUIConf _beforeSpecialView ;
void fullScreenToggle ( ) ;
void postItToggle ( ) ;
// Keystroke macro recording and playback
Macro _macro ;
2015-08-04 11:36:22 +00:00
bool _recordingMacro = false ;
2015-10-07 15:55:29 +00:00
bool _playingBackMacro = false ;
2018-01-23 14:24:28 +00:00
bool _recordingSaved = false ;
2009-04-24 23:34:47 +00:00
RunMacroDlg _runMacroDlg ;
2016-07-11 23:24:05 +00:00
// For conflict detection when saving Macros or RunCommands
ShortcutMapper * _pShortcutMapper = nullptr ;
2009-04-24 23:34:47 +00:00
// For hotspot
2015-08-04 11:36:22 +00:00
bool _linkTriggered = true ;
bool _isFolding = false ;
2009-04-24 23:34:47 +00:00
//For Dynamic selection highlight
2019-05-08 09:13:21 +00:00
Sci_CharacterRange _prevSelectedRange ;
2009-04-24 23:34:47 +00:00
//Synchronized Scolling
2015-08-04 11:36:22 +00:00
struct SyncInfo final
2015-07-15 12:09:31 +00:00
{
2015-08-04 11:36:22 +00:00
int _line = 0 ;
int _column = 0 ;
bool _isSynScollV = false ;
bool _isSynScollH = false ;
bool doSync ( ) const { return ( _isSynScollV | | _isSynScollH ) ; }
2015-07-15 12:09:31 +00:00
}
_syncInfo ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
bool _isUDDocked = false ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
trayIconControler * _pTrayIco = nullptr ;
int _zoomOriginalValue = 0 ;
2009-04-24 23:34:47 +00:00
Accelerator _accelerator ;
ScintillaAccelerator _scintaccelerator ;
PluginsManager _pluginsManager ;
2009-12-13 23:54:02 +00:00
ButtonDlg _restoreButton ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
bool _isFileOpening = false ;
bool _isAdministrator = false ;
2009-04-24 23:34:47 +00:00
2020-02-24 02:57:15 +00:00
bool _isEndingSessionButNotReady = false ; // If Windows 10 update needs to restart
// and Notepad++ has one (some) dirty document(s)
// and "Enable session snapshot and periodic backup" is not enabled
// then WM_ENDSESSION is send with wParam == FALSE
// in this case this boolean is set true, so Notepad++ will quit and its current session will be saved
Fix Load project file by dragging doesn't work
Make workspace (project) & session xml setting files consistent while their file extensions are defined in Preferences dialog:
1. If I specify a session file in the command line (, or if I double-click a session file in the Explorer), not the session file itself is opened, but the session stored in it.
2. If I specify a workspace file in the command line (, or if I double-click a workspace file in the Explorer), not the workspace file itself is opened, but the Project Panel 1 switches to the specified workspace file.
3. If I specify a session file in the `File` menu `Open Ctrl-O`, not the session file itself is opened, but the session stored in it.
4. If I specify a workspace file in the `File` menu `Open Ctrl-O`, not the workspace file itself is opened, but the Project Panel 1 switches to the specified workspace file.
5. If I drag a session file to Npp, not the session file itself is opened, but the session stored in it.
6. If I drag a workspace file to Npp, not the workspace file itself is opened, but the Project Panel 1 switches to the specified workspace file.
That means that once an user extension is defined for these 2 types of file, Notepad++ stores only the session or the workspace but not opens the file itself. The session and workspace setting files are not supposed to be edited manually.
If a defined conflict happens (for example, a non session or workspace setting file with the defined extension), user can always remove the defined extension from Preferences dialog temporarily to open it.
cherry picked from commit 70e746b7a8fe44c9a1e724581ceb3b457138a474
Close #8374, fix #8324
2020-06-04 17:28:51 +00:00
bool _isWorkspaceFileLoadedFromCommandLine = false ; // Set during Notepad_plus::doOpen if workspace file is opened.
// But it is only evaluated during startup, when doOpen
// has been called while command line interpretation.
2009-09-04 00:10:01 +00:00
ScintillaCtrls _scintillaCtrls4Plugins ;
2009-04-24 23:34:47 +00:00
2015-05-31 20:40:07 +00:00
std : : vector < std : : pair < int , int > > _hideLinesMarks ;
2009-06-07 01:49:42 +00:00
StyleArray _hotspotStyles ;
2010-03-26 00:22:14 +00:00
2015-08-04 11:36:22 +00:00
AnsiCharPanel * _pAnsiCharPanel = nullptr ;
ClipboardHistoryPanel * _pClipboardHistoryPanel = nullptr ;
VerticalFileSwitcher * _pFileSwitcherPanel = nullptr ;
ProjectPanel * _pProjectPanel_1 = nullptr ;
ProjectPanel * _pProjectPanel_2 = nullptr ;
ProjectPanel * _pProjectPanel_3 = nullptr ;
2009-04-24 23:34:47 +00:00
2016-01-23 01:24:37 +00:00
FileBrowser * _pFileBrowser = nullptr ;
2015-08-04 11:36:22 +00:00
DocumentMap * _pDocMap = nullptr ;
FunctionListPanel * _pFuncList = nullptr ;
2012-01-30 00:00:50 +00:00
2009-04-24 23:34:47 +00:00
BOOL notify ( SCNotification * notification ) ;
void command ( int id ) ;
//Document management
2015-08-04 11:36:22 +00:00
UCHAR _mainWindowStatus = 0 ; //For 2 views and user dialog if docked
int _activeView = MAIN_VIEW ;
2009-04-24 23:34:47 +00:00
//User dialog docking
void dockUserDlg ( ) ;
void undockUserDlg ( ) ;
//View visibility
void showView ( int whichOne ) ;
bool viewVisible ( int whichOne ) ;
void hideView ( int whichOne ) ;
void hideCurrentView ( ) ;
bool bothActive ( ) { return ( _mainWindowStatus & WindowBothActive ) = = WindowBothActive ; } ;
bool reloadLang ( ) ;
bool loadStyles ( ) ;
2016-05-11 00:18:04 +00:00
int currentView ( ) {
2009-04-24 23:34:47 +00:00
return _activeView ;
2015-07-15 12:09:31 +00:00
}
2009-09-04 00:10:01 +00:00
2009-04-24 23:34:47 +00:00
int otherView ( ) {
return ( _activeView = = MAIN_VIEW ? SUB_VIEW : MAIN_VIEW ) ;
2015-07-15 12:09:31 +00:00
}
2009-09-04 00:10:01 +00:00
2009-04-24 23:34:47 +00:00
int otherFromView ( int whichOne ) {
return ( whichOne = = MAIN_VIEW ? SUB_VIEW : MAIN_VIEW ) ;
2015-07-15 12:09:31 +00:00
}
2009-09-04 00:10:01 +00:00
2009-04-24 23:34:47 +00:00
bool canHideView ( int whichOne ) ; //true if view can safely be hidden (no open docs etc)
2016-06-02 20:47:13 +00:00
bool isEmpty ( ) ; // true if we have 1 view with 1 clean, untitled doc
2009-04-24 23:34:47 +00:00
int switchEditViewTo ( int gid ) ; //activate other view (set focus etc)
void docGotoAnotherEditView ( FileTransferMode mode ) ; //TransferMode
void docOpenInNewInstance ( FileTransferMode mode , int x = 0 , int y = 0 ) ;
void loadBufferIntoView ( BufferID id , int whichOne , bool dontClose = false ) ; //Doesnt _activate_ the buffer
2011-06-13 01:24:00 +00:00
bool removeBufferFromView ( BufferID id , int whichOne ) ; //Activates alternative of possible, or creates clean document if not clean already
2009-04-24 23:34:47 +00:00
bool activateBuffer ( BufferID id , int whichOne ) ; //activate buffer in that view if found
void notifyBufferActivated ( BufferID bufid , int view ) ;
void performPostReload ( int whichOne ) ;
//END: Document management
2019-07-03 07:41:35 +00:00
int doSaveOrNot ( const TCHAR * fn , bool isMulti = false ) ;
2009-09-04 00:10:01 +00:00
int doReloadOrNot ( const TCHAR * fn , bool dirty ) ;
int doCloseOrNot ( const TCHAR * fn ) ;
int doDeleteOrNot ( const TCHAR * fn ) ;
2009-04-24 23:34:47 +00:00
2009-09-04 00:10:01 +00:00
void enableMenu ( int cmdID , bool doEnable ) const ;
2009-04-24 23:34:47 +00:00
void enableCommand ( int cmdID , bool doEnable , int which ) const ;
void checkClipboard ( ) ;
void checkDocState ( ) ;
void checkUndoState ( ) ;
void checkMacroState ( ) ;
void checkSyncState ( ) ;
void dropFiles ( HDROP hdrop ) ;
Enhance "File status Auto-Detection" to avoid switching editing tab off behaviour
Fix a long waiting issue about file auto change detection, by adding a new option to avoid an annoying behaviour:
If file content is changed outside of Notepad++, while focus back to Notepad++, the current editing tab will be switched off, the changed file will be switched to and user will be asked to reload the file in question.
The new option remains the editing tab. User will be asked to reload it only if the changed file is switched in.
Fix #1087, Fix #3349, Fix #3333, Fix #3528, Fix #3138, Fix #3934, Fix #3160, Fix #1822, Fix #745, Fix #3599, Fix #4329, Fix #3971, Fix #4592, Fix #1116, Fix #2082
Close #4180, Close #5386, Close #4189, Close #1995, Close #2867, Close #3306, Close #2776, Close #2724, Close #2405, Close #4072, Close #4747
Close #5389
2019-03-06 16:21:49 +00:00
void checkModifiedDocument ( bool bCheckOnlyCurrentBuffer ) ;
2009-04-24 23:34:47 +00:00
void getMainClientRect ( RECT & rc ) const ;
2010-07-26 00:12:02 +00:00
void staticCheckMenuAndTB ( ) const ;
2009-04-24 23:34:47 +00:00
void dynamicCheckMenuAndTB ( ) const ;
2015-10-27 14:35:19 +00:00
void enableConvertMenuItems ( EolType f ) const ;
2009-12-01 01:20:13 +00:00
void checkUnicodeMenuItems ( ) const ;
2009-04-24 23:34:47 +00:00
2011-06-18 21:53:14 +00:00
generic_string getLangDesc ( LangType langType , bool getName = false ) ;
2009-04-24 23:34:47 +00:00
2015-08-04 11:36:22 +00:00
void setLangStatus ( LangType langType ) ;
2009-04-24 23:34:47 +00:00
2015-10-27 14:35:19 +00:00
void setDisplayFormat ( EolType f ) ;
2009-11-22 01:52:07 +00:00
void setUniModeText ( ) ;
2009-04-24 23:34:47 +00:00
void checkLangsMenu ( int id ) const ;
2009-07-04 11:33:17 +00:00
void setLanguage ( LangType langType ) ;
2017-02-16 23:35:28 +00:00
LangType menuID2LangType ( int cmdID ) ;
2009-04-24 23:34:47 +00:00
2015-02-06 03:46:15 +00:00
BOOL processIncrFindAccel ( MSG * msg ) const ;
2016-12-18 16:37:43 +00:00
BOOL processFindAccel ( MSG * msg ) const ;
2015-02-06 03:46:15 +00:00
2009-04-24 23:34:47 +00:00
void checkMenuItem ( int itemID , bool willBeChecked ) const {
: : CheckMenuItem ( _mainMenuHandle , itemID , MF_BYCOMMAND | ( willBeChecked ? MF_CHECKED : MF_UNCHECKED ) ) ;
2015-07-15 12:09:31 +00:00
}
2014-11-12 02:14:45 +00:00
bool isConditionExprLine ( int lineNumber ) ;
2014-11-17 00:36:36 +00:00
int findMachedBracePos ( size_t startPos , size_t endPos , char targetSymbol , char matchedSymbol ) ;
2014-11-12 02:14:45 +00:00
void maintainIndentation ( TCHAR ch ) ;
2015-07-15 12:09:31 +00:00
2020-05-13 17:00:44 +00:00
void addHotSpot ( ScintillaEditView * view = NULL ) ;
2009-04-24 23:34:47 +00:00
2015-07-15 12:09:31 +00:00
void bookmarkAdd ( int lineno ) const
{
2009-04-24 23:34:47 +00:00
if ( lineno = = - 1 )
2016-06-05 18:29:21 +00:00
lineno = static_cast < int32_t > ( _pEditView - > getCurrentLineNumber ( ) ) ;
2009-04-24 23:34:47 +00:00
if ( ! bookmarkPresent ( lineno ) )
_pEditView - > execute ( SCI_MARKERADD , lineno , MARK_BOOKMARK ) ;
2015-07-15 12:09:31 +00:00
}
void bookmarkDelete ( int lineno ) const
{
2009-04-24 23:34:47 +00:00
if ( lineno = = - 1 )
2016-06-05 18:29:21 +00:00
lineno = static_cast < int32_t > ( _pEditView - > getCurrentLineNumber ( ) ) ;
2016-09-28 15:59:52 +00:00
while ( bookmarkPresent ( lineno ) )
2009-04-24 23:34:47 +00:00
_pEditView - > execute ( SCI_MARKERDELETE , lineno , MARK_BOOKMARK ) ;
2015-07-15 12:09:31 +00:00
}
bool bookmarkPresent ( int lineno ) const
{
2009-04-24 23:34:47 +00:00
if ( lineno = = - 1 )
2016-06-05 18:29:21 +00:00
lineno = static_cast < int32_t > ( _pEditView - > getCurrentLineNumber ( ) ) ;
2009-04-24 23:34:47 +00:00
LRESULT state = _pEditView - > execute ( SCI_MARKERGET , lineno ) ;
return ( ( state & ( 1 < < MARK_BOOKMARK ) ) ! = 0 ) ;
2015-07-15 12:09:31 +00:00
}
void bookmarkToggle ( int lineno ) const
{
2009-04-24 23:34:47 +00:00
if ( lineno = = - 1 )
2016-06-05 18:29:21 +00:00
lineno = static_cast < int32_t > ( _pEditView - > getCurrentLineNumber ( ) ) ;
2009-04-24 23:34:47 +00:00
if ( bookmarkPresent ( lineno ) )
bookmarkDelete ( lineno ) ;
else
2015-07-15 12:09:31 +00:00
bookmarkAdd ( lineno ) ;
}
2009-04-24 23:34:47 +00:00
void bookmarkNext ( bool forwardScan ) ;
2015-07-15 12:09:31 +00:00
void bookmarkClearAll ( ) const
{
2009-04-24 23:34:47 +00:00
_pEditView - > execute ( SCI_MARKERDELETEALL , MARK_BOOKMARK ) ;
2015-07-15 12:09:31 +00:00
}
2009-04-24 23:34:47 +00:00
2009-09-04 00:10:01 +00:00
void copyMarkedLines ( ) ;
void cutMarkedLines ( ) ;
2011-02-19 15:06:53 +00:00
void deleteMarkedLines ( bool isMarked ) ;
2009-09-04 00:10:01 +00:00
void pasteToMarkedLines ( ) ;
void deleteMarkedline ( int ln ) ;
2010-05-27 00:05:51 +00:00
void inverseMarks ( ) ;
2009-09-04 00:10:01 +00:00
void replaceMarkedline ( int ln , const TCHAR * str ) ;
generic_string getMarkedLine ( int ln ) ;
2009-04-24 23:34:47 +00:00
void findMatchingBracePos ( int & braceAtCaret , int & braceOpposite ) ;
2009-12-01 01:20:13 +00:00
bool braceMatch ( ) ;
2009-04-24 23:34:47 +00:00
void activateNextDoc ( bool direction ) ;
2016-06-05 18:29:21 +00:00
void activateDoc ( size_t pos ) ;
2009-04-24 23:34:47 +00:00
void updateStatusBar ( ) ;
2010-09-19 01:27:41 +00:00
size_t getSelectedCharNumber ( UniMode ) ;
size_t getCurrentDocCharCount ( UniMode u ) ;
2016-06-05 18:29:21 +00:00
size_t getSelectedAreas ( ) ;
2009-10-04 13:13:45 +00:00
size_t getSelectedBytes ( ) ;
bool isFormatUnicode ( UniMode ) ;
int getBOMSize ( UniMode ) ;
2009-04-24 23:34:47 +00:00
void showAutoComp ( ) ;
void autoCompFromCurrentFile ( bool autoInsert = true ) ;
void showFunctionComp ( ) ;
2013-10-10 23:05:50 +00:00
void showPathCompletion ( ) ;
2009-04-24 23:34:47 +00:00
2010-03-05 00:15:06 +00:00
//void changeStyleCtrlsLang(HWND hDlg, int *idArray, const char **translatedText);
2013-05-11 20:55:09 +00:00
bool replaceInOpenedFiles ( ) ;
2009-04-24 23:34:47 +00:00
bool findInOpenedFiles ( ) ;
2020-06-13 20:53:43 +00:00
bool findInCurrentFile ( bool isEntireDoc ) ;
2009-04-24 23:34:47 +00:00
2015-05-31 20:40:07 +00:00
void getMatchedFileNames ( const TCHAR * dir , const std : : vector < generic_string > & patterns , std : : vector < generic_string > & fileNames , bool isRecursive , bool isInHiddenDir ) ;
2009-04-24 23:34:47 +00:00
void doSynScorll ( HWND hW ) ;
2009-09-04 00:10:01 +00:00
void setWorkingDir ( const TCHAR * dir ) ;
2015-06-01 16:47:24 +00:00
bool str2Cliboard ( const generic_string & str2cpy ) ;
2009-04-24 23:34:47 +00:00
bool getIntegralDockingData ( tTbData & dockData , int & iCont , bool & isVisible ) ;
2009-09-04 00:10:01 +00:00
int getLangFromMenuName ( const TCHAR * langName ) ;
generic_string getLangFromMenu ( const Buffer * buf ) ;
2009-04-24 23:34:47 +00:00
2020-05-30 14:50:59 +00:00
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 , 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
2009-09-04 00:10:01 +00:00
Style * getStyleFromName ( const TCHAR * styleName ) ;
2009-04-24 23:34:47 +00:00
bool dumpFiles ( const TCHAR * outdir , const TCHAR * fileprefix = TEXT ( " " ) ) ; //helper func
void drawTabbarColoursFromStylerArray ( ) ;
2019-06-25 11:37:48 +00:00
std : : vector < generic_string > loadCommandlineParams ( const TCHAR * commandLine , const CmdLineParams * pCmdParams )
2018-07-02 18:48:40 +00:00
{
const CmdLineParamsDTO dto = CmdLineParamsDTO : : FromCmdLineParams ( * pCmdParams ) ;
2019-06-25 11:37:48 +00:00
return loadCommandlineParams ( commandLine , & dto ) ;
2018-07-02 18:48:40 +00:00
}
2019-06-25 11:37:48 +00:00
std : : vector < generic_string > loadCommandlineParams ( const TCHAR * commandLine , const CmdLineParamsDTO * pCmdParams ) ;
2009-09-04 00:10:01 +00:00
bool noOpenedDoc ( ) const ;
2009-11-15 17:01:52 +00:00
bool goToPreviousIndicator ( int indicID2Search , bool isWrap = true ) const ;
bool goToNextIndicator ( int indicID2Search , bool isWrap = true ) const ;
2010-09-25 17:04:44 +00:00
int wordCount ( ) ;
2015-07-15 12:09:31 +00:00
2012-08-25 19:23:16 +00:00
void wsTabConvert ( spaceTab whichWay ) ;
2010-12-05 19:33:48 +00:00
void doTrim ( trimOp whichPart ) ;
2012-11-24 20:14:52 +00:00
void removeEmptyLine ( bool isBlankContained ) ;
2019-02-01 00:00:36 +00:00
void removeDuplicateLines ( ) ;
2011-04-13 07:08:51 +00:00
void launchAnsiCharPanel ( ) ;
2011-04-20 21:45:18 +00:00
void launchClipboardHistoryPanel ( ) ;
2011-05-19 21:19:05 +00:00
void launchFileSwitcherPanel ( ) ;
2011-09-25 01:33:34 +00:00
void launchProjectPanel ( int cmdID , ProjectPanel * * pProjPanel , int panelID ) ;
2012-01-30 00:00:50 +00:00
void launchDocMap ( ) ;
2012-11-24 20:14:52 +00:00
void launchFunctionList ( ) ;
2019-06-25 11:37:48 +00:00
void launchFileBrowser ( const std : : vector < generic_string > & folders , bool fromScratch = false ) ;
2012-01-01 19:29:31 +00:00
void showAllQuotes ( ) const ;
static DWORD WINAPI threadTextPlayer ( void * text2display ) ;
static DWORD WINAPI threadTextTroller ( void * params ) ;
static int getRandomAction ( int ranNum ) ;
static bool deleteBack ( ScintillaEditView * pCurrentView , BufferID targetBufID ) ;
static bool deleteForward ( ScintillaEditView * pCurrentView , BufferID targetBufID ) ;
static bool selectBack ( ScintillaEditView * pCurrentView , BufferID targetBufID ) ;
2015-07-15 12:09:31 +00:00
static int getRandomNumber ( int rangeMax = - 1 )
{
2012-01-01 19:29:31 +00:00
int randomNumber = rand ( ) ;
if ( rangeMax = = - 1 )
return randomNumber ;
return ( rand ( ) % rangeMax ) ;
2015-07-15 12:09:31 +00:00
}
2014-03-27 01:30:31 +00:00
static DWORD WINAPI backupDocument ( void * params ) ;
2016-04-24 03:29:05 +00:00
static DWORD WINAPI monitorFileOnChange ( void * params ) ;
struct MonitorInfo final {
2016-05-11 00:18:04 +00:00
MonitorInfo ( Buffer * buf , HWND nppHandle ) :
_buffer ( buf ) , _nppHandle ( nppHandle ) { } ;
2016-04-24 03:29:05 +00:00
Buffer * _buffer = nullptr ;
2016-05-11 00:18:04 +00:00
HWND _nppHandle = nullptr ;
2016-04-24 03:29:05 +00:00
} ;
2018-10-03 13:53:30 +00:00
void monitoringStartOrStopAndUpdateUI ( Buffer * pBuf , bool isStarting ) ;
2009-04-24 23:34:47 +00:00
} ;
2010-03-26 00:22:14 +00:00