/***************************************************************************** * Copyright (C) 2006-2010 by Peter Penz * * Copyright (C) 2006 by Aaron J. Seigo * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library 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 * * Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public License * * along with this library; see the file COPYING.LIB. If not, write to * * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301, USA. * *****************************************************************************/ #include "kurlnavigatorbuttonbase_p.h" #include #include #include #include #include #include #include #include #include #include namespace KDEPrivate { KUrlNavigatorButtonBase::KUrlNavigatorButtonBase(QWidget* parent) : QPushButton(parent), m_active(true), m_displayHint(0) { setFocusPolicy(Qt::TabFocus); setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); setMinimumHeight(parent->minimumHeight()); connect(this, SIGNAL(pressed()), parent, SLOT(requestActivation())); } KUrlNavigatorButtonBase::~KUrlNavigatorButtonBase() { } void KUrlNavigatorButtonBase::setActive(bool active) { if (m_active != active) { m_active = active; update(); } } bool KUrlNavigatorButtonBase::isActive() const { return m_active; } void KUrlNavigatorButtonBase::setDisplayHintEnabled(DisplayHint hint, bool enable) { if (enable) { m_displayHint = m_displayHint | hint; } else { m_displayHint = m_displayHint & ~hint; } update(); } bool KUrlNavigatorButtonBase::isDisplayHintEnabled(DisplayHint hint) const { return (m_displayHint & hint) > 0; } void KUrlNavigatorButtonBase::focusInEvent(QFocusEvent *event) { setDisplayHintEnabled(EnteredHint, true); QPushButton::focusInEvent(event); } void KUrlNavigatorButtonBase::focusOutEvent(QFocusEvent *event) { setDisplayHintEnabled(EnteredHint, false); QPushButton::focusOutEvent(event); } void KUrlNavigatorButtonBase::enterEvent(QEvent* event) { QPushButton::enterEvent(event); setDisplayHintEnabled(EnteredHint, true); update(); } void KUrlNavigatorButtonBase::leaveEvent(QEvent* event) { QPushButton::leaveEvent(event); setDisplayHintEnabled(EnteredHint, false); update(); } void KUrlNavigatorButtonBase::drawHoverBackground(QPainter* painter) { const bool isHighlighted = isDisplayHintEnabled(EnteredHint) || isDisplayHintEnabled(DraggedHint) || isDisplayHintEnabled(PopupActiveHint); QColor backgroundColor = isHighlighted ? palette().color(QPalette::Highlight) : Qt::transparent; if (!m_active && isHighlighted) { backgroundColor.setAlpha(128); } if (backgroundColor != Qt::transparent) { // TODO: the backgroundColor should be applied to the style QStyleOptionViewItemV4 option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_MouseOver; option.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, this); } } QColor KUrlNavigatorButtonBase::foregroundColor() const { const bool isHighlighted = isDisplayHintEnabled(EnteredHint) || isDisplayHintEnabled(DraggedHint) || isDisplayHintEnabled(PopupActiveHint); QColor foregroundColor = palette().color(foregroundRole()); int alpha = m_active ? 255 : 128; if (!m_active && !isHighlighted) { alpha -= alpha / 4; } foregroundColor.setAlpha(alpha); return foregroundColor; } void KUrlNavigatorButtonBase::activate() { setActive(true); } } // namespace KDEPrivate #include "kurlnavigatorbuttonbase_p.moc"