// This file is part of Notepad++ project
// Copyright (C)2021 Don HO <
[email protected]>
// 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 3 of the License, or
// at your option any later version.
//
// 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, see <https://www.gnu.org/licenses/>.
#include <time.h>
#include <shlwapi.h>
#include <wininet.h>
#include "Notepad_plus.h"
#include "Notepad_plus_Window.h"
#include "CustomFileDialog.h"
#include "Printer.h"
#include "FileNameStringSplitter.h"
#include "lesDlgs.h"
#include "Utf8_16.h"
#include "regExtDlg.h"
#include "RunDlg.h"
#include "ShortcutMapper.h"
#include "preferenceDlg.h"
#include "TaskListDlg.h"
#include "xmlMatchedTagsHighlighter.h"
#include "EncodingMapper.h"
#include "ansiCharPanel.h"
#include "clipboardHistoryPanel.h"
#include "VerticalFileSwitcher.h"
#include "ProjectPanel.h"
#include "documentMap.h"
#include "functionListPanel.h"
#include "fileBrowser.h"
#include "Common.h"
#include "NppDarkMode.h"
using namespace std;
chrono::steady_clock::duration g_pluginsLoadingTime{};
enum tb_stat {tb_saved, tb_unsaved, tb_ro, tb_monitored};
#define DIR_LEFT true
#define DIR_RIGHT false
ToolBarButtonUnit toolBarIcons[] = {
{IDM_FILE_NEW, IDI_NEW_ICON, IDI_NEW_ICON, IDI_NEW_ICON2, IDI_NEW_ICON2, IDI_NEW_ICON_DM, IDI_NEW_ICON_DM, IDI_NEW_ICON_DM2, IDI_NEW_ICON_DM2, IDR_FILENEW},
{IDM_FILE_OPEN, IDI_OPEN_ICON, IDI_OPEN_ICON, IDI_OPEN_ICON2, IDI_OPEN_ICON2, IDI_OPEN_ICON_DM, IDI_OPEN_ICON_DM, IDI_OPEN_ICON_DM2, IDI_OPEN_ICON_DM2, IDR_FILEOPEN},
{IDM_FILE_SAVE, IDI_SAVE_ICON, IDI_SAVE_DISABLE_ICON, IDI_SAVE_ICON2, IDI_SAVE_DISABLE_ICON2, IDI_SAVE_ICON_DM, IDI_SAVE_DISABLE_ICON_DM, IDI_SAVE_ICON_DM2, IDI_SAVE_DISABLE_ICON_DM2, IDR_FILESAVE},
{IDM_FILE_SAVEALL, IDI_SAVEALL_ICON, IDI_SAVEALL_DISABLE_ICON, IDI_SAVEALL_ICON2, IDI_SAVEALL_DISABLE_ICON2, IDI_SAVEALL_ICON_DM, IDI_SAVEALL_DISABLE_ICON_DM, IDI_SAVEALL_ICON_DM2, IDI_SAVEALL_DISABLE_ICON_DM2, IDR_SAVEALL},
{IDM_FILE_CLOSE, IDI_CLOSE_ICON, IDI_CLOSE_ICON, IDI_CLOSE_ICON2, IDI_CLOSE_ICON2, IDI_CLOSE_ICON_DM, IDI_CLOSE_ICON_DM, IDI_CLOSE_ICON_DM2, IDI_CLOSE_ICON_DM2, IDR_CLOSEFILE},
{IDM_FILE_CLOSEALL, IDI_CLOSEALL_ICON, IDI_CLOSEALL_ICON, IDI_CLOSEALL_ICON2, IDI_CLOSEALL_ICON2, IDI_CLOSEALL_ICON_DM, IDI_CLOSEALL_ICON_DM, IDI_CLOSEALL_ICON_DM2, IDI_CLOSEALL_ICON_DM2, IDR_CLOSEALL},
{IDM_FILE_PRINT, IDI_PRINT_ICON, IDI_PRINT_ICON, IDI_PRINT_ICON2, IDI_PRINT_ICON2, IDI_PRINT_ICON_DM, IDI_PRINT_ICON_DM, IDI_PRINT_ICON_DM2, IDI_PRINT_ICON_DM2, IDR_PRINT},
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
{0, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON},
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
{IDM_EDIT_CUT, IDI_CUT_ICON, IDI_CUT_DISABLE_ICON, IDI_CUT_ICON2, IDI_CUT_DISABLE_ICON2, IDI_CUT_ICON_DM, IDI_CUT_DISABLE_ICON_DM, IDI_CUT_ICON_DM2, IDI_CUT_DISABLE_ICON_DM2, IDR_CUT},
{IDM_EDIT_COPY, IDI_COPY_ICON, IDI_COPY_DISABLE_ICON, IDI_COPY_ICON2, IDI_COPY_DISABLE_ICON2, IDI_COPY_ICON_DM, IDI_COPY_DISABLE_ICON_DM, IDI_COPY_ICON_DM2, IDI_COPY_DISABLE_ICON_DM2, IDR_COPY},
{IDM_EDIT_PASTE, IDI_PASTE_ICON, IDI_PASTE_DISABLE_ICON, IDI_PASTE_ICON2, IDI_PASTE_DISABLE_ICON2, IDI_PASTE_ICON_DM, IDI_PASTE_DISABLE_ICON_DM, IDI_PASTE_ICON_DM2, IDI_PASTE_DISABLE_ICON_DM2, IDR_PASTE},
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
{0, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON},
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
{IDM_EDIT_UNDO, IDI_UNDO_ICON, IDI_UNDO_DISABLE_ICON, IDI_UNDO_ICON2, IDI_UNDO_DISABLE_ICON2, IDI_UNDO_ICON_DM, IDI_UNDO_DISABLE_ICON_DM, IDI_UNDO_ICON_DM2, IDI_UNDO_DISABLE_ICON_DM2, IDR_UNDO},
{IDM_EDIT_REDO, IDI_REDO_ICON, IDI_REDO_DISABLE_ICON, IDI_REDO_ICON2, IDI_REDO_DISABLE_ICON2, IDI_REDO_ICON_DM, IDI_REDO_DISABLE_ICON_DM, IDI_REDO_ICON_DM2, IDI_REDO_DISABLE_ICON_DM2, IDR_REDO},
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
{0, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON, IDI_SEPARATOR_ICON},
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------