QVariant InspectorBase::getValue(const InspectorItem& ii) const { QWidget* w = ii.w; QVariant v; if (qobject_cast<QDoubleSpinBox*>(w)) v = w->property("value"); else if (qobject_cast<QSpinBox*>(w)) v = w->property("value"); else if (qobject_cast<QComboBox*>(w)) { QComboBox* cb = qobject_cast<QComboBox*>(w); int val = cb->currentIndex(); if (cb->itemData(val).isValid()) val = cb->itemData(val).toInt(); v = val; } else if (qobject_cast<QCheckBox*>(w)) v = w->property("checked"); else if (qobject_cast<QLineEdit*>(w)) v = w->property("text"); else if (qobject_cast<Awl::ColorLabel*>(w)) v = static_cast<Awl::ColorLabel*>(w)->color(); else qFatal("not supported widget %s", w->metaObject()->className()); switch (propertyType(ii.t)) { case P_TYPE::POINT: case P_TYPE::SP_REAL: v = v.toDouble() * inspector->element()->score()->spatium(); break; case P_TYPE::TEMPO: v = v.toDouble() / 60.0; break; case P_TYPE::POINT_MM: case P_TYPE::SIZE_MM: v = v.toDouble() * DPMM; break; case P_TYPE::BARLINE_TYPE: v = QVariant::fromValue(BarLineType(v.toInt())); break; case P_TYPE::DIRECTION: v = QVariant::fromValue(Direction(v.toInt())); break; default: break; } return v; }
void Xml::tag(P_ID id, QVariant data, QVariant defaultData) { if (data == defaultData) return; const char* name = propertyName(id); if (name == 0) return; switch (propertyType(id)) { case P_TYPE::BOOL: case P_TYPE::SUBTYPE: case P_TYPE::INT: case P_TYPE::SPATIUM: case P_TYPE::SP_REAL: case P_TYPE::REAL: case P_TYPE::SCALE: case P_TYPE::POINT: case P_TYPE::SIZE: case P_TYPE::COLOR: tag(name, data); break; case P_TYPE::ORNAMENT_STYLE: switch (MScore::OrnamentStyle(data.toInt())) { case MScore::OrnamentStyle::BAROQUE: tag(name, QVariant("baroque")); break; default: // tag(name, QVariant("default")); break; } break; case P_TYPE::GLISSANDO_STYLE: switch (MScore::GlissandoStyle(data.toInt())) { case MScore::GlissandoStyle::BLACK_KEYS: tag(name, QVariant("blackkeys")); break; case MScore::GlissandoStyle::WHITE_KEYS: tag(name, QVariant("whitekeys")); break; case MScore::GlissandoStyle::DIATONIC: tag(name, QVariant("diatonic")); break; default: //tag(name, QVariant("Chromatic")); break; } break; case P_TYPE::DIRECTION: tag(name, data.value<Direction>().toString()); break; case P_TYPE::DIRECTION_H: switch (MScore::DirectionH(data.toInt())) { case MScore::DirectionH::LEFT: tag(name, QVariant("left")); break; case MScore::DirectionH::RIGHT: tag(name, QVariant("right")); break; case MScore::DirectionH::AUTO: break; } break; case P_TYPE::LAYOUT_BREAK: switch (LayoutBreak::Type(data.toInt())) { case LayoutBreak::Type::LINE: tag(name, QVariant("line")); break; case LayoutBreak::Type::PAGE: tag(name, QVariant("page")); break; case LayoutBreak::Type::SECTION: tag(name, QVariant("section")); break; } break; case P_TYPE::VALUE_TYPE: switch (Note::ValueType(data.toInt())) { case Note::ValueType::OFFSET_VAL: tag(name, QVariant("offset")); break; case Note::ValueType::USER_VAL: tag(name, QVariant("user")); break; } break; case P_TYPE::PLACEMENT: switch (Element::Placement(data.toInt())) { case Element::Placement::ABOVE: tag(name, QVariant("above")); break; case Element::Placement::BELOW: tag(name, QVariant("below")); break; } break; case P_TYPE::SYMID: tag(name, Sym::id2name(SymId(data.toInt()))); break; case P_TYPE::BARLINE_TYPE: tag(name, BarLine::barLineTypeName(BarLineType(data.toInt()))); break; default: Q_ASSERT(false); } }
QVariant getProperty(P_ID id, XmlReader& e) { switch (propertyType(id)) { case P_TYPE::BOOL: return QVariant(bool(e.readInt())); case P_TYPE::SUBTYPE: case P_TYPE::INT: return QVariant(e.readInt()); case P_TYPE::REAL: case P_TYPE::SPATIUM: case P_TYPE::SP_REAL: case P_TYPE::TEMPO: return QVariant(e.readDouble()); case P_TYPE::FRACTION: return QVariant::fromValue(e.readFraction()); case P_TYPE::COLOR: return QVariant(e.readColor()); case P_TYPE::POINT: return QVariant(e.readPoint()); case P_TYPE::SCALE: case P_TYPE::SIZE: return QVariant(e.readSize()); case P_TYPE::STRING: return QVariant(e.readElementText()); case P_TYPE::GLISSANDO_STYLE: { QString value(e.readElementText()); if ( value == "whitekeys") return QVariant(int(MScore::GlissandoStyle::WHITE_KEYS)); else if ( value == "blackkeys") return QVariant(int(MScore::GlissandoStyle::BLACK_KEYS)); else if ( value == "diatonic") return QVariant(int(MScore::GlissandoStyle::DIATONIC)); else // e.g., normally "Chromatic" return QVariant(int(MScore::GlissandoStyle::CHROMATIC)); } break; case P_TYPE::ORNAMENT_STYLE: { QString value(e.readElementText()); if ( value == "baroque") return QVariant(int(MScore::OrnamentStyle::BAROQUE)); return QVariant(int(MScore::OrnamentStyle::DEFAULT)); } break; // break is really not necessary because of the default return case P_TYPE::DIRECTION: { QString value(e.readElementText()); if (value == "up") return QVariant(int(MScore::Direction::UP)); else if (value == "down") return QVariant(int(MScore::Direction::DOWN)); else if (value == "auto") return QVariant(int(MScore::Direction::AUTO)); } break; case P_TYPE::DIRECTION_H: { QString value(e.readElementText()); if (value == "left" || value == "1") return QVariant(int(MScore::DirectionH::LEFT)); else if (value == "right" || value == "2") return QVariant(int(MScore::DirectionH::RIGHT)); else if (value == "auto") return QVariant(int(MScore::DirectionH::AUTO)); } break; case P_TYPE::LAYOUT_BREAK: { QString value(e.readElementText()); if (value == "line") return QVariant(int(LayoutBreak::Type::LINE)); if (value == "page") return QVariant(int(LayoutBreak::Type::PAGE)); if (value == "section") return QVariant(int(LayoutBreak::Type::SECTION)); qDebug("getProperty: invalid P_TYPE::LAYOUT_BREAK: <%s>", qPrintable(value)); } break; case P_TYPE::VALUE_TYPE: { QString value(e.readElementText()); if (value == "offset") return QVariant(int(Note::ValueType::OFFSET_VAL)); else if (value == "user") return QVariant(int(Note::ValueType::USER_VAL)); } break; case P_TYPE::PLACEMENT: { QString value(e.readElementText()); if (value == "above") return QVariant(int(Element::Placement::ABOVE)); else if (value == "below") return QVariant(int(Element::Placement::BELOW)); } break; case P_TYPE::BARLINE_TYPE: { bool ok; const QString& val(e.readElementText()); // In MuseScore 2.0.2 and before, SYSTEM_INITIAL_BARLINE_TYPE // was stored as a int, so try this first int ct = val.toInt(&ok); if (ok) return QVariant(ct); else { for (unsigned i = 0; i < BarLine::barLineTableSize(); ++i) { if (BarLine::barLineTypeName(BarLineType(i)) == val) { ct = i; break; } } return QVariant(ct); } } break; case P_TYPE::BEAM_MODE: // TODO return QVariant(int(0)); case P_TYPE::GROUPS: { Groups g; g.read(e); return QVariant::fromValue(g); } case P_TYPE::POINT_MM: // not supported case P_TYPE::TDURATION: case P_TYPE::SIZE_MM: case P_TYPE::SYMID: case P_TYPE::TEXT_STYLE: case P_TYPE::INT_LIST: return QVariant(); } return QVariant(); }