summaryrefslogtreecommitdiffstats
path: root/pictureviewer2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pictureviewer2.cpp')
-rw-r--r--pictureviewer2.cpp63
1 files changed, 59 insertions, 4 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();
+}