diff --git a/ui/NewX509.ui b/ui/NewX509.ui
index b4433db1..94fdeba1 100644
--- a/ui/NewX509.ui
+++ b/ui/NewX509.ui
@@ -68,7 +68,7 @@
-
- 0
+ 2
@@ -769,7 +769,7 @@
-
-
-
+
-
@@ -805,7 +805,7 @@
-
-
+
-
@@ -855,7 +855,7 @@
-
-
+
-
@@ -917,7 +917,7 @@
-
-
+
@@ -1176,16 +1176,16 @@
-
-
+
-
-
-
+
-
-
+
-
@@ -1194,16 +1194,16 @@
-
-
+
-
-
+
-
-
+
-
-
+
-
@@ -1302,6 +1302,11 @@
deleteCurrentRow()
+
+ DoubleClickLabel
+ QLabel
+
+
fromReqCB
diff --git a/ui/OidResolver.ui b/ui/OidResolver.ui
index 80e948e7..de90bae5 100644
--- a/ui/OidResolver.ui
+++ b/ui/OidResolver.ui
@@ -1,17 +1,17 @@
OidResolver
-
+
0
0
- 400
- 266
+ 401
+ 241
- Dialog
+ Form
-
@@ -38,7 +38,7 @@
-
- Enter The OID, the Nid, or one of the textual representations
+ Enter the OID, the Nid, or one of the textual representations
@@ -65,6 +65,9 @@
-
+
+ QFormLayout::AllNonFixedFieldsGrow
+
-
@@ -74,6 +77,12 @@
-
+
+
+ 0
+ 0
+
+
0
@@ -81,19 +90,18 @@
-
-
-
-
- -
-
-
- Short name
+
-
+
+
+ 0
+ 0
+
+
0
@@ -114,6 +122,12 @@
-
+
+
+ 0
+ 0
+
+
0
@@ -137,6 +151,12 @@
-
+
+
+ 0
+ 0
+
+
0
@@ -151,18 +171,15 @@
+ -
+
+
+ Short name
+
+
+
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Ok
-
-
-
@@ -174,38 +191,6 @@
-
- buttonBox
- accepted()
- OidResolver
- accept()
-
-
- 227
- 161
-
-
- 157
- 188
-
-
-
-
- buttonBox
- rejected()
- OidResolver
- reject()
-
-
- 295
- 167
-
-
- 286
- 188
-
-
-
input
textChanged(QString)
@@ -213,12 +198,12 @@
searchOid(QString)
- 131
- 65
+ 207
+ 103
- 398
- 12
+ 144
+ 47
diff --git a/widgets/MW_menu.cpp b/widgets/MW_menu.cpp
index c09defdb..2d49be1d 100644
--- a/widgets/MW_menu.cpp
+++ b/widgets/MW_menu.cpp
@@ -143,7 +143,7 @@ void MainWindow::init_menu()
SLOT(undelete()));
extra->addAction(tr("Generate DH parameter"), this,
SLOT(generateDHparam()));
- extra->addAction(tr("OID Resolver"), this, SLOT(resolveOID()));
+ extra->addAction(tr("OID Resolver"), resolver, SLOT(show()));
help = menuBar()->addMenu(tr("&Help") );
help->addAction(tr("&Content"), this, SLOT(help()),
@@ -402,10 +402,3 @@ QString MainWindow::getOptFlags()
flags << "disable_netscape";
return flags.join(",");
}
-
-void MainWindow::resolveOID()
-{
- OidResolver *o = new OidResolver(this);
- o->exec();
- delete o;
-}
diff --git a/widgets/MainWindow.cpp b/widgets/MainWindow.cpp
index e634fb45..152c4fed 100644
--- a/widgets/MainWindow.cpp
+++ b/widgets/MainWindow.cpp
@@ -61,6 +61,8 @@ QString MainWindow::mandatory_dn;
QString MainWindow::explicit_dn;
QString MainWindow::explicit_dn_default = QString("C,ST,L,O,OU,CN,emailAddress");
+OidResolver *MainWindow::resolver = NULL;
+
void MainWindow::enableTokenMenu(bool enable)
{
foreach(QWidget *w, scardList) {
@@ -89,7 +91,10 @@ MainWindow::MainWindow(QWidget *parent)
statusBar()->addWidget(dbindex, 1);
setupUi(this);
- setWindowTitle(tr(XCA_TITLE));
+ setWindowTitle(XCA_TITLE);
+
+ resolver = new OidResolver(NULL);
+ resolver->setWindowTitle(XCA_TITLE);
wdList << keyButtons << reqButtons << certButtons <<
tempButtons << crlButtons;
@@ -558,6 +563,14 @@ MainWindow::~MainWindow()
#endif
}
+void MainWindow::closeEvent(QCloseEvent *e)
+{
+ if (resolver) {
+ delete resolver;
+ }
+ QMainWindow::closeEvent(e);
+}
+
QString makeSalt(void)
{
unsigned char rand[2];
diff --git a/widgets/MainWindow.h b/widgets/MainWindow.h
index 05d53037..358681b4 100644
--- a/widgets/MainWindow.h
+++ b/widgets/MainWindow.h
@@ -9,6 +9,7 @@
#define __MAINWINDOW_H
#include "NewX509.h"
+#include "OidResolver.h"
#include "ui_MainWindow.h"
#include "lib/db_key.h"
#include "lib/db_x509req.h"
@@ -69,6 +70,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
Q_OBJECT
private:
+ static OidResolver *resolver;
QString workingdir;
QString string_opt;
QString pkcs11path;
@@ -122,6 +124,10 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
int initPass();
void read_cmdline(int argc, char *argv[]);
void load_engine();
+ static OidResolver *getResolver()
+ {
+ return resolver;
+ }
static void Error(errorEx &err);
void cmd_version();
void cmd_help(const char* msg);
@@ -160,6 +166,9 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
void openURLs();
void changeEvent(QEvent *event);
+ protected slots:
+ void closeEvent(QCloseEvent * event);
+
private slots:
void setOptions();
void manageToken();
@@ -169,6 +178,5 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
void initPin();
void generateDHparam();
void open_database(QAction* a);
- void resolveOID();
};
#endif
diff --git a/widgets/NewX509.cpp b/widgets/NewX509.cpp
index 8618d48c..0838b45d 100644
--- a/widgets/NewX509.cpp
+++ b/widgets/NewX509.cpp
@@ -142,11 +142,11 @@ NewX509::NewX509(QWidget *parent)
QWidget::setTabOrder(description, extDNlist);
QWidget *old = description;
foreach(int nid, expl_dn_nid) {
- QLabel *label;
+ DoubleClickLabel *label;
QLineEdit *edit;
QString trans = dn_translations[nid];
- label = new QLabel(this);
+ label = new DoubleClickLabel(this);
if (translate_dn && !trans.isEmpty()) {
label->setText(trans);
label->setToolTip(QString("[%1] %2")
@@ -156,6 +156,9 @@ NewX509::NewX509(QWidget *parent)
label->setToolTip(QString("[%1] %2")
.arg(OBJ_nid2sn(nid)).arg(trans));
}
+ label->setClickText(OBJ_nid2sn(nid));
+ connect(label, SIGNAL(doubleClicked(QString)),
+ MainWindow::getResolver(), SLOT(searchOid(QString)));
edit = new QLineEdit(this);
setupLineEditByNid(nid, edit);
nameEdits << nameEdit(nid, edit, label);
@@ -181,11 +184,11 @@ NewX509::NewX509(QWidget *parent)
old = reqSubChange;
n = 0;
foreach(int nid, attr_nid) {
- QLabel *label;
+ DoubleClickLabel *label;
QLineEdit *edit;
QString trans = dn_translations[nid];
- label = new QLabel(this);
+ label = new DoubleClickLabel(this);
if (translate_dn && !trans.isEmpty()) {
label->setText(trans);
label->setToolTip(QString(OBJ_nid2sn(nid)));
@@ -193,6 +196,9 @@ NewX509::NewX509(QWidget *parent)
label->setText(QString(OBJ_nid2ln(nid)));
label->setToolTip(trans);
}
+ label->setClickText(OBJ_nid2sn(nid));
+ connect(label, SIGNAL(doubleClicked(QString)),
+ MainWindow::getResolver(), SLOT(searchOid(QString)));
edit = new QLineEdit(this);
attrEdits << nameEdit(nid, edit, label);
setupLineEditByNid(nid, edit);
@@ -212,7 +218,7 @@ NewX509::NewX509(QWidget *parent)
pt = none;
notAfter->setEndDate(true);
- QMap nidLabel;
+ QMap nidLabel;
nidLabel[NID_subject_alt_name] = sanLbl;
nidLabel[NID_issuer_alt_name] = ianLbl;
nidLabel[NID_crl_distribution_points] = crldpLbl;
@@ -226,13 +232,16 @@ NewX509::NewX509(QWidget *parent)
nidLabel[NID_netscape_comment] = nsCommentLbl;
foreach(int nid, nidLabel.keys()) {
- QLabel *l = nidLabel[nid];
+ DoubleClickLabel *l = nidLabel[nid];
l->setText(translate_dn ?
dn_translations[nid] : OBJ_nid2ln(nid));
if (l->toolTip().isEmpty()) {
l->setToolTip(translate_dn ?
OBJ_nid2ln(nid) : dn_translations[nid]);
}
+ l->setClickText(OBJ_nid2sn(nid));
+ connect(l, SIGNAL(doubleClicked(QString)),
+ MainWindow::getResolver(), SLOT(searchOid(QString)));
}
QMap nidGroupBox;
diff --git a/widgets/OidResolver.cpp b/widgets/OidResolver.cpp
index 2a959754..7044e76e 100644
--- a/widgets/OidResolver.cpp
+++ b/widgets/OidResolver.cpp
@@ -12,7 +12,7 @@
#include "lib/exception.h"
OidResolver::OidResolver(QWidget *parent)
- :QDialog(parent)
+ :QWidget(parent)
{
setWindowTitle(tr(XCA_TITLE));
setupUi(this);
@@ -23,6 +23,7 @@ void OidResolver::searchOid(QString s)
bool ok;
int n;
+ input->setText(s);
s = s.trimmed();
n = s.toUInt(&ok);
if (!ok)
@@ -49,4 +50,6 @@ void OidResolver::searchOid(QString s)
}
}
ign_openssl_error();
+ show();
+ raise();
}
diff --git a/widgets/OidResolver.h b/widgets/OidResolver.h
index 8d42e7e2..6bbf1dc2 100644
--- a/widgets/OidResolver.h
+++ b/widgets/OidResolver.h
@@ -10,7 +10,7 @@
#include "ui_OidResolver.h"
-class OidResolver: public QDialog, public Ui::OidResolver
+class OidResolver: public QWidget, public Ui::OidResolver
{
Q_OBJECT
diff --git a/widgets/XcaTreeView.cpp b/widgets/XcaTreeView.cpp
index d53e4a5f..bb8745f2 100644
--- a/widgets/XcaTreeView.cpp
+++ b/widgets/XcaTreeView.cpp
@@ -274,7 +274,19 @@ void XcaTreeView::pem2clipboard(void)
basemodel->pem2clipboard(getSelectedIndexes());
}
-void XcaTreeView::contextMenu(QContextMenuEvent *e, QMenu *parent, int)
+void XcaTreeView::headerDetails(void)
+{
+ if (curr_hd && curr_hd->id > 0 && mainwin)
+ mainwin->getResolver()->searchOid(QString::number(curr_hd->id));
+}
+
+void XcaTreeView::columnRemove(void)
+{
+ if (curr_hd->action)
+ curr_hd->action->setChecked(false);
+}
+
+void XcaTreeView::contextMenu(QContextMenuEvent *e, QMenu *parent, int col)
{
int shown = 0;
tipMenu *menu, *dn, *v3ext, *current, *v3ns;
@@ -287,6 +299,15 @@ void XcaTreeView::contextMenu(QContextMenuEvent *e, QMenu *parent, int)
v3ext = new tipMenu(tr("X509v3 Extensions"), mainwin);
v3ns = new tipMenu(tr("Netscape extensions"), mainwin);
menu->addAction(tr("Reset"), basemodel, SLOT(columnResetDefaults()));
+ if (col >= 0 && col < allHeaders.size()) {
+ curr_hd = allHeaders[col];
+ menu->addAction(tr("Remove Column"), this,SLOT(columnRemove()));
+ if (curr_hd->id > 0)
+ menu->addAction(tr("Details"), this,
+ SLOT(headerDetails()));
+ } else {
+ curr_hd = NULL;
+ }
sep = menu->addSeparator();
foreach(hd, allHeaders) {
switch (hd->type) {
@@ -378,5 +399,5 @@ void XcaTreeView::showContextMenu(QContextMenuEvent *e,
fillContextMenu(menu, subExport, index, indexes);
- contextMenu(e, menu);
+ contextMenu(e, menu, -1);
}
diff --git a/widgets/XcaTreeView.h b/widgets/XcaTreeView.h
index 4a55da93..ab78cba6 100644
--- a/widgets/XcaTreeView.h
+++ b/widgets/XcaTreeView.h
@@ -17,6 +17,9 @@
class XcaTreeView: public QTreeView
{
Q_OBJECT
+
+ dbheader *curr_hd;
+
protected:
db_base *basemodel;
QSortFilterProxyModel *proxy;
@@ -56,5 +59,7 @@ class XcaTreeView: public QTreeView
void doubleClick(const QModelIndex &m);
void load(void);
void pem2clipboard(void);
+ void headerDetails(void);
+ void columnRemove(void);
};
#endif
diff --git a/widgets/clicklabel.cpp b/widgets/clicklabel.cpp
index c6269c44..21a3dae9 100644
--- a/widgets/clicklabel.cpp
+++ b/widgets/clicklabel.cpp
@@ -11,8 +11,22 @@
#include
#include
+void DoubleClickLabel::mouseDoubleClickEvent(QMouseEvent * e)
+{
+ QWidget::mouseDoubleClickEvent(e);
+ if (clicktext.isEmpty())
+ emit doubleClicked(text());
+ else
+ emit doubleClicked(clicktext);
+}
+
+void DoubleClickLabel::setClickText(QString s)
+{
+ clicktext = s;
+}
+
ClickLabel::ClickLabel(QWidget *parent)
- :QLabel(parent)
+ :DoubleClickLabel(parent)
{
QFont fnt( font() );
fnt.setBold(true);
@@ -31,12 +45,6 @@ ClickLabel::ClickLabel(QWidget *parent)
setTextFormat(Qt::PlainText);
}
-void ClickLabel::mouseDoubleClickEvent ( QMouseEvent * e )
-{
- QWidget::mouseDoubleClickEvent(e);
- emit doubleClicked(text());
-}
-
void ClickLabel::setColor(const QColor &col)
{
QPalette pal = palette();
@@ -62,7 +70,7 @@ void ClickLabel::disableToolTip()
CopyLabel::CopyLabel(QWidget *parent)
- :QLabel(parent)
+ :DoubleClickLabel(parent)
{
setFrameShape(QFrame::Panel);
setFrameShadow(QFrame::Sunken);
diff --git a/widgets/clicklabel.h b/widgets/clicklabel.h
index 745fdf8c..d25698ef 100644
--- a/widgets/clicklabel.h
+++ b/widgets/clicklabel.h
@@ -12,7 +12,23 @@
class QMouseEvent;
-class ClickLabel : public QLabel
+class DoubleClickLabel : public QLabel
+{
+ Q_OBJECT
+
+ QString clicktext;
+ public:
+ DoubleClickLabel(QWidget *parent) : QLabel(parent) { }
+ void setClickText(QString s);
+
+ protected:
+ void mouseDoubleClickEvent ( QMouseEvent * e );
+
+ signals:
+ void doubleClicked(QString text);
+};
+
+class ClickLabel : public DoubleClickLabel
{
Q_OBJECT
@@ -23,14 +39,10 @@ class ClickLabel : public QLabel
void disableToolTip();
protected:
- void mouseDoubleClickEvent ( QMouseEvent * e );
void setColor(const QColor &col);
-
- signals:
- void doubleClicked(QString text);
};
-class CopyLabel : public QLabel
+class CopyLabel : public DoubleClickLabel
{
Q_OBJECT
diff --git a/widgets/distname.cpp b/widgets/distname.cpp
index fb62f33e..7aed4833 100644
--- a/widgets/distname.cpp
+++ b/widgets/distname.cpp
@@ -13,7 +13,8 @@
#include "lib/x509name.h"
#include "lib/db_x509super.h"
#include "lib/base.h"
-#include "widgets/clicklabel.h"
+#include "clicklabel.h"
+#include "MainWindow.h"
DistName::DistName(QWidget* parent)
: QWidget(parent)
@@ -48,7 +49,8 @@ DistName::DistName(QWidget* parent)
void DistName::setX509name(const x509name &n)
{
- QLabel *l1, *l2;
+ DoubleClickLabel *l1;
+ QLabel *l2;
QStringList sl;
for (int i=0; isetTextFormat(Qt::PlainText);
l1->setText(label);
+ l1->setClickText(sl[1]);
if (l1->text().isEmpty())
l1->setText(sl[0]);
l2->setText(sl[2]);
@@ -73,6 +76,9 @@ void DistName::setX509name(const x509name &n)
l1->setToolTip(QString("[%1] %2").arg(sl[0]).arg(toolt));
l2->setToolTip(sl[3]);
+ connect(l1, SIGNAL(doubleClicked(QString)),
+ MainWindow::getResolver(), SLOT(searchOid(QString)));
+
DistNameLayout->addWidget(l1, i, 0);
DistNameLayout->addWidget(l2, i, 1);
}