mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-23 13:54:54 +02:00
[BUG_FIXED] Fix incorrect insertion under the different codepage.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@746 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
28fa54583e
commit
6a468a8741
@ -1457,6 +1457,9 @@ void Notepad_plus::checkDocState()
|
|||||||
enableConvertMenuItems(curBuf->getFormat());
|
enableConvertMenuItems(curBuf->getFormat());
|
||||||
checkUnicodeMenuItems(/*curBuf->getUnicodeMode()*/);
|
checkUnicodeMenuItems(/*curBuf->getUnicodeMode()*/);
|
||||||
checkLangsMenu(-1);
|
checkLangsMenu(-1);
|
||||||
|
|
||||||
|
if (_pAnsiCharPanel)
|
||||||
|
_pAnsiCharPanel->switchEncoding();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad_plus::checkUndoState()
|
void Notepad_plus::checkUndoState()
|
||||||
|
@ -59,27 +59,123 @@ void ListView::init(HINSTANCE hInst, HWND parent)
|
|||||||
|
|
||||||
LVCOLUMN lvColumn;
|
LVCOLUMN lvColumn;
|
||||||
lvColumn.mask = LVCF_TEXT|LVCF_WIDTH;
|
lvColumn.mask = LVCF_TEXT|LVCF_WIDTH;
|
||||||
lvColumn.cx = 45;
|
|
||||||
|
|
||||||
|
lvColumn.cx = 45;
|
||||||
lvColumn.pszText = TEXT("Value");
|
lvColumn.pszText = TEXT("Value");
|
||||||
ListView_InsertColumn(_hSelf, 0, &lvColumn);
|
ListView_InsertColumn(_hSelf, 0, &lvColumn);
|
||||||
|
|
||||||
lvColumn.pszText = TEXT("Char");
|
lvColumn.cx = 70;
|
||||||
|
lvColumn.pszText = TEXT("Character");
|
||||||
ListView_InsertColumn(_hSelf, 1, &lvColumn);
|
ListView_InsertColumn(_hSelf, 1, &lvColumn);
|
||||||
|
|
||||||
lvColumn.pszText = TEXT("Ctrl char");
|
|
||||||
lvColumn.cx = 90;
|
|
||||||
ListView_InsertColumn(_hSelf, 2, &lvColumn);
|
|
||||||
|
|
||||||
//ListView_SetImageList(_hSelf, hImaLst, LVSIL_SMALL);
|
|
||||||
|
|
||||||
//ListView_SetItemState(_hSelf, _currentIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
||||||
//ListView_SetBkColor(_hSelf, lightYellow);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListView::resetValues(int codepage)
|
void ListView::resetValues(int codepage)
|
||||||
{
|
{
|
||||||
|
if (codepage == -1)
|
||||||
|
codepage = 0;
|
||||||
|
|
||||||
|
if (_codepage == codepage)
|
||||||
|
return;
|
||||||
|
|
||||||
ListView_DeleteAllItems(_hSelf);
|
ListView_DeleteAllItems(_hSelf);
|
||||||
|
setValues(codepage);
|
||||||
|
}
|
||||||
|
|
||||||
|
generic_string ListView::getAscii(unsigned char value)
|
||||||
|
{
|
||||||
|
switch (value)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return TEXT("NULL");
|
||||||
|
case 1:
|
||||||
|
return TEXT("SOH");
|
||||||
|
case 2:
|
||||||
|
return TEXT("STX");
|
||||||
|
case 3:
|
||||||
|
return TEXT("ETX");
|
||||||
|
case 4:
|
||||||
|
return TEXT("EOT");
|
||||||
|
case 5:
|
||||||
|
return TEXT("ENQ");
|
||||||
|
case 6:
|
||||||
|
return TEXT("ACK");
|
||||||
|
case 7:
|
||||||
|
return TEXT("BEL");
|
||||||
|
case 8:
|
||||||
|
return TEXT("BS");
|
||||||
|
case 9:
|
||||||
|
return TEXT("TAB");
|
||||||
|
case 10:
|
||||||
|
return TEXT("LF");
|
||||||
|
case 11:
|
||||||
|
return TEXT("VT");
|
||||||
|
case 12:
|
||||||
|
return TEXT("FF");
|
||||||
|
case 13:
|
||||||
|
return TEXT("CR");
|
||||||
|
case 14:
|
||||||
|
return TEXT("SO");
|
||||||
|
case 15:
|
||||||
|
return TEXT("SI");
|
||||||
|
case 16:
|
||||||
|
return TEXT("DLE");
|
||||||
|
case 17:
|
||||||
|
return TEXT("DC1");
|
||||||
|
case 18:
|
||||||
|
return TEXT("DC2");
|
||||||
|
case 19:
|
||||||
|
return TEXT("DC3");
|
||||||
|
case 20:
|
||||||
|
return TEXT("DC4");
|
||||||
|
case 21:
|
||||||
|
return TEXT("NAK");
|
||||||
|
case 22:
|
||||||
|
return TEXT("SYN");
|
||||||
|
case 23:
|
||||||
|
return TEXT("ETB");
|
||||||
|
case 24:
|
||||||
|
return TEXT("CAN");
|
||||||
|
case 25:
|
||||||
|
return TEXT("EM");
|
||||||
|
case 26:
|
||||||
|
return TEXT("SUB");
|
||||||
|
case 27:
|
||||||
|
return TEXT("ESC");
|
||||||
|
case 28:
|
||||||
|
return TEXT("FS");
|
||||||
|
case 29:
|
||||||
|
return TEXT("GS");
|
||||||
|
case 30:
|
||||||
|
return TEXT("RS");
|
||||||
|
case 31:
|
||||||
|
return TEXT("US");
|
||||||
|
case 32:
|
||||||
|
return TEXT("Space");
|
||||||
|
case 127:
|
||||||
|
return TEXT("DEL");
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
TCHAR charStr[10];
|
||||||
|
#ifdef UNICODE
|
||||||
|
char ascii[2];
|
||||||
|
ascii[0] = value;
|
||||||
|
ascii[1] = '\0';
|
||||||
|
MultiByteToWideChar(_codepage, 0, ascii, -1, charStr, sizeof(charStr));
|
||||||
|
#else
|
||||||
|
charStr[0] = (unsigned char)i;
|
||||||
|
charStr[1] = '\0';
|
||||||
|
#endif
|
||||||
|
return charStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return TEXT("");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::setValues(int codepage)
|
||||||
|
{
|
||||||
|
_codepage = codepage;
|
||||||
|
|
||||||
for (int i = 0 ; i < 256 ; i++)
|
for (int i = 0 ; i < 256 ; i++)
|
||||||
{
|
{
|
||||||
LVITEM item;
|
LVITEM item;
|
||||||
@ -91,19 +187,12 @@ void ListView::resetValues(int codepage)
|
|||||||
item.iSubItem = 0;
|
item.iSubItem = 0;
|
||||||
ListView_InsertItem(_hSelf, &item);
|
ListView_InsertItem(_hSelf, &item);
|
||||||
|
|
||||||
char ascii[8];
|
generic_string s = getAscii((unsigned char)i);
|
||||||
ascii[0] = (unsigned char)i;
|
ListView_SetItemText(_hSelf, i, 1, (LPTSTR)s.c_str());
|
||||||
ascii[1] = '\0';
|
|
||||||
#ifdef UNICODE
|
|
||||||
wchar_t wCharStr[10];
|
|
||||||
MultiByteToWideChar(codepage, 0, ascii, -1, wCharStr, sizeof(wCharStr));
|
|
||||||
ListView_SetItemText(_hSelf, i, 1, wCharStr);
|
|
||||||
#else
|
|
||||||
codepage = 0; // make it compile in ANSI Release mode
|
|
||||||
ListView_SetItemText(_hSelf, i, 1, ascii);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ListView::destroy()
|
void ListView::destroy()
|
||||||
{
|
{
|
||||||
::DestroyWindow(_hSelf);
|
::DestroyWindow(_hSelf);
|
||||||
|
@ -29,9 +29,13 @@ public:
|
|||||||
virtual void init(HINSTANCE hInst, HWND hwnd);
|
virtual void init(HINSTANCE hInst, HWND hwnd);
|
||||||
virtual void destroy();
|
virtual void destroy();
|
||||||
|
|
||||||
void resetValues(int codepage = 0);
|
void setValues(int codepage = 0);
|
||||||
|
void resetValues(int codepage);
|
||||||
|
|
||||||
|
generic_string getAscii(unsigned char value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
int _codepage;
|
||||||
WNDPROC _defaultProc;
|
WNDPROC _defaultProc;
|
||||||
LRESULT runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
|
LRESULT runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
@ -21,6 +21,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#include "ansiCharPanel.h"
|
#include "ansiCharPanel.h"
|
||||||
#include "ScintillaEditView.h"
|
#include "ScintillaEditView.h"
|
||||||
|
|
||||||
|
void AnsiCharPanel::switchEncoding()
|
||||||
|
{
|
||||||
|
int codepage = (*_ppEditView)->getCurrentBuffer()->getEncoding();
|
||||||
|
_listView.resetValues(codepage);
|
||||||
|
}
|
||||||
|
|
||||||
BOOL CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
BOOL CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
switch (message)
|
switch (message)
|
||||||
@ -32,7 +38,7 @@ BOOL CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPa
|
|||||||
|
|
||||||
_listView.init(_hInst, _hSelf);
|
_listView.init(_hInst, _hSelf);
|
||||||
int codepage = (*_ppEditView)->getCurrentBuffer()->getEncoding();
|
int codepage = (*_ppEditView)->getCurrentBuffer()->getEncoding();
|
||||||
_listView.resetValues(codepage==-1?0:codepage);
|
_listView.setValues(codepage==-1?0:codepage);
|
||||||
_listView.display();
|
_listView.display();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -58,10 +64,19 @@ BOOL CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPa
|
|||||||
char multiByteStr[10];
|
char multiByteStr[10];
|
||||||
int codepage = (*_ppEditView)->getCurrentBuffer()->getEncoding();
|
int codepage = (*_ppEditView)->getCurrentBuffer()->getEncoding();
|
||||||
if (codepage == -1)
|
if (codepage == -1)
|
||||||
|
{
|
||||||
|
bool isUnicode = ((*_ppEditView)->execute(SCI_GETCODEPAGE) == SC_CP_UTF8);
|
||||||
|
if (isUnicode)
|
||||||
|
{
|
||||||
|
MultiByteToWideChar(0, 0, charStr, -1, wCharStr, sizeof(wCharStr));
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, wCharStr, -1, multiByteStr, sizeof(multiByteStr), NULL, NULL);
|
||||||
|
}
|
||||||
|
else // ANSI
|
||||||
{
|
{
|
||||||
multiByteStr[0] = charStr[0];
|
multiByteStr[0] = charStr[0];
|
||||||
multiByteStr[1] = charStr[1];
|
multiByteStr[1] = charStr[1];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MultiByteToWideChar(codepage, 0, charStr, -1, wCharStr, sizeof(wCharStr));
|
MultiByteToWideChar(codepage, 0, charStr, -1, wCharStr, sizeof(wCharStr));
|
||||||
|
@ -47,6 +47,8 @@ public:
|
|||||||
_hParent = parent2set;
|
_hParent = parent2set;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void switchEncoding();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual BOOL CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
virtual BOOL CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
IDD_ANSIASCII_PANEL DIALOGEX 26, 41, 142, 324
|
IDD_ANSIASCII_PANEL DIALOGEX 26, 41, 142, 324
|
||||||
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_WINDOWEDGE
|
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_WINDOWEDGE
|
||||||
CAPTION "ANSI Characters"
|
CAPTION "ASCII Insertion Panel"
|
||||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
//LISTBOX IDC_LIST_ANSICHAR,50,44,78,120,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
//LISTBOX IDC_LIST_ANSICHAR,50,44,78,120,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||||
|
@ -348,7 +348,6 @@ BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam
|
|||||||
else if (pNMHDR->code == NM_DBLCLK)
|
else if (pNMHDR->code == NM_DBLCLK)
|
||||||
{
|
{
|
||||||
::PostMessage(_hSelf, WM_COMMAND, IDOK, 0);
|
::PostMessage(_hSelf, WM_COMMAND, IDOK, 0);
|
||||||
//activateCurrent();
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else if (pNMHDR->code == LVN_KEYDOWN)
|
else if (pNMHDR->code == LVN_KEYDOWN)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user