d34409ad02ea0d28e08a6c4b089a412fdb3b4c9cvboxsync * VBox Qt GUI - UINetworkRequestWidget stuff implementation.
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * Copyright (C) 2011-2012 Oracle Corporation
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * available from http://www.virtualbox.org. This file is free software;
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * you can redistribute it and/or modify it under the terms of the GNU
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * General Public License (GPL) as published by the Free Software
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a9b62afc62b28da7a1a77f34259f8013892d9664vboxsync#else /* !VBOX_WITH_PRECOMPILED_HEADERS */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync/* Global includes: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync/* Local includes: */
a9b62afc62b28da7a1a77f34259f8013892d9664vboxsync#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsyncUINetworkRequestWidget::UINetworkRequestWidget(UINetworkManagerDialog *pParent, UINetworkRequest *pNetworkRequest)
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync , m_pProgressBar(new QProgressBar(m_pContentWidget))
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync , m_pRetryButton(new QIToolButton(m_pContentWidget))
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync , m_pCancelButton(new QIToolButton(m_pContentWidget))
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync , m_pErrorPane(new QIRichTextLabel(m_pContentWidget))
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup self: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync setTitleIcon(UIIconPool::iconSet(":/nw_16px.png"));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Prepare listeners for m_pNetworkRequest: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pNetworkRequest, SIGNAL(sigProgress(qint64, qint64)), this, SLOT(sltSetProgress(qint64, qint64)));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pNetworkRequest, SIGNAL(sigStarted()), this, SLOT(sltSetProgressToStarted()));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pNetworkRequest, SIGNAL(sigFinished()), this, SLOT(sltSetProgressToFinished()));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pNetworkRequest, SIGNAL(sigFailed(const QString&)), this, SLOT(sltSetProgressToFailed(const QString&)));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup timer: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pTimer, SIGNAL(timeout()), this, SLOT(sltTimeIsOut()));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup main-layout: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup progress-bar: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup retry-button: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync m_pRetryButton->setIcon(UIIconPool::iconSet(":/refresh_16px.png"));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pRetryButton, SIGNAL(clicked(bool)), this, SIGNAL(sigRetry()));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup cancel-button: */
aee625e805c79f14fbefcf212d05e4c41c266f01vboxsync m_pCancelButton->setIcon(UIIconPool::iconSet(":/cancel_16px.png"));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync connect(m_pCancelButton, SIGNAL(clicked(bool)), this, SIGNAL(sigCancel()));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Setup error-label: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync m_pErrorPane->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Calculate required width: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Take into account content-widget layout margins: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync m_pMainLayout->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Take into account this layout margins: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync layout()->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Take into account parent layout margins: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync QLayout *pParentLayout = qobject_cast<QMainWindow*>(parent())->centralWidget()->layout();
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync pParentLayout->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set minimum text width: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Layout content: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync m_pMainLayout->addWidget(m_pErrorPane, 1, 0, 1, 3);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Retranslate UI: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsyncvoid UINetworkRequestWidget::sltSetProgress(qint64 iReceived, qint64 iTotal)
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Restart timer: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set current progress to passed: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsyncvoid UINetworkRequestWidget::sltSetProgressToStarted()
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Start timer: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set current progress to 'started': */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Hide 'retry' button: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Hide error label: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsyncvoid UINetworkRequestWidget::sltSetProgressToFinished()
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Stop timer: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set current progress to 'started': */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsyncvoid UINetworkRequestWidget::sltSetProgressToFailed(const QString &strError)
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Stop timer: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set current progress to 'failed': */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Show 'retry' button: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Try to find all the links in the error-message,
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync * replace them with %increment if present: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync for (int i = 1; linkRegExp.indexIn(strErrorText) != -1; ++i)
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync strErrorText.replace(linkRegExp.cap(), QString("%%1").arg(i));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Return back all the links, just in bold: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync strErrorText = strErrorText.arg(QString("<b>%1</b>").arg(links[i]));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Show error label: */
22c01c0da1c882e8e6bc68ce31e619a4d24983e5vboxsync m_pErrorPane->setText(UINetworkManagerDialog::tr("The network operation failed with the following error: %1.").arg(strErrorText));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Stop timer: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set current progress to unknown: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Get corresponding title: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync const QString &strTitle = m_pNetworkRequest->description();
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Set popup title (default if missed): */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync setTitle(strTitle.isEmpty() ? UINetworkManagerDialog::tr("Network Operation") : strTitle);
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Translate retry button: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync m_pRetryButton->setStatusTip(UINetworkManagerDialog::tr("Restart network operation"));
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync /* Translate cancel button: */
5d21e43767a8ad1220a67c8954e95d687a433783vboxsync m_pCancelButton->setStatusTip(UINetworkManagerDialog::tr("Cancel network operation"));