void Test_LayerScene::test_setLayerProperty() { auto doc = new Document("temp", QSize(400, 300), {std::make_shared<RasterLayer>("layer")}); auto dir = doc->layerScene()->rootLayer(); auto layer = dir->child(0); doc->layerScene()->setLayerProperty(layer, "newname", RoleName); QCOMPARE(layer->name(), QString("newname")); doc->undoStack()->undo(); QCOMPARE(layer->name(), QString("layer")); doc->layerScene()->setLayerProperty(layer, true, RoleLocked); QCOMPARE(layer->isLocked(), true); doc->layerScene()->setLayerProperty(layer, "newname", RoleName); QCOMPARE(layer->name(), QString("layer")); }
/** * \brief Returns the result and finishes the construction process * \pre Called after beginDocument() * \post only beginDocument() can be safely called */ Document* endDocument() { if ( !document ) return nullptr; // Finish pending operations endAnimation(); endLayer(); // Clear current document auto doc = document; document = nullptr; element = nullptr; // Assign the frames to their images linkImageFrames(); // Remove undo actions doc->undoStack().clear(); // Return the finished document return doc; }
KoPADocument::KoPADocument(QWidget* parentWidget, QObject* parent, bool singleViewMode) : KoDocument(parentWidget, parent, singleViewMode), d(new Private()) { d->inlineTextObjectManager = new KInlineTextObjectManager(this); d->rulersVisible = false; resourceManager()->setUndoStack(undoStack()); resourceManager()->setOdfDocument(this); QVariant variant2; variant2.setValue<KInlineTextObjectManager*>(d->inlineTextObjectManager); resourceManager()->setResource(KOdfText::InlineTextObjectManager, variant2); loadConfig(); if (!KToolRegistry::instance()->contains("KoPABackgroundTool")) { KoPABackgroundToolFactory *f = new KoPABackgroundToolFactory(KToolRegistry::instance()); KToolRegistry::instance()->add(f); } }
KarbonPart::KarbonPart(QWidget* parentWidget, const char* widgetName, QObject* parent, const char* name, bool singleViewMode) : KoDocument(parentWidget, parent, singleViewMode), d(new Private()) { Q_UNUSED(widgetName); d->document.setResourceManager(resourceManager()); setObjectName(name); setComponentData(KarbonFactory::componentData(), false); setTemplateType("karbon_template"); resourceManager()->setUndoStack(undoStack()); initConfig(); // set as default paper KoPageLayout pl = pageLayout(); pl.format = KoPageFormat::defaultFormat(); pl.orientation = KoPageFormat::Portrait; pl.width = MM_TO_POINT(KoPageFormat::width(pl.format, pl.orientation)); pl.height = MM_TO_POINT(KoPageFormat::height(pl.format, pl.orientation)); setPageLayout(pl); }
/** * @brief Diagram::~Diagram * Destructor */ Diagram::~Diagram() { // clear undo stack to prevent errors, because contains pointers to this diagram and is elements. undoStack().clear(); //delete of QGIManager, every elements he knows are removed delete qgi_manager_; // remove of conductor setter delete conductor_setter_; // delete of object for manage movement delete elements_mover_; delete element_texts_mover_; // list removable items QList<QGraphicsItem *> deletable_items; foreach(QGraphicsItem *qgi, items()) { if (qgi -> parentItem()) continue; if (qgraphicsitem_cast<Conductor *>(qgi)) continue; deletable_items << qgi; } qDeleteAll (deletable_items); }
bool MasterScore::saveFile() { QString suffix = info.suffix(); if (info.exists() && !info.isWritable()) { MScore::lastError = tr("The following file is locked: \n%1 \n\nTry saving to a different location.").arg(info.filePath()); return false; } // // step 1 // save into temporary file to prevent partially overwriting // the original file in case of "disc full" // QString tempName = info.filePath() + QString(".temp"); QFile temp(tempName); if (!temp.open(QIODevice::WriteOnly)) { MScore::lastError = tr("Open Temp File\n%1\nfailed: %2").arg(tempName, strerror(errno)); return false; } bool rv = suffix == "mscx" ? Score::saveFile(&temp, false) : Score::saveCompressedFile(&temp, info, false); if (!rv) { return false; } if (temp.error() != QFile::NoError) { MScore::lastError = tr("Save File failed: %1").arg(temp.errorString()); return false; } temp.close(); QString name(info.filePath()); QString basename(info.fileName()); QDir dir(info.path()); if (!saved()) { // if file was already saved in this session // save but don't overwrite backup again // // step 2 // remove old backup file if exists // QString backupName = QString(".") + info.fileName() + QString(","); if (dir.exists(backupName)) { if (!dir.remove(backupName)) { // if (!MScore::noGui) // QMessageBox::critical(0, QObject::tr("Save File"), // tr("Removing old backup file %1 failed").arg(backupName)); } } // // step 3 // rename old file into backup // if (dir.exists(basename)) { if (!dir.rename(basename, backupName)) { // if (!MScore::noGui) // QMessageBox::critical(0, tr("Save File"), // tr("Renaming old file <%1> to backup <%2> failed").arg(name, backupname); } } #ifdef Q_OS_WIN QFileInfo fileBackup(dir, backupName); QString backupNativePath = QDir::toNativeSeparators(fileBackup.absoluteFilePath()); #if (defined (_MSCVER) || defined (_MSC_VER)) #if (defined (UNICODE)) SetFileAttributes((LPCTSTR)backupNativePath.unicode(), FILE_ATTRIBUTE_HIDDEN); #else // Use byte-based Windows function SetFileAttributes((LPCTSTR)backupNativePath.toLocal8Bit(), FILE_ATTRIBUTE_HIDDEN); #endif #else SetFileAttributes((LPCTSTR)backupNativePath.toLocal8Bit(), FILE_ATTRIBUTE_HIDDEN); #endif #endif } else { // file has previously been saved - remove the old file if (dir.exists(basename)) { if (!dir.remove(basename)) { // if (!MScore::noGui) // QMessageBox::critical(0, tr("Save File"), // tr("Removing old file %1 failed").arg(name)); } } } // // step 4 // rename temp name into file name // if (!QFile::rename(tempName, name)) { MScore::lastError = tr("Renaming temp. file <%1> to <%2> failed:\n%3").arg(tempName, name, strerror(errno)); return false; } // make file readable by all QFile::setPermissions(name, QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther); undoStack()->setClean(); setSaved(true); info.refresh(); update(); return true; }
void QgsComposition::pushAddRemoveCommand( QgsComposerItem* item, const QString& text, QgsAddRemoveItemCommand::State state ) { QgsAddRemoveItemCommand* c = new QgsAddRemoveItemCommand( state, item, this, text ); connectAddRemoveCommandSignals( c ); undoStack()->push( c ); }
void QgsComposition::removeComposerItem( QgsComposerItem* item, bool createCommand ) { QgsComposerMap* map = dynamic_cast<QgsComposerMap *>( item ); if ( !map || !map->isDrawing() ) //don't delete a composer map while it draws { removeItem( item ); QgsComposerItemGroup* itemGroup = dynamic_cast<QgsComposerItemGroup*>( item ); if ( itemGroup ) { //add add/remove item command for every item in the group QUndoCommand* parentCommand = new QUndoCommand( tr( "Remove item group" ) ); QSet<QgsComposerItem*> groupedItems = itemGroup->items(); QSet<QgsComposerItem*>::iterator it = groupedItems.begin(); for ( ; it != groupedItems.end(); ++it ) { QgsAddRemoveItemCommand* subcommand = new QgsAddRemoveItemCommand( QgsAddRemoveItemCommand::Removed, *it, this, "", parentCommand ); connectAddRemoveCommandSignals( subcommand ); emit itemRemoved( *it ); } undoStack()->push( parentCommand ); delete itemGroup; emit itemRemoved( itemGroup ); } else { bool frameItem = ( item->type() == QgsComposerItem::ComposerFrame ); QgsComposerMultiFrame* multiFrame = 0; if ( createCommand ) { if ( frameItem ) //multiframe tracks item changes { multiFrame = static_cast<QgsComposerFrame*>( item )->multiFrame(); item->beginItemCommand( tr( "Frame deleted" ) ); emit itemRemoved( item ); item->endItemCommand(); } else { emit itemRemoved( item ); pushAddRemoveCommand( item, tr( "Item deleted" ), QgsAddRemoveItemCommand::Removed ); } } else { emit itemRemoved( item ); } //check if there are frames left. If not, remove the multi frame if ( frameItem && multiFrame ) { if ( multiFrame->nFrames() < 1 ) { removeMultiFrame( multiFrame ); if ( createCommand ) { QgsAddRemoveMultiFrameCommand* command = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Removed, multiFrame, this, tr( "Multiframe removed" ) ); undoStack()->push( command ); } else { delete multiFrame; } } } } } }
void BrokenLinksWidget::tryFixLink(const BrokenLink &link) { Document *document = mBrokenLinksModel->document(); Preferences *prefs = Preferences::instance(); if (link.type == TilesetImageSource || link.type == TilesetTileImageSource) { auto tilesetDocument = qobject_cast<TilesetDocument*>(document); if (!tilesetDocument) { // We need to open the tileset document in order to be able to make changes to it... const SharedTileset tileset = link.tileset()->sharedPointer(); DocumentManager::instance()->openTileset(tileset); return; } QString startLocation = QFileInfo(prefs->lastPath(Preferences::ImageFile)).absolutePath(); startLocation += QLatin1Char('/'); startLocation += QFileInfo(link.filePath()).fileName(); QString newFileName = QFileDialog::getOpenFileName(window(), tr("Locate File"), startLocation, Utils::readableImageFormatsFilter()); if (newFileName.isEmpty()) return; QImageReader reader(newFileName); QImage image = reader.read(); if (image.isNull()) { QMessageBox::critical(this, tr("Error Loading Image"), reader.errorString()); return; } if (link.type == TilesetImageSource) { TilesetParameters parameters(*link._tileset); parameters.imageSource = newFileName; auto command = new ChangeTilesetParameters(tilesetDocument, parameters); tilesetDocument->undoStack()->push(command); } else { auto command = new ChangeTileImageSource(tilesetDocument, link._tile, newFileName); tilesetDocument->undoStack()->push(command); } prefs->setLastPath(Preferences::ImageFile, newFileName); } else if (link.type == MapTilesetReference) { const QString allFilesFilter = tr("All Files (*)"); QString selectedFilter = allFilesFilter; QString filter = allFilesFilter; FormatHelper<TilesetFormat> helper(FileFormat::Read, filter); QString start = prefs->lastPath(Preferences::ExternalTileset); const QString fileName = QFileDialog::getOpenFileName(this, tr("Locate External Tileset"), start, helper.filter(), &selectedFilter); if (fileName.isEmpty()) return; QString error; // It could be, that we have already loaded this tileset. SharedTileset newTileset = TilesetManager::instance()->findTileset(fileName); if (!newTileset || !newTileset->loaded()) { newTileset = Tiled::readTileset(fileName, &error); if (!newTileset) { QMessageBox::critical(window(), tr("Error Reading Tileset"), error); return; } } MapDocument *mapDocument = static_cast<MapDocument*>(document); int index = mapDocument->map()->tilesets().indexOf(link._tileset->sharedPointer()); if (index != -1) document->undoStack()->push(new ReplaceTileset(mapDocument, index, newTileset)); prefs->setLastPath(Preferences::ExternalTileset, QFileInfo(fileName).path()); } }
void AbstractAspect::endMacro() { QUndoStack *stack = undoStack(); if (stack) stack->endMacro(); }
void AbstractAspect::beginMacro(const QString& text) { QUndoStack *stack = undoStack(); if (stack) stack->beginMacro(text); }
/** * Used when a map that has this tileset embedded is saved. */ void TilesetDocument::setClean() { undoStack()->setClean(); }