Notepad3/src/TypeDefs.h
2020-03-21 22:20:23 +01:00

650 lines
18 KiB
C++

// encoding: UTF-8
/******************************************************************************
* *
* *
* Notepad3 *
* *
* TypeDefs.h *
* *
* (c) Rizonesoft 2008-2020 *
* https://rizonesoft.com *
* *
* *
*******************************************************************************/
#pragma once
#ifndef _NP3_TYPEDEFS_H_
#define _NP3_TYPEDEFS_H_
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#ifndef WINVER
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#ifndef NTDDI_VERSION
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
// Want to use std::min and std::max so don't want Windows.h version of min and max
#if !defined(NOMINMAX)
#define NOMINMAX
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
//#include <winuser.h>
#define STRSAFE_NO_CB_FUNCTIONS
#define STRSAFE_NO_DEPRECATE // don't allow deprecated functions
#include <strsafe.h>
#include <intsafe.h>
#ifndef __cplusplus
#include <stdbool.h>
#endif
#include "Sci_Position.h"
//
// TODO(rkotten):
// SCI_CREATEDOCUMENT (SC_DOCUMENTOPTION_TEXT_LARGE)
//
/// deprecated:
///typedef long DocPos;
///typedef unsigned long DocPosU;
///typedef long DocPosCR;
///typedef long DocLn;
///#define DOCPOSFMTA "%i"
///#define DOCPOSFMTW L"%i"
typedef Sci_Position DocPos;
typedef Sci_PositionU DocPosU;
typedef Sci_PositionCR DocPosCR;
typedef DocPos DocLn; // Sci::Line
#define DOCPOSFMTA "%ti"
#define DOCPOSFMTW L"%ti"
// --------------------------------------------------------------------------
//typedef intptr_t cpi_enc_t;
typedef int cpi_enc_t;
typedef struct _wi
{
int x;
int y;
int cx;
int cy;
bool max;
int zoom;
} WININFO;
#define INIT_WININFO { CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, false, 100 }
typedef enum { SCR_NORMAL = 0, SCR_FULL_SCREEN = 1 } SCREEN_MODE;
inline RECT RectFromWinInfo(const WININFO* const pWinInfo) {
RECT rc; SetRect(&rc, pWinInfo->x, pWinInfo->y, pWinInfo->x + pWinInfo->cx, pWinInfo->y + pWinInfo->cy); return rc;
}
// ----------------------------------------------------------------------------
typedef enum { BACKGROUND_LAYER = 0, FOREGROUND_LAYER = 1 } COLOR_LAYER; // Style_GetColor()
typedef enum { OPEN_WITH_BROWSER = 1, OPEN_WITH_NOTEPAD3 = 2, COPY_HYPERLINK = 4 } HYPERLINK_OPS; // Hyperlink Operations
typedef enum { FWM_DONT_CARE = 0, FWM_MSGBOX = 1, FWM_AUTORELOAD = 2 } FILE_WATCHING_MODE;
// ----------------------------------------------------------------------------
// keep backward compatible with older settings-file versions
typedef enum
{
CFG_VER_NONE = 0, /// old version
CFG_VER_0001 = 1, /// ZoomLevel and PrintZoom changed from relative font size in point to absolute percentage.
CFG_VER_0002 = 2, /// LongLine Marker Off by default
CFG_VER_0003 = 3, /// SimpleIni UTF-8 BOM
CFG_VER_0004 = 4, /// Text Files lexer vs. Default Text => (2nd) Common Style
CFG_VER_CURRENT = CFG_VER_0004
} CFG_VERSION;
// --------------------------------------------------------------------------
typedef enum
{
MICRO_BUFFER = 32,
MINI_BUFFER = 64,
SMALL_BUFFER = 128,
MIDSZ_BUFFER = 256,
LARGE_BUFFER = 512,
HUGE_BUFFER = 1024,
XHUGE_BUFFER = 2048,
XXXL_BUFFER = 4096,
ANSI_CHAR_BUFFER = 258,
FNDRPL_BUFFER = 2048,
LONG_LINES_MARKER_LIMIT = 4096
} BUFFER_SIZES;
typedef enum { FND_NOP = 0, NXT_NOT_FND, NXT_FND, NXT_WRP_FND, PRV_NOT_FND, PRV_FND, PRV_WRP_FND } FR_STATES;
typedef enum { FRMOD_IGNORE = 0, FRMOD_NORM, FRMOD_WRAPED } FR_UPD_MODES;
//==== Statusbar ==============================================================
typedef WCHAR prefix_t[MICRO_BUFFER];
typedef enum {
STATUS_DOCLINE = 0, STATUS_DOCCOLUMN, STATUS_SELECTION, STATUS_SELCTBYTES, STATUS_SELCTLINES,
STATUS_OCCURRENCE, STATUS_DOCSIZE, STATUS_CODEPAGE, STATUS_EOLMODE, STATUS_OVRMODE, STATUS_2ND_DEF,
STATUS_LEXER, STATUS_DOCCHAR, STATUS_OCCREPLACE, STATUS_TINYEXPR,
STATUS_SECTOR_COUNT,
STATUS_HELP = 255
} STATUS_SECTOR_T;
#define SBS_INIT_ZERO { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
#define SBS_INIT_MINUS { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }
#define SBS_INIT_ORDER { 0, 1, 2, 3, 4, 5, 6, 7. 8. 9, 10, 11, 12, 13, 14 }
#define STATUSBAR_DEFAULT_IDS L"0 1 12 14 2 4 5 6 7 8 9 10 11"
#define STATUSBAR_SECTION_WIDTH_SPECS L"30 20 20 20 20 20 0 0 0 0 0 0 20 20 20"
#define STAUSBAR_RIGHT_MARGIN 20
#define MB_ICONSHIELD 0x000000B0L
// --------------------------------------------------------------------------
typedef enum { CT_NONE = 0, CT_ZOOM, CT_ZEROLEN_MATCH, CT_ENC_INFO, CT_DWELL } CALLTIPTYPE;
// --------------------------------------------------------------------------
typedef struct _filevars
{
int mask;
bool bTabsAsSpaces;
bool bTabIndents;
bool bWordWrap;
int iTabWidth;
int iIndentWidth;
int iWrapColumn;
int iLongLinesLimit;
char tchEncoding[64];
cpi_enc_t iEncoding;
char tchMode[32];
} FILEVARS, *LPFILEVARS;
// --------------------------------------------------------------------------
typedef struct _editfindreplace
{
char szFind[FNDRPL_BUFFER];
char szReplace[FNDRPL_BUFFER];
UINT fuFlags;
bool bTransformBS;
bool bAutoEscCtrlChars;
bool bFindClose;
bool bReplaceClose;
bool bNoFindWrap;
bool bWildcardSearch;
bool bMarkOccurences;
bool bHideNonMatchedLines;
bool bStateChanged;
HWND hwnd;
} EDITFINDREPLACE, *LPEDITFINDREPLACE, *LPCEDITFINDREPLACE;
#define EFR_INIT_DATA { "", "", 0, false, false, false, false, false, false, false, false, true, NULL }
#define IDMSG_SWITCHTOFIND 300
#define IDMSG_SWITCHTOREPLACE 301
// --------------------------------------------------------------------------
#define MRU_MAXITEMS 32
#define MRU_ITEMSFILE 32
#define MRU_ITEMSFNDRPL 16
#define MRU_NOCASE 1
#define MRU_UTF8 2
#define MRU_BMRK_SIZE 512
typedef struct _mrulist
{
LPCWSTR szRegKey;
int iFlags;
int iSize;
LPWSTR pszItems[MRU_MAXITEMS];
cpi_enc_t iEncoding[MRU_MAXITEMS];
DocPos iCaretPos[MRU_MAXITEMS];
DocPos iSelAnchPos[MRU_MAXITEMS];
LPWSTR pszBookMarks[MRU_MAXITEMS];
}
MRULIST, *PMRULIST, *LPMRULIST;
// --------------------------------------------------------------------------
typedef struct _cmq
{
HWND hwnd;
UINT cmd;
WPARAM wparam;
LPARAM lparam;
int delay;
struct _cmq* next;
struct _cmq* prev;
} CmdMessageQueue_t;
#define MESSAGE_QUEUE_INIT(cmd,wp,lp) { NULL, (cmd), MAKEWPARAM((wp), 1), ((LPARAM)(DWORD)(lp)), -1, NULL, NULL }
#define MQ_WM_CMD_INIT(wp,lp) MESSAGE_QUEUE_INIT(WM_COMMAND, (wp), (lp))
// --------------------------------------------------------------------------
#define rgbRedColorRef (RGB(255, 170, 170))
#define rgbGreenColorRef (RGB(170, 255, 170))
#define rgbBlueColorRef (RGB(170, 200, 255))
// --------------------------------------------------------------------------
#define MARKER_NP3_BOOKMARK 1
#define INDIC_NP3_MARK_OCCURANCE (INDICATOR_CONTAINER + 1)
#define INDIC_NP3_MATCH_BRACE (INDICATOR_CONTAINER + 2)
#define INDIC_NP3_BAD_BRACE (INDICATOR_CONTAINER + 3)
#define INDIC_NP3_FOCUS_VIEW (INDICATOR_CONTAINER + 4)
#define INDIC_NP3_HYPERLINK (INDICATOR_CONTAINER + 5)
#define INDIC_NP3_HYPERLINK_U (INDICATOR_CONTAINER + 6)
#define INDIC_NP3_COLOR_DEF (INDICATOR_CONTAINER + 7) // (HIDDEN)
#define INDIC_NP3_COLOR_DWELL (INDICATOR_CONTAINER + 8)
#define INDIC_NP3_MULTI_EDIT (INDICATOR_CONTAINER + 9)
// --------------------------------------------------------------------------
#define SC_NP3_CURSORHAND 8
//=============================================================================
typedef struct _constants_t
{
int const StdDefaultLexerID; // Pure Text Files
const WCHAR* const FileBrowserMiniPath;
const WCHAR* const StylingThemeName;
const WCHAR* const Settings_Section;
const WCHAR* const Settings2_Section;
const WCHAR* const Window_Section;
const WCHAR* const Styles_Section;
const WCHAR* const SectionSuppressedMessages;
} CONSTANTS_T, *PCONSTANTS_T;
extern CONSTANTS_T const Constants;
// ------------------------------------
typedef struct _globals_t
{
int iCfgVersionRead;
HINSTANCE hInstance;
HINSTANCE hPrevInst;
HINSTANCE hLngResContainer;
int iAvailLngCount;
bool bPrefLngNotAvail;
HWND hwndMain;
HANDLE hndlProcessHeap;
UINT uConsoleCodePage;
HWND hwndEdit;
HANDLE hndlScintilla;
HANDLE hwndToolbar;
HWND hwndStatus;
DWORD dwLastError;
HMENU hMainMenu;
HICON hDlgIcon;
HICON hIcon48;
HICON hIcon128;
HICON hIconMsgInfo;
HICON hIconMsgWarn;
HICON hIconMsgError;
HICON hIconMsgQuest;
HICON hIconMsgShield;
HICON hIconMsgShieldSmall;
//HICON hIconMsgWinLogo;
HWND hwndDlgFindReplace;
HWND hwndDlgCustomizeSchemes;
int iDefaultCharSet;
cpi_enc_t DOSEncoding;
LANGID iPrefLANGID;
LPMRULIST pFileMRU;
LPMRULIST pMRUfind;
LPMRULIST pMRUreplace;
CALLTIPTYPE CallTipType;
FILEVARS fvCurFile;
FILEVARS fvBackup;
int iWrapCol;
bool CmdLnFlag_PosParam;
int CmdLnFlag_WindowPos;
int CmdLnFlag_ReuseWindow;
int CmdLnFlag_SingleFileInstance;
int CmdLnFlag_MultiFileArg;
int CmdLnFlag_ShellUseSystemMRU;
int CmdLnFlag_PrintFileAndLeave;
bool bZeroBasedColumnIndex;
bool bZeroBasedCharacterCount;
int iReplacedOccurrences;
DocPos iMarkOccurrencesCount;
bool bUseLimitedAutoCCharSet;
bool bIsCJKInputCodePage;
bool bIniFileFromScratch;
bool bFindReplCopySelOrClip;
bool bReplaceInitialized;
bool bDocHasInconsistentEOLs;
unsigned idxSelectedTheme;
WCHAR SelectedThemeName[128];
FR_STATES FindReplaceMatchFoundState;
WCHAR WorkingDirectory[MAX_PATH];
WCHAR IniFile[MAX_PATH];
WCHAR IniFileDefault[MAX_PATH];
WCHAR CurrentFile[MAX_PATH];
} GLOBALS_T, *PGLOBALS_T;
extern GLOBALS_T Globals;
// ------------------------------------
typedef struct _settings_t
{
bool SaveSettings;
bool SaveRecentFiles;
bool PreserveCaretPos;
bool SaveFindReplace;
int PathNameFormat;
bool WordWrap;
int WordWrapMode;
int WordWrapIndent;
int WordWrapSymbols;
bool ShowWordWrapSymbols;
bool MatchBraces;
bool AutoCloseTags;
int HighlightCurrentLine;
bool HyperlinkHotspot;
bool ColorDefHotspot;
bool ScrollPastEOF;
bool ShowHypLnkToolTip;
bool AutoIndent;
bool AutoCompleteWords;
bool AutoCLexerKeyWords;
bool AccelWordNavigation;
bool EditLineCommentBlock;
bool ShowIndentGuides;
bool TabsAsSpaces;
bool TabIndents;
bool BackspaceUnindents;
int TabWidth;
int IndentWidth;
bool WarnInconsistentIndents;
bool AutoDetectIndentSettings;
bool MarkLongLines;
int LongLinesLimit;
int LongLineMode;
bool ShowSelectionMargin;
bool ShowLineNumbers;
bool ShowCodeFolding;
bool MarkOccurrences;
bool MarkOccurrencesMatchVisible;
bool MarkOccurrencesMatchCase;
bool MarkOccurrencesMatchWholeWords;
bool MarkOccurrencesCurrentWord;
bool ViewWhiteSpace;
bool ViewEOLs;
cpi_enc_t DefaultEncoding; // default new file encoding
bool UseDefaultForFileEncoding;
bool LoadASCIIasUTF8;
bool UseReliableCEDonly;
bool LoadNFOasOEM;
bool NoEncodingTags;
bool SkipUnicodeDetection;
bool SkipANSICodePageDetection;
int DefaultEOLMode;
bool WarnInconsistEOLs;
bool FixLineEndings;
bool FixTrailingBlanks;
int PrintHeader;
int PrintFooter;
int PrintColorMode;
int PrintZoom;
bool SaveBeforeRunningTools;
FILE_WATCHING_MODE FileWatchingMode;
bool ResetFileWatching;
int EscFunction;
bool AlwaysOnTop;
bool MinimizeToTray;
bool TransparentMode;
bool FindReplaceTransparentMode;
int RenderingTechnology;
int Bidirectional;
bool ShowMenubar;
bool ShowToolbar;
bool ShowStatusbar;
int ToolBarTheme;
bool DpiScaleToolBar;
int EncodingDlgSizeX;
int EncodingDlgSizeY;
int RecodeDlgSizeX;
int RecodeDlgSizeY;
int FileMRUDlgSizeX;
int FileMRUDlgSizeY;
int OpenWithDlgSizeX;
int OpenWithDlgSizeY;
int FavoritesDlgSizeX;
int FavoritesDlgSizeY;
int AddToFavDlgSizeX;
int FindReplaceDlgSizeX;
int FindReplaceDlgPosX;
int FindReplaceDlgPosY;
int CustomSchemesDlgSizeX;
int CustomSchemesDlgSizeY;
int CustomSchemesDlgPosX;
int CustomSchemesDlgPosY;
bool MuteMessageBeep;
bool SplitUndoTypingSeqOnLnBreak;
RECT PrintMargin;
EDITFINDREPLACE EFR_Data;
WCHAR OpenWithDir[MAX_PATH];
WCHAR FavoritesDir[MAX_PATH];
WCHAR ToolbarButtons[MIDSZ_BUFFER];
} SETTINGS_T, *PSETTINGS_T;
extern SETTINGS_T Defaults;
extern SETTINGS_T Settings;
#define IsMarkOccurrencesEnabled() (Settings.MarkOccurrences)
#define IsFocusedViewAllowed() (IsMarkOccurrencesEnabled() && !Settings.MarkOccurrencesMatchVisible)
//=============================================================================
typedef struct _flags_t
{
int ToolbarLook;
int PrintFileAndLeave;
bool bLargeFileLoaded;
bool bDevDebugMode;
bool bStickyWindowPosition;
bool bReuseWindow;
bool bSingleFileInstance;
bool MultiFileArg;
bool RelativeFileMRU;
bool PortableMyDocs;
bool NoFadeHidden;
bool SimpleIndentGuides;
bool NoHTMLGuess;
bool NoCGIGuess;
bool NoFileVariables;
bool ShellUseSystemMRU;
bool bPreserveFileModTime;
bool bDoRelaunchElevated;
bool bSearchPathIfRelative;
bool bSettingsFileSoftLocked;
} FLAGS_T, *PFLAGS_T;
extern FLAGS_T Flags;
extern FLAGS_T DefaultFlags;
//=============================================================================
typedef struct _settings2_t
{
int FileLoadWarningMB;
int OpacityLevel;
int FindReplaceOpacityLevel;
DWORD FileCheckInverval;
DWORD AutoReloadTimeout;
DWORD UndoTransactionTimeout;
int IMEInteraction;
int SciFontQuality;
int MarkOccurrencesMaxCount;
int UpdateDelayMarkAllOccurrences;
bool DenyVirtualSpaceAccess;
bool UseOldStyleBraceMatching;
int CurrentLineHorizontalSlop;
int CurrentLineVerticalSlop;
bool NoCopyLineOnEmptySelection;
bool NoCutLineOnEmptySelection;
bool LexerSQLNumberSignAsComment;
int ExitOnESCSkipLevel;
float AnalyzeReliableConfidenceLevel;
float LocaleAnsiCodePageAnalysisBonus;
WCHAR PreferredLanguageLocaleName[LOCALE_NAME_MAX_LENGTH + 1];
WCHAR DefaultExtension[64];
WCHAR DefaultDirectory[MAX_PATH];
WCHAR FileDlgFilters[XHUGE_BUFFER];
WCHAR FileBrowserPath[MAX_PATH];
WCHAR AppUserModelID[128];
WCHAR AutoCompleteFillUpChars[64];
WCHAR LineCommentPostfixStrg[64];
WCHAR ExtendedWhiteSpaceChars[ANSI_CHAR_BUFFER + 1];
WCHAR AutoCompleteWordCharSet[ANSI_CHAR_BUFFER + 1];
//int DateFormatLong;
//int DateFormatShort;
WCHAR DateTimeShort[128];
WCHAR TimeStampRegExShort[256];
WCHAR DateTimeLong[128];
WCHAR TimeStampRegExLong[256];
WCHAR WebTemplate1[MAX_PATH];
WCHAR WebTemplate2[MAX_PATH];
WCHAR AdministrationTool[MAX_PATH];
WCHAR DefaultWindowPosition[64];
} SETTINGS2_T, *PSETTINGS2_T;
extern SETTINGS2_T Settings2;
extern SETTINGS2_T Defaults2;
//=============================================================================
typedef struct _focusedview_t
{
bool HideNonMatchedLines;
bool CodeFoldingAvailable;
bool ShowCodeFolding; // <-> Settings.ShowCodeFolding
} FOCUSEDVIEW_T, *PFOCUSEDVIEW_T;
extern FOCUSEDVIEW_T FocusedView;
//=============================================================================
typedef struct _filewatching_t
{
FILE_WATCHING_MODE flagChangeNotify; // <-> s_flagChangeNotify;
FILE_WATCHING_MODE FileWatchingMode; // <-> Settings.FileWatchingMode;
bool ResetFileWatching; // <-> Settings.ResetFileWatching;
DWORD FileCheckInverval; // <-> Settings2.FileCheckInverval;
DWORD AutoReloadTimeout; // <-> Settings2.AutoReloadTimeout;
bool MonitoringLog;
} FILEWATCHING_T, *PFILEWATCHING_T;
extern FILEWATCHING_T FileWatching;
//=============================================================================
typedef enum { I_TAB_LN = 0, I_SPC_LN = 1, I_MIX_LN = 2, I_TAB_MOD_X = 3, I_SPC_MOD_X = 4 } INDENT_TYPE;
typedef struct _editfileiostatus
{
cpi_enc_t iEncoding;
int iEOLMode;
bool bUnicodeErr;
// inconsistent line endings
bool bInconsistentEOLs;
DocLn eolCount[3];
bool bCancelDataLoss;
bool bUnknownExt;
bool bEncryptedRaw;
// inconsistent indentation
INDENT_TYPE iGlobalIndent;
DocLn indentCount[5];
} EditFileIOStatus;
#define INIT_FILEIO_STATUS { CPI_ANSI_DEFAULT, SC_EOL_CRLF, false, false, {0,0,0}, false, false, false, I_MIX_LN, {0,0,0,0,0} }
//=============================================================================
typedef struct _themeFiles
{
UINT rid;
WCHAR szName[80];
WCHAR szFilePath[MAX_PATH];
} THEMEFILES, * PTHEMEFILES;
//=============================================================================
// --------- common defines --------
#define NOTEPAD3_MODULE_DIR_ENV_VAR L"NOTEPAD3MODULEDIR"
//~#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : (SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE))
//~#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : (SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART))
// don't use 'SCVS_NOWRAPLINESTART'
#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION)
// from <wininet.h>
#define INTERNET_MAX_PATH_LENGTH 2048
#define INTERNET_MAX_SCHEME_LENGTH 32 // longest protocol name length
#define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH \
+ sizeof("://") \
+ INTERNET_MAX_PATH_LENGTH)
//=============================================================================
#endif //_NP3_TYPEDEFS_H_