void StatesEditorView::addState() { // can happen when root node is e.g. a ListModel if (!QmlItemNode::isValidQmlItemNode(rootModelNode())) return; QStringList modelStateNames = rootStateGroup().names(); QString newStateName; int index = 1; while (true) { newStateName = QString("State%1").arg(index++); if (!modelStateNames.contains(newStateName)) break; } try { if ((rootStateGroup().allStates().count() < 1) && //QtQuick import might be missing (!model()->hasImport(Import::createLibraryImport("QtQuick", "1.0"), true, true))) model()->changeImports(QList<Import>() << Import::createLibraryImport("QtQuick", "1.0"), QList<Import>()); ModelNode newState = rootStateGroup().addState(newStateName); setCurrentState(newState); } catch (RewritingException &e) { QMessageBox::warning(0, "Error", e.description()); } }
bool StatesEditorView::validStateName(const QString &name) const { if (name == tr("base state")) return false; QList<QmlModelState> modelStates = rootStateGroup().allStates(); foreach (const QmlModelState &state, modelStates) { if (state.name() == name) return false; } return true; }
void StatesEditorView::instancesPreviewImageChanged(const QVector<ModelNode> &nodeList) { int minimumIndex = 10000; int maximumIndex = -1; foreach(const ModelNode &node, nodeList) { if (node.isRootNode()) { minimumIndex = qMin(minimumIndex, 0); maximumIndex = qMax(maximumIndex, 0); } else { int index = rootStateGroup().allStates().indexOf(QmlModelState(node)) + 1; if (index > 0) { minimumIndex = qMin(minimumIndex, index); maximumIndex = qMax(maximumIndex, index); } } } if (maximumIndex >= 0) m_statesEditorModel->updateState(minimumIndex, maximumIndex); }
void StatesEditorView::duplicateCurrentState() { QmlModelState state = currentState(); Q_ASSERT(!state.isBaseState()); QString newName = state.name(); // Strip out numbers at the end of the string QRegExp regEx(QString("[0-9]+$")); int numberIndex = newName.indexOf(regEx); if ((numberIndex != -1) && (numberIndex+regEx.matchedLength()==newName.length())) newName = newName.left(numberIndex); int i = 1; QStringList stateNames = rootStateGroup().names(); while (stateNames.contains(newName + QString::number(i))) i++; QmlModelState newState = state.duplicate(newName + QString::number(i)); setCurrentState(newState); }