diff --git a/dist/valentina.desktop b/dist/valentina.desktop
index 79f109d82..820161857 100644
--- a/dist/valentina.desktop
+++ b/dist/valentina.desktop
@@ -1,10 +1,13 @@
 [Desktop Entry]
 Type=Application
 Name=Valentina
+Exec=valentina %U
+Version=1.0
+Encoding=UTF-8
 GenericName=Pattern making program
 Comment=Open source project of creating a pattern making program, whose allow create and modeling patterns of clothing
 Icon=valentina
-Exec=valentina
+Terminal=false
+MimeType=text/val;
 Categories=Graphics;VectorGraphics;2DGraphics;
-Version=1.0
 Name[uk]=valentina
diff --git a/src/app/container/calculator.cpp b/src/app/container/calculator.cpp
index 5dd5666b3..238616e74 100644
--- a/src/app/container/calculator.cpp
+++ b/src/app/container/calculator.cpp
@@ -49,6 +49,9 @@ Calculator::Calculator(const VContainer *data)
     DefinePostfixOprt(cm_Oprt, CmUnit);
     DefinePostfixOprt(mm_Oprt, MmUnit);
     DefinePostfixOprt(in_Oprt, InchUnit);
+
+    SetArgSep(',');
+    SetDecSep('.');
 }
 
 //---------------------------------------------------------------------------------------------------------------------
@@ -65,7 +68,7 @@ Calculator::Calculator(const QString &formula, bool fromUser)
         DefinePostfixOprt(qApp->PostfixOperator(mm_Oprt), MmUnit);
         DefinePostfixOprt(qApp->PostfixOperator(in_Oprt), InchUnit);
 
-        QLocale loc = QLocale();
+        QLocale loc = QLocale::system();
         SetDecSep(loc.decimalPoint().toLatin1());
         SetThousandsSep(loc.groupSeparator().toLatin1());
         SetArgSep(';');
@@ -75,6 +78,9 @@ Calculator::Calculator(const QString &formula, bool fromUser)
         DefinePostfixOprt(cm_Oprt, CmUnit);
         DefinePostfixOprt(mm_Oprt, MmUnit);
         DefinePostfixOprt(in_Oprt, InchUnit);
+
+        SetArgSep(',');
+        SetDecSep('.');
     }
 
     SetExpr(formula);
diff --git a/src/app/dialogs/tools/dialogendline.cpp b/src/app/dialogs/tools/dialogendline.cpp
index 17b95e046..37b61b49e 100644
--- a/src/app/dialogs/tools/dialogendline.cpp
+++ b/src/app/dialogs/tools/dialogendline.cpp
@@ -122,7 +122,7 @@ void DialogEndLine::setFormula(const QString &value)
     {
         this->DeployFormulaTextEdit();
     }
-    ui->plainTextEditFormula->setPlainText(value);
+    ui->plainTextEditFormula->setPlainText(formula);
     //QTextCursor cursor = ui->plainTextEditFormula->textCursor();
     //cursor.insertText(value);
     //ui->plainTextEditFormula->setCursor(cursor);
diff --git a/src/app/dialogs/tools/dialogtool.cpp b/src/app/dialogs/tools/dialogtool.cpp
index fa247de2c..29ef6ff1d 100644
--- a/src/app/dialogs/tools/dialogtool.cpp
+++ b/src/app/dialogs/tools/dialogtool.cpp
@@ -377,7 +377,8 @@ void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label)
             Calculator cal(data);
             const qreal result = cal.EvalFormula(formula);
 
-            label->setText(QString().setNum(result));
+            QLocale loc = QLocale::system();
+            label->setText(loc.toString(result));
             flag = true;
             palette.setColor(labelEditFormula->foregroundRole(), QColor(76, 76, 76));
             emit ToolTip("");
@@ -424,7 +425,8 @@ void DialogTool::Eval(QPlainTextEdit *edit, bool &flag, QTimer *timer, QLabel *l
             Calculator cal(data);
             const qreal result = cal.EvalFormula(formula);
 
-            label->setText(QString().setNum(result));
+            QLocale loc = QLocale::system();
+            label->setText(loc.toString(result));
             flag = true;
             palette.setColor(labelEditFormula->foregroundRole(), QColor(76, 76, 76));
             emit ToolTip("");
diff --git a/src/app/mainwindow.cpp b/src/app/mainwindow.cpp
index 7f6511ee9..5dbde55ba 100644
--- a/src/app/mainwindow.cpp
+++ b/src/app/mainwindow.cpp
@@ -47,6 +47,10 @@
 #include <QSourceLocation>
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief MainWindow constructor.
+ * @param parent parent widget.
+ */
 MainWindow::MainWindow(QWidget *parent)
     :QMainWindow(parent), ui(new Ui::MainWindow), pattern(nullptr), doc(nullptr), tool(Valentina::ArrowTool),
       currentScene(nullptr), sceneDraw(nullptr), sceneDetails(nullptr), mouseCoordinate(nullptr), helpLabel(nullptr),
@@ -67,6 +71,8 @@ MainWindow::MainWindow(QWidget *parent)
     connect(sceneDetails, &VMainGraphicsScene::mouseMove, this, &MainWindow::mouseMove);
     view = new VMainGraphicsView();
     ui->LayoutView->addWidget(view);
+    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
     view->setScene(currentScene);
 
     sceneDraw->setTransform(view->transform());
@@ -94,6 +100,9 @@ MainWindow::MainWindow(QWidget *parent)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionNewDraw add to scene new pattern peace.
+ */
 void MainWindow::ActionNewDraw()
 {
     QString patternPieceName = QString(tr("Pattern piece %1")).arg(comboBoxDraws->count()+1);
@@ -183,6 +192,9 @@ void MainWindow::ActionNewDraw()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief OptionDraw help change name of pattern peace.
+ */
 void MainWindow::OptionDraw()
 {
     const QString activDraw = doc->GetNameActivDraw();
@@ -202,6 +214,14 @@ void MainWindow::OptionDraw()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief SetToolButton set tool and show dialog.
+ * @param checked true if tool button checked.
+ * @param t tool type.
+ * @param cursor path tool cursor icon.
+ * @param toolTip first tooltipe.
+ * @param closeDialogSlot function what handle after close dialog.
+ */
 // TODO Issue 79 : remove function
 template <typename Dialog, typename Func>
 void MainWindow::SetToolButton(bool checked, Valentina::Tools t, const QString &cursor, const QString &toolTip,
@@ -234,6 +254,15 @@ void MainWindow::SetToolButton(bool checked, Valentina::Tools t, const QString &
 //---------------------------------------------------------------------------------------------------------------------
 // TODO Issue 79 : rename to SetToolButton
 template <typename Dialog, typename Func, typename Func2>
+/**
+ * @brief SetToolButton set tool and show dialog.
+ * @param checked true if tool button checked.
+ * @param t tool type.
+ * @param cursor path tool cursor icon.
+ * @param toolTip first tooltipe.
+ * @param closeDialogSlot function to handle close of dialog.
+ * @param applyDialogSlot function to handle apply in dialog.
+ */
 void MainWindow::SetToolButton2(bool checked, Valentina::Tools t, const QString &cursor, const QString &toolTip,
                                Func closeDialogSlot, Func2 applyDialogSlot)
 {
@@ -262,6 +291,10 @@ void MainWindow::SetToolButton2(bool checked, Valentina::Tools t, const QString
     }
 }
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialog handle close dialog
+ * @param result result working dialog.
+ */
 template <typename DrawTool>
 void MainWindow::ClosedDialog(int result)
 {// TODO ISSUE 79 : delete
@@ -274,9 +307,14 @@ void MainWindow::ClosedDialog(int result)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialog handle close dialog
+ * @param result result working dialog.
+ */
+// TODO ISSUE 79 : rename
 template <typename DrawTool>
 void MainWindow::ClosedDialog2(int result)
-{ // TODO ISSUE 79 : rename
+{
     Q_CHECK_PTR(dialogTool);
     if (result == QDialog::Accepted)
     {
@@ -301,6 +339,9 @@ void MainWindow::ClosedDialog2(int result)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ApplyDialog handle apply in dialog
+ */
 template <typename DrawTool>
 void MainWindow::ApplyDialog()
 {// TODO ISSUE 79 : copy
@@ -320,6 +361,10 @@ void MainWindow::ApplyDialog()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolEndLine handler tool endLine.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolEndLine(bool checked)
 {// TODO ISSUE 79 : copy
 //    SetToolButton<DialogEndLine>(checked, Valentina::EndLineTool, ":/cursor/endline_cursor.png", tr("Select point"),
@@ -329,18 +374,29 @@ void MainWindow::ToolEndLine(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/** // TODO ISSUE 79 : copy
+ * @brief ApplyDialogEndLine actions after apply in DialogEndLine.
+ */
 void MainWindow::ApplyDialogEndLine()
 {   // TODO ISSUE 79 : copy
     ApplyDialog<VToolEndLine>();
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogEndLine actions after closing DialogEndLine.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogEndLine(int result)
 {
     ClosedDialog2<VToolEndLine>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolLine handler tool line.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolLine(bool checked)
 {
     SetToolButton<DialogLine>(checked, Valentina::LineTool, ":/cursor/line_cursor.png", tr("Select first point"),
@@ -348,12 +404,20 @@ void MainWindow::ToolLine(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogLine actions after closing DialogLine.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogLine(int result)
 {
     ClosedDialog<VToolLine>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolAlongLine handler tool alongLine.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolAlongLine(bool checked)
 {
     SetToolButton<DialogAlongLine>(checked, Valentina::AlongLineTool, ":/cursor/alongline_cursor.png",
@@ -361,12 +425,20 @@ void MainWindow::ToolAlongLine(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogAlongLine actions after closing DialogAlongLine.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogAlongLine(int result)
 {
     ClosedDialog<VToolAlongLine>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolShoulderPoint handler tool shoulderPoint.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolShoulderPoint(bool checked)
 {
     SetToolButton<DialogShoulderPoint>(checked, Valentina::ShoulderPointTool, ":/cursor/shoulder_cursor.png",
@@ -374,12 +446,20 @@ void MainWindow::ToolShoulderPoint(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogShoulderPoint actions after closing DialogShoulderPoint.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogShoulderPoint(int result)
 {
     ClosedDialog<VToolShoulderPoint>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolNormal handler tool normal.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolNormal(bool checked)
 {
     SetToolButton<DialogNormal>(checked, Valentina::NormalTool, ":/cursor/normal_cursor.png",
@@ -387,12 +467,20 @@ void MainWindow::ToolNormal(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogNormal actions after closing DialogNormal.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogNormal(int result)
 {
     ClosedDialog<VToolNormal>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolBisector handler tool bisector.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolBisector(bool checked)
 {
     SetToolButton<DialogBisector>(checked, Valentina::BisectorTool, ":/cursor/bisector_cursor.png",
@@ -400,12 +488,20 @@ void MainWindow::ToolBisector(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogBisector actions after closing DialogBisector.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogBisector(int result)
 {
     ClosedDialog<VToolBisector>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolLineIntersect handler tool lineIntersect.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolLineIntersect(bool checked)
 {
     SetToolButton<DialogLineIntersect>(checked, Valentina::LineIntersectTool, ":/cursor/intersect_cursor.png",
@@ -413,12 +509,20 @@ void MainWindow::ToolLineIntersect(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogLineIntersect actions after closing DialogLineIntersect.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogLineIntersect(int result)
 {
     ClosedDialog<VToolLineIntersect>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolSpline handler tool spline.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolSpline(bool checked)
 {
     SetToolButton<DialogSpline>(checked, Valentina::SplineTool, ":/cursor/spline_cursor.png",
@@ -426,12 +530,20 @@ void MainWindow::ToolSpline(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogSpline actions after closing DialogSpline.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogSpline(int result)
 {
     ClosedDialog<VToolSpline>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolCutSpline handler tool CutSpline.
+ * @param checked true - button is checked
+ */
 void MainWindow::ToolCutSpline(bool checked)
 {
     SetToolButton<DialogCutSpline>(checked, Valentina::CutSplineTool, ":/cursor/spline_cut_point_cursor.png",
@@ -439,12 +551,20 @@ void MainWindow::ToolCutSpline(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogCutSpline actions after closing DialogCutSpline.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogCutSpline(int result)
 {
     ClosedDialog<VToolCutSpline>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolArc handler tool arc.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolArc(bool checked)
 {
     SetToolButton<DialogArc>(checked, Valentina::ArcTool, ":/cursor/arc_cursor.png",
@@ -452,12 +572,20 @@ void MainWindow::ToolArc(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogArc actions after closing DialogArc.
+ * @param result result of dialog working..
+ */
 void MainWindow::ClosedDialogArc(int result)
 {
     ClosedDialog<VToolArc>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolSplinePath handler tool splinePath.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolSplinePath(bool checked)
 {
     SetToolButton<DialogSplinePath>(checked, Valentina::SplinePathTool, ":/cursor/splinepath_cursor.png",
@@ -465,12 +593,20 @@ void MainWindow::ToolSplinePath(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogSplinePath actions after closing DialogSplinePath.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogSplinePath(int result)
 {
     ClosedDialog<VToolSplinePath>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolCutSplinePath handler tool CutSplinePath.
+ * @param checked true - button is checked
+ */
 void MainWindow::ToolCutSplinePath(bool checked)
 {
     SetToolButton<DialogCutSplinePath>(checked, Valentina::CutSplinePathTool,
@@ -479,12 +615,20 @@ void MainWindow::ToolCutSplinePath(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogCutSplinePath actions after closing DialogCutSplinePath.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogCutSplinePath(int result)
 {
     ClosedDialog<VToolCutSplinePath>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolPointOfContact handler tool pointOfContact.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolPointOfContact(bool checked)
 {
     SetToolButton<DialogPointOfContact>(checked, Valentina::PointOfContact, ":/cursor/pointcontact_cursor.png",
@@ -492,12 +636,20 @@ void MainWindow::ToolPointOfContact(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogPointOfContact actions after closing DialogPointOfContact.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogPointOfContact(int result)
 {
     ClosedDialog<VToolPointOfContact>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolDetail handler tool detail.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolDetail(bool checked)
 {
     SetToolButton<DialogDetail>(checked, Valentina::DetailTool, "://cursor/new_detail_cursor.png",
@@ -505,6 +657,10 @@ void MainWindow::ToolDetail(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogDetail actions after closing DialogDetail.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogDetail(int result)
 {
     if (result == QDialog::Accepted)
@@ -516,6 +672,10 @@ void MainWindow::ClosedDialogDetail(int result)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolHeight handler tool height.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolHeight(bool checked)
 {
     SetToolButton<DialogHeight>(checked, Valentina::Height, ":/cursor/height_cursor.png", tr("Select base point"),
@@ -523,12 +683,20 @@ void MainWindow::ToolHeight(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogHeight actions after closing DialogHeight.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogHeight(int result)
 {
     ClosedDialog<VToolHeight>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolTriangle handler tool triangle.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolTriangle(bool checked)
 {
     SetToolButton<DialogTriangle>(checked, Valentina::Triangle, ":/cursor/triangle_cursor.png",
@@ -536,12 +704,20 @@ void MainWindow::ToolTriangle(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogTriangle actions after closing DialogTriangle.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogTriangle(int result)
 {
     ClosedDialog<VToolTriangle>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolPointOfIntersection handler tool pointOfIntersection.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolPointOfIntersection(bool checked)
 {
     SetToolButton<DialogPointOfIntersection>(checked, Valentina::PointOfIntersection,
@@ -550,12 +726,20 @@ void MainWindow::ToolPointOfIntersection(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogPointOfIntersection actions after closing DialogPointOfIntersection.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogPointOfIntersection(int result)
 {
     ClosedDialog<VToolPointOfIntersection>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolUnionDetails handler tool unionDetails.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolUnionDetails(bool checked)
 {
     SetToolButton<DialogUnionDetails>(checked, Valentina::UnionDetails, ":/cursor/union_cursor.png",
@@ -565,6 +749,10 @@ void MainWindow::ToolUnionDetails(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogUnionDetails actions after closing DialogUnionDetails.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogUnionDetails(int result)
 {
     ClosedDialog<VToolUnionDetails>(result);
@@ -572,6 +760,10 @@ void MainWindow::ClosedDialogUnionDetails(int result)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolCutArc handler tool cutArc.
+ * @param checked true - button checked.
+ */
 void MainWindow::ToolCutArc(bool checked)
 {
     SetToolButton<DialogCutArc>(checked, Valentina::CutArcTool, ":/cursor/arc_cut_cursor.png", tr("Select arc"),
@@ -579,12 +771,19 @@ void MainWindow::ToolCutArc(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedDialogCutArc actions after closing DialogCutArc.
+ * @param result result of dialog working.
+ */
 void MainWindow::ClosedDialogCutArc(int result)
 {
     ClosedDialog<VToolCutArc>(result);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief About show widows about.
+ */
 void MainWindow::About()
 {
     DialogAboutApp * about_dialog = new DialogAboutApp(this);
@@ -593,18 +792,28 @@ void MainWindow::About()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief AboutQt show widows aboutQt.
+ */
 void MainWindow::AboutQt()
 {
     QMessageBox::aboutQt(this, tr("About Qt"));
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ShowTool  highlight tool.Tip show tools tooltip.
+ * @param toolTip tooltip text.
+ */
 void MainWindow::ShowToolTip(const QString &toolTip)
 {
     helpLabel->setText(toolTip);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief tableClosed handle after close layout window.
+ */
 void MainWindow::tableClosed()
 {
     show();
@@ -629,6 +838,10 @@ void MainWindow::PatternProperties()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief showEvent handle after show window.
+ * @param event show event.
+ */
 void MainWindow::showEvent( QShowEvent *event )
 {
     QMainWindow::showEvent( event );
@@ -649,6 +862,10 @@ void MainWindow::showEvent( QShowEvent *event )
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief closeEvent handle after close window.
+ * @param event close event.
+ */
 void MainWindow::closeEvent(QCloseEvent *event)
 {
     if (MaybeSave())
@@ -663,6 +880,9 @@ void MainWindow::closeEvent(QCloseEvent *event)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolBarOption enable option toolbar.
+ */
 void MainWindow::ToolBarOption()
 {
     if (qApp->patternType() == Pattern::Standard)
@@ -699,6 +919,9 @@ void MainWindow::ToolBarOption()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ToolBarDraws enable draw toolbar.
+ */
 void MainWindow::ToolBarDraws()
 {
     QLabel *labelPtternPieceName = new QLabel(tr("Pattern Piece: "));
@@ -750,6 +973,10 @@ void MainWindow::InitToolButtons()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief currentDrawChanged change active pattern peace.
+ * @param index index in combobox.
+ */
 void MainWindow::currentDrawChanged( int index )
 {
     if (index != -1)
@@ -770,6 +997,10 @@ void MainWindow::currentDrawChanged( int index )
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief mouseMove save mouse position and show user.
+ * @param scenePos position mouse.
+ */
 void MainWindow::mouseMove(const QPointF &scenePos)
 {
     QString string = QString("%1, %2").arg(static_cast<qint32>(qApp->fromPixel(scenePos.x())))
@@ -781,6 +1012,9 @@ void MainWindow::mouseMove(const QPointF &scenePos)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief CanselTool cansel tool.
+ */
 void MainWindow::CancelTool()
 {
     delete dialogTool;
@@ -895,6 +1129,9 @@ void MainWindow::CancelTool()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ArrowTool enable arrow tool.
+ */
 void  MainWindow::ArrowTool()
 {
     CancelTool();
@@ -906,12 +1143,19 @@ void  MainWindow::ArrowTool()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionAroowTool set arrow tool. Cansel tool what was before.
+ */
 void MainWindow::ActionAroowTool()
 {
     ArrowTool();
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief keyPressEvent handle key press events.
+ * @param event key event.
+ */
 void MainWindow::keyPressEvent ( QKeyEvent * event )
 {
     switch (event->key())
@@ -926,6 +1170,9 @@ void MainWindow::keyPressEvent ( QKeyEvent * event )
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief SaveCurrentScene save scene options before set another.
+ */
 void MainWindow::SaveCurrentScene()
 {
     /*Save transform*/
@@ -938,6 +1185,9 @@ void MainWindow::SaveCurrentScene()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief RestoreCurrentScene restore scene options after change.
+ */
 void MainWindow::RestoreCurrentScene()
 {
     /*Set transform for current scene*/
@@ -950,6 +1200,10 @@ void MainWindow::RestoreCurrentScene()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionDraw show draw scene.
+ * @param checked true - button checked.
+ */
 void MainWindow::ActionDraw(bool checked)
 {
     if (checked)
@@ -983,6 +1237,10 @@ void MainWindow::ActionDraw(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionDetails show details scene.
+ * @param checked true - button checked.
+ */
 void MainWindow::ActionDetails(bool checked)
 {
     if (checked)
@@ -1018,6 +1276,10 @@ void MainWindow::ActionDetails(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief SaveAs save as pattern file.
+ * @return true for successes saving.
+ */
 bool MainWindow::SaveAs()
 {
     QString filters(tr("Pattern files (*.val)"));
@@ -1045,6 +1307,10 @@ bool MainWindow::SaveAs()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief Save save pattern file.
+ * @return true for successes saving.
+ */
 bool MainWindow::Save()
 {
     if (curFile.isEmpty())
@@ -1065,19 +1331,27 @@ bool MainWindow::Save()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief Open ask user select pattern file.
+ */
 void MainWindow::Open()
 {
     if (MaybeSave())
     {
         QString filter(tr("Pattern files (*.val)"));
+        //Get list last open files
+        QSettings settings(QSettings::IniFormat, QSettings::UserScope, QApplication::organizationName(),
+                           QApplication::applicationName());
+        QStringList files = settings.value("recentFileList").toStringList();
         QString dir;
-        if (curFile.isEmpty())
+        if (files.isEmpty())
         {
             dir = QDir::homePath();
         }
         else
         {
-            dir = QFileInfo(curFile).absolutePath();
+            //Absolute path to last open file
+            dir = QFileInfo(files.first()).absolutePath();
         }
         QString fileName = QFileDialog::getOpenFileName(this, tr("Open file"), dir, filter);
         if (fileName.isEmpty() == false)
@@ -1091,6 +1365,9 @@ void MainWindow::Open()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief Options config dialog.
+ */
 void MainWindow::Options()
 {
     ConfigDialog dlg(this);
@@ -1101,6 +1378,9 @@ void MainWindow::Options()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief Clear reset to default window.
+ */
 void MainWindow::Clear()
 {
     setCurrentFile("");
@@ -1123,6 +1403,9 @@ void MainWindow::Clear()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief NewPattern create new empty pattern.
+ */
 void MainWindow::NewPattern()
 {
     QProcess *v = new QProcess(this);
@@ -1131,6 +1414,9 @@ void MainWindow::NewPattern()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief haveChange enable action save if we have unsaved change.
+ */
 void MainWindow::PatternWasModified()
 {
     setWindowModified(doc->isPatternModified());
@@ -1138,6 +1424,10 @@ void MainWindow::PatternWasModified()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ChangedSize change new size value.
+ * @param text value size.
+ */
 void MainWindow::ChangedSize(const QString & text)
 {
     qint32 size = text.toInt();
@@ -1146,6 +1436,10 @@ void MainWindow::ChangedSize(const QString & text)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ChangedGrowth change new height value.
+ * @param text value height.
+ */
 void MainWindow::ChangedHeight(const QString &text)
 {
     qint32 growth = text.toInt();
@@ -1154,6 +1448,10 @@ void MainWindow::ChangedHeight(const QString &text)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief SetEnableWidgets enable action button.
+ * @param enable enable value.
+ */
 void MainWindow::SetEnableWidgets(bool enable)
 {
     ui->actionSaveAs->setEnabled(enable);
@@ -1169,6 +1467,10 @@ void MainWindow::SetEnableWidgets(bool enable)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionTable show table with variables.
+ * @param checked true - button checked.
+ */
 void MainWindow::ActionTable(bool checked)
 {
     if (checked)
@@ -1185,6 +1487,9 @@ void MainWindow::ActionTable(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedActionTable actions after closing table with variables.
+ */
 void MainWindow::ClosedActionTable()
 {
     ui->actionTable->setChecked(false);
@@ -1193,6 +1498,10 @@ void MainWindow::ClosedActionTable()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionHistory show tool history.
+ * @param checked true - button checked.
+ */
 void MainWindow::ActionHistory(bool checked)
 {
     if (checked)
@@ -1210,6 +1519,10 @@ void MainWindow::ActionHistory(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ActionLayout begin creation layout.
+ * @param checked true - button checked.
+ */
 void MainWindow::ActionLayout(bool checked)
 {
     Q_UNUSED(checked);
@@ -1228,6 +1541,9 @@ void MainWindow::ActionLayout(bool checked)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ClosedActionHistory actions after closing history window with variables.
+ */
 void MainWindow::ClosedActionHistory()
 {
     ui->actionHistory->setChecked(false);
@@ -1235,6 +1551,10 @@ void MainWindow::ClosedActionHistory()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief SetEnableTool enable button.
+ * @param enable enable value.
+ */
 void MainWindow::SetEnableTool(bool enable)
 {
     bool drawTools = false;
@@ -1272,6 +1592,9 @@ void MainWindow::SetEnableTool(bool enable)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief MinimumScrollBar set scroll bar to minimum.
+ */
 void MainWindow::MinimumScrollBar()
 {
     QScrollBar *horScrollBar = view->horizontalScrollBar();
@@ -1281,6 +1604,11 @@ void MainWindow::MinimumScrollBar()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief SavePattern save pattern file.
+ * @param fileName pattern file name.
+ * @return true if all is good.
+ */
 bool MainWindow::SavePattern(const QString &fileName)
 {
     QFileInfo tempInfo(fileName);
@@ -1297,6 +1625,9 @@ bool MainWindow::SavePattern(const QString &fileName)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief AutoSavePattern start safe saving.
+ */
 void MainWindow::AutoSavePattern()
 {
     if (curFile.isEmpty() == false && doc->isPatternModified() == true)
@@ -1310,6 +1641,11 @@ void MainWindow::AutoSavePattern()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief setCurrentFile the function is called to reset the state of a few variables when a file
+ * is loaded or saved, or when the user starts editing a new file (in which case fileName is empty).
+ * @param fileName file name.
+ */
 void MainWindow::setCurrentFile(const QString &fileName)
 {
     curFile = fileName;
@@ -1341,11 +1677,20 @@ void MainWindow::setCurrentFile(const QString &fileName)
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief strippedName the function call around curFile to exclude the path to the file.
+ * @param fullFileName full path to the file.
+ * @return file name.
+ */
 QString MainWindow::strippedName(const QString &fullFileName)
 {
     return QFileInfo(fullFileName).fileName();
 }
 
+//---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ReadSettings read setting for app.
+ */
 void MainWindow::ReadSettings()
 {
     QSettings settings(QSettings::IniFormat, QSettings::UserScope, QApplication::organizationName(),
@@ -1357,6 +1702,9 @@ void MainWindow::ReadSettings()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief WriteSettings save setting for app.
+ */
 void MainWindow::WriteSettings()
 {
     QSettings settings(QSettings::IniFormat, QSettings::UserScope, QApplication::organizationName(),
@@ -1366,6 +1714,10 @@ void MainWindow::WriteSettings()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief MaybeSave The function is called to save pending changes.
+ * @return returns true in all cases, except when the user clicks Cancel.
+ */
 bool MainWindow::MaybeSave()
 {
     if (doc->isPatternModified())
@@ -1522,6 +1874,10 @@ MainWindow::~MainWindow()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief LoadPattern open pattern file.
+ * @param fileName name of file.
+ */
 void MainWindow::LoadPattern(const QString &fileName)
 {
     try
diff --git a/src/app/mainwindow.h b/src/app/mainwindow.h
index e31923daf..23ff7549e 100644
--- a/src/app/mainwindow.h
+++ b/src/app/mainwindow.h
@@ -51,319 +51,72 @@ class MainWindow : public QMainWindow
 {
     Q_OBJECT
 public:
-              /**
-               * @brief MainWindow constructor.
-               * @param parent parent widget.
-               */
-              explicit MainWindow(QWidget *parent = nullptr);
-                       ~MainWindow();
-    /**
-     * @brief LoadPattern open pattern file.
-     * @param fileName name of file.
-     */
+    explicit MainWindow(QWidget *parent = nullptr);
+    ~MainWindow();
     void               LoadPattern(const QString &curFile);
 public slots:
-    /**
-     * @brief mouseMove save mouse position and show user.
-     * @param scenePos position mouse.
-     */
     void               mouseMove(const QPointF &scenePos);
-    /**
-     * @brief ActionAroowTool set arrow tool. Cansel tool what was before.
-     */
     void               ActionAroowTool();
-    /**
-     * @brief ActionDraw show draw scene.
-     * @param checked true - button checked.
-     */
     void               ActionDraw(bool checked);
-    /**
-     * @brief ActionDetails show details scene.
-     * @param checked true - button checked.
-     */
     void               ActionDetails(bool checked);
-    /**
-     * @brief ActionNewDraw add to scene new pattern peace.
-     */
     void               ActionNewDraw();
-    /**
-     * @brief SaveAs save as pattern file.
-     * @return true for successes saving.
-     */
     bool               SaveAs();
-    /**
-     * @brief Save save pattern file.
-     * @return true for successes saving.
-     */
     bool               Save();
-    /**
-     * @brief Open ask user select pattern file.
-     */
     void               Open();
-    /**
-     * @brief Options config dialog.
-     */
     void               Options();
-    /**
-     * @brief NewPattern create new empty pattern.
-     */
     void               NewPattern();
-    /**
-     * @brief ActionTable show table with variables.
-     * @param checked true - button checked.
-     */
     void               ActionTable(bool checked);
-    /**
-     * @brief ActionHistory show tool history.
-     * @param checked true - button checked.
-     */
     void               ActionHistory(bool checked);
-    /**
-     * @brief ActionLayout begin creation layout.
-     * @param checked true - button checked.
-     */
     void               ActionLayout(bool checked);
-    /**
-     * @brief currentDrawChanged change active pattern peace.
-     * @param index index in combobox.
-     */
     void               currentDrawChanged( int index );
-    /**
-     * @brief OptionDraw help change name of pattern peace.
-     */
     void               OptionDraw();
-    /**
-     * @brief haveChange enable action save if we have unsaved change.
-     */
     void               PatternWasModified();
-    /**
-     * @brief ChangedSize change new size value.
-     * @param text value size.
-     */
     void               ChangedSize(const QString &text);
-    /**
-     * @brief ChangedGrowth change new height value.
-     * @param text value height.
-     */
     void               ChangedHeight(const QString & text);
-    /**
-     * @brief ClosedActionTable actions after closing table with variables.
-     */
     void               ClosedActionTable();
-    /**
-     * @brief ClosedActionHistory actions after closing history window with variables.
-     */
     void               ClosedActionHistory();
-    /**
-     * @brief ToolEndLine handler tool endLine.
-     * @param checked true - button checked.
-     */
     void               ToolEndLine(bool checked);
-    /**
-     * @brief ToolLine handler tool line.
-     * @param checked true - button checked.
-     */
     void               ToolLine(bool checked);
-    /**
-     * @brief ToolAlongLine handler tool alongLine.
-     * @param checked true - button checked.
-     */
     void               ToolAlongLine(bool checked);
-    /**
-     * @brief ToolShoulderPoint handler tool shoulderPoint.
-     * @param checked true - button checked.
-     */
     void               ToolShoulderPoint(bool checked);
-    /**
-     * @brief ToolNormal handler tool normal.
-     * @param checked true - button checked.
-     */
     void               ToolNormal(bool checked);
-    /**
-     * @brief ToolBisector handler tool bisector.
-     * @param checked true - button checked.
-     */
     void               ToolBisector(bool checked);
-    /**
-     * @brief ToolLineIntersect handler tool lineIntersect.
-     * @param checked true - button checked.
-     */
     void               ToolLineIntersect(bool checked);
-    /**
-     * @brief ToolSpline handler tool spline.
-     * @param checked true - button checked.
-     */
     void               ToolSpline(bool checked);
-    /**
-     * @brief ToolCutSpline handler tool CutSpline.
-     * @param checked true - button is checked
-     */
     void               ToolCutSpline(bool checked);
-    /**
-     * @brief ToolArc handler tool arc.
-     * @param checked true - button checked.
-     */
     void               ToolArc(bool checked);
-    /**
-     * @brief ToolSplinePath handler tool splinePath.
-     * @param checked true - button checked.
-     */
     void               ToolSplinePath(bool checked);
-    /**
-     * @brief ToolCutSplinePath handler tool CutSplinePath.
-     * @param checked true - button is checked
-     */
     void               ToolCutSplinePath(bool checked);
-    /**
-     * @brief ToolPointOfContact handler tool pointOfContact.
-     * @param checked true - button checked.
-     */
     void               ToolPointOfContact(bool checked);
-    /**
-     * @brief ToolDetail handler tool detail.
-     * @param checked true - button checked.
-     */
     void               ToolDetail(bool checked);
-    /**
-     * @brief ToolHeight handler tool height.
-     * @param checked true - button checked.
-     */
     void               ToolHeight(bool checked);
-    /**
-     * @brief ToolTriangle handler tool triangle.
-     * @param checked true - button checked.
-     */
     void               ToolTriangle(bool checked);
-    /**
-     * @brief ToolPointOfIntersection handler tool pointOfIntersection.
-     * @param checked true - button checked.
-     */
     void               ToolPointOfIntersection(bool checked);
-    /**
-     * @brief ToolUnionDetails handler tool unionDetails.
-     * @param checked true - button checked.
-     */
     void               ToolUnionDetails(bool checked);
-    /**
-     * @brief ToolCutArc handler tool cutArc.
-     * @param checked true - button checked.
-     */
     void               ToolCutArc(bool checked);
-    /**
-     * @brief ClosedDialogEndLine actions after closing DialogEndLine.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogEndLine(int result);
-    /** // TODO ISSUE 79 : copy
-     * @brief ApplyDialogEndLine actions after apply in DialogEndLine.
-     */
     void               ApplyDialogEndLine();
-    /**
-     * @brief ClosedDialogLine actions after closing DialogLine.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogLine(int result);
-    /**
-     * @brief ClosedDialogAlongLine actions after closing DialogAlongLine.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogAlongLine(int result);
-    /**
-     * @brief ClosedDialogShoulderPoint actions after closing DialogShoulderPoint.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogShoulderPoint(int result);
-    /**
-     * @brief ClosedDialogNormal actions after closing DialogNormal.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogNormal(int result);
-    /**
-     * @brief ClosedDialogBisector actions after closing DialogBisector.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogBisector(int result);
-    /**
-     * @brief ClosedDialogLineIntersect actions after closing DialogLineIntersect.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogLineIntersect(int result);
-    /**
-     * @brief ClosedDialogSpline actions after closing DialogSpline.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogSpline(int result);
-    /**
-     * @brief ClosedDialogArc actions after closing DialogArc.
-     * @param result result of dialog working..
-     */
     void               ClosedDialogArc(int result);
-    /**
-     * @brief ClosedDialogSplinePath actions after closing DialogSplinePath.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogSplinePath(int result);
-    /**
-     * @brief ClosedDialogCutSplinePath actions after closing DialogCutSplinePath.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogCutSplinePath(int result);
-    /**
-     * @brief ClosedDialogPointOfContact actions after closing DialogPointOfContact.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogPointOfContact(int result);
-    /**
-     * @brief ClosedDialogDetail actions after closing DialogDetail.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogDetail(int result);
-    /**
-     * @brief ClosedDialogHeight actions after closing DialogHeight.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogHeight(int result);
-    /**
-     * @brief ClosedDialogTriangle actions after closing DialogTriangle.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogTriangle(int result);
-    /**
-     * @brief ClosedDialogPointOfIntersection actions after closing DialogPointOfIntersection.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogPointOfIntersection(int result);
-    /**
-     * @brief ClosedDialogUnionDetails actions after closing DialogUnionDetails.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogUnionDetails(int result);
-    /**
-     * @brief ClosedDialogCutSpline actions after closing DialogCutSpline.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogCutSpline(int result);
-    /**
-     * @brief ClosedDialogCutArc actions after closing DialogCutArc.
-     * @param result result of dialog working.
-     */
     void               ClosedDialogCutArc(int result);
-    /**
-     * @brief About show widows about.
-     */
     void               About();
-    /**
-     * @brief AboutQt show widows aboutQt.
-     */
     void               AboutQt();
-    /**
-     * @brief ShowTool  highlight tool.Tip show tools tooltip.
-     * @param toolTip tooltip text.
-     */
     void               ShowToolTip(const QString &toolTip);
-    /**
-     * @brief tableClosed handle after close layout window.
-     */
     void               tableClosed();
     void               OpenRecentFile();
     void               PatternProperties();
@@ -375,24 +128,9 @@ signals:
      */
     void               ModelChosen(QVector<VItem*> listDetails, const QString &curFile, const QString &description);
 protected:
-    /**
-     * @brief keyPressEvent handle key press events.
-     * @param event key event.
-     */
     virtual void       keyPressEvent ( QKeyEvent * event );
-    /**
-     * @brief showEvent handle after show window.
-     * @param event show event.
-     */
     virtual void       showEvent( QShowEvent *event );
-    /**
-     * @brief closeEvent handle after close window.
-     * @param event close event.
-     */
     virtual void       closeEvent( QCloseEvent * event );
-    /**
-     * @brief Clear reset to default window.
-     */
     void               Clear();
 private:
     Q_DISABLE_COPY(MainWindow)
@@ -471,119 +209,36 @@ private:
     QAction            *recentFileActs[MaxRecentFiles];
     QAction            *separatorAct;
     QTimer             *autoSaveTimer;
-    /**
-     * @brief ToolBarOption enable option toolbar.
-     */
     void               ToolBarOption();
-    /**
-     * @brief ToolBarDraws enable draw toolbar.
-     */
     void               ToolBarDraws();
     void               InitToolButtons();
-    /**
-     * @brief CanselTool cansel tool.
-     */
     void               CancelTool();
-    /**
-     * @brief ArrowTool enable arrow tool.
-     */
     void               ArrowTool();
-    /**
-     * @brief SetEnableWidgets enable action button.
-     * @param enable enable value.
-     */
     void               SetEnableWidgets(bool enable);
-    /**
-     * @brief SetEnableTool enable button.
-     * @param enable enable value.
-     */
     void               SetEnableTool(bool enable);
-    /**
-     * @brief SaveCurrentScene save scene options before set another.
-     */
     void               SaveCurrentScene();
-    /**
-     * @brief RestoreCurrentScene restore scene options after change.
-     */
     void               RestoreCurrentScene();
     template <typename Dialog, typename Func>
-    /** // TODO ISSUE 79 : delete
-     * @brief SetToolButton set tool and show dialog.
-     * @param checked true if tool button checked.
-     * @param t tool type.
-     * @param cursor path tool cursor icon.
-     * @param toolTip first tooltipe.
-     * @param closeDialogSlot function what handle after close dialog.
-     */
+    // TODO ISSUE 79 : delete
     void               SetToolButton(bool checked, Valentina::Tools t, const QString &cursor, const QString &toolTip,
                                      Func closeDialogSlot);
-    /** // TODO ISSUE 79 : copy
-     * @brief SetToolButton set tool and show dialog.
-     * @param checked true if tool button checked.
-     * @param t tool type.
-     * @param cursor path tool cursor icon.
-     * @param toolTip first tooltipe.
-     * @param closeDialogSlot function to handle close of dialog.
-     * @param applyDialogSlot function to handle apply in dialog.
-     */
     template <typename Dialog, typename Func, typename Func2>
+    // TODO ISSUE 79 : copy
     void               SetToolButton2(bool checked, Valentina::Tools t, const QString &cursor, const QString &toolTip,
                                      Func closeDialogSlot, Func2 applyDialogSlot);
-    /**
-     * @brief MinimumScrollBar set scroll bar to minimum.
-     */
     void               MinimumScrollBar();
     template <typename DrawTool>
-    /** // TODO ISSUE 79 : delete
-     * @brief ClosedDialog handle close dialog
-     * @param result result working dialog.
-     */
     void               ClosedDialog(int result);
     template <typename DrawTool>
-    /** // TODO ISSUE 79 : rename
-     * @brief ClosedDialog handle close dialog
-     * @param result result working dialog.
-     */
     void               ClosedDialog2(int result);
-    /** // TODO ISSUE 79 : copy
-     * @brief ApplyDialog handle apply in dialog
-     */
     template <typename DrawTool>
     void               ApplyDialog();
-    /**
-     * @brief SavePattern save pattern file.
-     * @param fileName pattern file name.
-     * @return true if all is good.
-     */
     bool               SavePattern(const QString &curFile);
-    /**
-     * @brief AutoSavePattern start safe saving.
-     */
     void               AutoSavePattern();
-    /**
-     * @brief setCurrentFile the function is called to reset the state of a few variables when a file
-     * is loaded or saved, or when the user starts editing a new file (in which case fileName is empty).
-     * @param fileName file name.
-     */
     void               setCurrentFile(const QString &fileName);
-    /**
-     * @brief strippedName the function call around curFile to exclude the path to the file.
-     * @param fullFileName full path to the file.
-     * @return file name.
-     */
     QString            strippedName(const QString &fullFileName);
-    /**
-     * @brief ReadSettings read setting for app.
-     */
     void               ReadSettings();
-    /**
-     * @brief WriteSettings save setting for app.
-     */
     void               WriteSettings();
-    /**
-     * @brief MaybeSave The function is called to save pending changes.
-     * @return returns true in all cases, except when the user clicks Cancel.
-     */
     bool               MaybeSave();
     void               UpdateRecentFileActions();
     void               CreateMenus();
diff --git a/src/app/mainwindow.ui b/src/app/mainwindow.ui
index ce4f28639..e3bdbaa57 100644
--- a/src/app/mainwindow.ui
+++ b/src/app/mainwindow.ui
@@ -47,7 +47,7 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>144</width>
+         <width>150</width>
          <height>150</height>
         </rect>
        </property>
@@ -302,7 +302,7 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>100</width>
+         <width>150</width>
          <height>58</height>
         </rect>
        </property>
@@ -378,7 +378,7 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>100</width>
+         <width>150</width>
          <height>104</height>
         </rect>
        </property>
@@ -579,7 +579,7 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>100</width>
+         <width>150</width>
          <height>58</height>
         </rect>
        </property>
@@ -703,6 +703,9 @@
    <addaction name="menuHelp"/>
   </widget>
   <widget class="QToolBar" name="mainToolBar">
+   <property name="windowTitle">
+    <string>Toolbar files</string>
+   </property>
    <attribute name="toolBarArea">
     <enum>TopToolBarArea</enum>
    </attribute>
@@ -719,7 +722,7 @@
     <bool>true</bool>
    </property>
    <property name="windowTitle">
-    <string>toolBar</string>
+    <string>ToolBar modes</string>
    </property>
    <attribute name="toolBarArea">
     <enum>TopToolBarArea</enum>
@@ -733,7 +736,7 @@
   </widget>
   <widget class="QToolBar" name="toolBarDraws">
    <property name="windowTitle">
-    <string>toolBar_2</string>
+    <string>Toolbar pattern</string>
    </property>
    <attribute name="toolBarArea">
     <enum>TopToolBarArea</enum>
@@ -745,7 +748,7 @@
   </widget>
   <widget class="QToolBar" name="toolBarOption">
    <property name="windowTitle">
-    <string>toolBar_3</string>
+    <string>Toolbar options</string>
    </property>
    <attribute name="toolBarArea">
     <enum>BottomToolBarArea</enum>
diff --git a/src/app/widgets/vapplication.cpp b/src/app/widgets/vapplication.cpp
index 132fa6835..6718e9b1f 100644
--- a/src/app/widgets/vapplication.cpp
+++ b/src/app/widgets/vapplication.cpp
@@ -1505,7 +1505,7 @@ void VApplication::InitPostfixOperators()
 }
 
 //---------------------------------------------------------------------------------------------------------------------
-bool VApplication::MeasurementsFromUser(QString &newFormula, int position, const QString &token) const
+bool VApplication::MeasurementsFromUser(QString &newFormula, int position, const QString &token, int &bias) const
 {
     QMap<QString, VTranslation>::const_iterator i = measurements.constBegin();
     while (i != measurements.constEnd())
@@ -1513,6 +1513,7 @@ bool VApplication::MeasurementsFromUser(QString &newFormula, int position, const
         if(token == i.value().translate())
         {
             newFormula.replace(position, token.length(), i.key());
+            bias = token.length() - i.key().length();
             return true;
         }
         ++i;
@@ -1521,7 +1522,7 @@ bool VApplication::MeasurementsFromUser(QString &newFormula, int position, const
 }
 
 //---------------------------------------------------------------------------------------------------------------------
-bool VApplication::VariablesFromUser(QString &newFormula, int position, const QString &token) const
+bool VApplication::VariablesFromUser(QString &newFormula, int position, const QString &token, int &bias) const
 {
     QMap<QString, VTranslation>::const_iterator i = variables.constBegin();
     while (i != variables.constEnd())
@@ -1529,6 +1530,9 @@ bool VApplication::VariablesFromUser(QString &newFormula, int position, const QS
         if(token.indexOf( i.value().translate() ) == 0)
         {
             newFormula.replace(position, i.value().translate().length(), i.key());
+            QString newToken = token;
+            newToken.replace(0, i.value().translate().length(), i.key());
+            bias = token.length() - newToken.length();
             return true;
         }
         ++i;
@@ -1537,7 +1541,7 @@ bool VApplication::VariablesFromUser(QString &newFormula, int position, const QS
 }
 
 //---------------------------------------------------------------------------------------------------------------------
-bool VApplication::PostfixOperatorsFromUser(QString &newFormula, int position, const QString &token) const
+bool VApplication::PostfixOperatorsFromUser(QString &newFormula, int position, const QString &token, int &bias) const
 {
     QMap<QString, VTranslation>::const_iterator i = postfixOperators.constBegin();
     while (i != postfixOperators.constEnd())
@@ -1545,6 +1549,7 @@ bool VApplication::PostfixOperatorsFromUser(QString &newFormula, int position, c
         if(token == i.value().translate())
         {
             newFormula.replace(position, token.length(), i.key());
+            bias = token.length() - i.key().length();
             return true;
         }
         ++i;
@@ -1553,7 +1558,7 @@ bool VApplication::PostfixOperatorsFromUser(QString &newFormula, int position, c
 }
 
 //---------------------------------------------------------------------------------------------------------------------
-bool VApplication::FunctionsFromUser(QString &newFormula, int position, const QString &token) const
+bool VApplication::FunctionsFromUser(QString &newFormula, int position, const QString &token, int &bias) const
 {
     QMap<QString, VTranslation>::const_iterator i = functions.constBegin();
     while (i != functions.constEnd())
@@ -1561,6 +1566,7 @@ bool VApplication::FunctionsFromUser(QString &newFormula, int position, const QS
         if(token == i.value().translate())
         {
             newFormula.replace(position, token.length(), i.key());
+            bias = token.length() - i.key().length();
             return true;
         }
         ++i;
@@ -1569,7 +1575,7 @@ bool VApplication::FunctionsFromUser(QString &newFormula, int position, const QS
 }
 
 //---------------------------------------------------------------------------------------------------------------------
-bool VApplication::VariablesToUser(QString &newFormula, int position, const QString &token) const
+bool VApplication::VariablesToUser(QString &newFormula, int position, const QString &token, int &bias) const
 {
     QMap<QString, VTranslation>::const_iterator i = variables.constBegin();
     while (i != variables.constEnd())
@@ -1577,6 +1583,10 @@ bool VApplication::VariablesToUser(QString &newFormula, int position, const QStr
         if(token.indexOf( i.key() ) == 0)
         {
             newFormula.replace(position, i.key().length(), i.value().translate());
+
+            QString newToken = token;
+            newToken.replace(0, i.key().length(), i.value().translate());
+            bias = token.length() - newToken.length();
             return true;
         }
         ++i;
@@ -1584,6 +1594,37 @@ bool VApplication::VariablesToUser(QString &newFormula, int position, const QStr
     return false;
 }
 
+void VApplication::CorrectionsPositions(int position, int bias, QMap<int, QString> &tokens,
+                                        QMap<int, QString> &numbers)
+{
+    if(bias == 0)
+    {
+        return;
+    }
+
+    BiasTokens(position, bias, tokens);
+    BiasTokens(position, bias, numbers);
+}
+
+void VApplication::BiasTokens(int position, int bias, QMap<int, QString> &tokens) const
+{
+    QMap<int, QString> newTokens;
+    QMap<int, QString>::const_iterator i = tokens.constBegin();
+    while (i != tokens.constEnd())
+    {
+        if(i.key()<= position)
+        {
+            newTokens.insert(i.key(), i.value());
+        }
+        else
+        {
+            newTokens.insert(i.key()-bias, i.value());
+        }
+        ++i;
+    }
+    tokens = newTokens;
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 void VApplication::setPatternUnit(const Valentina::Units &patternUnit)
 {
@@ -1610,7 +1651,8 @@ QString VApplication::VarToUser(const QString &var) const
     }
 
     QString newVar = var;
-    if(VariablesToUser(newVar, 0, var))
+    int bias = 0;
+    if(VariablesToUser(newVar, 0, var, bias))
     {
         return newVar;
     }
@@ -1621,22 +1663,23 @@ QString VApplication::VarToUser(const QString &var) const
 QString VApplication::VarFromUser(const QString &var) const
 {
     QString newVar = var;
-    if(MeasurementsFromUser(newVar, 0, var))
+    int bias = 0;
+    if(MeasurementsFromUser(newVar, 0, var, bias))
     {
         return newVar;
     }
 
-    if(VariablesFromUser(newVar, 0, var))
+    if(VariablesFromUser(newVar, 0, var, bias))
     {
         return newVar;
     }
 
-    if(PostfixOperatorsFromUser(newVar, 0, var))
+    if(PostfixOperatorsFromUser(newVar, 0, var, bias))
     {
         return newVar;
     }
 
-    if(FunctionsFromUser(newVar, 0, var))
+    if(FunctionsFromUser(newVar, 0, var, bias))
     {
         return newVar;
     }
@@ -1696,58 +1739,84 @@ QString VApplication::FormulaFromUser(const QString &formula)
         return newFormula;
     }
 
-    QMap<int, QString>::const_iterator i = tokens.constBegin();
-    while (i != tokens.constEnd())
+    QList<int> tKeys = tokens.keys();
+    QList<QString> tValues = tokens.values();
+    for (int i = 0; i < tKeys.size(); ++i)
     {
-        if(MeasurementsFromUser(newFormula, i.key(), i.value()))
+        int bias = 0;
+        if(MeasurementsFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
         {
-            ++i;
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
 
-        if(VariablesFromUser(newFormula, i.key(), i.value()))
+        if(VariablesFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
         {
-            ++i;
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
 
-        if(PostfixOperatorsFromUser(newFormula, i.key(), i.value()))
+        if(PostfixOperatorsFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
         {
-            ++i;
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
 
-        if(FunctionsFromUser(newFormula, i.key(), i.value()))
+        if(FunctionsFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
         {
-            ++i;
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
-        ++i;
     }
 
-    QLocale loc = QLocale();
+    QLocale loc = QLocale::system();
     if(loc != QLocale(QLocale::C))
     {
-        QMap<int, QString>::const_iterator i = numbers.constBegin();
-        while (i != numbers.constEnd())
+        QList<int> nKeys = numbers.keys();
+        QList<QString> nValues = numbers.values();
+        for (int i = 0; i < tKeys.size(); ++i)
         {
-            QLocale::setDefault(QLocale::C);
             bool ok = false;
-            qreal d = QString(i.value()).toDouble(&ok);
-            if(ok == false)
+            qreal d = loc.toDouble(nValues.at(i), &ok);
+            if (ok == false)
             {
-                qDebug()<<"Can't convert to double token"<<i.value();
-                ++i;
+                qDebug()<<"Can't convert to double token"<<nValues.at(i);
                 continue;
             }
-            if(qFloor (d) < d)
+            if (qFloor (d) < d)
             {
-                QLocale::setDefault(QLocale::system());
-                QLocale loc = QLocale();
+                QLocale loc = QLocale(QLocale::C);
                 QString dStr = loc.toString(d);
-                newFormula.replace(i.key(), i.value().length(), dStr);
+                newFormula.replace(nKeys.at(i), nValues.at(i).length(), dStr);
+                int bias = nValues.at(i).length() - dStr.length();
+                if (bias != 0)
+                {
+                    CorrectionsPositions(nKeys.at(i), bias, tokens, numbers);
+                    nKeys = numbers.keys();
+                    nValues = numbers.values();
+                }
             }
-            ++i;
+
         }
     }
 
@@ -1764,7 +1833,7 @@ QString VApplication::FormulaToUser(const QString &formula)
     QMap<int, QString> numbers;
     try
     {
-        Calculator cal(formula);
+        Calculator cal(formula, false);
         tokens = cal.GetTokens();
         numbers = cal.GetNumbers();
     }
@@ -1778,61 +1847,91 @@ QString VApplication::FormulaToUser(const QString &formula)
         return newFormula;
     }
 
-    QMap<int, QString>::const_iterator i = tokens.constBegin();
-    while (i != tokens.constEnd())
+    QList<int> tKeys = tokens.keys();
+    QList<QString> tValues = tokens.values();
+    for (int i = 0; i < tKeys.size(); ++i)
     {
-        if (measurements.contains(i.value()))
+        if (measurements.contains(tValues.at(i)))
         {
-            newFormula.replace(i.key(), i.value().length(), measurements.value(i.value()).translate());
-            ++i;
+            newFormula.replace(tKeys.at(i), tValues.at(i).length(), measurements.value(tValues.at(i)).translate());
+            int bias = tValues.at(i).length() - measurements.value(tValues.at(i)).translate().length();
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
 
-        if (functions.contains(i.value()))
+        if (functions.contains(tValues.at(i)))
         {
-            newFormula.replace(i.key(), i.value().length(), functions.value(i.value()).translate());
-            ++i;
+            newFormula.replace(tKeys.at(i), tValues.at(i).length(), functions.value(tValues.at(i)).translate());
+            int bias = tValues.at(i).length() - functions.value(tValues.at(i)).translate().length();
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
 
-        if (postfixOperators.contains(i.value()))
+        if (postfixOperators.contains(tValues.at(i)))
         {
-            newFormula.replace(i.key(), i.value().length(), postfixOperators.value(i.value()).translate());
-            ++i;
+            newFormula.replace(tKeys.at(i), tValues.at(i).length(), postfixOperators.value(tValues.at(i)).translate());
+            int bias = tValues.at(i).length() - postfixOperators.value(tValues.at(i)).translate().length();
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
 
-        if(VariablesToUser(newFormula, i.key(), i.value()))
+        int bias = 0;
+        if(VariablesToUser(newFormula, tKeys.at(i), tValues.at(i), bias))
         {
-            ++i;
+            if (bias != 0)
+            {
+                CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
+                tKeys = tokens.keys();
+                tValues = tokens.values();
+            }
             continue;
         }
-
     }
 
-    QLocale loc = QLocale();
+    QLocale loc = QLocale::system();
     if(loc != QLocale::C)
     {
-        QMap<int, QString>::const_iterator i = numbers.constBegin();
-        while (i != numbers.constEnd())
+        QList<int> nKeys = numbers.keys();
+        QList<QString> nValues = numbers.values();
+        for (int i = 0; i < tKeys.size(); ++i)
         {
+            QLocale loc = QLocale(QLocale::C);
             bool ok = false;
-            qreal d = QString(i.value()).toDouble(&ok);
+            qreal d = loc.toDouble(nValues.at(i), &ok);
             if(ok == false)
             {
-                qDebug()<<"Can't convert to double token"<<i.value();
-                ++i;
+                qDebug()<<"Can't convert to double token"<<nValues.at(i);
                 continue;
             }
             if(qFloor (d) < d)
             {
-                QLocale::setDefault(QLocale::C);
-                QLocale loc = QLocale();
+                QLocale loc = QLocale::system();
                 QString dStr = loc.toString(d);
-                newFormula.replace(i.key(), i.value().length(), dStr);
-                QLocale::setDefault(QLocale::system());
+                newFormula.replace(nKeys.at(i), nValues.at(i).length(), dStr);
+                int bias = nValues.at(i).length() - dStr.length();
+
+                if (bias != 0)
+                {
+                    CorrectionsPositions(nKeys.at(i), bias, tokens, numbers);
+                    nKeys = numbers.keys();
+                    nValues = numbers.values();
+                }
             }
-            ++i;
         }
     }
 
diff --git a/src/app/widgets/vapplication.h b/src/app/widgets/vapplication.h
index 944bd25bc..820ea55e5 100644
--- a/src/app/widgets/vapplication.h
+++ b/src/app/widgets/vapplication.h
@@ -97,11 +97,17 @@ private:
     void                  InitVariables();
     void                  InitFunctions();
     void                  InitPostfixOperators();
-    bool                  MeasurementsFromUser(QString &newFormula, int position, const QString &token) const;
-    bool                  VariablesFromUser(QString &newFormula, int position, const QString &token) const;
-    bool                  PostfixOperatorsFromUser(QString &newFormula, int position, const QString &token) const;
-    bool                  FunctionsFromUser(QString &newFormula, int position, const QString &token) const;
-    bool                  VariablesToUser(QString &newFormula, int position, const QString &token) const;
+    bool                  MeasurementsFromUser(QString &newFormula, int position, const QString &token,
+                                               int &bias) const;
+    bool                  VariablesFromUser(QString &newFormula, int position, const QString &token, int &bias) const;
+    bool                  PostfixOperatorsFromUser(QString &newFormula, int position, const QString &token,
+                                                   int &bias) const;
+    bool                  FunctionsFromUser(QString &newFormula, int position, const QString &token, int &bias) const;
+    bool                  VariablesToUser(QString &newFormula, int position, const QString &token, int &bias) const;
+    void                  CorrectionsPositions(int position, int bias, QMap<int, QString> &tokens,
+                                               QMap<int, QString> &numbers);
+    void                  BiasTokens(int position, int bias, QMap<int, QString> &tokens) const;
+
 };
 
 inline Valentina::Units VApplication::patternUnit() const