summaryrefslogtreecommitdiff
path: root/plugins/warp/ui/shared/commitdialog.h
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2026-03-13 12:24:18 -0700
committerMason Reed <35282038+emesare@users.noreply.github.com>2026-03-24 18:46:48 -0700
commit3c88b11e5df33116580ac008e36092775df66135 (patch)
treecd64fbe149f05683ddabcccd0db7b87356f1f8cf /plugins/warp/ui/shared/commitdialog.h
parentf325aa7b6026a1daef84931baeb1f50d7da10c10 (diff)
[WARP] Improved UX and API
- Exposes WARP type objects directly - Adds processor API (for generating warp files directly) - Adds file and chunk API - Misc cleanup - Simplified the amount of commands - Replaced the "Create" commands with a purpose built processor dialog - Added a native QT viewer for WARP files - Simplified committing to a remote with a purpose built commit dialog
Diffstat (limited to 'plugins/warp/ui/shared/commitdialog.h')
-rw-r--r--plugins/warp/ui/shared/commitdialog.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/plugins/warp/ui/shared/commitdialog.h b/plugins/warp/ui/shared/commitdialog.h
new file mode 100644
index 00000000..ccbe8da1
--- /dev/null
+++ b/plugins/warp/ui/shared/commitdialog.h
@@ -0,0 +1,74 @@
+#pragma once
+
+#include <QDialog>
+#include <QStackedWidget>
+#include <QComboBox>
+#include <QProgressBar>
+#include <QThread>
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QSortFilterProxyModel>
+
+#include "binaryninjaapi.h"
+#include "source.h"
+#include "warp.h"
+#include "source.h"
+
+// Worker to commit a file to a container
+class WarpCommitWorker : public QThread
+{
+ Q_OBJECT
+
+ Warp::Ref<Warp::Container> m_container;
+ Warp::Source m_source;
+ Warp::Ref<Warp::File> m_file;
+
+public:
+ WarpCommitWorker(Warp::Ref<Warp::Container> container, Warp::Source source, Warp::Ref<Warp::File> file,
+ QObject* parent = nullptr) : QThread(parent), m_container(container), m_source(source), m_file(file)
+ {}
+
+ void run() override
+ {
+ for (const auto& chunk : m_file->GetChunks())
+ {
+ if (auto target = chunk->GetTarget())
+ m_container->AddFunctions(*target, m_source, chunk->GetFunctions());
+ m_container->AddTypes(m_source, chunk->GetTypes());
+ }
+
+ const bool result = m_container->CommitSource(m_source);
+ emit finishedCommitting(result);
+ }
+
+signals:
+ void finishedCommitting(bool success);
+};
+
+class CommitDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit CommitDialog(Warp::Ref<Warp::File> file, QWidget* parent = nullptr);
+
+private slots:
+ void onContainerChanged(int index);
+ void onCreateNewSource();
+ void onCommit();
+ void onCommitFinished(bool success);
+
+private:
+ void populateContainers();
+
+ Warp::Ref<Warp::File> m_file;
+ std::vector<Warp::Ref<Warp::Container>> m_containers;
+
+ QComboBox* m_containerCombo;
+ QLineEdit* m_sourceFilter;
+ QPushButton* m_addSourceButton;
+ QSortFilterProxyModel* m_proxyModel;
+ WarpSourcesView* m_sourcesView;
+ QPushButton* m_commitButton;
+}; \ No newline at end of file