Example #1
0
static void _RGISGrpPanelNewCBK (Widget widget,RGISGrpPanel *grpPanel,XmAnyCallbackStruct *callData)

	{
	char *groupName;
	DBDataset *dataset = UIDataset ();
	DBObjData *dbData  = dataset->Data ();
	DBObjTable *groupTable = dbData->Table (DBrNGroups);
	DBObjTableField *group;
	DBObjRecord *record;

	if ((groupName = UIGetString ((char *) "Group Name",16)) == (char *) NULL) return;
	if (groupTable == (DBObjTable *) NULL)
		{
		DBObjTable *items  = dbData->Table (DBrNItems);
		DBObjectLIST<DBObjTable> *tables  = dbData->Tables ();

		DBTableFieldDefinition fieldDefs [] =	{
					DBTableFieldDefinition (groupName,	DBTableFieldInt,(char *) 	"%1d",sizeof (DBByte)),
					DBTableFieldDefinition () };
		tables->Add (groupTable = new DBObjTable (DBrNGroups,fieldDefs));
		grpPanel->Groups (groupTable->Fields ());
		group = groupTable->Field (groupName);
		for (record = items->First ();record != (DBObjRecord *) NULL;record = items->Next ())
			group->Int (groupTable->Add (record->Name ()),true);
		}
	else
		{
		groupTable->AddField (group = new DBObjTableField (groupName,DBTableFieldInt,"%1d",sizeof (DBByte)));
		for (record = groupTable->First ();record != (DBObjRecord *) NULL;record = groupTable->Next ())
			group->Int (record,true);
		}
	grpPanel->Add (group);
	}
Example #2
0
void RGISEditGridRenameLayerCBK (Widget widget, RGISWorkspace *workspace,XmAnyCallbackStruct *callData)

	{
	char *layerName;
	DBDataset *dataset = UIDataset ();
	DBObjData *dbData = dataset->Data ();
	DBGridIF *gridIF;

	if ((layerName = UIGetString ((char *) "Layer Name",DBStringLength)) == (char *) NULL) return;
	gridIF= new DBGridIF (dbData);
	gridIF->RenameLayer (layerName);
	delete gridIF;
	workspace->CurrentData (dbData);
	}
int CExtImpl::EncryptSignMessage(HWND hwnd,
								 IMessage *pmsg,
								 RECIPIENTDIALOGSTRUCT *prds,
								 PGPOptionListRef *pSignOptions)
{
	IStream *pstrmBody = 0;
	STATSTG StreamStats;
	DWORD dwInSize;
	UINT nOutSize;
	BOOL bExchangeUser = FALSE;
	char *pInput;
	char *pOutput = NULL;
	LPMAPITABLE ptableAttach = 0;
	SizedSPropTagArray(1, tagaTable) = {
			1, {PR_ATTACH_NUM}};
	SRowSet *prAttach = 0;
	PGPError nError = kPGPError_NoErr;
	HRESULT hr;
	char szName[256];
	char szFile[256];

	UIGetString(szName, sizeof(szName), IDS_LOGNAME);
	UIGetString(szFile, sizeof(szFile), IDS_DLL);

	pmsg->GetAttachmentTable(0, &ptableAttach);
	HrQueryAllRows(ptableAttach, (SPropTagArray *)&tagaTable, 
					NULL, NULL, 0, &prAttach);

	hr = pmsg->OpenProperty(PR_BODY, &IID_IStream, STGM_READ, 
			0, (IUnknown**)&pstrmBody);
	if (FAILED(hr))
	{
		UIDisplayStringID(hwnd, IDS_E_NOBODY);
		ptableAttach->Release();
		return kPGPError_ItemNotFound;
	}
		
	pstrmBody->Stat(&StreamStats, STATFLAG_NONAME);
	dwInSize = StreamStats.cbSize.LowPart;
		
	pInput = (char *) calloc(dwInSize+1, sizeof(char));
	if (!pInput)
	{
		UIDisplayStringID(hwnd, IDS_E_NOMEMORY);
		pstrmBody->Release();
		ptableAttach->Release();
		return kPGPError_OutOfMemory;
	}
	pstrmBody->Read(pInput, dwInSize, &dwInSize);
	pstrmBody->Release();

	pInput[dwInSize] = 0;

	nError = EncryptSignBuffer(UIGetInstance(), hwnd, _pgpContext, 
				_tlsContext, szName, szFile, pInput, 
				dwInSize, prds, NULL, pSignOptions, (VOID ** )&pOutput, 
				&nOutSize, _bEncrypt, _bSign, FALSE);

	if ((dwInSize > 0) && IsntPGPError(nError))
	{
		LARGE_INTEGER li = {0,0};
		ULARGE_INTEGER uli = {1,0};
		BOOL fPartied;

		pmsg->OpenProperty(PR_BODY, &IID_IStream, STGM_READWRITE, 
				MAPI_MODIFY, (IUnknown**)&pstrmBody);
		
		pstrmBody->Seek(li, STREAM_SEEK_SET, NULL);
		pstrmBody->Write("\0", 1, NULL);
		pstrmBody->SetSize(uli);
		pstrmBody->Commit(STGC_DEFAULT);
		pstrmBody->Release();
		RTFSync(pmsg, RTF_SYNC_BODY_CHANGED, &fPartied);

		pmsg->OpenProperty(PR_BODY, &IID_IStream, STGM_READWRITE, 
			MAPI_MODIFY, (IUnknown**)&pstrmBody);
	}

	if (IsntPGPError(nError))
	{
		LARGE_INTEGER li = {0,0};
		ULARGE_INTEGER uli = {nOutSize + prAttach->cRows, 0};
		BOOL fPartied;

		pstrmBody->Seek(li, STREAM_SEEK_SET, NULL);
		pstrmBody->Write(pOutput, nOutSize, NULL);
		pstrmBody->SetSize(uli);
		pstrmBody->Commit(STGC_DEFAULT);
		pstrmBody->Release();
		RTFSync(pmsg, RTF_SYNC_BODY_CHANGED, &fPartied);
		PGPFreeData(pOutput);
	}
		
	free(pInput);

	if (IsntPGPError(nError))
	{
		hr = pmsg->OpenProperty(PR_BODY_HTML, &IID_IStream, STGM_READWRITE, 
				MAPI_MODIFY, (IUnknown**)&pstrmBody);
		
		if (FAILED(hr))
			goto NoBodyHTML;
		else
		{
			LARGE_INTEGER li = {0,0};
			ULARGE_INTEGER uli = {1,0};
			BOOL fPartied;
			
			pstrmBody->Seek(li, STREAM_SEEK_SET, NULL);
			pstrmBody->Write("\0", 1, NULL);
			pstrmBody->SetSize(uli);
			pstrmBody->Commit(STGC_DEFAULT);
			pstrmBody->Release();
			RTFSync(pmsg, RTF_SYNC_BODY_CHANGED, &fPartied);
		}
	}

NoBodyHTML:
	if (prAttach->cRows && IsntPGPError(nError))
		nError = EncryptSignAttachment(hwnd, pmsg, nOutSize,
					prAttach, prds, pSignOptions);

	ptableAttach->Release();
	return nError;
}
STDMETHODIMP CExtImpl::OnRead(IExchExtCallback* peecb)
{
	HWND hwnd;

	peecb->GetWindow(&hwnd);
	if (!hwnd)
		hwnd = GetTopWindow(NULL);

	switch (_context)
	{
	case EECONTEXT_SENDNOTEMESSAGE:
		{
			BOOL fAddButtons = TRUE;
			int nNumButtons;
			int nIndex;
			TBBUTTON tbbNew[5];
			TBBUTTON tbbCheck;
			
			// Check to make sure the buttons aren't already on the toolbar

			nNumButtons = SendMessage(_hwndSendToolbar, TB_BUTTONCOUNT, 0, 0);
			for (nIndex=0; nIndex<nNumButtons; nIndex++)
			{
				SendMessage(_hwndSendToolbar, TB_GETBUTTON, (WPARAM) nIndex, 
							(LPARAM) &tbbCheck);

				// If a button exists with the same bitmap ID and command ID
				// as the Encrypt button, odds are good that the button is
				// already on the toolbar
				if ((tbbCheck.iBitmap == (int)_itbmEncrypt) && 
					(tbbCheck.idCommand == (int)_cmdidEncrypt))
				{
					fAddButtons = FALSE;
					nIndex = nNumButtons;
				}
			}

			if (fAddButtons)
			{
				tbbNew[0].iBitmap = 0;
				tbbNew[0].idCommand = 0;
				tbbNew[0].fsState = 0;
				tbbNew[0].fsStyle = TBSTYLE_SEP;
				tbbNew[0].dwData = 0;
				tbbNew[0].iString = -1;
			
				tbbNew[1].iBitmap = _itbmEncrypt;
				tbbNew[1].idCommand = _cmdidEncrypt;
				tbbNew[1].fsState = TBSTATE_ENABLED;
				tbbNew[1].fsStyle = TBSTYLE_CHECK;
				tbbNew[1].dwData = 0;
				tbbNew[1].iString = -1;
			
				tbbNew[2].iBitmap = _itbmSign;
				tbbNew[2].idCommand = _cmdidSign;
				tbbNew[2].fsState = TBSTATE_ENABLED;
				tbbNew[2].fsStyle = TBSTYLE_CHECK;
				tbbNew[2].dwData = 0;
				tbbNew[2].iString = -1;

				tbbNew[3].iBitmap = 0;
				tbbNew[3].idCommand = 0;
				tbbNew[3].fsState = 0;
				tbbNew[3].fsStyle = TBSTYLE_SEP;
				tbbNew[3].dwData = 0;
				tbbNew[3].iString = -1;
			
				tbbNew[4].iBitmap = _itbmPgpKeys;
				tbbNew[4].idCommand = _cmdidPgpKeys;
				tbbNew[4].fsState = TBSTATE_ENABLED;
				tbbNew[4].fsStyle = TBSTYLE_BUTTON;
				tbbNew[4].dwData = 0;
				tbbNew[4].iString = -1;
			
				SendMessage(_hwndSendToolbar, TB_ADDBUTTONS, 5, 
					(LPARAM) tbbNew);
			}
		}
		break;

    case EECONTEXT_SENDPOSTMESSAGE:
		break;
    
	case EECONTEXT_READNOTEMESSAGE:
		{
			BOOL fAddButtons = TRUE;
			int nNumButtons;
			int nIndex;
			TBBUTTON tbbNew[5];
			TBBUTTON tbbCheck;
			BOOL FYEO;

			// Check to make sure the buttons aren't already on the toolbar

			nNumButtons = SendMessage(_hwndReadToolbar, TB_BUTTONCOUNT, 0, 0);
			for (nIndex=0; nIndex<nNumButtons; nIndex++)
			{
				SendMessage(_hwndReadToolbar, TB_GETBUTTON, 
							(WPARAM) nIndex, (LPARAM) &tbbCheck);

				// If a button exists with the same bitmap ID and command ID
				// as the Decrypt button, odds are good that the button is
				// already on the toolbar
				if ((tbbCheck.iBitmap == (int)_itbmDecrypt) && 
					(tbbCheck.idCommand == (int)_cmdidDecrypt))
				{
					fAddButtons = FALSE;
					nIndex = nNumButtons;
				}
			}

			if (fAddButtons)
			{
				tbbNew[0].iBitmap = 0;
				tbbNew[0].idCommand = 0;
				tbbNew[0].fsState = 0;
				tbbNew[0].fsStyle = TBSTYLE_SEP;
				tbbNew[0].dwData = 0;
				tbbNew[0].iString = -1;
			
				tbbNew[1].iBitmap = _itbmDecrypt;
				tbbNew[1].idCommand = _cmdidDecrypt;
				tbbNew[1].fsState = TBSTATE_ENABLED;
				tbbNew[1].fsStyle = TBSTYLE_BUTTON;
				tbbNew[1].dwData = 0;
				tbbNew[1].iString = -1;
			
				tbbNew[2].iBitmap = 0;
				tbbNew[2].idCommand = 0;
				tbbNew[2].fsState = 0;
				tbbNew[2].fsStyle = TBSTYLE_SEP;
				tbbNew[2].dwData = 0;
				tbbNew[2].iString = -1;
			
				tbbNew[3].iBitmap = _itbmPgpKeys;
				tbbNew[3].idCommand = _cmdidPgpKeys;
				tbbNew[3].fsState = TBSTATE_ENABLED;
				tbbNew[3].fsStyle = TBSTYLE_BUTTON;
				tbbNew[3].dwData = 0;
				tbbNew[3].iString = -1;
			
				SendMessage(_hwndReadToolbar, TB_ADDBUTTONS, 4, 
					(LPARAM) tbbNew);
			}

			IMAPISession* psess;

			HRESULT hr = peecb->GetSession(&psess, NULL);
			if (FAILED(hr))
			{
				UIDisplayStringID(hwnd, IDS_E_NOSESSION);
				return S_FALSE;
			}
			
			if (AutoDecrypt(_memoryMgr))
			{
				IMessage *pmsg = 0;
				STATSTG StreamStats;
				DWORD dwInSize;
				UINT nOutSize;
				char *pInput;
				char *pOutput = NULL;
				BOOL bGotHTML = FALSE;
				PGPError nError = kPGPError_NoErr;
				char szFile[256];
				char szName[256];

				UIGetString(szName, sizeof(szName), IDS_LOGNAME);
				UIGetString(szFile, sizeof(szFile), IDS_DLL);
				
				CWaitCursor wait; // Mark busy
				
				hr = peecb->GetObject(NULL, (IMAPIProp**)&pmsg);
				if (FAILED(hr))
				{
					return S_FALSE;
				}
				
				IStream *pstrmBody = 0;

				hr = pmsg->OpenProperty(PR_BODY_HTML, &IID_IStream, 
					STGM_READWRITE, MAPI_MODIFY, (IUnknown**)&pstrmBody);
				
				if (FAILED(hr))
				{
					hr = pmsg->OpenProperty(PR_BODY, &IID_IStream, 
						STGM_READWRITE, MAPI_MODIFY, (IUnknown**)&pstrmBody);
				}
				else
					bGotHTML = TRUE;

				if (FAILED(hr))
				{
					pmsg->Release();
					psess->Release();
					return S_FALSE;
				}
				
				pstrmBody->Stat(&StreamStats, STATFLAG_NONAME);
				dwInSize = StreamStats.cbSize.LowPart;
				
				pInput = (char *) calloc(dwInSize+1, sizeof(char));
				if (!pInput)
				{
					UIDisplayStringID(hwnd, IDS_E_NOMEMORY);
					pstrmBody->Release();
					pmsg->Release();
					psess->Release();
					return S_FALSE;
				}
				pstrmBody->Read(pInput, dwInSize, &dwInSize);
				pInput[dwInSize] = 0;
				
				if (AutoDecrypt(_memoryMgr))
				{
					nError = DecryptVerifyBuffer(UIGetInstance(), hwnd, 
								_pgpContext, _tlsContext, szName, 
								szFile, pInput, dwInSize, 
								FALSE, (VOID ** )&pOutput, &nOutSize, &FYEO);

					if (IsntPGPError(nError) && (nOutSize > 0) && 
						(pOutput != NULL))
					{
						LARGE_INTEGER li = {0,0};
						ULARGE_INTEGER uli = {nOutSize, 0};
						BOOL fPartied;
						char *szBuffer = NULL;
						
						// Alter only the block of encrypted/signed text
						// if this is not HTML

						if((FYEO)||(GetSecureViewerPref(_pgpContext)))
						{
							TempestViewer((void *)_pgpContext,hwnd,
								pOutput,nOutSize,FYEO);
						}
						else
						{
							szBuffer = (char *) calloc(dwInSize+nOutSize+1, 
													sizeof(char));

							strcpy(szBuffer, pOutput);

							if (strlen(szBuffer) > 0)
							{
								uli.LowPart = strlen(szBuffer);
								pstrmBody->Seek(li, STREAM_SEEK_SET, NULL);
								pstrmBody->Write(szBuffer, strlen(szBuffer), 
											NULL);
								pstrmBody->SetSize(uli);
								pstrmBody->Commit(STGC_DEFAULT);
								pstrmBody->Release();
								RTFSync(pmsg, RTF_SYNC_BODY_CHANGED, 
									&fPartied);
							}
	
							free(szBuffer);
						}

						PGPFreeData(pOutput);
					}
					else
						pstrmBody->Release();
				}
				else
					pstrmBody->Release();

				free(pInput);
				pmsg->Release();
			}
			
			psess->Release();
		}
		break;

	case EECONTEXT_READPOSTMESSAGE:
		break;

	default:
		// This way, the function defends itself against unknown future
		// variants, as FindREOnNote is less robust than it might be.
		return S_FALSE;
	}

	return S_FALSE;
}
Example #5
0
void AddMainToolbarButtons(PluginInfo *plugin)
{
	HDC	hDC;
	int	iNumBits;
	HIMAGELIST hilToolbar;
	HBITMAP hbmpPGPkeys;
	int nPGPkeysSTR;
	int nPGPkeysBMP;
	TBBUTTON tbb[1];
	char szText[255];
	HINSTANCE hInst;
	int nX;
	int nY;
	
	hInst = UIGetInstance();
	
	hilToolbar = (HIMAGELIST) SendMessage(plugin->hToolbar, TB_GETIMAGELIST, 
								0, 0);
	
	hDC = GetDC (NULL);		// DC for desktop
	iNumBits = GetDeviceCaps (hDC, BITSPIXEL) * GetDeviceCaps (hDC, PLANES);
	ReleaseDC (NULL, hDC);

	ImageList_GetIconSize(hilToolbar, &nX, &nY);
	if (nX < 20)
		plugin->bSmallIcons = TRUE;
	else
		plugin->bSmallIcons = FALSE;
	
	if (iNumBits <= 8) 
	{
		if (plugin->bSmallIcons)
			hbmpPGPkeys = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_PGPKEYSO4));
		else
			hbmpPGPkeys = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_PGPKEYSOFF4));
	}
	else
	{
		if (plugin->bSmallIcons)
			hbmpPGPkeys = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_PGPKEYSO));
		else
			hbmpPGPkeys = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_PGPKEYSOFF));
	}
	
	nPGPkeysBMP = ImageList_AddMasked(hilToolbar, hbmpPGPkeys, 
					TRANSPARENT_COLOR);
	DeleteObject(hbmpPGPkeys);
	plugin->nPGPKeysImage = nPGPkeysBMP;
	
	SendMessage(plugin->hToolbar, TB_SETIMAGELIST, 0, (LPARAM) hilToolbar);
	
	hilToolbar = (HIMAGELIST) SendMessage(plugin->hToolbar, 
								TB_GETHOTIMAGELIST, 0, 0);
	
	if (iNumBits <= 8)
	{
		if (plugin->bSmallIcons)
			hbmpPGPkeys = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_PGPKEYS4));
		else
			hbmpPGPkeys = LoadBitmap(hInst, 
							MAKEINTRESOURCE(IDB_PGPKEYSLARGE4));
	}
	else
	{
		if (plugin->bSmallIcons)
			hbmpPGPkeys = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_PGPKEYS));
		else
			hbmpPGPkeys = LoadBitmap(hInst, 
							MAKEINTRESOURCE(IDB_PGPKEYSLARGE));
	}
	
	ImageList_AddMasked(hilToolbar, hbmpPGPkeys, TRANSPARENT_COLOR);
	DeleteObject(hbmpPGPkeys);
	
	SendMessage(plugin->hToolbar, TB_SETHOTIMAGELIST, 0, (LPARAM) hilToolbar);
	
	UIGetString(szText, 254, IDS_TOOLTIP_PGPKEYS);
	nPGPkeysSTR = SendMessage(plugin->hToolbar, TB_ADDSTRING, 0,
					(LPARAM) szText);
	plugin->nPGPKeysString = nPGPkeysSTR;
	
	tbb[0].iBitmap = nPGPkeysBMP;
	tbb[0].idCommand = IDC_PGPKEYS;
	tbb[0].fsState = TBSTATE_ENABLED;
	tbb[0].fsStyle = TBSTYLE_BUTTON;
	tbb[0].dwData = 0;
	tbb[0].iString = nPGPkeysSTR;
	
	SendMessage(plugin->hToolbar, TB_ADDBUTTONS, 1, (LPARAM) &tbb);
	
	plugin->nPGPKeysButton = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX,
								IDC_PGPKEYS, 0);
	
	return;
}
Example #6
0
LRESULT CALLBACK MainWndProc(HWND hDlg, 
							 UINT msg,
							 WPARAM wParam, 
							 LPARAM lParam)
{
	WNDPROC lpOldProc;
	PluginInfo *plugin;

	lpOldProc = (WNDPROC)GetProp( hDlg, "oldproc" );
	plugin = GetPluginInfo(hDlg);
	
	if (plugin != NULL)
	{
		if (msg == plugin->nPurgeCacheMsg)
		{
			PGPclPurgeCachedPassphrase(wParam);
			return TRUE;
		}
	}

	switch(msg)
	{
	case WM_SETTINGCHANGE:
	case WM_PALETTECHANGED:
	case WM_FONTCHANGE:
	case WM_SYSCOLORCHANGE:
		{
			HIMAGELIST hilToolbar;
			int nIndex;
			LRESULT lResult;
			
			lResult = CommonWndProc(hDlg, msg, wParam, lParam);

			nIndex = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX,
						IDC_PGPKEYS, 0);

			SendMessage(plugin->hToolbar, TB_DELETEBUTTON, nIndex, 0);
			plugin->nPGPKeysButton = -1;

			hilToolbar = (HIMAGELIST) SendMessage(plugin->hToolbar, 
										TB_GETIMAGELIST, 0, 0);
			
			ImageList_Remove(hilToolbar, plugin->nPGPKeysImage);

			AddMainToolbarButtons(plugin);
			return lResult;
		}

	case WM_DESTROY:
		{
			KillTimer(hDlg, WATCH_TOOLBAR_TIMER);
			break;
		}

	case WM_PARENTNOTIFY:
		if (LOWORD(wParam) == WM_CREATE)
			CreateMainWindowGUI(hDlg, plugin);
		break;
	
	case WM_TIMER:
		if (wParam == WATCH_TOOLBAR_TIMER)
		{
			int nState;

			nState = SendMessage(plugin->hToolbar, TB_GETSTATE, 
						IDC_PGPKEYS, 0);

			if (nState & TBSTATE_ENABLED)
				return 0;

			nState |= TBSTATE_ENABLED;
			SendMessage(plugin->hToolbar, TB_SETSTATE, IDC_PGPKEYS, 
				MAKELONG(nState, 0));

			return 0;
		}
		break;

	case WM_INITMENUPOPUP:
		{
			int nOptions;
			MENUITEMINFO menuInfo;
			char szOptions[256];
			char szMenu[256];
			LRESULT lResult;

			// For some reason, the old window proc disables the
			// menu items in the PGP popup menu. We'll enable
			// the items after the old proc disables them

			if ((HMENU) wParam == plugin->hPGPMenu)
			{
				lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, 
							lParam);
				
				EnableMenuItem(plugin->hPGPMenu, IDC_PREFS, 
					MF_BYCOMMAND | MF_ENABLED);
				EnableMenuItem(plugin->hPGPMenu, IDC_PGPKEYS, 
					MF_BYCOMMAND | MF_ENABLED);

				return lResult;
			}
			else if (plugin->bOE5)
			{
				UIGetString(szOptions, 254, IDS_MENU_OEOPTIONS);
				nOptions = GetMenuItemCount((HMENU) wParam);
				
				menuInfo.cbSize = sizeof(MENUITEMINFO);
				menuInfo.fMask = MIIM_TYPE | MIIM_SUBMENU | MIIM_ID;
				menuInfo.dwTypeData = szMenu;
				menuInfo.cch = 255;
				
				GetMenuItemInfo((HMENU) wParam, nOptions - 1, TRUE, 
					&menuInfo);

				if (!strcmp(szMenu, szOptions))
				{
					lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, 
								lParam);
					
					strcpy(szMenu, "&PGP");
					
					menuInfo.cbSize = sizeof(MENUITEMINFO);
					menuInfo.fMask = MIIM_TYPE | MIIM_ID | MIIM_SUBMENU | 
						MIIM_STATE;
					menuInfo.fType = MFT_STRING;
					menuInfo.fState = MFS_ENABLED;
					menuInfo.wID = IDC_PGPMENU;
					menuInfo.hSubMenu = plugin->hPGPMenu;
					menuInfo.dwTypeData = szMenu;
					
					InsertMenuItem((HMENU) wParam, nOptions, TRUE, &menuInfo);
					plugin->nPGPPosition = nOptions;
					return lResult;
				}
				else if (!strcmp(szMenu, "&PGP"))
				{
					lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, 
								lParam);
					
					DestroyMenu(plugin->hPGPMenu);
					plugin->hPGPMenu = CreatePopupMenu();
					
					UIGetString(szMenu, 254, IDS_MENU_PREFS);
					AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PREFS, 
						szMenu);
					
					UIGetString(szMenu, 254, IDS_MENU_PGPKEYS);
					AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PGPKEYS, 
						szMenu);
					
					menuInfo.cbSize = sizeof(MENUITEMINFO);
					menuInfo.fMask = MIIM_SUBMENU | MIIM_STATE;
					menuInfo.fState = MFS_ENABLED;
					menuInfo.hSubMenu = plugin->hPGPMenu;

					SetMenuItemInfo((HMENU) wParam, IDC_PGPMENU, FALSE,
						&menuInfo);

					menuInfo.fMask = MIIM_STATE;

					SetMenuItemInfo(plugin->hPGPMenu, IDC_PREFS, FALSE, 
						&menuInfo);
				
					SetMenuItemInfo(plugin->hPGPMenu, IDC_PGPKEYS, FALSE, 
						&menuInfo);

					return lResult;
				}
			}

			break;
		}
	}

	return CommonWndProc(hDlg, msg, wParam, lParam);
}
Example #7
0
void CreateMainWindowGUI(HWND hDlg, PluginInfo *plugin)
{
	HWND hReBar;
	HWND hSizableRebar;
	int nIndex;
	MENUITEMINFO menuInfo;
	WNDPROC lpOldProc;
	char szText[255];
	
	hSizableRebar = FindWindowEx(hDlg, NULL, "SizableRebar", NULL);
	hReBar = FindWindowEx(hSizableRebar, NULL, "ReBarWindow32", NULL);

	if (plugin->bOE5)
	{
		plugin->hToolbar = FindWindowEx(hReBar, NULL, "ToolbarWindow32", 
								NULL);
		plugin->hMenuToolbar = FindWindowEx(hReBar, plugin->hToolbar, 
									"ToolbarWindow32", NULL);

		if (!plugin->hMenuToolbar || !plugin->hToolbar)
			return;
	}
	else
	{
		plugin->hMainMenu = GetMenu(hDlg);
		plugin->hToolbar = FindWindowEx(hReBar, NULL, "ToolbarWindow32", 
							NULL);

		if (!plugin->hMainMenu || !plugin->hToolbar)
			return;
	}
	
	if (plugin->bOE5)
	{
		if (plugin->hPGPMenu != NULL)
			DestroyMenu(plugin->hPGPMenu);
		
		plugin->hPGPMenu = CreatePopupMenu();
		
		UIGetString(szText, 254, IDS_MENU_PREFS);
		AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PREFS, szText);
		
		UIGetString(szText, 254, IDS_MENU_PGPKEYS);
		AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PGPKEYS, szText);
	}
	else
	{
		menuInfo.cbSize = sizeof(MENUITEMINFO);
		menuInfo.fMask = MIIM_SUBMENU;
		GetMenuItemInfo(plugin->hMainMenu, 4, TRUE, &menuInfo);
		if (menuInfo.hSubMenu != plugin->hPGPMenu)
		{
			if (plugin->hPGPMenu != NULL)
				DestroyMenu(plugin->hPGPMenu);
			
			plugin->hPGPMenu = CreatePopupMenu();
			plugin->nPGPPosition = 4;
			
			InsertMenu(plugin->hMainMenu, plugin->nPGPPosition, 
				MF_BYPOSITION | MF_STRING | MF_POPUP, 
				(UINT) plugin->hPGPMenu, "&PGP");
			
			UIGetString(szText, 254, IDS_MENU_PREFS);
			AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PREFS, 
				szText);
			
			UIGetString(szText, 254, IDS_MENU_PGPKEYS);
			AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PGPKEYS, 
				szText);
			
			DrawMenuBar(hDlg);
		}
	}
	
	SendMessage(plugin->hToolbar, TB_BUTTONSTRUCTSIZE,
		(WPARAM) sizeof(TBBUTTON), 0);
	
	nIndex = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX,
				IDC_PGPKEYS, 0);

	if (nIndex < 0)
	{
		AddMainToolbarButtons(plugin); 
		SetTimer(hDlg, WATCH_TOOLBAR_TIMER, 500, NULL);
	}
	
	// Look for status bar
	plugin->hStatusBar = FindWindowEx(hDlg, NULL, 
		"msctls_statusbar32", NULL);

	lpOldProc = (WNDPROC) GetProp(hReBar, "oldproc");
	if (lpOldProc == NULL)
	{
		// Save away toolbar parent window proc
		SetProp(hReBar, "oldproc", 
			(HANDLE) GetWindowLong(hReBar, GWL_WNDPROC)); 

		// Save plugin pointer
		SetProp(hReBar, PLUGIN_INFO_PROP, (HANDLE) plugin);

		// Subclass toolbar parent window
		SetWindowLong(hReBar, GWL_WNDPROC, (DWORD) ToolbarParentWndProc);
	}

	return;
}
Example #8
0
PGPError GetRecipients(HWND hwnd,
					   char *szNames, 
					   PGPContextRef pgpContext, 
					   PGPtlsContextRef tlsContext,
					   RECIPIENTDIALOGSTRUCT *prds)
{
    HINSTANCE		hWAB = NULL;
    LPWABOPEN		pWABOpen = NULL;
    LPADRBOOK		pAdrBook = NULL; 
    LPWABOBJECT		pWABObject = NULL;
	AdrBookTable *	pTable = NULL;
	UINT			nNumEntries = 0;
	UINT			nIndex;
	DWORD			dwNumRecips = 0;
	BOOL			bGotRecipients = FALSE;
	BOOL			bAddressBook = FALSE;
	char			szTitle[256];
	char *			szName;
	char *			szEmail;
	char *			szNewRecipient;
	char **			szOldRecipients;
	char **			szRecipientArray = NULL;
	PGPKeySetRef	pubKeySet = NULL;
	PGPError		err = kPGPError_NoErr;

	if (LoadWAB(&hWAB, &pWABOpen, &pAdrBook, &pWABObject))
		if (ReadWAB(pAdrBook, pWABObject, &pTable, &nNumEntries))
			bAddressBook = TRUE;

	szName = strtok(szNames, ",;");
	while (szName)
	{
		szEmail = szName;

		if (bAddressBook)
		{
			for (nIndex=0; nIndex<nNumEntries; nIndex++)
			{
				if ((!_stricmp(szName, pTable[nIndex].szName)) &&
					(pTable[nIndex].szEmail != NULL))
				{
					szEmail = pTable[nIndex].szEmail;
					nIndex = nNumEntries;
				}
			}
		}

		szNewRecipient = (char *) calloc(sizeof(char), strlen(szEmail)+1);
		strcpy(szNewRecipient, szEmail);
		
		szOldRecipients = szRecipientArray;
		szRecipientArray = (char **) calloc(sizeof(char *), dwNumRecips+1);

		if (dwNumRecips > 0)
		{
			UINT i;

			for (i=0; i<dwNumRecips; i++)
				(szRecipientArray)[i] = szOldRecipients[i];
		}

		(szRecipientArray)[dwNumRecips] = szNewRecipient;
		dwNumRecips++;
		szName = strtok(NULL, ",;");
	}

	UIGetString(szTitle, sizeof(szTitle), IDS_RECIPIENTDIALOG);

	prds->Version = CurrentPGPrecipVersion;
	prds->hwndParent = hwnd;
	prds->szTitle = "Recipient Selection";
	prds->Context = pgpContext;
	prds->tlsContext = tlsContext;
	prds->SelectedKeySetRef = NULL;
	prds->szRecipientArray = szRecipientArray;
	prds->dwNumRecipients = dwNumRecips;
	prds->dwOptions = PGPCL_ASCIIARMOR;
	prds->dwFlags = 0;
	prds->dwDisableFlags = PGPCL_DISABLE_ASCIIARMOR |
							PGPCL_DISABLE_WIPEORIG |
							PGPCL_DISABLE_SDA;
	prds->AddedKeys = NULL;

	bGotRecipients = PGPclRecipientDialog(prds);

	if (prds->AddedKeys != NULL)
	{
		PGPUInt32 numKeys;

		PGPCountKeys(prds->AddedKeys, &numKeys);
		if (numKeys > 0)
			PGPclQueryAddKeys(pgpContext, tlsContext, hwnd, 
				prds->AddedKeys, NULL);

		PGPFreeKeySet(prds->AddedKeys);
		prds->AddedKeys = NULL;
	}

	if (bGotRecipients != TRUE)
	{
		err = kPGPError_UserAbort;
		goto GetRecipientsError;
	}

	FreeWAB(hWAB, pAdrBook, pWABObject, pTable, nNumEntries);
	return err;

GetRecipientsError:

	FreeRecipients(prds);
	FreeWAB(hWAB, pAdrBook, pWABObject, pTable, nNumEntries);
	return err;
}