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.
203 lines
4.5 KiB
203 lines
4.5 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2003-2004 Nadeem Hasan <nhasan@kde.org>
|
|
Copyright (C) 2004 Aaron J. Seigo <aseigo@kde.org>
|
|
|
|
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 WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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; see the file COPYING. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "hidebutton.h"
|
|
|
|
#include <tqpainter.h>
|
|
|
|
#include <kapplication.h>
|
|
#include <kcursor.h>
|
|
#include <kglobalsettings.h>
|
|
#include <kiconeffect.h>
|
|
#include <kiconloader.h>
|
|
#include <kicontheme.h>
|
|
#include <kipc.h>
|
|
#include <kstandarddirs.h>
|
|
|
|
HideButton::HideButton(TQWidget *parent, const char *name)
|
|
: TQButton(parent, name),
|
|
m_highlight(false),
|
|
m_arrow(Qt::LeftArrow)
|
|
{
|
|
setBackgroundOrigin(AncestorOrigin);
|
|
|
|
connect(kapp, TQT_SIGNAL(settingsChanged(int)), TQT_SLOT(slotSettingsChanged(int)));
|
|
connect(kapp, TQT_SIGNAL(iconChanged(int)), TQT_SLOT(slotIconChanged(int)));
|
|
|
|
kapp->addKipcEventMask(KIPC::SettingsChanged);
|
|
kapp->addKipcEventMask(KIPC::IconChanged);
|
|
|
|
slotSettingsChanged(KApplication::SETTINGS_MOUSE);
|
|
}
|
|
|
|
void HideButton::drawButton(TQPainter *p)
|
|
{
|
|
if (m_arrow == Qt::LeftArrow)
|
|
{
|
|
p->setPen(colorGroup().mid());
|
|
p->drawLine(width()-1, 0, width()-1, height());
|
|
}
|
|
else if (m_arrow == Qt::RightArrow)
|
|
{
|
|
p->setPen(colorGroup().mid());
|
|
p->drawLine(0, 0, 0, height());
|
|
}
|
|
else if (m_arrow == Qt::UpArrow)
|
|
{
|
|
p->setPen(colorGroup().mid());
|
|
p->drawLine(0, height()-1, width(), height()-1);
|
|
}
|
|
else if (m_arrow == Qt::DownArrow)
|
|
{
|
|
p->setPen(colorGroup().mid());
|
|
p->drawLine(0, 0, width(), 0);
|
|
}
|
|
|
|
drawButtonLabel(p);
|
|
}
|
|
|
|
void HideButton::drawButtonLabel(TQPainter *p)
|
|
{
|
|
if (pixmap())
|
|
{
|
|
TQPixmap pix = m_highlight? m_activeIcon : m_normalIcon;
|
|
|
|
if (isOn() || isDown())
|
|
{
|
|
p->translate(2, 2);
|
|
}
|
|
|
|
TQPoint origin(2, 2);
|
|
|
|
if (pix.height() < (height() - 4))
|
|
{
|
|
origin.setY(origin.y() + ((height() - pix.height()) / 2));
|
|
}
|
|
|
|
if (pix.width() < (width() - 4))
|
|
{
|
|
origin.setX(origin.x() + ((width() - pix.width()) / 2));
|
|
}
|
|
|
|
p->drawPixmap(origin, pix);
|
|
}
|
|
}
|
|
|
|
void HideButton::setPixmap(const TQPixmap &pix)
|
|
{
|
|
TQButton::setPixmap(pix);
|
|
generateIcons();
|
|
}
|
|
|
|
void HideButton::setArrowType(Qt::ArrowType arrow)
|
|
{
|
|
m_arrow = arrow;
|
|
switch (arrow)
|
|
{
|
|
case Qt::LeftArrow:
|
|
setPixmap(SmallIcon("1leftarrow"));
|
|
break;
|
|
|
|
case Qt::RightArrow:
|
|
setPixmap(SmallIcon("1rightarrow"));
|
|
break;
|
|
|
|
case Qt::UpArrow:
|
|
setPixmap(SmallIcon("1uparrow"));
|
|
break;
|
|
|
|
case Qt::DownArrow:
|
|
default:
|
|
setPixmap(SmallIcon("1downarrow"));
|
|
break;
|
|
}
|
|
}
|
|
|
|
void HideButton::generateIcons()
|
|
{
|
|
if (!pixmap())
|
|
{
|
|
return;
|
|
}
|
|
|
|
TQImage image = pixmap()->convertToImage();
|
|
image = image.smoothScale(size() - TQSize(4, 4), TQImage::ScaleMin);
|
|
|
|
KIconEffect effect;
|
|
|
|
m_normalIcon = effect.apply(image, KIcon::Panel, KIcon::DefaultState);
|
|
m_activeIcon = effect.apply(image, KIcon::Panel, KIcon::ActiveState);
|
|
}
|
|
|
|
void HideButton::slotSettingsChanged(int category)
|
|
{
|
|
if (category != KApplication::SETTINGS_MOUSE)
|
|
{
|
|
return;
|
|
}
|
|
|
|
bool changeCursor = KGlobalSettings::changeCursorOverIcon();
|
|
|
|
if (changeCursor)
|
|
{
|
|
setCursor(KCursor::handCursor());
|
|
}
|
|
else
|
|
{
|
|
unsetCursor();
|
|
}
|
|
}
|
|
|
|
void HideButton::slotIconChanged(int group)
|
|
{
|
|
if (group != KIcon::Panel)
|
|
{
|
|
return;
|
|
}
|
|
|
|
generateIcons();
|
|
repaint(false);
|
|
}
|
|
|
|
void HideButton::enterEvent(TQEvent *e)
|
|
{
|
|
m_highlight = true;
|
|
|
|
repaint(false);
|
|
TQButton::enterEvent(e);
|
|
}
|
|
|
|
void HideButton::leaveEvent(TQEvent *e)
|
|
{
|
|
m_highlight = false;
|
|
|
|
repaint(false);
|
|
TQButton::enterEvent(e);
|
|
}
|
|
|
|
void HideButton::resizeEvent(TQResizeEvent *)
|
|
{
|
|
generateIcons();
|
|
}
|
|
|
|
#include "hidebutton.moc"
|
|
|
|
// vim:ts=4:sw=4:et
|