VirtualBox

Changeset 83884 in vbox


Ignore:
Timestamp:
Apr 21, 2020 10:02:06 AM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9653: VirtualBox Manager: Chooser pane: Implement cloud VM drag&drop functionality allowing to move cloud VMs and profiles inside their groups.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.cpp

    r83672 r83884  
    495495        return;
    496496
    497     /* Initialize dragging for local VMs only: */
    498     if (!m_pNode->hasAtLeastOneCloudNode())
    499     {
    500         QDrag *pDrag = new QDrag(pEvent->widget());
    501         model()->setCurrentDragObject(pDrag);
    502         pDrag->setPixmap(toPixmap());
    503         pDrag->setMimeData(createMimeData());
    504         pDrag->exec(Qt::MoveAction | Qt::CopyAction, Qt::MoveAction);
    505     }
     497    /* Initialize dragging: */
     498    QDrag *pDrag = new QDrag(pEvent->widget());
     499    model()->setCurrentDragObject(pDrag);
     500    pDrag->setPixmap(toPixmap());
     501    pDrag->setMimeData(createMimeData());
     502    pDrag->exec(Qt::MoveAction | Qt::CopyAction, Qt::MoveAction);
    506503}
    507504
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp

    r83883 r83884  
    683683        UIChooserItemGroup *pGroupItem = pItem->toGroupItem();
    684684
    685         /* Make sure passed machine isn't immutable within own group: */
    686         if (   pGroupItem->isContainsLockedMachine()
    687             && !m_groupItems.contains(pItem))
    688             return false;
    689         /* Make sure passed group is not 'this': */
    690         if (pItem == this)
    691             return false;
    692         /* Make sure passed group is not among our parents: */
    693         const UIChooserItem *pTestedItem = this;
    694         while (UIChooserItem *pParentOfTestedWidget = pTestedItem->parentItem())
    695         {
    696             if (pItem == pParentOfTestedWidget)
     685        /* For local items: */
     686        if (   node()->toGroupNode()->groupType() == UIChooserNodeGroupType_Local
     687            && pItem->node()->toGroupNode()->groupType() == UIChooserNodeGroupType_Local)
     688        {
     689            /* Make sure passed machine isn't immutable within own group: */
     690            if (   pGroupItem->isContainsLockedMachine()
     691                && !m_groupItems.contains(pItem))
    697692                return false;
    698             pTestedItem = pParentOfTestedWidget;
    699         }
    700 
    701         /* Allow finally: */
    702         return true;
     693            /* Make sure passed group is not 'this': */
     694            if (pItem == this)
     695                return false;
     696            /* Make sure passed group is not among our parents: */
     697            const UIChooserItem *pTestedItem = this;
     698            while (UIChooserItem *pParentOfTestedWidget = pTestedItem->parentItem())
     699            {
     700                if (pItem == pParentOfTestedWidget)
     701                    return false;
     702                pTestedItem = pParentOfTestedWidget;
     703            }
     704
     705            /* Allow finally: */
     706            return true;
     707        }
     708        /* For cloud items: */
     709        else
     710        if (   node()->toGroupNode()->groupType() == UIChooserNodeGroupType_Provider
     711            && pItem->node()->toGroupNode()->groupType() == UIChooserNodeGroupType_Profile)
     712        {
     713            /* Make sure passed item is ours: */
     714            return m_groupItems.contains(pItem);
     715        }
    703716    }
    704717    else if (pMimeData->hasFormat(UIChooserItemMachine::className()))
     
    710723        UIChooserItemMachine *pMachineItem = pItem->toMachineItem();
    711724
    712         /* Make sure passed machine isn't immutable within own group: */
    713         if (   pMachineItem->isLockedMachine()
    714             && !m_machineItems.contains(pItem))
    715             return false;
    716         switch (pEvent->proposedAction())
    717         {
    718             case Qt::MoveAction:
     725        /* For local items: */
     726        if (   node()->toGroupNode()->groupType() == UIChooserNodeGroupType_Local
     727            && pMachineItem->node()->toMachineNode()->cache()->itemType() == UIVirtualMachineItem::ItemType_Local)
     728        {
     729            /* Make sure passed machine isn't immutable within own group: */
     730            if (   pMachineItem->isLockedMachine()
     731                && !m_machineItems.contains(pItem))
     732                return false;
     733            switch (pEvent->proposedAction())
    719734            {
    720                 /* Make sure passed item is ours or there is no other item with such id: */
    721                 return m_machineItems.contains(pItem) || !isContainsMachine(pMachineItem->id());
     735                case Qt::MoveAction:
     736                {
     737                    /* Make sure passed item is ours or there is no other item with such id: */
     738                    return m_machineItems.contains(pItem) || !isContainsMachine(pMachineItem->id());
     739                }
     740                case Qt::CopyAction:
     741                {
     742                    /* Make sure there is no other item with such id: */
     743                    return !isContainsMachine(pMachineItem->id());
     744                }
     745                default:
     746                    break;
    722747            }
    723             case Qt::CopyAction:
    724             {
    725                 /* Make sure there is no other item with such id: */
    726                 return !isContainsMachine(pMachineItem->id());
    727             }
    728             default:
    729                 break;
     748        }
     749        /* For cloud items: */
     750        else
     751        if (   node()->toGroupNode()->groupType() == UIChooserNodeGroupType_Profile
     752            && pMachineItem->node()->toMachineNode()->cache()->itemType() == UIVirtualMachineItem::ItemType_CloudReal)
     753        {
     754            /* Make sure passed item is ours: */
     755            return m_machineItems.contains(pItem);
    730756        }
    731757    }
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp

    r83883 r83884  
    394394        UIChooserItemMachine *pMachineItem = pItem->toMachineItem();
    395395
     396        /* No drops for cloud items: */
     397        if (   node()->toMachineNode()->cache()->itemType() != UIVirtualMachineItem::ItemType_Local
     398            || pMachineItem->node()->toMachineNode()->cache()->itemType() != UIVirtualMachineItem::ItemType_Local)
     399            return false;
    396400        /* No drops for immutable item: */
    397401        if (pMachineItem->isLockedMachine())
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNode.h

    r83672 r83884  
    105105    virtual void updateAllNodes(const QUuid &uId) = 0;
    106106
    107     /** Returns whether this node is a cloud node itself
    108       * or contains at least one cloud VM node child. */
    109     virtual bool hasAtLeastOneCloudNode() const = 0;
    110 
    111107    /** Returns node position. */
    112108    int position();
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNodeGlobal.cpp

    r83672 r83884  
    118118}
    119119
    120 bool UIChooserNodeGlobal::hasAtLeastOneCloudNode() const
    121 {
    122     return false;
    123 }
    124 
    125120int UIChooserNodeGlobal::positionOf(UIChooserNode *pNode)
    126121{
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNodeGlobal.h

    r83672 r83884  
    7777    virtual void updateAllNodes(const QUuid &uId) /* override */;
    7878
    79     /** Returns whether this node is a cloud node itself
    80       * or contains at least one cloud VM node child. */
    81     virtual bool hasAtLeastOneCloudNode() const /* override */;
    82 
    8379    /** Returns position of specified node inside this one. */
    8480    virtual int positionOf(UIChooserNode *pNode) /* override */;
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNodeGroup.cpp

    r83673 r83884  
    178178    foreach (UIChooserNode *pNode, nodes())
    179179        pNode->updateAllNodes(uId);
    180 }
    181 
    182 bool UIChooserNodeGroup::hasAtLeastOneCloudNode() const
    183 {
    184     foreach (UIChooserNode *pNode, m_nodesGroup)
    185         if (pNode->hasAtLeastOneCloudNode())
    186             return true;
    187 
    188     foreach (UIChooserNode *pNode, m_nodesMachine)
    189         if (pNode->hasAtLeastOneCloudNode())
    190             return true;
    191 
    192     return false;
    193180}
    194181
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNodeGroup.h

    r83673 r83884  
    8181    virtual void updateAllNodes(const QUuid &uId) /* override */;
    8282
    83     /** Returns whether this node is a cloud node itself
    84       * or contains at least one cloud VM node child. */
    85     virtual bool hasAtLeastOneCloudNode() const /* override */;
    86 
    8783    /** Returns position of specified node inside this one. */
    8884    virtual int positionOf(UIChooserNode *pNode) /* override */;
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNodeMachine.cpp

    r83881 r83884  
    188188    if (item())
    189189        item()->updateItem();
    190 }
    191 
    192 bool UIChooserNodeMachine::hasAtLeastOneCloudNode() const
    193 {
    194     return cache()->itemType() != UIVirtualMachineItem::ItemType_Local;
    195190}
    196191
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserNodeMachine.h

    r83672 r83884  
    9696    virtual void updateAllNodes(const QUuid &uId) /* override */;
    9797
    98     /** Returns whether this node is a cloud node itself
    99       * or contains at least one cloud VM node child. */
    100     virtual bool hasAtLeastOneCloudNode() const /* override */;
    101 
    10298    /** Returns position of specified node inside this one. */
    10399    virtual int positionOf(UIChooserNode *pNode) /* override */;
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