From 2f6d52fdea06ff45c9e03768e90eaac658cef487 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 10 Mar 2012 10:03:18 +0100 Subject: Show filename in PictureViewer Create a GraphicsItem showing the filename at the top of the view. Also put the filename in the window title. --- pictureviewer2.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++---- pictureviewer2.h | 16 +++++++++++++- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 1b797d3..1f8f15b 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -14,11 +14,13 @@ #include #include #include +#include +#include #include "pictureviewer2.h" #include "pictureswidget.h" -PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png") { +PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png"), mFnItem(0) { //behave like QDialog, but don't be one... setWindowFlags(QFlags(0x1|0x2|0x1000|0x2000|0x10000|0x8000000)); @@ -43,6 +45,7 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) setMinimumSize(mMinimunSize); move(50, 50); setVisible(false); + mScene->setSceneRect(QRectF(0, 0, width() - 10, height() - 10)); showFile(mFiles.at(mCurPos)); } @@ -123,15 +126,30 @@ void PictureViewer2::showFile(const PicData &file){ } if(mCur){ mScene->removeItem(mCur); + delete mCur; mCur = 0; } mCur = new QGraphicsPixmapItem(pixmap); - float cX = width() - pixmap.width() / 2; - float cY = height() - pixmap.height() / 2; - mCur->setPos(QPointF(cX, cY)); + float cX = (width() / 2) - (pixmap.width() / 2); + float cY = height() / 2 - pixmap.height() / 2; mScene->addItem(mCur); + mCur->setPos(cX, cY); + setWindowTitle(constructWindowTitle()); + constructFilenameItem(mFiles.at(mCurPos).at(PicFilesModel::FileName).toString()); } +void PictureViewer2::constructFilenameItem(const QString &filename){ + if(mFnItem){ + mScene->removeItem(mFnItem); + delete mFnItem; + } + mFnItem = new PictureViewer2FilenameItem(filename); + QSizeF itemSize = mFnItem->boundingRect().size(); + int thisWidth = size().width(); + int xPos = (thisWidth / 2) - (itemSize.width() / 2); + mFnItem->setPos(xPos, 0); + mScene->addItem(mFnItem); +} void PictureViewer2::setCurPalette(const QPixmap &pic){ QPoint val1 = QPoint(qrand() % pic.width(), qrand() % pic.height()); @@ -144,3 +162,40 @@ void PictureViewer2::setCurPalette(const QPixmap &pic){ g.setColorAt(1, c2); setBackgroundBrush(QBrush(g)); } + +QString PictureViewer2::constructWindowTitle() const { + QString retval = QString(tr("PicViewer 2 - [%1]")).arg(mFiles.at(mCurPos).at(PicFilesModel::FileName).toString()); + return retval; +} + +PictureViewer2FilenameItem::PictureViewer2FilenameItem(const QString &fileName, QGraphicsItem *parent) : QGraphicsItem(parent), mFilename(fileName) { + setZValue(1); +} + +QRectF PictureViewer2FilenameItem::boundingRect() const { + QSize size = qApp->fontMetrics().size(Qt::TextSingleLine, mFilename); + size += QSize(2, 2); + QRectF retval; + retval.setWidth(size.width()); + retval.setHeight(size.height()); + return retval; +} + +void PictureViewer2FilenameItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ + Q_UNUSED(option); + Q_UNUSED(widget); + painter->save(); + painter->setRenderHint(QPainter::Antialiasing, false); + painter->setRenderHint(QPainter::TextAntialiasing, true); + QColor bgColor = QColor(237, 12, 102); + bgColor.setAlpha(70); + QColor fgColor = QColor(209, 207, 232); + QBrush brush(bgColor); + painter->setPen(QColor(Qt::yellow)); + painter->setBrush(brush); + painter->drawRect(boundingRect()); + painter->setPen(QPen(fgColor)); + QPoint start(1, qApp->fontMetrics().ascent() + 1); + painter->drawText(start, mFilename); + painter->restore(); +} diff --git a/pictureviewer2.h b/pictureviewer2.h index 9610da1..a45c097 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -11,12 +11,14 @@ #include #include #include +#include class QGraphicsScene; class QGraphicsPixmapItem; class QWheelEvent; class QContextMenuEvent; class QTimer; +class PictureViewer2FilenameItem; typedef QList PicData; typedef QList > PicDataList; @@ -40,11 +42,12 @@ class PictureViewer2 : public QGraphicsView { private slots: void showFile(const PicData &file); + void constructFilenameItem(const QString &filename); private: void setupDialog(); void setCurPalette(const QPixmap &pic); - void position(); + QString constructWindowTitle() const; PicDataList mFiles; QGraphicsScene *mScene; QSize mMinimunSize; @@ -52,6 +55,17 @@ class PictureViewer2 : public QGraphicsView { int mCurPos; QTimer *mSlideTimer; const QString mDefaultFile; + PictureViewer2FilenameItem *mFnItem; +}; + +class PictureViewer2FilenameItem : public QGraphicsItem { + public: + explicit PictureViewer2FilenameItem(const QString &fileName, QGraphicsItem *parent = 0); + QRectF boundingRect() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + + private: + QString mFilename; }; #endif // PICTUREVIEWER2_H -- cgit v1.2.3-70-g09d2