Changeset 43841 in vbox
- Timestamp:
- Nov 8, 2012 2:05:46 PM (12 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
r43809 r43841 91 91 m_pHighlightMachine->start(); 92 92 } 93 94 /* Geometry-change handler: */ 95 connect(this, SIGNAL(geometryChanged()), this, SLOT(sltHandleGeometryChange())); 93 96 } 94 97 -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h
r43809 r43841 132 132 /* API: Toggle stuff: */ 133 133 bool isTemporary() const; 134 135 protected slots: 136 137 /* Handler: Geometry change stuff: */ 138 virtual void sltHandleGeometryChange() = 0; 134 139 135 140 protected: … … 150 155 void dropEvent(QGraphicsSceneDragDropEvent *pEvent); 151 156 152 /* Helper: Recache stuff: */157 /* Helper: Update stuff: */ 153 158 virtual void handleRootStatusChange() {} 159 void setPreviousGeometry(const QRectF &previousGeometry) { m_previousGeometry = previousGeometry; } 160 const QRectF& previousGeometry() const { return m_previousGeometry; } 154 161 155 162 /* Static paint stuff: */ … … 187 194 bool m_fTemporary; 188 195 UIGChooserItem *m_pParent; 196 QRectF m_previousGeometry; 189 197 DragToken m_dragTokenPlace; 190 198 -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
r43829 r43841 257 257 258 258 /* Should we update visible name? */ 259 if ( m_previousGeometry.width() != newGeometry.width())259 if (previousGeometry().width() != newGeometry.width()) 260 260 updateVisibleName(); 261 261 262 262 /* Remember the new geometry: */ 263 m_previousGeometry = newGeometry;263 setPreviousGeometry(newGeometry); 264 264 } 265 265 … … 413 413 m_machinesPixmap = QPixmap(":/machine_16px.png"); 414 414 415 /* Geometry-change handler: */416 connect(this, SIGNAL(geometryChanged()), this, SLOT(sltHandleGeometryChange()));417 418 415 /* Items except roots: */ 419 416 if (!isRoot()) -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
r43825 r43841 209 209 int m_iBlackoutDarkness; 210 210 /* Cached values: */ 211 QRectF m_previousGeometry;212 211 QString m_strVisibleName; 213 212 QSize m_headerSize; -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp
r43830 r43841 55 55 setZValue(parentItem()->zValue() + 1); 56 56 57 /* Init: */ 58 updatePixmaps(); 59 updateName(); 60 updateSnapshotName(); 61 57 62 /* Translate finally: */ 58 63 retranslateUi(); … … 72 77 parentItem()->addItem(this, iPosition); 73 78 setZValue(parentItem()->zValue() + 1); 79 80 /* Init: */ 81 updatePixmaps(); 82 updateName(); 83 updateSnapshotName(); 74 84 75 85 /* Translate finally: */ … … 168 178 } 169 179 180 void UIGChooserItemMachine::sltHandleGeometryChange() 181 { 182 /* What is the new geometry? */ 183 QRectF newGeometry = geometry(); 184 185 /* Should we update visible name? */ 186 if (previousGeometry().width() != newGeometry.width()) 187 updateFirstRowMaximumWidth(); 188 189 /* Remember the new geometry: */ 190 setPreviousGeometry(newGeometry); 191 } 192 170 193 QVariant UIGChooserItemMachine::data(int iKey) const 171 194 { … … 185 208 case MachineItemData_CloseButtonPixmap: return UIIconPool::iconSet(":/exit_16px.png"); 186 209 187 /* Texts: */188 case MachineItemData_Name:189 {190 return compressText(m_nameFont, model()->paintDevice(),191 name(), data(MachineItemData_MaximumNameWidth).toInt());192 }193 case MachineItemData_SnapshotName:194 {195 QPaintDevice *pPaintDevice = model()->paintDevice();196 int iBracketWidth = QFontMetrics(m_snapshotNameFont, pPaintDevice).width("()");197 QString strCompressedName = compressText(m_snapshotNameFont, pPaintDevice, snapshotName(),198 data(MachineItemData_MaximumSnapshotNameWidth).toInt() - iBracketWidth);199 return QString("(%1)").arg(strCompressedName);200 }201 case MachineItemData_StateText: return machineStateName();202 203 210 /* Sizes: */ 204 case MachineItemData_NameSize: 205 { 206 QFontMetrics fm(m_nameFont, model()->paintDevice()); 207 return QSize(fm.width(data(MachineItemData_Name).toString()) + 2, fm.height()); 208 } 209 case MachineItemData_MinimumNameWidth: 210 { 211 QPaintDevice *pPaintDevice = model()->paintDevice(); 212 return QFontMetrics(m_nameFont, pPaintDevice).width(compressText(m_nameFont, pPaintDevice, 213 name(), textWidth(m_nameFont, pPaintDevice, 15))); 214 } 215 case MachineItemData_MaximumNameWidth: 216 { 217 return data(MachineItemData_FirstRowMaximumWidth).toInt() - 218 data(MachineItemData_MinimumSnapshotNameWidth).toInt(); 219 } 220 221 case MachineItemData_SnapshotNameSize: 222 { 223 QFontMetrics fm(m_snapshotNameFont, model()->paintDevice()); 224 return QSize(fm.width(data(MachineItemData_SnapshotName).toString()) + 2, fm.height()); 225 } 226 case MachineItemData_MinimumSnapshotNameWidth: 227 { 228 if (snapshotName().isEmpty()) 229 return 0; 230 QFontMetrics fm(m_snapshotNameFont, model()->paintDevice()); 231 int iBracketWidth = fm.width("()"); 232 int iActualTextWidth = fm.width(snapshotName()); 233 int iMinimumTextWidth = fm.width("..."); 234 return iBracketWidth + qMin(iActualTextWidth, iMinimumTextWidth); 235 } 236 case MachineItemData_MaximumSnapshotNameWidth: 237 { 238 return data(MachineItemData_FirstRowMaximumWidth).toInt() - 239 data(MachineItemData_NameSize).toSize().width(); 240 } 241 242 case MachineItemData_FirstRowMaximumWidth: 243 { 244 /* Prepare variables: */ 245 int iMargin = data(MachineItemData_Margin).toInt(); 246 int iPixmapWidth = m_pixmapSize.width(); 247 int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt(); 248 int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt(); 249 int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width(); 250 int iMaximumWidth = (int)geometry().width() - 2 * iMargin - 251 iPixmapWidth - 252 iMachineItemMajorSpacing; 253 if (!snapshotName().isEmpty()) 254 iMaximumWidth -= iMachineItemMinorSpacing; 255 if (m_pToolBar) 256 iMaximumWidth -= (iToolBarWidth + iMachineItemMajorSpacing); 257 return iMaximumWidth; 258 } 259 case MachineItemData_StateTextSize: 260 { 261 QFontMetrics fm(m_stateTextFont, model()->paintDevice()); 262 return QSize(fm.width(data(MachineItemData_StateText).toString()) + 2, fm.height()); 263 } 264 case MachineItemData_ToolBarSize: 265 { 266 return m_pToolBar ? m_pToolBar->minimumSizeHint().toSize() : QSize(0, 0); 267 } 211 case MachineItemData_ToolBarSize: return m_pToolBar ? m_pToolBar->minimumSizeHint().toSize() : QSize(0, 0); 212 268 213 /* Default: */ 269 214 default: break; … … 274 219 void UIGChooserItemMachine::updatePixmaps() 275 220 { 221 /* First row update required? */ 222 bool fFirstRowUpdateRequired = false; 223 276 224 /* Update pixmap: */ 277 const QIcon &icon = osIcon(); 278 m_pixmapSize = icon.availableSizes().first(); 279 m_pixmap = icon.pixmap(m_pixmapSize); 280 /* Update state pixmap: */ 281 const QIcon &stateIcon = machineStateIcon(); 282 m_statePixmapSize = stateIcon.availableSizes().first(); 283 m_statePixmap = stateIcon.pixmap(m_statePixmapSize); 225 QIcon icon = osIcon(); 226 QSize iconSize = icon.availableSizes().first(); 227 m_pixmap = icon.pixmap(iconSize); 228 if (m_pixmapSize != iconSize) 229 { 230 m_pixmapSize = iconSize; 231 fFirstRowUpdateRequired = true; 232 } 233 234 /* Update state-pixmap: */ 235 QIcon stateIcon = machineStateIcon(); 236 QSize stateIconSize = stateIcon.availableSizes().first(); 237 m_statePixmap = stateIcon.pixmap(stateIconSize); 238 if (m_statePixmapSize != stateIconSize) 239 { 240 m_statePixmapSize = stateIconSize; 241 } 242 243 /* Update linked values: */ 244 if (fFirstRowUpdateRequired) 245 updateFirstRowMaximumWidth(); 246 } 247 248 void UIGChooserItemMachine::updateName() 249 { 250 /* Something changed? */ 251 QString strName = name(); 252 if (m_strName == strName) 253 return; 254 255 /* Remember new name: */ 256 m_strName = strName; 257 258 /* Update linked values: */ 259 updateMinimumNameWidth(); 260 updateVisibleName(); 261 } 262 263 void UIGChooserItemMachine::updateSnapshotName() 264 { 265 /* Something changed? */ 266 QString strSnapshotName = snapshotName(); 267 if (m_strSnapshotName == strSnapshotName) 268 return; 269 270 /* Remember new snapshot name: */ 271 m_strSnapshotName = strSnapshotName; 272 273 /* Update linked values: */ 274 updateMinimumSnapshotNameWidth(); 275 updateVisibleSnapshotName(); 276 } 277 278 void UIGChooserItemMachine::updateFirstRowMaximumWidth() 279 { 280 /* Prepare variables: */ 281 int iMargin = data(MachineItemData_Margin).toInt(); 282 int iPixmapWidth = m_pixmapSize.width(); 283 int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt(); 284 int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt(); 285 int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width(); 286 287 /* Calculate maximum width for the first row: */ 288 m_iFirstRowMaximumWidth = geometry().width(); 289 m_iFirstRowMaximumWidth -= iMargin; /* left margin */ 290 m_iFirstRowMaximumWidth -= iPixmapWidth; /* pixmap width */ 291 m_iFirstRowMaximumWidth -= iMachineItemMajorSpacing; /* spacing between pixmap and name */ 292 if (!snapshotName().isEmpty()) 293 m_iFirstRowMaximumWidth -= iMachineItemMinorSpacing; /* spacing between name and snapshot name */ 294 if (m_pToolBar) 295 { 296 m_iFirstRowMaximumWidth -= iMachineItemMajorSpacing; /* spacing before toolbar */ 297 m_iFirstRowMaximumWidth -= iToolBarWidth; /* toolbar width */ 298 } 299 m_iFirstRowMaximumWidth -= iMargin; /* right margin */ 300 301 /* Update linked values: */ 302 updateMaximumNameWidth(); 303 updateMaximumSnapshotNameWidth(); 304 } 305 306 void UIGChooserItemMachine::updateMinimumNameWidth() 307 { 308 /* Calculate minimum name width: */ 309 QPaintDevice *pPaintDevice = model()->paintDevice(); 310 QFontMetrics fm(m_nameFont, pPaintDevice); 311 m_iMinimumNameWidth = fm.width(compressText(m_nameFont, pPaintDevice, m_strName, textWidth(m_nameFont, pPaintDevice, 15))); 312 } 313 314 void UIGChooserItemMachine::updateMinimumSnapshotNameWidth() 315 { 316 /* Do we have a snapshot? */ 317 if (m_strSnapshotName.isEmpty()) 318 { 319 /* Clear minimum snapshot name width: */ 320 m_iMinimumSnapshotNameWidth = 0; 321 } 322 else 323 { 324 /* Calculate minimum snapshot name width: */ 325 QFontMetrics fm(m_snapshotNameFont, model()->paintDevice()); 326 int iBracketWidth = fm.width("()"); /* bracket width */ 327 int iActualTextWidth = fm.width(m_strSnapshotName); /* snapshot name width */ 328 int iMinimumTextWidth = fm.width("..."); /* ellipsis width */ 329 m_iMinimumSnapshotNameWidth = iBracketWidth + qMin(iActualTextWidth, iMinimumTextWidth); 330 } 331 332 /* Calculate linked values: */ 333 updateMaximumNameWidth(); 334 } 335 336 void UIGChooserItemMachine::updateMaximumNameWidth() 337 { 338 /* Calculate maximum name width: */ 339 m_iMaximumNameWidth = m_iFirstRowMaximumWidth - m_iMinimumSnapshotNameWidth; 340 341 /* Calculate linked values: */ 342 updateVisibleName(); 343 } 344 345 void UIGChooserItemMachine::updateMaximumSnapshotNameWidth() 346 { 347 /* Calculate maximum snapshot name width: */ 348 m_iMaximumSnapshotNameWidth = m_iFirstRowMaximumWidth - m_visibleNameSize.width(); 349 350 /* Update linked values: */ 351 updateVisibleSnapshotName(); 352 } 353 354 void UIGChooserItemMachine::updateVisibleName() 355 { 356 /* Prepare variables: */ 357 QPaintDevice *pPaintDevice = model()->paintDevice(); 358 359 /* Calculate visible name: */ 360 m_strVisibleName = compressText(m_nameFont, pPaintDevice, m_strName, m_iMaximumNameWidth); 361 m_visibleNameSize = textSize(m_nameFont, pPaintDevice, m_strVisibleName); 362 update(); 363 364 /* Update linked values: */ 365 updateMaximumSnapshotNameWidth(); 366 } 367 368 void UIGChooserItemMachine::updateVisibleSnapshotName() 369 { 370 /* Prepare variables: */ 371 QPaintDevice *pPaintDevice = model()->paintDevice(); 372 373 /* Calculate visible snapshot name: */ 374 int iBracketWidth = QFontMetrics(m_snapshotNameFont, pPaintDevice).width("()"); 375 QString strVisibleSnapshotName = compressText(m_snapshotNameFont, pPaintDevice, m_strSnapshotName, 376 m_iMaximumSnapshotNameWidth - iBracketWidth); 377 m_strVisibleSnapshotName = QString("(%1)").arg(strVisibleSnapshotName); 378 m_visibleSnapshotNameSize = textSize(m_snapshotNameFont, pPaintDevice, m_strVisibleSnapshotName); 379 update(); 380 } 381 382 void UIGChooserItemMachine::updateStateText() 383 { 384 /* Update state text: */ 385 m_strStateText = machineStateName(); 386 m_stateTextSize = textSize(m_stateTextFont, model()->paintDevice(), m_strStateText); 387 update(); 284 388 } 285 389 286 390 void UIGChooserItemMachine::retranslateUi() 287 391 { 392 /* Update state text: */ 393 updateStateText(); 394 288 395 /* Update machine tool-tip: */ 289 396 updateToolTip(); … … 341 448 recache(); 342 449 updatePixmaps(); 450 updateName(); 451 updateSnapshotName(); 452 updateStateText(); 343 453 updateToolTip(); 344 454 update(); … … 433 543 int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt(); 434 544 int iMachinePixmapWidth = m_pixmapSize.width(); 435 int iMinimumNameWidth = data(MachineItemData_MinimumNameWidth).toInt();436 int iMinimumSnapshotNameWidth = data(MachineItemData_MinimumSnapshotNameWidth).toInt();437 545 int iMachineStatePixmapWidth = m_statePixmapSize.width(); 438 int iMachineStateTextWidth = data(MachineItemData_StateTextSize).toSize().width();546 int iMachineStateTextWidth = m_stateTextSize.width(); 439 547 int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width(); 440 548 … … 445 553 iProposedWidth += 2 * iMachineItemMargin; 446 554 /* And machine-item content to take into account: */ 447 int iTopLineWidth = iMinimumNameWidth +555 int iTopLineWidth = m_iMinimumNameWidth + 448 556 iMachineItemMinorSpacing + 449 iMinimumSnapshotNameWidth;557 m_iMinimumSnapshotNameWidth; 450 558 int iBottomLineWidth = iMachineStatePixmapWidth + 451 559 iMachineItemMinorSpacing + … … 469 577 int iMachineItemTextSpacing = data(MachineItemData_TextSpacing).toInt(); 470 578 int iMachinePixmapHeight = m_pixmapSize.height(); 471 int iMachineNameHeight = data(MachineItemData_NameSize).toSize().height();472 int iSnapshotNameHeight = data(MachineItemData_SnapshotNameSize).toSize().height();579 int iMachineNameHeight = m_visibleNameSize.height(); 580 int iSnapshotNameHeight = m_visibleSnapshotNameSize.height(); 473 581 int iMachineStatePixmapHeight = m_statePixmapSize.height(); 474 int iMachineStateTextHeight = data(MachineItemData_StateTextSize).toSize().height();582 int iMachineStateTextHeight = m_stateTextSize.height(); 475 583 int iToolBarHeight = data(MachineItemData_ToolBarSize).toSize().height(); 476 584 … … 739 847 int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt(); 740 848 int iMachineItemTextSpacing = data(MachineItemData_TextSpacing).toInt(); 741 QSize machineNameSize = data(MachineItemData_NameSize).toSize();742 QSize snapshotNameSize = data(MachineItemData_SnapshotNameSize).toSize();743 QSize machineStateTextSize = data(MachineItemData_StateTextSize).toSize();744 849 745 850 /* Update palette: */ … … 775 880 { 776 881 /* Calculate indents: */ 777 int iTopLineHeight = qMax(m achineNameSize.height(), snapshotNameSize.height());778 int iBottomLineHeight = qMax(m_statePixmapSize.height(), m achineStateTextSize.height());882 int iTopLineHeight = qMax(m_visibleNameSize.height(), m_visibleSnapshotNameSize.height()); 883 int iBottomLineHeight = qMax(m_statePixmapSize.height(), m_stateTextSize.height()); 779 884 int iRightColumnHeight = iTopLineHeight + iMachineItemTextSpacing + iBottomLineHeight; 780 885 int iTopLineIndent = (iFullHeight - iRightColumnHeight) / 2; … … 797 902 model()->paintDevice(), 798 903 /* Text to paint: */ 799 data(MachineItemData_Name).toString());904 m_strVisibleName); 800 905 } 801 906 802 907 /* Calculate indents: */ 803 908 int iSnapshotNameIndent = iRightColumnIndent + 804 m achineNameSize.width() +909 m_visibleNameSize.width() + 805 910 iMachineItemMinorSpacing; 806 911 … … 821 926 model()->paintDevice(), 822 927 /* Text to paint: */ 823 data(MachineItemData_SnapshotName).toString());928 m_strVisibleSnapshotName); 824 929 } 825 930 } … … 864 969 model()->paintDevice(), 865 970 /* Text to paint: */ 866 data(MachineItemData_StateText).toString());971 m_strStateText); 867 972 } 868 973 } … … 894 999 m_pPauseButton = 0; 895 1000 m_pCloseButton = 0; 1001 896 1002 /* Colors: */ 897 1003 #ifdef Q_WS_MAC … … 905 1011 #endif /* !Q_WS_MAC */ 906 1012 907 /* Initialize: */1013 /* Fonts: */ 908 1014 m_nameFont = font(); 909 1015 m_nameFont.setWeight(QFont::Bold); 910 1016 m_snapshotNameFont = font(); 911 1017 m_stateTextFont = font(); 912 updatePixmaps(); 1018 1019 /* Sizes: */ 1020 m_iFirstRowMaximumWidth = 0; 1021 m_iMinimumNameWidth = 0; 1022 m_iMaximumNameWidth = 0; 1023 m_iMinimumSnapshotNameWidth = 0; 1024 m_iMaximumSnapshotNameWidth = 0; 913 1025 914 1026 /* Other things disabled for now: */ -
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h
r43830 r43841 69 69 int iEnumerationFlags = 0); 70 70 71 private slots: 72 73 /* Handler: Geometry change stuff: */ 74 void sltHandleGeometryChange(); 75 71 76 private: 72 77 … … 84 89 MachineItemData_PauseButtonPixmap, 85 90 MachineItemData_CloseButtonPixmap, 86 /* Text: */87 MachineItemData_Name,88 MachineItemData_SnapshotName,89 MachineItemData_StateText,90 91 /* Sizes: */ 91 MachineItemData_NameSize,92 MachineItemData_MinimumNameWidth,93 MachineItemData_MaximumNameWidth,94 MachineItemData_SnapshotNameSize,95 MachineItemData_MinimumSnapshotNameWidth,96 MachineItemData_MaximumSnapshotNameWidth,97 MachineItemData_FirstRowMaximumWidth,98 MachineItemData_StateTextSize,99 92 MachineItemData_ToolBarSize 100 93 }; … … 103 96 QVariant data(int iKey) const; 104 97 105 /* Helper : Update stuff: */98 /* Helpers: Update stuff: */ 106 99 void updatePixmaps(); 100 void updateName(); 101 void updateSnapshotName(); 102 void updateFirstRowMaximumWidth(); 103 void updateMinimumNameWidth(); 104 void updateMinimumSnapshotNameWidth(); 105 void updateMaximumNameWidth(); 106 void updateMaximumSnapshotNameWidth(); 107 void updateVisibleName(); 108 void updateVisibleSnapshotName(); 109 void updateStateText(); 107 110 108 111 /* Helper: Translate stuff: */ … … 170 173 QFont m_stateTextFont; 171 174 QPixmap m_pixmap; 175 QPixmap m_statePixmap; 176 QString m_strName; 177 QString m_strVisibleName; 178 QString m_strSnapshotName; 179 QString m_strVisibleSnapshotName; 180 QString m_strStateText; 172 181 QSize m_pixmapSize; 173 QPixmap m_statePixmap;174 182 QSize m_statePixmapSize; 183 QSize m_visibleNameSize; 184 QSize m_visibleSnapshotNameSize; 185 QSize m_stateTextSize; 186 int m_iFirstRowMaximumWidth; 187 int m_iMinimumNameWidth; 188 int m_iMaximumNameWidth; 189 int m_iMinimumSnapshotNameWidth; 190 int m_iMaximumSnapshotNameWidth; 175 191 }; 176 192
Note:
See TracChangeset
for help on using the changeset viewer.