📄 pkmenu.c
字号:
g_bX509CertRequestEnabled &&
PKIsActionEnabled (ppks, KM_ADDCERTIFICATE));
// "Servers" menu
hMP = GetSubMenu (ppks->hmenuKeyMan, MENU_SERVER);
DeleteMenu (hMP, SENDTOSERVERPOS, MF_BYPOSITION);
LoadString (g_hinst, IDS_SENDTOSERVERMENU, sz, sizeof(sz));
if (PKIsActionEnabled (ppks, KM_SENDTOSERVER))
{
ppks->hmenuKeyserver = sCreateKeyserverMenu (ppks);
InsertMenu (hMP, SENDTOSERVERPOS, MF_BYPOSITION|MF_POPUP|MF_STRING,
(UINT)ppks->hmenuKeyserver, sz);
}
else
{
InsertMenu (hMP, SENDTOSERVERPOS, MF_BYPOSITION|MF_STRING,
IDM_SENDTOSERVERPOPUP, sz);
sSetItem (hMP, IDM_SENDTOSERVERPOPUP, FALSE);
}
sSetItem (hMP, IDM_GETFROMSERVER,
PKIsActionEnabled (ppks, KM_GETFROMSERVER));
sSetItem (hMP, IDM_RETRIEVECERTIFICATE,
PKIsActionEnabled (ppks, KM_RETRIEVECERTIFICATE));
// "Groups" menu
hMP = GetSubMenu (ppks->hmenuKeyMan, MENU_GROUPS);
if (ppks->bGroupsVisible)
{
sSetItem (hMP, IDM_GROUPPROPERTIES,
PGPgmIsActionEnabled (hGM, GM_PROPERTIES));
}
else
sSetItem (hMP, IDM_GROUPPROPERTIES, FALSE);
}
// ______________________________________________________
//
// Put up appropriate context menu on basis of key idx
// of currently focused item. Called in response to right
// mouse click.
//
// hWnd = handle of parent window
// uSelFlags = bits indicate what types of objects are selected
// x, y = mouse position when right button clicked (screen coords)
VOID
PKContextMenu (
PGPKEYSSTRUCT* ppks,
HWND hWnd,
INT x,
INT y)
{
HMENU hMC;
HMENU hMCS;
HMENU hMenuTrackPopup;
HKEYLIST hKL;
HGROUPMAN hGM;
UINT uAddIndex;
CHAR sz[64];
if (ppks->bGroupsFocused)
{
hGM = ppks->hGM;
switch (ppks->uGroupSelectionFlags) {
case 0 :
hMC = NULL;
break;
case PGPGM_GROUPFLAG :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUGROUP));
sSetItem (hMC, IDM_PASTEKEY,
PGPgmIsActionEnabled (hGM, GM_PASTE));
sSetItem (hMC, IDM_DELETEKEY,
PGPgmIsActionEnabled (hGM, GM_DELETE));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPgmIsActionEnabled (hGM, GM_GETFROMSERVER));
sSetItem (hMC, IDM_GROUPPROPERTIES,
PGPgmIsActionEnabled (hGM, GM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
case PGPGM_KEYFLAG :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUGROUPKEY));
sSetItem (hMC, IDM_PASTEKEY,
PGPgmIsActionEnabled (hGM, GM_PASTE));
sSetItem (hMC, IDM_DELETEKEY,
PGPgmIsActionEnabled (hGM, GM_DELETE));
sSetItem (hMC, IDM_FINDKEY,
PGPgmIsActionEnabled (hGM, GM_LOCATEKEYS));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPgmIsActionEnabled (hGM, GM_GETFROMSERVER));
sSetItem (hMC, IDM_PROPERTIES,
PGPgmIsActionEnabled (hGM, GM_LOCATEKEYS));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
default :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUGROUP));
sSetItem (hMC, IDM_PASTEKEY, FALSE);
sSetItem (hMC, IDM_DELETEKEY,
PGPgmIsActionEnabled (hGM, GM_DELETE));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPgmIsActionEnabled (hGM, GM_GETFROMSERVER));
sSetItem (hMC, IDM_GROUPPROPERTIES, FALSE);
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
}
}
else
{
hKL = ppks->hKL;
switch (ppks->uKeySelectionFlags) {
case 0 :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUNONE));
sSetItem (hMC, IDM_PASTEKEY,
PKIsActionEnabled (ppks, KM_PASTE));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
case kPGPclKeyList_Key :
if (ppks->uFlags & PK_KEYWINDOW)
{
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUKEY));
uAddIndex = 6;
}
else
{
if (ppks->bLocalKeySet)
{
hMC = LoadMenu (g_hinst,
MAKEINTRESOURCE (IDR_MENUKEYSEARCHLOCAL));
uAddIndex = 6;
}
else
{
hMC = LoadMenu (g_hinst,
MAKEINTRESOURCE (IDR_MENUKEYSEARCHSERVER));
uAddIndex = 7;
}
sSetItem (hMC, IDM_ADDTOMAIN,
PKIsActionEnabled (ppks, KM_ADDTOMAIN));
}
hMenuTrackPopup = GetSubMenu (hMC, 0);
sSetItem (hMC, IDM_COPYKEY,
PKIsActionEnabled (ppks, KM_COPY));
sSetItem (hMC, IDM_PASTEKEY,
PKIsActionEnabled (ppks, KM_PASTE));
sSetItem (hMC, IDM_DELETEKEY,
PKIsActionEnabled (ppks, KM_DELETE));
sSetItem (hMC, IDM_DELETESERVER,
PKIsActionEnabled (ppks, KM_DELETEFROMSERVER));
sSetItem (hMC, IDM_CERTIFYKEY,
PKIsActionEnabled (ppks, KM_CERTIFY));
sSetItem (hMC, IDM_ENABLEKEY,
PKIsActionEnabled (ppks, KM_ENABLE));
if (ppks->bLocalKeySet)
sSetItem (hMC, IDM_DISABLEKEY,
PKIsActionEnabled (ppks, KM_DISABLE));
else
sSetItem (hMC, IDM_DISABLEKEY,
PKIsActionEnabled (ppks, KM_DISABLEONSERVER));
sSetItem (hMC, IDM_SPLITKEY,
PKIsActionEnabled (ppks, KM_SPLITKEY));
sSetItem (hMC, IDM_REVOKEKEY,
PKIsActionEnabled (ppks, KM_REVOKE));
sSetItem (hMC, IDM_REVERIFY,
PKIsActionEnabled (ppks, KM_REVERIFYSIGS));
sSetItem (hMC, IDM_SETASDEFAULT,
PKIsActionEnabled (ppks, KM_SETASDEFAULT));
sSetItem (hMC, IDM_EXPORTKEYS,
PKIsActionEnabled (ppks, KM_EXPORT));
LoadString (g_hinst, IDS_SENDTOSERVERMENU, sz, sizeof(sz));
if (PKIsActionEnabled (ppks, KM_SENDTOSERVER))
{
ppks->hmenuKeyserver = sCreateKeyserverMenu (ppks);
InsertMenu (hMenuTrackPopup, 13,
MF_BYPOSITION|MF_POPUP|MF_STRING,
(UINT)ppks->hmenuKeyserver, sz);
}
else
{
InsertMenu (hMC, 13, MF_BYPOSITION|MF_STRING,
IDM_SENDTOSERVERPOPUP, sz);
sSetItem (hMenuTrackPopup, IDM_SENDTOSERVERPOPUP, FALSE);
}
sSetItem (hMC, IDM_GETFROMSERVER,
PKIsActionEnabled (ppks, KM_GETFROMSERVER));
sSetItem (hMC, IDM_RETRIEVECERTIFICATE,
PKIsActionEnabled (ppks, KM_RETRIEVECERTIFICATE));
sSetItem (hMC, IDM_PROPERTIES,
PKIsActionEnabled (ppks, KM_PROPERTIES));
// take care of "Add" popup submenu
hMCS = GetSubMenu (hMenuTrackPopup, uAddIndex);
sSetItem (hMCS, IDM_ADDUSERID,
PKIsActionEnabled (ppks, KM_ADDUSERID));
sSetItem (hMCS, IDM_ADDPHOTOID,
PKIsActionEnabled (ppks, KM_ADDPHOTOID));
sSetItem (hMCS, IDM_ADDREVOKER,
PKIsActionEnabled (ppks, KM_ADDREVOKER));
sSetItem (hMCS, IDM_ADDCERTIFICATE,
g_bX509CertRequestEnabled &&
PKIsActionEnabled (ppks, KM_ADDCERTIFICATE));
break;
case kPGPclKeyList_UserID :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUUID));
sSetItem (hMC, IDM_DELETEKEY,
PKIsActionEnabled (ppks, KM_DELETE));
sSetItem (hMC, IDM_CERTIFYKEY,
PKIsActionEnabled (ppks, KM_CERTIFY));
sSetItem (hMC, IDM_SETASDEFAULT,
PKIsActionEnabled (ppks, KM_SETASPRIMARY));
sSetItem (hMC, IDM_PROPERTIES,
PKIsActionEnabled (ppks, KM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
// take care of "Add" popup submenu
uAddIndex = 4;
hMCS = GetSubMenu (hMenuTrackPopup, uAddIndex);
sSetItem (hMCS, IDM_ADDCERTIFICATE,
g_bX509CertRequestEnabled &&
PKIsActionEnabled (ppks, KM_ADDCERTIFICATE));
break;
case kPGPclKeyList_Signature :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUCERT));
sSetItem (hMC, IDM_COPYKEY,
PKIsActionEnabled (ppks, KM_COPY));
sSetItem (hMC, IDM_DELETEKEY,
PKIsActionEnabled (ppks, KM_DELETE));
sSetItem (hMC, IDM_REVOKEKEY,
PKIsActionEnabled (ppks, KM_REVOKE));
sSetItem (hMC, IDM_GETFROMSERVER,
PKIsActionEnabled (ppks, KM_GETFROMSERVER));
sSetItem (hMC, IDM_EXPORTKEYS,
PKIsActionEnabled (ppks, KM_EXPORT));
sSetItem (hMC, IDM_PROPERTIES,
PKIsActionEnabled (ppks, KM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
default :
hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUPROMISCUOUS));
sSetItem (hMC, IDM_DELETEKEY,
PKIsActionEnabled (ppks, KM_DELETE));
sSetItem (hMC, IDM_CERTIFYKEY,
PKIsActionEnabled (ppks, KM_CERTIFY));
sSetItem (hMC, IDM_PROPERTIES,
PKIsActionEnabled (ppks, KM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
}
}
if (!hMC) return;
TrackPopupMenu (hMenuTrackPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
x, y, 0, hWnd, NULL);
DestroyMenu (hMC);
}
// ______________________________________________________
//
// Put up keyserver menu for send to server button in toolbar
//
// hWnd = handle of parent window
VOID
PKToolbarKeyserverMenu (
PGPKEYSSTRUCT* ppks,
HWND hWnd,
LPRECT lprect)
{
HMENU hMenuKeyserver;
hMenuKeyserver = sCreateKeyserverMenu (ppks);
TrackPopupMenu (hMenuKeyserver,
TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON,
lprect->left +2, lprect->bottom +4, 0, hWnd, NULL);
DestroyMenu (hMenuKeyserver);
}
// ___________________________________________________
//
// perform the specified action
PGPError
PKPerformAction (
PGPKEYSSTRUCT* ppks,
ULONG ulAction)
{
if (!ppks)
return kPGPError_BadParams;
if (!PKIsActionEnabled (ppks, ulAction))
return kPGPError_UnknownRequest;
switch (ulAction) {
case KM_COPY :
PKCopyKeys (ppks, NULL);
break;
case KM_PASTE :
PKPasteKeys (ppks);
break;
case KM_DELETE :
PKDeleteObject (ppks);
break;
case KM_SELECTALL :
PGPclKeyListSetTree (ppks->hKL, kPGPclSelectAll, NULL);
break;
case KM_UNSELECTALL :
PGPclKeyListSetTree (ppks->hKL, kPGPclDeselectAll, NULL);
break;
case KM_COLLAPSEALL :
PGPclKeyListSetTree (ppks->hKL, kPGPclSelectAll, NULL);
PGPclKeyListSetTree (ppks->hKL, kPGPclCollapse, NULL);
PGPclKeyListSetTree (ppks->hKL, kPGPclDeselectAll, NULL);
break;
case KM_COLLAPSESEL :
PGPclKeyListSetTree (ppks->hKL, kPGPclCollapse, NULL);
break;
case KM_EXPANDALL :
PGPclKeyListSetTree (ppks->hKL, kPGPclSelectAll, NULL);
PGPclKeyListSetTree (ppks->hKL, kPGPclExpand, NULL);
PGPclKeyListSetTree (ppks->hKL, kPGPclDeselectAll, NULL);
break;
case KM_EXPANDSEL :
PGPclKeyListSetTree (ppks->hKL, kPGPclExpand, NULL);
break;
case KM_CERTIFY :
PKCertifyKeyOrUserID (ppks);
break;
case KM_ENABLE :
PKEnableKey (ppks);
break;
case KM_DISABLE :
PKDisableKey (ppks);
break;
case KM_ADDUSERID :
PKAddUserToKey (ppks);
break;
case KM_ADDPHOTOID :
PKAddPhotoToKey (ppks);
break;
case KM_ADDREVOKER :
PKAddRevoker (ppks);
break;
case KM_ADDCERTIFICATE :
PKAddCertificate (ppks);
break;
case KM_REVOKE :
{
PGPUInt32 uSel;
PGPclKeyListGetSelectionInfo (ppks->hKL, NULL, NULL, NULL, &uSel);
if (uSel == kPGPclKeyList_Signature)
PKRevokeCert (ppks);
else
PKRevokeKey (ppks);
break;
}
case KM_SETASDEFAULT :
PKSetDefaultKey (ppks);
break;
case KM_SETASPRIMARY :
PKSetPrimaryUserID (ppks);
break;
case KM_IMPORT :
PKInputFile (ppks, NULL);
break;
case KM_EXPORT :
PKExportKeys (ppks, NULL);
break;
case KM_PROPERTIES :
PKObjectProperties (ppks);
break;
case KM_SENDTOSERVER :
PKSendToServer (ppks, kPGPclSpecifiedServer);
break;
case KM_GETFROMSERVER :
PKGetFromServer (ppks);
break;
case KM_RETRIEVECERTIFICATE :
PKRetrieveCertificate (ppks);
break;
case KM_DELETEFROMSERVER :
PKDeleteFromServer (ppks);
break;
case KM_DISABLEONSERVER :
PKDisableOnServer (ppks);
break;
case KM_ADDTOMAIN :
PKAddSelectedToMain (ppks);
break;
case KM_REVERIFYSIGS :
PKReverifySigs (ppks);
break;
case KM_SPLITKEY :
PKSplitKey (ppks);
break;
case KM_RECONSTRUCTKEY :
PKReconstructKey (ppks);
break;
case KM_SENDTORECONSERVER :
PKSendToReconServer (ppks);
break;
case KM_SENDTOTOKEN :
PKSendToToken (ppks);
break;
case KM_SENDVIAEMAIL :
PKSendViaEmail (ppks);
break;
}
return kPGPError_NoErr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -