summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2014-06-19 11:23:57 +0200
committerArno <am@disconnect.de>2014-06-19 11:23:57 +0200
commitb5bd9cf0b981ee0c87ead9e20c36247932de7818 (patch)
tree4eea2c01ed4b1ced3a387cb4fad13c774137e758
parent7ba8c197150a86c2406a029e4a7f02d1285c47c0 (diff)
downloadSheMov-b5bd9cf0b981ee0c87ead9e20c36247932de7818.tar.gz
SheMov-b5bd9cf0b981ee0c87ead9e20c36247932de7818.tar.bz2
SheMov-b5bd9cf0b981ee0c87ead9e20c36247932de7818.zip
Fix Display of mappings
MappingTreeModel::treeFromPath() never worked as intended, so replace it by displaying mappings in a QTextTable.
-rw-r--r--mappingtreemodel.cpp31
-rw-r--r--mappingtreemodel.h4
-rw-r--r--pictureviewer2.cpp83
3 files changed, 65 insertions, 53 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp
index 25969cb..62cec14 100644
--- a/mappingtreemodel.cpp
+++ b/mappingtreemodel.cpp
@@ -38,37 +38,6 @@ int MappingTreeModel::mappingTypeIdFromName(const QVariant &name) const{
return -1;
}
-//caller has ownership of this item!
-SmTreeItem *MappingTreeModel::treeFromPaths(const QStringList &paths){
- if(paths.isEmpty()){
- return 0;
- }
- QHash<QString, SmTreeItem*> partsHash;
- SmTreeItem *root = new SmTreeItem(1);
- partsHash.insert(QString(), root);
- SmTreeItem *pItem = root;
-
- // create tree
- for(int i = 0; i < paths.count(); ++i){
- //split the paths
- QStringList parts = paths.at(i).split(forbidden());
- //process path items
- for(int j = 0; j < parts.count(); ++j){
- if(partsHash.contains(parts.at(j))){
- pItem = partsHash.value(parts.at(j)); //we've already seen this item, set it as new parent
- }else{
- //create a new item, save old root
- SmTreeItem *oldRoot = pItem;
- pItem = new SmTreeItem(QList<QVariant>() << parts.at(j), partsHash.value(parts.at(j)));
- oldRoot->appendChild(pItem);
- partsHash.insert(parts.at(j), pItem);
- }
- }
- pItem = root;
- }
- return root;
-}
-
QVariant MappingTreeModel::data(const QModelIndex &index, int role) const{
if(!index.isValid()){
return QVariant();
diff --git a/mappingtreemodel.h b/mappingtreemodel.h
index ec30fb3..efc4e2d 100644
--- a/mappingtreemodel.h
+++ b/mappingtreemodel.h
@@ -30,10 +30,6 @@ class MappingTreeModel : public SmTreeModel {
QStringList mappingTypeNames() const;
int mappingTypeIdFromName(const QVariant &name) const;
- //static convenience funcs
- //the caller is responsible for deleting the result!
- SmTreeItem *treeFromPaths(const QStringList &paths);
-
//data
QVariant data(const QModelIndex &index, int role) const;
QList<QVariant> childList(const QVariant &value, int column = 0) const;
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){