diff options
-rw-r--r-- | filestreewidget.cpp | 99 | ||||
-rw-r--r-- | filestreewidget.h | 1 | ||||
-rw-r--r-- | fileview.cpp | 122 | ||||
-rw-r--r-- | fileview.h | 1 | ||||
-rw-r--r-- | hoverwindow.cpp | 43 | ||||
-rw-r--r-- | hoverwindow.h | 12 | ||||
-rw-r--r-- | seriestreewidget.cpp | 70 | ||||
-rw-r--r-- | seriestreewidget.h | 1 | ||||
-rw-r--r-- | smglobals.cpp | 10 | ||||
-rw-r--r-- | smglobals.h | 5 |
10 files changed, 182 insertions, 182 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index e5ab111..7fbc0fc 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -290,75 +290,60 @@ void FilesTreeView::contextMenuEvent(QContextMenuEvent *event){ bool FilesTreeView::event(QEvent *e){ QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if((hEvent->type() == QEvent::HoverEnter) || (hEvent->type() == QEvent::HoverLeave) || (hEvent->type() == QEvent::HoverMove)){ - if(!mHover){ - return true; + 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); + if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ + if(!curIdx.isValid() || (!curIdx.column() == 0)){ + return exitHover(); } - QModelIndex curIdx; - - if(!hEvent){ - return true; + 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); } - 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(!toInt || !validFt){ + return exitHover(); } - - if(e->type() == QEvent::HoverEnter){ + } + if(e->type() == QEvent::HoverEnter){ + mCurHover = curIdx; + QPixmap pm = QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString()); + mHoverWin->setPixmap(pm); + mHoverWin->setPos(); + mHoverWin->setVisible(true); + return true; + } + if(e->type() == QEvent::HoverMove){ + if(curIdx != mCurHover){ mCurHover = curIdx; - QPixmap pm = QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString()); - mHoverWin->setPixmap(pm); - mHoverWin->setPos(where); + mHoverWin->setPixmap(QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString())); + mHoverWin->setPos(); 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->setPos(where); - mHoverWin->setVisible(true); - return true; - }else{ - mHoverWin->setPos(where); - return true; - } - } - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); + }else{ + mHoverWin->setPos(); return true; } } + if(e->type() == QEvent::HoverLeave){ + return exitHover(); + } return QTreeView::event(e); } +bool FilesTreeView::exitHover(bool exitVal){ + mHoverWin->setVisible(false); + mCurHover = QModelIndex(); + return exitVal; +} + FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {} bool FilesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const{ diff --git a/filestreewidget.h b/filestreewidget.h index 192b313..7c5243d 100644 --- a/filestreewidget.h +++ b/filestreewidget.h @@ -72,6 +72,7 @@ class FilesTreeView : public QTreeView { virtual bool event(QEvent *event); private: + bool exitHover(bool exitVal = true); QModelIndex mCurHover; HoverWindow *mHoverWin; bool mHover; diff --git a/fileview.cpp b/fileview.cpp index fdd51e4..cbdd8e0 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -40,6 +40,9 @@ FileView::FileView(QWidget *parent) : QTreeView(parent), mDeleteA(0) { mCreateFolderDialog = new MessageDialog(tr("Enter folder name"), folderTitle, this); connect(mCreateFolderDialog, SIGNAL(accepted()), this, SLOT(doCreateFolder())); mHoverWin = new HoverWindow; + QSize curSize = SmGlobals::instance()->cursorSize(); + mHoverWin->setHoverOffset(QPoint(curSize.width() + 30, 0)); + readConfig(); } void FileView::markFiles(){ @@ -147,78 +150,67 @@ void FileView::resizeEvent(QResizeEvent *e){ bool FileView::event(QEvent *e){ QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if((hEvent->type() == QEvent::HoverEnter) || (hEvent->type() == QEvent::HoverLeave) || (hEvent->type() == QEvent::HoverMove)){ - if(!mHover){ - return true; - } - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); - mCurHover = QModelIndex(); - return true; - } - QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorOffset()); - QModelIndex curIdx = indexAt(hotSpot); - if(!curIdx.isValid()){ - return true; - } - if(curIdx.column() != 0){ - mHoverWin->setVisible(false); - return true; - } - QFileInfo fi(curIdx.data(QFileSystemModel::FilePathRole).toString()); - if(!fi.exists()){ - return true; + if(!hEvent){ + return QTreeView::event(e); + } + if(!mHover){ + return true; + } + if(e->type() == QEvent::HoverLeave){ + return exitHover(); + } + QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorSize().height()); + QModelIndex curIdx = indexAt(hotSpot); + if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ + if(!curIdx.isValid() || (curIdx.column() != 0)){ + return exitHover(); } - 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(mimeType.startsWith("image")){ - QPixmap pm(fi.absoluteFilePath()); - hoverData << pm; - }else{ - mHoverWin->setVisible(false); - return true; - } + } + 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(mimeType.startsWith("image")){ + QPixmap pm(fi.absoluteFilePath()); + hoverData << pm; }else{ - mHoverWin->setVisible(false); - return true; + return exitHover(); } - QPoint globalPos = mapToGlobal(hotSpot); - QPoint where = globalPos + QPoint(30, 0); - if(e->type() == QEvent::HoverEnter){ - mCurHover = curIdx; + }else{ + return exitHover(); + } + if(e->type() == QEvent::HoverEnter){ + mCurHover = curIdx; + mHoverWin->setData(hoverData); + mHoverWin->setPos(); + mHoverWin->setVisible(true); + return true; + } + if(e->type() == QEvent::HoverMove){ + if(curIdx != mCurHover){ mHoverWin->setData(hoverData); - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); - } - mHoverWin->setPos(where); + mCurHover = curIdx; + mHoverWin->setPos(); mHoverWin->setVisible(true); return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ - mCurHover = curIdx; - mHoverWin->setData(hoverData); - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); - } - mHoverWin->setVisible(false); - mHoverWin->setPos(where); - mHoverWin->setVisible(true); - return true; - }else{ - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); - } - mHoverWin->setPos(where); - return true; - } + }else{ + mHoverWin->setPos(); + return true; } } return QTreeView::event(e); } + +bool FileView::exitHover(bool exitVal){ + mHoverWin->setVisible(false); + mCurHover = QModelIndex(); + return exitVal; +} @@ -48,6 +48,7 @@ class FileView : public QTreeView { virtual bool event(QEvent *event); private: + bool exitHover(bool exitVal = true); MessageDialog *mMarkDialog; MessageDialog *mCreateFolderDialog; QAction *mDeleteA; diff --git a/hoverwindow.cpp b/hoverwindow.cpp index 7f2e4af..6ca6bce 100644 --- a/hoverwindow.cpp +++ b/hoverwindow.cpp @@ -9,21 +9,30 @@ #include <QLabel> #include <QApplication> #include <QDesktopWidget> +#include <QSize> #include "hoverwindow.h" +#include "smglobals.h" -HoverWindow::HoverWindow(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f){ +HoverWindow::HoverWindow(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), mAlignCenter(false), mDesktopHeight(-1){ setVisible(false); setWindowOpacity(0.7); + setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); setStyleSheet("QLabel { background-color: #D6A583; color: black; border-width: 2px; border-style: solid; padding: 4px; }"); - QHBoxLayout *mainLayout = new QHBoxLayout; - mainLayout->setContentsMargins(4, 4, 4, 4); + QDesktopWidget *desktop = qApp->desktop(); + mDesktopHeight = desktop->availableGeometry().height(); + QSize curSize = SmGlobals::instance()->cursorSize(); + setHoverOffset(QPoint(curSize.width() + 30, 0)); + mMainLayout = new QHBoxLayout; + mMainLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); + mMainLayout->setContentsMargins(4, 4, 4, 4); mLabel = new QLabel; - mainLayout->addWidget(mLabel); - setLayout(mainLayout); + mMainLayout->addWidget(mLabel); + setLayout(mMainLayout); } void HoverWindow::setContent(const QString &parent, const QStringList &children){ + mAlignCenter = false; QString curText = QString("<p style=\"align: center; text-decoration: underline; font-weight: bold; margin-bottom: 0;\">%1</p>").arg(parent); curText.append("<ul style=\"margin-left: -25; margin-top: 0px;\">"); int count = qMin(6, children.size()); @@ -39,6 +48,7 @@ void HoverWindow::setContent(const QString &parent, const QStringList &children) } void HoverWindow::setPixmap(const QPixmap &pm){ + mAlignCenter = true; QPixmap curPm = pm; if(curPm.height() > 500){ curPm = curPm.scaledToHeight(500); @@ -47,6 +57,8 @@ void HoverWindow::setPixmap(const QPixmap &pm){ curPm = curPm.scaledToWidth(300); } mLabel->setPixmap(curPm); + setMaximumSize(curPm.width() + 10, curPm.height() + 10); + setMinimumSize(curPm.width() + 10, curPm.height() + 10); } void HoverWindow::setData(const QList<QVariant> &data){ @@ -72,16 +84,17 @@ int HoverWindow::pixmapHeight() const{ return pm ? pm->height() : 0; } -void HoverWindow::setPos(const QPoint &cursorPos){ - if(cursorPos.y() - height() / 2 < 0){ - move(QPoint(cursorPos.x(), 0)); - return; +void HoverWindow::setPos(){ + const QPoint globalPos(QCursor::pos()); + QPoint hoverPos(globalPos.x() + mHoverOffset.x(), globalPos.y() + mHoverOffset.y()); + if(mAlignCenter){ + hoverPos = QPoint(hoverPos.x(), hoverPos.y() - height() / 2); } - QDesktopWidget *desktop = qApp->desktop(); - int desktopHeight = desktop->availableGeometry().height(); - if(cursorPos.y() + height() / 2 > desktopHeight){ - move(QPoint(cursorPos.x(), desktopHeight - height())); - return; + if(hoverPos.y() < 0){ + hoverPos = QPoint(hoverPos.x(), 0); + } + if(hoverPos.y() + height() > mDesktopHeight){ + hoverPos = QPoint(hoverPos.x(), mDesktopHeight - height()); } - move(cursorPos); + move(hoverPos); } diff --git a/hoverwindow.h b/hoverwindow.h index 49aec40..ee061dd 100644 --- a/hoverwindow.h +++ b/hoverwindow.h @@ -13,19 +13,27 @@ #include <QVariant> class QLabel; +class QHBoxLayout; class HoverWindow : public QWidget { Q_OBJECT + Q_PROPERTY(QPoint HoverOffset READ hoverOffset WRITE setHoverOffset); public: - explicit HoverWindow(QWidget *parent = 0, Qt::WindowFlags f = Qt::FramelessWindowHint); + explicit HoverWindow(QWidget *parent = 0, Qt::WindowFlags f = Qt::Tool | Qt::FramelessWindowHint); void setContent(const QString &parent, const QStringList &children); void setPixmap(const QPixmap &pm); void setData(const QList<QVariant> &data); int pixmapHeight() const; - void setPos(const QPoint &cursorPos); + void setPos(); + QPoint hoverOffset() const { return mHoverOffset; } + void setHoverOffset(const QPoint &point) { mHoverOffset = point; } private: QLabel *mLabel; + QPoint mHoverOffset; + QHBoxLayout *mMainLayout; + bool mAlignCenter; + int mDesktopHeight; }; #endif // HOVERWINDOW_H diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 5a57ec4..e4559fc 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -334,53 +334,51 @@ void SeriesTreeView::contextMenuEvent(QContextMenuEvent *e){ bool SeriesTreeView::event(QEvent *e){ QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if((hEvent->type() == QEvent::HoverEnter) || (hEvent->type() == QEvent::HoverLeave) || (hEvent->type() == QEvent::HoverMove)){ - if(!mHover){ - return true; - } - QModelIndex curIdx; - QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorOffset()); - QPoint globalPos = mapToGlobal(hotSpot); - QPoint where = globalPos + QPoint(30, 30); - curIdx = indexAt(hotSpot); - if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ - if(!curIdx.isValid()){ - return true; - } - if(curIdx.parent() != QModelIndex()){ - mHoverWin->setVisible(false); - mCurHover = QModelIndex(); - return true; - } + 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); + if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ + if(!curIdx.isValid() || (curIdx.parent() != QModelIndex())){ + return exitHover(); } - if(e->type() == QEvent::HoverEnter){ + } + if(e->type() == QEvent::HoverEnter){ + mCurHover = curIdx; + mHoverWin->setContent(curIdx.data(Qt::DisplayRole).toString(), children(curIdx)); + mHoverWin->setPos(); + mHoverWin->setVisible(true); + return true; + } + if(e->type() == QEvent::HoverMove){ + if(curIdx != mCurHover){ mCurHover = curIdx; mHoverWin->setContent(curIdx.data(Qt::DisplayRole).toString(), children(curIdx)); - mHoverWin->setPos(where); + mHoverWin->setVisible(false); + mHoverWin->setPos(); mHoverWin->setVisible(true); return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ - mCurHover = curIdx; - mHoverWin->setContent(curIdx.data(Qt::DisplayRole).toString(), children(curIdx)); - mHoverWin->setVisible(false); - mHoverWin->setPos(where); - mHoverWin->setVisible(true); - return true; - }else{ - mHoverWin->setPos(where); - return true; - } - } - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); + }else{ + mHoverWin->setPos(); return true; } } + if(e->type() == QEvent::HoverLeave){ + return exitHover(); + } return QTreeView::event(e); } +bool SeriesTreeView::exitHover(bool exitVal){ + mHoverWin->setVisible(false); + mCurHover = QModelIndex(); + return exitVal; +} + QStringList SeriesTreeView::children(const QModelIndex &idx) const{ if(!idx.isValid()){ return QStringList(); diff --git a/seriestreewidget.h b/seriestreewidget.h index 774120a..b8d89e6 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -79,6 +79,7 @@ class SeriesTreeView : public QTreeView { virtual bool event(QEvent *event); private: + bool exitHover(bool exitVal = true); QStringList children(const QModelIndex &idx) const; QModelIndex mCurHover; HoverWindow *mHoverWin; diff --git a/smglobals.cpp b/smglobals.cpp index 84f0fd8..6b32527 100644 --- a/smglobals.cpp +++ b/smglobals.cpp @@ -84,13 +84,13 @@ PictureViewer *SmGlobals::pictureViewer() { return mPictureViewer; } -int SmGlobals::cursorOffset() { - if(mCursorOffset == -1){ +QSize SmGlobals::cursorSize() { + if(!mCursorSize.isValid()){ XFixesCursorImage *curImage = XFixesGetCursorImage(QX11Info::display()); - mCursorOffset = curImage->height; + mCursorSize = QSize(curImage->width, curImage->height); XFree(curImage); } - return mCursorOffset; + return mCursorSize; } -SmGlobals::SmGlobals() : mPictureViewer(0), mCursorOffset(-1) {} +SmGlobals::SmGlobals() : mPictureViewer(0) {} diff --git a/smglobals.h b/smglobals.h index e1683ee..06d7b43 100644 --- a/smglobals.h +++ b/smglobals.h @@ -9,6 +9,7 @@ #define SMUBERMODELSINGLETON_H #include <QHash> +#include <QSize> class QAbstractItemModel; class PictureViewer; @@ -20,7 +21,7 @@ class SmGlobals : public QObject { static SmGlobals *instance(); QAbstractItemModel *model(const QString &which); PictureViewer *pictureViewer(); - int cursorOffset(); + QSize cursorSize(); private: SmGlobals(); @@ -29,7 +30,7 @@ class SmGlobals : public QObject { static SmGlobals *mInstance; QHash<QString, QAbstractItemModel*> mModels; PictureViewer *mPictureViewer; - int mCursorOffset; + QSize mCursorSize; }; #endif |