VirtualBox

Changeset 90412 in vbox for trunk


Ignore:
Timestamp:
Jul 29, 2021 2:55:13 PM (3 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:10067: Notification signature for medium storage deleting progress which should now go to center instead of modal dialogs; Besides that, it's reused in CD/FD medium deleting stuff as well.

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumItem.cpp

    r90300 r90412  
    242242}
    243243
     244void UIMediumItem::sltHandleMediumRemoveRequest(CMedium comMedium)
     245{
     246    /* Close medium finally: */
     247    comMedium.Close();
     248    if (!comMedium.isOk())
     249        msgCenter().cannotCloseMedium(medium(), comMedium, treeWidget());
     250}
     251
    244252void UIMediumItem::refresh()
    245253{
     
    414422        return false;
    415423
    416     /* Remember some of hard-disk attributes: */
    417     CMedium hardDisk = medium().medium();
    418 
    419424    /* Propose to remove medium storage: */
    420425    if (!maybeRemoveStorage())
    421426        return false;
    422 
    423     /* Close hard-disk: */
    424     hardDisk.Close();
    425     if (!hardDisk.isOk())
    426     {
    427         msgCenter().cannotCloseMedium(medium(), hardDisk, treeWidget());
    428         return false;
    429     }
    430427
    431428    /* True by default: */
     
    473470bool UIMediumItemHD::maybeRemoveStorage()
    474471{
    475     /* Remember some of hard-disk attributes: */
    476     CMedium hardDisk = medium().medium();
    477     QString strLocation = location();
     472    /* Acquire medium: */
     473    CMedium comMedium = medium().medium();
    478474
    479475    /* We don't want to try to delete inaccessible storage as it will most likely fail.
     
    483479    bool fDeleteStorage = false;
    484480    qulonglong uCapability = 0;
    485     QVector<KMediumFormatCapabilities> capabilities = hardDisk.GetMediumFormat().GetCapabilities();
    486     foreach (KMediumFormatCapabilities capability, capabilities)
     481    foreach (KMediumFormatCapabilities capability, comMedium.GetMediumFormat().GetCapabilities())
    487482        uCapability |= capability;
    488483    if (state() != KMediumState_Inaccessible && uCapability & KMediumFormatCapabilities_File)
    489484    {
    490         int rc = msgCenter().confirmDeleteHardDiskStorage(strLocation, treeWidget());
     485        int rc = msgCenter().confirmDeleteHardDiskStorage(location(), treeWidget());
    491486        if (rc == AlertButton_Cancel)
    492487            return false;
     
    497492    if (fDeleteStorage)
    498493    {
    499         /* Prepare delete storage progress: */
    500         CProgress progress = hardDisk.DeleteStorage();
    501         if (!hardDisk.isOk())
    502         {
    503             msgCenter().cannotDeleteHardDiskStorage(hardDisk, strLocation, treeWidget());
    504             return false;
    505         }
    506         /* Show delete storage progress: */
    507         msgCenter().showModalProgressDialog(progress, UIMediumItem::tr("Removing medium ..."),
    508                                             ":/progress_media_delete_90px.png", treeWidget());
    509         if (!progress.isOk() || progress.GetResultCode() != 0)
    510         {
    511             msgCenter().cannotDeleteHardDiskStorage(progress, strLocation, treeWidget());
    512             return false;
    513         }
    514     }
     494        /* Deleting medium storage first of all: */
     495        UINotificationProgressMediumDeletingStorage *pNotification = new UINotificationProgressMediumDeletingStorage(comMedium);
     496        connect(pNotification, &UINotificationProgressMediumDeletingStorage::sigMediumStorageDeleted,
     497                this, &UIMediumItemHD::sltHandleMediumRemoveRequest);
     498        notificationCenter().append(pNotification);
     499    }
     500    /* Otherwise go to last step immediatelly: */
     501    else
     502        sltHandleMediumRemoveRequest(comMedium);
    515503
    516504    /* True by default: */
     
    539527        return false;
    540528
    541     /* Remember some of optical-disk attributes: */
    542     CMedium image = medium().medium();
    543 
    544529    /* Close optical-disk: */
    545     image.Close();
    546     if (!image.isOk())
    547     {
    548         msgCenter().cannotCloseMedium(medium(), image, treeWidget());
    549         return false;
    550     }
     530    sltHandleMediumRemoveRequest(medium().medium());
    551531
    552532    /* True by default: */
     
    608588        return false;
    609589
    610     /* Remember some of floppy-disk attributes: */
    611     CMedium image = medium().medium();
    612 
    613590    /* Close floppy-disk: */
    614     image.Close();
    615     if (!image.isOk())
    616     {
    617         msgCenter().cannotCloseMedium(medium(), image, treeWidget());
    618         return false;
    619     }
     591    sltHandleMediumRemoveRequest(medium().medium());
    620592
    621593    /* True by default: */
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumItem.h

    r90300 r90412  
    124124    /** Handles medium move progress result. */
    125125    void sltHandleMoveProgressFinished();
     126
     127    /** Handles @a comMedium remove request. */
     128    void sltHandleMediumRemoveRequest(CMedium comMedium);
    126129
    127130private:
  • trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.cpp

    r90411 r90412  
    175175
    176176/*********************************************************************************************************************************
     177*   Class UINotificationProgressMediumDeletingStorage implementation.                                                            *
     178*********************************************************************************************************************************/
     179
     180UINotificationProgressMediumDeletingStorage::UINotificationProgressMediumDeletingStorage(const CMedium &comMedium)
     181    : m_comMedium(comMedium)
     182{
     183    connect(this, &UINotificationProgress::sigProgressFinished,
     184            this, &UINotificationProgressMediumDeletingStorage::sltHandleProgressFinished);
     185}
     186
     187QString UINotificationProgressMediumDeletingStorage::name() const
     188{
     189    return UINotificationProgress::tr("Deleting medium storage ...");
     190}
     191
     192QString UINotificationProgressMediumDeletingStorage::details() const
     193{
     194    return UINotificationProgress::tr("<b>Location:</b> %1").arg(m_strLocation);
     195}
     196
     197CProgress UINotificationProgressMediumDeletingStorage::createProgress(COMResult &comResult)
     198{
     199    /* Acquire location: */
     200    m_strLocation = m_comMedium.GetLocation();
     201    if (!m_comMedium.isOk())
     202    {
     203        /* Store COM result: */
     204        comResult = m_comMedium;
     205        /* Return progress-wrapper: */
     206        return CProgress();
     207    }
     208
     209    /* Initialize progress-wrapper: */
     210    CProgress comProgress = m_comMedium.DeleteStorage();
     211    /* Store COM result: */
     212    comResult = m_comMedium;
     213    /* Return progress-wrapper: */
     214    return comProgress;
     215}
     216
     217void UINotificationProgressMediumDeletingStorage::sltHandleProgressFinished()
     218{
     219    if (!error().isEmpty())
     220        emit sigMediumStorageDeleted(m_comMedium);
     221}
     222
     223
     224/*********************************************************************************************************************************
    177225*   Class UINotificationProgressMachineCopy implementation.                                                                      *
    178226*********************************************************************************************************************************/
  • trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.h

    r90411 r90412  
    166166    /** Holds the final location. */
    167167    QString  m_strTo;
     168};
     169
     170/** UINotificationProgress extension for deleting medium storage functionality. */
     171class SHARED_LIBRARY_STUFF UINotificationProgressMediumDeletingStorage : public UINotificationProgress
     172{
     173    Q_OBJECT;
     174
     175signals:
     176
     177    /** Notifies listeners about @a comMedium storage was deleted. */
     178    void sigMediumStorageDeleted(const CMedium &comMedium);
     179
     180public:
     181
     182    /** Constructs deleting medium storage notification-progress.
     183      * @param  comMedium  Brings the medium which storage being deleted. */
     184    UINotificationProgressMediumDeletingStorage(const CMedium &comMedium);
     185
     186protected:
     187
     188    /** Returns object name. */
     189    virtual QString name() const /* override final */;
     190    /** Returns object details. */
     191    virtual QString details() const /* override final */;
     192    /** Creates and returns started progress-wrapper. */
     193    virtual CProgress createProgress(COMResult &comResult) /* override final */;
     194
     195private slots:
     196
     197    /** Handles signal about progress being finished. */
     198    void sltHandleProgressFinished();
     199
     200private:
     201
     202    /** Holds the medium which storage being deleted. */
     203    CMedium  m_comMedium;
     204    /** Holds the medium location. */
     205    QString  m_strLocation;
    168206};
    169207
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette