summaryrefslogtreecommitdiff
path: root/GnuPG/options.cpp
diff options
context:
space:
mode:
authormataes2007 <mataes2007@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb>2011-11-22 18:30:08 +0000
committermataes2007 <mataes2007@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb>2011-11-22 18:30:08 +0000
commit4101ee8ff9bc818f40dc0173b1434761f187597f (patch)
tree15ace4a23c2d13b1c4b506a54887b1ec196ee007 /GnuPG/options.cpp
parentda1c34bde32e040a0a431ffb809c3b1e425dc558 (diff)
added GnuPG
git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@197 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb
Diffstat (limited to 'GnuPG/options.cpp')
-rw-r--r--GnuPG/options.cpp390
1 files changed, 390 insertions, 0 deletions
diff --git a/GnuPG/options.cpp b/GnuPG/options.cpp
new file mode 100644
index 0000000..5d4d18f
--- /dev/null
+++ b/GnuPG/options.cpp
@@ -0,0 +1,390 @@
+#include "gnupgplugin.h"
+
+char *column[]={"Contact","Key and User ID"}; /*lang*/
+int columnwidth[]={150, 368};
+
+int OptionsInit(WPARAM wparam, LPARAM lparam)
+{
+ OPTIONSDIALOGPAGE odp;
+
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize=sizeof(odp);
+ odp.hInstance=dllinstance;
+ odp.pszGroup=Translate(txtplugins);
+ odp.pszTitle=Translate(txtoptions);
+ odp.pszTemplate=(char*)MAKEINTRESOURCE(IDD_OPTIONS_DLG);
+ odp.pfnDlgProc=OptionsDialogProcedure;
+ odp.expertOnlyControls=NULL;
+ odp.nExpertOnlyControls=0;
+ odp.flags=ODPF_BOLDGROUPS;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize=sizeof(odp);
+ odp.hInstance=dllinstance;
+ odp.pszGroup=Translate(txtplugins);
+ odp.pszTitle=Translate(txtexpertoptions);
+ odp.pszTemplate=(char*)MAKEINTRESOURCE(IDD_EXPERTOPTIONS_DLG);
+ odp.pfnDlgProc=ExpertOptionsDialogProcedure;
+ odp.expertOnlyControls=NULL;
+ odp.nExpertOnlyControls=0;
+ odp.flags=ODPF_BOLDGROUPS|ODPF_EXPERTONLY;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+
+ return 0;
+}
+
+void fillKeyDropdown(HWND hdlg, int atype)
+{
+ int index;
+ HWND hwnd;
+
+ if (atype==publickeyuserid) hwnd=GetDlgItem(hdlg,IDC_PUBLICKEY_DDOWN);
+ else hwnd=GetDlgItem(hdlg,IDC_SECRETKEY_DDOWN);
+
+ SendMessage(hwnd,CB_RESETCONTENT,0,0);
+ SendMessage(hwnd,CB_ADDSTRING,0,(LPARAM)Translate(txtnone));
+ SendMessage(hwnd,CB_SELECTSTRING,-1,(LPARAM)Translate(txtnone));
+
+ for (index=0; index<getKeyUserIDCount(atype); index++)
+ SendMessage(hwnd,CB_ADDSTRING,0,(LPARAM)getKeyUserID(atype,index));
+}
+
+void synchronizePublicKeyUserID(HWND hdlg)
+{
+ int item;
+ HWND hwnd;
+ char keyuserid[keyuseridsize];
+ LRESULT result;
+
+ hwnd=GetDlgItem(hdlg,IDC_KEY_LIST);
+ item=ListView_GetNextItem(hwnd,-1,LVNI_SELECTED);
+ ListView_GetItemText(hwnd,item,1,(LPTSTR)keyuserid,sizeof(keyuserid));
+
+ hwnd=GetDlgItem(hdlg,IDC_PUBLICKEY_DDOWN);
+ result=SendMessage(hwnd,CB_SELECTSTRING,-1,(LPARAM)keyuserid);
+ if (result==CB_ERR)
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+}
+
+void setSecretKeyUserID(HWND hdlg)
+{
+ int error;
+ DBVARIANT dbv;
+ char keyuserid[keyuseridsize];
+ HWND hwnd;
+
+ error=DBGetContactSetting(NULL,pluginid,dbkeyuserid,&dbv);
+ if(! error) strcpy(keyuserid,dbv.pszVal);
+ else strcpy(keyuserid,"");
+ DBFreeVariant(&dbv);
+
+ if(strlen(keyuserid)==0) strcpy(keyuserid, Translate(txtnone));
+
+ hwnd=GetDlgItem(hdlg,IDC_SECRETKEY_DDOWN);
+ error=SendMessage(hwnd,CB_SELECTSTRING,-1,(LPARAM)keyuserid);
+ if (error==CB_ERR)
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+}
+
+BOOL CALLBACK OptionsDialogProcedure(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ char *pos;
+ char gpgexe[256];
+ char filter[128];
+ OPENFILENAME ofn;
+ HWND hwnd;
+ int index, error, item, count;
+ LV_COLUMN lvc;
+ LV_ITEM lvi;
+ HANDLE hcontact;
+ DBVARIANT dbv;
+ char keyuserid[keyuseridsize];
+ NM_LISTVIEW *nmlv;
+
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hdlg);
+ // dialog aktualisieren
+ SetDlgItemText(hdlg,IDC_GPGEXECUTABLE_EDIT,(LPCTSTR)gpgExecutable);
+ SetDlgItemText(hdlg,IDC_GPGHOME_EDIT,(LPCTSTR)gpgHomeDirectory);
+
+ // keys
+ fillKeyDropdown(hdlg, publickeyuserid);
+ fillKeyDropdown(hdlg, secretkeyuserid);
+ setSecretKeyUserID(hdlg);
+
+ hwnd=GetDlgItem(hdlg, IDC_KEY_LIST);
+
+ for (index=0; index<2; index++)
+ {
+ ZeroMemory(&lvc, sizeof(lvc)); // LV_COLUMN
+ lvc.iSubItem=index;
+ lvc.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
+ lvc.fmt=LVCFMT_LEFT;
+ lvc.pszText=(LPTSTR)Translate(column[index]);
+ lvc.cx=columnwidth[index];
+ ListView_InsertColumn(hwnd, index, &lvc);
+ }
+
+ index=0;
+ for (
+ hcontact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);
+ hcontact;
+ hcontact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hcontact,0)
+ )
+ {
+ ZeroMemory(&lvi,sizeof(lvi)); // LV_ITEM
+ lvi.iItem=++index;
+ lvi.mask=LVIF_TEXT|LVIF_PARAM;
+ lvi.pszText=(LPTSTR)CallService(MS_CLIST_GETCONTACTDISPLAYNAME,(WPARAM)hcontact,0);
+ lvi.lParam=(LPARAM)hcontact;
+ if (
+ !lvi.pszText
+ || !strlen((const char*)lvi.pszText)
+ || !strcmp((const char*)lvi.pszText,Translate("(Unknown Contact)"))
+ )
+ continue;
+ item=ListView_InsertItem(hwnd,&lvi);
+
+ error=DBGetContactSetting(hcontact,pluginid,dbkeyuserid,&dbv);
+ strcpy(keyuserid,(!error?dbv.pszVal:""));
+ DBFreeVariant(&dbv);
+ if (strlen(keyuserid)==0)
+ strcpy(keyuserid,Translate(txtnone));
+ ListView_SetItemText(hwnd,item,1,(LPTSTR)keyuserid);
+ }
+
+ ListView_SetExtendedListViewStyle(hwnd,LVS_EX_FULLROWSELECT);
+ ListView_SetItemState(hwnd,0,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
+ synchronizePublicKeyUserID(hdlg);
+ break;
+ case WM_COMMAND:
+ // benutzereingaben feststellen
+ if (GetFocus()==(HWND)lparam) // ist der dialog fokussiert?
+ {
+ if ((HIWORD(wparam)==EN_CHANGE) // wurde ein text veraendert?
+ ||(HIWORD(wparam)==CBN_SELCHANGE)) // dropdowns
+ SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0); // aktiviere apply button
+ }
+
+ switch (HIWORD(wparam))
+ {
+ case CBN_SELCHANGE:
+ if (LOWORD(wparam)==IDC_PUBLICKEY_DDOWN)
+ {
+ GetDlgItemText(hdlg,IDC_PUBLICKEY_DDOWN,(LPTSTR)keyuserid,sizeof(keyuserid));
+
+ hwnd=GetDlgItem(hdlg,IDC_KEY_LIST);
+ item=ListView_GetNextItem(hwnd,-1,LVNI_SELECTED);
+ ListView_SetItemText(hwnd,item,1,(LPTSTR)keyuserid);
+ }
+ break;
+ }
+
+ switch (LOWORD(wparam))
+ {
+ case IDC_BROWSEEXECUTABLE_BTN: // browse button click
+ GetDlgItemText(hdlg,IDC_GPGEXECUTABLE_EDIT,(LPTSTR)gpgexe,sizeof(gpgexe));
+
+ // filter zusammensetzen
+ ZeroMemory(&filter, sizeof(filter));
+ strcpy(filter, Translate(txtexecutablefiles));
+ strcat(filter, " (*.exe)");
+ pos=filter+strlen(filter)+1;
+ strcpy(pos, "*.exe");
+
+ // OPENFILENAME initialisieren
+ ZeroMemory(&ofn, sizeof(ofn));
+ ofn.lStructSize=sizeof(ofn);
+ ofn.hwndOwner=hdlg;
+ ofn.lpstrFilter=(LPCTSTR)filter;
+ ofn.lpstrFile=(LPTSTR)gpgexe;
+ ofn.nMaxFile=sizeof(gpgexe);
+ ofn.lpstrTitle=(LPCTSTR)Translate((LPCTSTR)txtselectexecutable);
+ ofn.Flags=OFN_FILEMUSTEXIST|OFN_LONGNAMES|OFN_HIDEREADONLY;
+
+ if (GetOpenFileName(&ofn))
+ {
+ SetDlgItemText(hdlg, IDC_GPGEXECUTABLE_EDIT, ofn.lpstrFile);
+ SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0); // aktiviere apply button
+ }
+ break;
+ case IDC_PUBLICREFRESH_BTN:
+ updateKeyUserIDs(publickeyuserid);
+ fillKeyDropdown(hdlg, publickeyuserid);
+ synchronizePublicKeyUserID(hdlg);
+ break;
+ case IDC_SECRETREFRESH_BTN:
+ updateKeyUserIDs(secretkeyuserid);
+ fillKeyDropdown(hdlg, secretkeyuserid);
+ setSecretKeyUserID(hdlg);
+ break;
+ }
+ break;
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lparam)->code)
+ {
+ case LVN_ITEMCHANGED:
+ nmlv=(NM_LISTVIEW *)lparam;
+ if (nmlv->uNewState&LVIS_SELECTED!=0)
+ synchronizePublicKeyUserID(hdlg);
+ break;
+ case PSN_APPLY:
+ // eingaben in der datenbank abspeichern
+ GetDlgItemText(hdlg,IDC_GPGEXECUTABLE_EDIT,(LPTSTR)gpgExecutable,fullfilenamesize);
+ DBWriteContactSettingString(NULL,pluginid,dbexecutable,gpgExecutable);
+ GetDlgItemText(hdlg,IDC_GPGHOME_EDIT,(LPTSTR)gpgHomeDirectory,argumentsize);
+ DBWriteContactSettingString(NULL, pluginid, dbhomedirectory, gpgHomeDirectory);
+
+ hwnd=GetDlgItem(hdlg, IDC_KEY_LIST);
+ count=ListView_GetItemCount(hwnd);
+
+ for (index=0; index<count; index++)
+ {
+ ZeroMemory(&lvi, sizeof(lvi)); // LV_ITEM
+ lvi.iItem=index;
+ lvi.iSubItem=1;
+ lvi.mask=LVIF_TEXT|LVIF_PARAM;
+ lvi.pszText=(LPTSTR)keyuserid;
+ lvi.cchTextMax=sizeof(keyuserid);
+ ListView_GetItem(hwnd, &lvi);
+
+ if (strcmp(keyuserid,Translate(txtnone))==0)
+ strcpy(keyuserid,"");
+ DBWriteContactSettingString((HANDLE)lvi.lParam, pluginid, dbkeyuserid, keyuserid);
+ }
+
+ GetDlgItemText(hdlg,IDC_SECRETKEY_DDOWN,(LPTSTR)keyuserid,sizeof(keyuserid));
+ if (strcmp(keyuserid,Translate(txtnone))==0)
+ strcpy(keyuserid,"");
+ DBWriteContactSettingString(NULL, pluginid, dbkeyuserid, keyuserid);
+ break;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+BOOL CALLBACK ExpertOptionsDialogProcedure(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ char tag[plugintagsize];
+
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hdlg);
+
+ CheckDlgButton(hdlg, IDC_STOREPASSPHRASES_CBOX, storepassphraseschecked);
+ CheckDlgButton(hdlg, IDC_IMPORTPUBLICKEYS_CBOX, autoimportpublickeyschecked);
+
+ strcpy(tag, starttag);
+ quoteEscapeSequences(tag);
+ SetDlgItemText(hdlg,IDC_STARTTAG_EDIT,(LPCTSTR)tag);
+ strcpy(tag, endtag);
+ quoteEscapeSequences(tag);
+ SetDlgItemText(hdlg,IDC_ENDTAG_EDIT,(LPCTSTR)tag);
+
+ SetDlgItemText(hdlg,IDC_LISTPUBLICKEYS_EDIT,(LPCTSTR)gpgArgsListPublicKeys);
+ SetDlgItemText(hdlg,IDC_LISTSECRETKEYS_EDIT,(LPCTSTR)gpgArgsListSecretKeys);
+ SetDlgItemText(hdlg,IDC_IMPORTPUBLICKEY_EDIT,(LPCTSTR)gpgArgsImportPublicKey);
+ SetDlgItemText(hdlg,IDC_EXPORTPUBLICKEY_EDIT,(LPCTSTR)gpgArgsExportPublicKey);
+ SetDlgItemText(hdlg,IDC_DETECTUSERID_EDIT,(LPCTSTR)gpgArgsDetectUserID);
+ SetDlgItemText(hdlg,IDC_ENCRYPT_EDIT,(LPCTSTR)gpgArgsEncrypt);
+ SetDlgItemText(hdlg,IDC_DECRYPT_EDIT,(LPCTSTR)gpgArgsDecrypt);
+ SetDlgItemText(hdlg,IDC_TEMPDIR_EDIT,(LPCTSTR)gpgTempdir);
+
+ CheckDlgButton(hdlg,IDC_LOGGINGON_CBOX,loggingonchecked);
+ SetDlgItemText(hdlg,IDC_LOGFILE_EDIT,(LPCTSTR)logfile);
+ break;
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lparam)->code)
+ {
+ case PSN_APPLY:
+ storepassphraseschecked=IsDlgButtonChecked(hdlg, IDC_STOREPASSPHRASES_CBOX);
+ DBWriteContactSettingDword(NULL, pluginid, dbstorepassphrases, storepassphraseschecked);
+ autoimportpublickeyschecked=IsDlgButtonChecked(hdlg, IDC_IMPORTPUBLICKEYS_CBOX);
+ DBWriteContactSettingDword(NULL, pluginid, dbautoimportpublickeys, autoimportpublickeyschecked);
+
+ // alle passphrasen loeschen
+ if(storepassphraseschecked==BST_UNCHECKED)
+ {
+ releasePassphrases();
+ initPassphrases();
+ }
+
+ GetDlgItemText(hdlg,IDC_STARTTAG_EDIT,(LPTSTR)starttag,sizeof(starttag));
+ unquoteEscapeSequences(starttag);
+ DBWriteContactSettingString(NULL,pluginid,dbstarttag,starttag);
+ GetDlgItemText(hdlg,IDC_ENDTAG_EDIT,(LPTSTR)endtag,sizeof(endtag));
+ unquoteEscapeSequences(endtag);
+ DBWriteContactSettingString(NULL,pluginid,dbendtag,endtag);
+
+ GetDlgItemText(hdlg,IDC_LISTPUBLICKEYS_EDIT,(LPTSTR)gpgArgsListPublicKeys,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dblistpublickeys,gpgArgsListPublicKeys);
+ GetDlgItemText(hdlg,IDC_LISTSECRETKEYS_EDIT,(LPTSTR)gpgArgsListSecretKeys,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dblistsecretkeys,gpgArgsListSecretKeys);
+ GetDlgItemText(hdlg,IDC_IMPORTPUBLICKEY_EDIT,(LPTSTR)gpgArgsImportPublicKey,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dbimportpublickey,gpgArgsImportPublicKey);
+ GetDlgItemText(hdlg,IDC_EXPORTPUBLICKEY_EDIT,(LPTSTR)gpgArgsExportPublicKey,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dbexportpublickey,gpgArgsExportPublicKey);
+ GetDlgItemText(hdlg,IDC_DETECTUSERID_EDIT,(LPTSTR)gpgArgsDetectUserID,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dbdetectuserid,gpgArgsDetectUserID);
+ GetDlgItemText(hdlg,IDC_ENCRYPT_EDIT,(LPTSTR)gpgArgsEncrypt,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dbencrypt,gpgArgsEncrypt);
+ GetDlgItemText(hdlg,IDC_DECRYPT_EDIT,(LPTSTR)gpgArgsDecrypt,argumentsize);
+ DBWriteContactSettingString(NULL,pluginid,dbdecrypt,gpgArgsDecrypt);
+ GetDlgItemText(hdlg,IDC_TEMPDIR_EDIT,(LPTSTR)gpgTempdir,fullfilenamesize);
+ DBWriteContactSettingString(NULL,pluginid,dbtempdir,gpgTempdir);
+
+ loggingonchecked=IsDlgButtonChecked(hdlg,IDC_LOGGINGON_CBOX);
+ DBWriteContactSettingDword(NULL,pluginid,dbloggingon,loggingonchecked);
+ GetDlgItemText(hdlg,IDC_LOGFILE_EDIT,(LPTSTR)logfile,fullfilenamesize);
+ DBWriteContactSettingString(NULL,pluginid,dblogfile,logfile);
+ break;
+ }
+ break;
+
+ case WM_COMMAND:
+ if (GetFocus()==(HWND)lparam)
+ {
+ if((HIWORD(wparam)==EN_CHANGE) // text verändert
+ ||((HIWORD(wparam)==BN_CLICKED)&&(LOWORD(wparam)==IDC_STOREPASSPHRASES_CBOX)) // check box
+ ||((HIWORD(wparam)==BN_CLICKED)&&(LOWORD(wparam)==IDC_IMPORTPUBLICKEYS_CBOX)) // check box
+ ||((HIWORD(wparam)==BN_CLICKED)&&(LOWORD(wparam)==IDC_LOGGINGON_CBOX))) // check box
+ SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0); // aktiviere apply button
+ }
+
+ switch (LOWORD(wparam))
+ {
+ case IDC_RESET_BTN:
+ // restaurieren der default werte
+ strcpy(gpgArgsListPublicKeys, txtgpgargslistpublickeys);
+ strcpy(gpgArgsListSecretKeys, txtgpgargslistsecretkeys);
+ strcpy(gpgArgsImportPublicKey, txtgpgargsimportpublickey);
+ strcpy(gpgArgsExportPublicKey, txtgpgargsexportpublickey);
+ strcpy(gpgArgsDetectUserID, txtgpgargsdetectuserid);
+ strcpy(gpgArgsEncrypt, txtgpgargsencrypt);
+ strcpy(gpgArgsDecrypt, txtgpgargsdecrypt);
+ strcpy(gpgTempdir, txtgpgtempdir);
+
+ // dialog aktualisieren
+ SetDlgItemText(hdlg,IDC_LISTPUBLICKEYS_EDIT,(LPCTSTR)gpgArgsListPublicKeys);
+ SetDlgItemText(hdlg,IDC_LISTSECRETKEYS_EDIT,(LPCTSTR)gpgArgsListSecretKeys);
+ SetDlgItemText(hdlg,IDC_IMPORTPUBLICKEY_EDIT,(LPCTSTR)gpgArgsImportPublicKey);
+ SetDlgItemText(hdlg,IDC_EXPORTPUBLICKEY_EDIT,(LPCTSTR)gpgArgsExportPublicKey);
+ SetDlgItemText(hdlg,IDC_DETECTUSERID_EDIT,(LPCTSTR)gpgArgsDetectUserID);
+ SetDlgItemText(hdlg,IDC_ENCRYPT_EDIT,(LPCTSTR)gpgArgsEncrypt);
+ SetDlgItemText(hdlg,IDC_DECRYPT_EDIT,(LPCTSTR)gpgArgsDecrypt);
+ SetDlgItemText(hdlg,IDC_TEMPDIR_EDIT,(LPCTSTR)gpgTempdir);
+
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); // aktiviere apply button
+ break;
+ }
+ break;
+ }
+ return 0;
+}