Add new feature "Distraction Free Mode"
This commit is contained in:
parent
92038c1653
commit
cbf3d2c9cb
|
@ -246,6 +246,7 @@ The comments are here for explanation, it's not necessary to translate them.
|
||||||
<Item id="43054" name="Mar&k..."/>
|
<Item id="43054" name="Mar&k..."/>
|
||||||
<Item id="44009" name="Post-It"/>
|
<Item id="44009" name="Post-It"/>
|
||||||
<Item id="44010" name="Fold All"/>
|
<Item id="44010" name="Fold All"/>
|
||||||
|
<Item id="44011" name="Distraction Free Mode"/>
|
||||||
<Item id="44019" name="Show All Characters"/>
|
<Item id="44019" name="Show All Characters"/>
|
||||||
<Item id="44020" name="Show Indent Guide"/>
|
<Item id="44020" name="Show Indent Guide"/>
|
||||||
<Item id="44022" name="Word wrap"/>
|
<Item id="44022" name="Word wrap"/>
|
||||||
|
|
|
@ -233,6 +233,7 @@
|
||||||
<Item id="43054" name="Marquer..."/>
|
<Item id="43054" name="Marquer..."/>
|
||||||
<Item id="44009" name="Post-it"/>
|
<Item id="44009" name="Post-it"/>
|
||||||
<Item id="44010" name="Replier tous les blocs"/>
|
<Item id="44010" name="Replier tous les blocs"/>
|
||||||
|
<Item id="44011" name="Mode sans distraction"/>
|
||||||
<Item id="44019" name="Afficher tous les caractères"/>
|
<Item id="44019" name="Afficher tous les caractères"/>
|
||||||
<Item id="44020" name="Afficher le guide d'indentation"/>
|
<Item id="44020" name="Afficher le guide d'indentation"/>
|
||||||
<Item id="44022" name="Retour automatique à la ligne"/>
|
<Item id="44022" name="Retour automatique à la ligne"/>
|
||||||
|
|
|
@ -228,6 +228,7 @@
|
||||||
<Item id="43050" name="反向標記書籤"/>
|
<Item id="43050" name="反向標記書籤"/>
|
||||||
<Item id="44009" name="便條模式"/>
|
<Item id="44009" name="便條模式"/>
|
||||||
<Item id="44010" name="折疊所有階層"/>
|
<Item id="44010" name="折疊所有階層"/>
|
||||||
|
<Item id="44011" name="免干擾模式"/>
|
||||||
<Item id="44011" name="自訂語法對話方塊"/>
|
<Item id="44011" name="自訂語法對話方塊"/>
|
||||||
<Item id="44019" name="顯示所有字元"/>
|
<Item id="44019" name="顯示所有字元"/>
|
||||||
<Item id="44020" name="顯示縮排輔助線"/>
|
<Item id="44020" name="顯示縮排輔助線"/>
|
||||||
|
|
|
@ -5338,10 +5338,9 @@ void Notepad_plus::fullScreenToggle()
|
||||||
|
|
||||||
void Notepad_plus::postItToggle()
|
void Notepad_plus::postItToggle()
|
||||||
{
|
{
|
||||||
NppParameters& nppParam = NppParameters::getInstance();
|
|
||||||
if (!_beforeSpecialView._isPostIt) // PostIt disabled, enable it
|
if (!_beforeSpecialView._isPostIt) // PostIt disabled, enable it
|
||||||
{
|
{
|
||||||
NppGUI & nppGUI = const_cast<NppGUI &>(nppParam.getNppGUI());
|
NppGUI & nppGUI = const_cast<NppGUI &>(NppParameters::getInstance().getNppGUI());
|
||||||
// get current status before switch to postIt
|
// get current status before switch to postIt
|
||||||
//check these always
|
//check these always
|
||||||
{
|
{
|
||||||
|
@ -5448,6 +5447,51 @@ void Notepad_plus::postItToggle()
|
||||||
::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0);
|
::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Distraction Free mode uses full screen mode + post-it mode + setting padding on the both left & right sides.
|
||||||
|
// In order to keep the coherence of data, when full screen mode or (and) post-it mode is (are) active,
|
||||||
|
// Distraction Free mode should be innaccible, and vice versa.
|
||||||
|
void Notepad_plus::distractionFreeToggle()
|
||||||
|
{
|
||||||
|
// Toggle Distraction Free Mode
|
||||||
|
fullScreenToggle();
|
||||||
|
postItToggle();
|
||||||
|
|
||||||
|
// Get padding info
|
||||||
|
const ScintillaViewParams& svp = NppParameters::getInstance().getSVP();
|
||||||
|
int paddingLeft = 0;
|
||||||
|
int paddingRight = 0;
|
||||||
|
|
||||||
|
// Enable or disable Distraction Free Mode
|
||||||
|
if (_beforeSpecialView._isDistractionFree)
|
||||||
|
{
|
||||||
|
// disable it
|
||||||
|
paddingLeft = svp._paddingLeft;
|
||||||
|
paddingRight = svp._paddingRight;
|
||||||
|
|
||||||
|
_restoreButton.setButtonStatus(0);
|
||||||
|
_restoreButton.display(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// enable it
|
||||||
|
const int defaultDiviser = 4;
|
||||||
|
int diviser = svp._distractionFreeDivPart > 2 ? svp._distractionFreeDivPart : defaultDiviser;
|
||||||
|
int w = _pEditView->getWidth();
|
||||||
|
int paddingLen = w / diviser;
|
||||||
|
if (paddingLen <= 0)
|
||||||
|
paddingLen = w / defaultDiviser;
|
||||||
|
|
||||||
|
paddingLeft = paddingRight = paddingLen;
|
||||||
|
_restoreButton.setButtonStatus(buttonStatus_distractionFree);
|
||||||
|
}
|
||||||
|
|
||||||
|
_beforeSpecialView._isDistractionFree = !_beforeSpecialView._isDistractionFree;
|
||||||
|
|
||||||
|
// set Distraction Free Mode paddin or restore the normal padding
|
||||||
|
_pEditView->execute(SCI_SETMARGINLEFT, 0, paddingLeft);
|
||||||
|
_pEditView->execute(SCI_SETMARGINRIGHT, 0, paddingRight);
|
||||||
|
}
|
||||||
|
|
||||||
void Notepad_plus::doSynScorll(HWND whichView)
|
void Notepad_plus::doSynScorll(HWND whichView)
|
||||||
{
|
{
|
||||||
int column = 0;
|
int column = 0;
|
||||||
|
|
|
@ -82,8 +82,9 @@ struct VisibleGUIConf final
|
||||||
{
|
{
|
||||||
bool _isPostIt = false;
|
bool _isPostIt = false;
|
||||||
bool _isFullScreen = false;
|
bool _isFullScreen = false;
|
||||||
|
bool _isDistractionFree = false;
|
||||||
|
|
||||||
//Used by 2 modes
|
//Used by 3 modes
|
||||||
bool _isMenuShown = true;
|
bool _isMenuShown = true;
|
||||||
DWORD_PTR _preStyle = (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN);
|
DWORD_PTR _preStyle = (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN);
|
||||||
|
|
||||||
|
@ -336,6 +337,7 @@ private:
|
||||||
VisibleGUIConf _beforeSpecialView;
|
VisibleGUIConf _beforeSpecialView;
|
||||||
void fullScreenToggle();
|
void fullScreenToggle();
|
||||||
void postItToggle();
|
void postItToggle();
|
||||||
|
void distractionFreeToggle();
|
||||||
|
|
||||||
// Keystroke macro recording and playback
|
// Keystroke macro recording and playback
|
||||||
Macro _macro;
|
Macro _macro;
|
||||||
|
|
|
@ -480,6 +480,7 @@ BEGIN
|
||||||
MENUITEM "Always on Top", IDM_VIEW_ALWAYSONTOP
|
MENUITEM "Always on Top", IDM_VIEW_ALWAYSONTOP
|
||||||
MENUITEM "Toggle Full Screen Mode", IDM_VIEW_FULLSCREENTOGGLE
|
MENUITEM "Toggle Full Screen Mode", IDM_VIEW_FULLSCREENTOGGLE
|
||||||
MENUITEM "Post-It", IDM_VIEW_POSTIT
|
MENUITEM "Post-It", IDM_VIEW_POSTIT
|
||||||
|
MENUITEM "Distraction Free Mode", IDM_VIEW_DISTRACTIONFREE
|
||||||
|
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
POPUP "View Current File in"
|
POPUP "View Current File in"
|
||||||
|
|
|
@ -1835,10 +1835,6 @@ void Notepad_plus::command(int id)
|
||||||
inverseMarks();
|
inverseMarks();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDM_VIEW_FULLSCREENTOGGLE :
|
|
||||||
fullScreenToggle();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDM_VIEW_ALWAYSONTOP:
|
case IDM_VIEW_ALWAYSONTOP:
|
||||||
{
|
{
|
||||||
int check = (::GetMenuState(_mainMenuHandle, id, MF_BYCOMMAND) == MF_CHECKED)?MF_UNCHECKED:MF_CHECKED;
|
int check = (::GetMenuState(_mainMenuHandle, id, MF_BYCOMMAND) == MF_CHECKED)?MF_UNCHECKED:MF_CHECKED;
|
||||||
|
@ -2015,9 +2011,25 @@ void Notepad_plus::command(int id)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case IDM_VIEW_FULLSCREENTOGGLE:
|
||||||
|
{
|
||||||
|
if (!_beforeSpecialView._isDistractionFree)
|
||||||
|
fullScreenToggle();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case IDM_VIEW_POSTIT :
|
case IDM_VIEW_POSTIT :
|
||||||
{
|
{
|
||||||
postItToggle();
|
if (!_beforeSpecialView._isDistractionFree)
|
||||||
|
postItToggle();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IDM_VIEW_DISTRACTIONFREE:
|
||||||
|
{
|
||||||
|
if (((_beforeSpecialView._isDistractionFree && _beforeSpecialView._isFullScreen && _beforeSpecialView._isPostIt)) ||
|
||||||
|
((!_beforeSpecialView._isDistractionFree && !_beforeSpecialView._isFullScreen && !_beforeSpecialView._isPostIt)))
|
||||||
|
distractionFreeToggle();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -238,6 +238,7 @@ static const WinMenuKeyDefinition winKeyDefs[] =
|
||||||
{ VK_NULL, IDM_VIEW_ALWAYSONTOP, false, false, false, nullptr },
|
{ VK_NULL, IDM_VIEW_ALWAYSONTOP, false, false, false, nullptr },
|
||||||
{ VK_F11, IDM_VIEW_FULLSCREENTOGGLE, false, false, false, nullptr },
|
{ VK_F11, IDM_VIEW_FULLSCREENTOGGLE, false, false, false, nullptr },
|
||||||
{ VK_F12, IDM_VIEW_POSTIT, false, false, false, nullptr },
|
{ VK_F12, IDM_VIEW_POSTIT, false, false, false, nullptr },
|
||||||
|
{ VK_NULL, IDM_VIEW_DISTRACTIONFREE, false, false, false, nullptr },
|
||||||
|
|
||||||
{ VK_NULL, IDM_VIEW_IN_FIREFOX, false, false, false, TEXT("View current file in Firefox") },
|
{ VK_NULL, IDM_VIEW_IN_FIREFOX, false, false, false, TEXT("View current file in Firefox") },
|
||||||
{ VK_NULL, IDM_VIEW_IN_CHROME, false, false, false, TEXT("View current file in Chrome") },
|
{ VK_NULL, IDM_VIEW_IN_CHROME, false, false, false, TEXT("View current file in Chrome") },
|
||||||
|
@ -5528,6 +5529,27 @@ void NppParameters::feedScintillaParam(TiXmlNode *node)
|
||||||
else if (!lstrcmp(nm, TEXT("no")))
|
else if (!lstrcmp(nm, TEXT("no")))
|
||||||
_svp._doSmoothFont = false;
|
_svp._doSmoothFont = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nm = element->Attribute(TEXT("paddingLeft"), &val);
|
||||||
|
if (nm)
|
||||||
|
{
|
||||||
|
if (val >= 0 && val <= 9)
|
||||||
|
_svp._paddingLeft = static_cast<unsigned char>(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
nm = element->Attribute(TEXT("paddingRight"), &val);
|
||||||
|
if (nm)
|
||||||
|
{
|
||||||
|
if (val >= 0 && val <= 9)
|
||||||
|
_svp._paddingRight = static_cast<unsigned char>(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
nm = element->Attribute(TEXT("distractionFreeDivPart"), &val);
|
||||||
|
if (nm)
|
||||||
|
{
|
||||||
|
if (val >= 3 && val <= 255)
|
||||||
|
_svp._borderWidth = static_cast<unsigned char>(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5781,6 +5803,9 @@ bool NppParameters::writeScintillaParams()
|
||||||
(scintNode->ToElement())->SetAttribute(TEXT("eolShow"), _svp._eolShow?TEXT("show"):TEXT("hide"));
|
(scintNode->ToElement())->SetAttribute(TEXT("eolShow"), _svp._eolShow?TEXT("show"):TEXT("hide"));
|
||||||
(scintNode->ToElement())->SetAttribute(TEXT("borderWidth"), _svp._borderWidth);
|
(scintNode->ToElement())->SetAttribute(TEXT("borderWidth"), _svp._borderWidth);
|
||||||
(scintNode->ToElement())->SetAttribute(TEXT("smoothFont"), _svp._doSmoothFont ? TEXT("yes") : TEXT("no"));
|
(scintNode->ToElement())->SetAttribute(TEXT("smoothFont"), _svp._doSmoothFont ? TEXT("yes") : TEXT("no"));
|
||||||
|
(scintNode->ToElement())->SetAttribute(TEXT("paddingLeft"), _svp._paddingLeft);
|
||||||
|
(scintNode->ToElement())->SetAttribute(TEXT("paddingRight"), _svp._paddingRight);
|
||||||
|
(scintNode->ToElement())->SetAttribute(TEXT("distractionFreeDivPart"), _svp._distractionFreeDivPart);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -935,6 +935,13 @@ struct ScintillaViewParams
|
||||||
bool _disableAdvancedScrolling = false;
|
bool _disableAdvancedScrolling = false;
|
||||||
bool _doSmoothFont = false;
|
bool _doSmoothFont = false;
|
||||||
bool _showBorderEdge = true;
|
bool _showBorderEdge = true;
|
||||||
|
|
||||||
|
unsigned char _paddingLeft = 0; // 0-9 pixel
|
||||||
|
unsigned char _paddingRight = 0; // 0-9 pixel
|
||||||
|
|
||||||
|
// distractionFreeDivPart is used for divising the fullscreen pixel width.
|
||||||
|
// the result of division will be the left & right padding in Distraction Free mode
|
||||||
|
unsigned char _distractionFreeDivPart = 4; // 3-255 parts
|
||||||
};
|
};
|
||||||
|
|
||||||
const int NB_LIST = 20;
|
const int NB_LIST = 20;
|
||||||
|
|
|
@ -132,10 +132,16 @@ INT_PTR CALLBACK ButtonDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
|
||||||
case IDC_RESTORE_BUTTON :
|
case IDC_RESTORE_BUTTON :
|
||||||
{
|
{
|
||||||
int bs = getButtonStatus();
|
int bs = getButtonStatus();
|
||||||
|
|
||||||
|
bool isDistractionFree = (bs & buttonStatus_distractionFree) != 0;
|
||||||
bool isFullScreen = (bs & buttonStatus_fullscreen) != 0;
|
bool isFullScreen = (bs & buttonStatus_fullscreen) != 0;
|
||||||
bool isPostIt = (bs & buttonStatus_postit) != 0;
|
bool isPostIt = (bs & buttonStatus_postit) != 0;
|
||||||
int cmd = 0;
|
int cmd = 0;
|
||||||
if (isFullScreen && isPostIt)
|
if (isDistractionFree)
|
||||||
|
{
|
||||||
|
cmd = IDM_VIEW_DISTRACTIONFREE;
|
||||||
|
}
|
||||||
|
else if (isFullScreen && isPostIt)
|
||||||
{
|
{
|
||||||
// remove postit firstly
|
// remove postit firstly
|
||||||
cmd = IDM_VIEW_POSTIT;
|
cmd = IDM_VIEW_POSTIT;
|
||||||
|
|
|
@ -44,12 +44,14 @@ private :
|
||||||
POINT _p = {0, 0};
|
POINT _p = {0, 0};
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0 : sans fullscreen
|
// 0 : normal window
|
||||||
// 1 : fullscreen
|
// 1 : fullscreen
|
||||||
// 2 : postit
|
// 2 : postit
|
||||||
const int buttonStatus_nada = 0;
|
// 4 : distractionFree
|
||||||
const int buttonStatus_fullscreen = 1;
|
const int buttonStatus_nada = 0; // 0000 0000
|
||||||
const int buttonStatus_postit = 2;
|
const int buttonStatus_fullscreen = 1; // 0000 0001
|
||||||
|
const int buttonStatus_postit = 2; // 0000 0010
|
||||||
|
const int buttonStatus_distractionFree = 4; // 0000 0100
|
||||||
|
|
||||||
class ButtonDlg : public StaticDialog
|
class ButtonDlg : public StaticDialog
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,14 +63,14 @@ MenuPosition menuPos[] = {
|
||||||
{ 2, 23, -1, "search-copyStyledText" },
|
{ 2, 23, -1, "search-copyStyledText" },
|
||||||
{ 2, 25, -1, "search-bookmark" },
|
{ 2, 25, -1, "search-bookmark" },
|
||||||
|
|
||||||
{ 3, 4, -1, "view-currentFileIn" },
|
{ 3, 5, -1, "view-currentFileIn" },
|
||||||
{ 3, 6, -1, "view-showSymbol" },
|
{ 3, 7, -1, "view-showSymbol" },
|
||||||
{ 3, 7, -1, "view-zoom" },
|
{ 3, 8, -1, "view-zoom" },
|
||||||
{ 3, 8, -1, "view-moveCloneDocument" },
|
{ 3, 9, -1, "view-moveCloneDocument" },
|
||||||
{ 3, 9, -1, "view-tab" },
|
{ 3, 10, -1, "view-tab" },
|
||||||
{ 3, 18, -1, "view-collapseLevel" },
|
{ 3, 19, -1, "view-collapseLevel" },
|
||||||
{ 3, 19, -1, "view-uncollapseLevel" },
|
{ 3, 20, -1, "view-uncollapseLevel" },
|
||||||
{ 3, 23, -1, "view-project" },
|
{ 3, 24, -1, "view-project" },
|
||||||
|
|
||||||
{ 4, 5, -1, "encoding-characterSets" },
|
{ 4, 5, -1, "encoding-characterSets" },
|
||||||
{ 4, 5, 0, "encoding-arabic" },
|
{ 4, 5, 0, "encoding-arabic" },
|
||||||
|
|
|
@ -258,7 +258,7 @@
|
||||||
#define IDM_VIEW_DRAWTABBAR_INACIVETAB (IDM_VIEW + 8)
|
#define IDM_VIEW_DRAWTABBAR_INACIVETAB (IDM_VIEW + 8)
|
||||||
#define IDM_VIEW_POSTIT (IDM_VIEW + 9)
|
#define IDM_VIEW_POSTIT (IDM_VIEW + 9)
|
||||||
#define IDM_VIEW_TOGGLE_FOLDALL (IDM_VIEW + 10)
|
#define IDM_VIEW_TOGGLE_FOLDALL (IDM_VIEW + 10)
|
||||||
//#define IDM_VIEW_USER_DLG (IDM_VIEW + 11)
|
#define IDM_VIEW_DISTRACTIONFREE (IDM_VIEW + 11)
|
||||||
#define IDM_VIEW_LINENUMBER (IDM_VIEW + 12)
|
#define IDM_VIEW_LINENUMBER (IDM_VIEW + 12)
|
||||||
#define IDM_VIEW_SYMBOLMARGIN (IDM_VIEW + 13)
|
#define IDM_VIEW_SYMBOLMARGIN (IDM_VIEW + 13)
|
||||||
#define IDM_VIEW_FOLDERMAGIN (IDM_VIEW + 14)
|
#define IDM_VIEW_FOLDERMAGIN (IDM_VIEW + 14)
|
||||||
|
|
Loading…
Reference in New Issue