Browse Source

Add Delete and Backspace shortcuts to group files

master
evgeny 7 days ago
parent
commit
043257cabf
  1. 13
      tools/chatgui/src/member_files/browser.cpp
  2. 42
      tools/chatgui/tests/test_member_files_browser.cpp

13
tools/chatgui/src/member_files/browser.cpp

@ -30,6 +30,7 @@
#include <QClipboard>
#include <QGuiApplication>
#include <QAction>
#include <QShortcut>
#include <QDir>
#include <QTemporaryDir>
#include <QStandardPaths>
@ -142,6 +143,18 @@ MemberFileBrowser::MemberFileBrowser(DbManager* db, QWidget* parent) : QDialog(p
connect(m_mkdir, &QPushButton::clicked, this, [this]() { mutate(MF_MKDIR); });
connect(m_rename, &QPushButton::clicked, this, [this]() { mutate(MF_RENAME); });
connect(m_remove, &QPushButton::clicked, this, [this]() { mutate(MF_REMOVE_PATH); });
auto* removeShortcut = new QShortcut(QKeySequence(Qt::Key_Delete), m_entries);
removeShortcut->setContext(Qt::WidgetWithChildrenShortcut); removeShortcut->setAutoRepeat(false);
connect(removeShortcut, &QShortcut::activated, this, [this] {
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "file browser: Delete key path=%s enabled=%d", qPrintable(selectedPath()), m_remove->isEnabled());
m_remove->click();
});
auto* upShortcut = new QShortcut(QKeySequence(Qt::Key_Backspace), m_entries);
upShortcut->setContext(Qt::WidgetWithChildrenShortcut); upShortcut->setAutoRepeat(false);
connect(upShortcut, &QShortcut::activated, this, [this, up] {
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "file browser: Backspace key path=%s enabled=%d", qPrintable(m_path), up->isEnabled());
up->click();
});
connect(m_cancel, &QPushButton::clicked, this, &MemberFileBrowser::cancel);
m_entries->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_entries, &QWidget::customContextMenuRequested, this, [this](const QPoint& point) {

42
tools/chatgui/tests/test_member_files_browser.cpp

@ -102,6 +102,48 @@ private slots:
}
void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; }
void deleteAndParentShortcuts() {
sqlite3* sql = nullptr; QCOMPARE(sqlite3_open(":memory:", &sql), SQLITE_OK);
QCOMPARE(sqlite3_exec(sql, "CREATE TABLE accounts(node_id INTEGER,display_name TEXT);"
"INSERT INTO accounts VALUES(11,'Other'),(22,'Me'),(33,'Server');"
"CREATE TABLE peers_42(node_id INTEGER,adm_tags TEXT,adm_tags_sig BLOB,deleted INTEGER,source INTEGER);"
"INSERT INTO peers_42 VALUES(11,'{}',NULL,0,0),(22,'{}',NULL,0,0),"
"(33,'{\"storage\":\"yes\"}',zeroblob(64),0,0);", nullptr, nullptr, nullptr), SQLITE_OK);
DbManager db; db.setDb(sql); db.setMyNodeId(22);
{
MemberFileBrowser browser(&db); browser.setChannel("42", 22); browser.show(); browser.activateWindow();
auto* tree = browser.findChild<QTreeWidget*>(); auto* location = browser.findChild<QLineEdit*>();
location->setText("documents/nested"); QTest::keyClick(location, Qt::Key_Return);
auto* item = new QTreeWidgetItem(tree, {"remote.txt"});
item->setData(0, Qt::UserRole, "remote.txt"); item->setData(0, Qt::UserRole + 1, MF_FILE);
item->setData(0, Qt::UserRole + 2, QByteArray(16, '\7')); tree->setCurrentItem(item);
tree->setFocus(); QTRY_VERIFY(tree->hasFocus());
auto previous = captured.message.request_id;
answerDialog(QMessageBox::No); QTest::keyClick(tree, Qt::Key_Delete);
QCOMPARE(captured.message.request_id, previous);
answerDialog(QMessageBox::Yes); QTest::keyClick(tree, Qt::Key_Delete);
QCOMPARE(captured.message.command, uint8_t(MF_REMOVE_PATH)); QCOMPARE(captured.message.owner, 22ULL);
QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/nested/remote.txt"));
QCOMPARE(QByteArray((const char*)captured.message.version, 16), QByteArray(16, '\7'));
location->setFocus(); location->setText("abc"); location->setCursorPosition(1);
previous = captured.message.request_id;
QTest::keyClick(location, Qt::Key_Delete); QCOMPARE(location->text(), QString("ac"));
QTest::keyClick(location, Qt::Key_Backspace); QCOMPARE(location->text(), QString("c"));
QCOMPARE(captured.message.request_id, previous);
tree->setFocus(); QTest::keyClick(tree, Qt::Key_Backspace);
QCOMPARE(captured.message.command, uint8_t(MF_LIST)); QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents"));
QTest::keyClick(tree, Qt::Key_Backspace); QCOMPARE(QString::fromUtf8(captured.message.path), QString());
QTest::keyClick(tree, Qt::Key_Backspace); QCOMPARE(captured.message.owner, 0ULL);
browser.setChannel("42", 11);
item = new QTreeWidgetItem(tree, {"foreign.txt"}); item->setData(0, Qt::UserRole, "foreign.txt");
item->setData(0, Qt::UserRole + 1, MF_FILE); tree->setCurrentItem(item);
previous = captured.message.request_id;
QTest::keyClick(tree, Qt::Key_Delete); QCOMPARE(captured.message.request_id, previous);
QVERIFY(!QApplication::activeModalWidget());
}
db.setDb(nullptr); QCOMPARE(sqlite3_close(sql), SQLITE_OK);
}
void exportToSystemClipboardAndSingleDrag_data() {
QTest::addColumn<int>("dragStatus");
QTest::newRow("success") << int(MF_OK);

Loading…
Cancel
Save