Changeset 43985 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Nov 28, 2012 2:43:17 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 82359
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
r43984 r43985 42 42 , m_iMinimumHeaderWidth(0) 43 43 , m_iMinimumHeaderHeight(0) 44 , m_iMinimumTextWidth(0) 45 , m_iMinimumTextHeight(0) 44 46 , m_fClosed(!fOpened) 45 47 , m_pButton(0) … … 94 96 /* Prepare variables: */ 95 97 int iMargin = data(ElementData_Margin).toInt(); 96 int iTextWidth = data(ElementData_TextWidth).toInt();97 98 int iProposedWidth = 0; 98 99 99 100 /* Maximum width: */ 100 iProposedWidth = qMax(m_iMinimumHeaderWidth, iTextWidth);101 iProposedWidth = qMax(m_iMinimumHeaderWidth, m_iMinimumTextWidth); 101 102 102 103 /* And 4 margins: 2 left and 2 right: */ … … 159 160 case ElementData_Margin: return 5; 160 161 case ElementData_Spacing: return 10; 161 case ElementData_TextWidth:162 {163 /* Prepare variables: */164 int iSpacing = data(ElementData_Spacing).toInt();165 int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt();166 QFontMetrics fm(m_textFont, model()->paintDevice());167 168 /* Search for the maximum line widths: */169 int iMaximumLeftLineWidth = 0;170 int iMaximumRightLineWidth = 0;171 bool fSingleColumnText = true;172 foreach (const UITextTableLine line, m_text)173 {174 bool fRightColumnPresent = !line.second.isEmpty();175 if (fRightColumnPresent)176 fSingleColumnText = false;177 QString strLeftLine = fRightColumnPresent ? line.first + ":" : line.first;178 QString strRightLine = line.second;179 iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strLeftLine));180 iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strRightLine));181 }182 iMaximumLeftLineWidth += 1;183 iMaximumRightLineWidth += 1;184 185 /* Calculate minimum text width: */186 int iMinimumTextWidth = 0;187 if (fSingleColumnText)188 {189 /* Take into account only left column: */190 int iMinimumLeftColumnWidth = qMin(iMaximumLeftLineWidth, iMinimumTextColumnWidth);191 iMinimumTextWidth = iMinimumLeftColumnWidth;192 }193 else194 {195 /* Take into account both columns, but wrap only right one: */196 int iMinimumLeftColumnWidth = iMaximumLeftLineWidth;197 int iMinimumRightColumnWidth = qMin(iMaximumRightLineWidth, iMinimumTextColumnWidth);198 iMinimumTextWidth = iMinimumLeftColumnWidth + iSpacing + iMinimumRightColumnWidth;199 }200 201 /* Return result: */202 return iMinimumTextWidth;203 }204 case ElementData_TextHeight:205 {206 /* Prepare variables: */207 int iMargin = data(ElementData_Margin).toInt();208 int iSpacing = data(ElementData_Spacing).toInt();209 int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt();210 int iMaximumTextWidth = (int)geometry().width() - 3 * iMargin - iSpacing;211 QPaintDevice *pPaintDevice = model()->paintDevice();212 QFontMetrics fm(m_textFont, pPaintDevice);213 214 /* Search for the maximum line widths: */215 int iMaximumLeftLineWidth = 0;216 int iMaximumRightLineWidth = 0;217 bool fSingleColumnText = true;218 foreach (const UITextTableLine line, m_text)219 {220 bool fRightColumnPresent = !line.second.isEmpty();221 if (fRightColumnPresent)222 fSingleColumnText = false;223 QString strFirstLine = fRightColumnPresent ? line.first + ":" : line.first;224 QString strSecondLine = line.second;225 iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strFirstLine));226 iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strSecondLine));227 }228 iMaximumLeftLineWidth += 1;229 iMaximumRightLineWidth += 1;230 231 /* Calculate column widths: */232 int iLeftColumnWidth = 0;233 int iRightColumnWidth = 0;234 if (fSingleColumnText)235 {236 /* Take into account only left column: */237 iLeftColumnWidth = qMax(iMinimumTextColumnWidth, iMaximumTextWidth);238 }239 else240 {241 /* Take into account both columns, but wrap only right one: */242 iLeftColumnWidth = iMaximumLeftLineWidth;243 iRightColumnWidth = iMaximumTextWidth - iLeftColumnWidth;244 }245 246 /* For each the line: */247 int iSummaryTextHeight = 0;248 foreach (const UITextTableLine line, m_text)249 {250 /* First layout: */251 int iLeftColumnHeight = 0;252 if (!line.first.isEmpty())253 {254 bool fRightColumnPresent = !line.second.isEmpty();255 QTextLayout *pTextLayout = prepareTextLayout(m_textFont, pPaintDevice,256 fRightColumnPresent ? line.first + ":" : line.first,257 iLeftColumnWidth, iLeftColumnHeight);258 delete pTextLayout;259 }260 261 /* Second layout: */262 int iRightColumnHeight = 0;263 if (!line.second.isEmpty())264 {265 QTextLayout *pTextLayout = prepareTextLayout(m_textFont, pPaintDevice, line.second,266 iRightColumnWidth, iRightColumnHeight);267 delete pTextLayout;268 }269 270 /* Append summary text height: */271 iSummaryTextHeight += qMax(iLeftColumnHeight, iRightColumnHeight);272 }273 274 /* Return result: */275 return iSummaryTextHeight;276 }277 162 case ElementData_MinimumTextColumnWidth: return 100; 278 163 /* Default: */ … … 298 183 m_iMinimumHeaderHeight = qMax(m_pixmapSize.height(), m_nameSize.height()); 299 184 m_iMinimumHeaderHeight = qMax(m_iMinimumHeaderHeight, m_buttonSize.height()); 185 } 186 187 void UIGDetailsElement::updateMinimumTextWidth() 188 { 189 /* Prepare variables: */ 190 int iSpacing = data(ElementData_Spacing).toInt(); 191 int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt(); 192 QFontMetrics fm(m_textFont, model()->paintDevice()); 193 194 /* Search for the maximum line widths: */ 195 int iMaximumLeftLineWidth = 0; 196 int iMaximumRightLineWidth = 0; 197 bool fSingleColumnText = true; 198 foreach (const UITextTableLine line, m_text) 199 { 200 bool fRightColumnPresent = !line.second.isEmpty(); 201 if (fRightColumnPresent) 202 fSingleColumnText = false; 203 QString strLeftLine = fRightColumnPresent ? line.first + ":" : line.first; 204 QString strRightLine = line.second; 205 iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strLeftLine)); 206 iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strRightLine)); 207 } 208 iMaximumLeftLineWidth += 1; 209 iMaximumRightLineWidth += 1; 210 211 /* Calculate minimum-text-width: */ 212 m_iMinimumTextWidth = 0; 213 if (fSingleColumnText) 214 { 215 /* Take into account only left column: */ 216 int iMinimumLeftColumnWidth = qMin(iMaximumLeftLineWidth, iMinimumTextColumnWidth); 217 m_iMinimumTextWidth = iMinimumLeftColumnWidth; 218 } 219 else 220 { 221 /* Take into account both columns, but wrap only right one: */ 222 int iMinimumLeftColumnWidth = iMaximumLeftLineWidth; 223 int iMinimumRightColumnWidth = qMin(iMaximumRightLineWidth, iMinimumTextColumnWidth); 224 m_iMinimumTextWidth = iMinimumLeftColumnWidth + iSpacing + iMinimumRightColumnWidth; 225 } 226 } 227 228 void UIGDetailsElement::updateMinimumTextHeight() 229 { 230 /* Prepare variables: */ 231 int iMargin = data(ElementData_Margin).toInt(); 232 int iSpacing = data(ElementData_Spacing).toInt(); 233 int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt(); 234 int iMaximumTextWidth = (int)geometry().width() - 3 * iMargin - iSpacing; 235 QPaintDevice *pPaintDevice = model()->paintDevice(); 236 QFontMetrics fm(m_textFont, pPaintDevice); 237 238 /* Search for the maximum line widths: */ 239 int iMaximumLeftLineWidth = 0; 240 int iMaximumRightLineWidth = 0; 241 bool fSingleColumnText = true; 242 foreach (const UITextTableLine line, m_text) 243 { 244 bool fRightColumnPresent = !line.second.isEmpty(); 245 if (fRightColumnPresent) 246 fSingleColumnText = false; 247 QString strFirstLine = fRightColumnPresent ? line.first + ":" : line.first; 248 QString strSecondLine = line.second; 249 iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strFirstLine)); 250 iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strSecondLine)); 251 } 252 iMaximumLeftLineWidth += 1; 253 iMaximumRightLineWidth += 1; 254 255 /* Calculate column widths: */ 256 int iLeftColumnWidth = 0; 257 int iRightColumnWidth = 0; 258 if (fSingleColumnText) 259 { 260 /* Take into account only left column: */ 261 iLeftColumnWidth = qMax(iMinimumTextColumnWidth, iMaximumTextWidth); 262 } 263 else 264 { 265 /* Take into account both columns, but wrap only right one: */ 266 iLeftColumnWidth = iMaximumLeftLineWidth; 267 iRightColumnWidth = iMaximumTextWidth - iLeftColumnWidth; 268 } 269 270 /* Calculate minimum-text-height: */ 271 m_iMinimumTextHeight = 0; 272 foreach (const UITextTableLine line, m_text) 273 { 274 /* First layout: */ 275 int iLeftColumnHeight = 0; 276 if (!line.first.isEmpty()) 277 { 278 bool fRightColumnPresent = !line.second.isEmpty(); 279 QTextLayout *pTextLayout = prepareTextLayout(m_textFont, pPaintDevice, 280 fRightColumnPresent ? line.first + ":" : line.first, 281 iLeftColumnWidth, iLeftColumnHeight); 282 delete pTextLayout; 283 } 284 285 /* Second layout: */ 286 int iRightColumnHeight = 0; 287 if (!line.second.isEmpty()) 288 { 289 QTextLayout *pTextLayout = prepareTextLayout(m_textFont, pPaintDevice, line.second, 290 iRightColumnWidth, iRightColumnHeight); 291 delete pTextLayout; 292 } 293 294 /* Append summary text height: */ 295 m_iMinimumTextHeight += qMax(iLeftColumnHeight, iRightColumnHeight); 296 } 300 297 } 301 298 … … 344 341 m_text << UITextTableLine(strLeftLine, strRightLine); 345 342 } 343 344 /* Update linked values: */ 345 updateMinimumTextWidth(); 346 updateMinimumTextHeight(); 346 347 } 347 348 … … 463 464 /* Prepare variables: */ 464 465 int iMargin = data(ElementData_Margin).toInt(); 465 int iTextHeight = data(ElementData_TextHeight).toInt();466 466 int iProposedHeight = 0; 467 467 … … 477 477 /* Add text height: */ 478 478 if (!m_text.isEmpty()) 479 iProposedHeight += 2 * iMargin + iTextHeight;479 iProposedHeight += 2 * iMargin + m_iMinimumTextHeight; 480 480 } 481 481 -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
r43984 r43985 109 109 ElementData_Margin, 110 110 ElementData_Spacing, 111 /* Sizes: */112 ElementData_TextWidth,113 ElementData_TextHeight,114 111 ElementData_MinimumTextColumnWidth 115 112 }; … … 121 118 void updateMinimumHeaderWidth(); 122 119 void updateMinimumHeaderHeight(); 120 void updateMinimumTextWidth(); 121 void updateMinimumTextHeight(); 123 122 124 123 /* API: Icon stuff: */ … … 204 203 int m_iMinimumHeaderWidth; 205 204 int m_iMinimumHeaderHeight; 205 int m_iMinimumTextWidth; 206 int m_iMinimumTextHeight; 206 207 207 208 /* Variables: Toggle stuff: */ … … 222 223 int m_iHighlightDarkness; 223 224 int m_iAnimationDarkness; 225 226 /* Friends: */ 227 friend class UIGDetailsSet; 224 228 }; 225 229 -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp
r43983 r43985 292 292 pElement->resize(iWidth, iHeight); 293 293 /* Update minimum height hint: */ 294 pElement->updateMinimumTextHeight(); 294 295 pItem->updateSizeHint(); 295 296 /* Resize to required height: */
Note:
See TracChangeset
for help on using the changeset viewer.