Changeset 71421 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Mar 21, 2018 11:07:34 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 121388
- 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 38 38 # include "QIMessageBox.h" 39 39 # include "UIErrorString.h" 40 # include "UIGuestFileTable.h" 40 41 # include "UIIconPool.h" 41 42 # include "UIGuestControlFileTable.h" … … 257 258 if (!menu) 258 259 return; 260 /* I know this is ugly: */ 261 bool isGuestFileTable = qobject_cast<UIGuestFileTable*>(parent()); 259 262 260 263 QAction *pActionGoUp = menu->addAction(UIVMInformationDialog::tr("Go up")); … … 303 306 } 304 307 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 } 326 336 } 327 337 … … 349 359 if (pActionCreateNewDirectory) 350 360 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 } 357 370 if (pActionShowProperties) 358 371 disconnect(pActionShowProperties, &QAction::triggered, this, &UIGuestControlFileView::sigShowProperties); … … 439 452 440 453 /********************************************************************************************************************************* 454 * UIDirectoryStatistics implementation. 455 * 456 *********************************************************************************************************************************/ 457 458 UIDirectoryStatistics::UIDirectoryStatistics() 459 : m_totalSize(0) 460 , m_uFileCount(0) 461 , m_uDirectoryCount(0) 462 , m_uSymlinkCount(0) 463 {} 464 465 466 /********************************************************************************************************************************* 441 467 * UIFileTableItem implementation. * 442 468 *********************************************************************************************************************************/ 443 444 469 445 470 UIFileTableItem::UIFileTableItem(const QList<QVariant> &data, … … 603 628 , m_pModel(0) 604 629 , m_pLocationLabel(0) 630 , m_iKiloByte(1000) 631 , m_pCopy(0) 632 , m_pCut(0) 633 , m_pPaste(0) 605 634 , m_pMainLayout(0) 606 635 , m_pCurrentLocationEdit(0) … … 612 641 , m_pRename(0) 613 642 , m_pCreateNewDirectory(0) 614 , m_pCopy(0)615 , m_pCut(0)616 , m_pPaste(0)617 643 , m_pShowProperties(0) 618 619 644 { 620 645 prepareObjects(); … … 690 715 /* Minimize the row height: */ 691 716 m_pView->verticalHeader()->setDefaultSectionSize(m_pView->verticalHeader()->minimumSectionSize()); 692 /* Make the columns take all the avaible space: */693 //m_pView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);694 717 695 718 connect(m_pView, &UIGuestControlFileView::doubleClicked, … … 847 870 848 871 QList<QVariant> headData; 849 headData << "Name" << "Size" << "Change Time" ;872 headData << "Name" << "Size" << "Change Time" << "Owner"; 850 873 m_pRootItem = new UIFileTableItem(headData, 0, FileObjectType_Directory); 851 874 QList<QVariant> startDirData; 852 startDirData << "/" << 4096 << QDateTime() ;875 startDirData << "/" << 4096 << QDateTime() << ""; 853 876 UIFileTableItem* startItem = new UIFileTableItem(startDirData, m_pRootItem, FileObjectType_Directory); 854 877 … … 858 881 startItem->setIsOpened(false); 859 882 /* Read the root directory and get the list: */ 860 861 883 readDirectory("/", startItem, true); 862 884 m_pView->setRootIndex(m_pModel->rootIndex()); … … 874 896 { 875 897 QList<QVariant> data; 876 data << ".." << 4096 ;898 data << ".." << 4096 << ""; 877 899 UIFileTableItem *item = new UIFileTableItem(data, parent, FileObjectType_Directory); 878 900 item->setIsOpened(false); … … 1338 1360 double dSize = size; 1339 1361 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; 1343 1365 i++; 1344 1366 } -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.h
r71412 r71421 116 116 void setIsTargetADirectory(bool flag); 117 117 118 const QString &owner() const; 119 void setOwner(const QString &owner); 120 118 121 private: 122 119 123 QList<UIFileTableItem*> m_childItems; 120 124 /** Used to find children by path */ … … 133 137 }; 134 138 139 class UIDirectoryStatistics 140 { 141 public: 142 UIDirectoryStatistics(); 143 ULONG64 m_totalSize; 144 unsigned m_uFileCount; 145 unsigned m_uDirectoryCount; 146 unsigned m_uSymlinkCount; 147 }; 135 148 136 149 /** This class serves a base class for file table. Currently a guest version … … 182 195 void keyPressEvent(QKeyEvent * pEvent); 183 196 CGuestFsObjInfo guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const; 184 staticQString humanReadableSize(ULONG64 size);197 QString humanReadableSize(ULONG64 size); 185 198 186 199 UIFileTableItem *m_pRootItem; … … 189 202 UIGuestControlFileModel *m_pModel; 190 203 QILabel *m_pLocationLabel; 204 const unsigned m_iKiloByte; 205 QAction *m_pCopy; 206 QAction *m_pCut; 207 QAction *m_pPaste; 208 191 209 192 210 private slots: … … 225 243 QAction *m_pRename; 226 244 QAction *m_pCreateNewDirectory; 227 QAction *m_pCopy;228 QAction *m_pCut;229 QAction *m_pPaste;230 245 QAction *m_pShowProperties; 231 246 /** 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 87 87 QDateTime changeTime = QDateTime::fromMSecsSinceEpoch(fsInfo.GetChangeTime()/1000000); 88 88 89 data << fsInfo.GetName() << static_cast<qulonglong>(fsInfo.GetObjectSize()) << changeTime; 89 data << fsInfo.GetName() << static_cast<qulonglong>(fsInfo.GetObjectSize()) 90 << changeTime << fsInfo.GetUserName(); 90 91 FileObjectType fsObjectType = fileType(fsInfo); 91 92 UIFileTableItem *item = new UIFileTableItem(data, parent, fsObjectType); 93 if (!item) 94 continue; 92 95 item->setPath(UIPathOperations::mergePaths(strPath, fsInfo.GetName())); 96 93 97 if (fsObjectType == FileObjectType_Directory) 94 98 { … … 147 151 if (!startDirItem) 148 152 return; 149 153 //printf("user home %s\n", m_comGuestSession.GetUserHome().toStdString().c_str()); 150 154 QString userHome = UIPathOperations::sanitize(m_comGuestSession.GetUserHome()).remove(0,1); 151 155 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp
r71412 r71421 21 21 22 22 /* Qt includes: */ 23 # include <QAction> 23 24 # include <QDateTime> 24 25 # include <QDir> … … 36 37 initializeFileTree(); 37 38 retranslateUi(); 39 prepareActions(); 38 40 } 39 41 … … 43 45 m_pLocationLabel->setText(UIVMInformationDialog::tr("Host System")); 44 46 UIGuestControlFileTable::retranslateUi(); 47 } 48 49 void 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); 45 59 } 46 60 … … 64 78 65 79 QList<QVariant> data; 66 data << fileInfo.fileName() << fileInfo.size() << fileInfo.lastModified(); 80 data << fileInfo.fileName() << fileInfo.size() 81 << fileInfo.lastModified() << fileInfo.owner(); 67 82 UIFileTableItem *item = new UIFileTableItem(data, parent, fileType(fileInfo)); 83 if (!item) 84 continue; 68 85 item->setPath(fileInfo.absoluteFilePath()); 69 86 /* if the item is a symlink set the target path and … … 194 211 /* Size: */ 195 212 propertyString += "<b>Size:</b> " + QString::number(fileInfo.size()) + QString(" bytes"); 196 if (fileInfo.size() >= 1024)213 if (fileInfo.size() >= m_iKiloByte) 197 214 propertyString += " (" + humanReadableSize(fileInfo.size()) + ")"; 198 215 propertyString += "<br/>"; … … 210 227 211 228 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 } 213 240 return propertyString; 214 241 } … … 216 243 } 217 244 218 void UIHostFileTable::directoryStatisticsRecursive(const QString &path) 245 /** @todo Move the following function to a worker thread as it may take atbitrarly long time */ 246 void UIHostFileTable::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) 219 247 { 220 248 QDir dir(path); … … 225 253 for (int i = 0; i < entryList.size(); ++i) 226 254 { 227 228 255 const QFileInfo &entryInfo = entryList.at(i); 229 256 if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." || entryInfo.baseName() == "..") 230 257 continue; 231 258 statistics.m_totalSize += entryInfo.size(); 232 259 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 47 47 /** Read the directory with the path @p path recursively and collect #of objects and 48 48 total size */ 49 void directoryStatisticsRecursive(const QString &path); 49 void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics); 50 void prepareActions(); 50 51 51 52 };
Note:
See TracChangeset
for help on using the changeset viewer.