/* * This file is part of the KFTPGrabber project * * Copyright (C) 2003-2005 by the KFTPGrabber developers * Copyright (C) 2003-2005 Jernej Kos * * 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. * * This program is distributed in the hope that it will be useful, but * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and * NON-INFRINGEMENT. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, * MA 02110-1301, USA. * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * * You must obey the GNU General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. */ #include #include #include #include #include #include #include #include #include #include #include #include "widgets/balloon.h" #include "misc.h" using namespace KFTPGrabberBase; namespace KFTPWidgets { Balloon::Balloon(const TQString &text, const TQString &pix) : TQWidget(0L, "KFTPBalloon", WStyle_StaysOnTop | WStyle_Customize | WStyle_NoBorder | WStyle_Tool | WX11BypassWM) { setCaption(""); TQVBoxLayout *BalloonLayout = new TQVBoxLayout(this, 22, KDialog::spacingHint(), "BalloonLayout"); // BEGIN Layout1 TQHBoxLayout *Layout1 = new TQHBoxLayout(BalloonLayout, KDialog::spacingHint(), "Layout1"); KActiveLabel *caption = new KActiveLabel(text, this, "caption"); caption->setPalette(TQToolTip::palette()); caption->setSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::Minimum); if (!pix.isEmpty()) { TQLabel *image = new TQLabel(this, "mImage"); image->setScaledContents(FALSE); image->setPixmap(loadSmallPixmap(pix)); Layout1->addWidget(image); } Layout1->addWidget(caption); // END Layout1 setPalette(TQToolTip::palette()); setAutoMask(true); connect(caption, SIGNAL(clicked(int, int)), this, SIGNAL(signalBalloonClicked())); connect(caption, SIGNAL(linkClicked(const TQString &)), this, SIGNAL(signalIgnoreButtonClicked())); connect(caption, SIGNAL(linkClicked(const TQString &)), this, SLOT(deleteLater())); } void Balloon::mousePressEvent(TQMouseEvent *e) { emit signalBalloonClicked(); e->accept(); } void Balloon::setAnchor(const TQPoint &anchor) { m_anchor = anchor; updateMask(); } void Balloon::updateMask() { TQRegion mask(10, 10, width() - 20, height() - 20); TQPoint corners[8] = { TQPoint(width() - 50, 10), TQPoint(10, 10), TQPoint(10, height() - 50), TQPoint(width() - 50, height() - 50), TQPoint(width() - 10, 10), TQPoint(10, 10), TQPoint(10, height() - 10), TQPoint(width() - 10, height() - 10) }; for (int i = 0; i < 4; ++i) { TQPointArray corner; corner.makeArc(corners[i].x(), corners[i].y(), 40, 40, i * 16 * 90, 16 * 90); corner.resize(corner.size() + 1); corner.setPoint(corner.size() - 1, corners[i + 4]); mask -= corner; } // get screen-geometry for screen our anchor is on // (geometry can differ from screen to screen!) TQRect deskRect = TDEGlobalSettings::desktopGeometry(m_anchor); bool bottom = (m_anchor.y() + height()) > (deskRect.height() - 48); bool right = (m_anchor.x() + width()) > (deskRect.width() - 48); TQPointArray arrow(4); arrow.setPoint(0, TQPoint(right ? width() : 0, bottom ? height() : 0)); arrow.setPoint(1, TQPoint(right ? width() - 10 : 10, bottom ? height() - 30 : 30)); arrow.setPoint(2, TQPoint(right ? width() - 30 : 30, bottom ? height() - 10 : 10)); arrow.setPoint(3, arrow[0]); mask += arrow; setMask(mask); move(right ? m_anchor.x() - width() : m_anchor.x(), bottom ? m_anchor.y() - height() : m_anchor.y()); } } #include "balloon.moc"