QSize PopupMenuEditor::contentsSize() { QRect textRect = fontMetrics().boundingRect( addSeparator.action()->menuText() ); textWidth = textRect.width(); accelWidth = textRect.height(); // default size iconWidth = textRect.height(); int w = 0; int h = itemHeight( &addItem ) + itemHeight( &addSeparator ); PopupMenuEditorItem * i = itemList.first(); QAction * a = 0; while ( i ) { if ( i->isVisible() ) { if ( !i->isSeparator() ) { a = i->action(); w = a->iconSet().pixmap( QIconSet::Automatic, QIconSet::Normal ).rect().width() + borderSize; // padding iconWidth = QMAX( iconWidth, w ); w = fontMetrics().boundingRect( a->menuText() ).width(); textWidth = QMAX( textWidth, w ); w = fontMetrics().boundingRect( a->accel() ).width() + 2; // added padding? accelWidth = QMAX( accelWidth, w ); } h += itemHeight( i ); } i = itemList.next(); } int width = iconWidth + textWidth + borderSize * 3 + accelWidth + arrowWidth; return QSize( width, h ); }
int PopupMenuEditor::itemHeight( const PopupMenuEditorItem * item ) const { if ( !item || ( item && !item->isVisible() ) ) return 0; if ( item->isSeparator() ) return 4; // FIXME: hardcoded ( get from styles )r int padding = + borderSize * 6; QAction * a = item->action(); int h = a->iconSet().pixmap( QIconSet::Automatic, QIconSet::Normal ).rect().height(); h = QMAX( h, fontMetrics().boundingRect( a->menuText() ).height() + padding ); h = QMAX( h, fontMetrics().boundingRect( a->accel() ).height() + padding ); return h; }