summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r--filestreewidget.cpp58
1 files changed, 38 insertions, 20 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp
index 941c7ac..4dd5308 100644
--- a/filestreewidget.cpp
+++ b/filestreewidget.cpp
@@ -288,9 +288,8 @@ void FilesTreeWidget::fileSelectionChanged(const QItemSelection &selected, const
emit sizeChanged(mSelectedSize);
}
-FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent), mHoverWin(new HoverWindow), mHover(false){
+FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent), mHoverWin(new HoverWindow), mHoverPics(false){
setAttribute(Qt::WA_Hover);
-
}
void FilesTreeView::setModel(QAbstractItemModel *model){
@@ -303,8 +302,9 @@ void FilesTreeView::setModel(QAbstractItemModel *model){
void FilesTreeView::readConfig(){
QSettings s;
- mHover = s.value("ui/hoverpics", true).toBool();
+ mHoverPics = s.value("ui/hoverpics", true).toBool();
mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0);
+ mHoverMovies = s.value("ui/hovermovies", true).toBool();
}
void FilesTreeView::readHeaderConfig(){
@@ -341,39 +341,39 @@ bool FilesTreeView::event(QEvent *e){
if(!hEvent){
return QTreeView::event(e);
}
- if(!mHover){
- return true;
- }
QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorSize().height());
QModelIndex curIdx = indexAt(hotSpot);
+ /*
+ The whole point of this if/then/else mess is to exit as early as possible
+ for performance reasons. We don't want the cpu to spin at 100% only
+ because something _could_ happen...
+ */
if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){
if(!curIdx.isValid() || (!curIdx.column() == 0)){
return exitHover();
}
bool toInt;
int fileType = curIdx.data(FilesTreeModel::FileTypeRole).toInt(&toInt);
- bool validFt = false;
- if(toInt){
- validFt = (fileType == FilesTreeModel::FrontCover) || (fileType == FilesTreeModel::BackCover) || (fileType == FilesTreeModel::GeneralCover);
- }
- if(!toInt || !validFt){
+ if(!toInt){
return exitHover();
}
+ if(fileType == FilesTreeModel::Movie){
+ if(!mHoverMovies){
+ return exitHover();
+ }
+ }else{
+ if(!mHoverPics){
+ return exitHover();
+ }
+ }
}
if(e->type() == QEvent::HoverEnter){
- mCurHover = curIdx;
- QPixmap pm = QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString());
- mHoverWin->setPixmap(pm);
- mHoverWin->setPos();
- mHoverWin->setVisible(true);
+ doHover(curIdx);
return true;
}
if(e->type() == QEvent::HoverMove){
if(curIdx != mCurHover){
- mCurHover = curIdx;
- mHoverWin->setPixmap(QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString()));
- mHoverWin->setPos();
- mHoverWin->setVisible(true);
+ doHover(curIdx);
return true;
}else{
mHoverWin->setPos();
@@ -392,6 +392,24 @@ bool FilesTreeView::exitHover(bool exitVal){
return exitVal;
}
+void FilesTreeView::doHover(const QModelIndex &idx){
+ QPixmap pm;
+ mCurHover = idx;
+ if(idx.data(FilesTreeModel::FileTypeRole).toInt() == FilesTreeModel::Movie){
+ pm = Helper::grabFrame(idx.data(FilesTreeModel::FullPathRole).toString());
+ if(pm.isNull()){
+ return;
+ }
+ }else{
+ if(!pm.load(idx.data(FilesTreeModel::FullPathRole).toString())){
+ return;
+ }
+ }
+ mHoverWin->setPixmap(pm);
+ mHoverWin->setPos();
+ mHoverWin->setVisible(true);
+}
+
FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {}
// left + right are from the sourceModel() !!!!