void Workspace::write() { if (_path.isEmpty()) { QString ext(".workspace"); QDir dir; dir.mkpath(dataPath); _path = dataPath + "/workspaces"; dir.mkpath(_path); _path += "/" + _name + ext; } MQZipWriter f(_path); f.setCreationPermissions( QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | QFile::ReadUser | QFile::WriteUser | QFile::ExeUser | QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup | QFile::ReadOther | QFile::WriteOther | QFile::ExeOther); if (f.status() != MQZipWriter::NoError) { writeFailed(_path); return; } QBuffer cbuf; cbuf.open(QIODevice::ReadWrite); Xml xml(&cbuf); xml.header(); xml.stag("container"); xml.stag("rootfiles"); xml.stag(QString("rootfile full-path=\"%1\"").arg(Xml::xmlString("workspace.xml"))); xml.etag(); for (ImageStoreItem* ip : imageStore) { if (!ip->isUsed(gscore)) continue; QString dstPath = QString("Pictures/") + ip->hashName(); xml.tag("file", dstPath); } xml.etag(); xml.etag(); cbuf.seek(0); f.addFile("META-INF/container.xml", cbuf.data()); // save images for (ImageStoreItem* ip : imageStore) { if (!ip->isUsed(gscore)) continue; QString dstPath = QString("Pictures/") + ip->hashName(); f.addFile(dstPath, ip->buffer()); } { QBuffer cbuf; cbuf.open(QIODevice::ReadWrite); Xml xml(&cbuf); xml.clipboardmode = true; xml.header(); xml.stag("museScore version=\"" MSC_VERSION "\""); xml.stag("Workspace"); // xml.tag("name", _name); PaletteBox* pb = mscore->getPaletteBox(); pb->write(xml); // write toolbar settings xml.stag("Toolbar name=\"noteInput\""); for (auto i : *mscore->noteInputMenuEntries()) xml.tag("action", i); xml.etag(); xml.etag(); xml.etag(); f.addFile("workspace.xml", cbuf.data()); cbuf.close(); } if (f.status() != MQZipWriter::NoError) writeFailed(_path); }
void Workspace::write() { if (_path.isEmpty()) { QString ext(".workspace"); QDir dir; dir.mkpath(dataPath); _path = dataPath + "/workspaces"; dir.mkpath(_path); _path += "/" + _name + ext; } MQZipWriter f(_path); f.setCreationPermissions( QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | QFile::ReadUser | QFile::WriteUser | QFile::ExeUser | QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup | QFile::ReadOther | QFile::WriteOther | QFile::ExeOther); if (f.status() != MQZipWriter::NoError) { writeFailed(_path); return; } QBuffer cbuf; cbuf.open(QIODevice::ReadWrite); XmlWriter xml(gscore, &cbuf); xml.header(); xml.stag("container"); xml.stag("rootfiles"); xml.stag(QString("rootfile full-path=\"%1\"").arg(XmlWriter::xmlString("workspace.xml"))); xml.etag(); for (ImageStoreItem* ip : imageStore) { if (!ip->isUsed(gscore)) continue; QString dstPath = QString("Pictures/") + ip->hashName(); xml.tag("file", dstPath); } xml.etag(); xml.etag(); cbuf.seek(0); f.addFile("META-INF/container.xml", cbuf.data()); // save images for (ImageStoreItem* ip : imageStore) { if (!ip->isUsed(gscore)) continue; QString dstPath = QString("Pictures/") + ip->hashName(); f.addFile(dstPath, ip->buffer()); } { xml.setClipboardmode(true); xml.header(); xml.stag("museScore version=\"" MSC_VERSION "\""); xml.stag("Workspace"); // xml.tag("name", _name); PaletteBox* pb = mscore->getPaletteBox(); pb->write(xml); // write toolbar settings if (saveToolbars) { xml.stag("Toolbar name=\"noteInput\""); for (auto i : *mscore->noteInputMenuEntries()) xml.tag("action", i); xml.etag(); xml.stag("Toolbar name=\"fileOperation\""); for (auto i : *mscore->fileOperationEntries()) xml.tag("action", i); xml.etag(); xml.stag("Toolbar name=\"playbackControl\""); for (auto i : *mscore->playbackControlEntries()) xml.tag("action", i); xml.etag(); } else { writeGlobalToolBar(); } if (preferences.getUseLocalPreferences()) { xml.stag("Preferences"); for (QString pref : preferences.getLocalPreferences().keys()) { QVariant prefValue = preferences.getLocalPreferences().value(pref); if (prefValue.isValid()) xml.tag("Preference name=\"" + pref + "\"", preferences.getLocalPreferences().value(pref)); } xml.etag(); } if (saveMenuBar) writeMenuBar(xml); if (saveComponents) { QByteArray state_64 = mscore->saveState().toBase64(); QString state(state_64); xml.tag("State", state); } else { writeGlobalGUIState(); } xml.etag(); xml.etag(); f.addFile("workspace.xml", cbuf.data()); cbuf.close(); } if (f.status() != MQZipWriter::NoError) writeFailed(_path); }