📄 ceditorwindow.cpp
字号:
disk.ExportUserSet(diskUsers);
if (!diskUsersIter.FindAdminUser(adminUser))
THROW_PGPERROR(kPGPError_ItemNotFound);
// Bail if admin not present.
if (adminUser.HasPublicKey() && !IsPrivateKeyAvailable(adminUser))
{
CMessageBox messageBox;
messageBox.Display(Get(kTellAdminUserNotUsable),
Get(kEditorMsgBoxTitle), Handle());
THROW_PGPERROR(kPGPError_UserAbort);
}
disk.Close();
// Show the wizard.
CNewUserWizard newUserWiz;
newUserWiz.Display(*mPContext, mPath, Handle());
ReFillUsersView();
}
catch (CComboError& error)
{
using namespace UCommonStrings;
ReportError(kTellDiskAddUserFailed, kEditorMsgBoxTitle, error,
Handle());
}
}
void
CEditorWindow::OnDiskOptions()
{
try
{
PGPError error = PGPclPreferences(mPContext->PGPContext(),
Handle(), kPGPclPGPdiskPrefs, mPContext->PGPKeyDB());
THROW_IF_PGPERROR(error);
}
catch (CComboError& error)
{
using namespace UCommonStrings;
ReportError(kTellDiskShowOptionsFailed, kEditorMsgBoxTitle, error,
Handle());
}
}
void
CEditorWindow::OnDiskProps()
{
try
{
CDiskProperties diskProps;
diskProps.Display(mPContext, mPath, Handle());
if (diskProps.WasReEncryptionBegun())
{
if (diskProps.WasReEncryptionCompleted())
ReFillUsersView();
else
Close();
}
}
catch (CComboError& error)
{
using namespace UCommonStrings;
ReportError(kTellDiskShowPropsFailed, kEditorMsgBoxTitle, error,
Handle());
}
}
void
CEditorWindow::OnMountDiskUsing()
{
using namespace UCommonStrings;
try
{
// Get selected users.
CPGPdiskUserSet selUsers;
mUsersView.GetSelectedUsers(&selUsers);
// Get first user.
CPGPdiskUserIter selUsersIter(selUsers);
CPGPdiskUser selUser;
selUsersIter.Next(selUser);
// Sanity checks.
if ((selUsers.Count() != 1) || selUser.IsDisabled())
{
return;
}
else if ((selUser.HasPublicKey() && !IsPrivateKeyAvailable(selUser)))
{
CMessageBox messageBox;
messageBox.Display(Get(kTellCantMountWOPrivKey),
Get(kEditorMsgBoxTitle), Handle());
return;
}
// Mount using this user.
CPGPdiskMounter mounter;
mounter.AskMount(*mPContext, mPath, Handle(), &selUser);
}
catch (CComboError& error)
{
ReportError(kTellDiskMountFailed, kEditorMsgBoxTitle, error,
Handle());
}
}
void
CEditorWindow::OnReEncryptDisk()
{
using namespace UCommonStrings;
PGPBoolean reEncryptBegun = FALSE;
try
{
if (!UEditMount::CheckWarnCanModifyDisk(*mPContext, mPath, Handle(),
Get(kEditorMsgBoxTitle)))
{
THROW_PGPERROR(kPGPError_UserAbort);
}
CReEncryptWizard reEncryptWiz;
reEncryptWiz.Display(*mPContext, mPath, Handle(), &reEncryptBegun);
ReFillUsersView();
}
catch (CComboError& error)
{
ReportError(kTellDiskReEncryptFailed, kEditorMsgBoxTitle, error,
Handle());
// Failed/interrupted conversions result in window close.
if (reEncryptBegun)
Close();
}
}
void
CEditorWindow::OnUnmountDisk()
{
try
{
CPGPdiskUnmounter diskUnmounter;
diskUnmounter.AskUnmount(*mPContext, mPath);
UpdateUIState();
}
catch (CComboError& error)
{
using namespace UCommonStrings;
ReportError(kTellDiskUnmountFailed, kEditorMsgBoxTitle, error,
Handle());
}
}
BOOL
CEditorWindow::OnCommand(
PGPUInt16 notifyCode,
PGPUInt16 itemId,
HWND ctrl)
{
using namespace UCommonStrings;
switch (itemId)
{
case IDM_MOUNT:
try
{
CPGPdiskMounter mounter;
mounter.AskMount(*mPContext, mPath, Handle());
}
catch (CComboError& error)
{
ReportError(kTellDiskMountFailed, kEditorMsgBoxTitle, error,
Handle());
}
return TRUE;
case IDM_UNMOUNT:
OnUnmountDisk();
return TRUE;
case IDM_REENCRYPT:
OnReEncryptDisk();
return TRUE;
case IDM_DISKPROPS:
OnDiskProps();
return TRUE;
case IDM_DISKOPTIONS:
OnDiskOptions();
return TRUE;
case IDM_EXIT:
Close();
return TRUE;
case IDM_ADDUSER:
OnAddUser();
return TRUE;
case IDM_REMOVEUSER:
ModifyUsers(kRemoveUsersOp);
return TRUE;
case IDM_MOUNTUSING:
OnMountDiskUsing();
return TRUE;
case IDM_CHANGEPASS:
ModifyUsers(kChangePassOp);
return TRUE;
case IDM_SETASADMIN:
ModifyUsers(kSetAsAdminOp);
return TRUE;
case IDM_TOGGLEDISABLE:
ModifyUsers(kToggleDisableOp);
return TRUE;
case IDM_TOGGLERO:
ModifyUsers(kToggleROOp);
return TRUE;
case IDM_VIEWRO:
{
CMenu subMenu;
mMainMenu.GetSubMenu(kIndexViewMenu, subMenu);
mPPrefs->diskUserColumns ^= CDiskUsersView::kReadOnlyColFlag;
mUsersView.SetActiveColumns(mPPrefs->diskUserColumns);
UpdateUIState();
return TRUE;
}
case IDM_VIEWKIND:
{
CMenu subMenu;
mMainMenu.GetSubMenu(kIndexViewMenu, subMenu);
mPPrefs->diskUserColumns ^= CDiskUsersView::kKindColFlag;
mUsersView.SetActiveColumns(mPPrefs->diskUserColumns);
UpdateUIState();
return TRUE;
}
case IDM_VIEWTOOLBAR:
{
CMenu subMenu;
mMainMenu.GetSubMenu(kIndexViewMenu, subMenu);
mPPrefs->showToolbar = !mPPrefs->showToolbar;
UpdateUIState();
return TRUE;
}
case IDM_HELP_CONTENTS:
CHelpShower::ShowContents(Handle());
return TRUE;
case IDM_ABOUTPGP:
PGPclHelpAbout(mPContext->PGPContext(), Handle(), NULL, NULL, NULL);
return TRUE;
case IDM_LOOKUP:
mUsersView.LookupUnknownKeys();
break;
}
return CWindow::OnCommand(notifyCode, itemId, ctrl);
}
void
CEditorWindow::OnContextMenu(HWND menuWnd, CPoint coords)
{
if (menuWnd == mTBRebar.Handle())
{
CMenu menu(UModuleInstance::Get(),
MAKEINTRESOURCE(IDR_TOOLBAR_MENU));
CMenu subMenu;
menu.GetSubMenu(0, subMenu);
subMenu.CheckMenuItem(IDM_LARGEBUTTONS, MF_BYCOMMAND |
(mPPrefs->largeButtons ? MF_CHECKED : MF_UNCHECKED));
subMenu.CheckMenuItem(IDM_SHOWTEXT, MF_BYCOMMAND |
(mPPrefs->showText ? MF_CHECKED : MF_UNCHECKED));
subMenu.CheckMenuItem(IDM_SHOWTOOLTIPS, MF_BYCOMMAND |
(mPPrefs->toolTips ? MF_CHECKED : MF_UNCHECKED));
PGPUInt32 cmdID = subMenu.TrackPopupMenu(TPM_NONOTIFY |
TPM_RETURNCMD | TPM_RIGHTBUTTON, coords.X(), coords.Y(),
Handle());
switch (cmdID)
{
case IDM_LARGEBUTTONS:
mPPrefs->largeButtons = !mPPrefs->largeButtons;
break;
case IDM_SHOWTEXT:
mPPrefs->showText = !mPPrefs->showText;
break;
case IDM_SHOWTOOLTIPS:
mPPrefs->toolTips = !mPPrefs->toolTips;
break;
}
DestroyToolbar();
CreateToolbar();
UpdateUIState();
}
else if (menuWnd == mUsersView.Handle())
{
CMenu menu(UModuleInstance::Get(),
MAKEINTRESOURCE(IDR_DISKUSERS_MENU));
CMenu subMenu;
menu.GetSubMenu(0, subMenu);
UpdateUIState(subMenu);
subMenu.TrackPopupMenu(TPM_RIGHTBUTTON, coords.X(), coords.Y(),
Handle());
}
else
{
CWindow::OnContextMenu(menuWnd, coords);
}
}
PGPInt32
CEditorWindow::OnCreate(LPCREATESTRUCT pCS)
{
PGPInt32 result = CWindow::OnCreate(pCS);
if (result == -1)
return result;
PGPclEnsureWindowIsOnMonitor(Handle(), NULL);
CreateStatusBar();
CreateToolbar();
CreateUsersView();
UpdateUIState();
mTimerID = SetTimer(Handle(), 1, kTimerMs, NULL);
return 0;
}
void
CEditorWindow::OnDestroy()
{
KillTimer(Handle(), mTimerID);
DestroyToolbar();
mMainMenu.Clear();
try
{
WriteWindowPrefs();
}
catch (CComboError&) { }
CWindow::OnDestroy();
}
void
CEditorWindow::OnGetMinMaxInfo(LPMINMAXINFO pMMI)
{
pMMI->ptMinTrackSize.x = kMinWidth;
pMMI->ptMinTrackSize.y = kMinHeight;
}
void
CEditorWindow::OnHelp(HELPINFO *pInfo)
{
CHelpShower::ShowContents(Handle());
}
void
CEditorWindow::OnMenuSelect(PGPUInt16 ctrlId, PGPUInt16 flags, HMENU hwndMenu)
{
CWindow::OnMenuSelect(ctrlId, flags, hwndMenu);
ShowStatusBarHelp(ctrlId);
}
PGPUInt32
CEditorWindow::OnNotify(PGPUInt16 ctrlId, LPNMHDR pNMHDR)
{
switch (pNMHDR->code)
{
case LVN_ITEMCHANGED:
{
UpdateUIState();
}
break;
case LVN_KEYDOWN:
{
NMLVKEYDOWN *pLVKD = reinterpret_cast<NMLVKEYDOWN *>(pNMHDR);
switch (pLVKD->wVKey)
{
case VK_DELETE:
if (mUsersView.GetSelectedCount() > 0)
ModifyUsers(kRemoveUsersOp);
break;
}
}
break;
case NM_DBLCLK:
{
NMITEMACTIVATE *pNMIA = reinterpret_cast<NMITEMACTIVATE *>(pNMHDR);
if (mUsersView.GetSelectedCount() == 1)
OnMountDiskUsing();
}
break;
case TBN_HOTITEMCHANGE:
{
NMTBHOTITEM *pTBHI = reinterpret_cast<NMTBHOTITEM *>(pNMHDR);
if (pTBHI->dwFlags & HICF_MOUSE)
ShowStatusBarHelp(pTBHI->idNew);
}
break;
case TTN_GETDISPINFO:
{
using namespace UCommonStrings;
NMTTDISPINFO *pTTDI = reinterpret_cast<NMTTDISPINFO *>(pNMHDR);
switch (pNMHDR->idFrom)
{
case IDM_MOUNT:
pTTDI->lpszText = const_cast<char *>(Get(
kEditorMountTooltip));
break;
case IDM_UNMOUNT:
pTTDI->lpszText = const_cast<char *>(Get(
kEditorUnmountTooltip));
break;
case IDM_DISKPROPS:
pTTDI->lpszText = const_cast<char *>(
Get(kEditorPropertiesTooltip));
break;
case IDM_ADDUSER:
pTTDI->lpszText = const_cast<char *>(
Get(kEditorAddUserTooltip));
break;
case IDM_REMOVEUSER:
pTTDI->lpszText = const_cast<char *>(
Get(kEditorRemUserTooltip));
break;
default:
pTTDI->lpszText = "";
break;
}
}
break;
default:
return CWindow::OnNotify(ctrlId, pNMHDR);
}
return 0;
}
void
CEditorWindow::OnSetFocus()
{
CWindow::OnSetFocus();
mUsersView.SetFocus();
}
void
CEditorWindow::OnSize(PGPUInt16 flags, PGPUInt16 width, PGPUInt16 height)
{
CWindow::OnSize(flags, width, height);
mStatusBar.SendMessage(WM_SIZE, CurMsg().WParam(), CurMsg().LParam());
ResizeToolbar();
ResizeUsersView();
}
void
CEditorWindow::OnTimer(PGPUInt32 timerID, TIMERPROC *timerProc)
{
CWindow::OnTimer(timerID, timerProc);
UpdateUIState();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -