summaryrefslogtreecommitdiffstats
path: root/pictureviewer2.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2012-03-24 08:40:23 +0100
committerArno <am@disconnect.de>2012-03-24 08:40:23 +0100
commitf30d07e5acb83dd74bc6e6dc75b8b1c9e39e6e01 (patch)
treea5a7f348cea349330d230d96d59e79ec8adf7ead /pictureviewer2.cpp
parente788be03472f1617a05274dac6d7f8939ca85f46 (diff)
downloadSheMov-f30d07e5acb83dd74bc6e6dc75b8b1c9e39e6e01.tar.gz
SheMov-f30d07e5acb83dd74bc6e6dc75b8b1c9e39e6e01.tar.bz2
SheMov-f30d07e5acb83dd74bc6e6dc75b8b1c9e39e6e01.zip
Show mappings in PictureViewer2
Hell, this was one heck of a bitch. Lots of changes just to show the mapping tree in PictureViewer2. Did I mention that I hate recursion? Added a function for fetching a SmTreeItem * from MappingTreeModel for paths, just to turn it into a QTextDocument in PictureViewer2. Of course everything is recursive. Did I say that I hate recursion? Well, as said in the comments, one recursion function seems fishy, but it works (tm).
Diffstat (limited to 'pictureviewer2.cpp')
-rw-r--r--pictureviewer2.cpp110
1 files changed, 102 insertions, 8 deletions
diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp
index a5f250b..8c6d831 100644
--- a/pictureviewer2.cpp
+++ b/pictureviewer2.cpp
@@ -18,11 +18,17 @@
#include <QStyleOptionGraphicsItem>
#include <QDate>
#include <QSettings>
+#include <QTextDocument>
+#include <QTextCursor>
+#include <QTextList>
#include "pictureviewer2.h"
#include "pictureswidget.h"
+#include "smglobals.h"
+#include "mappingtreemodel.h"
+#include "smtreeitem.h"
-PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png"), mFnItem(0) {
+PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png"), mFnItem(0), mMappingItem(0) {
//behave like QDialog, but don't be one...
setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000));
@@ -201,6 +207,7 @@ void PictureViewer2::showFile(const PicData &file){
setWindowTitle(constructWindowTitle());
//TODO: configure!
constructInfoItem(file, pixmap.size());
+ constructMappingItem(file);
}
void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){
@@ -209,11 +216,37 @@ void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){
mScene->removeItem(mFnItem);
delete mFnItem;
}
- mFnItem = new PictureViewer2FileinfoItem(data, mFiles.size(), picSize);
+ mFnItem = new PictureViewer2Item(data, mFiles.size(), picSize);
mFnItem->setPos(mInfoPos);
mScene->addItem(mFnItem);
}
+void PictureViewer2::constructMappingItem(const PicData &file){
+ MappingTreeModel *mappingModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
+ QList<QVariant> mappings = mappingModel->mappingsForFile(file.at(PicFilesModel::Id));
+ QStringList mappingPaths;
+ foreach(QVariant mId, mappings){
+ mappingPaths << mappingModel->mappingDataFromId(mId.toInt()).path.join("/");
+ }
+ SmTreeItem *mappingTree = mappingModel->treeFromPaths(mappingPaths);
+ if(mappingTree){
+ if(mMappingItem){
+ mMappingPos = mMappingItem->scenePos();
+ mScene->removeItem(mMappingItem);
+ delete mMappingItem;
+ }
+ QTextDocument *mapString = treeToString(mappingTree);
+ mMappingItem = new PictureViewer2Item(mapString);
+ if(mFnItem){
+ QPointF fnRect = mFnItem->scenePos();
+ QPointF myPos = QPointF(fnRect.x(), fnRect.y() + mFnItem->boundingRect().height() + 10);
+ mMappingItem->setPos(myPos);
+ }
+ mScene->addItem(mMappingItem);
+ }
+ delete mappingTree;
+}
+
void PictureViewer2::setGradient(const QPixmap &pic){
QPoint val1 = QPoint(qrand() % pic.width(), qrand() % pic.height());
QPoint val2 = QPoint(qrand() % pic.width(), qrand() % pic.height());
@@ -226,12 +259,54 @@ void PictureViewer2::setGradient(const QPixmap &pic){
setBackgroundBrush(QBrush(g));
}
+QTextDocument *PictureViewer2::treeToString(const SmTreeItem *root) const{
+ QTextDocument *retval = new QTextDocument;
+ retval->setIndentWidth(1);
+ retval->setDocumentMargin(8);
+ QTextCursor *cursor = new QTextCursor(retval);
+ QTextListFormat listFormat;
+ listFormat.setStyle(QTextListFormat::ListDisc);
+ listFormat.setIndent(10);
+ for(int i = 0 ; i < root->childCount(); ++i){
+ cursor->createList(listFormat);
+ cursor->insertText(root->child(i)->data(0).toString());
+ treeToStringRecursive(root->child(i), cursor);
+ }
+ return retval;
+}
+
+void PictureViewer2::treeToStringRecursive(const SmTreeItem *parent, QTextCursor *cursor) const{
+ //hell, this kinda does what it's supposed to, but it seems fishy...
+ //don't like the break and checking the parent...
+ for(int i = 0 ; i < parent->childCount(); ++i){
+ QTextListFormat listFormat;
+ listFormat.setStyle(QTextListFormat::ListDisc);
+ listFormat.setIndent(cursor->currentList()->format().indent() + 5);
+ if(parent->child(i)->childCount()){
+ cursor->insertList(listFormat);
+ cursor->insertText(parent->child(i)->data(0).toString());
+ treeToStringRecursive(parent->child(i), cursor);
+ return;
+ }else{
+ const SmTreeItem *p = parent;
+ cursor->insertList(listFormat);
+ for(int j = 0; j < p->childCount(); ++j){
+ if(j != 0){
+ cursor->insertBlock();
+ }
+ cursor->insertText(p->child(j)->data(0).toString());
+ }
+ break;
+ }
+ }
+}
+
QString PictureViewer2::constructWindowTitle() const {
QString retval = QString(tr("PicViewer 2 - [%1]")).arg(mFiles.at(mCurPos).at(PicFilesModel::FileName).toString());
return retval;
}
-PictureViewer2FileinfoItem::PictureViewer2FileinfoItem(const PicData &data, const int numSelected, const QSize &picSize, QGraphicsItem *parent) : QGraphicsItem(parent){
+PictureViewer2Item::PictureViewer2Item(const PicData &data, const int numSelected, const QSize &picSize, QGraphicsItem *parent) : QGraphicsItem(parent), mDoc(0){
QStringList textList;
//prevent QStaticText from wrapping filesnames with spaces
//we shouldn't allow this in the first place
@@ -244,18 +319,32 @@ PictureViewer2FileinfoItem::PictureViewer2FileinfoItem(const PicData &data, cons
textList << QString(QObject::tr("%1 files selected")).arg(QString::number(numSelected));
mText = QStaticText(textList.join("<br/>"));
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
+ setZValue(1);
+}
+
+PictureViewer2Item::PictureViewer2Item(QTextDocument *doc, QGraphicsItem *parent) : QGraphicsItem(parent), mDoc(doc){
+ setZValue(1);
+}
+
+PictureViewer2Item::~PictureViewer2Item(){
+ delete mDoc;
}
-QRectF PictureViewer2FileinfoItem::boundingRect() const {
- QSizeF size = mText.size();
- size += QSize(10, 10);
+QRectF PictureViewer2Item::boundingRect() const {
+ QSizeF size;
+ if(mDoc){
+ size = mDoc->size();
+ }else{
+ size = mText.size();
+ size += QSize(10, 10);
+ }
QRectF retval;
retval.setWidth(size.width());
retval.setHeight(size.height());
return retval;
}
-void PictureViewer2FileinfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
+void PictureViewer2Item::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
Q_UNUSED(option);
Q_UNUSED(widget);
painter->save();
@@ -269,6 +358,11 @@ void PictureViewer2FileinfoItem::paint(QPainter *painter, const QStyleOptionGrap
painter->setBrush(brush);
painter->drawRoundedRect(boundingRect(), 15.0, 15.0);
painter->setPen(QPen(fgColor));
- painter->drawStaticText(5, 5, mText);
+ if(mDoc){
+ mDoc->drawContents(painter);
+ }else{
+ painter->drawStaticText(5, 5, mText);
+ }
painter->restore();
}
+