summaryrefslogtreecommitdiffstats
path: root/fileview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fileview.cpp')
-rw-r--r--fileview.cpp110
1 files changed, 67 insertions, 43 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);
+}