📄 ktoolbar.cpp
字号:
if ( isDown() || isOn() ) { if ( style() == WindowsStyle ) qDrawWinButton(_painter, 0, 0, width(), height(), colorGroup(), true ); else qDrawShadePanel(_painter, 0, 0, width(), height(), colorGroup(), true, 2, 0L ); } else if ( raised ) { if ( style() == WindowsStyle ) qDrawWinButton( _painter, 0, 0, width(), height(), colorGroup(), false ); else qDrawShadePanel( _painter, 0, 0, width(), height(), colorGroup(), false, 2, 0L ); } int dx, dy; if (icontext == 0) // icon only { if (pixmap()) { dx = ( width() - pixmap()->width() ) / 2; dy = ( height() - pixmap()->height() ) / 2; if ( isDown() && style() == WindowsStyle ) { ++dx; ++dy; } _painter->drawPixmap( dx, dy, *pixmap() ); } } else if (icontext == 1) // icon and text (if any) { if (pixmap()) { dx = 1; dy = ( height() - pixmap()->height() ) / 2; if ( isDown() && style() == WindowsStyle ) { ++dx; ++dy; } _painter->drawPixmap( dx, dy, *pixmap() ); } if (!btext.isNull()) { int tf = AlignVCenter|AlignLeft; if (!isEnabled()) _painter->setPen(palette().disabled().dark()); if (pixmap()) dx= pixmap()->width(); else dx= 1; dy = 0; if ( isDown() && style() == WindowsStyle ) { ++dx; ++dy; } if (toolBarButton) _painter->setFont(buttonFont); if(raised) _painter->setPen(blue); _painter->drawText(dx, dy, width()-dx, height(), tf, btext); } } else if (icontext == 2) // only text, even if there is a icon { if (!btext.isNull()) { int tf = AlignVCenter|AlignLeft; if (!isEnabled()) _painter->setPen(palette().disabled().dark()); dx= 1; dy= 0; if ( isDown() && style() == WindowsStyle ) { ++dx; ++dy; } if (toolBarButton) _painter->setFont(buttonFont); if(raised) _painter->setPen(blue); _painter->drawText(dx, dy, width()-dx, height(), tf, btext); } } else if (icontext == 3) { if (pixmap()) { dx = (width() - pixmap()->width()) / 2; dy = 1; if ( isDown() && style() == WindowsStyle ) { ++dx; ++dy; } _painter->drawPixmap( dx, dy, *pixmap() ); } if (!btext.isNull()) { int tf = AlignBottom|AlignHCenter; if (!isEnabled()) _painter->setPen(palette().disabled().dark()); dy= pixmap()->height(); dx = 2; if ( isDown() && style() == WindowsStyle ) { ++dx; ++dy; } if (toolBarButton) _painter->setFont(buttonFont); if(raised) _painter->setPen(blue); _painter->drawText(0, 0, width(), height()-4, tf, btext); } }//#warning What about Icontext=3 if (myPopup) { if (isEnabled()) qDrawArrow (_painter, DownArrow, WindowsStyle, false, width()-5, height()-5, 0, 0, colorGroup (), true); else qDrawArrow (_painter, DownArrow, WindowsStyle, false, width()-5, height()-5, 0, 0, colorGroup (), false); }}void KToolBarButton::paletteChange(const QPalette &){ if(!ImASeparator()) { makeDisabledPixmap(); if ( !isEnabled() ) QButton::setPixmap( disabledPixmap ); else QButton::setPixmap( enabledPixmap ); repaint(false); // no need to delete it first therefore only false }}void KToolBarButton::modeChange(){ int myWidth; myWidth = enabledPixmap.width(); QFont fnt; //Jesus, I must have been drunk... if (toolBarButton) // I might be a menuBarButton { buttonFont.setFamily("Helvetica"); buttonFont.setPointSize(10); buttonFont.setBold(false); buttonFont.setItalic(false); buttonFont.setCharSet(font().charSet()); fnt=buttonFont; } else fnt=kapp->generalFont; QFontMetrics fm(fnt); if (toolBarButton) icontext=parentWidget->icon_text; else icontext = 1; _size=parentWidget->item_size; if (myWidth < _size) myWidth = _size;// Nice but doesn't work/* if (_size > 28) { double factor=_size/26; QImage i; i = enabledPixmap.convertToImage(); i = i.smoothScale(enabledPixmap.width()*factor, enabledPixmap.height()*factor); enabledPixmap.resize (i.width(), i.height()); enabledPixmap.convertFromImage(i ); }*/ highlight=parentWidget->highlight; switch (icontext) { case 0: QToolTip::remove(this); QToolTip::add(this, btext); resize (myWidth, _size-2); break; case 1: QToolTip::remove(this); resize (fm.width(btext)+myWidth, _size-2); // +2+_size-2 break; case 2: QToolTip::remove(this); resize (fm.width(btext)+6, _size-2); // +2+_size-2 break; case 3: QToolTip::remove(this); resize ((fm.width(btext)+6>myWidth)?fm.width(btext)+6:myWidth, _size-2); break; } /* if (icontext > 0) //Calculate my size { QToolTip::remove(this); resize (fm.width(btext)+myWidth, _size-2); // +2+_size-2 } else { QToolTip::remove(this); QToolTip::add(this, btext); resize (myWidth, _size-2); } */ }void KToolBarButton::makeDisabledPixmap(){ if (ImASeparator()) return; // No pixmaps for separators QPalette pal = palette(); QColorGroup g = pal.disabled(); // Prepare the disabledPixmap for drawing disabledPixmap.detach(); // prevent flicker disabledPixmap.resize(enabledPixmap.width(), enabledPixmap.height()); disabledPixmap.fill( g.background() ); const QBitmap *mask = enabledPixmap.mask(); bool allocated = false; if (!mask) {// This shouldn't occur anymore! mask = new QBitmap(enabledPixmap.createHeuristicMask()); allocated = true; } QBitmap bitmap = *mask; // YES! make a DEEP copy before setting the mask! bitmap.setMask(*mask); QPainter p; p.begin( &disabledPixmap ); p.setPen( g.light() ); p.drawPixmap(1, 1, bitmap); p.setPen( g.mid() ); p.drawPixmap(0, 0, bitmap); p.end(); if (allocated) // This shouldn't occur anymore! delete mask;}void KToolBarButton::showMenu(){ // calculate that position carefully!! raised = true; repaint (false); QPoint p (parentWidget->mapToGlobal(pos())); if (p.y() + height() + myPopup->height() > KApplication::desktop()->height()) p.setY(p.y() - myPopup->height()); else p.setY(p.y()+height()); myPopup->popup(p);}void KToolBarButton::slotDelayTimeout(){ delayTimer->stop(); showMenu ();}void KToolBarButton::ButtonClicked(){ if (myPopup && !delayPopup) showMenu(); else emit clicked( id );}void KToolBarButton::ButtonPressed(){ if (myPopup) { if (delayPopup) { delayTimer->stop(); // just in case? delayTimer->start(POPUP_DELAY, true); return; } else showMenu(); } else emit pressed( id );}void KToolBarButton::ButtonReleased(){ // if popup is visible we don't get this // (gram of praxis weights more than ton of theory) //if (myPopup && myPopup->isVisible()) // return; if (myPopup && delayPopup) delayTimer->stop(); emit released( id );}void KToolBarButton::ButtonToggled(){ emit toggled(id);}/****************************** Tolbar **************************************/KToolBar::KToolBar(QWidget *parent, const char *name, int _item_size) : QFrame( parent, name ){ item_size = _item_size; fixed_size = (item_size > 0); if (!fixed_size) item_size = 26; init(); Parent = parent; // our father max_width=-1; title = 0; mouseEntered=false; localResize=false;}void KToolBar::ContextCallback( int ){ int i = context->exec(); switch ( i ) { case CONTEXT_LEFT: setBarPos( Left ); break; case CONTEXT_RIGHT: setBarPos( Right ); break; case CONTEXT_TOP: setBarPos( Top ); break; case CONTEXT_BOTTOM: setBarPos( Bottom ); break; case CONTEXT_FLOAT: if (position == Floating) setBarPos (lastPosition); else { setBarPos( Floating ); move(QCursor::pos()); show(); } break; } mouseEntered=false; repaint(false);}void KToolBar::init(){ context = new QPopupMenu( 0, "context" ); context->insertItem( klocale->translate("Left"), CONTEXT_LEFT ); context->insertItem( klocale->translate("Top"), CONTEXT_TOP ); context->insertItem( klocale->translate("Right"), CONTEXT_RIGHT ); context->insertItem( klocale->translate("Bottom"), CONTEXT_BOTTOM ); context->insertItem( klocale->translate("Floating"), CONTEXT_FLOAT );// connect( context, SIGNAL( activated( int ) ), this,// SLOT( ContextCallback( int ) ) ); //MD (17-9-97) Toolbar full width by default fullWidth=true; position = Top; moving = true; icon_text = 0; highlight = 0; setFrameStyle(NoFrame); setLineWidth( 1 ); transparent = false; resize( width(), item_size ); items.setAutoDelete(true); enableFloating (true); // To make touch-sensitive handle - sven 040198 setMouseTracking(true); haveAutoSized=false; // do we have autosized item - sven 220198 connect (kapp, SIGNAL(appearanceChanged()), this, SLOT(slotReadConfig())); slotReadConfig(); mgr =0;}void KToolBar::slotReadConfig(){ int tsize; int _highlight; int icontext; bool _transparent; KConfig *config = kapp->getConfig(); QString group = config->group(); config->setGroup("Toolbar style"); icontext=config->readNumEntry("IconText", 0); tsize=config->readNumEntry("Size", 26); _highlight =config->readNumEntry("Highlighting", 1); _transparent = config->readBoolEntry("TransparentMoving", true); config->setGroup(group); bool doUpdate=false; if (!fixed_size && tsize != item_size && tsize>20) { item_size = tsize; doUpdate=true; } if (icontext != icon_text) { if (icontext==3) item_size = (item_size<40)?40:item_size; icon_text=icontext; doUpdate=true; } if (_highlight != highlight) { highlight = _highlight; doUpdate=true; } if (_transparent != transparent) { transparent= _transparent; doUpdate=false; } if (doUpdate) emit modechange(); // tell buttons what happened if (isVisible ()) emit moved (position);}void KToolBar::drawContents ( QPainter *){}KToolBar::~KToolBar(){// what is that?! we do not need to recreate before// destroying.... (Matthias) // OK (sven) // if (position == Floating)// {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -