KeypointItem.cpp
Go to the documentation of this file.
00001 /*
00002 Copyright (c) 2011-2014, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
00003 All rights reserved.
00004 
00005 Redistribution and use in source and binary forms, with or without
00006 modification, are permitted provided that the following conditions are met:
00007     * Redistributions of source code must retain the above copyright
00008       notice, this list of conditions and the following disclaimer.
00009     * Redistributions in binary form must reproduce the above copyright
00010       notice, this list of conditions and the following disclaimer in the
00011       documentation and/or other materials provided with the distribution.
00012     * Neither the name of the Universite de Sherbrooke nor the
00013       names of its contributors may be used to endorse or promote products
00014       derived from this software without specific prior written permission.
00015 
00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00017 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00018 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
00020 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00021 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00023 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00025 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 */
00027 
00028 #include "KeypointItem.h"
00029 
00030 #include <QtGui/QPen>
00031 #include <QtGui/QBrush>
00032 #include <QtGui/QGraphicsScene>
00033 
00034 namespace find_object {
00035 
00036 KeypointItem::KeypointItem(int id, qreal x, qreal y, int r, const QString & info, const QColor & color, QGraphicsItem * parent) :
00037         QGraphicsEllipseItem(x, y, r, r, parent),
00038         info_(info),
00039         placeHolder_(0),
00040         id_(id)
00041 {
00042         this->setPen(QPen(color));
00043         this->setBrush(QBrush(color));
00044         this->setAcceptsHoverEvents(true);
00045         this->setFlag(QGraphicsItem::ItemIsFocusable, true);
00046         this->setFlag(QGraphicsItem::ItemIsSelectable, true);
00047 }
00048 
00049 KeypointItem::~KeypointItem()
00050 {
00051 }
00052 
00053 void KeypointItem::setColor(const QColor & color)
00054 {
00055         this->setPen(QPen(color));
00056         this->setBrush(QBrush(color));
00057         if(placeHolder_)
00058         {
00059                 QList<QGraphicsItem *> items = placeHolder_->children();
00060                 if(items.size())
00061                 {
00062                         ((QGraphicsTextItem *)items.front())->setDefaultTextColor(this->pen().color().rgb());
00063                 }
00064         }
00065 }
00066 
00067 void KeypointItem::showDescription()
00068 {
00069         if(!placeHolder_ || !placeHolder_->isVisible())
00070         {
00071                 if(!placeHolder_)
00072                 {
00073                         placeHolder_ = new QGraphicsRectItem();
00074                         placeHolder_->setVisible(false);
00075                         this->scene()->addItem(placeHolder_);
00076                         placeHolder_->setBrush(QBrush(QColor ( 0, 0, 0, 170 ))); // Black transparent background
00077                         QGraphicsTextItem * text = new QGraphicsTextItem(placeHolder_);
00078                         text->setDefaultTextColor(this->pen().color().rgb());
00079                         text->setPlainText(info_);
00080                         placeHolder_->setRect(text->boundingRect());
00081                 }
00082 
00083 
00084                 QPen pen = this->pen();
00085                 this->setPen(QPen(pen.color(), pen.width()+2));
00086                 placeHolder_->setZValue(this->zValue()+1);
00087                 placeHolder_->setPos(this->mapToScene(0,0));
00088                 placeHolder_->setVisible(true);
00089         }
00090 }
00091 
00092 void KeypointItem::hideDescription()
00093 {
00094         if(placeHolder_ && placeHolder_->isVisible())
00095         {
00096                 placeHolder_->setVisible(false);
00097                 this->setPen(QPen(pen().color(), pen().width()-2));
00098         }
00099 }
00100 
00101 void KeypointItem::hoverEnterEvent ( QGraphicsSceneHoverEvent * event )
00102 {
00103         this->showDescription();
00104         QGraphicsEllipseItem::hoverEnterEvent(event);
00105 }
00106 
00107 void KeypointItem::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
00108 {
00109         if(!this->hasFocus())
00110         {
00111                 this->hideDescription();
00112         }
00113         QGraphicsEllipseItem::hoverEnterEvent(event);
00114 }
00115 
00116 void KeypointItem::focusInEvent ( QFocusEvent * event )
00117 {
00118         this->showDescription();
00119         QGraphicsEllipseItem::focusInEvent(event);
00120 }
00121 
00122 void KeypointItem::focusOutEvent ( QFocusEvent * event )
00123 {
00124         this->hideDescription();
00125         QGraphicsEllipseItem::focusOutEvent(event);
00126 }
00127 
00128 } // namespace find_object


find_object_2d
Author(s): Mathieu Labbe
autogenerated on Thu Aug 27 2015 13:00:33