implementation of reordering (outline)

This commit is contained in:
Herwig Birke
2018-10-04 12:02:21 +02:00
parent 02596fb87c
commit ebfb03bcba
7 changed files with 60 additions and 74 deletions
+33 -21
View File
@@ -45,6 +45,8 @@
#include <QMenu>
#include <QStandardItem>
QDataStream& operator<<(QDataStream& out, cPart* const &rhs)
{
@@ -995,44 +997,54 @@ void cMainWindow::onFontComboBoxLostFocus(cFontComboBox* /*lpComboBox*/)
{
}
void cMainWindow::onOutlineDropped(cTreeView* /*lpTreeView*/, QModelIndex from, QModelIndex /*to*/)
void cMainWindow::onOutlineDropped(cTreeView* /*lpTreeView*/)
{
qint32 parts = m_lpOutlineModel->rowCount(QModelIndex());
for(qint32 part = 0;part < parts;part++)
{
QModelIndex partIndex = m_lpOutlineModel->index(part, 0, QModelIndex());
QStandardItem* lpPartItem = m_lpOutlineModel->itemFromIndex(partIndex);
cPart* lpPart = qvariant_cast<cPart*>(m_lpOutlineModel->itemFromIndex(partIndex)->data());
qint32 chapters = m_lpOutlineModel->rowCount(partIndex);
if(partIndex != from)
if(lpPartItem->data(Qt::UserRole+2).toInt() == -1)
{
lpPart->setSortOrder(part);
for(qint32 chapter = 0;chapter < chapters;chapter++)
{
QModelIndex chapterIndex = m_lpOutlineModel->index(chapter, 0, partIndex);
cChapter* lpChapter = qvariant_cast<cChapter*>(m_lpOutlineModel->itemFromIndex(chapterIndex)->data());
qint32 scenes = m_lpOutlineModel->rowCount(chapterIndex);
if(chapterIndex != from)
for(qint32 chapter = 0;chapter < chapters;chapter++)
{
lpChapter->setPart(lpPart);
lpChapter->setSortOrder(chapter);
}
QModelIndex chapterIndex = m_lpOutlineModel->index(chapter, 0, partIndex);
QStandardItem* lpChapterItem = m_lpOutlineModel->itemFromIndex(chapterIndex);
cChapter* lpChapter = qvariant_cast<cChapter*>(m_lpOutlineModel->itemFromIndex(chapterIndex)->data());
qint32 scenes = m_lpOutlineModel->rowCount(chapterIndex);
lpChapter = lpChapter;
for(qint32 scene = 0;scene < scenes;scene++)
{
QModelIndex sceneIndex = m_lpOutlineModel->index(scene, 0, chapterIndex);
cScene* lpScene = qvariant_cast<cScene*>(m_lpOutlineModel->itemFromIndex(sceneIndex)->data());
if(sceneIndex != from)
if(lpChapterItem->data(Qt::UserRole+2).toInt() == -1)
{
lpScene->setChapter(lpChapter);
lpScene->setSortOrder(scene);
lpChapter->setPart(lpPart);
lpChapter->setSortOrder(chapter);
for(qint32 scene = 0;scene < scenes;scene++)
{
QModelIndex sceneIndex = m_lpOutlineModel->index(scene, 0, chapterIndex);
QStandardItem* lpSceneItem = m_lpOutlineModel->itemFromIndex(sceneIndex);
cScene* lpScene = qvariant_cast<cScene*>(m_lpOutlineModel->itemFromIndex(sceneIndex)->data());
if(lpSceneItem->data(Qt::UserRole+2).toInt() == -1)
{
lpScene->setChapter(lpChapter);
lpScene->setSortOrder(scene);
}
else
lpSceneItem->setData(-1, Qt::UserRole+2);
}
}
else
lpChapterItem->setData(-1, Qt::UserRole+2);
}
}
else
lpPartItem->setData(-1, Qt::UserRole+2);
}
somethingChanged();
}
+1 -1
View File
@@ -264,7 +264,7 @@ public slots:
\fn onOutlineDropped
\param lpTreeView
*/
void onOutlineDropped(cTreeView* lpTreeView, QModelIndex from, QModelIndex to);
void onOutlineDropped(cTreeView* lpTreeView);
private slots:
/*!
\brief
+1 -1
View File
@@ -71,7 +71,7 @@ cOptionsDialog::cOptionsDialog(QWidget *parent) :
ui->m_lpLanguage->setCurrentText(szCur);
connect(ui->m_lpLanguage, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &cOptionsDialog::onLanguageIndexChanged);
connect(ui->m_lpButtonBox, &QDialogButtonBox::clicked, this, &cOptionsDialog::onButtonClicked);
connect(ui->m_lpButtonBox, QDialogButtonBox::clicked, this, &cOptionsDialog::onButtonClicked);
retranslateUI();
}
+1 -37
View File
@@ -262,29 +262,6 @@ void cSceneWindow::onSceneDateChanged(const QDateTime& dateTime)
{
m_lpScene->setSceneDate(dateTime);
m_lpMainWindow->somethingChanged();
QList<cCharacterDescription*> characterList = m_lpScene->characterList();
for(int x = 0;x < characterList.count();x++)
{
cCharacterDescription* lpCharacterDescription = characterList[x];
cCharacter* lpCharacter = lpCharacterDescription->character();
if(m_lpScene->sceneDate() != QDateTime(QDate(1900, 1, 1)) &&
lpCharacter->dateOfBirth() != QDate(1900, 1, 1))
{
qint32 years = m_lpScene->sceneDate().date().year() - lpCharacter->dateOfBirth().year();
if(lpCharacter->dateOfBirth().month() < m_lpScene->sceneDate().date().year())
years--;
else if(lpCharacter->dateOfBirth().month() == m_lpScene->sceneDate().date().month() &&
lpCharacter->dateOfBirth().day() > m_lpScene->sceneDate().date().day())
years--;
ui->m_lpCharacterList->setItemText(x, QString("%1 (age: %2 years)").arg(lpCharacter->name()).arg(years));
}
else
ui->m_lpCharacterList->setItemText(x, lpCharacter->name());
}
}
void cSceneWindow::onTextChanged()
@@ -463,20 +440,7 @@ void cSceneWindow::fillCharacterList(cCharacter* lpCharacterNew)
cCharacterDescription* lpCharacterDescription = characterList[x];
cCharacter* lpCharacter = lpCharacterDescription->character();
if(m_lpScene->sceneDate() != QDateTime(QDate(1900, 1, 1)) &&
lpCharacter->dateOfBirth() != QDate(1900, 1, 1))
{
qint32 years = m_lpScene->sceneDate().date().year() - lpCharacter->dateOfBirth().year();
if(lpCharacter->dateOfBirth().month() < m_lpScene->sceneDate().date().year())
years--;
else if(lpCharacter->dateOfBirth().month() == m_lpScene->sceneDate().date().month() &&
lpCharacter->dateOfBirth().day() > m_lpScene->sceneDate().date().day())
years--;
ui->m_lpCharacterList->addItem(QString("%1 (age: %2 years)").arg(lpCharacter->name()).arg(years), QVariant::fromValue(lpCharacterDescription));
}
else
ui->m_lpCharacterList->addItem(lpCharacter->name(), QVariant::fromValue(lpCharacterDescription));
ui->m_lpCharacterList->addItem(lpCharacter->name(), QVariant::fromValue(lpCharacterDescription));
cTextEdit* lpTextEdit = new cTextEdit(ui->m_lpCharacterDetails);
lpTextEdit->setDocument(lpCharacterDescription->description());
ui->m_lpCharacterDetails->addWidget(lpTextEdit);
+4
View File
@@ -1399,6 +1399,7 @@ bool cStoryBook::fillOutlineList(QTreeView* lpView)
QStandardItem* lpItem = new QStandardItem(lpPart->name());
lpItem->setData(QVariant::fromValue(lpPart));
lpItem->setData(-1, Qt::UserRole+2);
lpItem->setFont(fontPart);
lpItem->setBackground(QBrush(background));
if(lpPart->description())
@@ -1421,6 +1422,7 @@ bool cStoryBook::fillOutlineList(QTreeView* lpView)
{
QStandardItem* lpItem = new QStandardItem(lpChapter->name());
lpItem->setData(QVariant::fromValue(lpChapter));
lpItem->setData(-1, Qt::UserRole+2);
lpItem->setFont(fontChapter);
lpItem->setForeground(QBrush(Qt::darkBlue));
lpItem->setBackground(QBrush(background));
@@ -1449,12 +1451,14 @@ bool cStoryBook::fillOutlineList(QTreeView* lpView)
lpItems << new QStandardItem(lpScene->stateText());
lpItems[0]->setData(QVariant::fromValue(lpScene));
lpItems[0]->setData(-1, Qt::UserRole+2);
lpItems[0]->setFont(fontScene);
lpItems[0]->setForeground(QBrush(Qt::blue));
if(lpScene->description())
lpItems[0]->setToolTip(lpScene->description()->toPlainText());
lpItems[1]->setData(QVariant::fromValue(lpScene));
lpItems[1]->setData(-1, Qt::UserRole+2);
lpItems[1]->setBackground(QBrush(lpScene->stateColor()));
lpItems[1]->setTextAlignment(Qt::AlignCenter);
if(lpScene->description())
+17 -13
View File
@@ -45,24 +45,28 @@ qint16 level(QModelIndex index)
void cTreeView::dropEvent(QDropEvent* event)
{
QModelIndex fromIndex = selectedIndexes()[0];
QModelIndex droppedIndex = indexAt(event->pos());
QStandardItemModel* lpModel = (QStandardItemModel*)model();
QModelIndex fromIndex = selectedIndexes()[0];
QStandardItem* lpFromItem = lpModel->itemFromIndex(fromIndex);
QModelIndex droppedIndex = indexAt(event->pos());
DropIndicatorPosition pos = dropIndicatorPosition();
qint16 fromLevel = level(fromIndex);
qint16 droppedLevel = level(droppedIndex);
// QStandardItemModel* lpModel = (QStandardItemModel*)this->model();
// QStandardItem* lpToItem = lpModel->itemFromIndex(droppedIndex);
// if(droppedLevel < fromLevel-1)
// return;
// else if(droppedLevel > fromLevel)
// return;
if(fromLevel != droppedLevel)
if(droppedLevel < fromLevel-1)
return;
else if(droppedLevel > fromLevel)
return;
else if(droppedLevel == fromLevel && pos == DropIndicatorPosition::OnItem)
return;
else if(droppedLevel == fromLevel-1 && pos == DropIndicatorPosition::BelowItem)
return;
QTreeView::dropEvent(event);
QModelIndex toIndex = selectedIndexes()[0];
dropped(this, fromIndex, toIndex);
QModelIndex toIndex = selectedIndexes()[0];
lpFromItem->setData(toIndex.row(), Qt::UserRole+2);
dropped(this);
}
+3 -1
View File
@@ -10,6 +10,8 @@
#include <QTreeView>
#include <QMetaType>
#include <QStandardItem>
/*!
\brief
@@ -50,7 +52,7 @@ signals:
\fn dropped
\param lpTreeView
*/
void dropped(cTreeView* lpTreeView, QModelIndex from, QModelIndex to);
void dropped(cTreeView* lpTreeView);
protected:
/*!