plasma-framework/widgets/layoutitem.cpp
Aaron J. Seigo b448d9bb90 when an item is added to the layout, give it a chance to react. in the case of Widget, we're going to set the movable state of the QGraphicsItem. the result: items move, or don't, based on whether or not they are in a layout. finally, you can't just move shit around in the panel.
it's pretty hackish since we have to special case FreeLayout but hey, since when were layouts in plasma ever sane?

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=728764
2007-10-24 06:54:26 +00:00

139 lines
2.7 KiB
C++

/*
* Copyright 2007 by Matias Valdenegro T. <mvaldenegro@informatica.utem.cl>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2, or
* (at your option) any later version.
*
* This program 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "layoutitem.h"
#include <KDebug>
#include "layout.h"
namespace Plasma
{
class LayoutItem::Private
{
public:
Private()
: layout(0),
managingLayout(0)
{
}
~Private() {}
Layout* layout;
Layout* managingLayout;
};
LayoutItem::LayoutItem()
: d(new Private())
{
}
LayoutItem::~LayoutItem()
{
if (d->managingLayout) {
d->managingLayout->removeItem(this);
}
delete d->layout;
delete d;
}
QGraphicsItem* LayoutItem::graphicsItem()
{
return 0;
}
bool LayoutItem::hasHeightForWidth() const
{
return false;
}
qreal LayoutItem::heightForWidth(qreal w) const
{
return 0.0;
}
bool LayoutItem::hasWidthForHeight() const
{
return false;
}
qreal LayoutItem::widthForHeight(qreal h) const
{
return 0.0;
}
void LayoutItem::setLayout(Layout* layout)
{
if (d->layout && layout) {
kDebug() << "already have a layout.";
return;
}
if (layout) {
layout->setParent(this);
} else if (d->layout) {
// FIXME: we had a layout, but now it has been removed
// and we are without layout; we should tell our
// children about this, but LayoutItem doesn't know
// about children =/
kDebug() << "layout removed from under us. expect crashes";
}
d->layout = layout;
}
Layout* LayoutItem::layout() const
{
return d->layout;
}
void LayoutItem::setManagingLayout(Layout* layout)
{
if (d->managingLayout) {
d->managingLayout->removeItem(this);
}
d->managingLayout = layout;
managingLayoutChanged();
}
void LayoutItem::unsetManagingLayout(Layout* layout)
{
if (d->managingLayout == layout) {
d->managingLayout = 0;
}
managingLayoutChanged();
}
void LayoutItem::managingLayoutChanged()
{
}
Layout* LayoutItem::managingLayout() const
{
return d->managingLayout;
}
}