/*************************************************************************** copyright : (C) 2005-2006 by Robby Stephenson email : robby@periapsis.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of version 2 of the GNU General Public License as * * published by the Free Software Foundation; * * * ***************************************************************************/ #include "overlaywidget.h" #include using Tellico::GUI::OverlayWidget; OverlayWidget::OverlayWidget(TQWidget* parent, TQWidget* anchor) : TQFrame(parent) , m_anchor(anchor) , m_corner(TopRight) { m_anchor->installEventFilter(this); reposition(); hide(); } void OverlayWidget::setCorner(Corner corner_) { if(corner_ == m_corner) { return; } m_corner = corner_; reposition(); } void OverlayWidget::addWidget(TQWidget* widget_) { tqlayout()->add(widget_); adjustSize(); } void OverlayWidget::reposition() { if(!m_anchor) { return; } setMaximumSize(parentWidget()->size()); adjustSize(); TQPoint p; switch(m_corner) { case BottomLeft: p.setX(0); p.setY(m_anchor->height()); break; case BottomRight: p.setX(m_anchor->width() - width()); p.setY(m_anchor->height()); break; case TopLeft: p.setX(0); p.setY(-1 * height()); break; case TopRight: p.setX(m_anchor->width() - width()); p.setY(-1 * height()); } // Position in the toplevelwidget's coordinates TQPoint pTopLevel = m_anchor->mapTo(tqtopLevelWidget(), p); // Position in the widget's parentWidget coordinates TQPoint pParent = parentWidget()->mapFrom(tqtopLevelWidget(), pTopLevel); // keep it on the screen if(pParent.x() < 0) { pParent.rx() = 0; } move(pParent); } bool OverlayWidget::eventFilter(TQObject* object_, TQEvent* event_) { if(TQT_BASE_OBJECT(object_) == TQT_BASE_OBJECT(m_anchor) && (event_->type() == TQEvent::Move || event_->type() == TQEvent::Resize)) { reposition(); } return TQFrame::eventFilter(object_, event_); } void OverlayWidget::resizeEvent(TQResizeEvent* event_) { reposition(); TQFrame::resizeEvent(event_); } bool OverlayWidget::event(TQEvent* event_) { if(event_->type() == TQEvent::ChildInserted) { adjustSize(); } return TQFrame::event(event_); } #include "overlaywidget.moc"