[Uml-devel] [Bug 66461] Widgets (classes, enum...) are not wide enough
Oliver Kellogg
okellogg at users.sourceforge.net
Sat Aug 27 12:42:09 UTC 2005
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=66461
okellogg users sourceforge net changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
Resolution| |FIXED
------- Additional Comments From okellogg users sourceforge net 2005-08-27 21:40 -------
SVN commit 454047 by okellogg:
BUG:66461 - Comment #11 From Peter Soetens 2005-08-25 17:09
> This patch fixes two bugs (trunk, today):
>
> After digging trough the classifier code, I found that the QFontMetric was not
> correctly used to measure _italic_ text, such as abstract classes/functions.
> The old method used fnt.width("string"), which returns the minimal width after
> which you may place the next character. You needed to use
> fnt.size(0,"string").width(), which returns the full bounding box (QBox) and
> which width is the actual width we need.
>
> Next, when templates were used, the template-added pixelwidth was added at the
> wrong place, discarding it actually.
M +2 -2 ChangeLog
M +20 -17 umbrello/classifierwidget.cpp
--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #454046:454047
@ -9,8 +9,8 @
* Automatic Diagram Layout (67059, not yet closed)
* Bugs fixed / wishes implemented (see http://bugs.kde.org)
- 57588 58809 67719 72016 79433 87252 88117 97162 105564 108223
-109591 109636 110216 110231 110379 111470 111502
+ 57588 58809 66461 67719 72016 79433 87252 88117 97162 105564
+108223 109591 109636 110216 110231 110379 111470 111502
Version 1.4.2 (maintenance release)
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/classifierwidget.cpp #454046:454047
@ -316,23 +316,15 @
const QFontMetrics &fm = getFontMetrics(UMLWidget::FT_NORMAL);
const int fontHeight = fm.lineSpacing();
+ // width is the width of the longest 'word'
int width = 0, height = 0;
- // consider template box
- QSize templatesBoxSize = calculateTemplatesBoxSize();
- if (templatesBoxSize.width() != 0) {
- width += templatesBoxSize.width() / 2;
- }
- if (templatesBoxSize.height() != 0) {
- height += templatesBoxSize.height() - MARGIN;
- }
-
// consider stereotype
if (m_bShowStereotype && !m_pObject->getStereotype(false).isEmpty()) {
height += fontHeight;
// ... width
const QFontMetrics &bfm = UMLWidget::getFontMetrics(UMLWidget::FT_BOLD);
- const int stereoWidth = bfm.width(m_pObject->getStereotype());
+ const int stereoWidth = bfm.size(0,m_pObject->getStereotype()).width();
if (stereoWidth > width)
width = stereoWidth;
}
@ -347,7 +339,7 @
displayedName = m_pObject->getName();
const UMLWidget::FontType nft = (m_pObject->getAbstract() ? FT_BOLD_ITALIC : FT_BOLD);
//const int nameWidth = getFontMetrics(nft).boundingRect(displayName).width();
- const int nameWidth = UMLWidget::getFontMetrics(nft).width(displayedName);
+ const int nameWidth = UMLWidget::getFontMetrics(nft).size(0,displayedName).width();
if (nameWidth > width)
width = nameWidth;
@ -362,7 +354,7 @
for (UMLClassifierListItem *a = list.first(); a; a = list.next()) {
if (m_bShowPublicOnly && a->getScope() != Uml::Public)
continue;
- const int attWidth = fm.width(a->toString(m_ShowAttSigs));
+ const int attWidth = fm.size(0,a->toString(m_ShowAttSigs)).width();
if (attWidth > width)
width = attWidth;
}
@ -382,12 +374,23 @
const QString displayedOp = op->toString(m_ShowOpSigs);
UMLWidget::FontType oft;
oft = (op->getAbstract() ? UMLWidget::FT_ITALIC : UMLWidget::FT_BOLD);
- const int w = UMLWidget::getFontMetrics(oft).width(displayedOp);
+ const int w = UMLWidget::getFontMetrics(oft).size(0,displayedOp).width();
if (w > width)
width = w;
}
}
+ // consider template box _as last_ !
+ QSize templatesBoxSize = calculateTemplatesBoxSize();
+ if (templatesBoxSize.width() != 0) {
+ // add width to largest 'word'
+ width += templatesBoxSize.width() / 2;
+ }
+ if (templatesBoxSize.height() != 0) {
+ height += templatesBoxSize.height() - MARGIN;
+ }
+
+
// allow for height margin
if (!m_bShowOperations && !m_bShowAttributes && !m_bShowStereotype) {
height += MARGIN * 2;
@ -500,7 +503,7 @
height = count * fm.lineSpacing() + (MARGIN*2);
for (UMLTemplate *t = list.first(); t; t = list.next()) {
- int textWidth = fm.width( t->toString() );
+ int textWidth = fm.size(0, t->toString() ).width();
if (textWidth > width)
width = textWidth;
}
@ -578,7 +581,7 @
int y = offsetY + MARGIN;
for ( UMLTemplate *t = tlist.first(); t; t = tlist.next() ) {
QString text = t->toString();
- p.drawText(x, y, fm.width(text), fontHeight, AlignVCenter, text);
+ p.drawText(x, y, fm.size(0,text).width(), fontHeight, AlignVCenter, text);
y += fontHeight;
}
}
@ -689,7 +692,7 @
} else {
displayedName = m_pObject->getName();
}
- const int nameWidth = fm.width(displayedName);
+ const int nameWidth = fm.size(0,displayedName).width();
if (nameWidth > width)
width = nameWidth;
width += MARGIN * 2;
@ -711,7 +714,7 @
f.setUnderline( obj->getStatic() );
p.setFont( f );
QFontMetrics fontMetrics(f);
- p.drawText(x, y, fontMetrics.width(text), fontHeight, AlignVCenter, text);
+ p.drawText(x, y, fontMetrics.size(0,text).width(), fontHeight, AlignVCenter, text);
f.setItalic(false);
f.setUnderline(false);
p.setFont(f);
More information about the umbrello-devel
mailing list