Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- filesystemusbmodeldialog.h
- ---------------------------------------------------------------------------
- #include "ui_filesystemusbmodelwidget.h"
- #include <QWidget>
- #include <QFileSystemModel>
- #include <QItemDelegate>
- class USBDriveFilterProxyModel;
- class IconItemUsbDelegate : public QItemDelegate
- {
- public:
- IconItemUsbDelegate();
- QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const;
- };
- class IconFileSystemUsbModel : public QFileSystemModel
- {
- Q_OBJECT
- public:
- virtual QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const;
- };
- class FileSystemUsbModelDialog : public QWidget
- {
- Q_OBJECT
- public:
- explicit FileSystemUsbModelDialog(QWidget *parent);
- ~FileSystemUsbModelDialog();
- private:
- Ui::FileSystemUsbModelWidget *ui;
- IconFileSystemUsbModel *dir;
- USBDriveFilterProxyModel *usbModel;
- Q_SIGNALS:
- void signalFileSelected(QString);
- };
- #endif // FILESYSTEMUSBMODELDIALOG_H
- ---------------------------------------------------------------------------
- filesystemusbmodeldialog.cpp:
- ---------------------------------------------------------------------------
- #include "filesystemusbmodeldialog.h"
- #include "usbdrivefilter.h"
- IconItemUsbDelegate::IconItemUsbDelegate(){}
- QSize IconItemUsbDelegate::sizeHint ( const QStyleOptionViewItem & /*option*/, const QModelIndex & index ) const
- {
- // original method
- const QFileSystemModel *model = reinterpret_cast<const QFileSystemModel *>(index.model());
- QFileInfo info = model->fileInfo(index);
- if(info.isDir())
- {
- return QSize(40,40);
- }
- else
- {
- return QSize(64,64);
- }
- // // casting to proxy model then getting source model cast to QFileSystemModel
- // const USBDriveFilterProxyModel *proxymodel = reinterpret_cast<const USBDriveFilterProxyModel *>(index.model());
- // const QFileSystemModel *fsmodel = reinterpret_cast<const QFileSystemModel *>(proxymodel->sourceModel());
- // QFileInfo fsinfo = fsmodel->fileInfo(index);
- // if(fsinfo.isDir())
- // {
- // return QSize(40,40);
- // }
- // else
- // {
- // return QSize(64,64);
- // }
- // // no body, but just returning the same QSize every time.
- // return QSize(40,40);
- }
- QVariant IconFileSystemUsbModel::data ( const QModelIndex & index, int role ) const
- {
- // will do more, but for now, just paints to view
- return QFileSystemModel::data(index, role);
- }
- FileSystemUsbModelDialog::FileSystemUsbModelDialog(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::FileSystemUsbModelWidget)
- {
- ui->setupUi(this);
- dir = new IconFileSystemUsbModel();
- dir->setRootPath("\\");
- dir->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
- usbModel = new USBDriveFilterProxyModel(this);
- usbModel->setSourceModel(dir);
- usbModel->setDynamicSortFilter(false);
- IconItemUsbDelegate *iconItemDelegate = new IconItemUsbDelegate();
- ui->treeView->setRootIsDecorated(false); // added
- ui->treeView->setModel(usbModel);
- ui->treeView->setSortingEnabled(true); // added
- //ui->treeView->setModel(dir); // changing to passing just the IconFileSystemUsbModel object works fine!!
- // hide unneeded hierachy info columns
- ui->treeView->hideColumn(1);
- ui->treeView->hideColumn(2);
- ui->treeView->hideColumn(3);
- ui->treeView->setItemDelegate(iconItemDelegate);
- }
- FileSystemUsbModelDialog::~FileSystemUsbModelDialog()
- {
- delete dir;
- }
- ---------------------------------------------------------------------------
- usbdrivefilter.h
- ---------------------------------------------------------------------------
- #ifndef USBDRIVEFILTER_H
- #define USBDRIVEFILTER_H
- #include <QSortFilterProxyModel>
- #include <QModelIndex>
- #include <QString>
- class USBDriveFilterProxyModel : public QSortFilterProxyModel
- {
- Q_OBJECT
- public:
- explicit USBDriveFilterProxyModel(QObject *parent = 0);
- protected:
- virtual bool filterAcceptsRow(
- int source_row, const QModelIndex &source_parent) const;
- private:
- void getMountedRemovables();
- private:
- QList<QString> removables;
- };
- #endif // USBDRIVEFILTER_H
- ---------------------------------------------------------------------------
- usbdrivefilter.cpp
- ---------------------------------------------------------------------------
- #include "usbdrivefilter.h"
- #include <windows.h>
- USBDriveFilterProxyModel::USBDriveFilterProxyModel(QObject *parent) :
- QSortFilterProxyModel(parent)
- {
- getMountedRemovables();
- // will eventually also register for changes to mounted removables
- // but need to get passed my current issue of not displaying only USBs.
- }
- bool USBDriveFilterProxyModel::filterAcceptsRow(int sourceRow,
- const QModelIndex &sourceParent) const
- {
- QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
- // Since drive string can have more than just "<DriveLetter>:", need
- // to check each entry in the usb list for whether it is contained in
- // the current drive string.
- QString source = sourceModel()->data(index0).toString();
- for (int i = 0; i < removables.size(); i++)
- {
- if (source.contains(removables[i]))
- {
- return true;
- }
- }
- return false;
- }
- void USBDriveFilterProxyModel::getMountedRemovables()
- {
- DWORD test = GetLogicalDrives();
- DWORD mask = 1;
- UINT type = 0;
- WCHAR wdrive[] = L"C:\\"; // use as a drive letter template
- for (int i = 0; i < 32; i++)
- {
- if (test & mask)
- {
- wdrive[0] = (char)('A' + i); // change letter in template
- type = GetDriveType(wdrive);
- switch (type) {
- case DRIVE_REMOVABLE:
- {
- QString qdrive = QString((char)('A' + i)) + ":";
- removables.append(qdrive);
- break;
- }
- default: break;
- }
- }
- mask = mask << 1;
- }
- }
- ---------------------------------------------------------------------------
- mainwindow.h
- ---------------------------------------------------------------------------
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- class FileSystemUsbModelDialog;
- class QFileSystemModel;
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- private:
- Ui::MainWindow *ui;
- FileSystemUsbModelDialog *treeView;
- QFileSystemModel *fileSystemModel;
- };
- #endif // MAINWINDOW_H
- ---------------------------------------------------------------------------
- mainwindow.cpp
- ---------------------------------------------------------------------------
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "filesystemusbmodeldialog.h"
- #include <QFileSystemModel>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- treeView = new FileSystemUsbModelDialog(this);
- setCentralWidget(treeView);
- fileSystemModel = new QFileSystemModel;
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- ---------------------------------------------------------------------------
- ui_filesystemusbmodelwidget.h
- ---------------------------------------------------------------------------
- /********************************************************************************
- ** Form generated from reading UI file 'filesystemmodelwidget.ui'
- **
- ** Created by: Qt User Interface Compiler version 5.1.1
- **
- ** WARNING! All changes made in this file will be lost when recompiling UI file!
- ********************************************************************************/
- #ifndef UI_FILESYSTEMUSBMODELWIDGET_H
- #define UI_FILESYSTEMUSBMODELWIDGET_H
- #include <QtWidgets/QApplication>
- #include <QtWidgets/QHeaderView>
- #include <QtWidgets/QTreeView>
- QT_BEGIN_NAMESPACE
- class Ui_FileSystemUsbModelWidget
- {
- public:
- QTreeView *treeView;
- void setupUi(QWidget *FileSystemUsbModelWidget)
- {
- if (FileSystemUsbModelWidget->objectName().isEmpty())
- FileSystemUsbModelWidget->setObjectName(QStringLiteral("FileSystemUsbModelWidget"));
- FileSystemUsbModelWidget->resize(670, 755);
- treeView = new QTreeView(FileSystemUsbModelWidget);
- treeView->setGeometry(QRect(0, 0, 670, 531));
- treeView->setObjectName(QStringLiteral("treeView"));
- treeView->setAutoFillBackground(true);
- treeView->setStyleSheet(QLatin1String(" QScrollBar:vertical {\n"
- " width: 61px;\n"
- " background-color: rgb(227, 227, 227);\n"
- " }\n"
- " QScrollBar::handle:vertical {\n"
- " min-height: 50px;\n"
- " }\n"
- "\n"
- "QTreeView, QListView {\n"
- " alternate-background-color: rgb(226, 226, 226);\n"
- " font-size: 16px;\n"
- " show-decoration-selected: 1;\n"
- " }\n"
- "\n"
- " QTreeView::item, QListView::item {\n"
- " height: 22px;\n"
- " border: 1px solid transparent;\n"
- " border-top-color: transparent;\n"
- " border-bottom-color: transparent;\n"
- " }\n"
- "\n"
- " QTreeView::item:selected, QListView::item::selected {\n"
- " border: 1px solid #567dbc;\n"
- " background-color: rgb(85, 170, 255);\n"
- " }\n"
- "\n"
- "\n"
- " QTreeView::branch:has-siblings:!adjoins-item {\n"
- " border-image: url(:/new/prefix1/images/vline.png) 0;\n"
- " }\n"
- "\n"
- " QTreeView::branch:has-siblings:adjoins-item {\n"
- " border-image: url(:/new/prefix1/images/branch-more.png) 0;\n"
- " }\n"
- "\n"
- " QTreeView::branch:!has-children:!has-siblings:adjoins-item {\n"
- " border-image: url"
- "(:/new/prefix1/images/branch-end.png) 0;\n"
- " }\n"
- "\n"
- " QTreeView::branch:has-children:!has-siblings:closed,\n"
- " QTreeView::branch:closed:has-children:has-siblings {\n"
- " border-image: none;\n"
- " image: url(:/new/prefix1/images/branch-closed.png);\n"
- " }\n"
- "\n"
- " QTreeView::branch:open:has-children:!has-siblings,\n"
- " QTreeView::branch:open:has-children:has-siblings {\n"
- " border-image: none;\n"
- " image: url(:/new/prefix1/images/branch-open.png);\n"
- " }\n"
- ""));
- treeView->setFrameShape(QFrame::Box);
- treeView->setFrameShadow(QFrame::Plain);
- treeView->setHorizontalScrollMode(QAbstractItemView::ScrollPerItem);
- treeView->setExpandsOnDoubleClick(true);
- treeView->header()->setVisible(false);
- treeView->header()->setStretchLastSection(true);
- retranslateUi(FileSystemUsbModelWidget);
- QMetaObject::connectSlotsByName(FileSystemUsbModelWidget);
- } // setupUi
- void retranslateUi(QWidget *FileSystemUsbModelWidget)
- {
- FileSystemUsbModelWidget->setWindowTitle(QApplication::translate("FileSystemUsbModelWidget", "Form", 0));
- } // retranslateUi
- };
- namespace Ui {
- class FileSystemUsbModelWidget: public Ui_FileSystemUsbModelWidget {};
- } // namespace Ui
- QT_END_NAMESPACE
- #endif // UI_FILESYSTEMMODELWIDGET_H
- ---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement