void UIPopupCenter::sltPopupPaneDone(QString strPopupPaneID, int iResultCode) { /* Remember auto-confirmation fact (if necessary): */ if (iResultCode & AlertOption_AutoConfirmed) gEDataManager->setSuppressedMessages(gEDataManager->suppressedMessages() << strPopupPaneID); /* Notify listeners: */ emit sigPopupPaneDone(strPopupPaneID, iResultCode); }
void UIPopupCenter::sltPopupPaneDone(QString strPopupPaneID, int iResultCode) { /* Was the result auto-confirmated? */ if (iResultCode & AlertOption_AutoConfirmed) { /* Remember auto-confirmation fact: */ QStringList confirmedPopupList = vboxGlobal().virtualBox().GetExtraData(GUI_SuppressMessages).split(','); confirmedPopupList << strPopupPaneID; vboxGlobal().virtualBox().SetExtraData(GUI_SuppressMessages, confirmedPopupList.join(",")); } /* Notify listeners: */ emit sigPopupPaneDone(strPopupPaneID, iResultCode); }
void UIPopupStackViewport::sltPopupPaneDone(int iResultCode) { /* Make sure the sender is the popup-pane: */ UIPopupPane *pPopupPane = qobject_cast<UIPopupPane*>(sender()); if (!pPopupPane) { AssertMsgFailed(("Should be called by popup-pane only!")); return; } /* Make sure the popup-pane still exists: */ const QString strPopupPaneID(m_panes.key(pPopupPane, QString())); if (strPopupPaneID.isNull()) { AssertMsgFailed(("Popup-pane already destroyed!")); return; } /* Notify listeners about popup-pane removal: */ emit sigPopupPaneDone(strPopupPaneID, iResultCode); /* Delete popup-pane asyncronously. * To avoid issues with events which already posted: */ m_panes.remove(strPopupPaneID); pPopupPane->deleteLater(); /* Notify listeners about popup-pane removed: */ emit sigPopupPaneRemoved(strPopupPaneID); /* Adjust geometry: */ sltAdjustGeometry(); /* Make sure this stack still contains popup-panes: */ if (!m_panes.isEmpty()) return; /* Notify listeners about popup-stack: */ emit sigPopupPanesRemoved(); }
void UIPopupCenter::showPopupPane(QWidget *pParent, const QString &strPopupPaneID, const QString &strMessage, const QString &strDetails, int iButton1, int iButton2, const QString &strButtonText1, const QString &strButtonText2, bool fProposeAutoConfirmation) { /* Make sure at least one button is valid: */ if (iButton1 == 0 && iButton2 == 0) iButton1 = AlertButton_Ok | AlertButtonOption_Default | AlertButtonOption_Escape; /* Check if popup-pane was auto-confirmed before: */ if (fProposeAutoConfirmation) { QStringList confirmedPopupList = vboxGlobal().virtualBox().GetExtraData(GUI_SuppressMessages).split(','); if (confirmedPopupList.contains(strPopupPaneID)) { int iResultCode = AlertOption_AutoConfirmed; if (iButton1 & AlertButtonOption_Default) iResultCode |= (iButton1 & AlertButtonMask); else if (iButton2 & AlertButtonOption_Default) iResultCode |= (iButton2 & AlertButtonMask); emit sigPopupPaneDone(strPopupPaneID, iResultCode); return; } } /* Make sure parent is always set! */ AssertMsg(pParent, ("Parent is NULL!")); if (!pParent) return; /* Looking for the corresponding popup-stack: */ QString strPopupStackID = pParent->metaObject()->className(); UIPopupStack *pPopupStack = 0; /* Is there already popup-stack with the same ID? */ if (m_stacks.contains(strPopupStackID)) { /* Get existing one: */ pPopupStack = m_stacks[strPopupStackID]; } /* There is no popup-stack with the same ID? */ else { /* Create new one: */ pPopupStack = m_stacks[strPopupStackID] = new UIPopupStack(pParent); /* Attach popup-stack connections: */ connect(pPopupStack, SIGNAL(sigPopupPaneDone(QString, int)), this, SLOT(sltPopupPaneDone(QString, int))); connect(pPopupStack, SIGNAL(sigRemove()), this, SLOT(sltRemovePopupStack())); /* Show popup-stack: */ pPopupStack->show(); } /* Looking for the corresponding popup-pane: */ if (pPopupStack->exists(strPopupPaneID)) { /* Update existing one: */ pPopupStack->updatePopupPane(strPopupPaneID, strMessage, strDetails); } else { /* Compose button description map: */ QMap<int, QString> buttonDescriptions; if (iButton1 != 0 && !buttonDescriptions.contains(iButton1)) buttonDescriptions[iButton1] = strButtonText1; if (iButton2 != 0 && !buttonDescriptions.contains(iButton2)) buttonDescriptions[iButton2] = strButtonText2; /* Create new one: */ pPopupStack->createPopupPane(strPopupPaneID, strMessage, strDetails, buttonDescriptions, fProposeAutoConfirmation); } }
void UIPopupCenter::showPopupPane(QWidget *pParent, const QString &strPopupPaneID, const QString &strMessage, const QString &strDetails, QString strButtonText1 /* = QString()*/, QString strButtonText2 /* = QString()*/, bool fProposeAutoConfirmation /* = false*/) { /* Make sure parent is set! */ AssertPtrReturnVoid(pParent); /* Prepare buttons: */ int iButton1 = 0; int iButton2 = 0; /* Make sure single button is properly configured: */ if (!strButtonText1.isEmpty() && strButtonText2.isEmpty()) iButton1 = AlertButton_Cancel | AlertButtonOption_Default | AlertButtonOption_Escape; else if (strButtonText1.isEmpty() && !strButtonText2.isEmpty()) iButton2 = AlertButton_Cancel | AlertButtonOption_Default | AlertButtonOption_Escape; /* Make sure buttons are unique if set both: */ else if (!strButtonText1.isEmpty() && !strButtonText2.isEmpty()) { iButton1 = AlertButton_Ok | AlertButtonOption_Default; iButton2 = AlertButton_Cancel | AlertButtonOption_Escape; /* If user made a mistake in button names, we will fix that: */ if (strButtonText1 == strButtonText2) { strButtonText1 = QApplication::translate("UIMessageCenter", "Ok"); strButtonText1 = QApplication::translate("UIMessageCenter", "Cancel"); } } /* Check if popup-pane was auto-confirmed before: */ if ((iButton1 || iButton2) && fProposeAutoConfirmation) { const QStringList confirmedPopupList = gEDataManager->suppressedMessages(); if ( confirmedPopupList.contains(strPopupPaneID) || confirmedPopupList.contains("allPopupPanes") || confirmedPopupList.contains("all") ) { int iResultCode = AlertOption_AutoConfirmed; if (iButton1 & AlertButtonOption_Default) iResultCode |= (iButton1 & AlertButtonMask); else if (iButton2 & AlertButtonOption_Default) iResultCode |= (iButton2 & AlertButtonMask); emit sigPopupPaneDone(strPopupPaneID, iResultCode); return; } } /* Looking for corresponding popup-stack: */ const QString strPopupStackID(popupStackID(pParent)); UIPopupStack *pPopupStack = 0; /* If there is already popup-stack with such ID: */ if (m_stacks.contains(strPopupStackID)) { /* Just get existing one: */ pPopupStack = m_stacks[strPopupStackID]; } /* If there is no popup-stack with such ID: */ else { /* Create new one: */ pPopupStack = m_stacks[strPopupStackID] = new UIPopupStack(strPopupStackID, m_stackOrientations[strPopupStackID]); /* Attach popup-stack connections: */ connect(pPopupStack, SIGNAL(sigPopupPaneDone(QString, int)), this, SLOT(sltPopupPaneDone(QString, int))); connect(pPopupStack, SIGNAL(sigRemove(QString)), this, SLOT(sltRemovePopupStack(QString))); } /* If there is already popup-pane with such ID: */ if (pPopupStack->exists(strPopupPaneID)) { /* Just update existing one: */ pPopupStack->updatePopupPane(strPopupPaneID, strMessage, strDetails); } /* If there is no popup-pane with such ID: */ else { /* Compose button description map: */ QMap<int, QString> buttonDescriptions; if (iButton1 != 0) buttonDescriptions[iButton1] = strButtonText1; if (iButton2 != 0) buttonDescriptions[iButton2] = strButtonText2; if (fProposeAutoConfirmation) buttonDescriptions[AlertButton_Cancel | AlertOption_AutoConfirmed] = QString(); /* Create new one: */ pPopupStack->createPopupPane(strPopupPaneID, strMessage, strDetails, buttonDescriptions); } /* Show popup-stack: */ showPopupStack(pParent); }