BrowseFeature::BrowseFeature(QObject* parent, ConfigObject<ConfigValue>* pConfig, TrackCollection* pTrackCollection, RecordingManager* pRecordingManager) : LibraryFeature(parent), m_pConfig(pConfig), m_browseModel(this, pTrackCollection, pRecordingManager), m_proxyModel(&m_browseModel), m_pTrackCollection(pTrackCollection), m_pLastRightClickedItem(NULL) { connect(this, SIGNAL(requestAddDir(QString)), parent, SLOT(slotRequestAddDir(QString))); m_pAddQuickLinkAction = new QAction(tr("Add to Quick Links"),this); connect(m_pAddQuickLinkAction, SIGNAL(triggered()), this, SLOT(slotAddQuickLink())); m_pRemoveQuickLinkAction = new QAction(tr("Remove from Quick Links"),this); connect(m_pRemoveQuickLinkAction, SIGNAL(triggered()), this, SLOT(slotRemoveQuickLink())); m_pAddtoLibraryAction = new QAction(tr("Add to Library"),this); connect(m_pAddtoLibraryAction, SIGNAL(triggered()), this, SLOT(slotAddToLibrary())); m_proxyModel.setFilterCaseSensitivity(Qt::CaseInsensitive); m_proxyModel.setSortCaseSensitivity(Qt::CaseInsensitive); // The invisible root item of the child model TreeItem* rootItem = new TreeItem(); m_pQuickLinkItem = new TreeItem(tr("Quick Links"), QUICK_LINK_NODE, this, rootItem); rootItem->appendChild(m_pQuickLinkItem); // Create the 'devices' shortcut #if defined(__WINDOWS__) TreeItem* devices_link = new TreeItem( tr("Devices"), DEVICE_NODE, this, rootItem); rootItem->appendChild(devices_link); // show drive letters QFileInfoList drives = QDir::drives(); // show drive letters foreach (QFileInfo drive, drives) { TreeItem* driveLetter = new TreeItem( drive.canonicalPath(), // displays C: drive.filePath(), // Displays C:/ this , devices_link); devices_link->appendChild(driveLetter); }
BrowseFeature::BrowseFeature(QObject* parent, UserSettingsPointer pConfig, TrackCollection* pTrackCollection, RecordingManager* pRecordingManager) : LibraryFeature(parent), m_pConfig(pConfig), m_browseModel(this, pTrackCollection, pRecordingManager), m_proxyModel(&m_browseModel), m_pTrackCollection(pTrackCollection), m_pLastRightClickedItem(NULL) { connect(this, SIGNAL(requestAddDir(QString)), parent, SLOT(slotRequestAddDir(QString))); m_pAddQuickLinkAction = new QAction(tr("Add to Quick Links"),this); connect(m_pAddQuickLinkAction, SIGNAL(triggered()), this, SLOT(slotAddQuickLink())); m_pRemoveQuickLinkAction = new QAction(tr("Remove from Quick Links"),this); connect(m_pRemoveQuickLinkAction, SIGNAL(triggered()), this, SLOT(slotRemoveQuickLink())); m_pAddtoLibraryAction = new QAction(tr("Add to Library"),this); connect(m_pAddtoLibraryAction, SIGNAL(triggered()), this, SLOT(slotAddToLibrary())); m_proxyModel.setFilterCaseSensitivity(Qt::CaseInsensitive); m_proxyModel.setSortCaseSensitivity(Qt::CaseInsensitive); // BrowseThread sets the Qt::UserRole of every QStandardItem to the sort key // of the item. m_proxyModel.setSortRole(Qt::UserRole); // Dynamically re-sort contents as we add items to the source model. m_proxyModel.setDynamicSortFilter(true); // The invisible root item of the child model auto pRootItem = std::make_unique<TreeItem>(this); m_pQuickLinkItem = pRootItem->appendChild(tr("Quick Links"), QUICK_LINK_NODE); // Create the 'devices' shortcut #if defined(__WINDOWS__) TreeItem* devices_link = pRootItem->appendChild(tr("Devices"), DEVICE_NODE); // show drive letters QFileInfoList drives = QDir::drives(); // show drive letters foreach (QFileInfo drive, drives) { // Using drive.filePath() to get path to display instead of drive.canonicalPath() // as it delay the startup too much if there is a network share mounted // (drive letter assigned) but unavailable // We avoid using canonicalPath() here because it makes an // unneeded system call to the underlying filesystem which // can be very long if the said filesystem is an unavailable // network share. drive.filePath() doesn't make any filesystem call // in this case because drive is an absolute path as it is taken from // QDir::drives(). See Qt's QDir code, especially qdir.cpp QString display_path = drive.filePath(); if (display_path.endsWith("/")) { display_path.chop(1); } TreeItem* driveLetter = devices_link->appendChild( display_path, // Displays C: drive.filePath()); // Displays C:/ }