Files
easy7zip/CPP/7zip/UI/FileManager/PanelKey.cpp
Igor Pavlov a36c48cece 23.01
2023-12-22 17:17:05 +00:00

358 lines
6.4 KiB
C++
Executable File

// PanelKey.cpp
#include "StdAfx.h"
#include "Panel.h"
#include "HelpUtils.h"
#include "../../PropID.h"
#include "App.h"
using namespace NWindows;
// #define kHelpTopic "FM/index.htm"
struct CVKeyPropIDPair
{
WORD VKey;
PROPID PropID;
};
static const CVKeyPropIDPair g_VKeyPropIDPairs[] =
{
{ VK_F3, kpidName },
{ VK_F4, kpidExtension },
{ VK_F5, kpidMTime },
{ VK_F6, kpidSize },
{ VK_F7, kpidNoProperty }
};
static int FindVKeyPropIDPair(WORD vKey)
{
for (unsigned i = 0; i < Z7_ARRAY_SIZE(g_VKeyPropIDPairs); i++)
if (g_VKeyPropIDPairs[i].VKey == vKey)
return (int)i;
return -1;
}
bool CPanel::OnKeyDown(LPNMLVKEYDOWN keyDownInfo, LRESULT &result)
{
if (keyDownInfo->wVKey == VK_TAB && keyDownInfo->hdr.hwndFrom == _listView)
{
_panelCallback->OnTab();
return false;
}
const bool alt = IsKeyDown(VK_MENU);
const bool ctrl = IsKeyDown(VK_CONTROL);
// const bool leftCtrl = IsKeyDown(VK_LCONTROL);
const bool rightCtrl = IsKeyDown(VK_RCONTROL);
const bool shift = IsKeyDown(VK_SHIFT);
result = 0;
if (keyDownInfo->wVKey >= '0' &&
keyDownInfo->wVKey <= '9' &&
(rightCtrl || alt))
{
const unsigned index = (unsigned)(keyDownInfo->wVKey - '0');
if (shift)
{
SetBookmark(index);
return true;
}
else
{
OpenBookmark(index);
return true;
}
}
if ((keyDownInfo->wVKey == VK_F2 ||
keyDownInfo->wVKey == VK_F1)
&& alt && !ctrl && !shift)
{
_panelCallback->SetFocusToPath(keyDownInfo->wVKey == VK_F1 ? 0 : 1);
return true;
}
if ((keyDownInfo->wVKey == VK_F9) && !alt && !ctrl && !shift)
{
g_App.SwitchOnOffOnePanel();
}
if (keyDownInfo->wVKey >= VK_F3 && keyDownInfo->wVKey <= VK_F12 && ctrl)
{
const int index = FindVKeyPropIDPair(keyDownInfo->wVKey);
if (index >= 0)
SortItemsWithPropID(g_VKeyPropIDPairs[index].PropID);
}
switch (keyDownInfo->wVKey)
{
case VK_SHIFT:
{
_selectionIsDefined = false;
_prevFocusedItem = _listView.GetFocusedItem();
break;
}
/*
case VK_F1:
{
// ShowHelpWindow(NULL, kHelpTopic);
break;
}
*/
case VK_F2:
{
if (!alt && !ctrl &&!shift)
{
RenameFile();
return true;
}
break;
}
case VK_F3:
{
if (!alt && !ctrl && !shift)
{
EditItem(false);
return true;
}
break;
}
case VK_F4:
{
if (!alt && !ctrl && !shift)
{
EditItem(true);
return true;
}
if (!alt && !ctrl && shift)
{
CreateFile();
return true;
}
break;
}
case VK_F5:
{
if (!alt && !ctrl)
{
_panelCallback->OnCopy(false, shift);
return true;
}
break;
}
case VK_F6:
{
if (!alt && !ctrl)
{
_panelCallback->OnCopy(true, shift);
return true;
}
break;
}
case VK_F7:
{
if (!alt && !ctrl && !shift)
{
/* we can process F7 via menu ACCELERATOR.
But menu loading can be slow in case of UNC paths and system menu.
So we use don't use ACCELERATOR */
CreateFolder();
return true;
}
break;
}
case VK_DELETE:
{
DeleteItems(!shift);
return true;
}
case VK_INSERT:
{
if (!alt)
{
if (ctrl && !shift)
{
EditCopy();
return true;
}
if (shift && !ctrl)
{
EditPaste();
return true;
}
if (!shift && !ctrl && _mySelectMode)
{
OnInsert();
return true;
}
}
return false;
}
case VK_DOWN:
{
if (shift)
OnArrowWithShift();
return false;
}
case VK_UP:
{
if (alt)
_panelCallback->OnSetSameFolder();
else if (shift)
OnArrowWithShift();
return false;
}
case VK_RIGHT:
{
if (alt)
_panelCallback->OnSetSubFolder();
else if (shift)
OnArrowWithShift();
return false;
}
case VK_LEFT:
{
if (alt)
_panelCallback->OnSetSubFolder();
else if (shift)
OnArrowWithShift();
return false;
}
case VK_NEXT:
{
if (ctrl && !alt && !shift)
{
// EnterToFocused();
return true;
}
break;
}
case VK_ADD:
{
if (alt)
SelectByType(true);
else if (shift)
SelectAll(true);
else if (!ctrl)
SelectSpec(true);
return true;
}
case VK_SUBTRACT:
{
if (alt)
SelectByType(false);
else if (shift)
SelectAll(false);
else
SelectSpec(false);
return true;
}
/*
case VK_DELETE:
CommandDelete();
return 0;
case VK_F1:
CommandHelp();
return 0;
*/
case VK_BACK:
OpenParentFolder();
return true;
/*
case VK_DIVIDE:
case '\\':
case '/':
case VK_OEM_5:
{
// OpenRootFolder();
OpenDrivesFolder();
return true;
}
*/
case 'A':
if (ctrl)
{
SelectAll(true);
return true;
}
return false;
case 'X':
if (ctrl)
{
EditCut();
return true;
}
return false;
case 'C':
if (ctrl)
{
EditCopy();
return true;
}
return false;
case 'V':
if (ctrl)
{
EditPaste();
return true;
}
return false;
case 'N':
if (ctrl)
{
CreateFile();
return true;
}
return false;
case 'R':
if (ctrl)
{
OnReload();
return true;
}
return false;
case 'W':
if (ctrl)
{
// SendMessage();
PostMessage(g_HWND, WM_COMMAND, IDCLOSE, 0);
return true;
}
return false;
case 'Z':
if (ctrl)
{
ChangeComment();
return true;
}
return false;
case '1':
case '2':
case '3':
case '4':
if (ctrl)
{
const unsigned styleIndex = (unsigned)(keyDownInfo->wVKey - '1');
SetListViewMode(styleIndex);
return true;
}
return false;
case VK_MULTIPLY:
{
InvertSelection();
return true;
}
case VK_F12:
if (alt && !ctrl && !shift)
{
FoldersHistory();
return true;
}
}
return false;
}