/** Add a new scene to a chapter by chapter id. */ QDomElement VondelBook::addNewScene(int chapterId, QString title) { QDomElement chapter; QDomNode n = chaptersList.firstChild(); while (!n.isNull()) { QDomElement c = n.toElement(); if (!c.isNull()) { if (c.attribute(VondelBook::XML_ID).toInt() == chapterId) { // Found the right chapter. chapter = c; break; } } n = n.nextSibling(); } if (!chapter.isNull()) return addNewScene(chapter, title); else return chapter; }
/*! * Create a new book. */ void VondelBook::createNewBook() { QDomElement NewBook, Chapter; vondelDOM->clear(); auto pi = vondelDOM->createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""); vondelDOM->appendChild(pi); NewBook = vondelDOM->createElement(VondelBook::XML_BOOK); vondelDOM->appendChild(NewBook); NewBook.setAttribute("title", QObject::tr("No Title")); addCreationDate(NewBook); chaptersList = vondelDOM->createElement(VondelBook::XML_CHAPTERS); chaptersList.setAttribute(VondelBook::XML_COUNTER, 0); NewBook.appendChild(chaptersList); scenesList = vondelDOM->createElement(VondelBook::XML_SCENES); scenesList.setAttribute(VondelBook::XML_COUNTER, 0); NewBook.appendChild(scenesList); charactersList = vondelDOM->createElement(VondelBook::XML_CHARACTERS); charactersList.setAttribute(VondelBook::XML_COUNTER, 0); NewBook.appendChild(charactersList); locationsList = vondelDOM->createElement(VondelBook::XML_LOCATIONS); locationsList.setAttribute(VondelBook::XML_COUNTER, 0); NewBook.appendChild(locationsList); itemsList = vondelDOM->createElement(VondelBook::XML_ITEMS); itemsList.setAttribute(VondelBook::XML_COUNTER, 0); NewBook.appendChild(itemsList); Chapter = addNewChapter("Chapter 1"); addNewScene(Chapter, "Scene 1"); addNewScene(Chapter, "Scene 2"); Chapter = addNewChapter("Chapter 2"); addNewScene(Chapter, "Scene 3"); addNewScene(Chapter, "Scene 4"); addNewScene(Chapter, "àäá-èëé-â"); addNewCharacter("Mr X"); addNewCharacter("Mrs X"); }
StudySceneEditor::StudySceneEditor(Study *study, QSqlDatabase *database, QWidget *parent) : QDialog(parent) { m_ui.setupUi(this); m_ui.removeSceneButton->setEnabled(false); m_model = new StudySceneModel(this, *database); m_delegate = new StudySceneDelegate(this); m_study = study; m_studyIndex = -1; QString title = windowTitle(); setWindowTitle(m_study->name() + " - " + title); QSqlQuery query(*database); query.prepare("select id from studies where name = ?"); query.addBindValue(m_study->name()); // if there is already a study with that name, show the scenes for it if (query.exec() && query.next()) { m_studyIndex = query.value(0).toInt(); } m_model->setTable("scenes"); //m_model->setEditStrategy(QSqlTableModel::OnFieldChange); QString filter = QString("study = %1").arg(m_studyIndex); m_model->setFilter(filter); m_model->setHeaderData(1, Qt::Horizontal, "Name", Qt::DisplayRole); m_model->setHeaderData(2, Qt::Horizontal, "Length \n (in seconds)", Qt::DisplayRole); m_model->setHeaderData(3, Qt::Horizontal, "Type", Qt::DisplayRole); m_model->select(); // Set up the view m_ui.sceneView->setModel(m_model); m_ui.sceneView->setColumnHidden(0, true); m_ui.sceneView->setColumnHidden(4, true); m_ui.sceneView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); m_ui.sceneView->setItemDelegate(m_delegate); m_ui.sceneView->update(); m_signalMapper = new QSignalMapper(this); connect(m_ui.addSceneButton, SIGNAL(clicked()), m_signalMapper, SLOT(map())); m_signalMapper->setMapping(m_ui.addSceneButton, m_ui.addSceneButton->text()); connect(m_ui.addBreakSceneButton, SIGNAL(clicked()), m_signalMapper, SLOT(map())); m_signalMapper->setMapping(m_ui.addBreakSceneButton, m_ui.addBreakSceneButton->text()); connect(m_signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(clicked(const QString &))); connect(this, SIGNAL(clicked(QString)), this, SLOT(addNewScene(QString))); connect(m_ui.closeButton, SIGNAL(clicked()), this, SLOT(submitAndClose())); connect(m_ui.removeSceneButton, SIGNAL(clicked()), this, SLOT(removeScene())); connect(m_ui.sceneView, SIGNAL(clicked(QModelIndex)), this, SLOT(changeRemoveButtonState(QModelIndex))); connect(m_model, SIGNAL(primeInsert(int, QSqlRecord&)), this, SLOT(populateNewRowValues(int, QSqlRecord&))); }