summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fileview.cpp110
-rw-r--r--fileview.h10
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);
+}
diff --git a/fileview.h b/fileview.h
index 604fa8f..7f35fdc 100644
--- a/fileview.h
+++ b/fileview.h
@@ -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