Changeset 71505 in vbox
- Timestamp:
- Mar 26, 2018 9:03:32 AM (7 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 8 edited
-
Makefile.kmk (modified) (1 diff)
-
src/runtime/guestctrl/UIGuestControlFileManager.cpp (modified) (1 diff)
-
src/runtime/guestctrl/UIGuestControlFileTable.cpp (modified) (6 diffs)
-
src/runtime/guestctrl/UIGuestControlFileTable.h (modified) (8 diffs)
-
src/runtime/guestctrl/UIGuestFileTable.cpp (modified) (1 diff)
-
src/runtime/guestctrl/UIGuestFileTable.h (modified) (1 diff)
-
src/runtime/guestctrl/UIHostFileTable.cpp (modified) (4 diffs)
-
src/runtime/guestctrl/UIHostFileTable.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r71392 r71505 599 599 src/runtime/guestctrl/UIGuestControlFileManager.cpp \ 600 600 src/runtime/guestctrl/UIGuestControlFileTable.cpp \ 601 src/runtime/guestctrl/UI GuestControlWidget.cpp \601 src/runtime/guestctrl/UIHostFileTable.cpp \ 602 602 src/selector/UIActionPoolSelector.cpp \ 603 603 src/selector/UIDesktopPane.cpp \ -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileManager.cpp
r71467 r71505 348 348 m_pMainLayout->addWidget(m_pVerticalSplitter); 349 349 m_pVerticalSplitter->setOrientation(Qt::Vertical); 350 m_pVerticalSplitter->setHandleWidth( 2);350 m_pVerticalSplitter->setHandleWidth(4); 351 351 } 352 352 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.cpp
r71467 r71505 128 128 }; 129 129 130 /*********************************************************************************************************************************131 * UIPropertiesDialog definition. *132 *********************************************************************************************************************************/133 134 /** A QIDialog child to display properties of a file object */135 class UIPropertiesDialog : public QIDialog136 {137 138 Q_OBJECT;139 140 public:141 142 UIPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);143 void setPropertyText(const QString &strProperty);144 145 private:146 147 QVBoxLayout *m_pMainLayout;148 QTextEdit *m_pInfoEdit;149 150 };151 152 130 153 131 /********************************************************************************************************************************* … … 452 430 if (!m_pInfoEdit) 453 431 return; 454 455 m_pInfoEdit->setText(strProperty); 456 } 457 432 m_strProperty = strProperty; 433 m_pInfoEdit->setHtml(strProperty); 434 } 435 436 void UIPropertiesDialog::addDirectoryStatistics(UIDirectoryStatistics directoryStatistics) 437 { 438 if (!m_pInfoEdit) 439 return; 440 // QString propertyString = m_pInfoEdit->toHtml(); 441 // propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes"); 442 // if (directoryStatistics.m_totalSize >= UIGuestControlFileTable::m_iKiloByte) 443 // propertyString += " (" + UIGuestControlFileTable::humanReadableSize(directoryStatistics.m_totalSize) + ")"; 444 // propertyString += "<br/>"; 445 // propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount); 446 447 // m_pInfoEdit->setHtml(propertyString); 448 449 QString detailsString(m_strProperty); 450 detailsString += "<br/>"; 451 detailsString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes"); 452 if (directoryStatistics.m_totalSize >= UIGuestControlFileTable::m_iKiloByte) 453 detailsString += " (" + UIGuestControlFileTable::humanReadableSize(directoryStatistics.m_totalSize) + ")"; 454 detailsString += "<br/>"; 455 456 detailsString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount); 457 458 m_pInfoEdit->setHtml(detailsString); 459 460 } 458 461 459 462 /********************************************************************************************************************************* … … 635 638 * UIGuestControlFileTable implementation. * 636 639 *********************************************************************************************************************************/ 637 640 const unsigned UIGuestControlFileTable::m_iKiloByte = 1000; 638 641 UIGuestControlFileTable::UIGuestControlFileTable(QWidget *pParent /* = 0 */) 639 642 :QIWithRetranslateUI<QWidget>(pParent) … … 642 645 , m_pModel(0) 643 646 , m_pLocationLabel(0) 644 , m_iKiloByte(1000)645 647 , m_pCopy(0) 646 648 , m_pCut(0) … … 1135 1137 void UIGuestControlFileTable::sltShowProperties() 1136 1138 { 1137 QString fsPropertyString = fsObjectPropertyString(); 1138 if (fsPropertyString.isEmpty()) 1139 return; 1140 1141 UIPropertiesDialog *dialog = new UIPropertiesDialog(); 1142 if (!dialog) 1143 return; 1144 dialog->setWindowTitle("Properties"); 1145 dialog->setPropertyText(fsPropertyString); 1146 dialog->execute(); 1139 showProperties(); 1147 1140 } 1148 1141 … … 1381 1374 } 1382 1375 1383 QString UIGuestControlFileTable::humanReadableSize(ULONG64 size)1376 /* static */ QString UIGuestControlFileTable::humanReadableSize(ULONG64 size) 1384 1377 { 1385 1378 int i = 0; -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.h
r71439 r71505 27 27 28 28 /* GUI includes: */ 29 #include "QIDialog.h" 29 30 #include "QITableView.h" 30 31 #include "QIWithRetranslateUI.h" … … 33 34 class QAction; 34 35 class QFileInfo; 36 35 37 class QILabel; 36 38 class QILineEdit; 37 39 class QGridLayout; 40 class QTextEdit; 41 class QVBoxLayout; 38 42 class UIFileTableItem; 39 43 class UIGuestControlFileModel; … … 49 53 FileObjectType_Unknown, 50 54 FileObjectType_Max 55 }; 56 57 class UIDirectoryStatistics 58 { 59 public: 60 UIDirectoryStatistics(); 61 ULONG64 m_totalSize; 62 unsigned m_uFileCount; 63 unsigned m_uDirectoryCount; 64 unsigned m_uSymlinkCount; 65 }; 66 67 Q_DECLARE_METATYPE(UIDirectoryStatistics); 68 69 /** A QIDialog child to display properties of a file object */ 70 class UIPropertiesDialog : public QIDialog 71 { 72 73 Q_OBJECT; 74 75 public: 76 77 UIPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0); 78 void setPropertyText(const QString &strProperty); 79 void addDirectoryStatistics(UIDirectoryStatistics statictics); 80 81 private: 82 83 QVBoxLayout *m_pMainLayout; 84 QTextEdit *m_pInfoEdit; 85 QString m_strProperty; 51 86 }; 52 87 … … 144 179 }; 145 180 146 class UIDirectoryStatistics147 {148 public:149 UIDirectoryStatistics();150 ULONG64 m_totalSize;151 unsigned m_uFileCount;152 unsigned m_uDirectoryCount;153 unsigned m_uSymlinkCount;154 };155 181 156 182 /** This class serves a base class for file table. Currently a guest version … … 178 204 QStringList selectedItemPathList(); 179 205 virtual void refresh(); 206 207 static const unsigned m_iKiloByte; 208 static QString humanReadableSize(ULONG64 size); 209 180 210 181 211 protected: … … 193 223 virtual bool createDirectory(const QString &path, const QString &directoryName) = 0; 194 224 virtual QString fsObjectPropertyString() = 0; 225 virtual void showProperties() = 0; 195 226 static QString fileTypeString(FileObjectType type); 196 227 void goIntoDirectory(const QModelIndex &itemIndex); … … 202 233 void keyPressEvent(QKeyEvent * pEvent); 203 234 CGuestFsObjInfo guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const; 204 QString humanReadableSize(ULONG64 size);205 235 206 236 UIFileTableItem *m_pRootItem; … … 209 239 UIGuestControlFileModel *m_pModel; 210 240 QILabel *m_pLocationLabel; 211 const unsigned m_iKiloByte;212 241 QAction *m_pCopy; 213 242 QAction *m_pCut; -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.cpp
r71467 r71505 329 329 return QString(); 330 330 } 331 332 void UIGuestFileTable::showProperties() 333 { 334 QString fsPropertyString = fsObjectPropertyString(); 335 if (fsPropertyString.isEmpty()) 336 return; 337 338 UIPropertiesDialog *dialog = new UIPropertiesDialog(); 339 if (!dialog) 340 return; 341 dialog->setWindowTitle("Properties"); 342 dialog->setPropertyText(fsPropertyString); 343 dialog->execute(); 344 delete dialog; 345 } -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.h
r71388 r71505 48 48 virtual bool createDirectory(const QString &path, const QString &directoryName); 49 49 virtual QString fsObjectPropertyString() /* override */; 50 50 virtual void showProperties() /* override */; 51 51 private: 52 52 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp
r71467 r71505 24 24 # include <QDateTime> 25 25 # include <QDir> 26 # include <QMutex> 27 # include <QThread> 26 28 27 29 /* GUI includes: */ … … 32 34 33 35 36 /********************************************************************************************************************************* 37 * UIHostDirectoryDiskUsageComputer definition. * 38 *********************************************************************************************************************************/ 39 40 /** Open directories recursively and sum the disk usage. Don't block the GUI thread while doing this */ 41 class UIHostDirectoryDiskUsageComputer : public QThread 42 { 43 Q_OBJECT; 44 45 signals: 46 47 void sigResultUpdated(UIDirectoryStatistics, QString); 48 49 public: 50 51 UIHostDirectoryDiskUsageComputer(QObject *parent, QString strStartPath); 52 void stopRecursion(); 53 54 private: 55 56 /** Read the directory with the path @p path recursively and collect #of objects and 57 total size */ 58 void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics); 59 void run(); 60 QString m_strStartPath; 61 UIDirectoryStatistics m_resultStatistics; 62 bool m_bContinueRunning; 63 QMutex m_mutex; 64 }; 65 66 67 /********************************************************************************************************************************* 68 * UIHostDirectoryDiskUsageComputer implementation. * 69 *********************************************************************************************************************************/ 70 71 UIHostDirectoryDiskUsageComputer::UIHostDirectoryDiskUsageComputer(QObject *parent, QString strStartPath) 72 :QThread(parent) 73 , m_strStartPath(strStartPath) 74 , m_bContinueRunning(true) 75 { 76 } 77 78 void UIHostDirectoryDiskUsageComputer::run() 79 { 80 directoryStatisticsRecursive(m_strStartPath, m_resultStatistics); 81 } 82 83 /** @todo Move the following function to a worker thread as it may take atbitrarly long time */ 84 void UIHostDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) 85 { 86 QDir dir(path); 87 if (!dir.exists()) 88 return; 89 90 if (!m_bContinueRunning) 91 return; 92 93 sigResultUpdated(statistics, path); 94 95 QFileInfoList entryList = dir.entryInfoList(); 96 for (int i = 0; i < entryList.size(); ++i) 97 { 98 const QFileInfo &entryInfo = entryList.at(i); 99 if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." || entryInfo.baseName() == "..") 100 continue; 101 statistics.m_totalSize += entryInfo.size(); 102 if (entryInfo.isSymLink()) 103 statistics.m_uSymlinkCount++; 104 else if(entryInfo.isFile()) 105 statistics.m_uFileCount++; 106 else if (entryInfo.isDir()) 107 { 108 statistics.m_uDirectoryCount++; 109 directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics); 110 } 111 } 112 } 113 114 void UIHostDirectoryDiskUsageComputer::stopRecursion() 115 { 116 m_mutex.lock(); 117 m_bContinueRunning = false; 118 m_mutex.unlock(); 119 120 } 121 122 123 /********************************************************************************************************************************* 124 * UIHostFileTable implementation. * 125 *********************************************************************************************************************************/ 126 34 127 UIHostFileTable::UIHostFileTable(QWidget *pParent /* = 0 */) 35 128 :UIGuestControlFileTable(pParent) 129 , m_pPropertiesDialog(0) 36 130 { 37 131 initializeFileTree(); … … 219 313 propertyString += "<b>Owner:</b> " + fileInfo.owner(); 220 314 221 if (fileInfo.isDir()) 222 { 223 propertyString += "<br/>"; 224 UIDirectoryStatistics directoryStatistics; 225 directoryStatisticsRecursive(fileInfo.absoluteFilePath(), directoryStatistics); 226 propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes"); 227 if (directoryStatistics.m_totalSize >= m_iKiloByte) 228 propertyString += " (" + humanReadableSize(directoryStatistics.m_totalSize) + ")"; 229 propertyString += "<br/>"; 230 propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount); 231 232 } 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 // } 233 326 return propertyString; 234 327 } … … 236 329 } 237 330 238 /** @todo Move the following function to a worker thread as it may take atbitrarly long time */ 239 void UIHostFileTable::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) 240 { 241 QDir dir(path); 242 if (!dir.exists()) 243 return; 244 245 QFileInfoList entryList = dir.entryInfoList(); 246 for (int i = 0; i < entryList.size(); ++i) 247 { 248 const QFileInfo &entryInfo = entryList.at(i); 249 if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." || entryInfo.baseName() == "..") 250 continue; 251 statistics.m_totalSize += entryInfo.size(); 252 if (entryInfo.isSymLink()) 253 statistics.m_uSymlinkCount++; 254 else if(entryInfo.isFile()) 255 statistics.m_uFileCount++; 256 else if (entryInfo.isDir()) 257 { 258 statistics.m_uDirectoryCount++; 259 directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics); 260 } 261 } 262 } 331 void UIHostFileTable::showProperties() 332 { 333 qRegisterMetaType<UIDirectoryStatistics>(); 334 QString fsPropertyString = fsObjectPropertyString(); 335 if (fsPropertyString.isEmpty()) 336 return; 337 338 m_pPropertiesDialog = new UIPropertiesDialog(); 339 if (!m_pPropertiesDialog) 340 return; 341 342 UIHostDirectoryDiskUsageComputer *directoryThread = 0; 343 344 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 358 } 359 } 360 m_pPropertiesDialog->setWindowTitle("Properties"); 361 m_pPropertiesDialog->setPropertyText(fsPropertyString); 362 m_pPropertiesDialog->execute(); 363 if (directoryThread) 364 { 365 if (directoryThread->isRunning()) 366 { 367 directoryThread->stopRecursion(); 368 //directoryThread->wait(); 369 } 370 disconnect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated, 371 this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/); 372 //delete directoryThread; 373 } 374 delete m_pPropertiesDialog; 375 m_pPropertiesDialog = 0; 376 } 377 378 void UIHostFileTable::sltReceiveDirectoryStatistics(UIDirectoryStatistics statistics, QString path) 379 { 380 if (!m_pPropertiesDialog) 381 return; 382 m_pPropertiesDialog->addDirectoryStatistics(statistics); 383 } 384 385 #include "UIHostFileTable.moc" -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.h
r71421 r71505 42 42 virtual bool createDirectory(const QString &path, const QString &directoryName); 43 43 virtual QString fsObjectPropertyString() /* override */; 44 virtual void showProperties() /* override */; 45 46 private slots: 47 48 void sltReceiveDirectoryStatistics(UIDirectoryStatistics statictics, QString path); 44 49 45 50 private: 46 51 47 /** Read the directory with the path @p path recursively and collect #of objects and48 total size */49 void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics);50 52 void prepareActions(); 51 53 54 UIPropertiesDialog *m_pPropertiesDialog; 52 55 }; 53 56
Note:
See TracChangeset
for help on using the changeset viewer.

