diff options
Diffstat (limited to 'pictureviewer2.cpp')
-rw-r--r-- | pictureviewer2.cpp | 83 |
1 files changed, 65 insertions, 18 deletions
diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 6a547f3..2c36dc9 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -20,6 +20,9 @@ #include <QSettings> #include <QTextDocument> #include <QTextCursor> +#include <QTextTableCell> +#include <QTextTableFormat> +#include <QTextTableCellFormat> #include <QFileInfo> #include <QDir> #include <QFileInfo> @@ -482,27 +485,71 @@ void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){ void PictureViewer2::constructMappingItem(const PicData &file){ QList<MappingData> mapData = mPicFilesModel->mappingDataFromFile(file.at(PicFilesModel::Id).toInt()); QList<QStringList> mappings; - foreach(MappingData d, mapData){ - mappings << d.path; - } - QStringList mappingPaths; - foreach(QStringList l, mappings){ - mappingPaths << l.join("/"); + QTextDocument *doc = new QTextDocument; + doc->setIndentWidth(2); + doc->setDocumentMargin(8); + QTextCursor *cursor = new QTextCursor(doc); + if(mapData.isEmpty()){ + QString itemString = QString("%1 (none)").arg(QChar(0x2640)); + cursor->insertText(itemString); + }else{ + QMap<QString, QStringList> sortedPaths; + int maxRows = 0; + foreach(MappingData d, mapData){ + QStringList pItems = d.path.first(); + if(pItems.size() > maxRows){ + maxRows = pItems.size(); + } + QString mapKey = pItems.join("/"); + sortedPaths.insert(mapKey, pItems); + } + QTextTable *table = cursor->insertTable(sortedPaths.size(), 1); + QTextTableFormat fmt; + fmt.setBorder(0); + table->setFormat(fmt); + QMap<QString, QStringList>::const_iterator it = sortedPaths.constBegin(); + int row = 0; + while(it != sortedPaths.constEnd()){ + QChar bullet(0x2640); + if(row % 2){ + bullet = QChar(0x2642); + } + QStringList pItems = it.value(); + int column = 0; + QTextTableCell curCell = table->cellAt(row, column); + curCell.firstCursorPosition().insertText(bullet); + for(int i = 0; i < pItems.size(); ++i){ + if(table->columns() - 1 < column + 1){ + table->appendColumns(1); + } + ++column; + curCell = table->cellAt(row, column); + curCell.firstCursorPosition().insertText(pItems.at(i)); + if(i + 1 < pItems.size()){ + if(table->columns() - 1 < column + 1){ + table->appendColumns(1); + } + ++column; + curCell = table->cellAt(row, column); + QTextTableCellFormat cfmt; + cfmt.setRightPadding(5); + curCell.setFormat(cfmt); + curCell.firstCursorPosition().insertText(QChar(0x2192)); + } + } + ++it; + ++row; + } } - SmTreeItem *mappingTree = mMappingTreeModel->treeFromPaths(mappingPaths); - if(mappingTree){ - if(mMappingItem){ - mMappingPos = mMappingItem->scenePos(); - mScene->removeItem(mMappingItem); - delete mMappingItem; - } - QTextDocument *mapString = treeToString(mappingTree); - mMappingItem = new PictureViewer2Item(mapString); - mMappingItem->setPos(getPos(mMappingItem, mConfigMapPos, mMappingPos)); - mScene->addItem(mMappingItem); + if(mMappingItem){ + mMappingPos = mMappingItem->scenePos(); + mScene->removeItem(mMappingItem); + delete mMappingItem; } - delete mappingTree; + mMappingItem = new PictureViewer2Item(doc); + mMappingItem->setPos(getPos(mMappingItem, mConfigMapPos, mMappingPos)); + mScene->addItem(mMappingItem); } void PictureViewer2::setGradient(const QPixmap &pic){ |