preserve the binary content of keys and bucket names during edit operations
This commit is contained in:
parent
21588021d3
commit
26f7a11d80
@ -35,6 +35,8 @@ MainWindow::~MainWindow()
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const int BdbPointerRole = Qt::UserRole + 1;
|
static const int BdbPointerRole = Qt::UserRole + 1;
|
||||||
|
static const int BinaryDataRole = Qt::UserRole + 2;
|
||||||
|
|
||||||
#define SET_BDB(top, bdb) top->setData(0, BdbPointerRole, QVariant::fromValue<void*>(static_cast<void*>(bdb)))
|
#define SET_BDB(top, bdb) top->setData(0, BdbPointerRole, QVariant::fromValue<void*>(static_cast<void*>(bdb)))
|
||||||
#define GET_BDB(top) static_cast<BoltDB*>( top->data(0, BdbPointerRole).value<void*>() )
|
#define GET_BDB(top) static_cast<BoltDB*>( top->data(0, BdbPointerRole).value<void*>() )
|
||||||
|
|
||||||
@ -86,6 +88,12 @@ void MainWindow::openDatabase(QString file, bool readOnly)
|
|||||||
ui->bucketTree->expandItem(top);
|
ui->bucketTree->expandItem(top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const QString getDisplayName(const QByteArray &qba) {
|
||||||
|
// FIXME the formatting isn't so great when control characters, etc. are used
|
||||||
|
// A C-style escape display, or the unicode-replacement-character would be preferable
|
||||||
|
return QString::fromUtf8(qba);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::refreshBucketTree(QTreeWidgetItem* itm)
|
void MainWindow::refreshBucketTree(QTreeWidgetItem* itm)
|
||||||
{
|
{
|
||||||
QTreeWidgetItem *top = itm;
|
QTreeWidgetItem *top = itm;
|
||||||
@ -108,7 +116,8 @@ void MainWindow::refreshBucketTree(QTreeWidgetItem* itm)
|
|||||||
error,
|
error,
|
||||||
[=](QByteArray qba){
|
[=](QByteArray qba){
|
||||||
QTreeWidgetItem *child = new QTreeWidgetItem();
|
QTreeWidgetItem *child = new QTreeWidgetItem();
|
||||||
child->setText(0, QString::fromUtf8(qba));
|
child->setText(0, getDisplayName(qba));
|
||||||
|
child->setData(0, BinaryDataRole, qba);
|
||||||
child->setIcon(0, QIcon(":/rsrc/table.png"));
|
child->setIcon(0, QIcon(":/rsrc/table.png"));
|
||||||
itm->addChild(child);
|
itm->addChild(child);
|
||||||
|
|
||||||
@ -257,7 +266,8 @@ void MainWindow::refreshData(BoltDB *bdb, QStringList browse)
|
|||||||
QString err;
|
QString err;
|
||||||
bool ok = bdb->listKeys(browse, err, [=](QByteArray name, int64_t dataLen) {
|
bool ok = bdb->listKeys(browse, err, [=](QByteArray name, int64_t dataLen) {
|
||||||
auto *itm = new QTreeWidgetItem();
|
auto *itm = new QTreeWidgetItem();
|
||||||
itm->setText(0, QString::fromUtf8(name));
|
itm->setText(0, getDisplayName(name));
|
||||||
|
itm->setData(0, BinaryDataRole, name);
|
||||||
itm->setText(1, QString("%1").arg(dataLen));
|
itm->setText(1, QString("%1").arg(dataLen));
|
||||||
ui->bucketData->addTopLevelItem(itm);
|
ui->bucketData->addTopLevelItem(itm);
|
||||||
});
|
});
|
||||||
@ -320,15 +330,15 @@ void MainWindow::on_bucketData_doubleClicked(const QModelIndex &index)
|
|||||||
// Get item key
|
// Get item key
|
||||||
|
|
||||||
auto model = index.model();
|
auto model = index.model();
|
||||||
QString key = model->data(model->index(index.row(), 0), 0).toString();
|
const QByteArray& key = model->data(model->index(index.row(), 0), BinaryDataRole).toByteArray();
|
||||||
|
|
||||||
// DB lookup
|
// DB lookup
|
||||||
|
|
||||||
bdb->getData(
|
bdb->getData(
|
||||||
browse,
|
browse,
|
||||||
key.toUtf8(),
|
key,
|
||||||
[=](QByteArray content) {
|
[=](QByteArray content) {
|
||||||
openEditor(bdb, browse, key.toUtf8(), content);
|
openEditor(bdb, browse, key, content);
|
||||||
},
|
},
|
||||||
[=](QString error) {
|
[=](QString error) {
|
||||||
QMessageBox qmb;
|
QMessageBox qmb;
|
||||||
@ -369,8 +379,16 @@ void MainWindow::on_actionDelete_bucket_triggered()
|
|||||||
GET_ITM_TOP_BROWSE_BDB;
|
GET_ITM_TOP_BROWSE_BDB;
|
||||||
|
|
||||||
// Prompt for confirmation
|
// Prompt for confirmation
|
||||||
QString bucketToDelete = itm->text(0);
|
const QByteArray& bucketToDelete = itm->data(0, BinaryDataRole).toByteArray();
|
||||||
if (QMessageBox::question(this, tr("Delete bucket"), tr("Are you sure you want to remove the bucket '%1'?").arg(bucketToDelete), QMessageBox::Yes, QMessageBox::Cancel) != QMessageBox::Yes) {
|
if (
|
||||||
|
QMessageBox::question(
|
||||||
|
this,
|
||||||
|
tr("Delete bucket"),
|
||||||
|
tr("Are you sure you want to remove the bucket '%1'?").arg(getDisplayName(bucketToDelete)),
|
||||||
|
QMessageBox::Yes,
|
||||||
|
QMessageBox::Cancel
|
||||||
|
) != QMessageBox::Yes
|
||||||
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,7 +399,7 @@ void MainWindow::on_actionDelete_bucket_triggered()
|
|||||||
browse.pop_back();
|
browse.pop_back();
|
||||||
|
|
||||||
QString err;
|
QString err;
|
||||||
if (! bdb->deleteBucket(browse, bucketToDelete.toUtf8(), err)) {
|
if (! bdb->deleteBucket(browse, bucketToDelete, err)) {
|
||||||
QMessageBox qmb;
|
QMessageBox qmb;
|
||||||
qmb.setText(tr("Error removing bucket: %1").arg(err));
|
qmb.setText(tr("Error removing bucket: %1").arg(err));
|
||||||
qmb.exec();
|
qmb.exec();
|
||||||
|
Loading…
Reference in New Issue
Block a user