Fixed issue #82. Fixed issue #83. Fixed issue #85.

--HG--
branch : develop
This commit is contained in:
dismine 2014-06-24 11:23:39 +03:00
parent ed25d04e5e
commit 82836c15a1
46 changed files with 615 additions and 43 deletions

View File

@ -0,0 +1,79 @@
/************************************************************************
**
** @file dialogundo.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 23 6, 2014
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2014 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "dialogundo.h"
#include "ui_dialogundo.h"
#include "../../widgets/vapplication.h"
#include "../../exception/vexceptionundo.h"
#include <QCloseEvent>
#include <QUndoStack>
//---------------------------------------------------------------------------------------------------------------------
DialogUndo::DialogUndo(QWidget *parent)
:QDialog(parent), ui(new Ui::DialogUndo), result(UndoButton::Cancel)
{
ui->setupUi(this);
connect(ui->pushButtonUndo, &QPushButton::clicked, this, &DialogUndo::Undo);
connect(ui->pushButtonFix, &QPushButton::clicked, this, &DialogUndo::Fix);
connect(ui->pushButtonCancel, &QPushButton::clicked, this, &DialogUndo::Cancel);
}
//---------------------------------------------------------------------------------------------------------------------
DialogUndo::~DialogUndo()
{
delete ui;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogUndo::Undo()
{
result = UndoButton::Undo;
accept();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogUndo::Fix()
{
result = UndoButton::Fix;
accept();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogUndo::Cancel()
{
result = UndoButton::Cancel;
reject();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogUndo::closeEvent(QCloseEvent *event)
{
Cancel();
event->accept();
}

View File

@ -0,0 +1,65 @@
/************************************************************************
**
** @file dialogundo.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 23 6, 2014
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2014 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef DIALOGUNDO_H
#define DIALOGUNDO_H
#include <QDialog>
namespace Ui
{
class DialogUndo;
}
enum class UndoButton {Undo, Fix, Cancel};
class DialogUndo : public QDialog
{
Q_OBJECT
public:
explicit DialogUndo(QWidget *parent = 0);
UndoButton Result() const;
~DialogUndo();
public slots:
void Undo();
void Fix();
void Cancel();
protected:
virtual void closeEvent ( QCloseEvent * event );
private:
Q_DISABLE_COPY(DialogUndo)
Ui::DialogUndo *ui;
UndoButton result;
};
inline UndoButton DialogUndo::Result() const
{
return result;
}
#endif // DIALOGUNDO_H

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogUndo</class>
<widget class="QDialog" name="DialogUndo">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>387</width>
<height>145</height>
</rect>
</property>
<property name="windowTitle">
<string>Broken formula</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Error while calculation formula. You can try undo last operation or fix broken formula.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButtonUndo">
<property name="text">
<string>&amp;Undo</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonFix">
<property name="text">
<string>&amp;Fix formula</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonCancel">
<property name="text">
<string>&amp;Cancel</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -35,7 +35,8 @@ HEADERS += \
dialogs/app/configpages/configurationpage.h \ dialogs/app/configpages/configurationpage.h \
dialogs/app/configpages/patternpage.h \ dialogs/app/configpages/patternpage.h \
dialogs/app/configpages/communitypage.h \ dialogs/app/configpages/communitypage.h \
dialogs/app/configpages/pathpage.h dialogs/app/configpages/pathpage.h \
dialogs/app/dialogundo.h
SOURCES += \ SOURCES += \
dialogs/tools/dialogtriangle.cpp \ dialogs/tools/dialogtriangle.cpp \
@ -72,7 +73,8 @@ SOURCES += \
dialogs/app/configpages/configurationpage.cpp \ dialogs/app/configpages/configurationpage.cpp \
dialogs/app/configpages/patternpage.cpp \ dialogs/app/configpages/patternpage.cpp \
dialogs/app/configpages/communitypage.cpp \ dialogs/app/configpages/communitypage.cpp \
dialogs/app/configpages/pathpage.cpp dialogs/app/configpages/pathpage.cpp \
dialogs/app/dialogundo.cpp
FORMS += \ FORMS += \
dialogs/tools/dialogtriangle.ui \ dialogs/tools/dialogtriangle.ui \
@ -103,4 +105,5 @@ FORMS += \
dialogs/app/dialogindividualmeasurements.ui \ dialogs/app/dialogindividualmeasurements.ui \
dialogs/app/dialogaboutapp.ui \ dialogs/app/dialogaboutapp.ui \
dialogs/app/dialogpatternxmledit.ui \ dialogs/app/dialogpatternxmledit.ui \
dialogs/tools/dialogeditwrongformula.ui dialogs/tools/dialogeditwrongformula.ui \
dialogs/app/dialogundo.ui

View File

@ -4,7 +4,8 @@ HEADERS += \
exception/vexceptionconversionerror.h \ exception/vexceptionconversionerror.h \
exception/vexceptionbadid.h \ exception/vexceptionbadid.h \
exception/vexception.h \ exception/vexception.h \
exception/vexceptionwrongid.h exception/vexceptionwrongid.h \
exception/vexceptionundo.h
SOURCES += \ SOURCES += \
exception/vexceptionobjecterror.cpp \ exception/vexceptionobjecterror.cpp \
@ -12,4 +13,5 @@ SOURCES += \
exception/vexceptionconversionerror.cpp \ exception/vexceptionconversionerror.cpp \
exception/vexceptionbadid.cpp \ exception/vexceptionbadid.cpp \
exception/vexception.cpp \ exception/vexception.cpp \
exception/vexceptionwrongid.cpp exception/vexceptionwrongid.cpp \
exception/vexceptionundo.cpp

View File

@ -53,8 +53,8 @@ public:
virtual QString DetailedInformation() const; virtual QString DetailedInformation() const;
QString What() const; QString What() const;
virtual void CriticalMessageBox(const QString &situation, QWidget *parent = nullptr) const; virtual void CriticalMessageBox(const QString &situation, QWidget *parent = nullptr) const;
void AddMoreInformation(const QString &info); void AddMoreInformation(const QString &info);
QString MoreInformation() const; QString MoreInformation() const;
protected: protected:
/** @brief what string with error */ /** @brief what string with error */
QString what; QString what;

View File

@ -0,0 +1,39 @@
/************************************************************************
**
** @file vexceptionundo.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 23 6, 2014
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2014 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "vexceptionundo.h"
//---------------------------------------------------------------------------------------------------------------------
VExceptionUndo::VExceptionUndo(const QString &what)
:VException(what)
{}
//---------------------------------------------------------------------------------------------------------------------
VExceptionUndo::VExceptionUndo(const VExceptionUndo &e)
:VException(e)
{}

View File

@ -0,0 +1,42 @@
/************************************************************************
**
** @file vexceptionundo.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 23 6, 2014
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2014 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef VEXCEPTIONUNDO_H
#define VEXCEPTIONUNDO_H
#include "vexception.h"
class VExceptionUndo : public VException
{
public:
VExceptionUndo(const QString &what);
VExceptionUndo(const VExceptionUndo &e);
virtual ~VExceptionUndo() noexcept (true){}
};
#endif // VEXCEPTIONUNDO_H

View File

@ -34,10 +34,12 @@
#include "exception/vexceptionconversionerror.h" #include "exception/vexceptionconversionerror.h"
#include "exception/vexceptionemptyparameter.h" #include "exception/vexceptionemptyparameter.h"
#include "exception/vexceptionwrongid.h" #include "exception/vexceptionwrongid.h"
#include "exception/vexceptionundo.h"
#include "version.h" #include "version.h"
#include "xml/vstandardmeasurements.h" #include "xml/vstandardmeasurements.h"
#include "xml/vindividualmeasurements.h" #include "xml/vindividualmeasurements.h"
#include "widgets/vapplication.h" #include "widgets/vapplication.h"
#include "widgets/undoevent.h"
#include <QInputDialog> #include <QInputDialog>
#include <QtCore> #include <QtCore>
@ -61,7 +63,7 @@ MainWindow::MainWindow(QWidget *parent)
view(nullptr), isInitialized(false), dialogTable(0), dialogTool(nullptr), dialogHistory(nullptr), view(nullptr), isInitialized(false), dialogTable(0), dialogTool(nullptr), dialogHistory(nullptr),
comboBoxDraws(nullptr), curFile(QString()), mode(Draw::Calculation), currentDrawIndex(0), comboBoxDraws(nullptr), curFile(QString()), mode(Draw::Calculation), currentDrawIndex(0),
currentToolBoxIndex(0), drawMode(true), recentFileActs{0, 0, 0, 0, 0}, separatorAct(nullptr), currentToolBoxIndex(0), drawMode(true), recentFileActs{0, 0, 0, 0, 0}, separatorAct(nullptr),
autoSaveTimer(nullptr) autoSaveTimer(nullptr), guiEnabled(true)
{ {
CreateActions(); CreateActions();
CreateMenus(); CreateMenus();
@ -98,6 +100,7 @@ MainWindow::MainWindow(QWidget *parent)
connect(doc, &VPattern::ClearMainWindow, this, &MainWindow::Clear); connect(doc, &VPattern::ClearMainWindow, this, &MainWindow::Clear);
connect(doc, &VPattern::patternChanged, this, &MainWindow::PatternWasModified); connect(doc, &VPattern::patternChanged, this, &MainWindow::PatternWasModified);
connect(doc, &VPattern::UndoCommand, this, &MainWindow::FullParseFile); connect(doc, &VPattern::UndoCommand, this, &MainWindow::FullParseFile);
connect(doc, &VPattern::SetEnabledGUI, this, &MainWindow::SetEnabledGUI);
connect(qApp->getUndoStack(), &QUndoStack::cleanChanged, this, &MainWindow::PatternWasModified); connect(qApp->getUndoStack(), &QUndoStack::cleanChanged, this, &MainWindow::PatternWasModified);
@ -968,6 +971,15 @@ void MainWindow::closeEvent(QCloseEvent *event)
} }
} }
//---------------------------------------------------------------------------------------------------------------------
void MainWindow::customEvent(QEvent *event)
{
if(event->type() == UNDO_EVENT)
{
qApp->getUndoStack()->undo();
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief ToolBarOption enable option toolbar. * @brief ToolBarOption enable option toolbar.
@ -1532,36 +1544,45 @@ void MainWindow::FullParseFile()
{ {
try try
{ {
SetEnabledGUI(true);
doc->Parse(Document::FullParse); doc->Parse(Document::FullParse);
} }
catch (const VExceptionUndo &e)
{
Q_UNUSED(e);
/* If user want undo last operation before undo we need finish broken redo operation. For those we post event
* myself. Later in method customEvent call undo.*/
QApplication::postEvent(this, new UndoEvent());
return;
}
catch (const VExceptionObjectError &e) catch (const VExceptionObjectError &e)
{ {
e.CriticalMessageBox(tr("Error parsing file."), this); e.CriticalMessageBox(tr("Error parsing file."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionConversionError &e) catch (const VExceptionConversionError &e)
{ {
e.CriticalMessageBox(tr("Error can't convert value."), this); e.CriticalMessageBox(tr("Error can't convert value."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionEmptyParameter &e) catch (const VExceptionEmptyParameter &e)
{ {
e.CriticalMessageBox(tr("Error empty parameter."), this); e.CriticalMessageBox(tr("Error empty parameter."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionWrongId &e) catch (const VExceptionWrongId &e)
{ {
e.CriticalMessageBox(tr("Error wrong id."), this); e.CriticalMessageBox(tr("Error wrong id."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
catch (VException &e) catch (VException &e)
{ {
e.CriticalMessageBox(tr("Error parsing file."), this); e.CriticalMessageBox(tr("Error parsing file."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
catch (const std::bad_alloc &) catch (const std::bad_alloc &)
@ -1574,7 +1595,7 @@ void MainWindow::FullParseFile()
#ifndef QT_NO_CURSOR #ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
#endif #endif
Clear(); SetEnabledGUI(false);
return; return;
} }
@ -1606,13 +1627,13 @@ void MainWindow::FullParseFile()
catch (VExceptionBadId &e) catch (VExceptionBadId &e)
{ {
e.CriticalMessageBox(tr("Bad id."), this); e.CriticalMessageBox(tr("Bad id."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionEmptyParameter &e) catch (const VExceptionEmptyParameter &e)
{ {
e.CriticalMessageBox(tr("Error empty parameter."), this); e.CriticalMessageBox(tr("Error empty parameter."), this);
Clear(); SetEnabledGUI(false);
return; return;
} }
@ -1627,6 +1648,43 @@ void MainWindow::FullParseFile()
SetEnableWidgets(true); SetEnableWidgets(true);
} }
//---------------------------------------------------------------------------------------------------------------------
void MainWindow::SetEnabledGUI(bool enabled)
{
if (guiEnabled != enabled)
{
if (enabled == false)
{
CancelTool();
}
comboBoxDraws->setEnabled(enabled);
ui->actionOptionDraw->setEnabled(enabled);
ui->actionSave->setEnabled(enabled);
ui->actionSaveAs->setEnabled(enabled);
ui->actionPattern_properties->setEnabled(enabled);
ui->actionEdit_pattern_code->setEnabled(enabled);
ui->actionZoomIn->setEnabled(enabled);
ui->actionZoomOut->setEnabled(enabled);
ui->actionArrowTool->setEnabled(enabled);
ui->actionHistory->setEnabled(enabled);
ui->actionNewDraw->setEnabled(enabled);
ui->actionDraw->setEnabled(enabled);
ui->actionDetails->setEnabled(enabled);
ui->actionTable->setEnabled(enabled);
guiEnabled = enabled;
sceneDraw->SetDisable(!enabled);
view->setEnabled(enabled);
SetEnableTool(enabled);
ui->toolBarOption->setEnabled(enabled);
#ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::ArrowCursor);
#endif
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief NewPattern create new empty pattern. * @brief NewPattern create new empty pattern.
@ -1647,8 +1705,11 @@ void MainWindow::NewPattern()
*/ */
void MainWindow::PatternWasModified(bool saved) void MainWindow::PatternWasModified(bool saved)
{ {
setWindowModified(!saved); if (guiEnabled)
ui->actionSave->setEnabled(!saved); {
setWindowModified(!saved);
ui->actionSave->setEnabled(!saved);
}
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -142,6 +142,7 @@ public slots:
*/ */
void EditPatternCode(); void EditPatternCode();
void FullParseFile(); void FullParseFile();
void SetEnabledGUI(bool enabled);
signals: signals:
/** /**
* @brief ModelChosen emit after calculation all details. * @brief ModelChosen emit after calculation all details.
@ -153,6 +154,7 @@ protected:
virtual void keyPressEvent ( QKeyEvent * event ); virtual void keyPressEvent ( QKeyEvent * event );
virtual void showEvent( QShowEvent *event ); virtual void showEvent( QShowEvent *event );
virtual void closeEvent( QCloseEvent * event ); virtual void closeEvent( QCloseEvent * event );
virtual void customEvent(QEvent * event);
private: private:
Q_DISABLE_COPY(MainWindow) Q_DISABLE_COPY(MainWindow)
/** @brief ui keeps information about user interface */ /** @brief ui keeps information about user interface */
@ -214,6 +216,7 @@ private:
QAction *recentFileActs[MaxRecentFiles]; QAction *recentFileActs[MaxRecentFiles];
QAction *separatorAct; QAction *separatorAct;
QTimer *autoSaveTimer; QTimer *autoSaveTimer;
bool guiEnabled;
void ToolBarOption(); void ToolBarOption();
void ToolBarDraws(); void ToolBarDraws();
void ToolBarZoom(); void ToolBarZoom();

View File

@ -47,6 +47,12 @@ void VAbstractSpline::FullUpdateFromFile()
RefreshGeometry(); RefreshGeometry();
} }
//---------------------------------------------------------------------------------------------------------------------
void VAbstractSpline::Disable(bool disable)
{
DisableItem(this, disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief ChangedActivDraw disable or enable context menu after change active pattern peace. * @brief ChangedActivDraw disable or enable context menu after change active pattern peace.

View File

@ -41,6 +41,7 @@ public:
static const QString TagName; static const QString TagName;
public slots: public slots:
virtual void FullUpdateFromFile (); virtual void FullUpdateFromFile ();
void Disable(bool disable);
signals: signals:
/** /**
* @brief RefreshLine refresh control line. * @brief RefreshLine refresh control line.

View File

@ -30,9 +30,11 @@
#include <qmuparsererror.h> #include <qmuparsererror.h>
#include "dialogs/tools/dialogeditwrongformula.h" #include "dialogs/tools/dialogeditwrongformula.h"
#include "dialogs/app/dialogundo.h"
#include "container/calculator.h" #include "container/calculator.h"
#include "../../undocommands/addtocalc.h" #include "../../undocommands/addtocalc.h"
#include "../../undocommands/savetooloptions.h" #include "../../undocommands/savetooloptions.h"
#include "../../exception/vexceptionundo.h"
qreal VDrawTool::factor = 1; qreal VDrawTool::factor = 1;
@ -193,21 +195,43 @@ qreal VDrawTool::CheckFormula(QString &formula, VContainer *data)
{ {
Q_UNUSED(e) Q_UNUSED(e)
delete cal; delete cal;
DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data);
dialog->setFormula(formula); DialogUndo *dialogUndo = new DialogUndo();
if (dialog->exec() == QDialog::Accepted) if (dialogUndo->exec() == QDialog::Accepted)
{ {
formula = dialog->getFormula(); UndoButton resultUndo = dialogUndo->Result();
//Need delete dialog here because parser in dialog don't allow use correct separator for parsing here. delete dialogUndo;
//Don't know why. if (resultUndo == UndoButton::Fix)
delete dialog; {
Calculator *cal1 = new Calculator(data); DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data);
result = cal1->EvalFormula(formula); dialog->setFormula(formula);
delete cal1;//Here can be memory leak, but dialog already check this formula and probability very low. if (dialog->exec() == QDialog::Accepted)
{
formula = dialog->getFormula();
/* Need delete dialog here because parser in dialog don't allow use correct separator for parsing
* here.
* Don't know why. */
delete dialog;
Calculator *cal1 = new Calculator(data);
result = cal1->EvalFormula(formula);
delete cal1; /* Here can be memory leak, but dialog already check this formula and probability
* very low. */
}
else
{
delete dialog;
throw;
}
}
else
{
QString what = QString("Undo wrong formula %1").arg(formula);
throw VExceptionUndo(what);
}
} }
else else
{ {
delete dialog; delete dialogUndo;
throw; throw;
} }
} }

View File

@ -165,6 +165,20 @@ protected:
item->setPen(QPen(currentColor, qApp->toPixel(qApp->widthHairLine())/factor)); item->setPen(QPen(currentColor, qApp->toPixel(qApp->widthHairLine())/factor));
} }
} }
template <typename Item>
void DisableItem(Item *item, bool disable)
{
SCASSERT(item != nullptr);
if (disable)
{
currentColor = Qt::gray;
}
else
{
currentColor = baseColor;
}
item->setPen(QPen(currentColor, qApp->toPixel(qApp->widthHairLine())/factor));
}
private: private:
Q_DISABLE_COPY(VDrawTool) Q_DISABLE_COPY(VDrawTool)
}; };

View File

@ -280,6 +280,7 @@ VToolAlongLine* VToolAlongLine::Create(const quint32 _id, const QString &pointNa
scene->addItem(point); scene->addItem(point);
connect(point, &VToolAlongLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolAlongLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolAlongLine::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolAlongLine::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolAlongLine::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(firstPointId); doc->IncrementReferens(firstPointId);
doc->IncrementReferens(secondPointId); doc->IncrementReferens(secondPointId);

View File

@ -157,6 +157,7 @@ VToolArc* VToolArc::Create(const quint32 _id, const quint32 &center, QString &ra
VToolArc *toolArc = new VToolArc(doc, data, id, typeCreation); VToolArc *toolArc = new VToolArc(doc, data, id, typeCreation);
scene->addItem(toolArc); scene->addItem(toolArc);
connect(toolArc, &VToolArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(toolArc, &VToolArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::DisableItem, toolArc, &VToolArc::Disable);
doc->AddTool(id, toolArc); doc->AddTool(id, toolArc);
doc->IncrementReferens(center); doc->IncrementReferens(center);
return toolArc; return toolArc;
@ -220,6 +221,12 @@ void VToolArc::SetFactor(qreal factor)
RefreshGeometry(); RefreshGeometry();
} }
//---------------------------------------------------------------------------------------------------------------------
void VToolArc::Disable(bool disable)
{
DisableItem(this, disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief contextMenuEvent handle context menu events. * @brief contextMenuEvent handle context menu events.

View File

@ -53,6 +53,7 @@ public slots:
virtual void ChangedActivDraw(const QString &newName); virtual void ChangedActivDraw(const QString &newName);
virtual void ShowTool(quint32 id, Qt::GlobalColor color, bool enable); virtual void ShowTool(quint32 id, Qt::GlobalColor color, bool enable);
virtual void SetFactor(qreal factor); virtual void SetFactor(qreal factor);
void Disable(bool disable);
protected: protected:
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
virtual void AddToFile(); virtual void AddToFile();

View File

@ -194,8 +194,9 @@ VToolBisector* VToolBisector::Create(const quint32 _id, QString &formula, const
VToolBisector *point = new VToolBisector(doc, data, id, typeLine, formula, firstPointId, secondPointId, VToolBisector *point = new VToolBisector(doc, data, id, typeLine, formula, firstPointId, secondPointId,
thirdPointId, typeCreation); thirdPointId, typeCreation);
scene->addItem(point); scene->addItem(point);
connect(point, &VToolBisector::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolBisector::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolBisector::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(firstPointId); doc->IncrementReferens(firstPointId);
doc->IncrementReferens(secondPointId); doc->IncrementReferens(secondPointId);

View File

@ -187,7 +187,8 @@ VToolCutArc* VToolCutArc::Create(const quint32 _id, const QString &pointName, QS
VToolCutArc *point = new VToolCutArc(doc, data, id, formula, arcId, arc1id, arc2id, typeCreation); VToolCutArc *point = new VToolCutArc(doc, data, id, formula, arcId, arc1id, arc2id, typeCreation);
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolCutArc::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->AddTool(arc1id, point); doc->AddTool(arc1id, point);
doc->AddTool(arc2id, point); doc->AddTool(arc2id, point);

View File

@ -181,7 +181,8 @@ void VToolCutSpline::Create(const quint32 _id, const QString &pointName, QString
VToolCutSpline *point = new VToolCutSpline(doc, data, id, formula, splineId, spl1id, spl2id, typeCreation); VToolCutSpline *point = new VToolCutSpline(doc, data, id, formula, splineId, spl1id, spl2id, typeCreation);
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolCutSpline::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->AddTool(spl1id, point); doc->AddTool(spl1id, point);
doc->AddTool(spl2id, point); doc->AddTool(spl2id, point);

View File

@ -237,6 +237,7 @@ void VToolCutSplinePath::Create(const quint32 _id, const QString &pointName, QSt
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->AddTool(splPath1id, point); doc->AddTool(splPath1id, point);
doc->AddTool(splPath2id, point); doc->AddTool(splPath2id, point);

View File

@ -162,6 +162,7 @@ VToolEndLine* VToolEndLine::Create(const quint32 _id, const QString &pointName,
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(basePointId); doc->IncrementReferens(basePointId);
return point; return point;

View File

@ -156,6 +156,7 @@ void VToolHeight::Create(const quint32 _id, const QString &pointName, const QStr
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(basePointId); doc->IncrementReferens(basePointId);
doc->IncrementReferens(p1LineId); doc->IncrementReferens(p1LineId);

View File

@ -147,6 +147,7 @@ void VToolLine::Create(const quint32 &_id, const quint32 &firstPoint, const quin
scene->addItem(line); scene->addItem(line);
connect(line, &VToolLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(line, &VToolLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, line, &VToolLine::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, line, &VToolLine::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, line, &VToolLine::Disable);
doc->AddTool(id, line); doc->AddTool(id, line);
doc->IncrementReferens(firstPoint); doc->IncrementReferens(firstPoint);
doc->IncrementReferens(secondPoint); doc->IncrementReferens(secondPoint);
@ -185,6 +186,12 @@ void VToolLine::SetFactor(qreal factor)
RefreshGeometry(); RefreshGeometry();
} }
//---------------------------------------------------------------------------------------------------------------------
void VToolLine::Disable(bool disable)
{
DisableItem(this, disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief ChangedActivDraw disable or enable context menu after change active pattern peace. * @brief ChangedActivDraw disable or enable context menu after change active pattern peace.

View File

@ -52,6 +52,7 @@ public slots:
virtual void ChangedActivDraw(const QString &newName); virtual void ChangedActivDraw(const QString &newName);
virtual void ShowTool(quint32 id, Qt::GlobalColor color, bool enable); virtual void ShowTool(quint32 id, Qt::GlobalColor color, bool enable);
virtual void SetFactor(qreal factor); virtual void SetFactor(qreal factor);
void Disable(bool disable);
protected: protected:
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
virtual void AddToFile(); virtual void AddToFile();

View File

@ -165,6 +165,7 @@ void VToolLineIntersect::Create(const quint32 _id, const quint32 &p1Line1Id, con
scene->addItem(point); scene->addItem(point);
connect(point, &VToolLineIntersect::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolLineIntersect::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolLineIntersect::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolLineIntersect::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(p1Line1Id); doc->IncrementReferens(p1Line1Id);
doc->IncrementReferens(p2Line1Id); doc->IncrementReferens(p2Line1Id);

View File

@ -165,6 +165,7 @@ VToolNormal* VToolNormal::Create(const quint32 _id, QString &formula, const quin
scene->addItem(point); scene->addItem(point);
connect(point, &VToolNormal::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolNormal::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolNormal::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolNormal::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(firstPointId); doc->IncrementReferens(firstPointId);
doc->IncrementReferens(secondPointId); doc->IncrementReferens(secondPointId);

View File

@ -156,6 +156,12 @@ void VToolPoint::ShowContextMenu(QGraphicsSceneContextMenuEvent *event)
Q_UNUSED(event); Q_UNUSED(event);
} }
//---------------------------------------------------------------------------------------------------------------------
void VToolPoint::Disable(bool disable)
{
DisableItem(this, disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief mouseReleaseEvent handle mouse release events. * @brief mouseReleaseEvent handle mouse release events.

View File

@ -51,6 +51,7 @@ public slots:
virtual void ShowTool(quint32 id, Qt::GlobalColor color, bool enable); virtual void ShowTool(quint32 id, Qt::GlobalColor color, bool enable);
virtual void SetFactor(qreal factor); virtual void SetFactor(qreal factor);
virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event); virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event);
void Disable(bool disable);
protected: protected:
/** @brief radius radius circle. */ /** @brief radius radius circle. */
qreal radius; qreal radius;

View File

@ -202,6 +202,7 @@ VToolPointOfContact* VToolPointOfContact::Create(const quint32 _id, QString &rad
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPointOfContact::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPointOfContact::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfContact::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfContact::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(center); doc->IncrementReferens(center);
doc->IncrementReferens(firstPointId); doc->IncrementReferens(firstPointId);

View File

@ -139,6 +139,7 @@ void VToolPointOfIntersection::Create(const quint32 _id, const QString &pointNam
scene->addItem(point); scene->addItem(point);
connect(point, &VToolPointOfIntersection::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPointOfIntersection::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfIntersection::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfIntersection::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(firstPointId); doc->IncrementReferens(firstPointId);
doc->IncrementReferens(secondPointId); doc->IncrementReferens(secondPointId);

View File

@ -206,6 +206,7 @@ VToolShoulderPoint* VToolShoulderPoint::Create(const quint32 _id, QString &formu
scene->addItem(point); scene->addItem(point);
connect(point, &VToolShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolShoulderPoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolShoulderPoint::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(p1Line); doc->IncrementReferens(p1Line);
doc->IncrementReferens(p2Line); doc->IncrementReferens(p2Line);

View File

@ -239,6 +239,8 @@ void VToolSinglePoint::setColorLabel(const Qt::GlobalColor &color)
*/ */
void VToolSinglePoint::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) void VToolSinglePoint::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event )
{ {
quint32 ref = _referens; // store referens
_referens = 1; // make available delete pattern piece
if (doc->CountPP() > 1) if (doc->CountPP() > 1)
{ {
ContextMenu<DialogSinglePoint>(this, event); ContextMenu<DialogSinglePoint>(this, event);
@ -247,6 +249,7 @@ void VToolSinglePoint::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event
{ {
ContextMenu<DialogSinglePoint>(this, event, false); ContextMenu<DialogSinglePoint>(this, event, false);
} }
_referens = ref; // restore referens. If not restore garbage collector delete point!!!
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -171,6 +171,7 @@ void VToolSpline::Create(const quint32 _id, const quint32 &p1, const quint32 &p4
scene->addItem(spl); scene->addItem(spl);
connect(spl, &VToolSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(spl, &VToolSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSpline::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSpline::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, spl, &VToolSpline::Disable);
doc->AddTool(id, spl); doc->AddTool(id, spl);
doc->IncrementReferens(p1); doc->IncrementReferens(p1);
doc->IncrementReferens(p4); doc->IncrementReferens(p4);
@ -204,6 +205,12 @@ void VToolSpline::ControlPointChangePosition(const qint32 &indexSpline, const Sp
qApp->getUndoStack()->push(moveSpl); qApp->getUndoStack()->push(moveSpl);
} }
//---------------------------------------------------------------------------------------------------------------------
void VToolSpline::Disable(bool disable)
{
DisableItem(this, disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief contextMenuEvent handle context menu events. * @brief contextMenuEvent handle context menu events.

View File

@ -51,6 +51,7 @@ public:
public slots: public slots:
void ControlPointChangePosition (const qint32 &indexSpline, const SplinePointPosition &position, void ControlPointChangePosition (const qint32 &indexSpline, const SplinePointPosition &position,
const QPointF &pos); const QPointF &pos);
void Disable(bool disable);
protected: protected:
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
virtual void AddToFile (); virtual void AddToFile ();

View File

@ -153,6 +153,7 @@ void VToolSplinePath::Create(const quint32 _id, VSplinePath *path, VMainGraphics
scene->addItem(spl); scene->addItem(spl);
connect(spl, &VToolSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(spl, &VToolSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSplinePath::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSplinePath::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, spl, &VToolSplinePath::Disable);
doc->AddTool(id, spl); doc->AddTool(id, spl);
} }
} }
@ -186,6 +187,12 @@ void VToolSplinePath::ControlPointChangePosition(const qint32 &indexSpline, cons
qApp->getUndoStack()->push(moveSplPath); qApp->getUndoStack()->push(moveSplPath);
} }
//---------------------------------------------------------------------------------------------------------------------
void VToolSplinePath::Disable(bool disable)
{
DisableItem(this, disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief UpdateControlPoints update position points control points in file. * @brief UpdateControlPoints update position points control points in file.

View File

@ -65,6 +65,7 @@ public slots:
void ControlPointChangePosition(const qint32 &indexSpline, const SplinePointPosition &position, void ControlPointChangePosition(const qint32 &indexSpline, const SplinePointPosition &position,
const QPointF &pos); const QPointF &pos);
void Disable(bool disable);
protected: protected:
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
virtual void AddToFile(); virtual void AddToFile();

View File

@ -151,6 +151,7 @@ void VToolTriangle::Create(const quint32 _id, const QString &pointName, const qu
scene->addItem(point); scene->addItem(point);
connect(point, &VToolTriangle::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolTriangle::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolTriangle::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolTriangle::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable);
doc->AddTool(id, point); doc->AddTool(id, point);
doc->IncrementReferens(axisP1Id); doc->IncrementReferens(axisP1Id);
doc->IncrementReferens(axisP2Id); doc->IncrementReferens(axisP2Id);

View File

@ -50,7 +50,6 @@ DeletePatternPiece::~DeletePatternPiece()
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void DeletePatternPiece::undo() void DeletePatternPiece::undo()
{ {
QDomElement rootElement = doc->documentElement(); QDomElement rootElement = doc->documentElement();
rootElement.insertAfter(patternPiece, previousNode); rootElement.insertAfter(patternPiece, previousNode);

View File

@ -0,0 +1,34 @@
/************************************************************************
**
** @file undoevent.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 23 6, 2014
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2014 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "undoevent.h"
//---------------------------------------------------------------------------------------------------------------------
UndoEvent::UndoEvent()
:QEvent(UNDO_EVENT)
{}

View File

@ -0,0 +1,43 @@
/************************************************************************
**
** @file undoevent.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 23 6, 2014
**
** @brief
** @copyright
** This source code is part of the Valentine project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2014 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef UNDOEVENT_H
#define UNDOEVENT_H
#include <QEvent>
// Define undo event identifier
const QEvent::Type UNDO_EVENT = static_cast<QEvent::Type>(QEvent::User + 1);
class UndoEvent : public QEvent
{
public:
UndoEvent();
};
#endif // UNDOEVENT_H

View File

@ -28,6 +28,8 @@
#include "vmaingraphicsscene.h" #include "vmaingraphicsscene.h"
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QList>
#include <QGraphicsItem>
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
@ -89,6 +91,12 @@ void VMainGraphicsScene::setTransform(const QTransform &transform)
_transform = transform; _transform = transform;
} }
//---------------------------------------------------------------------------------------------------------------------
void VMainGraphicsScene::SetDisable(bool disable)
{
emit DisableItem(disable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief ChoosedItem emit ChoosedObject signal. * @brief ChoosedItem emit ChoosedObject signal.

View File

@ -47,6 +47,7 @@ public:
void setVerScrollBar(const qint32 &value); void setVerScrollBar(const qint32 &value);
QTransform transform() const; QTransform transform() const;
void setTransform(const QTransform &transform); void setTransform(const QTransform &transform);
void SetDisable(bool enabled);
public slots: public slots:
void ChoosedItem(quint32 id, const SceneObject &type); void ChoosedItem(quint32 id, const SceneObject &type);
void SetFactor(qreal factor); void SetFactor(qreal factor);
@ -75,6 +76,7 @@ signals:
* @param factor scene scale factor. * @param factor scene scale factor.
*/ */
void NewFactor(qreal factor); void NewFactor(qreal factor);
void DisableItem(bool disable);
private: private:
/** @brief horScrollBar value horizontal scroll bar. */ /** @brief horScrollBar value horizontal scroll bar. */
qint32 horScrollBar; qint32 horScrollBar;

View File

@ -11,7 +11,8 @@ HEADERS += \
widgets/vsimplesplinepath.h \ widgets/vsimplesplinepath.h \
widgets/vsimplearc.h \ widgets/vsimplearc.h \
widgets/textdelegate.h \ widgets/textdelegate.h \
widgets/vtranslation.h widgets/vtranslation.h \
widgets/undoevent.h
SOURCES += \ SOURCES += \
widgets/vtablegraphicsview.cpp \ widgets/vtablegraphicsview.cpp \
@ -26,4 +27,5 @@ SOURCES += \
widgets/vsimplesplinepath.cpp \ widgets/vsimplesplinepath.cpp \
widgets/vsimplearc.cpp \ widgets/vsimplearc.cpp \
widgets/textdelegate.cpp \ widgets/textdelegate.cpp \
widgets/vtranslation.cpp widgets/vtranslation.cpp \
widgets/undoevent.cpp

View File

@ -36,6 +36,8 @@
#include "../exception/vexceptionwrongid.h" #include "../exception/vexceptionwrongid.h"
#include "../exception/vexceptionconversionerror.h" #include "../exception/vexceptionconversionerror.h"
#include "../exception/vexceptionemptyparameter.h" #include "../exception/vexceptionemptyparameter.h"
#include "../exception/vexceptionundo.h"
#include "../widgets/undoevent.h"
#include "vstandardmeasurements.h" #include "vstandardmeasurements.h"
#include "vindividualmeasurements.h" #include "vindividualmeasurements.h"
#include "../../libs/qmuparser/qmuparsererror.h" #include "../../libs/qmuparser/qmuparsererror.h"
@ -650,36 +652,45 @@ void VPattern::LiteParseTree()
{ {
try try
{ {
emit SetEnabledGUI(true);
Parse(Document::LiteParse); Parse(Document::LiteParse);
} }
catch (const VExceptionUndo &e)
{
Q_UNUSED(e);
/* If user want undo last operation before undo we need finish broken redo operation. For those we post event
* myself. Later in method customEvent call undo.*/
QApplication::postEvent(this, new UndoEvent());
return;
}
catch (const VExceptionObjectError &e) catch (const VExceptionObjectError &e)
{ {
e.CriticalMessageBox(tr("Error parsing file.")); e.CriticalMessageBox(tr("Error parsing file."));
emit ClearMainWindow(); emit SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionConversionError &e) catch (const VExceptionConversionError &e)
{ {
e.CriticalMessageBox(tr("Error can't convert value.")); e.CriticalMessageBox(tr("Error can't convert value."));
emit ClearMainWindow(); emit SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionEmptyParameter &e) catch (const VExceptionEmptyParameter &e)
{ {
e.CriticalMessageBox(tr("Error empty parameter.")); e.CriticalMessageBox(tr("Error empty parameter."));
emit ClearMainWindow(); emit SetEnabledGUI(false);
return; return;
} }
catch (const VExceptionWrongId &e) catch (const VExceptionWrongId &e)
{ {
e.CriticalMessageBox(tr("Error wrong id.")); e.CriticalMessageBox(tr("Error wrong id."));
emit ClearMainWindow(); emit SetEnabledGUI(false);
return; return;
} }
catch (VException &e) catch (VException &e)
{ {
e.CriticalMessageBox(tr("Error parsing file.")); e.CriticalMessageBox(tr("Error parsing file."));
emit ClearMainWindow(); emit SetEnabledGUI(false);
return; return;
} }
catch (const std::bad_alloc &) catch (const std::bad_alloc &)
@ -687,12 +698,12 @@ void VPattern::LiteParseTree()
#ifndef QT_NO_CURSOR #ifndef QT_NO_CURSOR
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
#endif #endif
QMessageBox::critical(nullptr, tr("Critical error!"), tr("Error parsing file (std::bad_alloc)."), QMessageBox::Ok, QMessageBox::critical(nullptr, tr("Critical error!"), tr("Error parsing file (std::bad_alloc)."),
QMessageBox::Ok); QMessageBox::Ok, QMessageBox::Ok);
#ifndef QT_NO_CURSOR #ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
#endif #endif
emit ClearMainWindow(); emit SetEnabledGUI(false);
return; return;
} }
@ -733,6 +744,15 @@ void VPattern::ClearScene()
emit ClearMainWindow(); emit ClearMainWindow();
} }
//---------------------------------------------------------------------------------------------------------------------
void VPattern::customEvent(QEvent *event)
{
if(event->type() == UNDO_EVENT)
{
qApp->getUndoStack()->undo();
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief ParseDrawElement parse draw tag. * @brief ParseDrawElement parse draw tag.
@ -1008,6 +1028,7 @@ void VPattern::ParsePointElement(VMainGraphicsScene *scene, QDomElement &domElem
scene->addItem(spoint); scene->addItem(spoint);
connect(spoint, &VToolSinglePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(spoint, &VToolSinglePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem);
connect(scene, &VMainGraphicsScene::NewFactor, spoint, &VToolSinglePoint::SetFactor); connect(scene, &VMainGraphicsScene::NewFactor, spoint, &VToolSinglePoint::SetFactor);
connect(scene, &VMainGraphicsScene::DisableItem, spoint, &VToolPoint::Disable);
tools[id] = spoint; tools[id] = spoint;
} }
} }

View File

@ -145,12 +145,15 @@ signals:
void ChangedCursor(quint32 id); void ChangedCursor(quint32 id);
void ClearMainWindow(); void ClearMainWindow();
void UndoCommand(); void UndoCommand();
void SetEnabledGUI(bool enabled);
public slots: public slots:
void LiteParseTree(); void LiteParseTree();
void haveLiteChange(); void haveLiteChange();
void ShowHistoryTool(quint32 id, Qt::GlobalColor color, bool enable); void ShowHistoryTool(quint32 id, Qt::GlobalColor color, bool enable);
void NeedFullParsing(); void NeedFullParsing();
void ClearScene(); void ClearScene();
protected:
virtual void customEvent(QEvent * event);
private: private:
Q_DISABLE_COPY(VPattern) Q_DISABLE_COPY(VPattern)