Use common code formatting style.

This commit is contained in:
SET
2020-11-14 14:46:28 +01:00
parent a7146a07b2
commit a721bb0225
16 changed files with 144 additions and 82 deletions

View File

@@ -22,7 +22,8 @@ using namespace std;
/**
* Json configuration file reader.
*/
class AppConfig {
class AppConfig
{
public:
AppConfig(WText * notifyWidget);
virtual ~AppConfig();

View File

@@ -9,24 +9,29 @@
#include "GpgMECWorker.h"
GpgMECWorker::GpgMECWorker() {
GpgMECWorker::GpgMECWorker()
{
gpgme_error_t c_err = gpgme_new(&c_ctx);
}
GpgMECWorker::~GpgMECWorker() {
GpgMECWorker::~GpgMECWorker()
{
gpgme_release(c_ctx);
}
bool GpgMECWorker::DeleteKey(const char * fpr, bool secret, GpgME::Error& e) {
bool GpgMECWorker::DeleteKey(const char * fpr, bool secret, GpgME::Error& e)
{
gpgme_key_t c_key;
gpgme_error_t c_err = gpgme_get_key(c_ctx, fpr, &c_key, secret);
if (c_key == NULL) {
if (c_key == NULL)
{
e = GpgME::Error::fromCode(c_err);
return false;
}
int flags = secret ? GPGME_DELETE_ALLOW_SECRET | GPGME_DELETE_FORCE : GPGME_DELETE_FORCE;
c_err = gpgme_op_delete_ext(c_ctx, c_key, flags);
if (c_err != 0) {
if (c_err != 0)
{
e = GpgME::Error::fromCode(c_err);
return false;
}

View File

@@ -13,7 +13,8 @@
#include <gpgme.h>
#include <gpgme++/error.h>
class GpgMECWorker {
class GpgMECWorker
{
public:
GpgMECWorker();
virtual ~GpgMECWorker();

View File

@@ -28,7 +28,9 @@ K7Main::K7Main(const WEnvironment& env)
: WApplication(env)
{
m_config = NULL;
m_btnUpload = NULL; m_btnImport = NULL; m_btnDelete = NULL;
m_btnUpload = NULL;
m_btnImport = NULL;
m_btnDelete = NULL;
m_btnCreate = NULL;
WApplication::setTitle(_APPNAME_);
const WString bundle = WApplication::appRoot() + _APPNAME_;
@@ -62,7 +64,7 @@ K7Main::K7Main(const WEnvironment& env)
WLink link;
const WString cssFile = WApplication::appRoot() + _APPNAME_
+ WString(".css");
+ WString(".css");
link.setUrl(cssFile.toUTF8());
WApplication::useStyleSheet(link);
}
@@ -70,7 +72,8 @@ K7Main::K7Main(const WEnvironment& env)
K7Main::~K7Main()
{
delete m_config;
delete m_keyEdit; delete m_keyringIO;
delete m_keyEdit;
delete m_keyringIO;
}
void
@@ -90,7 +93,7 @@ K7Main::Create()
/*
* Load config JSON file.
* On error, just abort, AppConfig will print an error message in m_tmwMessage
*/
*/
m_config = new AppConfig(m_tmwMessage);
if (!m_config->LoadConfig())
return;
@@ -190,7 +193,7 @@ void K7Main::Search()
* configPrivKeys.at(i) : we want this to be a full key id(short, normal or fpr)
* But it can be any string in the config file (name, email...).
* lst can hence contain many keys.
*/
*/
vector<GpgME::Key> lst = gpgw.FindKeys(configPrivKeys.at(i).toUTF8().c_str(), true, e);
if (e.code() != 0)
{
@@ -225,7 +228,8 @@ void K7Main::Search()
}
}
if (m_ttbKeys->columnCount() == 1) {
if (m_ttbKeys->columnCount() == 1)
{
m_ttbKeys->addColumn(TR("ID"), 120);
m_ttbKeys->addColumn(TR("OwnerTrust"), 210);
m_ttbKeys->addColumn(TR("Fpr"), 300);
@@ -268,13 +272,15 @@ void K7Main::DisplayKeys(const vector<GpgME::Key>& kList, const WString& grpLabe
anc->clicked().connect(std::bind(&K7Main::OnKeyAnchorClicked, this, anc));
keyNode->setColumnWidget(1, unique_ptr<WAnchor> (anc));
WText * lblOwnerTrust = new WText(OwnerTrustLevel[k.ownerTrust()]);
if (m_config->CanEditOwnerTrust()) {
if (m_config->CanEditOwnerTrust())
{
/*
* Here we allow the owner trust level of primary keys to be changed anytime.
* Kleopatra doesn't do that for primary keys having ultimate trust level.
*/
bool isOurKey = Tools::IsOurKey(k.primaryFingerprint(), ourKeys);
if (!isOurKey || (isOurKey && k.hasSecret())) {
if (!isOurKey || (isOurKey && k.hasSecret()))
{
lblOwnerTrust->doubleClicked().connect(std::bind(&KeyEdit::OnOwnerTrustDoubleClicked, m_keyEdit, keyNode, k.hasSecret()));
lblOwnerTrust->setToolTip(TR("TTTDoubleCLick"));
}
@@ -335,7 +341,8 @@ void K7Main::DisplayUids(const WString& fullKeyID, bool secret)
uidNode->setColumnWidget(1, unique_ptr<TreeTableNodeText> (ttntUidEmail));
// Show key certify popup on double click
WText * lblUidValidity = new WText(UidValidities[uid.validity()]);
if (m_config->CanEditUidValidity()) {
if (m_config->CanEditUidValidity())
{
lblUidValidity->setToolTip(TR("TTTDoubleCLick"));
lblUidValidity->doubleClicked().connect(std::bind(&KeyEdit::OnUidValidityClicked, m_keyEdit, uidNode, privateKeys, WString(k.primaryFingerprint())));
}
@@ -389,8 +396,8 @@ void K7Main::DisplaySubKeys(const WString& fullKeyID, bool secret)
rootNode->expand();
vector<WString> ourKeys = m_config->PrivateKeyIds();
bool canEditExpiry = m_config->CanEditExpiryTime()
&& Tools::KeyHasSecret(k.primaryFingerprint())
&& Tools::IsOurKey(k.primaryFingerprint(), ourKeys);
&& Tools::KeyHasSecret(k.primaryFingerprint())
&& Tools::IsOurKey(k.primaryFingerprint(), ourKeys);
for (uint i = 0; i < k.numSubkeys(); i++)
{
Subkey sk = k.subkey(i);
@@ -400,7 +407,8 @@ void K7Main::DisplaySubKeys(const WString& fullKeyID, bool secret)
skNode->setColumnWidget(1, unique_ptr<TreeTableNodeText> (ttntFpr));
WString exp = sk.neverExpires() ? TR("Never") : MakeDateTimeLabel(sk.expirationTime());
WText * lblExpiry = new WText(exp);
if (canEditExpiry) {
if (canEditExpiry)
{
lblExpiry->setToolTip(TR("TTTDoubleCLick"));
lblExpiry->doubleClicked().connect(std::bind(&KeyEdit::OnExpiryClicked, m_keyEdit, skNode, WString(k.primaryFingerprint())));
}

View File

@@ -54,8 +54,8 @@ private:
WLineEdit * m_leSearch;
WPushButton * m_btnUpload;
WPushButton * m_btnImport;
WPushButton * m_btnDelete ;
WPushButton * m_btnCreate ;
WPushButton * m_btnDelete;
WPushButton * m_btnCreate;
WTreeTable * m_ttbKeys;
WTreeTable * m_ttbUids;
WTreeTable * m_ttbSubKeys;

View File

@@ -17,7 +17,7 @@
using namespace std;
KeyEdit::KeyEdit(K7Main * owner)
:WObject()
: WObject()
{
m_owner = owner;
m_popupUid = NULL;
@@ -41,7 +41,8 @@ void KeyEdit::OnOwnerTrustDoubleClicked(WTreeTableNode * keyNode, bool keyHasSec
WText * lblFpr = static_cast<WText*> (keyNode->columnWidget(3));
vector<WString> ourKeys = m_owner->m_config->PrivateKeyIds();
if (!Tools::IsOurKey(lblFpr->text(), ourKeys)
&& Tools::KeyHasSecret(lblFpr->text())) {
&& Tools::KeyHasSecret(lblFpr->text()))
{
m_owner->m_tmwMessage->SetText(TR("OwnerTrustReadOnly"));
return;
}
@@ -57,7 +58,7 @@ void KeyEdit::OnOwnerTrustDoubleClicked(WTreeTableNode * keyNode, bool keyHasSec
/*
* Prepare to check for change in combobox item.
* Change is detected by index, not value.
*/
*/
cmbOwnerTrust->setAttributeValue("previousTrustLevel", std::to_string(cmbOwnerTrust->currentIndex()));
keyNode->setColumnWidget(2, unique_ptr<WComboBox> (cmbOwnerTrust));
// +++
@@ -102,10 +103,13 @@ void KeyEdit::FillOwnerTrustCombo(WComboBox * cmb, bool keyHasSecret)
vector<unique_ptr < WStandardItem>> colText;
colIndex.push_back(cpp14::make_unique<WStandardItem> (std::to_string(UserID::Validity::Unknown)));
colText.push_back(cpp14::make_unique<WStandardItem> (TR("UidUnknown")));
if (keyHasSecret) {
if (keyHasSecret)
{
colIndex.push_back(cpp14::make_unique<WStandardItem> (std::to_string(UserID::Validity::Ultimate)));
colText.push_back(cpp14::make_unique<WStandardItem> (TR("UidUltimate")));
} else {
}
else
{
colIndex.push_back(cpp14::make_unique<WStandardItem> (std::to_string(UserID::Validity::Never)));
colText.push_back(cpp14::make_unique<WStandardItem> (TR("UidNever")));
colIndex.push_back(cpp14::make_unique<WStandardItem> (std::to_string(UserID::Validity::Marginal)));
@@ -122,7 +126,8 @@ void KeyEdit::FillOwnerTrustCombo(WComboBox * cmb, bool keyHasSecret)
void KeyEdit::OnUidValidityClicked(WTreeTableNode* uidNode, vector<WString>& privateKeys, const WString& targetKeyFpr)
{
if (targetKeyFpr != m_targetUidValidityKeyFpr) {
if (targetKeyFpr != m_targetUidValidityKeyFpr)
{
bool passwordVisibility = true;
if (m_popupUid)
passwordVisibility = m_popupUid->IsPasswordVisible();
@@ -140,7 +145,8 @@ void KeyEdit::OnUidValidityClicked(WTreeTableNode* uidNode, vector<WString>& pri
void KeyEdit::CertifyKey()
{
vector<uint>& uidsToSign = m_popupUid->GetUidsToSign();
if (uidsToSign.size() == 0) {
if (uidsToSign.size() == 0)
{
m_owner->m_tmwMessage->SetText(TR("NoUidSelected"));
return;
}
@@ -165,7 +171,8 @@ void KeyEdit::CertifyKey()
void KeyEdit::OnExpiryClicked(WTreeTableNode* subkeyNode, const WString& keyFpr)
{
if (keyFpr != m_expiryEditedKeyFpr) {
if (keyFpr != m_expiryEditedKeyFpr)
{
delete m_popupExpiryTime;
WText * lblExpiry = static_cast<WText*> (subkeyNode->columnWidget(2));
m_popupExpiryTime = new PopupExpiryTime(lblExpiry, m_owner->m_tmwMessage);

View File

@@ -233,7 +233,7 @@ void KeyringIO::DoCreateKey()
{
const WString fpr(k.primaryFingerprint());
m_tmwMessage->SetText(TR("CreateSuccess")
+ fpr + WString(" - ") + WString(k.userID(0).name()));
+ fpr + WString(" - ") + WString(k.userID(0).name()));
// Add the key fingerprint to the list of keys managed by the user.
m_config->UpdateSecretKeyOwnership(fpr, true);
m_popupCreate->hide();

View File

@@ -63,6 +63,7 @@ public:
* @param show
*/
void ShowPassphrase(bool show = true);
/**
* Used to restore the state of the widgets when target key changes.
* @return
@@ -72,6 +73,7 @@ public:
// isVisible is always false when the popup is hidden !
return !(m_lePassphrase->isHidden());
}
/**
* Used to forward the passphrase to the loopback passphrase provider.
* @return
@@ -80,6 +82,7 @@ public:
{
return m_lePassphrase->text().toUTF8();
}
/**
* Obviously.
* @return
@@ -88,6 +91,7 @@ public:
{
return m_fprKeyToSign;
}
/**
* We can select what identity (email) to certify. GPG expects it as a
* vector of indices.
@@ -97,6 +101,7 @@ public:
{
return m_uidsToSign;
}
/**
* Sum of option values
* <ul>
@@ -110,6 +115,7 @@ public:
{
return m_certifyOptions;
}
/**
* Caller binds its certify function here.
* @return

View File

@@ -15,18 +15,24 @@
using namespace std;
PopupDelete::PopupDelete(WWidget * anchorWidget, TransientMessageWidget * txtMessage, const WLength& width)
: WPopupWidget(cpp14::make_unique<WContainerWidget>()) {
m_tmwMessage = txtMessage; m_cwMain = NULL; m_cbConfirm = NULL;
m_cbReConfirm = NULL; m_btnDelete = NULL;
: WPopupWidget(cpp14::make_unique<WContainerWidget>())
{
m_tmwMessage = txtMessage;
m_cwMain = NULL;
m_cbConfirm = NULL;
m_cbReConfirm = NULL;
m_btnDelete = NULL;
setTransient(true);
setAnchorWidget(anchorWidget);
setWidth(width);
}
PopupDelete::~PopupDelete() {
PopupDelete::~PopupDelete()
{
}
void PopupDelete::Create() {
void PopupDelete::Create()
{
m_cwMain = static_cast<WContainerWidget*> (implementation());
// White in css file, like default background color.
m_cwMain->setStyleClass("popup");
@@ -45,7 +51,8 @@ void PopupDelete::Create() {
this->hidden().connect(this, &PopupDelete::Reset);
}
void PopupDelete::Reset() {
void PopupDelete::Reset()
{
m_btnDelete->hide();
m_cbReConfirm->setUnChecked();
m_cbReConfirm->hide();
@@ -53,12 +60,14 @@ void PopupDelete::Reset() {
m_cbConfirm->show();
}
void PopupDelete::OnCbConfirm() {
void PopupDelete::OnCbConfirm()
{
m_cbReConfirm->setHidden(m_cbConfirm->checkState() != CheckState::Checked);
m_cbReConfirm->setUnChecked();
m_btnDelete->setHidden(m_cbReConfirm->checkState() != CheckState::Checked);
}
void PopupDelete::OnCbReConfirm() {
void PopupDelete::OnCbReConfirm()
{
m_btnDelete->setHidden(m_cbReConfirm->checkState() != CheckState::Checked);
}

View File

@@ -17,20 +17,26 @@
#include "TransientMessageWidget.h"
using namespace Wt;
/**
* A transient popup window with a forward confirmation
* before deleting a key.
*/
class PopupDelete : public WPopupWidget {
class PopupDelete : public WPopupWidget
{
public:
PopupDelete(WWidget * anchorWidget, TransientMessageWidget * txtMessage, const WLength& width = 350);
virtual ~PopupDelete();
void Create();
/**
* Caller can bind the delete function to this button.
* @return
*/
WPushButton* GetDeleteButton() {return m_btnDelete;}
WPushButton* GetDeleteButton()
{
return m_btnDelete;
}
private:
TransientMessageWidget * m_tmwMessage;
WContainerWidget * m_cwMain;

View File

@@ -16,7 +16,7 @@
using namespace std;
PopupExpiryTime::PopupExpiryTime(WWidget * anchorWidget, TransientMessageWidget * txtMessage,
const WLength& width)
const WLength& width)
: WPopupWidget(cpp14::make_unique<WContainerWidget>())
{
m_tmwMessage = txtMessage;

View File

@@ -15,18 +15,25 @@
using namespace std;
PopupUpload::PopupUpload(WWidget * anchorWidget, TransientMessageWidget * txtMessage, const WLength& width)
: WPopupWidget(cpp14::make_unique<WContainerWidget>()) {
m_tmwMessage = txtMessage; m_upload = NULL; m_cwMain = NULL;
m_cbConfirm = NULL; m_cbReConfirm = NULL; m_btnUpload = NULL;
: WPopupWidget(cpp14::make_unique<WContainerWidget>())
{
m_tmwMessage = txtMessage;
m_upload = NULL;
m_cwMain = NULL;
m_cbConfirm = NULL;
m_cbReConfirm = NULL;
m_btnUpload = NULL;
setTransient(true);
setAnchorWidget(anchorWidget);
setWidth(width);
}
PopupUpload::~PopupUpload() {
PopupUpload::~PopupUpload()
{
}
void PopupUpload::Create() {
void PopupUpload::Create()
{
m_upload = new WFileUpload();
m_upload->setFileTextSize(10240); // Is really approximate
m_upload->setMultiple(false);
@@ -54,7 +61,8 @@ void PopupUpload::Create() {
this->hidden().connect(this, &PopupUpload::Reset);
}
void PopupUpload::Reset() {
void PopupUpload::Reset()
{
m_btnUpload->hide();
m_cbReConfirm->setUnChecked();
m_cbReConfirm->hide();
@@ -62,31 +70,40 @@ void PopupUpload::Reset() {
m_cbConfirm->show();
m_btnUpload->enable();
}
void PopupUpload::OnCbConfirm() {
void PopupUpload::OnCbConfirm()
{
m_cbReConfirm->setHidden(m_cbConfirm->checkState() != CheckState::Checked);
m_cbReConfirm->setUnChecked();
m_btnUpload->setHidden(m_cbReConfirm->checkState() != CheckState::Checked);
}
void PopupUpload::OnCbReConfirm() {
void PopupUpload::OnCbReConfirm()
{
m_btnUpload->setHidden(m_cbReConfirm->checkState() != CheckState::Checked);
}
void PopupUpload::DoUpload() {
if (m_upload->canUpload()) {
void PopupUpload::DoUpload()
{
if (m_upload->canUpload())
{
m_btnUpload->disable();
m_upload->upload();
} else {
}
else
{
m_tmwMessage->SetText(TR("CantUpload"));
}
}
void PopupUpload::OnUploadDone() {
void PopupUpload::OnUploadDone()
{
m_sigUploadDone.emit(m_upload->spoolFileName());
m_btnUpload->enable();
}
void PopupUpload::OnFileTooLarge() {
void PopupUpload::OnFileTooLarge()
{
m_tmwMessage->SetText(TR("FileTooLarge"));
m_btnUpload->enable();
}

View File

@@ -49,9 +49,11 @@ void TransientMessageWidget::OnTimer()
void TransientMessageWidget::SetText(const WString& text, bool stack)
{
m_timer.stop();
if (stack) {
if (stack)
{
// Remove the oldest message if stack is full
if (m_stack.size() == m_stackSize) {
if (m_stack.size() == m_stackSize)
{
m_stack.pop_back();
}
m_stack.push_front(text);