Rework macro segment list widget

- Allows drag and drop reorder
- Handles selection change
- Handles highlight
- Handles changing collapse change
- Handles add, insert, remove, and clear functionality
This commit is contained in:
WarmUpTill
2022-03-18 22:12:40 +01:00
committed by WarmUpTill
parent 1b63978acb
commit 0a8f279e97
6 changed files with 340 additions and 70 deletions

View File

@@ -147,11 +147,13 @@ public slots:
void MinimizeActions();
void MinimizeConditions();
void MacroActionSelectionChanged(int idx);
void MacroActionReorder(int to, int target);
void AddMacroAction(int idx);
void RemoveMacroAction(int idx);
void MoveMacroActionUp(int idx);
void MoveMacroActionDown(int idx);
void MacroConditionSelectionChanged(int idx);
void MacroConditionReorder(int to, int target);
void AddMacroCondition(int idx);
void RemoveMacroCondition(int idx);
void MoveMacroConditionUp(int idx);

View File

@@ -1,4 +1,6 @@
#pragma once
#include "macro-segment.hpp"
#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
@@ -11,15 +13,35 @@ public:
MacroSegmentList(QWidget *parent = nullptr);
void SetHelpMsg(const QString &msg);
void SetHelpMsgVisible(bool visible);
void Insert(int idx, QWidget *widget);
void Add(QWidget *widget);
void Remove(int idx);
void Clear(int idx = 0); // Clear all elements >= idx
void Highlight(int idx);
void SetCollapsed(bool);
void SetSelection(int idx);
QVBoxLayout *ContentLayout() { return _contentLayout; }
signals:
void SelectionChagned(int idx);
void Reorder(int source, int target);
protected:
bool eventFilter(QObject *object, QEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
int GetIndex(QPoint);
int GetDropIndex(QPoint);
QRect GetContentItemRectWithPadding(int idx);
int _dragPosition = -1;
QVBoxLayout *_layout;
QVBoxLayout *_contentLayout;
QLabel *_helpMsg;
};