summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filestreewidget.cpp99
-rw-r--r--filestreewidget.h1
-rw-r--r--fileview.cpp122
-rw-r--r--fileview.h1
-rw-r--r--hoverwindow.cpp43
-rw-r--r--hoverwindow.h12
-rw-r--r--seriestreewidget.cpp70
-rw-r--r--seriestreewidget.h1
-rw-r--r--smglobals.cpp10
-rw-r--r--smglobals.h5
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;
+}
diff --git a/fileview.h b/fileview.h
index 93fa045..604fa8f 100644
--- a/fileview.h
+++ b/fileview.h
@@ -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