summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-10-16 14:08:16 +0200
committerArno <am@disconnect.de>2010-10-16 14:08:16 +0200
commitbf5ccbe56631ac516751a9f194b643f77fdedf82 (patch)
treef5a4227e7ad222c87197c529c29629ee17c3631f /filestreewidget.cpp
parentf10a0a63e699288f1288c193c49795cae9cb3b40 (diff)
downloadSheMov-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.cpp70
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{