qskinny/src/layouts/QskDrawer.cpp

95 lines
2.0 KiB
C++
Raw Normal View History

2023-05-01 23:00:15 +00:00
#include "QskDrawer.h"
2023-04-25 21:28:42 +00:00
#include "QskAspect.h"
2023-05-01 23:00:15 +00:00
2023-04-25 21:07:51 +00:00
#include <QskPopup.h>
#include <QskBox.h>
#include <QskAnimationHint.h>
#include <QskQuick.h>
2023-05-01 23:00:15 +00:00
QSK_SUBCONTROL( QskDrawer, DasPanel )
class QskDrawer::PrivateData {
public:
QskBox* content;
Qt::Edge edge = Qt::LeftEdge;
};
QskDrawer::QskDrawer( QQuickItem* parentItem ) :
Inherited ( parentItem )
, m_data( new PrivateData { } )
{
setZ( 1 );
setPopupFlag( PopupFlag::CloseOnPressOutside, true );
m_data->content = new QskBox(this);
2023-04-25 21:28:42 +00:00
m_data->content->setSubcontrolProxy( QskBox::Panel, DasPanel );
2023-04-25 21:00:41 +00:00
2023-04-25 21:28:08 +00:00
setAnimationHint( DasPanel | QskAspect::Position, QskAnimationHint( 1000 ) );
2023-04-25 20:43:51 +00:00
2023-05-01 23:00:15 +00:00
setFaderAspect( DasPanel | QskAspect::Metric );
2023-04-25 21:28:42 +00:00
setSkinHint( Overlay | QskAspect::Style, false );
2023-05-01 23:00:15 +00:00
2023-04-25 19:40:24 +00:00
connect(this, &QskDrawer::closed, this, [this](){
2023-04-25 21:00:41 +00:00
startTransition( DasPanel | QskAspect::Metric,
2023-04-25 21:28:08 +00:00
animationHint( DasPanel | QskAspect::Position ),
0.0, 1.0 );
2023-04-25 19:40:24 +00:00
});
2023-05-01 23:00:15 +00:00
}
QskDrawer::~QskDrawer()
{
}
Qt::Edge QskDrawer::edge() const {
return m_data->edge;
}
void QskDrawer::setEdge( Qt::Edge edge ) {
if( m_data->edge == edge ) {
return;
}
m_data->edge = edge;
edgeChanged( edge );
}
void QskDrawer::setContent( QskControl* t ) {
t->setParentItem( m_data->content );
}
void QskDrawer::updateLayout() {
auto rect = parentItem()->childrenRect();
switch( m_data->edge ) {
case Qt::Edge::LeftEdge:
case Qt::Edge::RightEdge:
// rect.setWidth( m_data->control->preferredSize().width() );
break;
case Qt::Edge::TopEdge:
case Qt::Edge::BottomEdge:
// rect.setHeight( m_data->control->preferredSize().height() );
break;
}
auto size = rect.size();
qreal off = metric( faderAspect() ) * size.width();
qskSetItemGeometry( m_data->content, -off, 0, size.width(), size.height());
Inherited::updateLayout();
}
void QskDrawer::aboutToShow()
{
2023-04-25 21:28:08 +00:00
startTransition( DasPanel | QskAspect::Metric,
animationHint( DasPanel | QskAspect::Position ),
1.0, 0.0 );
2023-05-01 23:00:15 +00:00
Inherited::aboutToShow();
}
#include "moc_QskDrawer.cpp"