VirtualBox

Changeset 71531 in vbox


Ignore:
Timestamp:
Mar 28, 2018 7:25:36 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
121507
Message:

FE/Qt: bugref:6699 Show the host file objects properties better when there is a multiple selection

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

Legend:

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

    r71523 r71531  
    688688        return objectInfo;
    689689
    690     //objectInfo << QString(UIGuestControlInterface::getFsObjTypeString(fsObjectInfo.GetType()).append("\t"));
    691690    objectInfo << fsObjectInfo.GetName();
    692     //objectInfo << QString::number(fsObjectInfo.GetObjectSize());
    693 
    694     /* Currently I dont know a way to convert these into a meaningful date/time: */
    695     // strObjectInfo.append("BirthTime", QString::number(fsObjectInfo.GetBirthTime()));
    696     // strObjectInfo.append("ChangeTime", QString::number(fsObjectInfo.GetChangeTime()));
    697691
    698692    return objectInfo;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp

    r71509 r71531  
    4545signals:
    4646
    47     void sigResultUpdated(UIDirectoryStatistics, QString);
     47    void sigResultUpdated(UIDirectoryStatistics);
    4848
    4949public:
    5050
    51     UIHostDirectoryDiskUsageComputer(QObject *parent, QString strStartPath);
     51    UIHostDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath);
    5252    void stopRecursion();
    5353
     
    5858    void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics);
    5959    void                  run();
    60     QString               m_strStartPath;
     60    QStringList           m_pathList;
    6161    UIDirectoryStatistics m_resultStatistics;
    6262    bool                  m_bContinueRunning;
     
    6969*********************************************************************************************************************************/
    7070
    71 UIHostDirectoryDiskUsageComputer::UIHostDirectoryDiskUsageComputer(QObject *parent, QString strStartPath)
     71UIHostDirectoryDiskUsageComputer::UIHostDirectoryDiskUsageComputer(QObject *parent, QStringList pathList)
    7272    :QThread(parent)
    73     , m_strStartPath(strStartPath)
     73    , m_pathList(pathList)
    7474    , m_bContinueRunning(true)
    7575{
     
    7878void UIHostDirectoryDiskUsageComputer::run()
    7979{
    80     directoryStatisticsRecursive(m_strStartPath, m_resultStatistics);
     80    for (int i = 0; i < m_pathList.size(); ++i)
     81        directoryStatisticsRecursive(m_pathList[i], m_resultStatistics);
    8182}
    8283
     
    8485void UIHostDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
    8586{
     87
     88    if (!m_bContinueRunning)
     89        return;
     90    QFileInfo fileInfo(path);
     91    if (!fileInfo.exists())
     92        return;
     93    /* if the object is a file or a symlink then read the size and return: */
     94    if (fileInfo.isFile())
     95    {
     96        statistics.m_totalSize += fileInfo.size();
     97        ++statistics.m_uFileCount;
     98        sigResultUpdated(statistics);
     99        return;
     100    }
     101    else if (fileInfo.isSymLink())
     102    {
     103        statistics.m_totalSize += fileInfo.size();
     104        ++statistics.m_uSymlinkCount;
     105        sigResultUpdated(statistics);
     106        return;
     107    }
     108
     109    /* if it is a directory then read the content: */
    86110    QDir dir(path);
    87111    if (!dir.exists())
    88112        return;
    89 
    90     if (!m_bContinueRunning)
    91         return;
    92 
    93     sigResultUpdated(statistics, path);
    94113
    95114    QFileInfoList entryList = dir.entryInfoList();
     
    110129        }
    111130    }
     131    sigResultUpdated(statistics);
    112132}
    113133
     
    313333        propertyString += "<b>Owner:</b> " + fileInfo.owner();
    314334
    315         // if (fileInfo.isDir())
    316         // {
    317         //     propertyString += "<br/>";
    318         //     UIDirectoryStatistics directoryStatistics;
    319         //     directoryStatisticsRecursive(fileInfo.absoluteFilePath(), directoryStatistics);
    320         //     propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
    321         //     if (directoryStatistics.m_totalSize >= m_iKiloByte)
    322         //         propertyString += " (" + humanReadableSize(directoryStatistics.m_totalSize) + ")";
    323         //     propertyString += "<br/>";
    324         //     propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
    325         // }
     335        return propertyString;
     336    }
     337    else
     338    {
     339        int fileCount = 0;
     340        int directoryCount = 0;
     341        ULONG64 totalSize = 0;
     342
     343        for(int i = 0; i < selectedObjects.size(); ++i)
     344        {
     345            QFileInfo fileInfo(selectedObjects.at(i));
     346            if (!fileInfo.exists())
     347                continue;
     348            if (fileInfo.isFile())
     349                ++fileCount;
     350            if (fileInfo.isDir())
     351                ++directoryCount;
     352            totalSize += fileInfo.size();
     353        }
     354        QString propertyString;
     355        propertyString += "<b>Selected:</b> " + QString::number(fileCount) + " files ";
     356        propertyString += "and " + QString::number(directoryCount) + " directories";
     357        propertyString += "<br/>";
     358        propertyString += "<b>Size:</b> " + QString::number(totalSize) + QString(" bytes");
     359        if (totalSize >= m_iKiloByte)
     360            propertyString += " (" + humanReadableSize(totalSize) + ")";
     361
     362
    326363        return propertyString;
    327364    }
     
    343380
    344381    QStringList selectedObjects = selectedItemPathList();
    345     if (selectedObjects.size() == 1)
    346     {
    347         QFileInfo fileInfo(selectedObjects.at(0));
    348         if (fileInfo.exists() && fileInfo.isDir())
    349         {
    350             directoryThread = new UIHostDirectoryDiskUsageComputer(this, fileInfo.absoluteFilePath());
    351             if (directoryThread)
    352             {
    353                 connect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
    354                         this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
    355                 directoryThread->start();
    356             }
    357 
     382    if ((selectedObjects.size() == 1 && QFileInfo(selectedObjects.at(0)).isDir())
     383        || selectedObjects.size() > 1)
     384    {
     385        directoryThread = new UIHostDirectoryDiskUsageComputer(this, selectedObjects);
     386        if (directoryThread)
     387        {
     388            connect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
     389                    this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
     390            directoryThread->start();
    358391        }
    359392    }
     
    376409}
    377410
    378 void UIHostFileTable::sltReceiveDirectoryStatistics(UIDirectoryStatistics statistics, QString path)
     411void UIHostFileTable::sltReceiveDirectoryStatistics(UIDirectoryStatistics statistics)
    379412{
    380413    if (!m_pPropertiesDialog)
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.h

    r71505 r71531  
    4646private slots:
    4747
    48     void sltReceiveDirectoryStatistics(UIDirectoryStatistics statictics, QString path);
     48    void sltReceiveDirectoryStatistics(UIDirectoryStatistics statictics);
    4949
    5050private:
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