1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#include "usersdialog.h"
#include "ui_usersdialog.h"
#include <QDebug>
#include <QRegExp>
/**
* @brief UsersDialog::UsersDialog basic constructor
* @param parent
*/
UsersDialog::UsersDialog(QWidget *parent)
: QDialog(parent), ui(new Ui::UsersDialog) {
ui->setupUi(this);
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
connect(ui->listWidget, SIGNAL(itemChanged(QListWidgetItem *)), this,
SLOT(itemChange(QListWidgetItem *)));
userList = NULL;
#if QT_VERSION >= 0x050200
ui->lineEdit->setClearButtonEnabled(true);
#endif
}
/**
* @brief UsersDialog::~UsersDialog basic destructor.
*/
UsersDialog::~UsersDialog() { delete ui; }
Q_DECLARE_METATYPE(UserInfo *)
/**
* @brief UsersDialog::itemChange update the item information.
* @param item
*/
void UsersDialog::itemChange(QListWidgetItem *item) {
if (!item)
return;
UserInfo *info = item->data(Qt::UserRole).value<UserInfo *>();
if (!info)
return;
info->enabled = item->checkState() == Qt::Checked;
}
/**
* @brief UsersDialog::setUsers update all the users.
* @param users
*/
void UsersDialog::setUsers(QList<UserInfo> *users) {
userList = users;
populateList("");
}
/**
* @brief UsersDialog::populateList update the view based on filter options
* (such as searching).
* @param filter
*/
void UsersDialog::populateList(const QString &filter) {
QRegExp nameFilter("*" + filter + "*");
nameFilter.setPatternSyntax(QRegExp::Wildcard);
nameFilter.setCaseSensitivity(Qt::CaseInsensitive);
ui->listWidget->clear();
if (userList) {
for (QList<UserInfo>::iterator it = userList->begin();
it != userList->end(); ++it) {
UserInfo &user(*it);
if (filter.isEmpty() || nameFilter.exactMatch(user.name)) {
if (!user.isValid() && !ui->checkBox->isChecked())
continue;
if (user.expiry.toTime_t() > 0 &&
user.expiry.daysTo(QDateTime::currentDateTime()) > 0 &&
!ui->checkBox->isChecked())
continue;
QString userText = user.name + "\n" + user.key_id;
if (user.created.toTime_t() > 0) {
userText += " " + tr("created") + " " +
user.created.toString(Qt::SystemLocaleShortDate);
}
if (user.expiry.toTime_t() > 0)
userText += " " + tr("expires") + " " +
user.expiry.toString(Qt::SystemLocaleShortDate);
QListWidgetItem *item = new QListWidgetItem(userText, ui->listWidget);
item->setCheckState(user.enabled ? Qt::Checked : Qt::Unchecked);
item->setData(Qt::UserRole, QVariant::fromValue(&user));
if (user.have_secret) {
// item->setForeground(QColor(32, 74, 135));
item->setForeground(Qt::blue);
QFont font;
font.setFamily(font.defaultFamily());
font.setBold(true);
item->setFont(font);
} else if (!user.isValid()) {
item->setBackground(QColor(164, 0, 0));
item->setForeground(Qt::white);
} else if (user.expiry.toTime_t() > 0 &&
user.expiry.daysTo(QDateTime::currentDateTime()) > 0) {
item->setForeground(QColor(164, 0, 0));
} else if (!user.fullyValid()) {
item->setBackground(QColor(164, 80, 0));
item->setForeground(Qt::white);
}
ui->listWidget->addItem(item);
}
}
}
}
/**
* @brief UsersDialog::on_lineEdit_textChanged typing in the searchbox.
* @param filter
*/
void UsersDialog::on_lineEdit_textChanged(const QString &filter) {
populateList(filter);
}
/**
* @brief UsersDialog::closeEvent might have to store size and location if that
* is wanted.
* @param event
*/
void UsersDialog::closeEvent(QCloseEvent *event) {
// TODO(annejan) save window size or somethign
event->accept();
}
/**
* @brief UsersDialog::on_checkBox_clicked filtering.
*/
void UsersDialog::on_checkBox_clicked() { populateList(ui->lineEdit->text()); }
/**
* @brief UsersDialog::keyPressEvent clear the lineEdit when escape is pressed.
* No action for Enter currently.
* @param event
*/
void UsersDialog::keyPressEvent(QKeyEvent *event) {
switch (event->key()) {
case Qt::Key_Escape:
ui->lineEdit->clear();
break;
default:
break;
}
}
|