improve extension UI

This commit is contained in:
Akash Mozumdar 2021-03-08 08:46:34 -07:00
parent 1bab6956a8
commit 20f35a02ed
2 changed files with 23 additions and 17 deletions

View File

@ -10,6 +10,7 @@
extern const char* EXTENSIONS; extern const char* EXTENSIONS;
extern const char* ADD_EXTENSION; extern const char* ADD_EXTENSION;
extern const char* REMOVE_EXTENSION;
extern const char* INVALID_EXTENSION; extern const char* INVALID_EXTENSION;
extern const char* CONFIRM_EXTENSION_OVERWRITE; extern const char* CONFIRM_EXTENSION_OVERWRITE;
extern const char* EXTENSION_WRITE_ERROR; extern const char* EXTENSION_WRITE_ERROR;
@ -95,11 +96,21 @@ namespace
QMessageBox::information(This, EXTENSIONS, QString(INVALID_EXTENSION).arg(extenFile.fileName())); QMessageBox::information(This, EXTENSIONS, QString(INVALID_EXTENSION).arg(extenFile.fileName()));
} }
void OpenMenu(QPoint point) void Delete()
{ {
QAction addExtension(ADD_EXTENSION); if (ui.extenList->currentItem())
if (QMenu::exec({ &addExtension }, ui.extenList->mapToGlobal(point), nullptr, This)) {
if (QString extenFile = QFileDialog::getOpenFileName(This, ADD_EXTENSION, ".", EXTENSIONS + QString(" (*.xdll)\nLibraries (*.dll)")); !extenFile.isEmpty()) Add(extenFile); Unload(ui.extenList->currentIndex().row());
Sync();
}
}
void ContextMenu(QPoint point)
{
QAction addExtension(ADD_EXTENSION), removeExtension(REMOVE_EXTENSION);
if (auto action = QMenu::exec({ &addExtension, &removeExtension }, ui.extenList->mapToGlobal(point), nullptr, This))
if (action == &removeExtension) Delete();
else if (QString extenFile = QFileDialog::getOpenFileName(This, ADD_EXTENSION, ".", EXTENSIONS + QString(" (*.xdll)\nLibraries (*.dll)")); !extenFile.isEmpty()) Add(extenFile);
} }
} }
@ -109,7 +120,7 @@ bool DispatchSentenceToExtensions(std::wstring& sentence, const InfoForExtension
wcscpy_s(sentenceBuffer, sentence.size() + 1, sentence.c_str()); wcscpy_s(sentenceBuffer, sentence.size() + 1, sentence.c_str());
concurrency::reader_writer_lock::scoped_lock_read readLock(extenMutex); concurrency::reader_writer_lock::scoped_lock_read readLock(extenMutex);
for (const auto& extension : extensions) for (const auto& extension : extensions)
if (*(sentenceBuffer = extension.callback(sentenceBuffer, sentenceInfo)) == L'\0') break; if (!*(sentenceBuffer = extension.callback(sentenceBuffer, sentenceInfo))) break;
sentence = sentenceBuffer; sentence = sentenceBuffer;
HeapFree(GetProcessHeap(), 0, sentenceBuffer); HeapFree(GetProcessHeap(), 0, sentenceBuffer);
return !sentence.empty(); return !sentence.empty();
@ -129,7 +140,7 @@ ExtenWindow::ExtenWindow(QWidget* parent) : QMainWindow(parent, Qt::WindowCloseB
ui.vboxLayout->addWidget(new QLabel(EXTEN_WINDOW_INSTRUCTIONS, this)); ui.vboxLayout->addWidget(new QLabel(EXTEN_WINDOW_INSTRUCTIONS, this));
setWindowTitle(EXTENSIONS); setWindowTitle(EXTENSIONS);
connect(ui.extenList, &QListWidget::customContextMenuRequested, OpenMenu); connect(ui.extenList, &QListWidget::customContextMenuRequested, ContextMenu);
ui.extenList->installEventFilter(this); ui.extenList->installEventFilter(this);
if (!QFile::exists(EXTEN_SAVE_FILE)) QTextFile(EXTEN_SAVE_FILE, QIODevice::WriteOnly).write(DEFAULT_EXTENSIONS); if (!QFile::exists(EXTEN_SAVE_FILE)) QTextFile(EXTEN_SAVE_FILE, QIODevice::WriteOnly).write(DEFAULT_EXTENSIONS);
@ -139,7 +150,7 @@ ExtenWindow::ExtenWindow(QWidget* parent) : QMainWindow(parent, Qt::WindowCloseB
bool ExtenWindow::eventFilter(QObject* target, QEvent* event) bool ExtenWindow::eventFilter(QObject* target, QEvent* event)
{ {
// See https://stackoverflow.com/questions/1224432/how-do-i-respond-to-an-internal-drag-and-drop-operation-using-a-qlistwidget/1528215 // https://stackoverflow.com/questions/1224432/how-do-i-respond-to-an-internal-drag-and-drop-operation-using-a-qlistwidget/1528215
if (event->type() == QEvent::ChildRemoved) if (event->type() == QEvent::ChildRemoved)
{ {
QStringList extenNames; QStringList extenNames;
@ -152,11 +163,7 @@ bool ExtenWindow::eventFilter(QObject* target, QEvent* event)
void ExtenWindow::keyPressEvent(QKeyEvent* event) void ExtenWindow::keyPressEvent(QKeyEvent* event)
{ {
if (event->key() == Qt::Key_Delete && ui.extenList->currentItem()) if (event->key() == Qt::Key_Delete) Delete();
{
Unload(ui.extenList->currentIndex().row());
Sync();
}
} }
void ExtenWindow::dragEnterEvent(QDragEnterEvent* event) void ExtenWindow::dragEnterEvent(QDragEnterEvent* event)

View File

@ -57,12 +57,11 @@ Negatives for data_offset/split_offset refer to registers
-C for RAX, -14 for RBX, -1C for RCX, -24 for RDX, and so on for RSP, RBP, RSI, RDI, R8-R15 -C for RAX, -14 for RBX, -1C for RCX, -24 for RDX, and so on for RSP, RBP, RSI, RDI, R8-R15
* means dereference pointer+deref_offset)"; * means dereference pointer+deref_offset)";
const char* SAVE_SETTINGS = u8"Save settings"; const char* SAVE_SETTINGS = u8"Save settings";
const char* EXTEN_WINDOW_INSTRUCTIONS = u8R"(To add an extension, right click the extension list const char* EXTEN_WINDOW_INSTRUCTIONS = u8R"(Right click the list to add/remove extensions
Alternatively, drag and drop the extension file from your computer Drag and drop extensions within the list to reorder them
To reorder extensions, drag and drop them within the list (Extensions are used from top to bottom: order DOES matter))";
(Extensions are used from top to bottom: order DOES matter)
To remove an extension, select it and press delete)";
const char* ADD_EXTENSION = u8"Add extension"; const char* ADD_EXTENSION = u8"Add extension";
const char* REMOVE_EXTENSION = u8"Remove extension";
const char* INVALID_EXTENSION = u8"%1 is an invalid extension"; const char* INVALID_EXTENSION = u8"%1 is an invalid extension";
const char* CONFIRM_EXTENSION_OVERWRITE = u8"Another version of this extension already exists, do you want to delete and overwrite it?"; const char* CONFIRM_EXTENSION_OVERWRITE = u8"Another version of this extension already exists, do you want to delete and overwrite it?";
const char* EXTENSION_WRITE_ERROR = u8"Failed to save extension"; const char* EXTENSION_WRITE_ERROR = u8"Failed to save extension";