本文整理汇总了C++中UndoTransaction类的典型用法代码示例。如果您正苦于以下问题:C++ UndoTransaction类的具体用法?C++ UndoTransaction怎么用?C++ UndoTransaction使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UndoTransaction类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: hide
void BarcodeGenerator::okButton_pressed()
{
QString psFile = QDir::toNativeSeparators(ScPaths::tempFileDir() + "bcode.ps");
// no need to call paintBarcode(pngFile, 300); because
// it's created by previous run...
hide();
const FileFormat * fmt = LoadSavePlugin::getFormatByExt("ps");
UndoTransaction tran;
if (UndoManager::undoEnabled())
{
tran = UndoManager::instance()->beginTransaction(
ScCore->primaryMainWindow()->doc->currentPage()->getUName(),
Um::IImageFrame,
Um::ImportBarcode,
ui.bcCombo->currentText() + " (" + ui.codeEdit->text() + ")",
Um::IEPS);
}
if (fmt)
{
fmt->loadFile(psFile, LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
if (tran)
tran.commit();
}
accept();
}
示例2: diaf
bool WMFImportPlugin::import(QString filename, int flags)
{
if (!checkFlags(flags))
return false;
if (m_Doc == nullptr)
m_Doc = ScCore->primaryMainWindow()->doc;
ScribusMainWindow* mw=(m_Doc==nullptr) ? ScCore->primaryMainWindow() : m_Doc->scMW();
if (filename.isEmpty())
{
flags |= lfInteractive;
PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("WMFPlugin");
QString wdir = prefs->get("wdir", ".");
CustomFDialog diaf(mw, wdir, QObject::tr("Open"), FormatsManager::instance()->fileDialogFormatList(FormatsManager::WMF));
if (diaf.exec())
{
filename = diaf.selectedFile();
prefs->set("wdir", filename.left(filename.lastIndexOf("/")));
}
else
return true;
}
bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
TransactionSettings trSettings;
trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
trSettings.targetPixmap = Um::IImageFrame;
trSettings.actionName = Um::ImportWMF;
trSettings.description = filename;
trSettings.actionPixmap = Um::IWMF;
UndoTransaction activeTransaction;
if ((m_Doc == nullptr) || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(false);
if (UndoManager::undoEnabled())
activeTransaction = UndoManager::instance()->beginTransaction(trSettings);
WMFImport *dia = new WMFImport(m_Doc, flags);
dia->import(filename, trSettings, flags);
Q_CHECK_PTR(dia);
if (activeTransaction)
activeTransaction.commit();
if ((m_Doc == nullptr) || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(true);
if (dia->importCanceled)
{
if (dia->importFailed)
ScMessageBox::warning(mw, CommonStrings::trWarning, tr("The file could not be imported"));
else if (dia->unsupported)
ScMessageBox::warning(mw, CommonStrings::trWarning, tr("WMF file contains some unsupported features"));
}
bool success = !dia->importFailed;
delete dia;
return success;
}
示例3: qRound
void CanvasMode_ObjImport::mousePressEvent(QMouseEvent *m)
{
// const double mouseX = m->globalX();
// const double mouseY = m->globalY();
const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos());
double Rxp = 0, Ryp = 0;
m_canvas->PaintSizeRect(QRect());
m_canvas->m_viewMode.m_MouseButtonPressed = true;
m_canvas->m_viewMode.operItemMoving = false;
m_view->HaveSelRect = false;
m_doc->DragP = false;
m_doc->leaveDrag = false;
// oldClip = 0;
m->accept();
m_view->registerMousePress(m->globalPos());
Mxp = mousePointDoc.x();
Myp = mousePointDoc.y();
Rxp = m_doc->ApplyGridF(FPoint(Mxp, Myp)).x();
Mxp = qRound(Rxp);
Ryp = m_doc->ApplyGridF(FPoint(Mxp, Myp)).y();
Myp = qRound(Ryp);
if (m->button() == Qt::MidButton)
{
m_view->MidButt = true;
if (m->modifiers() & Qt::ControlModifier)
m_view->DrawNew();
return;
}
if ((m->button() == Qt::LeftButton) && m_mimeData)
{
UndoTransaction* undoTransaction = NULL;
if (m_trSettings && UndoManager::undoEnabled())
{
undoTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction(*m_trSettings));
}
// Creating QDragEnterEvent outside of Qt is not recommended per docs :S
QPoint dropPos = m_view->widget()->mapFromGlobal(m->globalPos());
QDropEvent dropEvent(dropPos, Qt::CopyAction|Qt::MoveAction, m_mimeData, m->buttons(), m->modifiers());
m_view->contentsDropEvent(&dropEvent);
// Commit undo transaction if necessary
if (undoTransaction)
{
undoTransaction->commit();
delete undoTransaction;
undoTransaction = NULL;
}
// Return to normal mode
m_view->requestMode(modeNormal);
}
}
示例4: UndoTransaction
void gtAction::writeUnstyled(const QString& text)
{
UndoTransaction* activeTransaction = NULL;
if (isFirstWrite)
{
if (!doAppend)
{
if (UndoManager::undoEnabled())
activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::Selection, Um::IGroup, Um::ImportText, "", Um::IDelete));
if (it->nextInChain() != 0)
{
PageItem *nextItem = it->nextInChain();
while (nextItem != 0)
{
nextItem->itemText.selectAll();
nextItem->asTextFrame()->deleteSelectedTextFromFrame();
nextItem = nextItem->nextInChain();
}
}
it->itemText.selectAll();
it->asTextFrame()->deleteSelectedTextFromFrame();
}
}
QChar ch0(0), ch5(5), ch10(10), ch13(13);
QString textStr = text;
textStr.remove(ch0);
textStr.remove(ch13);
textStr.replace(ch10,ch13);
textStr.replace(ch5,ch13);
textStr.replace(QString(0x2028),SpecialChars::LINEBREAK);
textStr.replace(QString(0x2029),SpecialChars::PARSEP);
int pos = it->itemText.length();
if (UndoManager::undoEnabled())
{
SimpleState *ss = new SimpleState(Um::AppendText,"",Um::ICreate);
ss->set("INSERT_FRAMETEXT", "insert_frametext");
ss->set("TEXT_STR",textStr);
ss->set("START", pos);
undoManager->action(it, ss);
}
it->itemText.insertChars(pos, textStr);
lastCharWasLineChange = text.right(1) == "\n";
isFirstWrite = false;
if (activeTransaction)
{
activeTransaction->commit();
delete activeTransaction;
activeTransaction = NULL;
}
}
示例5: diaf
bool ImportXfigPlugin::import(QString fileName, int flags)
{
if (!checkFlags(flags))
return false;
if( fileName.isEmpty() )
{
flags |= lfInteractive;
PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importxfig");
QString wdir = prefs->get("wdir", ".");
CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), tr("All Supported Formats")+" (*.fig *.FIG);;All Files (*)");
if (diaf.exec())
{
fileName = diaf.selectedFile();
prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
}
else
return true;
}
m_Doc=ScCore->primaryMainWindow()->doc;
UndoTransaction* activeTransaction = NULL;
bool emptyDoc = (m_Doc == NULL);
bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
TransactionSettings trSettings;
trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
trSettings.targetPixmap = Um::IImageFrame;
trSettings.actionName = Um::ImportXfig;
trSettings.description = fileName;
trSettings.actionPixmap = Um::IXFIG;
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(false);
if (UndoManager::undoEnabled())
activeTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction(trSettings));
XfigPlug *dia = new XfigPlug(m_Doc, flags);
Q_CHECK_PTR(dia);
dia->import(fileName, trSettings, flags);
if (activeTransaction)
{
activeTransaction->commit();
delete activeTransaction;
activeTransaction = NULL;
}
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(true);
delete dia;
return true;
}
示例6: UndoTransaction
void CanvasMode_ObjImport::mouseReleaseEvent(QMouseEvent *m)
{
m_canvas->m_viewMode.m_MouseButtonPressed = false;
m_canvas->resetRenderMode();
m->accept();
if ((m->button() == Qt::LeftButton) && m_mimeData)
{
UndoTransaction* undoTransaction = NULL;
if (m_trSettings && UndoManager::undoEnabled())
{
undoTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction(*m_trSettings));
}
// Creating QDragEnterEvent outside of Qt is not recommended per docs :S
QPoint dropPos = m_view->widget()->mapFromGlobal(m->globalPos());
const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos());
QDropEvent dropEvent(dropPos, Qt::CopyAction|Qt::MoveAction, m_mimeData, m->buttons(), m->modifiers());
m_view->contentsDropEvent(&dropEvent);
if (m_doc->m_Selection->count() > 0)
{
double gx, gy, gh, gw;
m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
m_doc->moveGroup(mousePointDoc.x() - gx, mousePointDoc.y() -gy);
}
// Commit undo transaction if necessary
if (undoTransaction)
{
undoTransaction->commit();
delete undoTransaction;
undoTransaction = NULL;
}
// Return to normal mode
m_view->requestMode(modeNormal);
}
// m_view->stopDragTimer();
m_canvas->setRenderModeUseBuffer(false);
m_doc->DragP = false;
m_doc->leaveDrag = false;
m_canvas->m_viewMode.operItemMoving = false;
m_canvas->m_viewMode.operItemResizing = false;
m_view->MidButt = false;
//Make sure the Zoom spinbox and page selector dont have focus if we click on the canvas
m_view->m_ScMW->zoomSpinBox->clearFocus();
m_view->m_ScMW->pageSelector->clearFocus();
}
示例7: diaf
bool ImportPSPlugin::import(QString fileName, int flags)
{
if (!checkFlags(flags))
return false;
if( fileName.isEmpty() )
{
flags |= lfInteractive;
PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importps");
QString wdir = prefs->get("wdir", ".");
CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), FormatsManager::instance()->fileDialogFormatList(FormatsManager::EPS|FormatsManager::PS));
if (diaf.exec())
{
fileName = diaf.selectedFile();
prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
}
else
return true;
}
m_Doc=ScCore->primaryMainWindow()->doc;
UndoTransaction activeTransaction;
bool emptyDoc = (m_Doc == nullptr);
bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
TransactionSettings trSettings;
trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
trSettings.targetPixmap = Um::IImageFrame;
trSettings.actionName = Um::ImportEPS;
trSettings.description = fileName;
trSettings.actionPixmap = Um::IEPS;
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(false);
if (UndoManager::undoEnabled())
activeTransaction = UndoManager::instance()->beginTransaction(trSettings);
EPSPlug *dia = new EPSPlug(m_Doc, flags);
Q_CHECK_PTR(dia);
dia->import(fileName, trSettings, flags);
if (activeTransaction)
activeTransaction.commit();
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(true);
delete dia;
return true;
}
示例8: remove_cel
static void remove_cel(Sprite* sprite, UndoTransaction& undo, LayerImage *layer, Cel *cel)
{
Image *image;
Cel *it;
bool used;
if (sprite != NULL && layer->isImage() && cel != NULL) {
/* find if the image that use the cel to remove, is used by
another cels */
used = false;
for (FrameNumber frame(0); frame<sprite->getTotalFrames(); ++frame) {
it = layer->getCel(frame);
if (it != NULL && it != cel && it->getImage() == cel->getImage()) {
used = true;
break;
}
}
if (!used) {
// If the image is only used by this cel, we can remove the
// image from the stock.
image = sprite->getStock()->getImage(cel->getImage());
if (undo.isEnabled())
undo.pushUndoer(new undoers::RemoveImage(undo.getObjects(),
sprite->getStock(), cel->getImage()));
sprite->getStock()->removeImage(image);
image_free(image);
}
if (undo.isEnabled()) {
undo.pushUndoer(new undoers::RemoveCel(undo.getObjects(), layer, cel));
}
// Remove the cel
layer->removeCel(cel);
delete cel;
}
}
示例9: PathConnectDialog
bool PathConnectPlugin::run(ScribusDoc* doc, QString)
{
m_doc = doc;
firstUpdate = true;
if (m_doc == 0)
m_doc = ScCore->primaryMainWindow()->doc;
if (m_doc->m_Selection->count() > 1)
{
m_item1 = m_doc->m_Selection->itemAt(0);
m_item2 = m_doc->m_Selection->itemAt(1);
originalPath1 = m_item1->PoLine.copy();
originalPath2 = m_item2->PoLine.copy();
originalXPos = m_item1->xPos();
originalYPos = m_item1->yPos();
PathConnectDialog *dia = new PathConnectDialog(m_doc->scMW());
connect(dia, SIGNAL(updateValues(int, int, int, int)), this, SLOT(updateEffect(int, int, int, int)));
if (dia->exec())
{
int pointOne = dia->getFirstLinePoint();
int pointTwo = dia->getSecondLinePoint();
int mode = dia->getMode();
UndoTransaction *trans = NULL;
if(UndoManager::undoEnabled())
trans = new UndoTransaction(UndoManager::instance()->beginTransaction(Um::BezierCurve,Um::ILine,Um::ConnectPath,"",Um::ILine));
m_item1->PoLine = computePath(pointOne, pointTwo, mode, originalPath1, originalPath2);
m_item1->ClipEdited = true;
m_item1->FrameType = 3;
m_doc->AdjustItemSize(m_item1);
m_item1->OldB2 = m_item1->width();
m_item1->OldH2 = m_item1->height();
if(UndoManager::undoEnabled())
{
ScItemState<QPair<FPointArray,FPointArray> > *is = new ScItemState<QPair<FPointArray,FPointArray> >(Um::ConnectPath);
is->set("CONNECT_PATH","connect_path");
is->set("OLDX", originalXPos);
is->set("OLDY", originalYPos);
is->set("NEWX", m_item1->xPos());
is->set("NEWY", m_item1->yPos());
is->setItem(qMakePair(originalPath1, m_item1->PoLine));
UndoManager::instance()->action(m_item1, is);
}
m_item1->updateClip();
m_item1->ContourLine = m_item1->PoLine.copy();
m_doc->m_Selection->removeItem(m_item1);
m_doc->itemSelection_DeleteItem();
m_doc->changed();
if (trans)
{
trans->commit();
delete trans;
trans = NULL;
}
}
else
{
m_item1->PoLine = originalPath1.copy();
m_item1->ClipEdited = true;
m_item1->FrameType = 3;
m_item1->setXYPos(originalXPos, originalYPos);
m_doc->AdjustItemSize(m_item1);
m_item1->OldB2 = m_item1->width();
m_item1->OldH2 = m_item1->height();
m_item1->updateClip();
m_item1->ContourLine = m_item1->PoLine.copy();
}
m_doc->view()->DrawNew();
delete dia;
}
示例10: writeUnstyled
void gtAction::writeUnstyled(const QString& text, bool isNote)
{
UndoTransaction activeTransaction;
if (isFirstWrite && it->itemText.length() > 0)
{
if (!doAppend)
{
if (UndoManager::undoEnabled())
activeTransaction = undoManager->beginTransaction(Um::Selection, Um::IGroup, Um::ImportText, "", Um::IDelete);
if (it->nextInChain() != 0)
{
PageItem *nextItem = it->nextInChain();
while (nextItem != 0)
{
nextItem->itemText.selectAll();
nextItem->asTextFrame()->deleteSelectedTextFromFrame();
nextItem = nextItem->nextInChain();
}
}
it->itemText.selectAll();
it->asTextFrame()->deleteSelectedTextFromFrame();
}
}
QChar ch0(0), ch5(5), ch10(10), ch13(13);
QString textStr = text;
textStr.remove(ch0);
textStr.remove(ch13);
textStr.replace(ch10,ch13);
textStr.replace(ch5,ch13);
textStr.replace(QString(0x2028),SpecialChars::LINEBREAK);
textStr.replace(QString(0x2029),SpecialChars::PARSEP);
if (isNote)
{
if (note == NULL)
{
note = it->m_Doc->newNote(it->m_Doc->m_docNotesStylesList.at(0));
Q_ASSERT(noteStory == NULL);
noteStory = new StoryText(it->m_Doc);
}
if (textStr == SpecialChars::OBJECT)
{
NotesStyle* nStyle = note->notesStyle();
QString label = "NoteMark_" + nStyle->name();
if (nStyle->range() == NSRsection)
label += " in section " + it->m_Doc->getSectionNameForPageIndex(it->OwnPage) + " page " + QString::number(it->OwnPage +1);
else if (nStyle->range() == NSRpage)
label += " on page " + QString::number(it->OwnPage +1);
else if (nStyle->range() == NSRstory)
label += " in " + it->firstInChain()->itemName();
else if (nStyle->range() == NSRframe)
label += " in frame" + it->itemName();
if (it->m_Doc->getMark(label + "_1", MARKNoteMasterType) != NULL)
getUniqueName(label,it->m_Doc->marksLabelsList(MARKNoteMasterType), "_"); //FIX ME here user should be warned that inserted mark`s label was changed
else
label = label + "_1";
Mark* mrk = it->m_Doc->newMark();
mrk->label = label;
mrk->setType(MARKNoteMasterType);
mrk->setNotePtr(note);
note->setMasterMark(mrk);
if (noteStory->text(noteStory->length() -1) == SpecialChars::PARSEP)
noteStory->removeChars(noteStory->length() -1, 1);
note->setSaxedText(saxedText(noteStory));
mrk->setString("");
mrk->OwnPage = it->OwnPage;
it->itemText.insertMark(mrk);
if (UndoManager::undoEnabled())
{
ScItemsState* is = new ScItemsState(UndoManager::InsertNote);
is->set("ETEA", mrk->label);
is->set("MARK", QString("new"));
is->set("label", mrk->label);
is->set("type", (int) MARKNoteMasterType);
is->set("strtxt", QString(""));
is->set("nStyle", nStyle->name());
is->set("at", it->itemText.cursorPosition() -1);
is->insertItem("inItem", it);
undoManager->action(it->m_Doc, is);
}
note = NULL;
delete noteStory;
}
else
noteStory->insertChars(noteStory->length(), textStr);
}
else
{
int pos = it->itemText.length();
if (UndoManager::undoEnabled())
{
SimpleState *ss = new SimpleState(Um::AppendText,"",Um::ICreate);
ss->set("INSERT_FRAMETEXT", "insert_frametext");
ss->set("TEXT_STR",textStr);
ss->set("START", pos);
undoManager->action(it, ss);
}
it->itemText.insertChars(pos, textStr);
}
lastCharWasLineChange = text.right(1) == "\n";
//.........这里部分代码省略.........
示例11: mouseReleaseEvent
void CalligraphicMode::mouseReleaseEvent(QMouseEvent *m)
{
undoManager->setUndoEnabled(true);
PageItem *currItem;
m_MouseButtonPressed = false;
m_canvas->resetRenderMode();
m->accept();
if (m_doc->appMode == modeDrawCalligraphicLine)
{
if (RecordP.size() > 1)
{
UndoTransaction createTransaction;
if (UndoManager::undoEnabled())
createTransaction = UndoManager::instance()->beginTransaction();
uint z = m_doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, Mxp, Myp, 1, 1, m_doc->itemToolPrefs().calligraphicPenLineWidth, m_doc->itemToolPrefs().calligraphicPenFillColor, m_doc->itemToolPrefs().calligraphicPenLineColor);
currItem = m_doc->Items->at(z);
currItem->PoLine.resize(0);
QList<QPointF> clipU;
QList<QPointF> clipL;
double mx = sin(m_doc->itemToolPrefs().calligraphicPenAngle / 180.0 * M_PI) * (m_doc->itemToolPrefs().calligraphicPenWidth / 2.0);
double my = cos(m_doc->itemToolPrefs().calligraphicPenAngle / 180.0 * M_PI) * (m_doc->itemToolPrefs().calligraphicPenWidth / 2.0);
for (int px = 0; px < RecordP.size()-1; ++px)
{
FPoint clp = RecordP.point(px);
clipU.append(QPointF(clp.x() - mx, clp.y() - my));
clipL.prepend(QPointF(clp.x() + mx, clp.y() + my));
}
QPainterPath ppU = bezierFit(clipU, 5.0);
QPainterPath ppL = bezierFit(clipL, 5.0);
QPainterPath pp;
pp.addPath(ppU);
pp.connectPath(ppL);
pp.closeSubpath();
currItem->PoLine.fromQPainterPath(pp);
FPoint tp2(getMinClipF(&currItem->PoLine));
currItem->setXYPos(tp2.x(), tp2.y(), true);
currItem->PoLine.translate(-tp2.x(), -tp2.y());
FPoint tp(getMaxClipF(&currItem->PoLine));
m_doc->sizeItem(tp.x(), tp.y(), currItem, false, false, false);
m_doc->adjustItemSize(currItem);
m_doc->m_Selection->clear();
m_doc->m_Selection->addItem(currItem);
currItem->ClipEdited = true;
currItem->FrameType = 3;
currItem->OwnPage = m_doc->OnPage(currItem);
currItem->PLineArt = Qt::PenStyle(m_doc->itemToolPrefs().calligraphicPenStyle);
currItem->setFillShade(m_doc->itemToolPrefs().calligraphicPenFillColorShade);
currItem->setLineShade(m_doc->itemToolPrefs().calligraphicPenLineColorShade);
currItem->setFillEvenOdd(true);
m_view->resetMousePressed();
currItem->checkChanges();
QString targetName = Um::ScratchSpace;
if (currItem->OwnPage > -1)
targetName = m_doc->Pages->at(currItem->OwnPage)->getUName();
if (createTransaction)
createTransaction.commit(targetName, currItem->getUPixmap(), Um::Create + " " + currItem->getUName(), "", Um::ICreate);
//FIXME
m_canvas->m_viewMode.operItemResizing = false;
m_doc->changed();
}
if (!PrefsManager::instance()->appPrefs.uiPrefs.stickyTools)
{
m_view->requestMode(modeNormal);
}
else
m_view->requestMode(m_doc->appMode);
return;
}
m_canvas->setRenderModeUseBuffer(false);
m_doc->DragP = false;
m_doc->leaveDrag = false;
m_view->MidButt = false;
if (m_view->groupTransactionStarted())
{
for (int i = 0; i < m_doc->m_Selection->count(); ++i)
m_doc->m_Selection->itemAt(i)->checkChanges(true);
m_view->endGroupTransaction();
}
for (int i = 0; i < m_doc->m_Selection->count(); ++i)
m_doc->m_Selection->itemAt(i)->checkChanges(true);
//Commit drag created items to undo manager.
if (m_doc->m_Selection->itemAt(0)!=NULL)
{
m_doc->itemAddCommit(m_doc->m_Selection->itemAt(0));
}
//Make sure the Zoom spinbox and page selector don't have focus if we click on the canvas
m_view->m_ScMW->zoomSpinBox->clearFocus();
m_view->m_ScMW->pageSelector->clearFocus();
if (m_doc->m_Selection->itemAt(0) != 0) // is there the old clip stored for the undo action
{
currItem = m_doc->m_Selection->itemAt(0);
m_doc->nodeEdit.finishTransaction(currItem);
}
}
示例12: UndoTransaction
bool PathFinderPlugin::run(ScribusDoc* doc, QString)
{
ScribusDoc* currDoc = doc;
if (currDoc == 0)
currDoc = ScCore->primaryMainWindow()->doc;
if (currDoc->m_Selection->count() <= 1)
return true;
//<<#9046
UndoTransaction* activeTransaction = NULL;
UndoManager* undoManager = UndoManager::instance();
if (UndoManager::undoEnabled())
activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::SelectionGroup, Um::IDocument, Um::PathOperation, "", Um::IPolygon));
//>>#9046
PageItem *Item1 = currDoc->m_Selection->itemAt(0);
PageItem *Item2 = currDoc->m_Selection->itemAt(1);
PathFinderDialog *dia = new PathFinderDialog(currDoc->scMW(), currDoc, Item1, Item2);
if (dia->exec())
{
int opMode=dia->opMode;
if (dia->keepItem1)
{
PageItem *newItem;
if (dia->swapped)
{
newItem = new PageItem_Polygon(*Item2);
newItem->setSelected(false);
currDoc->Items->insert(currDoc->Items->indexOf(Item2), newItem);
}
else
{
newItem = new PageItem_Polygon(*Item1);
newItem->setSelected(false);
currDoc->Items->insert(currDoc->Items->indexOf(Item1), newItem);
}
if (UndoManager::undoEnabled())
{
ScItemState<PageItem*> *is = new ScItemState<PageItem*>("Create PageItem");
is->set("CREATE_ITEM", "create_item");
is->setItem(newItem);
UndoObject *target = currDoc->Pages->at(Item1->OwnPage);
undoManager->action(target, is);
}
}
if (dia->keepItem2)
{
PageItem *newItem;
if (dia->swapped)
{
newItem = new PageItem_Polygon(*Item1);
newItem->setSelected(false);
currDoc->Items->insert(currDoc->Items->indexOf(Item1), newItem);
}
else
{
newItem = new PageItem_Polygon(*Item2);
newItem->setSelected(false);
currDoc->Items->insert(currDoc->Items->indexOf(Item2), newItem);
}
if (UndoManager::undoEnabled())
{
ScItemState<PageItem*> *is = new ScItemState<PageItem*>("Create PageItem");
is->set("CREATE_ITEM", "create_item");
is->setItem(newItem);
UndoObject *target = currDoc->Pages->at(Item1->OwnPage);
undoManager->action(target, is);
}
}
if (opMode != 4)
{
PageItem *currItem;
QPainterPath path;
FPointArray points;
if (dia->targetColor == 0)
{
currItem = Item1;
if (dia->swapped)
{
currItem = Item2;
currItem->setXYPos(Item1->xPos(), Item1->yPos());
currItem->setRotation(0.0);
}
}
else
{
if (dia->swapped)
currItem = Item1;
else
{
currItem = Item2;
currItem->setXYPos(Item1->xPos(), Item1->yPos());
currItem->setRotation(0.0);
}
}
path = dia->result;
points.fromQPainterPath(path);
//<<#9046
FPointArray oldPOLine=currItem->PoLine;
//.........这里部分代码省略.........
示例13: diaf
bool ImportPdfPlugin::import(QString fileName, int flags)
{
if (!checkFlags(flags))
return false;
if( fileName.isEmpty() )
{
flags |= lfInteractive;
PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importpdf");
QString wdir = prefs->get("wdir", ".");
CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), tr("All Supported Formats")+" (*.pdf *.PDF);;All Files (*)");
if (diaf.exec())
{
fileName = diaf.selectedFile();
prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
}
else
return true;
}
m_Doc=ScCore->primaryMainWindow()->doc;
UndoTransaction* activeTransaction = NULL;
bool emptyDoc = (m_Doc == NULL);
bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
TransactionSettings trSettings;
trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
trSettings.targetPixmap = Um::IImageFrame;
trSettings.actionName = Um::ImportXfig;
trSettings.description = fileName;
trSettings.actionPixmap = Um::IXFIG;
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(false);
if (UndoManager::undoEnabled())
activeTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction(trSettings));
bool isCleanedFile = false;
QString cleanFile = "";
QFileInfo fi(fileName);
QStringList exts = QStringList() << "eps" << "epsf" << "epsi" << "eps2" << "eps3" << "epi" << "ept" << "ps";
if (exts.contains(fi.suffix().toLower()))
{
if (ScCore->haveGS())
{
// Destill the eps/ps with ghostscript to get a clean pdf file
bool cancel = false;
QString errFile = getShortPathName(ScPaths::getTempFileDir())+ "/ps.err";
cleanFile = getShortPathName(ScPaths::getTempFileDir())+ "/clean.pdf";
QStringList args;
args.append( "-q" );
args.append( "-dNOPAUSE" );
args.append( "-sDEVICE=pdfwrite" );
args.append( "-dBATCH" );
args.append( "-dSAFER" );
if (extensionIndicatesEPS(fi.suffix().toLower()))
args.append("-dEPSCrop");
args.append("-dCompatibilityLevel=1.4");
args.append( QString("-sOutputFile=%1").arg(QDir::toNativeSeparators(cleanFile)) );
args.append( QDir::toNativeSeparators(fileName) );
System(getShortPathName(PrefsManager::instance()->ghostscriptExecutable()), args, errFile, errFile, &cancel);
args.clear();
isCleanedFile = true;
}
else
{
qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning, tr("The Import plugin cannot handle Postscript files"), 1, 0, 0);
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
return false;
}
}
PdfPlug *dia = new PdfPlug(m_Doc, flags);
Q_CHECK_PTR(dia);
if (isCleanedFile)
dia->import(cleanFile, trSettings, flags);
else
dia->import(fileName, trSettings, flags);
if (activeTransaction)
{
activeTransaction->commit();
delete activeTransaction;
activeTransaction = NULL;
}
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(true);
delete dia;
if (isCleanedFile)
QFile::remove(cleanFile);
return true;
}