mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-10-24 17:13:52 +02:00
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@529 f5eea248-9336-0410-98b8-ebc06183d4e3
850 lines
27 KiB
C++
850 lines
27 KiB
C++
/*
|
|
this file is part of notepad++
|
|
Copyright (C)2003 Don HO < donho@altern.org >
|
|
|
|
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.
|
|
|
|
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.
|
|
*/
|
|
|
|
#include "precompiledHeaders.h"
|
|
#include "WordStyleDlg.h"
|
|
#include "ScintillaEditView.h"
|
|
|
|
BOOL CALLBACK ColourStaticTextHooker::colourStaticProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch(Message)
|
|
{
|
|
case WM_PAINT:
|
|
{
|
|
RECT rect;
|
|
::GetClientRect(hwnd, &rect);
|
|
|
|
PAINTSTRUCT ps;
|
|
HDC hdc = ::BeginPaint(hwnd, &ps);
|
|
|
|
::SetTextColor(hdc, _colour);
|
|
|
|
// Get the default GUI font
|
|
HFONT hf = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
|
|
|
|
HANDLE hOld = SelectObject(hdc, hf);
|
|
|
|
// Draw the text!
|
|
TCHAR text[MAX_PATH];
|
|
::GetWindowText(hwnd, text, MAX_PATH);
|
|
::DrawText(hdc, text, -1, &rect, DT_LEFT);
|
|
|
|
::SelectObject(hdc, hOld);
|
|
|
|
::EndPaint(hwnd, &ps);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
return ::CallWindowProc(_oldProc, hwnd, Message, wParam, lParam);
|
|
}
|
|
void WordStyleDlg::updateGlobalOverrideCtrls()
|
|
{
|
|
const NppGUI & nppGUI = (NppParameters::getInstance())->getNppGUI();
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_FG_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableFg, 0);
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_BG_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableBg, 0);
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_FONT_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableFont, 0);
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_FONTSIZE_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableFontSize, 0);
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_BOLD_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableBold, 0);
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_ITALIC_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableItalic, 0);
|
|
::SendDlgItemMessage(_hSelf, IDC_GLOBAL_UNDERLINE_CHECK, BM_SETCHECK, nppGUI._globalOverride.enableUnderLine, 0);
|
|
}
|
|
|
|
BOOL CALLBACK WordStyleDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (Message)
|
|
{
|
|
case WM_INITDIALOG :
|
|
{
|
|
NppParameters *nppParamInst = NppParameters::getInstance();
|
|
|
|
_hCheckBold = ::GetDlgItem(_hSelf, IDC_BOLD_CHECK);
|
|
_hCheckItalic = ::GetDlgItem(_hSelf, IDC_ITALIC_CHECK);
|
|
_hCheckUnderline = ::GetDlgItem(_hSelf, IDC_UNDERLINE_CHECK);
|
|
_hFontNameCombo = ::GetDlgItem(_hSelf, IDC_FONT_COMBO);
|
|
_hFontSizeCombo = ::GetDlgItem(_hSelf, IDC_FONTSIZE_COMBO);
|
|
_hSwitch2ThemeCombo = ::GetDlgItem(_hSelf, IDC_SWITCH2THEME_COMBO);
|
|
|
|
_hFgColourStaticText = ::GetDlgItem(_hSelf, IDC_FG_STATIC);
|
|
_hBgColourStaticText = ::GetDlgItem(_hSelf, IDC_BG_STATIC);
|
|
_hFontNameStaticText = ::GetDlgItem(_hSelf, IDC_FONTNAME_STATIC);
|
|
_hFontSizeStaticText = ::GetDlgItem(_hSelf, IDC_FONTSIZE_STATIC);
|
|
_hStyleInfoStaticText = ::GetDlgItem(_hSelf, IDC_STYLEDESCRIPTION_STATIC);
|
|
|
|
colourHooker.setColour(RGB(0xFF, 0x00, 0x00));
|
|
colourHooker.hookOn(_hStyleInfoStaticText);
|
|
|
|
_currentThemeIndex = -1;
|
|
int defaultThemeIndex = 0;
|
|
ThemeSwitcher & themeSwitcher = nppParamInst->getThemeSwitcher();
|
|
for(size_t i = 0 ; i < themeSwitcher.size() ; i++)
|
|
{
|
|
pair<generic_string, generic_string> & themeInfo = themeSwitcher.getElementFromIndex(i);
|
|
int j = ::SendMessage(_hSwitch2ThemeCombo, CB_ADDSTRING, 0, (LPARAM)themeInfo.first.c_str());
|
|
if (! themeInfo.second.compare( nppParamInst->getNppGUI()._themeName ) )
|
|
{
|
|
_currentThemeIndex = j;
|
|
}
|
|
if (! themeInfo.first.compare(TEXT("Default")) )
|
|
{
|
|
defaultThemeIndex = j;
|
|
}
|
|
}
|
|
if (_currentThemeIndex == -1)
|
|
{
|
|
_currentThemeIndex = defaultThemeIndex;
|
|
}
|
|
::SendMessage(_hSwitch2ThemeCombo, CB_SETCURSEL, _currentThemeIndex, 0);
|
|
|
|
for(int i = 0 ; i < sizeof(fontSizeStrs)/(3*sizeof(TCHAR)) ; i++)
|
|
::SendMessage(_hFontSizeCombo, CB_ADDSTRING, 0, (LPARAM)fontSizeStrs[i]);
|
|
|
|
const std::vector<generic_string> & fontlist = (NppParameters::getInstance())->getFontList();
|
|
for (size_t i = 0 ; i < fontlist.size() ; i++)
|
|
{
|
|
int j = ::SendMessage(_hFontNameCombo, CB_ADDSTRING, 0, (LPARAM)fontlist[i].c_str());
|
|
::SendMessage(_hFontNameCombo, CB_SETITEMDATA, j, (LPARAM)fontlist[i].c_str());
|
|
}
|
|
|
|
_pFgColour = new ColourPicker;
|
|
_pBgColour = new ColourPicker;
|
|
_pFgColour->init(_hInst, _hSelf);
|
|
_pBgColour->init(_hInst, _hSelf);
|
|
|
|
POINT p1, p2;
|
|
|
|
alignWith(_hFgColourStaticText, _pFgColour->getHSelf(), ALIGNPOS_RIGHT, p1);
|
|
alignWith(_hBgColourStaticText, _pBgColour->getHSelf(), ALIGNPOS_RIGHT, p2);
|
|
|
|
p1.x = p2.x = ((p1.x > p2.x)?p1.x:p2.x) + 10;
|
|
p1.y -= 4; p2.y -= 4;
|
|
|
|
::MoveWindow((HWND)_pFgColour->getHSelf(), p1.x, p1.y, 25, 25, TRUE);
|
|
::MoveWindow((HWND)_pBgColour->getHSelf(), p2.x, p2.y, 25, 25, TRUE);
|
|
_pFgColour->display();
|
|
_pBgColour->display();
|
|
|
|
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDOK), _isDirty);
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDC_SAVECLOSE_BUTTON), FALSE/*!_isSync*/);
|
|
|
|
ETDTProc enableDlgTheme = (ETDTProc)nppParamInst->getEnableThemeDlgTexture();
|
|
if (enableDlgTheme)
|
|
{
|
|
enableDlgTheme(_hSelf, ETDT_ENABLETAB);
|
|
redraw();
|
|
}
|
|
|
|
updateGlobalOverrideCtrls();
|
|
setVisualFromStyleList();
|
|
goToCenter();
|
|
|
|
loadLangListFromNppParam();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_DESTROY:
|
|
{
|
|
_pFgColour->destroy();
|
|
_pBgColour->destroy();
|
|
delete _pFgColour;
|
|
delete _pBgColour;
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_HSCROLL :
|
|
{
|
|
if ((HWND)lParam == ::GetDlgItem(_hSelf, IDC_SC_PERCENTAGE_SLIDER))
|
|
{
|
|
int percent = ::SendDlgItemMessage(_hSelf, IDC_SC_PERCENTAGE_SLIDER, TBM_GETPOS, 0, 0);
|
|
(NppParameters::getInstance())->SetTransparent(_hSelf, percent);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_COMMAND :
|
|
{
|
|
if (HIWORD(wParam) == EN_CHANGE)
|
|
{
|
|
int editID = LOWORD(wParam);
|
|
if (editID == IDC_USER_KEYWORDS_EDIT)
|
|
{
|
|
updateUserKeywords();
|
|
notifyDataModified();
|
|
apply();
|
|
}
|
|
else if (editID == IDC_USER_EXT_EDIT)
|
|
{
|
|
updateExtension();
|
|
notifyDataModified();
|
|
apply();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (wParam)
|
|
{
|
|
case IDC_BOLD_CHECK :
|
|
updateFontStyleStatus(BOLD_STATUS);
|
|
notifyDataModified();
|
|
apply();
|
|
break;
|
|
|
|
case IDC_ITALIC_CHECK :
|
|
updateFontStyleStatus(ITALIC_STATUS);
|
|
notifyDataModified();
|
|
apply();
|
|
break;
|
|
|
|
case IDC_UNDERLINE_CHECK :
|
|
updateFontStyleStatus(UNDERLINE_STATUS);
|
|
notifyDataModified();
|
|
apply();
|
|
break;
|
|
|
|
case IDCANCEL :
|
|
//::MessageBox(NULL, TEXT("cancel"), TEXT(""), MB_OK);
|
|
if (_isDirty)
|
|
{
|
|
NppParameters *nppParamInst = NppParameters::getInstance();
|
|
if (_restoreInvalid)
|
|
{
|
|
generic_string str( nppParamInst->getNppGUI()._themeName );
|
|
nppParamInst->reloadStylers( &str[0] );
|
|
}
|
|
|
|
LexerStylerArray & lsArray = nppParamInst->getLStylerArray();
|
|
StyleArray & globalStyles = nppParamInst->getGlobalStylers();
|
|
|
|
if (_restoreInvalid)
|
|
{
|
|
_lsArray = _styles2restored = lsArray;
|
|
_globalStyles = _gstyles2restored = globalStyles;
|
|
}
|
|
else
|
|
{
|
|
globalStyles = _globalStyles = _gstyles2restored;
|
|
lsArray = _lsArray = _styles2restored;
|
|
}
|
|
|
|
restoreGlobalOverrideValues();
|
|
|
|
_restoreInvalid = false;
|
|
_isDirty = false;
|
|
_isThemeDirty = false;
|
|
setVisualFromStyleList();
|
|
|
|
|
|
//(nppParamInst->getNppGUI())._themeName
|
|
::SendMessage(_hSwitch2ThemeCombo, CB_SETCURSEL, _currentThemeIndex, 0);
|
|
::SendMessage(_hParent, WM_UPDATESCINTILLAS, 0, 0);
|
|
}
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDC_SAVECLOSE_BUTTON), FALSE/*!_isSync*/);
|
|
display(false);
|
|
return TRUE;
|
|
|
|
case IDC_SAVECLOSE_BUTTON :
|
|
{
|
|
if (_isDirty)
|
|
{
|
|
LexerStylerArray & lsa = (NppParameters::getInstance())->getLStylerArray();
|
|
StyleArray & globalStyles = (NppParameters::getInstance())->getGlobalStylers();
|
|
|
|
_lsArray = lsa;
|
|
_globalStyles = globalStyles;
|
|
updateThemeName(_themeName);
|
|
_restoreInvalid = false;
|
|
|
|
_currentThemeIndex = ::SendMessage(_hSwitch2ThemeCombo, CB_GETCURSEL, 0, 0);
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDOK), FALSE);
|
|
_isDirty = false;
|
|
}
|
|
_isThemeDirty = false;
|
|
(NppParameters::getInstance())->writeStyles(_lsArray, _globalStyles);
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDC_SAVECLOSE_BUTTON), FALSE);
|
|
//_isSync = true;
|
|
display(false);
|
|
::SendMessage(_hParent, WM_UPDATESCINTILLAS, 0, 0);
|
|
return TRUE;
|
|
}
|
|
|
|
case IDC_SC_TRANSPARENT_CHECK :
|
|
{
|
|
bool isChecked = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_SC_TRANSPARENT_CHECK, BM_GETCHECK, 0, 0));
|
|
if (isChecked)
|
|
{
|
|
int percent = ::SendDlgItemMessage(_hSelf, IDC_SC_PERCENTAGE_SLIDER, TBM_GETPOS, 0, 0);
|
|
(NppParameters::getInstance())->SetTransparent(_hSelf, percent);
|
|
}
|
|
else
|
|
(NppParameters::getInstance())->removeTransparent(_hSelf);
|
|
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDC_SC_PERCENTAGE_SLIDER), isChecked);
|
|
return TRUE;
|
|
}
|
|
|
|
case IDC_GLOBAL_FG_CHECK :
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableFg = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
|
|
case IDC_GLOBAL_BG_CHECK:
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableBg = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
|
|
case IDC_GLOBAL_FONT_CHECK :
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableFont = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
case IDC_GLOBAL_FONTSIZE_CHECK :
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableFontSize = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
case IDC_GLOBAL_BOLD_CHECK :
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableBold = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
|
|
case IDC_GLOBAL_ITALIC_CHECK :
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableItalic = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
case IDC_GLOBAL_UNDERLINE_CHECK :
|
|
{
|
|
GlobalOverride & glo = (NppParameters::getInstance())->getGlobalOverrideStyle();
|
|
glo.enableUnderLine = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0));
|
|
notifyDataModified();
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
|
|
default:
|
|
switch (HIWORD(wParam))
|
|
{
|
|
case CBN_SELCHANGE : // == case LBN_SELCHANGE :
|
|
{
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDC_FONT_COMBO :
|
|
updateFontName();
|
|
notifyDataModified();
|
|
apply();
|
|
break;
|
|
case IDC_FONTSIZE_COMBO :
|
|
updateFontSize();
|
|
notifyDataModified();
|
|
apply();
|
|
break;
|
|
case IDC_LANGUAGES_LIST :
|
|
{
|
|
int i = ::SendDlgItemMessage(_hSelf, LOWORD(wParam), LB_GETCURSEL, 0, 0);
|
|
if (i != LB_ERR)
|
|
{
|
|
bool prevThemeState = _isThemeDirty;
|
|
setStyleListFromLexer(i);
|
|
_isThemeDirty = prevThemeState;
|
|
}
|
|
break;
|
|
}
|
|
case IDC_STYLES_LIST :
|
|
setVisualFromStyleList();
|
|
break;
|
|
|
|
case IDC_SWITCH2THEME_COMBO :
|
|
switchToTheme();
|
|
setVisualFromStyleList();
|
|
notifyDataModified();
|
|
_isThemeDirty = false;
|
|
apply();
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
case CPN_COLOURPICKED:
|
|
{
|
|
if ((HWND)lParam == _pFgColour->getHSelf())
|
|
{
|
|
updateColour(C_FOREGROUND);
|
|
notifyDataModified();
|
|
int tabColourIndex;
|
|
if ((tabColourIndex = whichTabColourIndex()) != -1)
|
|
{
|
|
//::SendMessage(_hParent, WM_UPDATETABBARCOLOUR, tabColourIndex, _pFgColour->getColour());
|
|
TabBarPlus::setColour(_pFgColour->getColour(), (TabBarPlus::tabColourIndex)tabColourIndex);
|
|
return TRUE;
|
|
}
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
else if ((HWND)lParam == _pBgColour->getHSelf())
|
|
{
|
|
updateColour(C_BACKGROUND);
|
|
notifyDataModified();
|
|
int tabColourIndex;
|
|
if ((tabColourIndex = whichTabColourIndex()) != -1)
|
|
{
|
|
tabColourIndex = (int)tabColourIndex == TabBarPlus::inactiveText? TabBarPlus::inactiveBg : tabColourIndex;
|
|
TabBarPlus::setColour(_pBgColour->getColour(), (TabBarPlus::tabColourIndex)tabColourIndex);
|
|
return TRUE;
|
|
}
|
|
|
|
apply();
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
default :
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
//return TRUE;
|
|
}
|
|
}
|
|
|
|
}
|
|
default :
|
|
return FALSE;
|
|
}
|
|
//return FALSE;
|
|
}
|
|
|
|
void WordStyleDlg::loadLangListFromNppParam()
|
|
{
|
|
NppParameters *nppParamInst = NppParameters::getInstance();
|
|
_lsArray = nppParamInst->getLStylerArray();
|
|
_globalStyles = nppParamInst->getGlobalStylers();
|
|
|
|
// Clean up Language List
|
|
::SendDlgItemMessage(_hSelf, IDC_LANGUAGES_LIST, LB_RESETCONTENT, 0, 0);
|
|
|
|
::SendDlgItemMessage(_hSelf, IDC_LANGUAGES_LIST, LB_ADDSTRING, 0, (LPARAM)TEXT("Global Styles"));
|
|
// All the lexers
|
|
for (int i = 0 ; i < _lsArray.getNbLexer() ; i++)
|
|
{
|
|
::SendDlgItemMessage(_hSelf, IDC_LANGUAGES_LIST, LB_ADDSTRING, 0, (LPARAM)_lsArray.getLexerDescFromIndex(i));
|
|
}
|
|
|
|
const int index2Begin = 0;
|
|
::SendDlgItemMessage(_hSelf, IDC_LANGUAGES_LIST, LB_SETCURSEL, 0, index2Begin);
|
|
setStyleListFromLexer(index2Begin);
|
|
}
|
|
|
|
void WordStyleDlg::updateThemeName(generic_string themeName)
|
|
{
|
|
NppParameters *pNppParam = NppParameters::getInstance();
|
|
NppGUI & nppGUI = (NppGUI & )pNppParam->getNppGUI();
|
|
nppGUI._themeName.assign( themeName );
|
|
}
|
|
|
|
int WordStyleDlg::whichTabColourIndex()
|
|
{
|
|
int i = ::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_GETCURSEL, 0, 0);
|
|
if (i == LB_ERR)
|
|
return -1;
|
|
TCHAR styleName[128];
|
|
::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_GETTEXT, i, (LPARAM)styleName);
|
|
|
|
if (lstrcmp(styleName, TABBAR_ACTIVEFOCUSEDINDCATOR) == 0)
|
|
return (int)TabBarPlus::activeFocusedTop;
|
|
|
|
if (lstrcmp(styleName, TABBAR_ACTIVEUNFOCUSEDINDCATOR) == 0)
|
|
return (int)TabBarPlus::activeUnfocusedTop;
|
|
|
|
if (lstrcmp(styleName, TABBAR_ACTIVETEXT) == 0)
|
|
return (int)TabBarPlus::activeText;
|
|
|
|
if (lstrcmp(styleName, TABBAR_INACTIVETEXT) == 0)
|
|
return (int)TabBarPlus::inactiveText;
|
|
|
|
return -1;
|
|
}
|
|
|
|
void WordStyleDlg::updateColour(bool which)
|
|
{
|
|
Style & style = getCurrentStyler();
|
|
if (which == C_FOREGROUND)
|
|
{
|
|
style._fgColor = _pFgColour->getColour();
|
|
if (_pFgColour->isEnabled())
|
|
style._colorStyle |= COLORSTYLE_FOREGROUND;
|
|
else
|
|
style._colorStyle &= ~COLORSTYLE_FOREGROUND;
|
|
}
|
|
else //(which == C_BACKGROUND)
|
|
{
|
|
style._bgColor = _pBgColour->getColour();
|
|
if (_pBgColour->isEnabled())
|
|
style._colorStyle |= COLORSTYLE_BACKGROUND;
|
|
else
|
|
style._colorStyle &= ~COLORSTYLE_BACKGROUND;
|
|
}
|
|
}
|
|
|
|
void WordStyleDlg::updateFontSize()
|
|
{
|
|
Style & style = getCurrentStyler();
|
|
int iFontSizeSel = ::SendMessage(_hFontSizeCombo, CB_GETCURSEL, 0, 0);
|
|
|
|
TCHAR intStr[5];
|
|
if (iFontSizeSel != 0)
|
|
{
|
|
::SendMessage(_hFontSizeCombo, CB_GETLBTEXT, iFontSizeSel, (LPARAM)intStr);
|
|
if ((!intStr) || (!intStr[0]))
|
|
style._fontSize = -1;
|
|
else
|
|
{
|
|
TCHAR *finStr;
|
|
style._fontSize = generic_strtol(intStr, &finStr, 10);
|
|
if (*finStr != '\0')
|
|
style._fontSize = -1;
|
|
}
|
|
}
|
|
else
|
|
style._fontSize = 0;
|
|
}
|
|
|
|
void WordStyleDlg::updateExtension()
|
|
{
|
|
const int NB_MAX = 256;
|
|
TCHAR ext[NB_MAX];
|
|
::SendDlgItemMessage(_hSelf, IDC_USER_EXT_EDIT, WM_GETTEXT, NB_MAX, (LPARAM)ext);
|
|
_lsArray.getLexerFromIndex(_currentLexerIndex - 1).setLexerUserExt(ext);
|
|
}
|
|
|
|
void WordStyleDlg::updateUserKeywords()
|
|
{
|
|
Style & style = getCurrentStyler();
|
|
//const int NB_MAX = 2048;
|
|
//TCHAR kw[NB_MAX];
|
|
int len = ::SendDlgItemMessage(_hSelf, IDC_USER_KEYWORDS_EDIT, WM_GETTEXTLENGTH, 0, 0);
|
|
len +=1;
|
|
TCHAR *kw = new TCHAR[len];
|
|
::SendDlgItemMessage(_hSelf, IDC_USER_KEYWORDS_EDIT, WM_GETTEXT, len, (LPARAM)kw);
|
|
style.setKeywords(kw);
|
|
|
|
delete [] kw;
|
|
}
|
|
|
|
void WordStyleDlg::updateFontName()
|
|
{
|
|
Style & style = getCurrentStyler();
|
|
int iFontSel = ::SendMessage(_hFontNameCombo, CB_GETCURSEL, 0, 0);
|
|
TCHAR *fnStr = (TCHAR *)::SendMessage(_hFontNameCombo, CB_GETITEMDATA, iFontSel, 0);
|
|
style._fontName = fnStr;
|
|
}
|
|
|
|
void WordStyleDlg::updateFontStyleStatus(fontStyleType whitchStyle)
|
|
{
|
|
Style & style = getCurrentStyler();
|
|
if (style._fontStyle == -1)
|
|
style._fontStyle = 0;
|
|
|
|
int fontStyle = FONTSTYLE_UNDERLINE;
|
|
HWND hWnd = _hCheckUnderline;
|
|
|
|
if (whitchStyle == BOLD_STATUS)
|
|
{
|
|
fontStyle = FONTSTYLE_BOLD;
|
|
hWnd = _hCheckBold;
|
|
}
|
|
if (whitchStyle == ITALIC_STATUS)
|
|
{
|
|
fontStyle = FONTSTYLE_ITALIC;
|
|
hWnd = _hCheckItalic;
|
|
}
|
|
|
|
int isChecked = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
|
|
if (isChecked != BST_INDETERMINATE)
|
|
{
|
|
if (isChecked == BST_CHECKED)
|
|
style._fontStyle |= fontStyle;
|
|
else
|
|
style._fontStyle &= ~fontStyle;
|
|
}
|
|
}
|
|
|
|
void WordStyleDlg::switchToTheme()
|
|
{
|
|
int iSel = ::SendMessage(_hSwitch2ThemeCombo, CB_GETCURSEL, 0, 0);
|
|
|
|
generic_string prevThemeName(_themeName);
|
|
_themeName.clear();
|
|
|
|
NppParameters *nppParamInst = NppParameters::getInstance();
|
|
ThemeSwitcher & themeSwitcher = nppParamInst->getThemeSwitcher();
|
|
pair<generic_string, generic_string> & themeInfo = themeSwitcher.getElementFromIndex(iSel);
|
|
_themeName = themeInfo.second;
|
|
|
|
if (_isThemeDirty)
|
|
{
|
|
TCHAR themeFileName[MAX_PATH];
|
|
lstrcpy(themeFileName, prevThemeName.c_str());
|
|
PathStripPath(themeFileName);
|
|
PathRemoveExtension(themeFileName);
|
|
int mb_response =
|
|
::MessageBox( _hSelf,
|
|
TEXT(" Unsaved changes are about to be discarded!\n")
|
|
TEXT(" Do you want to save your changes before switching themes?"),
|
|
themeFileName,
|
|
MB_ICONWARNING | MB_YESNO | MB_APPLMODAL | MB_SETFOREGROUND );
|
|
if ( mb_response == IDYES )
|
|
(NppParameters::getInstance())->writeStyles(_lsArray, _globalStyles);
|
|
}
|
|
nppParamInst->reloadStylers(&_themeName[0]);
|
|
|
|
loadLangListFromNppParam();
|
|
_restoreInvalid = true;
|
|
|
|
}
|
|
|
|
void WordStyleDlg::setStyleListFromLexer(int index)
|
|
{
|
|
_currentLexerIndex = index;
|
|
|
|
// Fill out Styles listbox
|
|
// Before filling out, we clean it
|
|
::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_RESETCONTENT, 0, 0);
|
|
|
|
if (index)
|
|
{
|
|
const TCHAR *langName = _lsArray.getLexerNameFromIndex(index - 1);
|
|
const TCHAR *ext = NppParameters::getInstance()->getLangExtFromName(langName);
|
|
const TCHAR *userExt = (_lsArray.getLexerStylerByName(langName))->getLexerUserExt();
|
|
::SendDlgItemMessage(_hSelf, IDC_DEF_EXT_EDIT, WM_SETTEXT, 0, (LPARAM)(ext));
|
|
::SendDlgItemMessage(_hSelf, IDC_USER_EXT_EDIT, WM_SETTEXT, 0, (LPARAM)(userExt));
|
|
}
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_DEF_EXT_EDIT), index?SW_SHOW:SW_HIDE);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_DEF_EXT_STATIC), index?SW_SHOW:SW_HIDE);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_USER_EXT_EDIT), index?SW_SHOW:SW_HIDE);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_USER_EXT_STATIC), index?SW_SHOW:SW_HIDE);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_PLUSSYMBOL2_STATIC), index?SW_SHOW:SW_HIDE);
|
|
|
|
StyleArray & lexerStyler = index?_lsArray.getLexerFromIndex(index-1):_globalStyles;
|
|
|
|
for (int i = 0 ; i < lexerStyler.getNbStyler() ; i++)
|
|
{
|
|
Style & style = lexerStyler.getStyler(i);
|
|
::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_ADDSTRING, 0, (LPARAM)style._styleDesc);
|
|
}
|
|
::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_SETCURSEL, 0, 0);
|
|
setVisualFromStyleList();
|
|
}
|
|
|
|
void WordStyleDlg::setVisualFromStyleList()
|
|
{
|
|
showGlobalOverrideCtrls(false);
|
|
|
|
Style & style = getCurrentStyler();
|
|
|
|
// Global override style
|
|
if (style._styleDesc && lstrcmp(style._styleDesc, TEXT("Global override")) == 0)
|
|
{
|
|
showGlobalOverrideCtrls(true);
|
|
}
|
|
|
|
//--Warning text
|
|
//bool showWarning = ((_currentLexerIndex == 0) && (style._styleID == STYLE_DEFAULT));//?SW_SHOW:SW_HIDE;
|
|
|
|
COLORREF c = c = RGB(0x00, 0x00, 0xFF);
|
|
TCHAR str[256];
|
|
|
|
str[0] = '\0';
|
|
|
|
int i = ::SendDlgItemMessage(_hSelf, IDC_LANGUAGES_LIST, LB_GETCURSEL, 0, 0);
|
|
if (i == LB_ERR)
|
|
return;
|
|
::SendDlgItemMessage(_hSelf, IDC_LANGUAGES_LIST, LB_GETTEXT, i, (LPARAM)str);
|
|
|
|
i = ::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_GETCURSEL, 0, 0);
|
|
if (i == LB_ERR)
|
|
return;
|
|
TCHAR styleName[64];
|
|
::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_GETTEXT, i, (LPARAM)styleName);
|
|
|
|
lstrcat(lstrcat(str, TEXT(" : ")), styleName);
|
|
|
|
// PAD for fix a display glitch
|
|
lstrcat(str, TEXT(" "));
|
|
colourHooker.setColour(c);
|
|
::SetWindowText(_hStyleInfoStaticText, str);
|
|
|
|
//-- 2 couleurs : fg et bg
|
|
bool isEnable = false;
|
|
if (HIBYTE(HIWORD(style._fgColor)) != 0xFF)
|
|
{
|
|
_pFgColour->setColour(style._fgColor);
|
|
_pFgColour->setEnabled((style._colorStyle & COLORSTYLE_FOREGROUND) != 0);
|
|
isEnable = true;
|
|
}
|
|
enableFg(isEnable);
|
|
|
|
isEnable = false;
|
|
if (HIBYTE(HIWORD(style._bgColor)) != 0xFF)
|
|
{
|
|
_pBgColour->setColour(style._bgColor);
|
|
_pBgColour->setEnabled((style._colorStyle & COLORSTYLE_BACKGROUND) != 0);
|
|
isEnable = true;
|
|
}
|
|
enableBg(isEnable);
|
|
|
|
//-- font name
|
|
isEnable = false;
|
|
int iFontName;
|
|
if (style._fontName != NULL)
|
|
{
|
|
iFontName = ::SendMessage(_hFontNameCombo, CB_FINDSTRING, 1, (LPARAM)style._fontName);
|
|
if (iFontName == CB_ERR)
|
|
iFontName = 0;
|
|
isEnable = true;
|
|
}
|
|
else
|
|
{
|
|
iFontName = 0;
|
|
}
|
|
::SendMessage(_hFontNameCombo, CB_SETCURSEL, iFontName, 0);
|
|
enableFontName(isEnable);
|
|
|
|
//-- font size
|
|
isEnable = false;
|
|
TCHAR intStr[5] = TEXT("");
|
|
int iFontSize = 0;
|
|
if (style._fontSize != -1)
|
|
{
|
|
wsprintf(intStr, TEXT("%d"), style._fontSize);
|
|
iFontSize = ::SendMessage(_hFontSizeCombo, CB_FINDSTRING, 1, (LPARAM)intStr);
|
|
isEnable = true;
|
|
}
|
|
::SendMessage(_hFontSizeCombo, CB_SETCURSEL, iFontSize, 0);
|
|
enableFontSize(isEnable);
|
|
|
|
//-- font style : bold et italic
|
|
isEnable = false;
|
|
int isBold, isItalic, isUnderline;
|
|
if (style._fontStyle != -1)
|
|
{
|
|
isBold = (style._fontStyle & FONTSTYLE_BOLD)?BST_CHECKED:BST_UNCHECKED;
|
|
isItalic = (style._fontStyle & FONTSTYLE_ITALIC)?BST_CHECKED:BST_UNCHECKED;
|
|
isUnderline = (style._fontStyle & FONTSTYLE_UNDERLINE)?BST_CHECKED:BST_UNCHECKED;
|
|
::SendMessage(_hCheckBold, BM_SETCHECK, isBold, 0);
|
|
::SendMessage(_hCheckItalic, BM_SETCHECK, isItalic, 0);
|
|
::SendMessage(_hCheckUnderline, BM_SETCHECK, isUnderline, 0);
|
|
isEnable = true;
|
|
}
|
|
else // -1 est comme 0
|
|
{
|
|
::SendMessage(_hCheckBold, BM_SETCHECK, BST_UNCHECKED, 0);
|
|
::SendMessage(_hCheckItalic, BM_SETCHECK, BST_UNCHECKED, 0);
|
|
::SendMessage(_hCheckUnderline, BM_SETCHECK, BST_UNCHECKED, 0);
|
|
}
|
|
|
|
enableFontStyle(isEnable);
|
|
|
|
|
|
//-- Default Keywords
|
|
bool shouldBeDisplayed = style._keywordClass != -1;
|
|
if (shouldBeDisplayed)
|
|
{
|
|
LexerStyler & lexerStyler = _lsArray.getLexerFromIndex(_currentLexerIndex - 1);
|
|
|
|
NppParameters *pNppParams = NppParameters::getInstance();
|
|
LangType lType = pNppParams->getLangIDFromStr(lexerStyler.getLexerName());
|
|
if (lType == L_TXT)
|
|
{
|
|
generic_string str = lexerStyler.getLexerName();
|
|
str += TEXT(" is not defined in NppParameters::getLangIDFromStr()");
|
|
printStr(str.c_str());
|
|
}
|
|
const TCHAR *kws = pNppParams->getWordList(lType, style._keywordClass);
|
|
if (!kws)
|
|
kws = TEXT("");
|
|
::SendDlgItemMessage(_hSelf, IDC_DEF_KEYWORDS_EDIT, WM_SETTEXT, 0, (LPARAM)(kws));
|
|
|
|
const TCHAR *ckwStr = (style._keywords)?style._keywords->c_str():TEXT("");
|
|
::SendDlgItemMessage(_hSelf, IDC_USER_KEYWORDS_EDIT, WM_SETTEXT, 0, (LPARAM)(ckwStr));
|
|
}
|
|
int showOption = shouldBeDisplayed?SW_SHOW:SW_HIDE;
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_DEF_KEYWORDS_EDIT), showOption);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_USER_KEYWORDS_EDIT),showOption);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_DEF_KEYWORDS_STATIC), showOption);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_USER_KEYWORDS_STATIC),showOption);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_PLUSSYMBOL_STATIC),showOption);
|
|
|
|
redraw();
|
|
}
|
|
|
|
void WordStyleDlg::create(int dialogID, bool isRTL)
|
|
{
|
|
StaticDialog::create(dialogID, isRTL);
|
|
|
|
if ((NppParameters::getInstance())->isTransparentAvailable())
|
|
{
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_SC_TRANSPARENT_CHECK), SW_SHOW);
|
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_SC_PERCENTAGE_SLIDER), SW_SHOW);
|
|
|
|
::SendDlgItemMessage(_hSelf, IDC_SC_PERCENTAGE_SLIDER, TBM_SETRANGE, FALSE, MAKELONG(20, 200));
|
|
::SendDlgItemMessage(_hSelf, IDC_SC_PERCENTAGE_SLIDER, TBM_SETPOS, TRUE, 150);
|
|
if (!(BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_SC_PERCENTAGE_SLIDER, BM_GETCHECK, 0, 0)))
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDC_SC_PERCENTAGE_SLIDER), FALSE);
|
|
}
|
|
}
|
|
|
|
void WordStyleDlg::apply()
|
|
{
|
|
LexerStylerArray & lsa = (NppParameters::getInstance())->getLStylerArray();
|
|
StyleArray & globalStyles = (NppParameters::getInstance())->getGlobalStylers();
|
|
|
|
lsa = _lsArray;
|
|
globalStyles = _globalStyles;
|
|
|
|
::EnableWindow(::GetDlgItem(_hSelf, IDOK), FALSE);
|
|
//_isDirty = false;
|
|
//_isSync = false;
|
|
::SendMessage(_hParent, WM_UPDATESCINTILLAS, 0, 0);
|
|
}
|