- Timestamp:
- Jul 14, 2023 2:13:03 PM (15 months ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/medium/viso
- Files:
-
- 3 edited
-
UIVisoContentBrowser.cpp (modified) (17 diffs)
-
UIVisoContentBrowser.h (modified) (3 diffs)
-
UIVisoCreator.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp
r100556 r100583 54 54 55 55 const ULONG uAllowedFileSize = _4K; 56 const char *cRemoveText = ":remove:"; 56 57 57 58 struct ISOFileObject … … 395 396 } 396 397 else 397 m_entryMap.insert(strPath, ":remove:");398 m_entryMap.insert(strPath, cRemoveText); 398 399 } 399 400 … … 437 438 if (!pClickedItem) 438 439 return; 439 if (!pClickedItem->isDirectory() )440 if (!pClickedItem->isDirectory() && !pClickedItem->isSymLinkToADirectory()) 440 441 return; 441 442 /* Don't navigate into removed directories: */ … … 452 453 else 453 454 { 454 scanHostDirectory(pClickedItem );455 scanHostDirectory(pClickedItem, false /* not recursive */); 455 456 setTableRootIndex(index); 456 457 } … … 661 662 } 662 663 664 bool UIVisoContentBrowser::hasContent() const 665 { 666 if (m_strImportedISOPath.isEmpty() && m_entryMap.isEmpty()) 667 return false; 668 return true; 669 } 670 663 671 void UIVisoContentBrowser::prepareConnections() 664 672 { … … 811 819 #endif 812 820 QMap<QString, QString> fileEntries; 821 QStringList removedEntries; 813 822 foreach (const QString &strPart, list) 814 823 { … … 835 844 if (QFileInfo(fileEntry[1]).exists()) 836 845 fileEntries[fileEntry[0]] = fileEntry[1]; 846 else if (fileEntry[1] == cRemoveText) 847 removedEntries.append(fileEntry[0]); 837 848 } 838 849 } … … 840 851 file.close(); 841 852 createLoadedFileEntries(fileEntries); 853 processRemovedEntries(removedEntries); 842 854 } 843 855 … … 863 875 UICustomFileSystemItem *pItem = searchItemByPath(strPath); 864 876 KFsObjType enmObjectType; 865 /* All objects except possibly the last oneare directories:*/877 /* All objects, except possibly the last one, are directories:*/ 866 878 if (i == pathList.size() - 1) 867 879 enmObjectType = fileType(localFileObjectInfo); … … 876 888 if (i == pathList.size() - 1) 877 889 pItem->setData(strLocalPath, UICustomFileSystemModelData_LocalPath); 890 /* Pre-scan and populate the directory since we may need its content while processing removed items: */ 891 if (enmObjectType == KFsObjType_Directory) 892 scanHostDirectory(pItem, true /* recursive */); 878 893 } 879 894 if (i == pathList.size() - 1) … … 888 903 } 889 904 905 void UIVisoContentBrowser::processRemovedEntries(const QStringList &removedEntries) 906 { 907 foreach (const QString &strPath, removedEntries) 908 { 909 QStringList path = UIPathOperations::pathTrail(strPath); 910 } 911 } 912 890 913 QModelIndex UIVisoContentBrowser::convertIndexToTableIndex(const QModelIndex &index) 891 914 { … … 900 923 } 901 924 902 void UIVisoContentBrowser::scanHostDirectory(UICustomFileSystemItem *directoryItem )925 void UIVisoContentBrowser::scanHostDirectory(UICustomFileSystemItem *directoryItem, bool fRecursive) 903 926 { 904 927 if (!directoryItem) … … 906 929 /* the clicked item can be a directory created with the VISO content. in that case local path data 907 930 should be empty: */ 908 if ( directoryItem->type() != KFsObjType_Directory||931 if ((directoryItem->type() != KFsObjType_Directory && !directoryItem->isSymLinkToADirectory()) || 909 932 directoryItem->data(UICustomFileSystemModelData_LocalPath).toString().isEmpty()) 910 933 return; … … 913 936 { 914 937 QFileInfoList directoryContent = directory.entryInfoList(); 938 915 939 for (int i = 0; i < directoryContent.size(); ++i) 916 940 { … … 918 942 if (fileInfo.fileName() == ".") 919 943 continue; 944 KFsObjType enmType = fileType(fileInfo); 920 945 UICustomFileSystemItem *newItem = new UICustomFileSystemItem(fileInfo.fileName(), 921 946 directoryItem, 922 fileType(fileInfo));947 enmType); 923 948 newItem->setData(fileInfo.filePath(), UICustomFileSystemModelData_LocalPath); 924 925 949 if (fileInfo.isSymLink()) 926 950 { … … 928 952 newItem->setIsSymLinkToADirectory(QFileInfo(fileInfo.symLinkTarget()).isDir()); 929 953 } 954 /* Do not recurse into sysmlinks since it may end up infinite recursion: */ 955 if (fRecursive && enmType == KFsObjType_Directory && !newItem->isUpDirectory()) 956 scanHostDirectory(newItem, true); 957 930 958 } 931 959 directoryItem->setIsOpened(true); … … 1004 1032 m_entryMap.remove(strOldPath); 1005 1033 if (!pItem->data(UICustomFileSystemModelData_LocalPath).toString().isEmpty()) 1006 m_entryMap.insert(strOldPath, ":remove:");1034 m_entryMap.insert(strOldPath, cRemoveText); 1007 1035 } 1008 1036 -
trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h
r100548 r100583 80 80 void setImportedISOPath(const QString &strPath = QString()); 81 81 82 bool hasContent() const; 83 82 84 public slots: 83 85 … … 119 121 QModelIndex convertIndexToTableIndex(const QModelIndex &index); 120 122 /** Lists the content of the host file system directory by using Qt file system API. */ 121 void scanHostDirectory(UICustomFileSystemItem *directory );123 void scanHostDirectory(UICustomFileSystemItem *directory, bool fRecursive); 122 124 KFsObjType fileType(const QFileInfo &fsInfo); 123 125 /** Renames the starts item's name as VISO name changes. */ … … 141 143 void goUp(); 142 144 void createLoadedFileEntries(const QMap<QString, QString> &fileEntries); 145 /* Processes a list of VISO paths that are loaded from a file and indicate file object to be removed from VISO content. */ 146 void processRemovedEntries(const QStringList &removedEntries); 143 147 const UICustomFileSystemItem* currentDirectoryItem() const; 144 148 UIVisoContentTableView *m_pTableView; -
trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp
r100515 r100583 423 423 QWidget *pActive = QApplication::activeWindow(); 424 424 AssertReturnVoid(pActive); 425 426 if (!msgCenter().confirmVisoDiscard(pActive))427 return;425 if (m_pVISOContentBrowser->hasContent()) 426 if (!msgCenter().confirmVisoDiscard(pActive)) 427 return; 428 428 QString strFileName = QIFileDialog::getOpenFileName(uiCommon().defaultFolderPathForType(UIMediumDeviceType_DVD), 429 429 "VISO files (*.viso)", pActive, UIVisoCreatorWidget::tr("Select a VISO file to load"));
Note:
See TracChangeset
for help on using the changeset viewer.

