本文整理汇总了C++中QUndoStack::beginMacro方法的典型用法代码示例。如果您正苦于以下问题:C++ QUndoStack::beginMacro方法的具体用法?C++ QUndoStack::beginMacro怎么用?C++ QUndoStack::beginMacro使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QUndoStack
的用法示例。
在下文中一共展示了QUndoStack::beginMacro方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: toggleOtherLayers
void LayerModel::toggleOtherLayers(int layerIndex)
{
if (mMap->layerCount() <= 1) // No other layers
return;
bool visibility = true;
for (int i = 0; i < mMap->layerCount(); i++) {
if (i == layerIndex)
continue;
Layer *layer = mMap->layerAt(i);
if (layer->isVisible()) {
visibility = false;
break;
}
}
QUndoStack *undoStack = mMapDocument->undoStack();
if (visibility)
undoStack->beginMacro(tr("Show Other Layers"));
else
undoStack->beginMacro(tr("Hide Other Layers"));
for (int i = 0; i < mMap->layerCount(); i++) {
if (i == layerIndex)
continue;
if (visibility != mMap->layerAt(i)->isVisible())
undoStack->push(new SetLayerVisible(mMapDocument, i, visibility));
}
undoStack->endMacro();
}
示例2: accept
void MapPropertiesDialog::accept()
{
int format = mLayerDataCombo->currentIndex();
if (format == -1) {
// this shouldn't happen!
format = 0;
}
Map::LayerDataFormat newLayerDataFormat = static_cast<Map::LayerDataFormat>(format - 1);
QUndoStack *undoStack = mMapDocument->undoStack();
QColor newColor = mColorButton->color();
if (newColor == Qt::darkGray)
newColor = QColor();
const Map *map = mMapDocument->map();
bool localChanges = newColor != map->backgroundColor() ||
newLayerDataFormat != map->layerDataFormat();
if (localChanges) {
undoStack->beginMacro(QCoreApplication::translate(
"Undo Commands",
"Change Map Properties"));
undoStack->push(new ChangeMapProperties(mMapDocument,
newColor,
newLayerDataFormat));
}
PropertiesDialog::accept();
if (localChanges)
undoStack->endMacro();
}
示例3: pasteProperties
void PropertiesDock::pasteProperties()
{
auto clipboardManager = ClipboardManager::instance();
Properties pastedProperties = clipboardManager->properties();
if (pastedProperties.isEmpty())
return;
const QList<Object *> objects = mDocument->currentObjects();
if (objects.isEmpty())
return;
QList<QUndoCommand*> commands;
for (Object *object : objects) {
Properties properties = object->properties();
properties.merge(pastedProperties);
if (object->properties() != properties) {
commands.append(new ChangeProperties(mDocument, QString(), object,
properties));
}
}
if (!commands.isEmpty()) {
QUndoStack *undoStack = mDocument->undoStack();
undoStack->beginMacro(tr("Paste Property/Properties", nullptr,
pastedProperties.size()));
for (QUndoCommand *command : commands)
undoStack->push(command);
undoStack->endMacro();
}
}
示例4: addToGroup
void ButtonTaskMenu::addToGroup(QAction *a)
{
QButtonGroup *bg = qvariant_cast<QButtonGroup *>(a->data());
Q_ASSERT(bg);
QDesignerFormWindowInterface *fw = formWindow();
const ButtonList bl = buttonList(fw->cursor());
// Do we need to remove the buttons from an existing group?
QUndoCommand *removeCmd = 0;
if (bl.front()->group()) {
removeCmd = createRemoveButtonsCommand(fw, bl);
if (!removeCmd)
return;
}
AddButtonsToGroupCommand *addCmd = new AddButtonsToGroupCommand(fw);
addCmd->init(bl, bg);
QUndoStack *history = fw->commandHistory();
if (removeCmd) {
history->beginMacro(addCmd->text());
history->push(removeCmd);
history->push(addCmd);
history->endMacro();
} else {
history->push(addCmd);
}
}
示例5: performAction
void AddShape::performAction(Block* block) const
{
Node* node = static_cast<Node*>(block);
GenerateShape dialog(_generator, PantinEngine::MainWindow());
if(dialog.createShape())
{
K_ASSERT( node->instance()->fastInherits<Model>() ); // The instance HAS to be a model in Nigel. Only models can contain geometry.
Model* model = static_cast<Model*>(node->instance());
QUndoStack* undoStack = PantinEngine::InstanceUndoStack( model );
undoStack->setActive(true);
undoStack->beginMacro(
tr("Adding new %1 to node %2")
.arg(_generator->shape()->blockName(), node->blockName())
);
AddBlock* addGeometry = new AddBlock(model->geometries(), dialog.geometry());
undoStack->push(addGeometry);
AddBlock* addReference = new AddBlock(node, dialog.geometryInstance());
undoStack->push(addReference);
undoStack->endMacro();
}
}
示例6: removeProperties
void PropertiesDock::removeProperties()
{
Object *object = mDocument->currentObject();
if (!object)
return;
const QList<QtBrowserItem*> items = mPropertyBrowser->selectedItems();
if (items.isEmpty() || !mPropertyBrowser->allCustomPropertyItems(items))
return;
QStringList propertyNames;
for (QtBrowserItem *item : items)
propertyNames.append(item->property()->propertyName());
QUndoStack *undoStack = mDocument->undoStack();
undoStack->beginMacro(tr("Remove Property/Properties", nullptr,
propertyNames.size()));
for (const QString &name : propertyNames) {
undoStack->push(new RemoveProperty(mDocument,
mDocument->currentObjects(),
name));
}
undoStack->endMacro();
}
示例7: delete_
void MapDocumentActionHandler::delete_()
{
if (!mMapDocument)
return;
Layer *currentLayer = mMapDocument->currentLayer();
if (!currentLayer)
return;
TileLayer *tileLayer = dynamic_cast<TileLayer*>(currentLayer);
const QRegion &selectedArea = mMapDocument->selectedArea();
const QList<MapObject*> &selectedObjects = mMapDocument->selectedObjects();
QUndoStack *undoStack = mMapDocument->undoStack();
undoStack->beginMacro(tr("Delete"));
if (tileLayer && !selectedArea.isEmpty()) {
undoStack->push(new EraseTiles(mMapDocument, tileLayer, selectedArea));
} else if (!selectedObjects.isEmpty()) {
foreach (MapObject *mapObject, selectedObjects)
undoStack->push(new RemoveMapObject(mMapDocument, mapObject));
}
selectNone();
undoStack->endMacro();
}
示例8: splitSegments
void EditPolygonTool::splitSegments()
{
if (mSelectedHandles.size() < 2)
return;
const PointIndexesByObject p = groupIndexesByObject(mSelectedHandles);
QMapIterator<MapObject*, RangeSet<int> > i(p);
QUndoStack *undoStack = mapDocument()->undoStack();
bool macroStarted = false;
while (i.hasNext()) {
MapObject *object = i.next().key();
const RangeSet<int> &indexRanges = i.value();
const bool closed = object->shape() == MapObject::Polygon;
QPolygonF oldPolygon = object->polygon();
QPolygonF newPolygon = splitPolygonSegments(oldPolygon, indexRanges,
closed);
if (newPolygon.size() > oldPolygon.size()) {
if (!macroStarted) {
undoStack->beginMacro(tr("Split Segments"));
macroStarted = true;
}
undoStack->push(new ChangePolygon(mapDocument(), object,
newPolygon,
oldPolygon));
}
}
if (macroStarted)
undoStack->endMacro();
}
示例9: createGroup
void ButtonTaskMenu::createGroup()
{
QDesignerFormWindowInterface *fw = formWindow();
const ButtonList bl = buttonList(fw->cursor());
// Do we need to remove the buttons from an existing group?
QUndoCommand *removeCmd = 0;
if (bl.front()->group()) {
removeCmd = createRemoveButtonsCommand(fw, bl);
if (!removeCmd)
return;
}
// Add cmd
CreateButtonGroupCommand *addCmd = new CreateButtonGroupCommand(fw);
if (!addCmd->init(bl)) {
qWarning("** WARNING Failed to initialize CreateButtonGroupCommand!");
delete addCmd;
return;
}
// Need a macro [even if we only have the add command] since the command might trigger additional commands
QUndoStack *history = fw->commandHistory();
history->beginMacro(addCmd->text());
if (removeCmd)
history->push(removeCmd);
history->push(addCmd);
history->endMacro();
}
示例10: accept
void ImageLayerPropertiesDialog::accept()
{
QUndoStack *undoStack = mMapDocument->undoStack();
const QColor newColor = mColorButton->color() != Qt::gray
? mColorButton->color()
: QColor();
const QString newPath = mImage->text();
const bool localChanges = newColor != mImageLayer->transparentColor() ||
newPath != mImageLayer->imageSource();
if (localChanges) {
undoStack->beginMacro(QCoreApplication::translate(
"Undo Commands",
"Change Image Layer Properties"));
undoStack->push(new ChangeImageLayerProperties(
mMapDocument,
mImageLayer,
newColor,
newPath));
}
PropertiesDialog::accept();
if (localChanges)
undoStack->endMacro();
}
示例11: dropMimeData
bool BookmarksModel::dropMimeData(const QMimeData *data,
Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
if (action == Qt::IgnoreAction)
return true;
if (column > 0)
return false;
BookmarkNode *parentNode = node(parent);
if (!data->hasFormat(MIMETYPE)) {
if (!data->hasUrls())
return false;
BookmarkNode *node = new BookmarkNode(BookmarkNode::Bookmark, parentNode);
node->url = QString::fromUtf8(data->urls().at(0).toEncoded());
if (data->hasText())
node->title = data->text();
else
node->title = node->url;
m_bookmarksManager->addBookmark(parentNode, node, row);
return true;
}
QByteArray ba = data->data(MIMETYPE);
QDataStream stream(&ba, QIODevice::ReadOnly);
if (stream.atEnd())
return false;
QUndoStack *undoStack = m_bookmarksManager->undoRedoStack();
undoStack->beginMacro(QLatin1String("Move Bookmarks"));
while (!stream.atEnd()) {
QByteArray encodedData;
stream >> encodedData;
QBuffer buffer(&encodedData);
buffer.open(QBuffer::ReadOnly);
XbelReader reader;
BookmarkNode *rootNode = reader.read(&buffer);
QList<BookmarkNode*> children = rootNode->children();
for (int i = 0; i < children.count(); ++i) {
BookmarkNode *bookmarkNode = children.at(i);
rootNode->remove(bookmarkNode);
row = qMax(0, row);
m_bookmarksManager->addBookmark(parentNode, bookmarkNode, row);
m_endMacro = true;
}
delete rootNode;
}
return true;
}
示例12: pasteObjectGroup
/**
* Convenience method that deals with some of the logic related to pasting
* a group of objects.
*/
void ClipboardManager::pasteObjectGroup(const ObjectGroup *objectGroup,
MapDocument *mapDocument,
const MapView *view,
PasteFlags flags)
{
Layer *currentLayer = mapDocument->currentLayer();
if (!currentLayer)
return;
ObjectGroup *currentObjectGroup = currentLayer->asObjectGroup();
if (!currentObjectGroup)
return;
QPointF insertPos;
if (!(flags & PasteInPlace)) {
// Determine where to insert the objects
const MapRenderer *renderer = mapDocument->renderer();
const QPointF center = objectGroup->objectsBoundingRect().center();
// Take the mouse position if the mouse is on the view, otherwise
// take the center of the view.
QPoint viewPos;
if (view->underMouse())
viewPos = view->mapFromGlobal(QCursor::pos());
else
viewPos = QPoint(view->width() / 2, view->height() / 2);
const QPointF scenePos = view->mapToScene(viewPos);
insertPos = renderer->screenToPixelCoords(scenePos) - center;
SnapHelper(renderer).snap(insertPos);
}
QUndoStack *undoStack = mapDocument->undoStack();
QList<MapObject*> pastedObjects;
pastedObjects.reserve(objectGroup->objectCount());
undoStack->beginMacro(tr("Paste Objects"));
for (const MapObject *mapObject : objectGroup->objects()) {
if (flags & PasteNoTileObjects && !mapObject->cell().isEmpty())
continue;
MapObject *objectClone = mapObject->clone();
objectClone->resetId();
objectClone->setPosition(objectClone->position() + insertPos);
pastedObjects.append(objectClone);
undoStack->push(new AddMapObject(mapDocument,
currentObjectGroup,
objectClone));
}
undoStack->endMacro();
mapDocument->setSelectedObjects(pastedObjects);
}
示例13: removeTiles
void TilesetDock::removeTiles()
{
TilesetView *view = currentTilesetView();
if (!view)
return;
if (!view->selectionModel()->hasSelection())
return;
const QModelIndexList indexes = view->selectionModel()->selectedIndexes();
const TilesetModel *model = view->tilesetModel();
QList<Tile*> tiles;
for (const QModelIndex &index : indexes)
if (Tile *tile = model->tileAt(index))
tiles.append(tile);
auto matchesAnyTile = [&tiles] (const Cell &cell) {
if (Tile *tile = cell.tile)
return tiles.contains(tile);
return false;
};
const bool inUse = hasTileReferences(mMapDocument, matchesAnyTile);
// If the tileset is in use, warn the user and confirm removal
if (inUse) {
QMessageBox warning(QMessageBox::Warning,
tr("Remove Tiles"),
tr("One or more of the tiles to be removed are "
"still in use by the map!"),
QMessageBox::Yes | QMessageBox::No,
this);
warning.setDefaultButton(QMessageBox::Yes);
warning.setInformativeText(tr("Remove all references to these tiles?"));
if (warning.exec() != QMessageBox::Yes)
return;
}
QUndoStack *undoStack = mMapDocument->undoStack();
undoStack->beginMacro(tr("Remove Tiles"));
if (inUse)
removeTileReferences(mMapDocument, matchesAnyTile);
Tileset *tileset = view->tilesetModel()->tileset();
undoStack->push(new RemoveTiles(mMapDocument, tileset, tiles));
undoStack->endMacro();
// Clear the current tiles, will be referencing the removed tiles
setCurrentTiles(nullptr);
setCurrentTile(nullptr);
}
示例14: push
void RaiseLowerHelper::push(const QList<QUndoCommand*> &commands,
const QString &text)
{
if (commands.isEmpty())
return;
QUndoStack *undoStack = mMapDocument->undoStack();
undoStack->beginMacro(text);
foreach (QUndoCommand *command, commands)
undoStack->push(command);
undoStack->endMacro();
}
示例15: breakGroup
void ButtonGroupMenu::breakGroup()
{
BreakButtonGroupCommand *cmd = new BreakButtonGroupCommand(m_formWindow);
if (cmd->init(m_buttonGroup)) {
// Need a macro since the command might trigger additional commands
QUndoStack *history = m_formWindow->commandHistory();
history->beginMacro(cmd->text());
history->push(cmd);
history->endMacro();
} else {
qWarning("** WARNING Failed to initialize BreakButtonGroupCommand!");
delete cmd;
}
}