diff --git a/cmainwindow.cpp b/cmainwindow.cpp index b35a4ff..0679c55 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -45,6 +45,8 @@ #include +#include + 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(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(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(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(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(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(); } diff --git a/cmainwindow.h b/cmainwindow.h index 7fc8d64..e9b46f3 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -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 diff --git a/coptionsdialog.cpp b/coptionsdialog.cpp index f4c0bed..835ee10 100644 --- a/coptionsdialog.cpp +++ b/coptionsdialog.cpp @@ -71,7 +71,7 @@ cOptionsDialog::cOptionsDialog(QWidget *parent) : ui->m_lpLanguage->setCurrentText(szCur); connect(ui->m_lpLanguage, QOverload::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(); } diff --git a/cscenewindow.cpp b/cscenewindow.cpp index 440df5b..36e15cb 100644 --- a/cscenewindow.cpp +++ b/cscenewindow.cpp @@ -262,29 +262,6 @@ void cSceneWindow::onSceneDateChanged(const QDateTime& dateTime) { m_lpScene->setSceneDate(dateTime); m_lpMainWindow->somethingChanged(); - - QList 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); diff --git a/cstorybook.cpp b/cstorybook.cpp index 1ff7d2c..a18125c 100644 --- a/cstorybook.cpp +++ b/cstorybook.cpp @@ -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()) diff --git a/ctreeview.cpp b/ctreeview.cpp index 4ceca69..567aa9f 100644 --- a/ctreeview.cpp +++ b/ctreeview.cpp @@ -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); } diff --git a/ctreeview.h b/ctreeview.h index aa65752..b07a53f 100644 --- a/ctreeview.h +++ b/ctreeview.h @@ -10,6 +10,8 @@ #include #include +#include + /*! \brief @@ -50,7 +52,7 @@ signals: \fn dropped \param lpTreeView */ - void dropped(cTreeView* lpTreeView, QModelIndex from, QModelIndex to); + void dropped(cTreeView* lpTreeView); protected: /*!