You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kftpgrabber/kftpgrabber/src/widgets/balloon.cpp

146 lines
4.9 KiB

/*
* This file is part of the KFTPGrabber project
*
* Copyright (C) 2003-2005 by the KFTPGrabber developers
* Copyright (C) 2003-2005 Jernej Kos <kostko@jweb-network.net>
*
* 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 <tqpointarray.h>
#include <tqpushbutton.h>
#include <tqtooltip.h>
#include <tqlayout.h>
#include <tqlabel.h>
#include <tdeapplication.h>
#include <kdialog.h>
#include <tdelocale.h>
#include <kstandarddirs.h>
#include <kactivelabel.h>
#include <tdeglobalsettings.h>
#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, TQ_SIGNAL(clicked(int, int)), this, TQ_SIGNAL(signalBalloonClicked()));
connect(caption, TQ_SIGNAL(linkClicked(const TQString &)), this, TQ_SIGNAL(signalIgnoreButtonClicked()));
connect(caption, TQ_SIGNAL(linkClicked(const TQString &)), this, TQ_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"