diff options
author | Arno <am@disconnect.de> | 2010-10-23 09:20:18 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-10-23 09:20:18 +0200 |
commit | 9092371858356efde3e2d6d002f692308127389c (patch) | |
tree | 10e6c25457a7710a1c8cdd1791779cba2d661511 | |
parent | 19674f64699ba883f24a97a04505ca2c7f12634e (diff) | |
download | SheMov-9092371858356efde3e2d6d002f692308127389c.tar.gz SheMov-9092371858356efde3e2d6d002f692308127389c.tar.bz2 SheMov-9092371858356efde3e2d6d002f692308127389c.zip |
Fixed crash when remembering selected tab, improve performance
Strange things happen. As stated in commit 19674f6, SheMov crashed when
setting the archive as current tab and then changing to filesystem view.
This can be resolved by first showing the MainWindow and then applying
the display changes. I guess it's an qt internal thing.
Also vastly improved performance when hovering by only entering the
hover code path when we actually have a HoverEvent. Before CPU usage
spiked at 100% even if SheMov was idle.
-rw-r--r-- | filestreewidget.cpp | 104 | ||||
-rw-r--r-- | fileview.cpp | 128 | ||||
-rw-r--r-- | fileview.h | 2 | ||||
-rw-r--r-- | seriestreewidget.cpp | 67 | ||||
-rw-r--r-- | shemov.cpp | 12 | ||||
-rw-r--r-- | shemov.h | 3 |
6 files changed, 165 insertions, 151 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index dad3724..e5ab111 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -289,71 +289,73 @@ void FilesTreeView::contextMenuEvent(QContextMenuEvent *event){ } bool FilesTreeView::event(QEvent *e){ - QSettings s; - if(!s.value("ui/hoverpics").toBool()){ - return true; - } - QModelIndex curIdx; QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if(!hEvent){ - return true; - } - 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); + if((hEvent->type() == QEvent::HoverEnter) || (hEvent->type() == QEvent::HoverLeave) || (hEvent->type() == QEvent::HoverMove)){ + if(!mHover){ return true; } - if(fileType.toInt() == FilesTreeModel::Movie){ - mHoverWin->setVisible(false); + QModelIndex curIdx; + + if(!hEvent){ return true; } - } + QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorOffset()); + QPoint globalPos = mapToGlobal(hotSpot); + QPoint where = globalPos + QPoint(30, 0); - if(e->type() == QEvent::HoverEnter){ - mCurHover = curIdx; - QPixmap pm = QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString()); - mHoverWin->setPixmap(pm); - mHoverWin->setPos(where); - mHoverWin->setVisible(true); - return true; - } - if(e->type() == QEvent::HoverMove){ - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); + 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(curIdx != mCurHover){ + + if(e->type() == QEvent::HoverEnter){ mCurHover = curIdx; - mHoverWin->setPixmap(QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString())); - mHoverWin->setVisible(false); + QPixmap pm = QPixmap(curIdx.data(FilesTreeModel::FullPathRole).toString()); + mHoverWin->setPixmap(pm); mHoverWin->setPos(where); mHoverWin->setVisible(true); return true; - }else{ - mHoverWin->setPos(where); + } + 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); return true; } } - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); - return true; - } return QTreeView::event(e); } diff --git a/fileview.cpp b/fileview.cpp index 2da9bc6..fdd51e4 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -54,6 +54,13 @@ void FileView::createFolder(){ mCreateFolderDialog->show(); } +void FileView::readConfig(){ + QSettings s; + mHover = s.value("ui/hoverpics", true).toBool(); + mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0); +} + + void FileView::doMark(){ int rowCount = model()->rowCount(rootIndex()); QString sRegex = mMarkDialog->text(); @@ -139,83 +146,78 @@ void FileView::resizeEvent(QResizeEvent *e){ } bool FileView::event(QEvent *e){ - QSettings s; - if(!s.value("ui/hoverpics").toBool()){ - return true; - } - - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); - mCurHover = QModelIndex(); - return true; - } - QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - 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; - } - - 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{ + 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; } - }else{ - mHoverWin->setVisible(false); - return true; - } - - QPoint globalPos = mapToGlobal(hotSpot); - QPoint where = globalPos + QPoint(30, 0); - if(e->type() == QEvent::HoverEnter){ - mCurHover = curIdx; - mHoverWin->setData(hoverData); - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); + QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorOffset()); + QModelIndex curIdx = indexAt(hotSpot); + if(!curIdx.isValid()){ + return true; } - mHoverWin->setPos(where); - mHoverWin->setVisible(true); - return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ + if(curIdx.column() != 0){ + 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; + } + }else{ + mHoverWin->setVisible(false); + return true; + } + QPoint globalPos = mapToGlobal(hotSpot); + QPoint where = globalPos + QPoint(30, 0); + if(e->type() == QEvent::HoverEnter){ 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); + } + 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; } - mHoverWin->setPos(where); - return true; } } return QTreeView::event(e); @@ -35,6 +35,7 @@ class FileView : public QTreeView { void markFiles(); void unmarkFiles(); void createFolder(); + void readConfig(); private slots: void doMark(); @@ -52,6 +53,7 @@ class FileView : public QTreeView { QAction *mDeleteA; HoverWindow *mHoverWin; QModelIndex mCurHover; + bool mHover; }; #endif diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index c9abafd..5a57ec4 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -333,52 +333,51 @@ void SeriesTreeView::contextMenuEvent(QContextMenuEvent *e){ } bool SeriesTreeView::event(QEvent *e){ - QSettings s; - if(!s.value("ui/hoverarchive").toBool()){ - return true; - } - 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, 30); - - curIdx = indexAt(hotSpot); - if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ - if(!curIdx.isValid()){ + if((hEvent->type() == QEvent::HoverEnter) || (hEvent->type() == QEvent::HoverLeave) || (hEvent->type() == QEvent::HoverMove)){ + if(!mHover){ return true; } - if(curIdx.parent() != QModelIndex()){ - mHoverWin->setVisible(false); - mCurHover = QModelIndex(); - 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(e->type() == QEvent::HoverEnter){ - mCurHover = curIdx; - mHoverWin->setContent(curIdx.data(Qt::DisplayRole).toString(), children(curIdx)); - mHoverWin->setPos(where); - mHoverWin->setVisible(true); - return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ + if(e->type() == QEvent::HoverEnter){ 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); + } + 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); return true; } } - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); - return true; - } return QTreeView::event(e); } @@ -61,6 +61,8 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mATree, SIGNAL(needWindowTitleChange(QString)), this, SLOT(setWindowTitle(QString))); connect(mATree->filesWidget()->filesTree()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mATree->seriesWidget()->seriesTree()->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSelectionCount(QItemSelection,QItemSelection))); + connect(this, SIGNAL(configChanged()), mATree->seriesWidget()->seriesTree(), SLOT(readConfig())); + connect(this, SIGNAL(configChanged()), mATree->filesWidget()->filesTree(), SLOT(readConfig())); //newmoviewizard mNewMovieWizard = new NewMovieWizard(this); @@ -83,14 +85,15 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mFSWidget->dirModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(setFsFree())); connect(mFSWidget->dirModel(), SIGNAL(layoutChanged()), this, SLOT(setFsFree())); connect(mFSWidget->dirModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(setFsFree())); + connect(this, SIGNAL(configChanged()), mFSWidget->fileView(), SLOT(readConfig())); QWidget *centralWidget = new QWidget; centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget); + show(); mATree->seriesWidget()->readSettings(); mFSWidget->readSettings(); readSettings(); - show(); mFSWidget->fileView()->setFocus(Qt::ActiveWindowFocusReason); } @@ -142,8 +145,7 @@ void SheMov::configure(){ dlg.exec(); createOpenWithMenuFS(); createOpenWithMenuAV(); - mATree->seriesWidget()->seriesTree()->readConfig(); - mATree->filesWidget()->filesTree()->readConfig(); + emit configChanged(); } void SheMov::tabChanged(int newTab){ @@ -606,6 +608,10 @@ void SheMov::readSettings(){ if(winState){ setWindowState(Qt::WindowMaximized); } + int currentTab = s.value("ui/selectedtab", 0).toInt(); + if(currentTab < mTab->count() && currentTab != mTab->currentIndex()){ + mTab->setCurrentIndex(currentTab); + } int filesMode = s.value("ui/filestreemode", FilesTreeModel::Normal).toInt(); switch(filesMode){ case FilesTreeModel::Normal: @@ -44,6 +44,9 @@ class SheMov : public QMainWindow { void newMovieWizardWithFiles(); void setSize(qint64 size); + signals: + void configChanged(); + private: void createStatusbar(); void createActions(); |