// // C++ Implementation: mallorybutton // // Description: // // // Author: Remi Villatel , (C) 2005 // // Copyright: See COPYING file that comes with this distribution // // #include #include #include #include "enums.h" #include "mallorybutton.h" #include "malloryhandler.h" #include "pixmaps.h" #include "embeddata.h" MalloryButton::MalloryButton(MalloryClient *parent, const char *name, const TQString& tip, ButtonType type) : TQButton(parent->widget(), name), m_client(parent), m_lastMouse(0), m_type(type), hover(false), isOnAllDesktops(false), isMaximized(false) { TQToolTip::add(this, tip); setCursor(arrowCursor); setBackgroundMode(NoBackground); setFixedSize(MalloryHandler::buttonSize(), MalloryHandler::buttonSize()); } MalloryButton::~MalloryButton() { } void MalloryButton::setTipText(const TQString &tip) { TQToolTip::remove(this); TQToolTip::add(this, tip); } TQSize MalloryButton::sizeHint() const // MXLS { return TQSize(MalloryHandler::buttonSize(), MalloryHandler::buttonSize()); } void MalloryButton::enterEvent(TQEvent *e) { hover = true; repaint(false); TQButton::enterEvent(e); } void MalloryButton::leaveEvent(TQEvent *e) { hover = false; repaint(false); TQButton::enterEvent(e); } void MalloryButton::mousePressEvent(TQMouseEvent *e) { m_lastMouse = e->button(); TQMouseEvent me(e->type(), e->pos(), e->globalPos(), LeftButton, e->state()); TQButton::mousePressEvent(&me); } void MalloryButton::mouseReleaseEvent(TQMouseEvent *e) { m_lastMouse = e->button(); TQMouseEvent me(e->type(), e->pos(), e->globalPos(), LeftButton, e->state()); TQButton::mouseReleaseEvent(&me); } void MalloryButton::drawButton(TQPainter *painter) { if (!MalloryHandler::initialized()) return; bool active = m_client->isActive(); int buttonSize = MalloryHandler::buttonSize(); int ofx = (buttonSize-16)/2; int ofy = ofx; // Crush the bug the hard way! if (ofy < 2) ofy = 2; TQPixmap pufferPixmap; pufferPixmap.resize(buttonSize, buttonSize); TQPainter pufferPainter(&pufferPixmap); pufferPainter.drawPixmap(0, 0, active ? *Pixmaps::active_button_ground : *Pixmaps::inactive_button_ground); if (m_type == ButtonMenu) { TQPixmap menu_icon = m_client->icon().pixmap(TQIconSet::Small, TQIconSet::Normal); pufferPainter.drawPixmap(ofx, ofy, menu_icon); } else { // Paint the little icon on the buttons. // Lotsa trouble with this! Stupid scope! if (hover && !isDown()) { // Hover if (m_type == ButtonHelp) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_help_hover : *Pixmaps::inactive_help_hover); else if (m_type == ButtonMax) { if (isMaximized) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_restore_hover : *Pixmaps::inactive_restore_hover); else pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_max_hover : *Pixmaps::inactive_max_hover); } else if (m_type == ButtonMin) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_min_hover : *Pixmaps::inactive_min_hover); else if (m_type == ButtonClose) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_close_hover : *Pixmaps::inactive_close_hover); else if (m_type == ButtonOnAllDesktops) { if (isOnAllDesktops) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_unsticky_hover : *Pixmaps::inactive_unsticky_hover); else pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_sticky_hover : *Pixmaps::inactive_sticky_hover); } else if (m_type == ButtonAbove) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_above_hover : *Pixmaps::inactive_above_hover); else if (m_type == ButtonBelow) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_below_hover : *Pixmaps::inactive_below_hover); } else if (isDown()) { // Sunken if (m_type == ButtonHelp) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_help_sunken : *Pixmaps::inactive_help_sunken); else if (m_type == ButtonMax) { if (isMaximized) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_restore_sunken : *Pixmaps::inactive_restore_sunken); else pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_max_sunken : *Pixmaps::inactive_max_sunken); } else if (m_type == ButtonMin) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_min_sunken : *Pixmaps::inactive_min_sunken); else if (m_type == ButtonClose) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_close_sunken : *Pixmaps::inactive_close_sunken); else if (m_type == ButtonOnAllDesktops) { if (isOnAllDesktops) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_unsticky_sunken : *Pixmaps::inactive_unsticky_sunken); else pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_sticky_sunken : *Pixmaps::inactive_sticky_sunken); } else if (m_type == ButtonAbove) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_above_sunken : *Pixmaps::inactive_above_sunken); else if (m_type == ButtonBelow) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_below_sunken : *Pixmaps::inactive_below_sunken); } else { // Normal if (m_type == ButtonHelp) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_help_normal : *Pixmaps::inactive_help_normal); else if (m_type == ButtonMax) { if (isMaximized) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_restore_normal : *Pixmaps::inactive_restore_normal); else pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_max_normal : *Pixmaps::inactive_max_normal); } else if (m_type == ButtonMin) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_min_normal : *Pixmaps::inactive_min_normal); else if (m_type == ButtonClose) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_close_normal : *Pixmaps::inactive_close_normal); else if (m_type == ButtonOnAllDesktops) { if (isOnAllDesktops) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_unsticky_normal : *Pixmaps::inactive_unsticky_normal); else pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_sticky_normal : *Pixmaps::inactive_sticky_normal); } else if (m_type == ButtonAbove) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_above_normal : *Pixmaps::inactive_above_normal); else if (m_type == ButtonBelow) pufferPainter.drawImage(ofx, ofy, active ? *Pixmaps::active_below_normal : *Pixmaps::inactive_below_normal); } } pufferPainter.end(); painter->drawPixmap(0, 0, pufferPixmap); } #include "mallorybutton.moc"