You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerTreeView.hxx

99 lines
3.2 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#ifndef OUTLINER_TREE_VIEW_H
#define OUTLINER_TREE_VIEW_H
#if !defined(Q_MOC_RUN)
#include <AzCore/base.h>
#include <AzCore/Memory/SystemAllocator.h>
#include <QBasicTimer>
#include <QEvent>
#include <QTreeView>
#endif
#pragma once
class QFocusEvent;
class QMouseEvent;
class OutlinerTreeViewModel;
//! This class largely exists to emit events for the OutlinerWidget to listen in on.
//! The logic for these events is best off not happening within the tree itself,
//! so it can be re-used in other interfaces.
//! The OutlinerWidget's need for these events is largely based on the concept of
//! delaying the Editor selection from updating with mouse interaction to
//! allow for dragging and dropping of entities from the outliner into the property editor
//! of other entities. If the selection updates instantly, this would never be possible.
class OutlinerTreeView
: public QTreeView
{
Q_OBJECT;
public:
AZ_CLASS_ALLOCATOR(OutlinerTreeView, AZ::SystemAllocator, 0);
OutlinerTreeView(QWidget* pParent = NULL);
virtual ~OutlinerTreeView();
void setAutoExpandDelay(int delay);
static int GetLayerSquareSize() { return 20; }
Q_SIGNALS:
void ItemDropped();
protected:
// Qt overrides
void mousePressEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
void mouseDoubleClickEvent(QMouseEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
void focusInEvent(QFocusEvent* event) override;
void focusOutEvent(QFocusEvent* event) override;
void startDrag(Qt::DropActions supportedActions) override;
void dragMoveEvent(QDragMoveEvent* event) override;
void dropEvent(QDropEvent* event) override;
void drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const override;
void timerEvent(QTimerEvent* event) override;
private:
void ClearQueuedMouseEvent();
void processQueuedMousePressedEvent(QMouseEvent* event);
void startCustomDrag(const QModelIndexList& indexList, Qt::DropActions supportedActions);
QImage createDragImage(const QModelIndexList& indexList);
void DrawLayerUI(QPainter* painter, const QRect& rect, const QModelIndex& index) const;
QMouseEvent* m_queuedMouseEvent;
bool m_draggingUnselectedItem; // This is set when an item is dragged outside its bounding box.
int m_expandOnlyDelay = -1;
QBasicTimer m_expandTimer;
const int m_branchLineWidth = 1;
QColor GetHierarchyLineColor(bool isSliceEntity, bool isSelected) const;
struct OutlinerTreeViewColorConfig
{
QColor hierarchyLinesSlices = "#7B7B7B";
QColor hierarchyLinesSlicesSelected = "#7B7B7B";
QColor hierarchyLinesNonSliceEntities = "transparent";
QColor hierarchyLinesNonSliceEntitiesSelected = "transparent";
QColor layerChildBGSelectionColor = "#464747";
QColor layerChildBackgroundColor = "#333333";
};
OutlinerTreeViewColorConfig m_colorConfig;
};
#endif