diff options
author | Arno <am@disconnect.de> | 2010-10-16 14:08:16 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-10-16 14:08:16 +0200 |
commit | bf5ccbe56631ac516751a9f194b643f77fdedf82 (patch) | |
tree | f5a4227e7ad222c87197c529c29629ee17c3631f /filestreewidget.cpp | |
parent | f10a0a63e699288f1288c193c49795cae9cb3b40 (diff) | |
download | SheMov-bf5ccbe56631ac516751a9f194b643f77fdedf82.tar.gz SheMov-bf5ccbe56631ac516751a9f194b643f77fdedf82.tar.bz2 SheMov-bf5ccbe56631ac516751a9f194b643f77fdedf82.zip |
Hover for FilesTreeWidget
Hovering over a cover item in FilesTreeWidget shows a HoverWindow with
the scaled image under the cursor.
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r-- | filestreewidget.cpp | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index a941612..0dab9a2 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -269,7 +269,10 @@ void FilesTreeWidget::fileSelectionChanged(const QItemSelection &selected, const emit sizeChanged(mSelectedSize); } -FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent){} +FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent){ + setAttribute(Qt::WA_Hover); + mHoverWin = new HoverWindow; +} void FilesTreeView::contextMenuEvent(QContextMenuEvent *event){ QMenu ctxMenu; @@ -279,6 +282,71 @@ void FilesTreeView::contextMenuEvent(QContextMenuEvent *event){ ctxMenu.exec(event->globalPos()); } +bool FilesTreeView::event(QEvent *e){ + QModelIndex curIdx; + QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); + QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorOffset()); + QPoint globalPos = mapToGlobal(hotSpot); + QPoint where = globalPos + QPoint(30, 0); + + curIdx = indexAt(hotSpot); + if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ + if(!curIdx.isValid()){ + return true; + } + if(!curIdx.column() == 0){ + mCurHover = QModelIndex(); + mHoverWin->setVisible(false); + return true; + } + if(!curIdx.isValid()){ + return true; + } + QVariant fileType = curIdx.data(FilesTreeModel::FileTypeRole); + if(!fileType.isValid()){ + mHoverWin->setVisible(false); + return true; + } + if(fileType.toInt() == FilesTreeModel::Movie){ + mHoverWin->setVisible(false); + return true; + } + } + + if(e->type() == QEvent::HoverEnter){ + mCurHover = curIdx; + QPixmap pm = QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString()); + mHoverWin->setPixmap(pm); + if(mHoverWin->pixmapHeight()){ + where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); + } + mHoverWin->move(where); + mHoverWin->setVisible(true); + return true; + } + if(e->type() == QEvent::HoverMove){ + if(mHoverWin->pixmapHeight()){ + where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); + } + if(curIdx != mCurHover){ + mCurHover = curIdx; + mHoverWin->setPixmap(QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString())); + mHoverWin->setVisible(false); + mHoverWin->move(where); + mHoverWin->setVisible(true); + return true; + }else{ + mHoverWin->move(where); + return true; + } + } + if(e->type() == QEvent::HoverLeave){ + mHoverWin->setVisible(false); + return true; + } + return QTreeView::event(e); +} + FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {} bool FilesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const{ |