/*
Copyright 2006-2021 The QElectroTech Team
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see .
*/
#ifndef QWIDGETANIMATION_H
#define QWIDGETANIMATION_H
#include
#include
#include
/**
@brief The QWidgetAnimation class
This class animate the show and hide function of a QWidget.
The role of behavior is to calcul as best the animation process
when widget is show.
Because this class don't change the current and final size
of the widget but her maximum size during the animation process,
we must to know in advance the final size of the widget.
Behavior minimumSizeHint : the final size of the widget
will be his minimum size hint.
Behavior availableSpace : the final size of widget will be
the available size of her parent.
Since parent can have other widgets you can add a QVector of widget
to subtract of the final size.
Because we suppose the animated widget will take the maximum
available space, we subtract the minimum size hint of widgets in QVector.
Behavior lastSize :
The widget will have the same size as the last time he was showed.
*/
class QWidgetAnimation : public QPropertyAnimation
{
Q_OBJECT
public:
enum Behavior {
minimumSizeHint,
availableSpace,
lastSize,
};
QWidgetAnimation(
QWidget *widget,
Qt::Orientation orientation,
QWidgetAnimation::Behavior
behavior = QWidgetAnimation::minimumSizeHint,
int duration = 250);
void widgetToSubtract (QVector widgets);
void show();
void hide();
void setHidden(bool hidden);
void setLastShowSize(int size);
private:
enum currentState {
Showing,
Hidding,
Finish
};
Qt::Orientation m_orientation = Qt::Horizontal;
QVector m_widget_to_substract;
QWidget *m_widget;
QSize m_maximum;
QRect m_last_rect;
QWidgetAnimation::Behavior m_behavior = Behavior::minimumSizeHint;
QWidgetAnimation::currentState m_state = QWidgetAnimation::Finish;
};
#endif // QWIDGETANIMATION_H