implementation of reordering (outline)
This commit is contained in:
+33
-21
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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:
|
||||
/*!
|
||||
|
||||
Reference in New Issue
Block a user