/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include "picturelistview.h" #include "smglobals.h" PictureListView::PictureListView(QWidget *parent) : SmTreeView("ui/picheaderpos", parent) { //setup models mModel = static_cast(SmGlobals::instance()->model("PicFiles")); mProxy = new QSortFilterProxyModel(this); mProxy->setSourceModel(mModel); setModel(mProxy); connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectedFilesChanged())); mMappingTreeModel = static_cast(SmGlobals::instance()->model("MappingTree")); //hover window mHoverWin = new HoverWindow(this); //misc settings setSortingEnabled(true); setAttribute(Qt::WA_Hover); setSelectionMode(QAbstractItemView::ExtendedSelection); setAlternatingRowColors(true); setColumnHidden(1, true); setColumnHidden(4, true); } void PictureListView::mappingChanged(int pMapId){ mModel->setMapping(pMapId); qApp->setOverrideCursor(Qt::WaitCursor); mModel->populate(); for(int i = 0; i < PicFilesModel::NumFields; ++i){ resizeColumnToContents(i); } qApp->restoreOverrideCursor(); } void PictureListView::deletePics(){ QModelIndexList sel = selectionModel()->selectedRows(); if(sel.isEmpty()){ return; } QString msg = QString(tr("Really delete %1 pics from archive?")).arg(sel.count()); int retval = QMessageBox::question(this, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No); if(retval == QMessageBox::No){ return; } QList > files; foreach(QModelIndex i, sel){ files << qMakePair(i.data(PicFilesModel::IdRole).toInt(), i.data(PicFilesModel::FullPathRole).toString()); } mModel->removeFiles(files); } void PictureListView::refresh(){ mModel->populate(); } void PictureListView::setPVData(int replace){ QModelIndexList sel = selectionModel()->selectedRows(); PicDataList pics; foreach(QModelIndex i, sel){ QModelIndex real = mProxy->mapToSource(i); pics << mModel->dataList(real); } mPV->addFiles(pics, replace); } void PictureListView::setPVAll(){ PicDataList data = mModel->allFiles(); mPV->addFiles(data, true); } void PictureListView::setHoverWinVisible(bool visible) const { mHoverWin->setVisible(visible); } void PictureListView::hideEvent(QHideEvent *){ QByteArray pvHeader = header()->saveState(); QSettings s; s.setValue("ui/pvheader", pvHeader); } bool PictureListView::event(QEvent *e){ if(e->type() == QEvent::Leave){ mHoverWin->setVisible(false); return SmTreeView::event(e); } QHoverEvent *hEvent = static_cast(e); if(!hEvent){ return SmTreeView::event(e); } QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() + mCursorOffset); QModelIndex curIdx = indexAt(hotSpot); if(e->type() == QEvent::HoverEnter || e->type() == QEvent::HoverMove){ if(!curIdx.isValid() || curIdx.column() != PicFilesModel::FileName){ mHoverWin->setVisible(false); mCurHover = QModelIndex(); return true; } } if(e->type() == QEvent::HoverEnter){ mCurHover = curIdx; QPixmap pm; pm.load(mCurHover.data(PicFilesModel::FullPathRole).toString()); mHoverWin->setPixmap(pm); mHoverWin->setPos(); mHoverWin->setCaption(mCurHover.data().toString()); mHoverWin->setVisible(true); return true; } if(e->type() == QEvent::HoverMove){ if(curIdx != mCurHover){ mCurHover = curIdx; QPixmap pm; pm.load(mCurHover.data(PicFilesModel::FullPathRole).toString()); mHoverWin->setPixmap(pm); mHoverWin->setPos(); mHoverWin->setVisible(true); mHoverWin->setCaption(mCurHover.data().toString()); return true; } } return SmTreeView::event(e); } void PictureListView::contextMenuEvent(QContextMenuEvent *e){ QMenu ctxMenu; for(int i = 0; i < actions().count(); ++i){ if(actions().at(i)->text() == "Refresh"){ ctxMenu.addSeparator(); } ctxMenu.addAction(actions().at(i)); } ctxMenu.exec(e->globalPos()); } void PictureListView::selectedFilesChanged(){ QModelIndexList sel = selectionModel()->selectedRows(); if(sel.isEmpty()){ return; } QList fileIds; qint64 selSize = 0; foreach(QModelIndex i, sel){ fileIds << i.data(PicFilesModel::IdRole); selSize += i.data(PicFilesModel::SizeRole).toInt(); } emit numSelected(sel.size()); emit selectedSize(selSize); }