#ifndef COLLAPSIBLEGROUPBOX_H
#define COLLAPSIBLEGROUPBOX_H

#include <QGroupBox>
#include <QMap>
#include <QMargins>
#include <QPair>
#include <QToolButton>

class QResizeEvent;
class CollapseExpandButton;
class QSpacerItem;

#include "../mischelpers_global.h"

class MISCHELPERS_EXPORT CCollapsibleGroupBox : public QGroupBox
{
public:
  explicit CCollapsibleGroupBox(QWidget *parent = nullptr);

protected:
  void resizeEvent(QResizeEvent *);

private:
  void resizeCollapseButton();
  void collapseLayout(QLayout *layout);
  void collapseSpacer(QSpacerItem *spacer);
  void expandLayout(QLayout *layout);
  void expandSpacer(QSpacerItem *spacer);

  QToolButton *m_clExpButton;
  QMap<const void *, QMargins> m_layoutMargins;
  QMap<const void *, QPair<QSize, QSizePolicy>> m_spacerSizes;

private slots:
  void onScreenChanged();
  void onVisibilityChanged();

};

#endif // COLLAPSIBLEGROUPBOX_H