⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ceditorwindow.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:

		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 + -