- Timestamp:
- Apr 12, 2013 9:08:36 AM (12 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/globals
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp
r45505 r45508 212 212 "or pressing the host key) in order to use the mouse inside the guest OS.</p>")); 213 213 } 214 } 215 216 void UIAnimationFramework::installPropertyAnimation(QWidget *pParent, const QByteArray &strPropertyName, 217 int iStartValue, int iFinalValue, int iAnimationDuration, 218 const char *pSignalForward, const char *pSignalBackward) 219 { 220 /* State-machine: */ 221 QStateMachine *pStateMachine = new QStateMachine(pParent); 222 /* State-machine 'start' state: */ 223 QState *pStateStart = new QState(pStateMachine); 224 /* State-machine 'final' state: */ 225 QState *pStateFinal = new QState(pStateMachine); 226 227 /* State-machine 'forward' animation: */ 228 QPropertyAnimation *pForwardAnimation = new QPropertyAnimation(pParent, strPropertyName, pParent); 229 pForwardAnimation->setDuration(iAnimationDuration); 230 pForwardAnimation->setStartValue(iStartValue); 231 pForwardAnimation->setEndValue(iFinalValue); 232 /* State-machine 'backward' animation: */ 233 QPropertyAnimation *pBackwardAnimation = new QPropertyAnimation(pParent, strPropertyName, pParent); 234 pBackwardAnimation->setDuration(iAnimationDuration); 235 pBackwardAnimation->setStartValue(iFinalValue); 236 pBackwardAnimation->setEndValue(iStartValue); 237 238 /* State-machine state transitions: */ 239 QSignalTransition *pDefaultToHovered = pStateStart->addTransition(pParent, pSignalForward, pStateFinal); 240 pDefaultToHovered->addAnimation(pForwardAnimation); 241 QSignalTransition *pHoveredToDefault = pStateFinal->addTransition(pParent, pSignalBackward, pStateStart); 242 pHoveredToDefault->addAnimation(pBackwardAnimation); 243 244 /* Initial state is 'start': */ 245 pStateMachine->setInitialState(pStateStart); 246 /* Start hover-machine: */ 247 pStateMachine->start(); 214 248 } 215 249 … … 369 403 /* Configure button-box: */ 370 404 m_pButtonBox->installEventFilter(pMainFrame); 371 QList<int> activeButtons; 372 m_pButton1 = createButton(m_iButton1); 373 if (m_pButton1) 374 { 375 activeButtons << m_iButton1; 376 connect(m_pButton1, SIGNAL(clicked()), SLOT(done1())); 377 if (!m_strButtonText1.isEmpty()) 378 m_pButton1->setText(m_strButtonText1); 379 } 380 m_pButton2 = createButton(m_iButton2); 381 if (m_pButton2) 382 { 383 activeButtons << m_iButton2; 384 connect(m_pButton2, SIGNAL(clicked()), SLOT(done2())); 385 if (!m_strButtonText2.isEmpty()) 386 m_pButton1->setText(m_strButtonText2); 387 } 388 m_pButton3 = createButton(m_iButton3); 389 if (m_pButton3) 390 { 391 activeButtons << m_iButton3; 392 connect(m_pButton3, SIGNAL(clicked()), SLOT(done3())); 393 if (!m_strButtonText3.isEmpty()) 394 m_pButton1->setText(m_strButtonText3); 395 } 405 prepareButtons(); 396 406 } 397 407 } … … 400 410 } 401 411 402 QPushButton* UIPopupPane::createButton(int iButton) 403 { 404 /* Not for AlertButton_NoButton: */ 412 void UIPopupPane::prepareButtons() 413 { 414 /* Prepare descriptions: */ 415 QList<int> descriptions; 416 descriptions << m_iButton1 << m_iButton2 << m_iButton3; 417 418 /* Choose 'escape' button: */ 419 foreach (int iButton, descriptions) 420 if (iButton & AlertButtonOption_Escape) 421 { 422 m_iButtonEsc = iButton & AlertButtonMask; 423 break; 424 } 425 426 /* Create buttons: */ 427 QList<QPushButton*> buttons = createButtons(m_pButtonBox, descriptions); 428 429 /* Install focus-proxy into the 'default' button: */ 430 foreach (QPushButton *pButton, buttons) 431 if (pButton && pButton->isDefault()) 432 { 433 setFocusProxy(pButton); 434 m_pTextPane->setFocusProxy(pButton); 435 break; 436 } 437 438 /* Prepare button 1: */ 439 m_pButton1 = buttons[0]; 440 if (m_pButton1) 441 { 442 connect(m_pButton1, SIGNAL(clicked()), SLOT(done1())); 443 if (!m_strButtonText1.isEmpty()) 444 m_pButton1->setText(m_strButtonText1); 445 } 446 /* Prepare button 2: */ 447 m_pButton2 = buttons[1]; 448 if (m_pButton2) 449 { 450 connect(m_pButton2, SIGNAL(clicked()), SLOT(done2())); 451 if (!m_strButtonText2.isEmpty()) 452 m_pButton1->setText(m_strButtonText2); 453 } 454 /* Prepare button 3: */ 455 m_pButton3 = buttons[2]; 456 if (m_pButton3) 457 { 458 connect(m_pButton3, SIGNAL(clicked()), SLOT(done3())); 459 if (!m_strButtonText3.isEmpty()) 460 m_pButton1->setText(m_strButtonText3); 461 } 462 } 463 464 void UIPopupPane::done(int iButtonCode) 465 { 466 /* Close the window: */ 467 close(); 468 469 /* Notify listeners: */ 470 emit sigDone(iButtonCode); 471 } 472 473 /* static */ 474 int UIPopupPane::parentStatusBarHeight(QWidget *pParent) 475 { 476 /* Check if passed parent is QMainWindow and contains status-bar: */ 477 if (QMainWindow *pParentWindow = qobject_cast<QMainWindow*>(pParent)) 478 if (pParentWindow->statusBar()) 479 return pParentWindow->statusBar()->height(); 480 /* Zero by default: */ 481 return 0; 482 } 483 484 /* static */ 485 QList<QPushButton*> UIPopupPane::createButtons(QIDialogButtonBox *pButtonBox, const QList<int> descriptions) 486 { 487 /* Create button according descriptions: */ 488 QList<QPushButton*> buttons; 489 foreach (int iButton, descriptions) 490 buttons << createButton(pButtonBox, iButton); 491 /* Return buttons: */ 492 return buttons; 493 } 494 495 /* static */ 496 QPushButton* UIPopupPane::createButton(QIDialogButtonBox *pButtonBox, int iButton) 497 { 498 /* Null for AlertButton_NoButton: */ 405 499 if (iButton == 0) 406 500 return 0; … … 411 505 switch (iButton & AlertButtonMask) 412 506 { 413 case AlertButton_Ok: strText = tr("OK"); role = QDialogButtonBox::AcceptRole; break;414 case AlertButton_Cancel: strText = tr("Cancel"); role = QDialogButtonBox::RejectRole; break;415 case AlertButton_Choice1: strText = tr("Yes"); role = QDialogButtonBox::YesRole; break;416 case AlertButton_Choice2: strText = tr("No"); role = QDialogButtonBox::NoRole; break;507 case AlertButton_Ok: strText = QIMessageBox::tr("OK"); role = QDialogButtonBox::AcceptRole; break; 508 case AlertButton_Cancel: strText = QIMessageBox::tr("Cancel"); role = QDialogButtonBox::RejectRole; break; 509 case AlertButton_Choice1: strText = QIMessageBox::tr("Yes"); role = QDialogButtonBox::YesRole; break; 510 case AlertButton_Choice2: strText = QIMessageBox::tr("No"); role = QDialogButtonBox::NoRole; break; 417 511 default: return 0; 418 512 } 419 513 420 514 /* Create push-button: */ 421 QPushButton *pButton = m_pButtonBox->addButton(strText, role);422 423 /* Configure <default>button: */515 QPushButton *pButton = pButtonBox->addButton(strText, role); 516 517 /* Configure 'default' button: */ 424 518 if (iButton & AlertButtonOption_Default) 425 519 { 426 520 pButton->setDefault(true); 427 521 pButton->setFocusPolicy(Qt::StrongFocus); 428 setFocusProxy(pButton);429 m_pTextPane->setFocusProxy(pButton);430 522 pButton->setFocus(); 431 }432 433 /* Configure <escape> button: */434 if (iButton & AlertButtonOption_Escape)435 {436 m_iButtonEsc = iButton & AlertButtonMask;437 523 } 438 524 439 525 /* Return button: */ 440 526 return pButton; 441 }442 443 void UIPopupPane::done(int iButtonCode)444 {445 /* Close the window: */446 close();447 448 /* Notify listeners: */449 emit sigDone(iButtonCode);450 }451 452 /* static */453 int UIPopupPane::parentStatusBarHeight(QWidget *pParent)454 {455 /* Check if passed parent is QMainWindow and contains status-bar: */456 if (QMainWindow *pParentWindow = qobject_cast<QMainWindow*>(pParent))457 if (pParentWindow->statusBar())458 return pParentWindow->statusBar()->height();459 return 0;460 527 } 461 528 … … 483 550 installEventFilter(this); 484 551 /* Install 'hover' animation for 'opacity' property: */ 485 installPropertyAnimation(this, QByteArray("opacity"),486 m_iDefaultOpacity, m_iHoveredOpacity, m_iHoverAnimationDuration,487 SIGNAL(sigHoverEnter()), SIGNAL(sigHoverLeave()));552 UIAnimationFramework::installPropertyAnimation(this, QByteArray("opacity"), 553 m_iDefaultOpacity, m_iHoveredOpacity, m_iHoverAnimationDuration, 554 SIGNAL(sigHoverEnter()), SIGNAL(sigHoverLeave())); 488 555 } 489 556 … … 555 622 } 556 623 557 /* static */558 void UIPopupPaneFrame::installPropertyAnimation(QWidget *pParent, const QByteArray &strPropertyName,559 int iStartValue, int iFinalValue, int iAnimationDuration,560 const char *pSignalForward, const char *pSignalBackward)561 {562 /* State-machine: */563 QStateMachine *pStateMachine = new QStateMachine(pParent);564 /* State-machine 'start' state: */565 QState *pStateStart = new QState(pStateMachine);566 /* State-machine 'final' state: */567 QState *pStateFinal = new QState(pStateMachine);568 569 /* State-machine 'forward' animation: */570 QPropertyAnimation *pForwardAnimation = new QPropertyAnimation(pParent, strPropertyName, pParent);571 pForwardAnimation->setDuration(iAnimationDuration);572 pForwardAnimation->setStartValue(iStartValue);573 pForwardAnimation->setEndValue(iFinalValue);574 /* State-machine 'backward' animation: */575 QPropertyAnimation *pBackwardAnimation = new QPropertyAnimation(pParent, strPropertyName, pParent);576 pBackwardAnimation->setDuration(iAnimationDuration);577 pBackwardAnimation->setStartValue(iFinalValue);578 pBackwardAnimation->setEndValue(iStartValue);579 580 /* State-machine state transitions: */581 QSignalTransition *pDefaultToHovered = pStateStart->addTransition(pParent, pSignalForward, pStateFinal);582 pDefaultToHovered->addAnimation(pForwardAnimation);583 QSignalTransition *pHoveredToDefault = pStateFinal->addTransition(pParent, pSignalBackward, pStateStart);584 pHoveredToDefault->addAnimation(pBackwardAnimation);585 586 /* Initial state is 'start': */587 pStateMachine->setInitialState(pStateStart);588 /* Start hover-machine: */589 pStateMachine->start();590 }591 -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h
r45490 r45508 126 126 inline UIPopupCenter& popupCenter() { return *UIPopupCenter::instance(); } 127 127 128 /* UIAnimationFramework namespace: */ 129 namespace UIAnimationFramework 130 { 131 /* API: Animation stuff: */ 132 void installPropertyAnimation(QWidget *pParent, const QByteArray &strPropertyName, 133 int iStartValue, int iFinalValue, int iAnimationDuration, 134 const char *pSignalForward, const char *pSignalBackward); 135 } 136 128 137 /* Popup-pane prototype class: */ 129 138 class UIPopupPane : public QWidget … … 174 183 /* Helpers: Prepare stuff: */ 175 184 void prepareContent(); 176 QPushButton* createButton(int iButton);185 void prepareButtons(); 177 186 178 187 /* Helper: Complete stuff: */ 179 188 void done(int iButtonCode); 180 189 181 /* Helper: Parentstuff: */190 /* Static helpers: Prepare stuff: */ 182 191 static int parentStatusBarHeight(QWidget *pParent); 192 static QList<QPushButton*> createButtons(QIDialogButtonBox *pButtonBox, const QList<int> description); 193 static QPushButton* createButton(QIDialogButtonBox *pButtonBox, int iButton); 183 194 184 195 /* Variables: */ … … 231 242 void setOpacity(int iOpacity) { m_iOpacity = iOpacity; update(); } 232 243 233 /* Static helper: Animation stuff: */234 static void installPropertyAnimation(QWidget *pParent, const QByteArray &strPropertyName,235 int iStartValue, int iFinalValue, int iAnimationDuration,236 const char *pSignalForward, const char *pSignalBackward);237 238 244 /* Hover-machine stuff: */ 239 245 bool m_fHovered;
Note:
See TracChangeset
for help on using the changeset viewer.