Changeset 42558 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Aug 2, 2012 8:55:58 PM (13 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp
r42529 r42558 316 316 } 317 317 318 /* static */ 319 int UIGChooserItem::textWidth(const QFont &font, int iCount) 320 { 321 /* Return text width: */ 322 QFontMetrics fm(font); 323 QString strString; 324 strString.fill('_', iCount); 325 return fm.width(strString); 326 } 327 328 /* static */ 329 QString UIGChooserItem::compressText(const QFont &font, QString strText, int iWidth) 330 { 331 /* Check if passed text feats maximum width: */ 332 QFontMetrics fm(font); 333 if (fm.width(strText) <= iWidth) 334 return strText; 335 336 /* Truncate otherwise: */ 337 QString strEllipsis = QString("..."); 338 int iEllipsisWidth = fm.width(strEllipsis + " "); 339 while (!strText.isEmpty() && fm.width(strText) + iEllipsisWidth > iWidth) 340 strText.truncate(strText.size() - 1); 341 return strText + strEllipsis; 342 } 343 318 344 UIGChooserItemMimeData::UIGChooserItemMimeData(UIGChooserItem *pItem) 319 345 : m_pItem(pItem) -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h
r42529 r42558 138 138 void setGradient(int iGradient) { m_iGradient = iGradient; update(); } 139 139 140 /* Helpers: Text compression stuff: */ 141 static int textWidth(const QFont &font, int iCount); 142 static QString compressText(const QFont &font, QString strText, int iWidth); 143 140 144 private: 141 145 -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
r42529 r42558 271 271 } 272 272 /* Texts: */ 273 case GroupItemData_Name: return m_strName; 273 case GroupItemData_Name: 274 { 275 /* Prepare variables: */ 276 int iHorizontalMargin = data(GroupItemData_HorizonalMargin).toInt(); 277 int iButtonWidth = data(GroupItemData_ButtonSize).toSize().width(); 278 int iMinorSpacing = data(GroupItemData_MinorSpacing).toInt(); 279 int iGroupPixmapWidth = data(GroupItemData_GroupPixmapSize).toSize().width(); 280 int iMachinePixmapWidth = data(GroupItemData_MachinePixmapSize).toSize().width(); 281 int iGroupCountTextWidth = data(GroupItemData_GroupCountTextSize).toSize().width(); 282 int iMachineCountTextWidth = data(GroupItemData_MachineCountTextSize).toSize().width(); 283 int iMaximumWidth = (int)geometry().width() - iHorizontalMargin - 284 iButtonWidth - iMinorSpacing - 285 iHorizontalMargin - 286 iGroupPixmapWidth - iMinorSpacing - 287 iMachinePixmapWidth - iMinorSpacing - 288 iGroupCountTextWidth - iMinorSpacing - 289 iMachineCountTextWidth; 290 QString strCompressedName = compressText(data(GroupItemData_NameFont).value<QFont>(), 291 m_strName, iMaximumWidth); 292 return strCompressedName; 293 } 274 294 case GroupItemData_GroupCountText: return QString::number(m_groupItems.size()); 275 295 case GroupItemData_MachineCountText: return QString::number(m_machineItems.size()); 276 296 /* Sizes: */ 277 297 case GroupItemData_ButtonSize: return m_pButton ? m_pButton->minimumSizeHint() : QSizeF(0, 0); 298 case GroupItemData_MinimumNameSize: 299 { 300 if (isRoot()) 301 return QSizeF(0, 0); 302 QFont font = data(GroupItemData_NameFont).value<QFont>(); 303 QFontMetrics fm(font); 304 int iMaximumTextWidth = textWidth(font, 20); 305 QString strCompressedName = compressText(font, m_strName, iMaximumTextWidth); 306 return QSize(fm.width(strCompressedName), fm.height()); 307 } 278 308 case GroupItemData_NameSize: 279 309 { … … 313 343 int iMinorSpacing = data(GroupItemData_MinorSpacing).toInt(); 314 344 QSize buttonSize = data(GroupItemData_ButtonSize).toSize(); 315 QSize nameSize = data(GroupItemData_NameSize).toSize();345 QSize minimumNameSize = data(GroupItemData_MinimumNameSize).toSize(); 316 346 QSize groupPixmapSize = data(GroupItemData_GroupPixmapSize).toSize(); 317 347 QSize machinePixmapSize = data(GroupItemData_MachinePixmapSize).toSize(); … … 328 358 2 /* internal QLineEdit margin from Qt sources */ + 329 359 1 /* internal QLineEdit align shifting from Qt sources */ + 330 /* Name width: */331 nameSize.width() +360 /* Minimum name width: */ 361 minimumNameSize.width() + 332 362 /* Spacing between name and info: */ 333 363 iMajorSpacing + … … 342 372 QList<int> heights; 343 373 heights << buttonSize.height() 344 << nameSize.height()374 << minimumNameSize.height() 345 375 << groupPixmapSize.height() << machinePixmapSize.height() 346 376 << groupCountTextSize.height() << machineCountTextSize.height(); … … 1058 1088 /* Prepare variables: */ 1059 1089 QRect fullRect = pOption->rect; 1060 int iMinorSpacing = data(GroupItemData_MinorSpacing).toInt();1061 1090 QSize groupPixmapSize = data(GroupItemData_GroupPixmapSize).toSize(); 1062 1091 QSize machinePixmapSize = data(GroupItemData_MachinePixmapSize).toSize(); -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
r42529 r42558 96 96 /* Sizes: */ 97 97 GroupItemData_ButtonSize, 98 GroupItemData_MinimumNameSize, 98 99 GroupItemData_NameSize, 99 100 GroupItemData_NameEditorSize, -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp
r42529 r42558 148 148 } 149 149 /* Texts: */ 150 case MachineItemData_Name: return name(); 151 case MachineItemData_SnapshotName: return snapshotName(); 150 case MachineItemData_Name: 151 { 152 /* Prepare variables: */ 153 int iMaximumWidth = data(MachineItemData_FirstRowMaximumWidth).toInt(); 154 /* Calculate name width part: */ 155 QFont nameFont = data(MachineItemData_NameFont).value<QFont>(); 156 QFont snapshotNameFont = data(MachineItemData_SnapshotNameFont).value<QFont>(); 157 QFontMetrics nameMetrics(nameFont); 158 QFontMetrics snapshotNameMetrics(snapshotNameFont); 159 qreal dNameWidth = nameMetrics.width(name()); 160 qreal dSnapshotNameWidth = snapshotNameMetrics.width(snapshotName()); 161 qreal dNameRatio = dNameWidth / (dNameWidth + dSnapshotNameWidth); 162 int iNamePart = iMaximumWidth * dNameRatio; 163 /* Compress name to part width: */ 164 QString strCompressedName = compressText(nameFont, name(), iNamePart); 165 return strCompressedName; 166 } 167 case MachineItemData_SnapshotName: 168 { 169 /* Prepare variables: */ 170 int iMaximumWidth = data(MachineItemData_FirstRowMaximumWidth).toInt(); 171 /* Calculate name width part: */ 172 QFont nameFont = data(MachineItemData_NameFont).value<QFont>(); 173 QFont snapshotNameFont = data(MachineItemData_SnapshotNameFont).value<QFont>(); 174 QFontMetrics nameMetrics(nameFont); 175 QFontMetrics snapshotNameMetrics(snapshotNameFont); 176 qreal dNameWidth = nameMetrics.width(name()); 177 qreal dSnapshotNameWidth = snapshotNameMetrics.width(snapshotName()); 178 qreal dSnapshotNameRatio = dSnapshotNameWidth / (dNameWidth + dSnapshotNameWidth); 179 int iSnapshotNamePart = iMaximumWidth * dSnapshotNameRatio; 180 /* Compress name to part width: */ 181 QString strCompressedName = compressText(snapshotNameFont, snapshotName(), iSnapshotNamePart); 182 return strCompressedName; 183 } 152 184 case MachineItemData_StateText: return gpConverter->toString(machineState()); 153 185 /* Sizes: */ 154 186 case MachineItemData_PixmapSize: return osIcon().availableSizes().at(0); 155 187 case MachineItemData_StatePixmapSize: return machineStateIcon().availableSizes().at(0); 188 case MachineItemData_MinimumNameSize: 189 { 190 QFont font = data(MachineItemData_NameFont).value<QFont>(); 191 QFontMetrics fm(font); 192 int iMaximumTextWidth = textWidth(font, 15); 193 QString strCompressedName = compressText(font, name(), iMaximumTextWidth); 194 return QSize(fm.width(strCompressedName), fm.height()); 195 } 156 196 case MachineItemData_NameSize: 157 197 { … … 159 199 return QSize(fm.width(data(MachineItemData_Name).toString()), fm.height()); 160 200 } 201 case MachineItemData_MinimumSnapshotNameSize: 202 { 203 QFont font = data(MachineItemData_SnapshotNameFont).value<QFont>(); 204 QFontMetrics fm(font); 205 int iMaximumTextWidth = textWidth(font, 15); 206 QString strCompressedName = compressText(font, snapshotName(), iMaximumTextWidth); 207 return QSize(fm.width(strCompressedName), fm.height()); 208 } 161 209 case MachineItemData_SnapshotNameSize: 162 210 { 163 211 QFontMetrics fm(data(MachineItemData_SnapshotNameFont).value<QFont>()); 164 212 return QSize(fm.width(QString("(%1)").arg(data(MachineItemData_SnapshotName).toString())), fm.height()); 213 } 214 case MachineItemData_FirstRowMaximumWidth: 215 { 216 /* Prepare variables: */ 217 int iMargin = data(MachineItemData_Margin).toInt(); 218 int iPixmapWidth = data(MachineItemData_PixmapSize).toSize().width(); 219 int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt(); 220 int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width(); 221 int iMaximumWidth = (int)geometry().width() - iMargin - 222 iPixmapWidth - iMachineItemMajorSpacing - 223 iToolBarWidth - iMachineItemMajorSpacing; 224 return iMaximumWidth; 165 225 } 166 226 case MachineItemData_StateTextSize: … … 244 304 int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt(); 245 305 int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt(); 246 QSize machinePixmapSize = data(MachineItemData_PixmapSize).toSize();247 QSize machineNameSize = data(MachineItemData_NameSize).toSize();248 QSize snapshotNameSize = data(MachineItemData_SnapshotNameSize).toSize();249 QSize machineStatePixmapSize = data(MachineItemData_StatePixmapSize).toSize();250 QSize machineStateTextSize = data(MachineItemData_StateTextSize).toSize();251 QSize toolBarSize = data(MachineItemData_ToolBarSize).toSize();306 int iMachinePixmapWidth = data(MachineItemData_PixmapSize).toSize().width(); 307 int iMinimumMachineNameWidth = data(MachineItemData_MinimumNameSize).toSize().width(); 308 int iMinimumSnapshotNameWidth = data(MachineItemData_MinimumSnapshotNameSize).toSize().width(); 309 int iMachineStatePixmapWidth = data(MachineItemData_StatePixmapSize).toSize().width(); 310 int iMachineStateTextWidth = data(MachineItemData_StateTextSize).toSize().width(); 311 int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width(); 252 312 253 313 /* Calculating proposed width: */ … … 258 318 iProposedWidth += iMachineItemMargin; 259 319 /* And machine item content to take into account: */ 260 int iFirstLineWidth = machineNameSize.width()+320 int iFirstLineWidth = iMinimumMachineNameWidth + 261 321 iMachineItemMinorSpacing + 262 snapshotNameSize.width();263 int iSecondLineWidth = machineStatePixmapSize.width()+322 iMinimumSnapshotNameWidth; 323 int iSecondLineWidth = iMachineStatePixmapWidth + 264 324 iMachineItemMinorSpacing + 265 machineStateTextSize.width();325 iMachineStateTextWidth; 266 326 int iSecondColumnWidth = qMax(iFirstLineWidth, iSecondLineWidth); 267 int iMachineItemWidth = machinePixmapSize.width()+327 int iMachineItemWidth = iMachinePixmapWidth + 268 328 iMachineItemMajorSpacing + 269 329 iSecondColumnWidth + 270 330 iMachineItemMajorSpacing + 271 toolBarSize.width()+ 1;331 iToolBarWidth + 1; 272 332 iProposedWidth += iMachineItemWidth; 273 333 … … 281 341 int iMachineItemMargin = data(MachineItemData_Margin).toInt(); 282 342 int iMachineItemTextSpacing = data(MachineItemData_TextSpacing).toInt(); 283 QSize machinePixmapSize = data(MachineItemData_PixmapSize).toSize();284 QSize machineNameSize = data(MachineItemData_NameSize).toSize();285 QSize snapshotNameSize = data(MachineItemData_SnapshotNameSize).toSize();286 QSize machineStatePixmapSize = data(MachineItemData_StatePixmapSize).toSize();287 QSize machineStateTextSize = data(MachineItemData_StateTextSize).toSize();288 QSize toolBarSize = data(MachineItemData_ToolBarSize).toSize();343 int iMachinePixmapHeight = data(MachineItemData_PixmapSize).toSize().height(); 344 int iMachineNameHeight = data(MachineItemData_NameSize).toSize().height(); 345 int iSnapshotNameHeight = data(MachineItemData_SnapshotNameSize).toSize().height(); 346 int iMachineStatePixmapHeight = data(MachineItemData_StatePixmapSize).toSize().height(); 347 int iMachineStateTextHeight = data(MachineItemData_StateTextSize).toSize().height(); 348 int iToolBarHeight = data(MachineItemData_ToolBarSize).toSize().height(); 289 349 290 350 /* Calculating proposed height: */ … … 294 354 iProposedHeight += 2 * iMachineItemMargin; 295 355 /* And machine item content to take into account: */ 296 int iFirstLineHeight = qMax( machineNameSize.height(), snapshotNameSize.height());297 int iSecondLineHeight = qMax( machineStatePixmapSize.height(), machineStateTextSize.height());356 int iFirstLineHeight = qMax(iMachineNameHeight, iSnapshotNameHeight); 357 int iSecondLineHeight = qMax(iMachineStatePixmapHeight, iMachineStateTextHeight); 298 358 int iSecondColumnHeight = iFirstLineHeight + 299 359 iMachineItemTextSpacing + 300 360 iSecondLineHeight; 301 361 QList<int> heights; 302 heights << machinePixmapSize.height()<< iSecondColumnHeight303 << ( toolBarSize.height()- 2 * iMachineItemMargin + 2);362 heights << iMachinePixmapHeight << iSecondColumnHeight 363 << (iToolBarHeight - 2 * iMachineItemMargin + 2); 304 364 int iMaxHeight = 0; 305 365 foreach (int iHeight, heights) -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h
r42529 r42558 80 80 MachineItemData_PixmapSize, 81 81 MachineItemData_StatePixmapSize, 82 MachineItemData_MinimumNameSize, 82 83 MachineItemData_NameSize, 84 MachineItemData_MinimumSnapshotNameSize, 83 85 MachineItemData_SnapshotNameSize, 86 MachineItemData_FirstRowMaximumWidth, 84 87 MachineItemData_StateTextSize, 85 88 MachineItemData_ToolBarSize
Note:
See TracChangeset
for help on using the changeset viewer.