📄 userdefinedialog.cpp
字号:
//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 "UserDefineDialog.h"
#include "ScintillaEditView.h"
#include "Parameters.h"
#include "resource.h"
UserLangContainer * SharedParametersDialog::_pUserLang = NULL;
ScintillaEditView * SharedParametersDialog::_pScintilla = NULL;
void SharedParametersDialog::initControls()
{
for (int i = 0 ; i < _nbGroup ; i++)
{
HWND hFgColourStaticText = ::GetDlgItem(_hSelf, _fgStatic[i]);
HWND hBgColourStaticText = ::GetDlgItem(_hSelf, _bgStatic[i]);
_pFgColour[i] = new ColourPicker;
_pFgColour[i]->init(_hInst, _hSelf);
_pFgColour[i]->setColour(black);
_pBgColour[i] = new ColourPicker;
_pBgColour[i]->init(_hInst, _hSelf);
_pBgColour[i]->setColour(white);
POINT p1, p2;
alignWith(hFgColourStaticText, _pFgColour[i]->getHSelf(), ALIGNPOS_RIGHT, p1);
alignWith(hBgColourStaticText, _pBgColour[i]->getHSelf(), ALIGNPOS_RIGHT, p2);
p1.x = p2.x = ((p1.x > p2.x)?p1.x:p2.x) + 10;
p1.y -= 4; p2.y -= 4;
::MoveWindow(_pFgColour[i]->getHSelf(), p1.x, p1.y, 25, 25, TRUE);
::MoveWindow(_pBgColour[i]->getHSelf(), p2.x, p2.y, 25, 25, TRUE);
_pFgColour[i]->display();
_pBgColour[i]->display();
//for the font size combos
HWND hFontSizeCombo = ::GetDlgItem(_hSelf, _fontSizeCombo[i]);
for(int j = 0 ; j < sizeof(fontSizeStrs)/3 ; j++)
{
::SendMessage(hFontSizeCombo, CB_ADDSTRING, 0, (LPARAM)fontSizeStrs[j]);
}
//for the font name combos
HWND hFontNameCombo = ::GetDlgItem(_hSelf, _fontNameCombo[i]);
const std::vector<std::string> & fontlist = (NppParameters::getInstance())->getFontList();
for (int j = 0 ; j < fontlist.size() ; j++)
{
int k = ::SendMessage(hFontNameCombo, CB_ADDSTRING, 0, (LPARAM)fontlist[j].c_str());
::SendMessage(hFontNameCombo, CB_SETITEMDATA, k, (LPARAM)fontlist[j].c_str());
}
}
}
void SharedParametersDialog::styleUpdate(const Style & style, ColourPicker *pFgColourPicker, ColourPicker *pBgColourPicker,
int fontComboId, int fontSizeComboId, int boldCheckId, int italicCheckId)
{
pFgColourPicker->setColour((style._fgColor == -1)?black:style._fgColor);
pFgColourPicker->redraw();
pBgColourPicker->setColour((style._bgColor == -1)?white:style._bgColor);
pBgColourPicker->redraw();
HWND hFontCombo = ::GetDlgItem(_hSelf, fontComboId);
int i = ::SendMessage(hFontCombo, CB_FINDSTRINGEXACT, -1, (LPARAM)style._fontName);
if (i == CB_ERR)
i = 0;
::SendMessage(hFontCombo, CB_SETCURSEL, i, 0);
char size[10];
if (style._fontSize == -1)
size[0] = '\0';
else
itoa(style._fontSize, size, 10);
hFontCombo = ::GetDlgItem(_hSelf, fontSizeComboId);
i = ::SendMessage(hFontCombo, CB_FINDSTRINGEXACT, -1, (LPARAM)size);
if (i != CB_ERR)
::SendMessage(hFontCombo, CB_SETCURSEL, i, 0);
int isBold = 0;
int isItalic = 0;
if (style._fontStyle != -1)
{
isBold = (style._fontStyle & FONTSTYLE_BOLD)?BST_CHECKED:BST_UNCHECKED;
isItalic = (style._fontStyle & FONTSTYLE_ITALIC)?BST_CHECKED:BST_UNCHECKED;
}
::SendDlgItemMessage(_hSelf, boldCheckId, BM_SETCHECK, isBold, 0);
::SendDlgItemMessage(_hSelf, italicCheckId, BM_SETCHECK, isItalic, 0);
}
int fgStatic[] = {IDC_DEFAULT_FG_STATIC, IDC_FOLDEROPEN_FG_STATIC, IDC_FOLDERCLOSE_FG_STATIC};
int bgStatic[] = {IDC_DEFAULT_BG_STATIC, IDC_FOLDEROPEN_BG_STATIC, IDC_FOLDERCLOSE_BG_STATIC};
int fontSizeCombo[] = {IDC_DEFAULT_FONTSIZE_COMBO, IDC_FOLDEROPEN_FONTSIZE_COMBO, IDC_FOLDERCLOSE_FONTSIZE_COMBO};
int fontNameCombo[] = {IDC_DEFAULT_FONT_COMBO, IDC_FOLDEROPEN_FONT_COMBO, IDC_FOLDERCLOSE_FONT_COMBO};
FolderStyleDialog::FolderStyleDialog() : SharedParametersDialog(3)
{
memcpy(_fgStatic, fgStatic, sizeof(fgStatic));
memcpy(_bgStatic, bgStatic, sizeof(bgStatic));
memcpy(_fontSizeCombo, fontSizeCombo, sizeof(fontSizeCombo));
memcpy(_fontNameCombo, fontNameCombo, sizeof(fontNameCombo));
}
void FolderStyleDialog::setKeywords2List(int ctrlID)
{
int index;
if (ctrlID == IDC_FOLDEROPEN_EDIT)
index = 1;
else if (ctrlID == IDC_FOLDERCLOSE_EDIT)
index = 2;
else
index = -1;
if (index != -1)
::GetDlgItemText(_hSelf, ctrlID, _pUserLang->_keywordLists[index], max_char);
}
BOOL CALLBACK SharedParametersDialog::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message)
{
case WM_INITDIALOG :
{
initControls();
return TRUE;
}
case WM_COMMAND :
{
if (HIWORD(wParam) == EN_CHANGE)
{
setKeywords2List(LOWORD(wParam));
if (_pScintilla->getCurrentDocType() == L_USER)
_pScintilla->defineDocType(L_USER);
return TRUE;
}
else if (HIWORD(wParam) == CBN_SELCHANGE)
{
bool isFontSize;
int k = getGroupIndexFromCombo(LOWORD(wParam), isFontSize);
if (k != -1)
{
int i = ::SendDlgItemMessage(_hSelf, LOWORD(wParam), CB_GETCURSEL, 0, 0);
Style & style = _pUserLang->_styleArray.getStyler(k);
if (isFontSize)
{
char intStr[5];
if (i != 0)
{
::SendDlgItemMessage(_hSelf, LOWORD(wParam), CB_GETLBTEXT, i, (LPARAM)intStr);
if ((!intStr) || (!intStr[0]))
style._fontSize = -1;
else
{
char *finStr;
style._fontSize = strtol(intStr, &finStr, 10);
if (*finStr != '\0')
style._fontSize = -1;
}
}
}
else
{
style._fontName = (char *)::SendDlgItemMessage(_hSelf, LOWORD(wParam), CB_GETITEMDATA, i, 0);
}
if (_pScintilla->getCurrentDocType() == L_USER)
_pScintilla->defineDocType(L_USER);
return TRUE;
}
}
else if (HIWORD(wParam) == CPN_COLOURPICKED)
{
bool isFG;
ColourPicker *pCP;
int index = getStylerIndexFromCP((HWND)lParam, isFG, &pCP);
if (index != -1)
{
Style & style = _pUserLang->_styleArray.getStyler(index);
if (isFG)
style._fgColor = pCP->getColour();
else
style._bgColor = pCP->getColour();
}
// A cause de "#define CPN_COLOURPICKED (BN_CLICKED)"
// Nous sommes oblig閟 de mettre ce bloc ici !!!
// A modifier !!!
else
{
bool isBold;
int k = getGroupeIndexFromCheck(wParam, isBold);
if (k != -1)
{
Style & style = _pUserLang->_styleArray.getStyler(k);
if (style._fontStyle == -1)
style._fontStyle = 0;
style._fontStyle ^= (isBold)?BOLD_MASK:ITALIC_MASK;
//::MessageBox(NULL, "Bingo!!!", "", MB_OK);
}
}
if (_pScintilla->getCurrentDocType() == L_USER)
_pScintilla->defineDocType(L_USER);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -