diff --git a/src/Gui/QSint/actionpanel/actionbox.h b/src/Gui/QSint/actionpanel/actionbox.h index 5745e10525..0c0995a99e 100644 --- a/src/Gui/QSint/actionpanel/actionbox.h +++ b/src/Gui/QSint/actionpanel/actionbox.h @@ -16,149 +16,13 @@ namespace QSint { - - /** - \brief Class representing a panel of actions similar to Windows Vista/7 control panel items. - \since 0.2 - - \image html ActionBox.png An example of ActionBox - - ActionBox normally consists of an icon, clickable header and a list of actions. - Every action can have own icon as well, provide tooltips and status tips, - be clickable and checkable etc. i.e. behave like a normal ActionLabel. - - ActionBox objects are easily customizable via CSS technology - you can get - different look just by writing corresponding style sheet. - - Usage of ActionBox in the application - - 1. Create ActionBox using constructor (or in Designer as Promoted Objects). - Icon and header text can be passed to the constructor as well. For example: - - \code - ActionBox *box1 = new ActionBox(":/icons/box1icon.png", "Header Text", this); - \endcode - - 2. ActionBox header itself is a clickable item (based on ActionLabel), so you - can retrieve it and use, for example, to connect with a slot: - - \code - connect(box1->header(), SIGNAL(clicked()), this, SLOT(header1clicked())); - \endcode - - 3. To create an action, use one of createItem() functions. For example: - - \code - ActionLabel *action1 = box1->createItem(":/icons/action1icon.png", "Action1 Text"); - connect(action1, SIGNAL(clicked()), this, SLOT(action1clicked())); - - ActionLabel *action2 = box1->createItem(":/icons/action2icon.png", "Action2 Text"); - connect(action2, SIGNAL(clicked()), this, SLOT(action2clicked())); - \endcode - - createItem() also allows one to create an ActionLabel from already existing QAction: - - \code - QAction myAction3(":/icons/action3icon.png", "Action3 Text"); - connect(myAction3, SIGNAL(clicked()), this, SLOT(action3clicked())); - - ActionLabel *action3 = box1->createItem(myAction3); - \endcode - - 4. By default, actions are arranged vertically, one per row. In order - to have more than one actions in a row, first add horizontal layout item - using createHBoxLayout() function, and then pass it to the createItem() to - create actions. - - \code - // create horizontal layout - QLayout *hbl1 = box1->createHBoxLayout(); - // create actions using this layout - ActionLabel *action3 = box1->createItem(":/icons/action3icon.png", "1st action in row", hbl1); - ActionLabel *action4 = box1->createItem("2nd action in row", hbl1); - \endcode - - 5. Sometimes you would like to have a spacer between the items. Use createSpacer() - function to insert an empty space into default or specified layout. - - \code - // create a spacer after two actions added before - box1->createSpacer(hbl1); - // create another action which will be preceded by the empty space (i.e. right-aligned) - ActionLabel *action5 = box1->createItem("3rd action in row", hbl1); - \endcode - - 6. You can insert arbitrary layout items and widgets into ActionBox using - addLayout() and addWidgets() functions. Please note that ownership of these items - transferred to ActionBox, so you must not delete them manually. - - Customization of ActionBox via CSS - - ActionBox items can be easily customized using CSS mechanism. Just create a new - style and apply it to the ActionBox with setStyleSheet(). - - See the following example of the complete ActionBox customization. Note that - \a QSint--ActionBox is used as a main class name. Headers are ActionLabels with - property \a class='header'. Actions are ActionLabels with - property \a class='action'. - - \code - // define a string representing CSS style - const char* ActionBoxNewStyle = - - // customization of ActionBox - "QSint--ActionBox {" - "background-color: white;" - "border: 1px solid white;" - "border-radius: 3px;" - "text-align: left;" - "}" - - "QSint--ActionBox:hover {" - "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F9FDFF, stop: 1 #EAF7FF);" - "border: 1px solid #DAF2FC;" - "}" - - // customization of ActionBox's header - "QSint--ActionBox QSint--ActionLabel[class='header'] {" - "text-align: left;" - "font: 14px;" - "color: #006600;" - "background-color: transparent;" - "border: none;" - "}" - - "QSint--ActionBox QSint--ActionLabel[class='header']:hover {" - "color: #00cc00;" - "text-decoration: underline;" - "}" - - // customization of ActionBox's actions - "QSint--ActionBox QSint--ActionLabel[class='action'] {" - "background-color: transparent;" - "border: none;" - "color: #0033ff;" - "text-align: left;" - "font: 11px;" - "}" - - "QSint--ActionBox QSint--ActionLabel[class='action']:hover {" - "color: #0099ff;" - "text-decoration: underline;" - "}" - - "QSint--ActionBox QSint--ActionLabel[class='action']:on {" - "background-color: #ddeeff;" - "color: #006600;" - "}" - ; - - // apply the style - box1->setStyleSheet(ActionBoxNewStyle); - \endcode - -*/ + * @brief A panel of actions, similar to Windows Vista/7 control panel items. + * + * An ActionBox displays an icon, a clickable header, and a list of actions. + * Actions can have icons, tooltips, status tips, and support click/check functionality + * (similar to ActionLabel). Customizable via CSS. + */ class QSINT_EXPORT ActionBox : public QFrame { Q_OBJECT @@ -167,93 +31,129 @@ class QSINT_EXPORT ActionBox : public QFrame Q_PROPERTY(ActionLabel header READ header) // clazy:exclude=qproperty-without-notify public: - /** Constructor. - */ + /** + * @brief Constructs an ActionBox. + * @param parent The parent widget. + */ explicit ActionBox(QWidget *parent = nullptr); - /** Constructor. - */ + + /** + * @brief Constructs an ActionBox with a header text. + * @param headerText The header text. + * @param parent The parent widget. + */ ActionBox(const QString & headerText, QWidget *parent = nullptr); - /** Constructor. - */ + + /** + * @brief Constructs an ActionBox with an icon and header text. + * @param icon The icon. + * @param headerText The header text. + * @param parent The parent widget. + */ explicit ActionBox(const QPixmap & icon, const QString & headerText, QWidget *parent = nullptr); - /** Sets icon of the ActionBox to \a icon. - */ + /** + * @brief Sets the ActionBox icon. + * @param icon The icon. + */ void setIcon(const QPixmap & icon); - /** Returns icon of the ActionBox. - */ - QPixmap icon() const;// { return iconLabel->pixmap(); } - /** Returns header item of the ActionBox. - */ + /** + * @brief Returns the ActionBox icon. + * @return The icon. + */ + QPixmap icon() const; + + /** + * @brief Returns the header label. + * @return The header label. + */ inline ActionLabel* header() const { return headerLabel; } - /** Creates action item from the \a action and returns it. - - By default, action is added to the default vertical layout, i.e. subsequent - calls of this function will create several actions arranged vertically, - one below another. - - You can add action to the specified layout passing it as \a l parameter. - This allows one to do custom actions arrangements, i.e. horizontal etc. - - \since 0.2 - */ + /** + * @brief Creates and adds an action from a QAction. + * @param action The QAction. + * @param l Optional layout to add the action to. Defaults to the + * ActionBox's default vertical layout. + * @return The created ActionLabel. + */ ActionLabel* createItem(QAction * action, QLayout * l = nullptr); - /** Creates action items from the \a actions list and returns the list of action items. - \since 0.2 - */ + /** + * @brief Creates and adds multiple actions from a list of QActions. + * @param actions The list of QActions. + * @return The list of created ActionLabels. + */ QList createItems(const QList actions); - /** Adds an action with \a text to the ActionBox and returns action item. - */ + /** + * @brief Creates and adds an action with text. + * @param text The action text. + * @param l Optional layout to add the action to. + * @return The created ActionLabel. + */ ActionLabel* createItem(const QString & text = QString(), QLayout * l = nullptr); - /** Adds an action with \a icon and \a text to the ActionBox and returns action item. - This function acts just like previous one. See the description above. - */ + /** + * @brief Creates and adds an action with an icon and text. + * @param icon The action icon. + * @param text The action text. + * @param l Optional layout to add the action to. + * @return The created ActionLabel. + */ ActionLabel* createItem(const QPixmap & icon, const QString & text, QLayout * l = nullptr); - /** Adds a spacer and returns spacer item. - - By default, a spacer is added to the default vertical layout. - You can add a spacer to the specified layout passing it as \a l parameter. - */ + /** + * @brief Creates and adds a spacer. + * @param l Optional layout to add the spacer to. Defaults to the + * ActionBox's default vertical layout. + * @return The created spacer item. + */ QSpacerItem* createSpacer(QLayout * l = nullptr); - /** Creates empty horizontal layout. - - Use this function to arrange action items into a row. - */ + /** + * @brief Creates a horizontal layout. + * @return The created layout. + */ QLayout* createHBoxLayout(); - /** Returns default layout used for actions (typically it's QVBoxLayout). - */ + /** + * @brief Returns the default layout used for actions. + * @return The default layout. + */ inline QLayout* itemLayout() const { return dataLayout.get(); } - /** Adds layout \a l to the default layout. - */ + /** + * @brief Adds a layout. + * @param l The layout to add. + */ void addLayout(QLayout * l); - /** Adds widget \a w to the layout. - By default, widget is added to the default vertical layout. - You can add widget to the specified layout passing it as \a l parameter. - */ + /** + * @brief Adds a widget. + * @param w The widget to add. + * @param l Optional layout to add the widget to. Defaults to the + * ActionBox's default vertical layout. + */ void addWidget(QWidget * w, QLayout * l = nullptr); + /** + * @brief Returns the recommended minimum size. + * @return The minimum size hint. + */ QSize minimumSizeHint() const override; protected: + /** + * @brief Initializes the ActionBox. + * @param headerText The initial header text. + */ void init(const QString &headerText = QString()); - std::unique_ptr dataLayout; - QLabel *iconLabel = nullptr; - ActionLabel *headerLabel = nullptr; - + std::unique_ptr dataLayout; ///< Default layout for actions/widgets. + QLabel *iconLabel = nullptr; ///< Label for the ActionBox icon. + ActionLabel *headerLabel = nullptr; ///< Label for the header. }; - - } // namespace #endif // ACTIONBOX_H diff --git a/src/Gui/QSint/actionpanel/actiongroup.h b/src/Gui/QSint/actionpanel/actiongroup.h index 2bada35714..12aa180d14 100644 --- a/src/Gui/QSint/actionpanel/actiongroup.h +++ b/src/Gui/QSint/actionpanel/actiongroup.h @@ -16,18 +16,15 @@ namespace QSint { - - class ActionLabel; +class ActionPanelScheme; class TaskHeader; class TaskGroup; /** - * @brief A collapsible group widget for organizing actions - * - * ActionGroup consists of an optional header and a collection of actions represented by ActionLabel. - * It can also contain arbitrary widgets. + * @brief A collapsible group widget for organizing actions. * + * An ActionGroup can have a header and contains actions (ActionLabels) or other widgets. */ class QSINT_EXPORT ActionGroup : public QWidget { @@ -38,107 +35,158 @@ class QSINT_EXPORT ActionGroup : public QWidget Q_PROPERTY(QString headerText READ headerText WRITE setHeaderText) public: - explicit ActionGroup(QWidget *parent = nullptr); - explicit ActionGroup(const QString& title, bool expandable = true, QWidget *parent = nullptr); - explicit ActionGroup(const QPixmap& icon, const QString& title, bool expandable = true, QWidget *parent = nullptr); - ~ActionGroup() override; /** - * @brief Creates an action item from the given `action` and returns it. - * - * If `addToLayout` is `true` (default), the action is added to the default vertical layout, meaning - * subsequent calls will arrange multiple `ActionLabel`s vertically, one below another. - * - * If `addToLayout` is `false`, the action must be added to a layout manually. - * This allows for custom arrangements, such as horizontal layouts. - * - * If `addStretch` is `true` (default),`ActionLabel` will be automatically aligned to the left side. - * if `addStretch` is `false` `ActionLabel` will occupy all available horizontal space. + * @brief Constructs an ActionGroup. + * @param parent The parent widget. + */ + explicit ActionGroup(QWidget *parent = nullptr); + + /** + * @brief Constructs an ActionGroup with a title. + * @param title The title of the group's header. + * @param expandable If `true` (default), the group can be expanded/collapsed. + * @param parent The parent widget. + */ + explicit ActionGroup(const QString& title, bool expandable = true, QWidget *parent = nullptr); + + /** + * @brief Constructs an ActionGroup with an icon and title. + * @param icon The icon for the group's header. + * @param title The title of the group's header. + * @param expandable If `true` (default), the group can be expanded/collapsed. + * @param parent The parent widget. + */ + explicit ActionGroup(const QPixmap& icon, const QString& title, bool expandable = true, QWidget *parent = nullptr); + + /** + * @brief Destroys the ActionGroup. + */ + ~ActionGroup() override; + + /** + * @brief Creates and adds an action. + * @param action The QAction to add. + * @param addToLayout If `true` (default), adds the action to the group's layout. + * @param addStretch If `true` (default), aligns the ActionLabel to the left. + * @return The newly created ActionLabel. */ ActionLabel* addAction(QAction *action, bool addToLayout = true, bool addStretch = true); /** - * @brief Adds an `ActionLabel` to the group. - * See `addAction()` for parameter details. + * @brief Adds an existing ActionLabel. + * @param label The ActionLabel to add. + * @param addToLayout If `true` (default), adds the label to the group's layout. + * @param addStretch If `true` (default), aligns the ActionLabel to the left. + * @return The added ActionLabel. */ ActionLabel* addActionLabel(ActionLabel *label, bool addToLayout = true, bool addStretch = true); /** - * @brief Adds a `QWidget` to the group. Returns `true` if added successfully. - * See `addAction()` for parameter details. + * @brief Adds a widget to the group. + * @param widget The widget to add. + * @param addToLayout If `true` (default), adds the widget to the group's layout. + * @param addStretch If `true` (default), aligns the widget to the left. + * @return `true` if added successfully. */ bool addWidget(QWidget *widget, bool addToLayout = true, bool addStretch = true); /** - * @brief Returns the group's layout (QVBoxLayout by default). + * @brief Returns the group's layout. + * @return The group's layout (QVBoxLayout by default). */ QBoxLayout* groupLayout(); /** - * @brief Checks if the group can collapse or expand. + * @brief Checks if the group is expandable. + * @return `true` if the group is expandable, `false` otherwise. */ bool isExpandable() const; /** - * @brief Makes the group expandable or not. + * @brief Sets whether the group is expandable. + * @param expandable If `true`, the group can be expanded/collapsed. */ void setExpandable(bool expandable); /** * @brief Checks if the group has a header. + * @return `true` if the group has a header, `false` otherwise. */ bool hasHeader() const; /** - * @brief Enables or disables the group's header. + * @brief Sets whether the group has a header. + * @param enable If `true`, the group will have a header. */ void setHeader(bool enable); /** - * @brief Returns the text of the header. + * @brief Returns the header text. + * @return The header text. */ QString headerText() const; + /** - * @brief Sets the text of the header. + * @brief Sets the header text. + * @param text The header text. */ void setHeaderText(const QString &text); + /** - * @brief Sets the icon of the header. + * @brief Sets the header icon. + * @param icon The header icon. */ void setHeaderIcon(const QPixmap &icon); + /** + * @brief Returns the recommended minimum size for the group. + * @return The minimum size hint. + */ QSize minimumSizeHint() const override; - enum FoldEffect - { - NoFolding, - ShrunkFolding, - SlideFolding - }; - public Q_SLOTS: + /** + * @brief Shows or hides the group's contents. + */ void showHide(); protected Q_SLOTS: + /** + * @brief Handles hiding the group's contents. + */ void processHide(); + + /** + * @brief Handles showing the group's contents. + */ void processShow(); protected: + /** + * @brief Paints the group. + * @param event The paint event. + */ void paintEvent(QPaintEvent *event) override; + + /** + * @brief Initializes the group. + * @param hasHeader Whether the group has a header. + */ void init(bool hasHeader); - double m_foldStep = 0; - double m_foldDelta = 0; - double m_fullHeight = 0; - double m_tempHeight = 0; - int m_foldDirection = 0; + double m_foldStep = 0; ///< Current folding animation step. + double m_foldDelta = 0; ///< Change in height per animation step. + double m_fullHeight = 0; ///< Full (expanded) height of the group. + double m_tempHeight = 0; ///< Temporary height during animation. + int m_foldDirection = 0; ///< Direction of folding animation. - QPixmap m_foldPixmap; + QPixmap m_foldPixmap; ///< Pixmap for the fold/unfold icon. - std::unique_ptr myHeader; - std::unique_ptr myGroup; - std::unique_ptr myDummy; + std::unique_ptr myHeader; ///< The group's header. + std::unique_ptr myGroup; ///< The container for actions/widgets. + std::unique_ptr myDummy; ///< Dummy widget for animation. + ActionPanelScheme *myScheme = nullptr; ///< The color scheme. }; - } // namespace QSint #endif // ACTIONGROUP_H diff --git a/src/Gui/QSint/actionpanel/actionlabel.h b/src/Gui/QSint/actionpanel/actionlabel.h index da9a5582e5..2d52997b4b 100644 --- a/src/Gui/QSint/actionpanel/actionlabel.h +++ b/src/Gui/QSint/actionpanel/actionlabel.h @@ -11,84 +11,58 @@ #include #include "qsint_global.h" - namespace QSint { - - /** - \brief Class representing an action similar to Windows Vista/7 control panel item. - - \image html ActionLabel.png An example of ActionLabel - - ActionLabel normally consists of an icon and text. - It also can have tooltip and status tip, - be clickable and checkable etc. i.e. behave like a normal QToolButton. - - Customization of ActionLabel via CSS - - ActionLabel objects are easily customizable via CSS technology - you can get - different look just by writing corresponding style sheet and applying it with setStyleSheet(). - - See the following example of the complete ActionLabel customization. Note that - \a QSint--ActionLabel is used as a main class name. - - \code - // define a string representing CSS style - const char* ActionLabelNewStyle = - - "QSint--ActionLabel[class='action'] {" - "background-color: transparent;" - "border: 1px solid transparent;" - "color: #0033ff;" - "text-align: left;" - "font: 11px;" - "}" - - "QSint--ActionLabel[class='action']:hover {" - "color: #0099ff;" - "text-decoration: underline;" - "}" - - "QSint--ActionLabel[class='action']:focus {" - "border: 1px dotted black;" - "}" - - "QSint--ActionLabel[class='action']:on {" - "background-color: #ddeeff;" - "color: #006600;" - "}" - ; - - // apply the style - label1->setStyleSheet(ActionLabelNewStyle); - - \endcode -*/ + * @brief Represents an action, similar to a Windows Vista/7 control panel item. + * + * An ActionLabel typically displays an icon and text. It supports tooltips, status tips, + * clickability, checkability, and other features similar to a QToolButton. + * + * Customization via CSS: The class name `QSint--ActionLabel` is used. + */ class QSINT_EXPORT ActionLabel : public QToolButton { Q_OBJECT public: - /** Constructor. - */ + /** + * @brief Constructs an ActionLabel. + * @param parent The parent widget. + */ explicit ActionLabel(QWidget *parent = nullptr); - /** Constructor. Creates ActionLabel from the \a action. - \since 0.2 - */ + /** + * @brief Constructs an ActionLabel from a QAction. + * @param action The QAction to represent. + * @param parent The parent widget. + */ explicit ActionLabel(QAction *action, QWidget *parent = nullptr); + /** + * @brief Destroys the ActionLabel. + */ ~ActionLabel() override = default; + /** + * @brief Returns the recommended size for the label. + * @return The size hint. + */ QSize sizeHint() const override; + + /** + * @brief Returns the minimum size the label can be. + * @return The minimum size hint. + */ QSize minimumSizeHint() const override; protected: + /** + * @brief Initializes the ActionLabel. + */ void init(); }; - } // namespace #endif // ACTIONLABEL_H diff --git a/src/Gui/QSint/actionpanel/actionpanel.h b/src/Gui/QSint/actionpanel/actionpanel.h index 7f029a58e6..041bbb5de2 100644 --- a/src/Gui/QSint/actionpanel/actionpanel.h +++ b/src/Gui/QSint/actionpanel/actionpanel.h @@ -15,90 +15,94 @@ namespace QSint { - - class ActionPanelScheme; class ActionGroup; - /** - \brief Class representing panels of actions similar to Windows XP task panels. - \since 0.2 - - \image html ActionPanel1.png An example of ActionPanel - - ActionPanel acts like a container for ActionGroup which in turn are containers for - the actions represented by ActionLabel. - - The look and fill is complete styleable via setScheme(). - Currently the following schemes available: ActionPanelScheme (the default), - WinXPPanelScheme and WinXPPanelScheme2 (blue Windows XP schemes), - WinVistaPanelScheme (Windows Vista variation), MacPanelScheme (MacOS variation), - AndroidPanelScheme (Android variation). -*/ + * @brief Provides a panel of actions, similar to Windows XP task panels. + * + * An ActionPanel contains ActionGroups, which in turn contain actions (represented by ActionLabels). + */ class QSINT_EXPORT ActionPanel : public QFrame { - typedef QFrame BaseClass; + using BaseClass = QFrame; Q_OBJECT public: - /** Constructor. - */ + /** + * @brief Constructs an ActionPanel. + * @param parent The parent widget. + */ explicit ActionPanel(QWidget *parent = nullptr); - /** Adds a widget \a w to the ActionPanel's vertical layout. - */ + /** + * @brief Adds a widget to the ActionPanel. + * @param w The widget to add. + */ void addWidget(QWidget *w); - /** Removes the widget \a w from the ActionPanel's vertical layout. - */ + /** + * @brief Removes a widget from the ActionPanel. + * @param w The widget to remove. + */ void removeWidget(QWidget *w); - /** Adds a spacer with width \a s to the ActionPanel's vertical layout. - Normally you should do this after all the ActionGroups were added, in order to - maintain some space below. - */ + /** + * @brief Adds a spacer to bottom of the ActionPanel. + * @param s The width of the spacer.. + */ void addStretch(int s = 0); - /** Removes the spacer -- if added -- from the ActionPanel's vertical layout. - */ + /** + * @brief Removes the spacer from the ActionPanel (if one was added). + */ void removeStretch(); - /** Creates and adds to the ActionPanel's vertical layout an empty ActionGroup without header. - */ + /** + * @brief Creates and adds an empty ActionGroup (without a header) to the panel. + * @return The newly created ActionGroup. + */ ActionGroup* createGroup(); - /** Creates and adds to the ActionPanel's vertical layout an empty ActionGroup with header's - text set to \a title, but with no icon. - - If \a expandable set to \a true (default), the group can be expanded/collapsed by the user. - */ + /** + * @brief Creates and adds an ActionGroup (with a header) to the panel. + * @param title The title of the group's header. + * @param expandable If `true` (default), the group can be expanded/collapsed. + * @return The newly created ActionGroup. + */ ActionGroup* createGroup(const QString &title, bool expandable = true); - /** Creates and adds to the ActionPanel's vertical layout an empty ActionGroup with header's - text set to \a title and icon set to \a icon. - - If \a expandable set to \a true (default), the group can be expanded/collapsed by the user. - */ + /** + * @brief Creates and adds an ActionGroup (with a header) to the panel. + * @param icon The icon for the group's header. + * @param title The title of the group's header. + * @param expandable If `true` (default), the group can be expanded/collapsed. + * @return The newly created ActionGroup. + */ ActionGroup* createGroup(const QPixmap &icon, const QString &title, bool expandable = true); - /** Sets the scheme of the panel and all the child groups to \a scheme. - - By default, ActionPanelScheme::defaultScheme() is used. - */ + /** + * @brief Sets the color scheme for the panel and its child groups. + * @param scheme The new scheme to use. Defaults to `ActionPanelScheme::defaultScheme()` + * if not set. + */ void setScheme(ActionPanelScheme *scheme); + /** + * @brief Returns the recommended minimum size for the panel. + * @return The minimum size hint. + */ QSize minimumSizeHint() const override; protected: - //virtual void paintEvent ( QPaintEvent * event ); - + /** @brief The color scheme used by the panel. */ ActionPanelScheme *myScheme; + + /** @brief The spacer used for bottom spacing. */ QSpacerItem *mySpacer; }; - } // namespace #endif // ACTIONPANEL_H diff --git a/src/Gui/QSint/actionpanel/actionpanelscheme.h b/src/Gui/QSint/actionpanel/actionpanelscheme.h index b0fa2f4481..187dd98781 100644 --- a/src/Gui/QSint/actionpanel/actionpanelscheme.h +++ b/src/Gui/QSint/actionpanel/actionpanelscheme.h @@ -18,59 +18,97 @@ #include #include #include +#include +#include namespace QSint { - /** - * #@brief Class representing color scheme for ActionPanel and ActionGroup. + * @brief Provides a color scheme and layout parameters for ActionPanel and ActionGroup widgets. + * + * ActionPanels group related actions, and ActionGroups organize actions within a panel. + * This class defines the visual appearance and behavior (e.g., folding animation) of these components. */ class QSINT_EXPORT ActionPanelScheme { public: /** - * @brief Animation effect during expanding/collapsing of the ActionGroup's contents. + * @brief Animation effect used when expanding or collapsing an ActionGroup's contents. */ enum FoldEffect { - NoFolding, - ShrunkFolding, - SlideFolding + NoFolding, ///< No folding animation. + ShrunkFolding, ///< Contents shrink to a point during folding. + SlideFolding ///< Contents slide in and out during folding. }; + /** + * @brief Constructs a default ActionPanelScheme. + */ ActionPanelScheme(); - /** Returns a pointer to the default scheme object. - * Must be reimplemented in derived classes for custom schemes. + /** + * @brief Returns a pointer to the default ActionPanelScheme object. + * Derived classes can override this to provide a custom default scheme. + * @return A pointer to the default ActionPanelScheme. */ static ActionPanelScheme* defaultScheme(); - /// Height of the header in pixels. + /** + * @brief Height of the header area in pixels. + */ int headerSize; - /// If set to \a true, moving mouse over the header results in changing its opacity slowly. + + /** + * @brief Whether mouseover on the header triggers a slow opacity change. + */ bool headerAnimation; - /// Image of folding button when the group is expanded. + /** + * @brief Image of the folding button when the group is expanded. + */ QPixmap headerButtonFold; - /// Image of folding button when the group is expanded and mouse cursor is over the button. + /** + * @brief Image of the folding button when the group is expanded and the mouse is over it. + */ QPixmap headerButtonFoldOver; - /// Image of folding button when the group is collapsed. + /** + * @brief Image of the folding button when the group is collapsed. + */ QPixmap headerButtonUnfold; - /// Image of folding button when the group is collapsed and mouse cursor is over the button. + /** + * @brief Image of the folding button when the group is collapsed and the mouse is over it. + */ QPixmap headerButtonUnfoldOver; + /** + * @brief Size of the header button. + */ QSize headerButtonSize; - /// Number of steps made for expanding/collapsing animation (default 20). + /** + * @brief Number of steps in the expanding/collapsing animation (default: 20). + */ int groupFoldSteps; - /// Delay in ms between steps made for expanding/collapsing animation (default 15). + + /** + * @brief Delay in milliseconds between animation steps (default: 15). + */ int groupFoldDelay; - /// Sets folding effect during expanding/collapsing. + + /** + * @brief Folding effect used during expanding/collapsing. + */ FoldEffect groupFoldEffect; - /// If set to \a true, changes group's opacity slowly during expanding/collapsing. + + /** + * @brief Whether the group's opacity changes slowly during folding. + */ bool groupFoldThaw; - /// The CSS for the ActionPanel/ActionGroup elements. + /** + * @brief CSS style for ActionPanel/ActionGroup elements. + */ QString actionStyle; /** @@ -83,27 +121,32 @@ public: */ void restoreActionStyle(); + /** + * @brief Minimal CSS style. + */ static const QString minimumStyle; /** * @brief Generates a custom system style based on the palette. * @param p The palette to use for generating the style. - * @return A QString containing the generated style. + * @return The generated style. */ QString systemStyle(const QPalette& p); protected: /** - * @brief Draws a fold/unfold icon based on the palette. + * @brief Draws a fold/unfold icon. * @param p The palette to use for coloring the icon. - * @param fold True for fold icon, false for unfold icon. - * @param hover True for hover effect, false otherwise. - * @return A QPixmap representing the icon. + * @param fold `true` for fold icon, `false` for unfold icon. + * @param hover `true` for hover effect, `false` otherwise. + * @return The icon as a QPixmap. */ QPixmap drawFoldIcon(const QPalette& p, bool fold, bool hover) const; private: - // Store the built-in icons for restoration. + /** + * @brief Stores the built-in icons for restoration. + */ QPixmap builtinFold; QPixmap builtinFoldOver; QPixmap builtinUnfold; diff --git a/src/Gui/QSint/actionpanel/taskgroup_p.h b/src/Gui/QSint/actionpanel/taskgroup_p.h index 0af7f47832..464af2c365 100644 --- a/src/Gui/QSint/actionpanel/taskgroup_p.h +++ b/src/Gui/QSint/actionpanel/taskgroup_p.h @@ -21,7 +21,7 @@ namespace QSint class TaskGroup : public QFrame { - typedef QFrame BaseClass; + using BaseClass = QFrame; public: TaskGroup(QWidget *parent, bool hasHeader = false); @@ -38,7 +38,6 @@ public: QPixmap transparentRender(); protected: - void paintEvent ( QPaintEvent * event ) override; void keyPressEvent ( QKeyEvent * event ) override; void keyReleaseEvent ( QKeyEvent * event ) override; diff --git a/src/Gui/QSint/actionpanel/taskheader_p.h b/src/Gui/QSint/actionpanel/taskheader_p.h index 482a86db9f..84c6168ea6 100644 --- a/src/Gui/QSint/actionpanel/taskheader_p.h +++ b/src/Gui/QSint/actionpanel/taskheader_p.h @@ -22,7 +22,7 @@ class TaskHeader : public QFrame { Q_OBJECT - typedef QFrame BaseClass; + using BaseClass = QFrame; friend class ActionGroup;