summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pictureviewer2.cpp63
-rw-r--r--pictureviewer2.h16
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 <QContextMenuEvent>
#include <QMenu>
#include <QTimer>
+#include <QPainter>
+#include <QStyleOptionGraphicsItem>
#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<Qt::WindowType>(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 <QGraphicsView>
#include <QList>
#include <QVariant>
+#include <QGraphicsItem>
class QGraphicsScene;
class QGraphicsPixmapItem;
class QWheelEvent;
class QContextMenuEvent;
class QTimer;
+class PictureViewer2FilenameItem;
typedef QList<QVariant> PicData;
typedef QList<QList<QVariant> > 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