diff options
Diffstat (limited to 'pictureviewer2.cpp')
-rw-r--r-- | pictureviewer2.cpp | 79 |
1 files changed, 68 insertions, 11 deletions
diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 1251c6f..cc7357f 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -41,7 +41,7 @@ const QString PictureViewer2::mDefaultFile = ":/picgone.png"; -PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mFnItem(0), mMappingItem(0), mShowInfoItem(true), mShowMappingItem(true) { +PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mFnItem(0), mMappingItem(0), mShowInfoItem(true), mShowMappingItem(true), mShowMarkItem(false) { //behave like QDialog, but don't be one... setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000)); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -81,7 +81,6 @@ void PictureViewer2::addFiles(const PicDataList &files, bool clear){ QVariant curMd5 = mFiles.at(mCurPos).at(PicFilesModel::Md5Sum); if(clear){ mFiles = files; - }else{ foreach(const PicData &f, files){ if(!mFiles.contains(f)){ @@ -103,6 +102,17 @@ void PictureViewer2::addFiles(const PicDataList &files, bool clear){ } } +void PictureViewer2::addFiles(const QStringList &files, bool clear){ + if(files.isEmpty()){ + return; + } + PicDataList pd; + foreach(QString f, files){ + pd << picData(f); + } + addFiles(pd, clear); +} + void PictureViewer2::addFiles(const QString &dir, bool clear){ QFileInfo fi(dir); if(!fi.isDir()){ @@ -165,6 +175,7 @@ void PictureViewer2::next(){ }else{ ++mCurPos; } + mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos))); showFile(mFiles.at(mCurPos)); } @@ -174,6 +185,7 @@ void PictureViewer2::previous(){ }else{ --mCurPos; } + mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos))); showFile(mFiles.at(mCurPos)); } @@ -238,6 +250,9 @@ void PictureViewer2::initActions(){ if(a->data().toInt() == SlideAction){ mSlideA = a; } + if(a->data().toInt() == MarkAction){ + mMarkA = a; + } } } @@ -267,6 +282,23 @@ void PictureViewer2::addToNewPics(){ mNewPicsDlg->setFile(mCurPicData.at(PicFilesModel::FullPath).toString()); } +void PictureViewer2::markCurrent(){ + if(!mMarkedFiles.contains(mCurPicData)){ + mMarkedFiles << mCurPicData; + mMarkA->setChecked(true); + next(); + }else{ + mMarkedFiles.removeAll(mCurPicData); + mMarkA->setChecked(false); + } + constructInfoItem(mCurPicData, QSize()); +} + +void PictureViewer2::clearMarks(){ + mMarkedFiles.clear(); + constructInfoItem(mCurPicData, QSize()); +} + void PictureViewer2::wheelEvent(QWheelEvent *event){ int steps = event->delta() / 8 / 15; if(steps < 0){ @@ -291,6 +323,15 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){ if(e->key() == Qt::Key_Space){ mSlideA->toggle(); } + if(e->key() == Qt::Key_M){ + markCurrent(); + } + if(e->key() == Qt::Key_N){ + next(); + } + if(e->key() == Qt::Key_P){ + previous(); + } e->accept(); } @@ -361,7 +402,18 @@ void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){ mScene->removeItem(mFnItem); delete mFnItem; } + if(!picSize.isValid()){ + QPixmap pm = QPixmap(data.at(PicFilesModel::FullPath).toString()); + picSize = pm.size(); + } mFnItem = new PictureViewer2Item(data, mFiles.size(), picSize); + if(mShowMarkItem){ + if(mMarkedFiles.contains(data)){ + mFnItem->appendText("<span style=\"color:green\">marked</span>"); + }else{ + mFnItem->appendText("<span style=\"color:red\">not marked</span>"); + } + } mFnItem->setPos(getPos(mFnItem, mConfigInfoPos, mInfoPos)); mScene->addItem(mFnItem); } @@ -468,14 +520,13 @@ PictureViewer2Item::PictureViewer2Item(const PicData &data, const int numSelecte QStringList textList; //prevent QStaticText from wrapping filesnames with spaces //we shouldn't allow this in the first place - textList << data.at(PicFilesModel::FileName).toString().replace(' ', '_'); - textList << QString("%1x%2").arg(QString::number(picSize.width())).arg(QString::number(picSize.height())); + mTextList << data.at(PicFilesModel::FileName).toString().replace(' ', '_'); + mTextList << QString("%1x%2").arg(QString::number(picSize.width())).arg(QString::number(picSize.height())); QLocale l; - textList << QString(QObject::tr("%1 bytes")).arg(l.toString(data.at(PicFilesModel::Size).toInt())); - textList << l.toString(data.at(PicFilesModel::Added).toDate()); - textList << data.at(PicFilesModel::MimeType).toString(); - textList << QString(QObject::tr("%1 files selected")).arg(QString::number(numSelected)); - mText = QStaticText(textList.join("<br/>")); + mTextList << QString(QObject::tr("%1 bytes")).arg(l.toString(data.at(PicFilesModel::Size).toInt())); + mTextList << l.toString(data.at(PicFilesModel::Added).toDate()); + mTextList << data.at(PicFilesModel::MimeType).toString(); + mTextList << QString(QObject::tr("%1 files selected")).arg(QString::number(numSelected)); setZValue(1); } @@ -492,7 +543,8 @@ QRectF PictureViewer2Item::boundingRect() const { if(mDoc){ size = mDoc->size(); }else{ - size = mText.size(); + QStaticText text = QStaticText(mTextList.join("<br/>")); + size = text.size(); size += QSize(10, 10); } QRectF retval; @@ -501,6 +553,10 @@ QRectF PictureViewer2Item::boundingRect() const { return retval; } +void PictureViewer2Item::appendText(const QString &text){ + mTextList << text; +} + void PictureViewer2Item::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ Q_UNUSED(option); Q_UNUSED(widget); @@ -518,7 +574,8 @@ void PictureViewer2Item::paint(QPainter *painter, const QStyleOptionGraphicsItem if(mDoc){ mDoc->drawContents(painter); }else{ - painter->drawStaticText(5, 5, mText); + QStaticText text = QStaticText(mTextList.join("<br/>")); + painter->drawStaticText(5, 5, text); } painter->restore(); } |