Skip to content

Commit 4956010

Browse files
committed
support re-ordering order sensitive items
1 parent db18f2c commit 4956010

1 file changed

Lines changed: 21 additions & 1 deletion

File tree

ui/settingsview.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
#include <QtCore/QAbstractItemModel>
44
#include <QtCore/QHash>
55
#include <QtCore/QItemSelection>
6+
#include <QtCore/QMimeData>
67
#include <QtCore/QModelIndex>
8+
#include <QtCore/QPoint>
79
#include <QtCore/QPointer>
810
#include <QtCore/QRegularExpression>
911
#include <QtCore/QSet>
@@ -12,6 +14,11 @@
1214
#include <QtCore/QStringList>
1315
#include <QtCore/QTimer>
1416
#include <QtCore/QVariant>
17+
#include <QtGui/QDrag>
18+
#include <QtGui/QDragEnterEvent>
19+
#include <QtGui/QDragLeaveEvent>
20+
#include <QtGui/QDragMoveEvent>
21+
#include <QtGui/QDropEvent>
1522
#include <QtGui/QMouseEvent>
1623
#include <QtWidgets/QCheckBox>
1724
#include <QtWidgets/QComboBox>
@@ -22,6 +29,7 @@
2229
#include <QtWidgets/QSpinBox>
2330
#include <QtWidgets/QStyledItemDelegate>
2431
#include <QtWidgets/QTableWidget>
32+
#include <QtWidgets/QToolButton>
2533
#include <QtWidgets/QTreeView>
2634
#include <QtWidgets/QVBoxLayout>
2735

@@ -166,33 +174,45 @@ class BINARYNINJAUIAPI ArrayStringSettingEditor : public QWidget
166174
QStringList m_enumValues;
167175
QSet<QString> m_defaultValueSet;
168176
bool m_readOnly = false;
177+
bool m_reorderable = false;
169178
QVBoxLayout* m_rowLayout = nullptr;
170179
QWidget* m_addRowWidget = nullptr;
171180
QLineEdit* m_addLineEdit = nullptr;
172181
QComboBox* m_addComboBox = nullptr;
173182
CustomStyleFlatToolButton* m_addButton = nullptr;
174183
std::vector<QWidget*> m_rows;
175184

185+
int m_dropIndicatorY = -1;
186+
QPoint m_dragStartPos;
187+
int m_dragSourceIndex = -1;
188+
176189
QLineEdit* addRowInputField() const;
177190
void clearRows();
178191
QString currentAddText() const;
179192
void appendRow(const QString& text);
180193
void updateTabOrder();
194+
int rowIndexAtY(int y) const;
195+
QToolButton* findRowGrip(QWidget* row) const;
181196

182197
private Q_SLOTS:
183198
void onAddClicked();
184199
void onRowEditingFinished();
185200
void onRowRemoveClicked();
186201

187202
public:
188-
ArrayStringSettingEditor(QWidget* parent, const QStringList& enumValues, const QStringList& defaultValues, bool readOnly);
203+
ArrayStringSettingEditor(QWidget* parent, const QStringList& enumValues, const QStringList& defaultValues, bool readOnly, bool reorderable);
189204

190205
void setValues(const QStringList& values);
191206
QStringList values() const;
192207
void clearAddText();
193208

194209
protected:
195210
void paintEvent(QPaintEvent* event) override;
211+
bool eventFilter(QObject* watched, QEvent* event) override;
212+
void dragEnterEvent(QDragEnterEvent* event) override;
213+
void dragMoveEvent(QDragMoveEvent* event) override;
214+
void dragLeaveEvent(QDragLeaveEvent* event) override;
215+
void dropEvent(QDropEvent* event) override;
196216

197217
Q_SIGNALS:
198218
void changed();

0 commit comments

Comments
 (0)