Make column headers of ASCII panel & doc switcher apply to dark mode
Close #10082
This commit is contained in:
parent
5398df2275
commit
36ea7e8b3e
|
@ -66,14 +66,15 @@ void ListView::init(HINSTANCE hInst, HWND parent)
|
||||||
if (_columnInfos.size())
|
if (_columnInfos.size())
|
||||||
{
|
{
|
||||||
LVCOLUMN lvColumn;
|
LVCOLUMN lvColumn;
|
||||||
lvColumn.mask = LVCF_TEXT | LVCF_WIDTH;
|
lvColumn.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
|
||||||
|
lvColumn.fmt = HDF_OWNERDRAW;
|
||||||
|
|
||||||
short i = 0;
|
short i = 0;
|
||||||
for (auto it = _columnInfos.begin(); it != _columnInfos.end(); ++it)
|
for (auto it = _columnInfos.begin(); it != _columnInfos.end(); ++it)
|
||||||
{
|
{
|
||||||
lvColumn.cx = static_cast<int>(it->_width);
|
lvColumn.cx = static_cast<int>(it->_width);
|
||||||
lvColumn.pszText = const_cast<TCHAR *>(it->_label.c_str());
|
lvColumn.pszText = const_cast<TCHAR *>(it->_label.c_str());
|
||||||
ListView_InsertColumn(_hSelf, ++i, &lvColumn);
|
ListView_InsertColumn(_hSelf, ++i, &lvColumn); // index is not 0 based but 1 based
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,6 +169,33 @@ std::vector<size_t> ListView::getCheckedIndexes() const
|
||||||
|
|
||||||
LRESULT ListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
LRESULT ListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
switch (Message)
|
||||||
|
{
|
||||||
|
case WM_DRAWITEM:
|
||||||
|
{
|
||||||
|
DRAWITEMSTRUCT* pdis = (DRAWITEMSTRUCT*)lParam;
|
||||||
|
|
||||||
|
|
||||||
|
HDITEM hdi;
|
||||||
|
TCHAR lpBuffer[256];
|
||||||
|
|
||||||
|
hdi.mask = HDI_TEXT;
|
||||||
|
hdi.pszText = lpBuffer;
|
||||||
|
hdi.cchTextMax = 256;
|
||||||
|
|
||||||
|
Header_GetItem(pdis->hwndItem, pdis->itemID, &hdi);
|
||||||
|
|
||||||
|
COLORREF textColor = RGB(0, 0, 0);
|
||||||
|
if (NppDarkMode::isEnabled())
|
||||||
|
textColor = NppDarkMode::getDarkerTextColor();
|
||||||
|
|
||||||
|
SetTextColor(pdis->hDC, textColor);
|
||||||
|
SetBkMode(pdis->hDC, TRANSPARENT);
|
||||||
|
|
||||||
|
::DrawText(pdis->hDC, lpBuffer, lstrlen(lpBuffer), &(pdis->rcItem), DT_SINGLELINE | DT_VCENTER | DT_CENTER);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
return ::CallWindowProc(_defaultProc, hwnd, Message, wParam, lParam);
|
return ::CallWindowProc(_defaultProc, hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,40 @@ INT_PTR CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NM_CUSTOMDRAW:
|
||||||
|
{
|
||||||
|
static bool becomeDarkMode = false;
|
||||||
|
static bool becomeLightMode = false;
|
||||||
|
HWND hHeader = ListView_GetHeader(_listView.getHSelf());
|
||||||
|
if (NppDarkMode::isEnabled())
|
||||||
|
{
|
||||||
|
if (!becomeDarkMode)
|
||||||
|
{
|
||||||
|
NppDarkMode::setExplorerTheme(hHeader, false);
|
||||||
|
becomeDarkMode = true;
|
||||||
|
}
|
||||||
|
becomeLightMode = false;
|
||||||
|
|
||||||
|
auto nmtbcd = reinterpret_cast<LPNMTBCUSTOMDRAW>((LPNMHDR)lParam);
|
||||||
|
SetBkMode(nmtbcd->nmcd.hdc, TRANSPARENT);
|
||||||
|
FillRect(nmtbcd->nmcd.hdc, &nmtbcd->nmcd.rc, NppDarkMode::getBackgroundBrush());
|
||||||
|
nmtbcd->clrText = RGB(255, 255, 255);
|
||||||
|
SetTextColor(nmtbcd->nmcd.hdc, RGB(255, 255, 255));
|
||||||
|
SetWindowLongPtr(_hSelf, DWLP_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!becomeLightMode)
|
||||||
|
{
|
||||||
|
NppDarkMode::setExplorerTheme(hHeader, true);
|
||||||
|
becomeLightMode = true;
|
||||||
|
}
|
||||||
|
becomeDarkMode = false;
|
||||||
|
SetWindowLongPtr(_hSelf, DWLP_MSGRESULT, CDRF_DODEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,39 @@ INT_PTR CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam,
|
||||||
{
|
{
|
||||||
switch (((LPNMHDR)lParam)->code)
|
switch (((LPNMHDR)lParam)->code)
|
||||||
{
|
{
|
||||||
|
case NM_CUSTOMDRAW:
|
||||||
|
{
|
||||||
|
static bool becomeDarkMode = false;
|
||||||
|
static bool becomeLightMode = false;
|
||||||
|
HWND hHeader = ListView_GetHeader(_fileListView.getHSelf());
|
||||||
|
if (NppDarkMode::isEnabled())
|
||||||
|
{
|
||||||
|
if (!becomeDarkMode)
|
||||||
|
{
|
||||||
|
NppDarkMode::setExplorerTheme(hHeader, false);
|
||||||
|
becomeDarkMode = true;
|
||||||
|
}
|
||||||
|
becomeLightMode = false;
|
||||||
|
|
||||||
|
auto nmtbcd = reinterpret_cast<LPNMTBCUSTOMDRAW>((LPNMHDR)lParam);
|
||||||
|
SetBkMode(nmtbcd->nmcd.hdc, TRANSPARENT);
|
||||||
|
FillRect(nmtbcd->nmcd.hdc, &nmtbcd->nmcd.rc, NppDarkMode::getBackgroundBrush());
|
||||||
|
nmtbcd->clrText = RGB(255, 255, 255);
|
||||||
|
SetTextColor(nmtbcd->nmcd.hdc, RGB(255, 255, 255));
|
||||||
|
SetWindowLongPtr(_hSelf, DWLP_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!becomeLightMode)
|
||||||
|
{
|
||||||
|
NppDarkMode::setExplorerTheme(hHeader, true);
|
||||||
|
becomeLightMode = true;
|
||||||
|
}
|
||||||
|
becomeDarkMode = false;
|
||||||
|
SetWindowLongPtr(_hSelf, DWLP_MSGRESULT, CDRF_DODEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case NM_DBLCLK:
|
case NM_DBLCLK:
|
||||||
{
|
{
|
||||||
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
|
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
|
||||||
|
|
|
@ -84,6 +84,32 @@ void VerticalFileSwitcherListView::destroy()
|
||||||
|
|
||||||
LRESULT VerticalFileSwitcherListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
LRESULT VerticalFileSwitcherListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
switch (Message)
|
||||||
|
{
|
||||||
|
case WM_DRAWITEM:
|
||||||
|
{
|
||||||
|
DRAWITEMSTRUCT* pdis = (DRAWITEMSTRUCT*)lParam;
|
||||||
|
|
||||||
|
HDITEM hdi;
|
||||||
|
TCHAR lpBuffer[256];
|
||||||
|
|
||||||
|
hdi.mask = HDI_TEXT;
|
||||||
|
hdi.pszText = lpBuffer;
|
||||||
|
hdi.cchTextMax = 256;
|
||||||
|
|
||||||
|
Header_GetItem(pdis->hwndItem, pdis->itemID, &hdi);
|
||||||
|
|
||||||
|
COLORREF textColor = RGB(0, 0, 0);
|
||||||
|
if (NppDarkMode::isEnabled())
|
||||||
|
textColor = NppDarkMode::getDarkerTextColor();
|
||||||
|
|
||||||
|
SetTextColor(pdis->hDC, textColor);
|
||||||
|
SetBkMode(pdis->hDC, TRANSPARENT);
|
||||||
|
|
||||||
|
::DrawText(pdis->hDC, lpBuffer, lstrlen(lpBuffer), &(pdis->rcItem), DT_SINGLELINE | DT_VCENTER | DT_LEFT);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
return ::CallWindowProc(_defaultProc, hwnd, Message, wParam, lParam);
|
return ::CallWindowProc(_defaultProc, hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,11 +129,12 @@ void VerticalFileSwitcherListView::initList()
|
||||||
RECT rc;
|
RECT rc;
|
||||||
::GetClientRect(_hParent, &rc);
|
::GetClientRect(_hParent, &rc);
|
||||||
int totalWidth = rc.right - rc.left;
|
int totalWidth = rc.right - rc.left;
|
||||||
|
const int extColWidth =80;
|
||||||
|
|
||||||
if (columnCount == 0)
|
if (columnCount == 0)
|
||||||
{
|
{
|
||||||
generic_string nameStr = pNativeSpeaker->getAttrNameStr(TEXT("Name"), FS_ROOTNODE, FS_CLMNNAME);
|
generic_string nameStr = pNativeSpeaker->getAttrNameStr(TEXT("Name"), FS_ROOTNODE, FS_CLMNNAME);
|
||||||
insertColumn(nameStr.c_str(), (isExtColumn ? totalWidth - 50 : totalWidth), 0);
|
insertColumn(nameStr.c_str(), (isExtColumn ? totalWidth - extColWidth : totalWidth), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isExtColumn)
|
if (isExtColumn)
|
||||||
|
@ -117,14 +144,14 @@ void VerticalFileSwitcherListView::initList()
|
||||||
lvc.mask = LVCF_WIDTH;
|
lvc.mask = LVCF_WIDTH;
|
||||||
SendMessage(_hSelf, LVM_GETCOLUMN, 0, reinterpret_cast<LPARAM>(&lvc));
|
SendMessage(_hSelf, LVM_GETCOLUMN, 0, reinterpret_cast<LPARAM>(&lvc));
|
||||||
|
|
||||||
if (lvc.cx + 50 > totalWidth)
|
if (lvc.cx + extColWidth > totalWidth)
|
||||||
{
|
{
|
||||||
lvc.cx = totalWidth - 50;
|
lvc.cx = totalWidth - extColWidth;
|
||||||
SendMessage(_hSelf, LVM_SETCOLUMN, 0, reinterpret_cast<LPARAM>(&lvc));
|
SendMessage(_hSelf, LVM_SETCOLUMN, 0, reinterpret_cast<LPARAM>(&lvc));
|
||||||
}
|
}
|
||||||
|
|
||||||
generic_string extStr = pNativeSpeaker->getAttrNameStr(TEXT("Ext."), FS_ROOTNODE, FS_CLMNEXT);
|
generic_string extStr = pNativeSpeaker->getAttrNameStr(TEXT("Ext."), FS_ROOTNODE, FS_CLMNEXT);
|
||||||
insertColumn(extStr.c_str(), 50, 1);
|
insertColumn(extStr.c_str(), extColWidth, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,10 +380,11 @@ void VerticalFileSwitcherListView::insertColumn(const TCHAR *name, int width, in
|
||||||
{
|
{
|
||||||
LVCOLUMN lvColumn;
|
LVCOLUMN lvColumn;
|
||||||
|
|
||||||
lvColumn.mask = LVCF_TEXT | LVCF_WIDTH;
|
lvColumn.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
|
||||||
lvColumn.cx = width;
|
lvColumn.cx = width;
|
||||||
lvColumn.pszText = (TCHAR *)name;
|
lvColumn.pszText = (TCHAR *)name;
|
||||||
ListView_InsertColumn(_hSelf, index, &lvColumn);
|
lvColumn.fmt = HDF_OWNERDRAW;
|
||||||
|
ListView_InsertColumn(_hSelf, index, &lvColumn); // index is not 0 based but 1 based
|
||||||
}
|
}
|
||||||
|
|
||||||
void VerticalFileSwitcherListView::resizeColumns(int totalWidth)
|
void VerticalFileSwitcherListView::resizeColumns(int totalWidth)
|
||||||
|
|
Loading…
Reference in New Issue