Files
qt5-legatus-legacy/Lts/Common/LtsWidgets/lts_drag_icon.h
T
2026-08-13 18:33:10 +02:00

340 lines
8.6 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Draggable Icon with Text for Menus
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include "lts_base.h"
#include "lts_drop_handler.h"
#include "lts_widgets_export.h"
#include <QString>
#include <QIcon>
#include <QWidget>
class QButtonGroup;
class QHBoxLayout;
class QLabel;
class QMenu;
namespace LtsWidgets {
class LtsToolButton;
/**
@brief Tool button with drag & drop functionality
*/
class LTSWIDGETS_EXPORT LtsDragIcon : public QWidget
{
public:
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
Q_PROPERTY(QString context READ context WRITE setContext)
Q_PROPERTY(QString identifier READ identifier WRITE setIdentifier)
Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
Q_PROPERTY(LtsWidgets::Designer::ButtonSize eButtonSize READ iconSizeDesigner WRITE setIconSizeDesigner)
Q_PROPERTY(bool eForceFixedSize READ isForceFixedSize WRITE setForceFixedSize)
Q_PROPERTY(bool isCheckable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool isChecked READ isChecked WRITE setChecked)
Q_PROPERTY(bool showDragIcon READ showDragIcon WRITE setShowDragIcon)
Q_PROPERTY(bool isDraggable READ isDraggable WRITE setDraggable)
//last
Q_PROPERTY(LtsWidgets::Designer::ButtonStyle eStyle READ buttonStyleDesigner WRITE setButtonStyleDesigner)
/**
* @brief Set the ButtonStyle in Designer
* @param ButtonStyle to define the possible IconStyles
*/
void setButtonStyleDesigner(Designer::ButtonStyle t) { setButtonStyle(static_cast<ButtonStyle>(t)); }
/**
* @brief ButtonStyle Getter for Designer
* @return the current ButtonStyle for the DragIcon in the designer
*/
Designer::ButtonStyle buttonStyleDesigner() const { return static_cast<Designer::ButtonStyle>(buttonStyle()); }
/**
* @brief Set the ButtonSize in Designer
* @param ButtonSize
*/
void setIconSizeDesigner(Designer::ButtonSize t) { setIconSize(static_cast<ButtonSize>(t)); }
/**
* @brief OpenType Getter for Designer
* @return the current BUttonSize Value for the DragIcon in the designer
*/
Designer::ButtonSize iconSizeDesigner() const { return static_cast<Designer::ButtonSize>(iconSize()); }
public:
/**
* @brief Constructor for LtsDragIcon
* @param parent for the Widget
*/
explicit LtsDragIcon(QWidget *parent);
virtual ~LtsDragIcon() = default;
/**
* @brief set a QMenu to the Button
* @param QMenu to show
*/
void setMenu(QMenu *menu);
/**
* @brief get QMenu from the Button
* @return QMenu or nullptr if no button or menu is defined
*/
QMenu* menu() const;
/**
* @brief set a text to the Button
* @param QString as text shown
*/
void setText(const QString &text);
/**
* @brief Returns the widget's text value
* @return Current text
*/
QString text() const { return m_text; }
/**
* @brief set a context to the Button
* @param QString as context shown
*/
void setContext(const QString &context);
/**
* @brief Returns the widget's context value
* @return Current context
*/
QString context() const { return m_context; }
/**
* @brief set if the Button should be checkable
* By default, the button is not checkable.
* @param new checkable state
*/
void setCheckable(bool checkable);
/**
* @brief Return if Button is checkable
* @return This property holds whether the button is checkable.
*/
bool isCheckable();
/**
* @brief set if the Button should be draggable
* By default, the button is draggable.
* @param new dragabble state
*/
void setDraggable(bool draggable);
/**
* @brief Return if Button is checkable
* @return This property holds whether the button is checkable.
*/
bool isDraggable() const { return m_isDraggable; }
/**
* @brief (un)check the Button
* Only checkable buttons can be checked. By default, the button is unchecked.
* @param new checked state
*/
void setChecked(bool checked);
/**
* @brief Return the current check state
* @return This property holds whether the button is checked.
*/
bool isChecked() const;
/**
* @brief Use Icon / Default Icon when dragging
* By default, the icon is used.
* @param new checked state
*/
void setShowDragIcon(bool showDragIcon) { m_showDragIcon = showDragIcon; }
bool showDragIcon() const { return m_showDragIcon; }
/**
* @brief set new the SameWidgetDrop State
* drag&drop property to allow sameWidgetDrops
* @param new drop state
*/
void setSameWidgetDrop(bool drop);
/**
* @brief get wether SameWidgetDrop is enabled
* @return the drop state
*/
bool sameWidgetDrop() const;
/**
* @brief Set the ButtonStyle in Code
* @param ButtonStyle to define the possible IconStyles
*/
void setButtonStyle(ButtonStyle style);
/**
* @brief Returns the currently used ButtonStyle Value
* @return Current ButtonStyle
*/
ButtonStyle buttonStyle() const { return m_style; }
/**
* @brief Set the ButtonSize in Code
* @param ButtonSize
*/
void setIconSize(ButtonSize buttonSize);
/**
* @brief Returns the current used ButtonSize Value
* @return Current ButtonSize
*/
ButtonSize iconSize() const { return m_buttonSize; }
/**
* @brief set new visibilty fo the Icon
* @param New visibilty
*/
void setButtonVisible(bool visible);
/**
* @brief set new visibilty fo the Icon
* @param New visibilty
*/
bool buttonVisible() const;
/**
* @brief set Icon to the Button
* @param New QIcon to use
*/
void setIcon(const QIcon &icon);
/**
* @brief Return the current used QIcon
* @return This property holds the current used QIcon.
*/
QIcon icon() const { return m_icon; }
/**
* @brief Set to Force the given IconSize and forbid resizing
* By default, the button resizes into given space
* @param bool to force the Icon to hold it's given
* IconSize even if the LayoutSystem provides more space to fill
*/
void setForceFixedSize(bool force);
/**
* @brief Return the current ForeFixedSize value
* @return This property holds the set ForceFicedSize value
*/
bool isForceFixedSize() const { return m_forceFixedSize; }
/**
* @brief set a QAction to the Button
* @param New QAction
* the new Action will override the old one and replaces
* the ObjectName with the new ActionName
*/
void setAction(QAction *action);
/**
Adds dragButton to a button group
@param btnGrp button group to add dragButton
@param btnGrpId Button identifier in button group
*/
void addToButtonGroup(QButtonGroup *btnGrp, int btnGrpId);
/**
* @brief Sets a dropHandler. The dropHandler must be allocated with new operator. The owner ship now has the LtsDragIcon. The LtsDragIcon calls delete in hier dtor
* @see LtsDropHandler
*/
void setDropHandlerKey(qulonglong key) { m_dropHandlerKey = key; }
/**
* @brief Adds MimeData.
* This sets MimeData to the Drag Action
* @param QString with MimeType Description
* @param QByteArray with MimeData
*/
void addMimeData(const QString &mimeType, const QByteArray &data);
bool removeMimeData(const QString &mimeType);
void removeAllMimeData();
/**
* @brief Sets the drop acceptance of the Icon
* @param bool value to set drop acceptance
*/
void setAcceptDrops(bool on);
qulonglong dropHandlerKey() const { return m_dropHandlerKey; }
// Todo: Isn't this something like objectName?
void setIdentifier(const QString &id) { m_identifier = id; }
QString identifier() const { return m_identifier; }
void setModification(const QString &id) { m_modification = id; setIcon(m_icon); }
QString modification() const { return m_modification; }
void removeModification() { m_modification = QString(); setIcon(m_icon);}
signals:
/**
* @brief The Signal is emitted when the Button is activated
* (i.e. pressed down then released while the mouse cursor is inside the button)
* @param bool checked = false
*/
void clicked();
/**
* @brief The Signal is emitted when the Button is toggled
* @param bool checked
*/
void toggled(bool);
void newDropEvent(QDropEvent *e);
void dropSuc();
void enabledChanged(bool);
protected:
void dragEnterEvent(QDragEnterEvent *e) override;
void dropEvent(QDropEvent *e) override;
void initButton();
private:
void setStyleToButton();
QIcon modifyIcon(const QIcon &icon);
void generateToolTip();
protected slots:
void changeEvent(QEvent *event) override;
private:
QHBoxLayout *m_lay;
LtsToolButton *m_toolButton;
QIcon m_icon;
QLabel *m_dragLabel;
QString m_text;
QString m_identifier;
QString m_modification;
ButtonStyle m_style;
bool m_forceFixedSize;
bool m_isDraggable;
qulonglong m_dropHandlerKey;
ButtonSize m_buttonSize;
bool m_showDragIcon;
QString m_context;
};
}