diff options
-rw-r--r-- | fileview.cpp | 110 | ||||
-rw-r--r-- | fileview.h | 10 |
2 files changed, 75 insertions, 45 deletions
diff --git a/fileview.cpp b/fileview.cpp index 4c4e993..082ec92 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -59,7 +59,10 @@ void FileView::createFolder(){ void FileView::readConfig(){ QSettings s; - mHover = s.value("ui/hoverdirs", true).toBool(); + mHoverDirs = s.value("ui/hoverdirs", true).toBool(); + mHoverPics = s.value("ui/hoverpics", true).toBool(); + mHoverMovies = s.value("ui/hovermovies", true).toBool(); + mWhen = s.value("ui/grabframe", "00:00:00").toString(); mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0); } @@ -149,63 +152,59 @@ void FileView::resizeEvent(QResizeEvent *e){ } bool FileView::event(QEvent *e){ - int eType = e->type(); - if((eType == QEvent::HoverEnter) || (eType == QEvent::HoverLeave) || (eType == QEvent::HoverMove)){ - QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if(!mHover){ - return true; - } - if(hEvent->type() == QEvent::HoverLeave){ - return exitHover(); - } - QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorSize().height()); - QModelIndex curIdx = indexAt(hotSpot); - if(!curIdx.isValid() || (curIdx.column() != 0)){ + QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); + if(!hEvent){ + return exitHover(); + } + QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorSize().height()); + QModelIndex curIdx = indexAt(hotSpot); + HoverFileType ft = None; + QFileInfo curIdxInfo(curIdx.data(QFileSystemModel::FilePathRole).toString()); + if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ + if(!curIdx.isValid() || (!curIdx.column() == 0)){ return exitHover(); } if(curIdx.data().toString() == ".."){ return exitHover(); } - QFileInfo fi(curIdx.data(QFileSystemModel::FilePathRole).toString()); - if(!fi.exists()){ - return true; - } - QList<QVariant> hoverData; - if(fi.isDir()){ - hoverData << fi.fileName(); - QDir curDir(fi.absoluteFilePath()); - QStringList files = curDir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Name); - hoverData << files; - }else if(fi.isFile()){ - QString mimeType = Helper::mimeType(fi.absoluteFilePath()); + if(curIdxInfo.isFile()){ + QString mimeType = Helper::mimeType(curIdxInfo.absoluteFilePath()); if(mimeType.startsWith("image")){ - QPixmap pm(fi.absoluteFilePath()); - hoverData << pm; + if(!mHoverPics){ + return exitHover(); + } + ft = Image; + }else if(mimeType.startsWith("video")){ + if(!mHoverMovies){ + return exitHover(); + } + ft = Movie; }else{ return exitHover(); } + }else if(curIdxInfo.isDir()){ + if(!mHoverDirs){ + return exitHover(); + } + ft = Dir; }else{ return exitHover(); } - if(e->type() == QEvent::HoverEnter){ + } + if(e->type() == QEvent::HoverEnter){ + mCurHover = curIdx; + doHover(curIdxInfo, ft); + return true; + }else if(e->type() == QEvent::HoverMove){ + if(mCurHover != curIdx){ mCurHover = curIdx; - mHoverWin->setData(hoverData); + doHover(curIdxInfo, ft); + }else{ mHoverWin->setPos(); - mHoverWin->setVisible(true); - return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ - mHoverWin->setData(hoverData); - mCurHover = curIdx; - mHoverWin->setPos(); - mHoverWin->setVisible(true); - return true; - }else{ - mHoverWin->setPos(); - return true; - } } + return true; + }else if(e->type() == QEvent::HoverLeave){ + return exitHover(); } return QTreeView::event(e); } @@ -215,3 +214,28 @@ bool FileView::exitHover(bool exitVal){ mCurHover = QModelIndex(); return exitVal; } + +void FileView::doHover(const QFileInfo &fi, int type){ + QPixmap pm; + if(type == Movie){ + pm = SmGlobals::instance()->frameCache()->entry(fi.absoluteFilePath(), mWhen); + if(pm.isNull()){ + exitHover(); + return; + } + mHoverWin->setPixmap(pm, false); + mHoverWin->setCaption(fi.fileName()); + }else if(type == Image){ + pm.load(fi.absoluteFilePath()); + mHoverWin->setPixmap(pm); + mHoverWin->setCaption(fi.fileName()); + }else if(type == Dir){ + QList<QVariant> hoverList; + hoverList << fi.fileName(); + QDir curDir(fi.absoluteFilePath()); + hoverList << curDir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Name); + mHoverWin->setData(hoverList); + } + mHoverWin->setPos(); + mHoverWin->setVisible(true); +} @@ -18,12 +18,13 @@ class QModelIndex; class QAction; class HoverWindow; class QEvent; +class QFileInfo; class FileView : public QTreeView { Q_OBJECT public: FileView(QWidget *parent = 0); - ~FileView() {}; + ~FileView() {} signals: void upDir(); @@ -48,13 +49,18 @@ class FileView : public QTreeView { virtual bool event(QEvent *event); private: + enum HoverFileType { Dir, Movie, Image, None }; bool exitHover(bool exitVal = true); + void doHover(const QFileInfo &fi, int type); MessageDialog *mMarkDialog; MessageDialog *mCreateFolderDialog; QAction *mDeleteA; HoverWindow *mHoverWin; QModelIndex mCurHover; - bool mHover; + bool mHoverDirs; + bool mHoverMovies; + bool mHoverPics; + QString mWhen; }; #endif |