File indexing completed on 2025-04-27 03:58:25
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2010-09-09 0007 * Description : tag region frame 0008 * 0009 * SPDX-FileCopyrightText: 2007 by Aurelien Gateau <agateau at kde dot org> 0010 * SPDX-FileCopyrightText: 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #ifndef DIGIKAM_REGION_FRAME_ITEM_H 0017 #define DIGIKAM_REGION_FRAME_ITEM_H 0018 0019 // Qt includes 0020 0021 #include <QFlags> 0022 0023 // Local includes 0024 0025 #include "dimgchilditem.h" 0026 #include "digikam_export.h" 0027 0028 class QWidget; 0029 0030 namespace Digikam 0031 { 0032 0033 class DIGIKAM_EXPORT RegionFrameItem : public DImgChildItem // clazy:exclude=ctor-missing-parent-argument 0034 { 0035 Q_OBJECT 0036 0037 public: 0038 0039 enum Flag 0040 { 0041 NoFlags = 0, 0042 ShowResizeHandles = 1 << 0, 0043 MoveByDrag = 1 << 1, 0044 0045 GeometryEditable = ShowResizeHandles | MoveByDrag 0046 }; 0047 Q_DECLARE_FLAGS(Flags, Flag) 0048 0049 public: 0050 0051 explicit RegionFrameItem(QGraphicsItem* const parent); 0052 ~RegionFrameItem() override; 0053 0054 void setFlags(Flags flags); 0055 void changeFlags(Flags flags, bool addOrRemove); 0056 Flags flags() const; 0057 0058 /** 0059 * Sets a widget item as HUD item. A HUD item will be positioned relative to this item, 0060 * and repositioned on position changes or resizing. 0061 * Ownership of the item is taken, and it is made a child item of this item. 0062 * You can also add QWidget directly. It will be wrapped in a proxy item. 0063 */ 0064 void setHudWidget(QGraphicsWidget* const hudWidget); 0065 void setHudWidget(QWidget* const widget, Qt::WindowFlags wFlags = Qt::WindowFlags()); 0066 QGraphicsWidget* hudWidget() const; 0067 void setHudWidgetVisible(bool visible); 0068 0069 void setFixedRatio(double ratio); 0070 0071 void setRectInSceneCoordinatesAdjusted(const QRectF& rect); 0072 0073 QRectF boundingRect() const override; 0074 0075 public Q_SLOTS: 0076 0077 /** 0078 * The associated HUD item is dynamically moved to be visible. 0079 * This can only be done for _one_ region at a time. 0080 * Set the current primary view region of the scene by this method 0081 * to dynamically reposition the HUD inside this region. 0082 * The rect given is in scene coordinates. 0083 */ 0084 void setViewportRect(const QRectF& rect); 0085 0086 Q_SIGNALS: 0087 0088 void geometryEdited(); 0089 0090 protected: 0091 0092 void paint(QPainter* painter, 0093 const QStyleOptionGraphicsItem* option, 0094 QWidget* widget = nullptr) override; 0095 void mousePressEvent(QGraphicsSceneMouseEvent*) override; 0096 void mouseMoveEvent(QGraphicsSceneMouseEvent*) override; 0097 void mouseReleaseEvent(QGraphicsSceneMouseEvent*) override; 0098 void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; 0099 void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override; 0100 void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override; 0101 0102 bool eventFilter(QObject* watched, QEvent* event) override; 0103 0104 private Q_SLOTS: 0105 0106 void slotUpdate(); 0107 void slotSizeChanged(); 0108 void slotPosChanged(); 0109 void hudSizeChanged(); 0110 void moveHudWidget(); 0111 0112 private: 0113 0114 // Disable 0115 RegionFrameItem(); 0116 0117 private: 0118 0119 class Private; 0120 Private* const d; 0121 }; 0122 0123 } // namespace Digikam 0124 0125 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::RegionFrameItem::Flags) 0126 0127 #endif // DIGIKAM_REGION_FRAME_ITEM_H