VirtualBox

Ignore:
Timestamp:
Mar 21, 2018 11:07:34 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
121388
Message:

FE/Qt: bugref:6699 Disable cut, copy, and paste actions for host file table

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.cpp

    r71412 r71421  
    3838# include "QIMessageBox.h"
    3939# include "UIErrorString.h"
     40# include "UIGuestFileTable.h"
    4041# include "UIIconPool.h"
    4142# include "UIGuestControlFileTable.h"
     
    257258    if (!menu)
    258259        return;
     260    /* I know this is ugly: */
     261    bool isGuestFileTable = qobject_cast<UIGuestFileTable*>(parent());
    259262
    260263    QAction *pActionGoUp = menu->addAction(UIVMInformationDialog::tr("Go up"));
     
    303306    }
    304307
    305     QAction *pActionCopy = menu->addAction(UIVMInformationDialog::tr("Copy"));
    306     if (pActionCopy)
    307     {
    308         pActionCopy->setIcon(UIIconPool::iconSet(QString(":/fd_copy_22px.png")));
    309         pActionCopy->setEnabled(selectionAvaible);
    310         connect(pActionCopy, &QAction::triggered, this, &UIGuestControlFileView::sigCopy);
    311     }
    312 
    313     QAction *pActionCut = menu->addAction(UIVMInformationDialog::tr("Cut"));
    314     if (pActionCut)
    315     {
    316         pActionCut->setIcon(UIIconPool::iconSet(QString(":/fd_move_22px.png")));
    317         pActionCut->setEnabled(selectionAvaible);
    318         connect(pActionCut, &QAction::triggered, this, &UIGuestControlFileView::sigCut);
    319     }
    320 
    321     QAction *pActionPaste = menu->addAction(UIVMInformationDialog::tr("Paste"));
    322     if (pActionPaste)
    323     {
    324         pActionPaste->setIcon(UIIconPool::iconSet(QString(":/shared_clipboard_16px.png")));
    325         connect(pActionPaste, &QAction::triggered, this, &UIGuestControlFileView::sigPaste);
     308    QAction *pActionCopy = 0;
     309    QAction *pActionCut = 0;
     310    QAction *pActionPaste = 0;
     311
     312    if (isGuestFileTable)
     313    {
     314        pActionCopy = menu->addAction(UIVMInformationDialog::tr("Copy"));
     315        if (pActionCopy)
     316        {
     317            pActionCopy->setIcon(UIIconPool::iconSet(QString(":/fd_copy_22px.png")));
     318            pActionCopy->setEnabled(selectionAvaible);
     319            connect(pActionCopy, &QAction::triggered, this, &UIGuestControlFileView::sigCopy);
     320        }
     321
     322        pActionCut = menu->addAction(UIVMInformationDialog::tr("Cut"));
     323        if (pActionCut)
     324        {
     325            pActionCut->setIcon(UIIconPool::iconSet(QString(":/fd_move_22px.png")));
     326            pActionCut->setEnabled(selectionAvaible);
     327            connect(pActionCut, &QAction::triggered, this, &UIGuestControlFileView::sigCut);
     328        }
     329
     330        pActionPaste = menu->addAction(UIVMInformationDialog::tr("Paste"));
     331        if (pActionPaste)
     332        {
     333            pActionPaste->setIcon(UIIconPool::iconSet(QString(":/shared_clipboard_16px.png")));
     334            connect(pActionPaste, &QAction::triggered, this, &UIGuestControlFileView::sigPaste);
     335        }
    326336    }
    327337
     
    349359    if (pActionCreateNewDirectory)
    350360        disconnect(pActionCreateNewDirectory, &QAction::triggered, this, &UIGuestControlFileView::sigCreateNewDirectory);
    351     if (pActionCopy)
    352         disconnect(pActionCopy, &QAction::triggered, this, &UIGuestControlFileView::sigCopy);
    353     if (pActionCut)
    354         disconnect(pActionCut, &QAction::triggered, this, &UIGuestControlFileView::sigCut);
    355     if (pActionPaste)
    356         disconnect(pActionPaste, &QAction::triggered, this, &UIGuestControlFileView::sigPaste);
     361    if (isGuestFileTable)
     362    {
     363        if (pActionCopy)
     364            disconnect(pActionCopy, &QAction::triggered, this, &UIGuestControlFileView::sigCopy);
     365        if (pActionCut)
     366            disconnect(pActionCut, &QAction::triggered, this, &UIGuestControlFileView::sigCut);
     367        if (pActionPaste)
     368            disconnect(pActionPaste, &QAction::triggered, this, &UIGuestControlFileView::sigPaste);
     369    }
    357370    if (pActionShowProperties)
    358371        disconnect(pActionShowProperties, &QAction::triggered, this, &UIGuestControlFileView::sigShowProperties);
     
    439452
    440453/*********************************************************************************************************************************
     454*   UIDirectoryStatistics implementation.
     455                                                                                        *
     456*********************************************************************************************************************************/
     457
     458UIDirectoryStatistics::UIDirectoryStatistics()
     459    : m_totalSize(0)
     460    , m_uFileCount(0)
     461    , m_uDirectoryCount(0)
     462    , m_uSymlinkCount(0)
     463{}
     464
     465
     466/*********************************************************************************************************************************
    441467*   UIFileTableItem implementation.                                                                                              *
    442468*********************************************************************************************************************************/
    443 
    444469
    445470UIFileTableItem::UIFileTableItem(const QList<QVariant> &data,
     
    603628    , m_pModel(0)
    604629    , m_pLocationLabel(0)
     630    , m_iKiloByte(1000)
     631    , m_pCopy(0)
     632    , m_pCut(0)
     633    , m_pPaste(0)
    605634    , m_pMainLayout(0)
    606635    , m_pCurrentLocationEdit(0)
     
    612641    , m_pRename(0)
    613642    , m_pCreateNewDirectory(0)
    614     , m_pCopy(0)
    615     , m_pCut(0)
    616     , m_pPaste(0)
    617643    , m_pShowProperties(0)
    618 
    619644{
    620645    prepareObjects();
     
    690715        /* Minimize the row height: */
    691716        m_pView->verticalHeader()->setDefaultSectionSize(m_pView->verticalHeader()->minimumSectionSize());
    692         /* Make the columns take all the avaible space: */
    693         //m_pView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    694717
    695718        connect(m_pView, &UIGuestControlFileView::doubleClicked,
     
    847870
    848871    QList<QVariant> headData;
    849     headData << "Name" << "Size" << "Change Time";
     872    headData << "Name" << "Size" << "Change Time" << "Owner";
    850873    m_pRootItem = new UIFileTableItem(headData, 0, FileObjectType_Directory);
    851874    QList<QVariant> startDirData;
    852     startDirData << "/" << 4096 << QDateTime();
     875    startDirData << "/" << 4096 << QDateTime() << "";
    853876    UIFileTableItem* startItem = new UIFileTableItem(startDirData, m_pRootItem, FileObjectType_Directory);
    854877
     
    858881    startItem->setIsOpened(false);
    859882    /* Read the root directory and get the list: */
    860 
    861883    readDirectory("/", startItem, true);
    862884    m_pView->setRootIndex(m_pModel->rootIndex());
     
    874896        {
    875897            QList<QVariant> data;
    876             data << ".." << 4096;
     898            data << ".." << 4096 << "";
    877899            UIFileTableItem *item = new UIFileTableItem(data, parent, FileObjectType_Directory);
    878900            item->setIsOpened(false);
     
    13381360    double dSize = size;
    13391361    const char* units[] = {" B", " kB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"};
    1340     while (size > 1024) {
    1341         size /= 1024;
    1342         dSize /= (double)1024;
     1362    while (size > m_iKiloByte) {
     1363        size /= m_iKiloByte;
     1364        dSize /= (double) m_iKiloByte;
    13431365        i++;
    13441366    }
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.h

    r71412 r71421  
    116116    void setIsTargetADirectory(bool flag);
    117117
     118    const QString &owner() const;
     119    void setOwner(const QString &owner);
     120
    118121private:
     122
    119123    QList<UIFileTableItem*>         m_childItems;
    120124    /** Used to find children by path */
     
    133137};
    134138
     139class UIDirectoryStatistics
     140{
     141public:
     142    UIDirectoryStatistics();
     143    ULONG64    m_totalSize;
     144    unsigned   m_uFileCount;
     145    unsigned   m_uDirectoryCount;
     146    unsigned   m_uSymlinkCount;
     147};
    135148
    136149/** This class serves a base class for file table. Currently a guest version
     
    182195    void keyPressEvent(QKeyEvent * pEvent);
    183196    CGuestFsObjInfo guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const;
    184     static QString humanReadableSize(ULONG64 size);
     197    QString humanReadableSize(ULONG64 size);
    185198
    186199    UIFileTableItem         *m_pRootItem;
     
    189202    UIGuestControlFileModel *m_pModel;
    190203    QILabel                 *m_pLocationLabel;
     204    const unsigned           m_iKiloByte;
     205    QAction                 *m_pCopy;
     206    QAction                 *m_pCut;
     207    QAction                 *m_pPaste;
     208
    191209
    192210private slots:
     
    225243    QAction         *m_pRename;
    226244    QAction         *m_pCreateNewDirectory;
    227     QAction         *m_pCopy;
    228     QAction         *m_pCut;
    229     QAction         *m_pPaste;
    230245    QAction         *m_pShowProperties;
    231246    /** The vector of action which need some selection to work on like cut, copy etc. */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.cpp

    r71412 r71421  
    8787            QDateTime changeTime = QDateTime::fromMSecsSinceEpoch(fsInfo.GetChangeTime()/1000000);
    8888
    89             data << fsInfo.GetName() << static_cast<qulonglong>(fsInfo.GetObjectSize()) << changeTime;
     89            data << fsInfo.GetName() << static_cast<qulonglong>(fsInfo.GetObjectSize())
     90                 << changeTime << fsInfo.GetUserName();
    9091            FileObjectType fsObjectType = fileType(fsInfo);
    9192            UIFileTableItem *item = new UIFileTableItem(data, parent, fsObjectType);
     93            if (!item)
     94                continue;
    9295            item->setPath(UIPathOperations::mergePaths(strPath, fsInfo.GetName()));
     96
    9397            if (fsObjectType == FileObjectType_Directory)
    9498            {
     
    147151    if (!startDirItem)
    148152        return;
    149 
     153    //printf("user home %s\n", m_comGuestSession.GetUserHome().toStdString().c_str());
    150154    QString userHome = UIPathOperations::sanitize(m_comGuestSession.GetUserHome()).remove(0,1);
    151155
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp

    r71412 r71421  
    2121
    2222/* Qt includes: */
     23# include <QAction>
    2324# include <QDateTime>
    2425# include <QDir>
     
    3637    initializeFileTree();
    3738    retranslateUi();
     39    prepareActions();
    3840}
    3941
     
    4345        m_pLocationLabel->setText(UIVMInformationDialog::tr("Host System"));
    4446    UIGuestControlFileTable::retranslateUi();
     47}
     48
     49void UIHostFileTable::prepareActions()
     50{
     51    /* Hide cut, copy, and paste for now. We will implement those
     52       when we have an API for host file operations: */
     53    if (m_pCopy)
     54        m_pCopy->setVisible(false);
     55    if (m_pCut)
     56        m_pCut->setVisible(false);
     57    if (m_pPaste)
     58        m_pPaste->setVisible(false);
    4559}
    4660
     
    6478
    6579        QList<QVariant> data;
    66         data << fileInfo.fileName() << fileInfo.size() << fileInfo.lastModified();
     80        data << fileInfo.fileName() << fileInfo.size()
     81             << fileInfo.lastModified() << fileInfo.owner();
    6782        UIFileTableItem *item = new UIFileTableItem(data, parent, fileType(fileInfo));
     83        if (!item)
     84            continue;
    6885        item->setPath(fileInfo.absoluteFilePath());
    6986        /* if the item is a symlink set the target path and
     
    194211        /* Size: */
    195212        propertyString += "<b>Size:</b> " + QString::number(fileInfo.size()) + QString(" bytes");
    196         if (fileInfo.size() >= 1024)
     213        if (fileInfo.size() >= m_iKiloByte)
    197214            propertyString += " (" + humanReadableSize(fileInfo.size()) + ")";
    198215        propertyString += "<br/>";
     
    210227
    211228        if (fileInfo.isDir())
    212             directoryStatisticsRecursive(fileInfo.absoluteFilePath());
     229        {
     230            propertyString += "<br/>";
     231            UIDirectoryStatistics directoryStatistics;
     232            directoryStatisticsRecursive(fileInfo.absoluteFilePath(), directoryStatistics);
     233            propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
     234            if (directoryStatistics.m_totalSize >= m_iKiloByte)
     235                propertyString += " (" + humanReadableSize(directoryStatistics.m_totalSize) + ")";
     236            propertyString += "<br/>";
     237            propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
     238
     239        }
    213240        return propertyString;
    214241    }
     
    216243}
    217244
    218 void UIHostFileTable::directoryStatisticsRecursive(const QString &path)
     245/** @todo Move the following function to a worker thread as it may take atbitrarly long time */
     246void UIHostFileTable::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
    219247{
    220248    QDir dir(path);
     
    225253    for (int i = 0; i < entryList.size(); ++i)
    226254    {
    227 
    228255        const QFileInfo &entryInfo = entryList.at(i);
    229256        if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." || entryInfo.baseName() == "..")
    230257            continue;
    231 
     258        statistics.m_totalSize += entryInfo.size();
    232259        if (entryInfo.isSymLink())
    233             continue;
    234         if (entryInfo.isDir())
    235         {
    236             directoryStatisticsRecursive(entryInfo.absoluteFilePath());
    237         }
    238     }
    239 }
     260            statistics.m_uSymlinkCount++;
     261        else if(entryInfo.isFile())
     262            statistics.m_uFileCount++;
     263        else if (entryInfo.isDir())
     264        {
     265            statistics.m_uDirectoryCount++;
     266            directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics);
     267        }
     268    }
     269}
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.h

    r71412 r71421  
    4747    /** Read the directory with the path @p path recursively and collect #of objects and
    4848        total size */
    49     void directoryStatisticsRecursive(const QString &path);
     49    void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics);
     50    void prepareActions();
    5051
    5152};
Note: See TracChangeset for help on using the changeset viewer.

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