📄 qcanvasgroupableitem.cpp
字号:
// -*- c-basic-offset: 4 -*-/* Rosegarden A sequencer and musical notation editor. This program is Copyright 2000-2007 Guillaume Laurent <glaurent@telegraph-road.org>, Chris Cannam <cannam@all-day-breakfast.com>, Richard Bown <bownie@bownie.com> The moral right of the authors to claim authorship of this work has been asserted. This program 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. See the file COPYING included with this distribution for more information.*/#include <qcanvas.h>#include "misc/Debug.h"#include "QCanvasGroupableItem.h"QCanvasGroupableItem::QCanvasGroupableItem(QCanvasItem *i, QCanvasItemGroup *g, bool withRelativeCoords) : m_group(g), m_item(i){ // RG_DEBUG << "QCanvasGroupableItem() - this : " << this // << " - group : " << g // << " - item : " << i << endl; if (withRelativeCoords) group()->addItemWithRelativeCoords(item()); else group()->addItem(item());}QCanvasGroupableItem::~QCanvasGroupableItem(){ // RG_DEBUG << "~QCanvasGroupableItem() - this : " << this // << " - group : " << group() // << " - item : " << item() << endl; // remove from the item group if we're still attached to one if (group()) group()->removeItem(item());}voidQCanvasGroupableItem::relativeMoveBy(double dx, double dy){ m_item->moveBy(dx + m_group->x(), dy + m_group->y());}voidQCanvasGroupableItem::detach(){ m_group = 0;}//////////////////////////////////////////////////////////////////////QCanvasItemGroup::QCanvasItemGroup(QCanvas *c) : QCanvasItem(c){ // RG_DEBUG << "QCanvasItemGroup() - this : " << this << endl;}QCanvasItemGroup::~QCanvasItemGroup(){ // RG_DEBUG << "~QCanvasItemGroup() - this : " << this << endl; // Tell all our items that we're being destroyed QCanvasItemList::Iterator i; for (i = m_items.begin(); i != m_items.end(); ++i) { QCanvasGroupableItem *t = dynamic_cast<QCanvasGroupableItem*>(*i); if (t) t->detach(); }}voidQCanvasItemGroup::moveBy(double dx, double dy){ QCanvasItem::moveBy(dx, dy); // move ourselves QCanvasItemList::Iterator i; // move group items for (i = m_items.begin(); i != m_items.end(); ++i) (*i)->moveBy(dx, dy);}voidQCanvasItemGroup::advance(int stage){ QCanvasItemList::Iterator i; for (i = m_items.begin(); i != m_items.end(); ++i) (*i)->advance(stage);}boolQCanvasItemGroup::collidesWith(const QCanvasItem *item) const{ QCanvasItemList::ConstIterator i; for (i = m_items.begin(); i != m_items.end(); ++i) if ((*i)->collidesWith(item)) return true; return false;}voidQCanvasItemGroup::draw(QPainter&){ // There isn't anything to do - all the items will be drawn // seperately by the canvas anyway. However the function has to be // implemented because it's an abstract virtual in QCanvasItem. // QCanvasItemList::Iterator i; // for(i = m_items.begin(); i != m_items.end(); ++i) // (*i)->draw(p);}voidQCanvasItemGroup::setVisible(bool yes){ QCanvasItemList::Iterator i; for (i = m_items.begin(); i != m_items.end(); ++i) (*i)->setVisible(yes);}voidQCanvasItemGroup::setSelected(bool yes){ QCanvasItem::setSelected(yes); QCanvasItemList::Iterator i; for (i = m_items.begin(); i != m_items.end(); ++i) (*i)->setVisible(yes);}voidQCanvasItemGroup::setEnabled(bool yes){ QCanvasItem::setEnabled(yes); QCanvasItemList::Iterator i; for (i = m_items.begin(); i != m_items.end(); ++i) (*i)->setEnabled(yes);}voidQCanvasItemGroup::setActive(bool yes){ QCanvasItem::setActive(yes); QCanvasItemList::Iterator i; for (i = m_items.begin(); i != m_items.end(); ++i) (*i)->setActive(yes);}intQCanvasItemGroup::rtti() const{ return 10002;}QRectQCanvasItemGroup::boundingRect() const{ QRect r; QCanvasItemList::ConstIterator i; for (i = m_items.begin(); i != m_items.end(); ++i) r.unite((*i)->boundingRect()); return r;}QRectQCanvasItemGroup::boundingRectAdvanced() const{ QRect r; QCanvasItemList::ConstIterator i; for (i = m_items.begin(); i != m_items.end(); ++i) r.unite((*i)->boundingRectAdvanced()); return r;}boolQCanvasItemGroup::collidesWith(const QCanvasSprite *s, const QCanvasPolygonalItem *p, const QCanvasRectangle *r, const QCanvasEllipse *e, const QCanvasText *t) const{ if (s) return collidesWith(s); else if (p) return collidesWith(p); else if (r) return collidesWith(r); else if (e) return collidesWith(e); else if (t) return collidesWith(t); return false;}voidQCanvasItemGroup::addItem(QCanvasItem *i){ m_items.append(i);}voidQCanvasItemGroup::addItemWithRelativeCoords(QCanvasItem *i){ i->moveBy(x(), y()); addItem(i);}voidQCanvasItemGroup::removeItem(QCanvasItem *i){ // RG_DEBUG << "QCanvasItemGroup::removeItem() - this : " // << this << " - item : " << i << endl; m_items.remove(i);}//////////////////////////////////////////////////////////////////////QCanvasLineGroupable::QCanvasLineGroupable(QCanvas *c, QCanvasItemGroup *g) : QCanvasLine(c), QCanvasGroupableItem(this, g){}//////////////////////////////////////////////////////////////////////QCanvasRectangleGroupable::QCanvasRectangleGroupable(QCanvas *c, QCanvasItemGroup *g) : QCanvasRectangle(c), QCanvasGroupableItem(this, g){}//////////////////////////////////////////////////////////////////////QCanvasTextGroupable::QCanvasTextGroupable(const QString& label, QCanvas *c, QCanvasItemGroup *g) : QCanvasText(label, c), QCanvasGroupableItem(this, g){}QCanvasTextGroupable::QCanvasTextGroupable(QCanvas *c, QCanvasItemGroup *g) : QCanvasText(c), QCanvasGroupableItem(this, g){}//////////////////////////////////////////////////////////////////////QCanvasSpriteGroupable::QCanvasSpriteGroupable(QCanvasPixmapArray *pa, QCanvas *c, QCanvasItemGroup *g) : QCanvasSprite(pa, c), QCanvasGroupableItem(this, g){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -