[NEW_FEATURE] (Author : Christian Cuvier) characters count is added in status bar.

[NEW] a bigger chameleon picture is displayed in about dialog.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@548 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2009-10-04 13:13:45 +00:00
parent b45df0db24
commit 50f39e351d
5 changed files with 138 additions and 11 deletions

View File

@ -14,10 +14,11 @@
//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.
/*
#ifndef _WIN32_IE
#define _WIN32_IE 0x500
#endif
*/
#include "precompiledHeaders.h"
#include "Notepad_plus.h"
#include "FileDialog.h"
@ -197,7 +198,7 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLine, CmdL
nppClass.cbClsExtra = 0;
nppClass.cbWndExtra = 0;
nppClass.hInstance = _hInst;
nppClass.hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON));
nppClass.hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON));
nppClass.hCursor = ::LoadCursor(NULL, IDC_ARROW);
nppClass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_MENU));
nppClass.lpszMenuName = MAKEINTRESOURCE(IDR_M30_MENU);
@ -5179,18 +5180,137 @@ void Notepad_plus::activateDoc(int pos)
}
}
static const char utflen[] = {1,1,2,3};
size_t Notepad_plus::getSelectedCharNumber(UniMode u)
{
size_t result = 0;
if (u == uniUTF8 || u == uniCookie)
{
int numSel = _pEditView->execute(SCI_GETSELECTIONS);
for (int i=0; i < numSel; i++)
{
size_t line1 = _pEditView->execute(SCI_LINEFROMPOSITION, _pEditView->execute(SCI_GETSELECTIONNSTART, i));
size_t line2 = _pEditView->execute(SCI_LINEFROMPOSITION, _pEditView->execute(SCI_GETSELECTIONNEND, i));
for (size_t j = line1; j <= line2; j++)
{
size_t stpos = _pEditView->execute(SCI_GETLINESELSTARTPOSITION, j);
if (stpos != INVALID_POSITION)
{
size_t endpos = _pEditView->execute(SCI_GETLINESELENDPOSITION, j);
for (size_t pos = stpos; pos < endpos; pos++)
{
unsigned char c = 0xf0 & (unsigned char)_pEditView->execute(SCI_GETCHARAT, pos);
if (c >= 0xc0)
pos += utflen[(c & 0x30) >> 4];
result++;
}
}
}
}
}
else
{
for (int i=0; i < _numSel; i++)
{
size_t stpos = _pEditView->execute(SCI_GETSELECTIONNSTART, i);
size_t endpos = _pEditView->execute(SCI_GETSELECTIONNEND, i);
result += (endpos - stpos);
size_t line1 = _pEditView->execute(SCI_LINEFROMPOSITION, stpos);
size_t line2 = _pEditView->execute(SCI_LINEFROMPOSITION, endpos);
line2 -= line1;
if (_pEditView->execute(SCI_GETEOLMODE) == SC_EOL_CRLF) line2 *= 2;
result -= line2;
}
if (u != uni8Bit && u != uni7Bit) result *= 2;
}
return result;
}
size_t Notepad_plus::getCurrentDocCharCount(size_t numLines, UniMode u)
{
if (u != uniUTF8 && u != uniCookie)
{
size_t result = _pEditView->execute(SCI_GETLENGTH);
size_t lines = numLines;
if (_pEditView->execute(SCI_GETCHARAT, result-1) >= ' ') lines--;
if (_pEditView->execute(SCI_GETEOLMODE) == SC_EOL_CRLF) lines *= 2;
return result - lines;
}
else
{
size_t result = 0;
for (size_t line=0; line<numLines; line++)
{
size_t endpos = _pEditView->execute(SCI_GETLINEENDPOSITION, line);
for (size_t pos = _pEditView->execute(SCI_POSITIONFROMLINE, line); pos < endpos; pos++)
{
unsigned char c = 0xf0 & (unsigned char)_pEditView->execute(SCI_GETCHARAT, pos);
if (c >= 0xc0) pos += utflen[(c & 0x30) >> 4];
result++;
}
}
return result;
}
}
bool Notepad_plus::isFormatUnicode(UniMode u)
{
return (u != uni8Bit && u != uni7Bit && u != uniUTF8 && u != uniCookie);
}
int Notepad_plus::getBOMSize(UniMode u)
{
switch(u)
{
case uni16LE:
case uni16BE:
return 2;
case uniUTF8:
return 3;
default:
return 0;
}
}
int Notepad_plus::getSelectedAreas()
{
_numSel = _pEditView->execute(SCI_GETSELECTIONS);
if (_numSel == 1) // either 0 or 1 selection
return (_pEditView->execute(SCI_GETSELECTIONNSTART, 0) == _pEditView->execute(SCI_GETSELECTIONNEND, 0)) ? 0 : 1;
return (_pEditView->execute(SCI_SELECTIONISRECTANGLE)) ? 1 : _numSel;
}
size_t Notepad_plus::getSelectedBytes()
{
size_t result = 0;
for (int i=0; i<_numSel; i++)
result += (_pEditView->execute(SCI_GETSELECTIONNEND, i) - _pEditView->execute(SCI_GETSELECTIONNSTART, i));
return result;
}
void Notepad_plus::updateStatusBar()
{
UniMode u = _pEditView->getCurrentBuffer()->getUnicodeMode();
TCHAR strLnCol[64];
wsprintf(strLnCol, TEXT("Ln : %d Col : %d Sel : %d"),\
int areas = getSelectedAreas();
int sizeofChar = (isFormatUnicode(u)) ? 2 : 1;
wsprintf(strLnCol, TEXT("Ln : %d Col : %d Sel : %d (%d bytes) in %d ranges"),\
(_pEditView->getCurrentLineNumber() + 1), \
(_pEditView->getCurrentColumnNumber() + 1),\
(_pEditView->getSelectedByteNumber()));
getSelectedCharNumber(u), getSelectedBytes() * sizeofChar,\
areas);
_statusBar.setText(strLnCol, STATUSBAR_CUR_POS);
TCHAR strDonLen[64];
wsprintf(strDonLen, TEXT("nb char : %d nb line : %d"), _pEditView->getCurrentDocLen(), _pEditView->execute(SCI_GETLINECOUNT));
size_t numLines = _pEditView->execute(SCI_GETLINECOUNT);
wsprintf(strDonLen, TEXT("%d chars %d bytes %d lines"),\
getCurrentDocCharCount(numLines, u),\
_pEditView->execute(SCI_GETLENGTH) * sizeofChar + getBOMSize(u),\
numLines);
_statusBar.setText(strDonLen, STATUSBAR_DOC_SIZE);
_statusBar.setText(_pEditView->execute(SCI_GETOVERTYPE) ? TEXT("OVR") : TEXT("INS"), STATUSBAR_TYPING_MODE);
}
@ -7508,7 +7628,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
bool willBeShown = nppGUI._statusBarShow;
_statusBar.init(_hInst, hwnd, 6);
_statusBar.setPartWidth(STATUSBAR_DOC_SIZE, 250);
_statusBar.setPartWidth(STATUSBAR_CUR_POS, 250);
_statusBar.setPartWidth(STATUSBAR_CUR_POS, 300);
_statusBar.setPartWidth(STATUSBAR_EOF_FORMAT, 80);
_statusBar.setPartWidth(STATUSBAR_UNICODE_TYPE, 100);
_statusBar.setPartWidth(STATUSBAR_TYPING_MODE, 30);

View File

@ -535,6 +535,13 @@ private:
void activateDoc(int pos);
void updateStatusBar();
size_t getSelectedCharNumber(UniMode);
size_t getCurrentDocCharCount(size_t numLines, UniMode u);
int getSelectedAreas();
int _numSel;
size_t getSelectedBytes();
bool isFormatUnicode(UniMode);
int getBOMSize(UniMode);
void showAutoComp();
void autoCompFromCurrentFile(bool autoInsert = true);

View File

@ -584,8 +584,8 @@ IDD_ABOUTBOX DIALOGEX 0, 0, 271, 240
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_BORDER | WS_SYSMENU
FONT 8, TEXT("MS Shell Dlg"), 0, 0, 0x1
BEGIN
LTEXT NOTEPAD_PLUS_VERSION, IDC_STATIC,50,16,65,11
LTEXT UNICODE_ANSI_MODE, IDC_STATIC,120,16,65,11
LTEXT NOTEPAD_PLUS_VERSION, IDC_STATIC,60,16,65,11
LTEXT UNICODE_ANSI_MODE, IDC_STATIC,130,16,65,11
GROUPBOX "GNU General Public Licence",IDC_STATIC,19,75,231,131,BS_CENTER
DEFPUSHBUTTON "Ok",IDOK,106,215,50,14,BS_FLAT,WS_EX_STATICEDGE
LTEXT "Author :",IDC_STATIC,21,41,31,8
@ -594,7 +594,7 @@ BEGIN
LTEXT "http://notepad-plus.sourceforge.net/",IDC_HOME_ADDR,78,54,126,8
EDITTEXT IDC_LICENCE_EDIT,31,99,209,96,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL
EDITTEXT IDC_BUILD_DATETIME,150,2,150,10, ES_READONLY | NOT WS_BORDER
CONTROL "",IDI_CHAMELEON,"Static",SS_OWNERDRAW,21,10,48,48
CONTROL "",IDI_CHAMELEON,"Static",SS_OWNERDRAW,20,5,64,64
END
IDD_GOLINE DIALOGEX 26, 41, 261, 88

View File

@ -70,9 +70,9 @@ BOOL CALLBACK AboutDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
case WM_DRAWITEM :
{
HICON hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_CHAMELEON));
HICON hIcon = (HICON)::LoadImage(_hInst, MAKEINTRESOURCE(IDI_CHAMELEON), IMAGE_ICON, 48, 48, LR_DEFAULTSIZE);
DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam;
::DrawIcon(pdis->hDC, 0, 0, hIcon);
::DrawIconEx(pdis->hDC, 0, 0, hIcon, 48, 48, 0, NULL, DI_NORMAL);
return TRUE;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB