dde-dock/frame/item/components/_previewcontainer.cpp
石博文 e0b2be7cb7 add preview widget
Change-Id: Ifd6b9b63cae9c3773a1ea7b1146d27bd60154bd9
2017-05-22 17:17:29 +08:00

78 lines
1.9 KiB
C++

#include "_previewcontainer.h"
#define FIXED_WIDTH 200
#define FIXED_HEIGHT 130
#define SPACING 5
_PreviewContainer::_PreviewContainer(QWidget *parent)
: QWidget(parent),
m_wmHelper(DWindowManagerHelper::instance())
{
m_windowListLayout = new QVBoxLayout;
m_windowListLayout->setSpacing(SPACING);
m_windowListLayout->setMargin(0);
setLayout(m_windowListLayout);
}
void _PreviewContainer::setWindowInfos(const WindowDict &infos)
{
// check removed window
for (auto it(m_snapshots.begin()); it != m_snapshots.end();)
{
if (!infos.contains(it.key()))
{
it.value()->deleteLater();
it = m_snapshots.erase(it);
} else {
++it;
}
}
for (auto it(infos.cbegin()); it != infos.cend(); ++it)
{
if (!m_snapshots.contains(it.key()))
appendSnapWidget(it.key());
}
adjustSize();
}
void _PreviewContainer::updateLayoutDirection(const Dock::Position dockPos)
{
if (m_wmHelper->hasComposite() && (dockPos == Dock::Top || dockPos == Dock::Bottom))
m_windowListLayout->setDirection(QBoxLayout::LeftToRight);
else
m_windowListLayout->setDirection(QBoxLayout::TopToBottom);
adjustSize();
}
void _PreviewContainer::adjustSize()
{
const bool horizontal = m_windowListLayout->direction() == QBoxLayout::LeftToRight;
const int count = m_snapshots.size();
if (!count)
return;
if (horizontal)
{
setFixedHeight(FIXED_HEIGHT);
setFixedWidth(FIXED_WIDTH * count + SPACING * (count - 1));
} else {
setFixedWidth(FIXED_WIDTH);
setFixedHeight(FIXED_HEIGHT * count + SPACING * (count - 1));
}
}
void _PreviewContainer::appendSnapWidget(const WId wid)
{
AppSnapshot *snap = new AppSnapshot(wid);
m_windowListLayout->addWidget(snap);
m_snapshots.insert(wid, snap);
}