diff --git a/bin/LICENSE.txt b/bin/LICENSE.txt
new file mode 100644
index 0000000..3555b64
--- /dev/null
+++ b/bin/LICENSE.txt
@@ -0,0 +1,16 @@
+////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2016 Miguel Alejandro Moreno Barrientos
+//
+// JDrafting 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.
+//
+// JDrafting 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 JDrafting. If not, see .
+////////////////////////////////////////////////////////////////////////
diff --git a/bin/jdrafting/Exercise.class b/bin/jdrafting/Exercise.class
new file mode 100644
index 0000000..28de8c1
Binary files /dev/null and b/bin/jdrafting/Exercise.class differ
diff --git a/bin/jdrafting/geom/JDMath.class b/bin/jdrafting/geom/JDMath.class
new file mode 100644
index 0000000..12b62e3
Binary files /dev/null and b/bin/jdrafting/geom/JDMath.class differ
diff --git a/bin/jdrafting/geom/JDPoint.class b/bin/jdrafting/geom/JDPoint.class
new file mode 100644
index 0000000..38a74ea
Binary files /dev/null and b/bin/jdrafting/geom/JDPoint.class differ
diff --git a/bin/jdrafting/geom/JDStrokes$1.class b/bin/jdrafting/geom/JDStrokes$1.class
new file mode 100644
index 0000000..8918105
Binary files /dev/null and b/bin/jdrafting/geom/JDStrokes$1.class differ
diff --git a/bin/jdrafting/geom/JDStrokes$2.class b/bin/jdrafting/geom/JDStrokes$2.class
new file mode 100644
index 0000000..43090a2
Binary files /dev/null and b/bin/jdrafting/geom/JDStrokes$2.class differ
diff --git a/bin/jdrafting/geom/JDStrokes$3.class b/bin/jdrafting/geom/JDStrokes$3.class
new file mode 100644
index 0000000..f8e6d4b
Binary files /dev/null and b/bin/jdrafting/geom/JDStrokes$3.class differ
diff --git a/bin/jdrafting/geom/JDStrokes$4.class b/bin/jdrafting/geom/JDStrokes$4.class
new file mode 100644
index 0000000..305d17f
Binary files /dev/null and b/bin/jdrafting/geom/JDStrokes$4.class differ
diff --git a/bin/jdrafting/geom/JDStrokes$5.class b/bin/jdrafting/geom/JDStrokes$5.class
new file mode 100644
index 0000000..c0a233e
Binary files /dev/null and b/bin/jdrafting/geom/JDStrokes$5.class differ
diff --git a/bin/jdrafting/geom/JDStrokes.class b/bin/jdrafting/geom/JDStrokes.class
new file mode 100644
index 0000000..57418f2
Binary files /dev/null and b/bin/jdrafting/geom/JDStrokes.class differ
diff --git a/bin/jdrafting/geom/JDraftingShape.class b/bin/jdrafting/geom/JDraftingShape.class
new file mode 100644
index 0000000..8697b2b
Binary files /dev/null and b/bin/jdrafting/geom/JDraftingShape.class differ
diff --git a/bin/jdrafting/gui/Application$1.class b/bin/jdrafting/gui/Application$1.class
new file mode 100644
index 0000000..1b2ed26
Binary files /dev/null and b/bin/jdrafting/gui/Application$1.class differ
diff --git a/bin/jdrafting/gui/Application$10.class b/bin/jdrafting/gui/Application$10.class
new file mode 100644
index 0000000..ec3124c
Binary files /dev/null and b/bin/jdrafting/gui/Application$10.class differ
diff --git a/bin/jdrafting/gui/Application$11.class b/bin/jdrafting/gui/Application$11.class
new file mode 100644
index 0000000..75f6abe
Binary files /dev/null and b/bin/jdrafting/gui/Application$11.class differ
diff --git a/bin/jdrafting/gui/Application$12.class b/bin/jdrafting/gui/Application$12.class
new file mode 100644
index 0000000..78ebdc0
Binary files /dev/null and b/bin/jdrafting/gui/Application$12.class differ
diff --git a/bin/jdrafting/gui/Application$13.class b/bin/jdrafting/gui/Application$13.class
new file mode 100644
index 0000000..4a4e323
Binary files /dev/null and b/bin/jdrafting/gui/Application$13.class differ
diff --git a/bin/jdrafting/gui/Application$14.class b/bin/jdrafting/gui/Application$14.class
new file mode 100644
index 0000000..2e9eb9c
Binary files /dev/null and b/bin/jdrafting/gui/Application$14.class differ
diff --git a/bin/jdrafting/gui/Application$15.class b/bin/jdrafting/gui/Application$15.class
new file mode 100644
index 0000000..f38cfcd
Binary files /dev/null and b/bin/jdrafting/gui/Application$15.class differ
diff --git a/bin/jdrafting/gui/Application$16.class b/bin/jdrafting/gui/Application$16.class
new file mode 100644
index 0000000..573313c
Binary files /dev/null and b/bin/jdrafting/gui/Application$16.class differ
diff --git a/bin/jdrafting/gui/Application$17.class b/bin/jdrafting/gui/Application$17.class
new file mode 100644
index 0000000..8f46cbd
Binary files /dev/null and b/bin/jdrafting/gui/Application$17.class differ
diff --git a/bin/jdrafting/gui/Application$18.class b/bin/jdrafting/gui/Application$18.class
new file mode 100644
index 0000000..e158873
Binary files /dev/null and b/bin/jdrafting/gui/Application$18.class differ
diff --git a/bin/jdrafting/gui/Application$19.class b/bin/jdrafting/gui/Application$19.class
new file mode 100644
index 0000000..6b8c670
Binary files /dev/null and b/bin/jdrafting/gui/Application$19.class differ
diff --git a/bin/jdrafting/gui/Application$2.class b/bin/jdrafting/gui/Application$2.class
new file mode 100644
index 0000000..e55dd6a
Binary files /dev/null and b/bin/jdrafting/gui/Application$2.class differ
diff --git a/bin/jdrafting/gui/Application$3.class b/bin/jdrafting/gui/Application$3.class
new file mode 100644
index 0000000..9611cec
Binary files /dev/null and b/bin/jdrafting/gui/Application$3.class differ
diff --git a/bin/jdrafting/gui/Application$4.class b/bin/jdrafting/gui/Application$4.class
new file mode 100644
index 0000000..f7c2f6c
Binary files /dev/null and b/bin/jdrafting/gui/Application$4.class differ
diff --git a/bin/jdrafting/gui/Application$5.class b/bin/jdrafting/gui/Application$5.class
new file mode 100644
index 0000000..964dbca
Binary files /dev/null and b/bin/jdrafting/gui/Application$5.class differ
diff --git a/bin/jdrafting/gui/Application$6.class b/bin/jdrafting/gui/Application$6.class
new file mode 100644
index 0000000..d5f95cd
Binary files /dev/null and b/bin/jdrafting/gui/Application$6.class differ
diff --git a/bin/jdrafting/gui/Application$7.class b/bin/jdrafting/gui/Application$7.class
new file mode 100644
index 0000000..e773705
Binary files /dev/null and b/bin/jdrafting/gui/Application$7.class differ
diff --git a/bin/jdrafting/gui/Application$8.class b/bin/jdrafting/gui/Application$8.class
new file mode 100644
index 0000000..eb16efd
Binary files /dev/null and b/bin/jdrafting/gui/Application$8.class differ
diff --git a/bin/jdrafting/gui/Application$9.class b/bin/jdrafting/gui/Application$9.class
new file mode 100644
index 0000000..4cab561
Binary files /dev/null and b/bin/jdrafting/gui/Application$9.class differ
diff --git a/bin/jdrafting/gui/Application$EditAddShapeToExercise.class b/bin/jdrafting/gui/Application$EditAddShapeToExercise.class
new file mode 100644
index 0000000..e3ac365
Binary files /dev/null and b/bin/jdrafting/gui/Application$EditAddShapeToExercise.class differ
diff --git a/bin/jdrafting/gui/Application$EditRemoveShapeFromExercise.class b/bin/jdrafting/gui/Application$EditRemoveShapeFromExercise.class
new file mode 100644
index 0000000..49cac8a
Binary files /dev/null and b/bin/jdrafting/gui/Application$EditRemoveShapeFromExercise.class differ
diff --git a/bin/jdrafting/gui/Application$UndoRedoListener.class b/bin/jdrafting/gui/Application$UndoRedoListener.class
new file mode 100644
index 0000000..48fee2c
Binary files /dev/null and b/bin/jdrafting/gui/Application$UndoRedoListener.class differ
diff --git a/bin/jdrafting/gui/Application.class b/bin/jdrafting/gui/Application.class
new file mode 100644
index 0000000..8e987d3
Binary files /dev/null and b/bin/jdrafting/gui/Application.class differ
diff --git a/bin/jdrafting/gui/CanvasPanel$1.class b/bin/jdrafting/gui/CanvasPanel$1.class
new file mode 100644
index 0000000..4e5a98c
Binary files /dev/null and b/bin/jdrafting/gui/CanvasPanel$1.class differ
diff --git a/bin/jdrafting/gui/CanvasPanel$MoveCanvasThread.class b/bin/jdrafting/gui/CanvasPanel$MoveCanvasThread.class
new file mode 100644
index 0000000..b64da05
Binary files /dev/null and b/bin/jdrafting/gui/CanvasPanel$MoveCanvasThread.class differ
diff --git a/bin/jdrafting/gui/CanvasPanel.class b/bin/jdrafting/gui/CanvasPanel.class
new file mode 100644
index 0000000..29bb975
Binary files /dev/null and b/bin/jdrafting/gui/CanvasPanel.class differ
diff --git a/bin/jdrafting/gui/EditShapeDialog$1.class b/bin/jdrafting/gui/EditShapeDialog$1.class
new file mode 100644
index 0000000..18ed739
Binary files /dev/null and b/bin/jdrafting/gui/EditShapeDialog$1.class differ
diff --git a/bin/jdrafting/gui/EditShapeDialog$2.class b/bin/jdrafting/gui/EditShapeDialog$2.class
new file mode 100644
index 0000000..8c89c9f
Binary files /dev/null and b/bin/jdrafting/gui/EditShapeDialog$2.class differ
diff --git a/bin/jdrafting/gui/EditShapeDialog$3.class b/bin/jdrafting/gui/EditShapeDialog$3.class
new file mode 100644
index 0000000..eae0503
Binary files /dev/null and b/bin/jdrafting/gui/EditShapeDialog$3.class differ
diff --git a/bin/jdrafting/gui/EditShapeDialog.class b/bin/jdrafting/gui/EditShapeDialog.class
new file mode 100644
index 0000000..214d529
Binary files /dev/null and b/bin/jdrafting/gui/EditShapeDialog.class differ
diff --git a/bin/jdrafting/gui/FileInfoDialog$1.class b/bin/jdrafting/gui/FileInfoDialog$1.class
new file mode 100644
index 0000000..4cfe83c
Binary files /dev/null and b/bin/jdrafting/gui/FileInfoDialog$1.class differ
diff --git a/bin/jdrafting/gui/FileInfoDialog$2.class b/bin/jdrafting/gui/FileInfoDialog$2.class
new file mode 100644
index 0000000..1790ba0
Binary files /dev/null and b/bin/jdrafting/gui/FileInfoDialog$2.class differ
diff --git a/bin/jdrafting/gui/FileInfoDialog.class b/bin/jdrafting/gui/FileInfoDialog.class
new file mode 100644
index 0000000..1006802
Binary files /dev/null and b/bin/jdrafting/gui/FileInfoDialog.class differ
diff --git a/bin/jdrafting/gui/JDUtils.class b/bin/jdrafting/gui/JDUtils.class
new file mode 100644
index 0000000..86a3daf
Binary files /dev/null and b/bin/jdrafting/gui/JDUtils.class differ
diff --git a/bin/jdrafting/gui/JDraftingArgs.class b/bin/jdrafting/gui/JDraftingArgs.class
new file mode 100644
index 0000000..96d4993
Binary files /dev/null and b/bin/jdrafting/gui/JDraftingArgs.class differ
diff --git a/bin/jdrafting/gui/LineStyleComboBox$1.class b/bin/jdrafting/gui/LineStyleComboBox$1.class
new file mode 100644
index 0000000..8a3babc
Binary files /dev/null and b/bin/jdrafting/gui/LineStyleComboBox$1.class differ
diff --git a/bin/jdrafting/gui/LineStyleComboBox$LineRenderer.class b/bin/jdrafting/gui/LineStyleComboBox$LineRenderer.class
new file mode 100644
index 0000000..a1d816d
Binary files /dev/null and b/bin/jdrafting/gui/LineStyleComboBox$LineRenderer.class differ
diff --git a/bin/jdrafting/gui/LineStyleComboBox.class b/bin/jdrafting/gui/LineStyleComboBox.class
new file mode 100644
index 0000000..cf34083
Binary files /dev/null and b/bin/jdrafting/gui/LineStyleComboBox.class differ
diff --git a/bin/jdrafting/gui/ShapeList$ShapeListMouseAdapter.class b/bin/jdrafting/gui/ShapeList$ShapeListMouseAdapter.class
new file mode 100644
index 0000000..3db4aa5
Binary files /dev/null and b/bin/jdrafting/gui/ShapeList$ShapeListMouseAdapter.class differ
diff --git a/bin/jdrafting/gui/ShapeList$ShapeListRenderer$1.class b/bin/jdrafting/gui/ShapeList$ShapeListRenderer$1.class
new file mode 100644
index 0000000..f367031
Binary files /dev/null and b/bin/jdrafting/gui/ShapeList$ShapeListRenderer$1.class differ
diff --git a/bin/jdrafting/gui/ShapeList$ShapeListRenderer.class b/bin/jdrafting/gui/ShapeList$ShapeListRenderer.class
new file mode 100644
index 0000000..455dd79
Binary files /dev/null and b/bin/jdrafting/gui/ShapeList$ShapeListRenderer.class differ
diff --git a/bin/jdrafting/gui/ShapeList$ShapeListSelectionListener.class b/bin/jdrafting/gui/ShapeList$ShapeListSelectionListener.class
new file mode 100644
index 0000000..99e5ece
Binary files /dev/null and b/bin/jdrafting/gui/ShapeList$ShapeListSelectionListener.class differ
diff --git a/bin/jdrafting/gui/ShapeList.class b/bin/jdrafting/gui/ShapeList.class
new file mode 100644
index 0000000..c77901d
Binary files /dev/null and b/bin/jdrafting/gui/ShapeList.class differ
diff --git a/bin/jdrafting/gui/Toast.class b/bin/jdrafting/gui/Toast.class
new file mode 100644
index 0000000..f204d55
Binary files /dev/null and b/bin/jdrafting/gui/Toast.class differ
diff --git a/bin/jdrafting/gui/ToastCanvasStep$1.class b/bin/jdrafting/gui/ToastCanvasStep$1.class
new file mode 100644
index 0000000..f3a8b36
Binary files /dev/null and b/bin/jdrafting/gui/ToastCanvasStep$1.class differ
diff --git a/bin/jdrafting/gui/ToastCanvasStep.class b/bin/jdrafting/gui/ToastCanvasStep.class
new file mode 100644
index 0000000..e5ba9e7
Binary files /dev/null and b/bin/jdrafting/gui/ToastCanvasStep.class differ
diff --git a/bin/jdrafting/gui/Viewport.class b/bin/jdrafting/gui/Viewport.class
new file mode 100644
index 0000000..e77d1be
Binary files /dev/null and b/bin/jdrafting/gui/Viewport.class differ
diff --git a/bin/jdrafting/gui/controller/actions/AboutAction.class b/bin/jdrafting/gui/controller/actions/AboutAction.class
new file mode 100644
index 0000000..0125b0d
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/AboutAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/AngleAction.class b/bin/jdrafting/gui/controller/actions/AngleAction.class
new file mode 100644
index 0000000..9717654
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/AngleAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ArcAction.class b/bin/jdrafting/gui/controller/actions/ArcAction.class
new file mode 100644
index 0000000..5309f94
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ArcAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ArrowAction.class b/bin/jdrafting/gui/controller/actions/ArrowAction.class
new file mode 100644
index 0000000..4756f6f
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ArrowAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/AxialSymmetryAction.class b/bin/jdrafting/gui/controller/actions/AxialSymmetryAction.class
new file mode 100644
index 0000000..9fb8846
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/AxialSymmetryAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/BackwardAction.class b/bin/jdrafting/gui/controller/actions/BackwardAction.class
new file mode 100644
index 0000000..0979abc
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/BackwardAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/BisectrixAction.class b/bin/jdrafting/gui/controller/actions/BisectrixAction.class
new file mode 100644
index 0000000..91e9f9a
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/BisectrixAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/BoundsAction.class b/bin/jdrafting/gui/controller/actions/BoundsAction.class
new file mode 100644
index 0000000..88b735e
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/BoundsAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/CanvasColorAction.class b/bin/jdrafting/gui/controller/actions/CanvasColorAction.class
new file mode 100644
index 0000000..9f0cf82
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/CanvasColorAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/CapableArcAction.class b/bin/jdrafting/gui/controller/actions/CapableArcAction.class
new file mode 100644
index 0000000..c19d815
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/CapableArcAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/CentralSymmetryAction.class b/bin/jdrafting/gui/controller/actions/CentralSymmetryAction.class
new file mode 100644
index 0000000..1712ce9
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/CentralSymmetryAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/CircumferenceAction.class b/bin/jdrafting/gui/controller/actions/CircumferenceAction.class
new file mode 100644
index 0000000..79182ae
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/CircumferenceAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/CopySelectedAction$1.class b/bin/jdrafting/gui/controller/actions/CopySelectedAction$1.class
new file mode 100644
index 0000000..df26829
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/CopySelectedAction$1.class differ
diff --git a/bin/jdrafting/gui/controller/actions/CopySelectedAction.class b/bin/jdrafting/gui/controller/actions/CopySelectedAction.class
new file mode 100644
index 0000000..f64c1cb
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/CopySelectedAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/DeleteSelectedAction$1.class b/bin/jdrafting/gui/controller/actions/DeleteSelectedAction$1.class
new file mode 100644
index 0000000..38559a3
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/DeleteSelectedAction$1.class differ
diff --git a/bin/jdrafting/gui/controller/actions/DeleteSelectedAction.class b/bin/jdrafting/gui/controller/actions/DeleteSelectedAction.class
new file mode 100644
index 0000000..a771135
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/DeleteSelectedAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/DivisionPointsAction.class b/bin/jdrafting/gui/controller/actions/DivisionPointsAction.class
new file mode 100644
index 0000000..405d3b2
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/DivisionPointsAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/EllipseAction.class b/bin/jdrafting/gui/controller/actions/EllipseAction.class
new file mode 100644
index 0000000..b862cdd
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/EllipseAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/EndAction.class b/bin/jdrafting/gui/controller/actions/EndAction.class
new file mode 100644
index 0000000..af33ff7
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/EndAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ExerciseMetadataAction.class b/bin/jdrafting/gui/controller/actions/ExerciseMetadataAction.class
new file mode 100644
index 0000000..3352296
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ExerciseMetadataAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ExitAction.class b/bin/jdrafting/gui/controller/actions/ExitAction.class
new file mode 100644
index 0000000..9a24e8e
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ExitAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ExtremesAction.class b/bin/jdrafting/gui/controller/actions/ExtremesAction.class
new file mode 100644
index 0000000..206cf06
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ExtremesAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/EyedropperAction.class b/bin/jdrafting/gui/controller/actions/EyedropperAction.class
new file mode 100644
index 0000000..c89aa20
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/EyedropperAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ForwardAction.class b/bin/jdrafting/gui/controller/actions/ForwardAction.class
new file mode 100644
index 0000000..5e6d423
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ForwardAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/FragmentAction.class b/bin/jdrafting/gui/controller/actions/FragmentAction.class
new file mode 100644
index 0000000..a0f5886
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/FragmentAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/FreeHandAction.class b/bin/jdrafting/gui/controller/actions/FreeHandAction.class
new file mode 100644
index 0000000..86fb2f3
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/FreeHandAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/FusionAction$1.class b/bin/jdrafting/gui/controller/actions/FusionAction$1.class
new file mode 100644
index 0000000..248059d
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/FusionAction$1.class differ
diff --git a/bin/jdrafting/gui/controller/actions/FusionAction.class b/bin/jdrafting/gui/controller/actions/FusionAction.class
new file mode 100644
index 0000000..030edec
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/FusionAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/HomothetyAction.class b/bin/jdrafting/gui/controller/actions/HomothetyAction.class
new file mode 100644
index 0000000..2f09964
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/HomothetyAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/HyperbolaAction.class b/bin/jdrafting/gui/controller/actions/HyperbolaAction.class
new file mode 100644
index 0000000..3a3ba6d
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/HyperbolaAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/IntersectionsAction$1.class b/bin/jdrafting/gui/controller/actions/IntersectionsAction$1.class
new file mode 100644
index 0000000..e669bfa
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/IntersectionsAction$1.class differ
diff --git a/bin/jdrafting/gui/controller/actions/IntersectionsAction$POJOJoin.class b/bin/jdrafting/gui/controller/actions/IntersectionsAction$POJOJoin.class
new file mode 100644
index 0000000..6bbaad7
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/IntersectionsAction$POJOJoin.class differ
diff --git a/bin/jdrafting/gui/controller/actions/IntersectionsAction.class b/bin/jdrafting/gui/controller/actions/IntersectionsAction.class
new file mode 100644
index 0000000..3473bd6
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/IntersectionsAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/InvertSelectionAction.class b/bin/jdrafting/gui/controller/actions/InvertSelectionAction.class
new file mode 100644
index 0000000..67ec65a
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/InvertSelectionAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/LookFeelAction.class b/bin/jdrafting/gui/controller/actions/LookFeelAction.class
new file mode 100644
index 0000000..6322bb1
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/LookFeelAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog$1.class b/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog$1.class
new file mode 100644
index 0000000..b337838
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog$1.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog$2.class b/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog$2.class
new file mode 100644
index 0000000..b8c1249
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog$2.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog.class b/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog.class
new file mode 100644
index 0000000..ea12a79
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MathFunctionAction$JMEDialog.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MathFunctionAction.class b/bin/jdrafting/gui/controller/actions/MathFunctionAction.class
new file mode 100644
index 0000000..52b5d82
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MathFunctionAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MediatrixAction.class b/bin/jdrafting/gui/controller/actions/MediatrixAction.class
new file mode 100644
index 0000000..523d6c3
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MediatrixAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MidpointAction.class b/bin/jdrafting/gui/controller/actions/MidpointAction.class
new file mode 100644
index 0000000..d0534c1
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MidpointAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ModifySegmentAction.class b/bin/jdrafting/gui/controller/actions/ModifySegmentAction.class
new file mode 100644
index 0000000..576bddf
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ModifySegmentAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MoveZBufferAction$EditMoveZBuffer.class b/bin/jdrafting/gui/controller/actions/MoveZBufferAction$EditMoveZBuffer.class
new file mode 100644
index 0000000..1ae7d26
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MoveZBufferAction$EditMoveZBuffer.class differ
diff --git a/bin/jdrafting/gui/controller/actions/MoveZBufferAction.class b/bin/jdrafting/gui/controller/actions/MoveZBufferAction.class
new file mode 100644
index 0000000..09a4031
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/MoveZBufferAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/NewAction.class b/bin/jdrafting/gui/controller/actions/NewAction.class
new file mode 100644
index 0000000..eb47334
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/NewAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/OpenAction$PreviewPanel.class b/bin/jdrafting/gui/controller/actions/OpenAction$PreviewPanel.class
new file mode 100644
index 0000000..95e4781
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/OpenAction$PreviewPanel.class differ
diff --git a/bin/jdrafting/gui/controller/actions/OpenAction.class b/bin/jdrafting/gui/controller/actions/OpenAction.class
new file mode 100644
index 0000000..8954b3e
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/OpenAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ParabolaAction.class b/bin/jdrafting/gui/controller/actions/ParabolaAction.class
new file mode 100644
index 0000000..9e221ef
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ParabolaAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ParallelAction.class b/bin/jdrafting/gui/controller/actions/ParallelAction.class
new file mode 100644
index 0000000..21cd869
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ParallelAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PasteStyleAction.class b/bin/jdrafting/gui/controller/actions/PasteStyleAction.class
new file mode 100644
index 0000000..2f9a419
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PasteStyleAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PerpendicularAction.class b/bin/jdrafting/gui/controller/actions/PerpendicularAction.class
new file mode 100644
index 0000000..f586bbc
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PerpendicularAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PointAction.class b/bin/jdrafting/gui/controller/actions/PointAction.class
new file mode 100644
index 0000000..53500ae
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PointAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PointColorAction.class b/bin/jdrafting/gui/controller/actions/PointColorAction.class
new file mode 100644
index 0000000..1af1d76
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PointColorAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PolyLineAction.class b/bin/jdrafting/gui/controller/actions/PolyLineAction.class
new file mode 100644
index 0000000..4afd049
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PolyLineAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PolygonAction.class b/bin/jdrafting/gui/controller/actions/PolygonAction.class
new file mode 100644
index 0000000..1c5fcfb
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PolygonAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/PrintAction.class b/bin/jdrafting/gui/controller/actions/PrintAction.class
new file mode 100644
index 0000000..d01e5c6
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/PrintAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ProtractorAction.class b/bin/jdrafting/gui/controller/actions/ProtractorAction.class
new file mode 100644
index 0000000..730e512
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ProtractorAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/RectangleAction.class b/bin/jdrafting/gui/controller/actions/RectangleAction.class
new file mode 100644
index 0000000..43e6dbf
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/RectangleAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/RedoAction.class b/bin/jdrafting/gui/controller/actions/RedoAction.class
new file mode 100644
index 0000000..98be0f4
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/RedoAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/RegularPolygonAction.class b/bin/jdrafting/gui/controller/actions/RegularPolygonAction.class
new file mode 100644
index 0000000..acee861
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/RegularPolygonAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/RewindAction.class b/bin/jdrafting/gui/controller/actions/RewindAction.class
new file mode 100644
index 0000000..f5f07e9
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/RewindAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/RotationAction.class b/bin/jdrafting/gui/controller/actions/RotationAction.class
new file mode 100644
index 0000000..0e5163f
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/RotationAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/RulerAction.class b/bin/jdrafting/gui/controller/actions/RulerAction.class
new file mode 100644
index 0000000..aeb45d4
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/RulerAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SaveAction.class b/bin/jdrafting/gui/controller/actions/SaveAction.class
new file mode 100644
index 0000000..03b9c44
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SaveAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser$1.class b/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser$1.class
new file mode 100644
index 0000000..3dceee0
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser$1.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser$2.class b/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser$2.class
new file mode 100644
index 0000000..cf0072e
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser$2.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser.class b/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser.class
new file mode 100644
index 0000000..738c31c
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SaveImageAction$ImageChooser.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SaveImageAction.class b/bin/jdrafting/gui/controller/actions/SaveImageAction.class
new file mode 100644
index 0000000..1dbe749
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SaveImageAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SegmentAction.class b/bin/jdrafting/gui/controller/actions/SegmentAction.class
new file mode 100644
index 0000000..3e1ea30
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SegmentAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SelectAllAction.class b/bin/jdrafting/gui/controller/actions/SelectAllAction.class
new file mode 100644
index 0000000..1ea0916
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SelectAllAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SelectionAction.class b/bin/jdrafting/gui/controller/actions/SelectionAction.class
new file mode 100644
index 0000000..e4058f1
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SelectionAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ShapeColorAction.class b/bin/jdrafting/gui/controller/actions/ShapeColorAction.class
new file mode 100644
index 0000000..8081dbf
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ShapeColorAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/SplineAction.class b/bin/jdrafting/gui/controller/actions/SplineAction.class
new file mode 100644
index 0000000..73726ff
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/SplineAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/TextVisibleAction.class b/bin/jdrafting/gui/controller/actions/TextVisibleAction.class
new file mode 100644
index 0000000..2718214
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/TextVisibleAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/TranslationAction.class b/bin/jdrafting/gui/controller/actions/TranslationAction.class
new file mode 100644
index 0000000..d6f39c7
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/TranslationAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/TriangleAction.class b/bin/jdrafting/gui/controller/actions/TriangleAction.class
new file mode 100644
index 0000000..9324610
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/TriangleAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/TrianglePointsAction.class b/bin/jdrafting/gui/controller/actions/TrianglePointsAction.class
new file mode 100644
index 0000000..e0e7005
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/TrianglePointsAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/UndoAction.class b/bin/jdrafting/gui/controller/actions/UndoAction.class
new file mode 100644
index 0000000..a166dc1
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/UndoAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/VertexAction.class b/bin/jdrafting/gui/controller/actions/VertexAction.class
new file mode 100644
index 0000000..e4e886d
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/VertexAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ZoomAllAction.class b/bin/jdrafting/gui/controller/actions/ZoomAllAction.class
new file mode 100644
index 0000000..f08da04
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ZoomAllAction.class differ
diff --git a/bin/jdrafting/gui/controller/actions/ZoomInOutAction.class b/bin/jdrafting/gui/controller/actions/ZoomInOutAction.class
new file mode 100644
index 0000000..b69dd66
Binary files /dev/null and b/bin/jdrafting/gui/controller/actions/ZoomInOutAction.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/AbstractCanvasMouseListener.class b/bin/jdrafting/gui/controller/mouse/AbstractCanvasMouseListener.class
new file mode 100644
index 0000000..fe7b3a9
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/AbstractCanvasMouseListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/AngleListener.class b/bin/jdrafting/gui/controller/mouse/AngleListener.class
new file mode 100644
index 0000000..e3c1a86
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/AngleListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ArcListener.class b/bin/jdrafting/gui/controller/mouse/ArcListener.class
new file mode 100644
index 0000000..5a094cd
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ArcListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ArrowListener.class b/bin/jdrafting/gui/controller/mouse/ArrowListener.class
new file mode 100644
index 0000000..cab6c04
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ArrowListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/AxialSymmetryListener$EditSymmetry.class b/bin/jdrafting/gui/controller/mouse/AxialSymmetryListener$EditSymmetry.class
new file mode 100644
index 0000000..3f91190
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/AxialSymmetryListener$EditSymmetry.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/AxialSymmetryListener.class b/bin/jdrafting/gui/controller/mouse/AxialSymmetryListener.class
new file mode 100644
index 0000000..e5aa2b6
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/AxialSymmetryListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/BisectrixListener.class b/bin/jdrafting/gui/controller/mouse/BisectrixListener.class
new file mode 100644
index 0000000..7b0de21
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/BisectrixListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/BoundsListener.class b/bin/jdrafting/gui/controller/mouse/BoundsListener.class
new file mode 100644
index 0000000..0d4f5a1
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/BoundsListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/CapableArcListener.class b/bin/jdrafting/gui/controller/mouse/CapableArcListener.class
new file mode 100644
index 0000000..f06f804
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/CapableArcListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/CentralSymmetryListener$EditSymmetric.class b/bin/jdrafting/gui/controller/mouse/CentralSymmetryListener$EditSymmetric.class
new file mode 100644
index 0000000..f703fc1
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/CentralSymmetryListener$EditSymmetric.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/CentralSymmetryListener.class b/bin/jdrafting/gui/controller/mouse/CentralSymmetryListener.class
new file mode 100644
index 0000000..177a7d5
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/CentralSymmetryListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/CircumferenceListener$1.class b/bin/jdrafting/gui/controller/mouse/CircumferenceListener$1.class
new file mode 100644
index 0000000..ffb4dba
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/CircumferenceListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/CircumferenceListener.class b/bin/jdrafting/gui/controller/mouse/CircumferenceListener.class
new file mode 100644
index 0000000..cbfb178
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/CircumferenceListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/DivisionPointsListener$1.class b/bin/jdrafting/gui/controller/mouse/DivisionPointsListener$1.class
new file mode 100644
index 0000000..d707a9b
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/DivisionPointsListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/DivisionPointsListener$2.class b/bin/jdrafting/gui/controller/mouse/DivisionPointsListener$2.class
new file mode 100644
index 0000000..33a2c7f
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/DivisionPointsListener$2.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/DivisionPointsListener.class b/bin/jdrafting/gui/controller/mouse/DivisionPointsListener.class
new file mode 100644
index 0000000..dec51c4
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/DivisionPointsListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/EllipseListener$1.class b/bin/jdrafting/gui/controller/mouse/EllipseListener$1.class
new file mode 100644
index 0000000..ab4e68c
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/EllipseListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/EllipseListener.class b/bin/jdrafting/gui/controller/mouse/EllipseListener.class
new file mode 100644
index 0000000..7b00a14
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/EllipseListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ExtremesListener$1.class b/bin/jdrafting/gui/controller/mouse/ExtremesListener$1.class
new file mode 100644
index 0000000..a784eb9
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ExtremesListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ExtremesListener.class b/bin/jdrafting/gui/controller/mouse/ExtremesListener.class
new file mode 100644
index 0000000..854e7fc
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ExtremesListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/EyedropperListener.class b/bin/jdrafting/gui/controller/mouse/EyedropperListener.class
new file mode 100644
index 0000000..08bdd7c
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/EyedropperListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/FragmentListener$1.class b/bin/jdrafting/gui/controller/mouse/FragmentListener$1.class
new file mode 100644
index 0000000..a28d071
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/FragmentListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/FragmentListener.class b/bin/jdrafting/gui/controller/mouse/FragmentListener.class
new file mode 100644
index 0000000..2a726d2
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/FragmentListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/FreeHandListener.class b/bin/jdrafting/gui/controller/mouse/FreeHandListener.class
new file mode 100644
index 0000000..d8501b3
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/FreeHandListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/HandListener$EditMoveShapes.class b/bin/jdrafting/gui/controller/mouse/HandListener$EditMoveShapes.class
new file mode 100644
index 0000000..aceed04
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/HandListener$EditMoveShapes.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/HandListener.class b/bin/jdrafting/gui/controller/mouse/HandListener.class
new file mode 100644
index 0000000..704bd69
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/HandListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/HomothetyListener$EditHomothety.class b/bin/jdrafting/gui/controller/mouse/HomothetyListener$EditHomothety.class
new file mode 100644
index 0000000..a073578
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/HomothetyListener$EditHomothety.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/HomothetyListener.class b/bin/jdrafting/gui/controller/mouse/HomothetyListener.class
new file mode 100644
index 0000000..12442c0
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/HomothetyListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/HyperbolaListener$1.class b/bin/jdrafting/gui/controller/mouse/HyperbolaListener$1.class
new file mode 100644
index 0000000..dfb0da4
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/HyperbolaListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/HyperbolaListener.class b/bin/jdrafting/gui/controller/mouse/HyperbolaListener.class
new file mode 100644
index 0000000..bc6ba9b
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/HyperbolaListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/MathFunctionListener.class b/bin/jdrafting/gui/controller/mouse/MathFunctionListener.class
new file mode 100644
index 0000000..91ed67e
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/MathFunctionListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/MediatrixListener.class b/bin/jdrafting/gui/controller/mouse/MediatrixListener.class
new file mode 100644
index 0000000..ac48051
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/MediatrixListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/MidpointListener.class b/bin/jdrafting/gui/controller/mouse/MidpointListener.class
new file mode 100644
index 0000000..de84310
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/MidpointListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ModifySegmentListener$1.class b/bin/jdrafting/gui/controller/mouse/ModifySegmentListener$1.class
new file mode 100644
index 0000000..e259da2
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ModifySegmentListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ModifySegmentListener.class b/bin/jdrafting/gui/controller/mouse/ModifySegmentListener.class
new file mode 100644
index 0000000..3b71e35
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ModifySegmentListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ParabolaListener$1.class b/bin/jdrafting/gui/controller/mouse/ParabolaListener$1.class
new file mode 100644
index 0000000..07f90f0
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ParabolaListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ParabolaListener.class b/bin/jdrafting/gui/controller/mouse/ParabolaListener.class
new file mode 100644
index 0000000..f85023c
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ParabolaListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ParallelListener.class b/bin/jdrafting/gui/controller/mouse/ParallelListener.class
new file mode 100644
index 0000000..d98c06d
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ParallelListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/PasteStyleListener$EditPasteStyle.class b/bin/jdrafting/gui/controller/mouse/PasteStyleListener$EditPasteStyle.class
new file mode 100644
index 0000000..b870fbb
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/PasteStyleListener$EditPasteStyle.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/PasteStyleListener.class b/bin/jdrafting/gui/controller/mouse/PasteStyleListener.class
new file mode 100644
index 0000000..436a186
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/PasteStyleListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/PerpendicularListener.class b/bin/jdrafting/gui/controller/mouse/PerpendicularListener.class
new file mode 100644
index 0000000..6c7dfc8
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/PerpendicularListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/PointListener.class b/bin/jdrafting/gui/controller/mouse/PointListener.class
new file mode 100644
index 0000000..304762f
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/PointListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/PolygonListener.class b/bin/jdrafting/gui/controller/mouse/PolygonListener.class
new file mode 100644
index 0000000..01bfec7
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/PolygonListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/ProtractorListener.class b/bin/jdrafting/gui/controller/mouse/ProtractorListener.class
new file mode 100644
index 0000000..d06f6eb
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/ProtractorListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/RectangleListener.class b/bin/jdrafting/gui/controller/mouse/RectangleListener.class
new file mode 100644
index 0000000..d18dca0
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/RectangleListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/RegularPolygonListener$1.class b/bin/jdrafting/gui/controller/mouse/RegularPolygonListener$1.class
new file mode 100644
index 0000000..6866194
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/RegularPolygonListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/RegularPolygonListener.class b/bin/jdrafting/gui/controller/mouse/RegularPolygonListener.class
new file mode 100644
index 0000000..29ff092
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/RegularPolygonListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/RotationListener$EditRotation.class b/bin/jdrafting/gui/controller/mouse/RotationListener$EditRotation.class
new file mode 100644
index 0000000..707b0f1
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/RotationListener$EditRotation.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/RotationListener.class b/bin/jdrafting/gui/controller/mouse/RotationListener.class
new file mode 100644
index 0000000..1dcedf7
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/RotationListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/RulerListener.class b/bin/jdrafting/gui/controller/mouse/RulerListener.class
new file mode 100644
index 0000000..649838c
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/RulerListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/SegmentListener$1.class b/bin/jdrafting/gui/controller/mouse/SegmentListener$1.class
new file mode 100644
index 0000000..9250e45
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/SegmentListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/SegmentListener.class b/bin/jdrafting/gui/controller/mouse/SegmentListener.class
new file mode 100644
index 0000000..ffe665a
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/SegmentListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/SelectionListener.class b/bin/jdrafting/gui/controller/mouse/SelectionListener.class
new file mode 100644
index 0000000..98e7d65
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/SelectionListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/SplineListener.class b/bin/jdrafting/gui/controller/mouse/SplineListener.class
new file mode 100644
index 0000000..afaf295
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/SplineListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/TranslationListener$EditTranslation.class b/bin/jdrafting/gui/controller/mouse/TranslationListener$EditTranslation.class
new file mode 100644
index 0000000..6970ce1
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/TranslationListener$EditTranslation.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/TranslationListener.class b/bin/jdrafting/gui/controller/mouse/TranslationListener.class
new file mode 100644
index 0000000..e3d603d
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/TranslationListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/TriangleListener.class b/bin/jdrafting/gui/controller/mouse/TriangleListener.class
new file mode 100644
index 0000000..5fea694
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/TriangleListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/TrianglePointsListener.class b/bin/jdrafting/gui/controller/mouse/TrianglePointsListener.class
new file mode 100644
index 0000000..01048ce
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/TrianglePointsListener.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/VertexListener$1.class b/bin/jdrafting/gui/controller/mouse/VertexListener$1.class
new file mode 100644
index 0000000..3de4fcb
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/VertexListener$1.class differ
diff --git a/bin/jdrafting/gui/controller/mouse/VertexListener.class b/bin/jdrafting/gui/controller/mouse/VertexListener.class
new file mode 100644
index 0000000..dacfb23
Binary files /dev/null and b/bin/jdrafting/gui/controller/mouse/VertexListener.class differ
diff --git a/bin/jdrafting/resources/images/Thumbs.db b/bin/jdrafting/resources/images/Thumbs.db
new file mode 100644
index 0000000..7c68a30
Binary files /dev/null and b/bin/jdrafting/resources/images/Thumbs.db differ
diff --git a/bin/jdrafting/resources/images/angle.png b/bin/jdrafting/resources/images/angle.png
new file mode 100644
index 0000000..7615a1c
Binary files /dev/null and b/bin/jdrafting/resources/images/angle.png differ
diff --git a/bin/jdrafting/resources/images/arc.png b/bin/jdrafting/resources/images/arc.png
new file mode 100644
index 0000000..257034f
Binary files /dev/null and b/bin/jdrafting/resources/images/arc.png differ
diff --git a/bin/jdrafting/resources/images/arrow.png b/bin/jdrafting/resources/images/arrow.png
new file mode 100644
index 0000000..4f973a0
Binary files /dev/null and b/bin/jdrafting/resources/images/arrow.png differ
diff --git a/bin/jdrafting/resources/images/axial_symmetry.png b/bin/jdrafting/resources/images/axial_symmetry.png
new file mode 100644
index 0000000..942eabf
Binary files /dev/null and b/bin/jdrafting/resources/images/axial_symmetry.png differ
diff --git a/bin/jdrafting/resources/images/backcolor.png b/bin/jdrafting/resources/images/backcolor.png
new file mode 100644
index 0000000..0a9a461
Binary files /dev/null and b/bin/jdrafting/resources/images/backcolor.png differ
diff --git a/bin/jdrafting/resources/images/backward.png b/bin/jdrafting/resources/images/backward.png
new file mode 100644
index 0000000..4d83266
Binary files /dev/null and b/bin/jdrafting/resources/images/backward.png differ
diff --git a/bin/jdrafting/resources/images/baricenter.png b/bin/jdrafting/resources/images/baricenter.png
new file mode 100644
index 0000000..3f797bf
Binary files /dev/null and b/bin/jdrafting/resources/images/baricenter.png differ
diff --git a/bin/jdrafting/resources/images/bisectrix.png b/bin/jdrafting/resources/images/bisectrix.png
new file mode 100644
index 0000000..87f0f53
Binary files /dev/null and b/bin/jdrafting/resources/images/bisectrix.png differ
diff --git a/bin/jdrafting/resources/images/bounds.png b/bin/jdrafting/resources/images/bounds.png
new file mode 100644
index 0000000..b016a64
Binary files /dev/null and b/bin/jdrafting/resources/images/bounds.png differ
diff --git a/bin/jdrafting/resources/images/capable_arc.png b/bin/jdrafting/resources/images/capable_arc.png
new file mode 100644
index 0000000..f22f4a7
Binary files /dev/null and b/bin/jdrafting/resources/images/capable_arc.png differ
diff --git a/bin/jdrafting/resources/images/central_symmetry.png b/bin/jdrafting/resources/images/central_symmetry.png
new file mode 100644
index 0000000..c294a85
Binary files /dev/null and b/bin/jdrafting/resources/images/central_symmetry.png differ
diff --git a/bin/jdrafting/resources/images/circumcenter.png b/bin/jdrafting/resources/images/circumcenter.png
new file mode 100644
index 0000000..ff6382e
Binary files /dev/null and b/bin/jdrafting/resources/images/circumcenter.png differ
diff --git a/bin/jdrafting/resources/images/circumference.png b/bin/jdrafting/resources/images/circumference.png
new file mode 100644
index 0000000..bd45c85
Binary files /dev/null and b/bin/jdrafting/resources/images/circumference.png differ
diff --git a/bin/jdrafting/resources/images/color.png b/bin/jdrafting/resources/images/color.png
new file mode 100644
index 0000000..00c056b
Binary files /dev/null and b/bin/jdrafting/resources/images/color.png differ
diff --git a/bin/jdrafting/resources/images/conics.png b/bin/jdrafting/resources/images/conics.png
new file mode 100644
index 0000000..e45096f
Binary files /dev/null and b/bin/jdrafting/resources/images/conics.png differ
diff --git a/bin/jdrafting/resources/images/copy.png b/bin/jdrafting/resources/images/copy.png
new file mode 100644
index 0000000..e0f3323
Binary files /dev/null and b/bin/jdrafting/resources/images/copy.png differ
diff --git a/bin/jdrafting/resources/images/cursors/angle_cursor.png b/bin/jdrafting/resources/images/cursors/angle_cursor.png
new file mode 100644
index 0000000..1b1a488
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/angle_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/arc_cursor.png b/bin/jdrafting/resources/images/cursors/arc_cursor.png
new file mode 100644
index 0000000..6452dda
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/arc_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/arrow_cursor.png b/bin/jdrafting/resources/images/cursors/arrow_cursor.png
new file mode 100644
index 0000000..71bacda
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/arrow_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/axial_symmetry_cursor.png b/bin/jdrafting/resources/images/cursors/axial_symmetry_cursor.png
new file mode 100644
index 0000000..8accd17
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/axial_symmetry_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/baricenter_cursor.png b/bin/jdrafting/resources/images/cursors/baricenter_cursor.png
new file mode 100644
index 0000000..56674a3
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/baricenter_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/bisectrix_cursor.png b/bin/jdrafting/resources/images/cursors/bisectrix_cursor.png
new file mode 100644
index 0000000..f63c35c
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/bisectrix_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/bounds_cursor.png b/bin/jdrafting/resources/images/cursors/bounds_cursor.png
new file mode 100644
index 0000000..de1d49b
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/bounds_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/capable_arc_cursor.png b/bin/jdrafting/resources/images/cursors/capable_arc_cursor.png
new file mode 100644
index 0000000..bb83284
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/capable_arc_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/central_symmetry_cursor.png b/bin/jdrafting/resources/images/cursors/central_symmetry_cursor.png
new file mode 100644
index 0000000..1c15aab
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/central_symmetry_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/circumcenter_cursor.png b/bin/jdrafting/resources/images/cursors/circumcenter_cursor.png
new file mode 100644
index 0000000..861207d
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/circumcenter_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/circumference_cursor.png b/bin/jdrafting/resources/images/cursors/circumference_cursor.png
new file mode 100644
index 0000000..d877f7e
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/circumference_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/divisions_cursor.png b/bin/jdrafting/resources/images/cursors/divisions_cursor.png
new file mode 100644
index 0000000..c191929
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/divisions_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/dragging_cursor.png b/bin/jdrafting/resources/images/cursors/dragging_cursor.png
new file mode 100644
index 0000000..7752229
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/dragging_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/ellipse_cursor.png b/bin/jdrafting/resources/images/cursors/ellipse_cursor.png
new file mode 100644
index 0000000..a9c82f2
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/ellipse_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/extremes_cursor.png b/bin/jdrafting/resources/images/cursors/extremes_cursor.png
new file mode 100644
index 0000000..694d99d
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/extremes_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/eyedropper_cursor.png b/bin/jdrafting/resources/images/cursors/eyedropper_cursor.png
new file mode 100644
index 0000000..b8f9a5f
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/eyedropper_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/free_hand_down_cursor.png b/bin/jdrafting/resources/images/cursors/free_hand_down_cursor.png
new file mode 100644
index 0000000..bfd0217
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/free_hand_down_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/free_hand_up_cursor.png b/bin/jdrafting/resources/images/cursors/free_hand_up_cursor.png
new file mode 100644
index 0000000..88a9c8e
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/free_hand_up_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/hammer_cursor.png b/bin/jdrafting/resources/images/cursors/hammer_cursor.png
new file mode 100644
index 0000000..a9f1285
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/hammer_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/hand_cursor.png b/bin/jdrafting/resources/images/cursors/hand_cursor.png
new file mode 100644
index 0000000..c01a690
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/hand_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/homothety_cursor.png b/bin/jdrafting/resources/images/cursors/homothety_cursor.png
new file mode 100644
index 0000000..8758662
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/homothety_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/hyperbola_cursor.png b/bin/jdrafting/resources/images/cursors/hyperbola_cursor.png
new file mode 100644
index 0000000..d84e69c
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/hyperbola_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/incenter_cursor.png b/bin/jdrafting/resources/images/cursors/incenter_cursor.png
new file mode 100644
index 0000000..abd59b0
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/incenter_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/jme_cursor.png b/bin/jdrafting/resources/images/cursors/jme_cursor.png
new file mode 100644
index 0000000..156a1b6
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/jme_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/mediatrix_cursor.png b/bin/jdrafting/resources/images/cursors/mediatrix_cursor.png
new file mode 100644
index 0000000..6c238c6
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/mediatrix_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/midpoint_cursor.png b/bin/jdrafting/resources/images/cursors/midpoint_cursor.png
new file mode 100644
index 0000000..473397e
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/midpoint_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/modify_segment_cursor.png b/bin/jdrafting/resources/images/cursors/modify_segment_cursor.png
new file mode 100644
index 0000000..d6a0dae
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/modify_segment_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/ortocenter_cursor.png b/bin/jdrafting/resources/images/cursors/ortocenter_cursor.png
new file mode 100644
index 0000000..6d361a3
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/ortocenter_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/parabola_cursor.png b/bin/jdrafting/resources/images/cursors/parabola_cursor.png
new file mode 100644
index 0000000..d6210fd
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/parabola_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/parallel_cursor.png b/bin/jdrafting/resources/images/cursors/parallel_cursor.png
new file mode 100644
index 0000000..5e1cfef
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/parallel_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/paste_style_cursor.png b/bin/jdrafting/resources/images/cursors/paste_style_cursor.png
new file mode 100644
index 0000000..3aa7f01
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/paste_style_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/perpendicular_cursor.png b/bin/jdrafting/resources/images/cursors/perpendicular_cursor.png
new file mode 100644
index 0000000..5f68e51
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/perpendicular_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/point_cursor.png b/bin/jdrafting/resources/images/cursors/point_cursor.png
new file mode 100644
index 0000000..f24fa86
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/point_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/polygon_cursor.png b/bin/jdrafting/resources/images/cursors/polygon_cursor.png
new file mode 100644
index 0000000..66b26c1
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/polygon_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/polyline_cursor.png b/bin/jdrafting/resources/images/cursors/polyline_cursor.png
new file mode 100644
index 0000000..6cddb54
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/polyline_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/protractor_cursor.png b/bin/jdrafting/resources/images/cursors/protractor_cursor.png
new file mode 100644
index 0000000..112465f
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/protractor_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/rectangle_cursor.png b/bin/jdrafting/resources/images/cursors/rectangle_cursor.png
new file mode 100644
index 0000000..efaa399
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/rectangle_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/reg_poly_cursor.png b/bin/jdrafting/resources/images/cursors/reg_poly_cursor.png
new file mode 100644
index 0000000..5ce64d8
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/reg_poly_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/rotation_cursor.png b/bin/jdrafting/resources/images/cursors/rotation_cursor.png
new file mode 100644
index 0000000..15c7988
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/rotation_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/ruler_cursor.png b/bin/jdrafting/resources/images/cursors/ruler_cursor.png
new file mode 100644
index 0000000..5201f89
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/ruler_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/segment_cursor.png b/bin/jdrafting/resources/images/cursors/segment_cursor.png
new file mode 100644
index 0000000..d683fa9
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/segment_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/spline_cursor.png b/bin/jdrafting/resources/images/cursors/spline_cursor.png
new file mode 100644
index 0000000..8725c5d
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/spline_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/translation_cursor.png b/bin/jdrafting/resources/images/cursors/translation_cursor.png
new file mode 100644
index 0000000..241d3c6
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/translation_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/triangle_cursor.png b/bin/jdrafting/resources/images/cursors/triangle_cursor.png
new file mode 100644
index 0000000..f5c8e0a
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/triangle_cursor.png differ
diff --git a/bin/jdrafting/resources/images/cursors/vertex_cursor.png b/bin/jdrafting/resources/images/cursors/vertex_cursor.png
new file mode 100644
index 0000000..298f0e0
Binary files /dev/null and b/bin/jdrafting/resources/images/cursors/vertex_cursor.png differ
diff --git a/bin/jdrafting/resources/images/delete_all.png b/bin/jdrafting/resources/images/delete_all.png
new file mode 100644
index 0000000..9f63a08
Binary files /dev/null and b/bin/jdrafting/resources/images/delete_all.png differ
diff --git a/bin/jdrafting/resources/images/divisions.png b/bin/jdrafting/resources/images/divisions.png
new file mode 100644
index 0000000..20a6b0e
Binary files /dev/null and b/bin/jdrafting/resources/images/divisions.png differ
diff --git a/bin/jdrafting/resources/images/down.png b/bin/jdrafting/resources/images/down.png
new file mode 100644
index 0000000..f627a91
Binary files /dev/null and b/bin/jdrafting/resources/images/down.png differ
diff --git a/bin/jdrafting/resources/images/ellipse.png b/bin/jdrafting/resources/images/ellipse.png
new file mode 100644
index 0000000..fa6b81f
Binary files /dev/null and b/bin/jdrafting/resources/images/ellipse.png differ
diff --git a/bin/jdrafting/resources/images/end.png b/bin/jdrafting/resources/images/end.png
new file mode 100644
index 0000000..a5e38d8
Binary files /dev/null and b/bin/jdrafting/resources/images/end.png differ
diff --git a/bin/jdrafting/resources/images/exit.png b/bin/jdrafting/resources/images/exit.png
new file mode 100644
index 0000000..1c7d8fb
Binary files /dev/null and b/bin/jdrafting/resources/images/exit.png differ
diff --git a/bin/jdrafting/resources/images/extremes.png b/bin/jdrafting/resources/images/extremes.png
new file mode 100644
index 0000000..c1bc207
Binary files /dev/null and b/bin/jdrafting/resources/images/extremes.png differ
diff --git a/bin/jdrafting/resources/images/eyedropper.png b/bin/jdrafting/resources/images/eyedropper.png
new file mode 100644
index 0000000..2b1c92e
Binary files /dev/null and b/bin/jdrafting/resources/images/eyedropper.png differ
diff --git a/bin/jdrafting/resources/images/fileinfo.png b/bin/jdrafting/resources/images/fileinfo.png
new file mode 100644
index 0000000..9ef7483
Binary files /dev/null and b/bin/jdrafting/resources/images/fileinfo.png differ
diff --git a/bin/jdrafting/resources/images/forward.png b/bin/jdrafting/resources/images/forward.png
new file mode 100644
index 0000000..d43c51e
Binary files /dev/null and b/bin/jdrafting/resources/images/forward.png differ
diff --git a/bin/jdrafting/resources/images/free_hand.png b/bin/jdrafting/resources/images/free_hand.png
new file mode 100644
index 0000000..bce68b2
Binary files /dev/null and b/bin/jdrafting/resources/images/free_hand.png differ
diff --git a/bin/jdrafting/resources/images/fusion.png b/bin/jdrafting/resources/images/fusion.png
new file mode 100644
index 0000000..3088829
Binary files /dev/null and b/bin/jdrafting/resources/images/fusion.png differ
diff --git a/bin/jdrafting/resources/images/github.png b/bin/jdrafting/resources/images/github.png
new file mode 100644
index 0000000..9b0803d
Binary files /dev/null and b/bin/jdrafting/resources/images/github.png differ
diff --git a/bin/jdrafting/resources/images/hammer.png b/bin/jdrafting/resources/images/hammer.png
new file mode 100644
index 0000000..1f44d93
Binary files /dev/null and b/bin/jdrafting/resources/images/hammer.png differ
diff --git a/bin/jdrafting/resources/images/homepage.png b/bin/jdrafting/resources/images/homepage.png
new file mode 100644
index 0000000..698af9d
Binary files /dev/null and b/bin/jdrafting/resources/images/homepage.png differ
diff --git a/bin/jdrafting/resources/images/homothety.png b/bin/jdrafting/resources/images/homothety.png
new file mode 100644
index 0000000..ff24000
Binary files /dev/null and b/bin/jdrafting/resources/images/homothety.png differ
diff --git a/bin/jdrafting/resources/images/hyperbola.png b/bin/jdrafting/resources/images/hyperbola.png
new file mode 100644
index 0000000..12e4914
Binary files /dev/null and b/bin/jdrafting/resources/images/hyperbola.png differ
diff --git a/bin/jdrafting/resources/images/incenter.png b/bin/jdrafting/resources/images/incenter.png
new file mode 100644
index 0000000..325ca96
Binary files /dev/null and b/bin/jdrafting/resources/images/incenter.png differ
diff --git a/bin/jdrafting/resources/images/intersection.png b/bin/jdrafting/resources/images/intersection.png
new file mode 100644
index 0000000..f35a016
Binary files /dev/null and b/bin/jdrafting/resources/images/intersection.png differ
diff --git a/bin/jdrafting/resources/images/invert.png b/bin/jdrafting/resources/images/invert.png
new file mode 100644
index 0000000..deaf165
Binary files /dev/null and b/bin/jdrafting/resources/images/invert.png differ
diff --git a/bin/jdrafting/resources/images/jdrafting.png b/bin/jdrafting/resources/images/jdrafting.png
new file mode 100644
index 0000000..bd0940d
Binary files /dev/null and b/bin/jdrafting/resources/images/jdrafting.png differ
diff --git a/bin/jdrafting/resources/images/jme.png b/bin/jdrafting/resources/images/jme.png
new file mode 100644
index 0000000..18d7c37
Binary files /dev/null and b/bin/jdrafting/resources/images/jme.png differ
diff --git a/bin/jdrafting/resources/images/mediatrix.png b/bin/jdrafting/resources/images/mediatrix.png
new file mode 100644
index 0000000..6d33241
Binary files /dev/null and b/bin/jdrafting/resources/images/mediatrix.png differ
diff --git a/bin/jdrafting/resources/images/midpoint.png b/bin/jdrafting/resources/images/midpoint.png
new file mode 100644
index 0000000..3f69f9a
Binary files /dev/null and b/bin/jdrafting/resources/images/midpoint.png differ
diff --git a/bin/jdrafting/resources/images/modify_segment.png b/bin/jdrafting/resources/images/modify_segment.png
new file mode 100644
index 0000000..010a014
Binary files /dev/null and b/bin/jdrafting/resources/images/modify_segment.png differ
diff --git a/bin/jdrafting/resources/images/names.png b/bin/jdrafting/resources/images/names.png
new file mode 100644
index 0000000..ed17deb
Binary files /dev/null and b/bin/jdrafting/resources/images/names.png differ
diff --git a/bin/jdrafting/resources/images/new.png b/bin/jdrafting/resources/images/new.png
new file mode 100644
index 0000000..212e0d6
Binary files /dev/null and b/bin/jdrafting/resources/images/new.png differ
diff --git a/bin/jdrafting/resources/images/open.png b/bin/jdrafting/resources/images/open.png
new file mode 100644
index 0000000..9e94fa0
Binary files /dev/null and b/bin/jdrafting/resources/images/open.png differ
diff --git a/bin/jdrafting/resources/images/ortocenter.png b/bin/jdrafting/resources/images/ortocenter.png
new file mode 100644
index 0000000..6b595cd
Binary files /dev/null and b/bin/jdrafting/resources/images/ortocenter.png differ
diff --git a/bin/jdrafting/resources/images/parabola.png b/bin/jdrafting/resources/images/parabola.png
new file mode 100644
index 0000000..18b7ecd
Binary files /dev/null and b/bin/jdrafting/resources/images/parabola.png differ
diff --git a/bin/jdrafting/resources/images/parallel.png b/bin/jdrafting/resources/images/parallel.png
new file mode 100644
index 0000000..a99f0f7
Binary files /dev/null and b/bin/jdrafting/resources/images/parallel.png differ
diff --git a/bin/jdrafting/resources/images/paste_style.png b/bin/jdrafting/resources/images/paste_style.png
new file mode 100644
index 0000000..8d5dda6
Binary files /dev/null and b/bin/jdrafting/resources/images/paste_style.png differ
diff --git a/bin/jdrafting/resources/images/perpendicular.png b/bin/jdrafting/resources/images/perpendicular.png
new file mode 100644
index 0000000..0264392
Binary files /dev/null and b/bin/jdrafting/resources/images/perpendicular.png differ
diff --git a/bin/jdrafting/resources/images/point.png b/bin/jdrafting/resources/images/point.png
new file mode 100644
index 0000000..0d79afe
Binary files /dev/null and b/bin/jdrafting/resources/images/point.png differ
diff --git a/bin/jdrafting/resources/images/point_color.png b/bin/jdrafting/resources/images/point_color.png
new file mode 100644
index 0000000..288308a
Binary files /dev/null and b/bin/jdrafting/resources/images/point_color.png differ
diff --git a/bin/jdrafting/resources/images/polygon.png b/bin/jdrafting/resources/images/polygon.png
new file mode 100644
index 0000000..97a7f01
Binary files /dev/null and b/bin/jdrafting/resources/images/polygon.png differ
diff --git a/bin/jdrafting/resources/images/polygon_popup.png b/bin/jdrafting/resources/images/polygon_popup.png
new file mode 100644
index 0000000..2b529f2
Binary files /dev/null and b/bin/jdrafting/resources/images/polygon_popup.png differ
diff --git a/bin/jdrafting/resources/images/polyline.png b/bin/jdrafting/resources/images/polyline.png
new file mode 100644
index 0000000..17c37d2
Binary files /dev/null and b/bin/jdrafting/resources/images/polyline.png differ
diff --git a/bin/jdrafting/resources/images/print.png b/bin/jdrafting/resources/images/print.png
new file mode 100644
index 0000000..2bd3ad1
Binary files /dev/null and b/bin/jdrafting/resources/images/print.png differ
diff --git a/bin/jdrafting/resources/images/protractor.png b/bin/jdrafting/resources/images/protractor.png
new file mode 100644
index 0000000..89c8888
Binary files /dev/null and b/bin/jdrafting/resources/images/protractor.png differ
diff --git a/bin/jdrafting/resources/images/rectangle.png b/bin/jdrafting/resources/images/rectangle.png
new file mode 100644
index 0000000..4067ca9
Binary files /dev/null and b/bin/jdrafting/resources/images/rectangle.png differ
diff --git a/bin/jdrafting/resources/images/redo.png b/bin/jdrafting/resources/images/redo.png
new file mode 100644
index 0000000..dd6aaa5
Binary files /dev/null and b/bin/jdrafting/resources/images/redo.png differ
diff --git a/bin/jdrafting/resources/images/reg_poly.png b/bin/jdrafting/resources/images/reg_poly.png
new file mode 100644
index 0000000..b1a7fef
Binary files /dev/null and b/bin/jdrafting/resources/images/reg_poly.png differ
diff --git a/bin/jdrafting/resources/images/rewind.png b/bin/jdrafting/resources/images/rewind.png
new file mode 100644
index 0000000..ef12b13
Binary files /dev/null and b/bin/jdrafting/resources/images/rewind.png differ
diff --git a/bin/jdrafting/resources/images/rotation.png b/bin/jdrafting/resources/images/rotation.png
new file mode 100644
index 0000000..3b5f5c4
Binary files /dev/null and b/bin/jdrafting/resources/images/rotation.png differ
diff --git a/bin/jdrafting/resources/images/ruler.png b/bin/jdrafting/resources/images/ruler.png
new file mode 100644
index 0000000..a073906
Binary files /dev/null and b/bin/jdrafting/resources/images/ruler.png differ
diff --git a/bin/jdrafting/resources/images/save.png b/bin/jdrafting/resources/images/save.png
new file mode 100644
index 0000000..7ae5502
Binary files /dev/null and b/bin/jdrafting/resources/images/save.png differ
diff --git a/bin/jdrafting/resources/images/save_image.png b/bin/jdrafting/resources/images/save_image.png
new file mode 100644
index 0000000..98b60f1
Binary files /dev/null and b/bin/jdrafting/resources/images/save_image.png differ
diff --git a/bin/jdrafting/resources/images/segment.png b/bin/jdrafting/resources/images/segment.png
new file mode 100644
index 0000000..d2fd409
Binary files /dev/null and b/bin/jdrafting/resources/images/segment.png differ
diff --git a/bin/jdrafting/resources/images/select_all.png b/bin/jdrafting/resources/images/select_all.png
new file mode 100644
index 0000000..ba719b5
Binary files /dev/null and b/bin/jdrafting/resources/images/select_all.png differ
diff --git a/bin/jdrafting/resources/images/selection.png b/bin/jdrafting/resources/images/selection.png
new file mode 100644
index 0000000..ca49a07
Binary files /dev/null and b/bin/jdrafting/resources/images/selection.png differ
diff --git a/bin/jdrafting/resources/images/spline.png b/bin/jdrafting/resources/images/spline.png
new file mode 100644
index 0000000..6b72194
Binary files /dev/null and b/bin/jdrafting/resources/images/spline.png differ
diff --git a/bin/jdrafting/resources/images/translation.png b/bin/jdrafting/resources/images/translation.png
new file mode 100644
index 0000000..2758406
Binary files /dev/null and b/bin/jdrafting/resources/images/translation.png differ
diff --git a/bin/jdrafting/resources/images/triangle.png b/bin/jdrafting/resources/images/triangle.png
new file mode 100644
index 0000000..b6980e7
Binary files /dev/null and b/bin/jdrafting/resources/images/triangle.png differ
diff --git a/bin/jdrafting/resources/images/triangle_popup.png b/bin/jdrafting/resources/images/triangle_popup.png
new file mode 100644
index 0000000..df94312
Binary files /dev/null and b/bin/jdrafting/resources/images/triangle_popup.png differ
diff --git a/bin/jdrafting/resources/images/undo.png b/bin/jdrafting/resources/images/undo.png
new file mode 100644
index 0000000..9cc4262
Binary files /dev/null and b/bin/jdrafting/resources/images/undo.png differ
diff --git a/bin/jdrafting/resources/images/up.png b/bin/jdrafting/resources/images/up.png
new file mode 100644
index 0000000..5be1752
Binary files /dev/null and b/bin/jdrafting/resources/images/up.png differ
diff --git a/bin/jdrafting/resources/images/vertex.png b/bin/jdrafting/resources/images/vertex.png
new file mode 100644
index 0000000..d8defa5
Binary files /dev/null and b/bin/jdrafting/resources/images/vertex.png differ
diff --git a/bin/jdrafting/resources/images/zoom_all.png b/bin/jdrafting/resources/images/zoom_all.png
new file mode 100644
index 0000000..c5c2d78
Binary files /dev/null and b/bin/jdrafting/resources/images/zoom_all.png differ
diff --git a/bin/jdrafting/resources/images/zoom_in.png b/bin/jdrafting/resources/images/zoom_in.png
new file mode 100644
index 0000000..6d0a0f3
Binary files /dev/null and b/bin/jdrafting/resources/images/zoom_in.png differ
diff --git a/bin/jdrafting/resources/images/zoom_out.png b/bin/jdrafting/resources/images/zoom_out.png
new file mode 100644
index 0000000..68f7976
Binary files /dev/null and b/bin/jdrafting/resources/images/zoom_out.png differ
diff --git a/bin/jdrafting/resources/language/language.properties b/bin/jdrafting/resources/language/language.properties
new file mode 100644
index 0000000..07d8d95
--- /dev/null
+++ b/bin/jdrafting/resources/language/language.properties
@@ -0,0 +1,422 @@
+// general
+app_des=is an open-source drafting application to design small Technical Drawing sketches.
This application is inspired by the 'Classical Construction',
also known as 'Ruler-and-compass Construction' or 'Compass-and-straightedge construction'.
However, another drawing tools can be used.
(More info about classical construction: Wikipedia)
+width=Width
+height=Height
+degrees=deg
+not_saved=Not saved
+cancel=Cancel
+
+// labels
+thickness=
Line
thickness
+point_thickness=Point
thickness
+
+// actions
+new=New exercise
+new_des=Start a new exercise
+open=Open...
+open_des=Open an exercise
+save=Save
+save_des=Save exercise
+save_as=Save as...
+save_as_des=Save exercise as
+save_image=Save image...
+save_image_des=Export exercise as image SVG, PNG
+print=Print...
+print_des=Print in selected printer
+fileinfo=Exercise info
+fileinfo_des=Get or modify exercise info
+redo=Redo
+undo=Undo
+move_up=Up shapes
+move_up_des=Increase selected shapes index
+move_down=Down shapes
+move_down_des=Decrease selected shapes index
+copy=Copy selected
+copy_des=Copy and paste selected shapes
+exit=Exit
+exit_des=Quit program
+about=About...
+zoom_all=Zoom all
+zoom_all_des=Adjust content to canvas
+zoom_in=Zoom in
+zoom_in_des=Zoom in
+zoom_out=Zoom out
+zoom_out_des=Zoom out
+delete=Delete selected
+delete_des=Delete selected shapes
+background_color=Canvas color...
+background_color_des=Canvas background color
+color=Shape color...
+color_des=Shape color
+point_color=Point color...
+point_color_des=Point color
+eyedropper=Eyedropper
+eyedropper_des=Capture shape style
+paste_style=Paste style
+paste_style_des=Paste current style color and stroke
+text=See/Hide shape names
+text_des=See/Hide shape names
+backward=Previous frame
+backward_des=Previous frame
+forward=Next frame
+forward_des=Next frame
+end=End frame
+end_des=End frame
+rewind=Rewind
+rewind_des=Rewind
+selection=Rectangular selection
+selection_des=Select shapes in a rectangular area
+invert=Invert selection
+invert_des=Invert selection
+select_all=Select all
+select_all_des=Select all
+point=Point
+point_des=Create a new point
+segment=Segment
+segment_des=Create segment
+arrow=Arrow
+arrow_des=Create single or double arrow
+polygon_tools=Polygon tools
+reg_poly=Regular polygon
+reg_poly_des=Create regular polygon
+polygon=Polygon
+polygon_des=Create polygon
+polyline=Polyline
+polyline_des=Create polyline
+free_hand=Free hand
+free_hand_des=Create an arbitrary shape
+rectangle=Rectangle
+rectangle_des=Create rectangle
+ellipse=Ellipse
+ellipse_des=Create ellipse
+arc=Arc
+arc_des=Create arc
+circumference=Circumference
+circumference_des=Create circumference
+angle=Angle
+angle_des=Create a segment by angle
+triangle_tools=Triangle tools
+triangle=Triangle
+triangle_des=Create triangle
+incenter=Incenter
+ortocenter=Ortocenter
+baricenter=Baricenter
+circumcenter=Circumcenter
+spline=Spline
+spline_des=Create spline between points
+parabola=Parabola
+parabola_des=Create parabola from rectangle bounds
+hyperbola=Hyperbola
+hyperbola_des=Create hyperbola from rectangle bounds
+func=Function
+func_des=Create graph from function
+ruler=Ruler
+ruler_des=Capture distance
+protractor=Protractor
+protractor_des=Capture angle
+divisions=Division points
+divisions_des=Divide shape in points
+modify=Modify segment
+modify_des=Modify a segment along its container straight
+midpoint=Midpoint
+midpoint_des=Set midpoint in the center of the shape bounds
+vertex=Vertex
+vertex_des=Add vertex points to shape
+extremes=Extremes
+extremes_des=Add extreme vertex to open shapes
+inter=Intersection points
+inter_des=Select two or more shapes (none points) to add intersections between them
+fragment=Fragment shape sides
+fragment_des=Fragment shape sides into individual segments
+fusion=Fusion shapes
+fusion_des=Select shapes to be merged. Shift for connect extremes
+bounds=Rectangle bounds
+bounds_des=Create rectangle bounds of a shape
+perp=Perpendicular
+perp_des=Create perpendicular from segment
+para=Parallel
+para_des=Create parallel from segment
+mediatrix=Mediatrix
+mediatrix_des=Create mediatrix of a segment
+bisectrix=Bisectrix
+bisectrix_des=Create bisectrix
+capable_arc=Capable arc
+capable_arc_des=Create capable arc of a segment
+translation=Translate
+translation_des=Translate selected shapes
+rotation=Rotate
+rotation_des=Rotate selected shapes
+homothety=Homothety
+homothety_des=Homothety of the selected shapes
+central_sym=Central symmetry
+central_sym_des=Central symmetry of the selected shapes
+axial_sym=Axial symmetry
+axial_sym_des=Axial symmetry of the selected shapes
+fix_dist=Fix
distance
+
+// menus
+file=File
+edit=Edit
+style=Style
+shapes=Shapes
+exercise=Exercise
+transforms=Transforms
+conics=Conics
+view=View
+appearance=Appearance
+help=Help
+
+item_style=Show/hide style bar
+item_ruler_prot=Show/hide ruler&protractor bar
+item_status=Show/hide status bar
+item_action=Show/hide action bar
+item_shape=Show/hide shape bar
+item_tool=Show/hide tool bar
+show_all=Show all
+hide_all=Hide all
+
+// toolbars
+tools=Tools
+actions=Actions
+tit_style=Line/Point style
+ruler_prot=Ruler and Protractor
+
+// dialogs
+exit_msg=Ignore changes?
+exit_dlg=Exit
+inter_msg=Select two or more shapes (none points)
+inter_dlg=Intersection points error
+ext_dlg=The shape must be an open shape
+ext_title=Error while selecting shape
+bisectrix_dlg=Parallel or coincident segments
+bisectrix_title=Error while calculating bisectrix
+div_dlg=Number of divisions
+reg_poly_dlg=Number of vertex/sides
+save_image_acce1=Image setting
+save_image_acce2=Include background
+save_image_acce3=Include shape names
+overwrite1=File exists, overwrite?
+overwrite2=Overwrite
+exer_prop=Exercise properties
+title=Title
+exer_desc=Exercise description
+shape_name=Shape identifier
+shape_prop=Shape properties
+shape_desc=Shape description
+save_close=Save and Close
+details=Details
+selected_shapes_msg=You must select at least one shape
+homo_dlg=Homothety factor
+dist_mult_dlg=Multiply distance by factor
+jme_dlg=JME expression
+jme_examples=examples
+jme_doc=JME documentation
+jme_min=Min 'x' or 't' value
+jme_max=Max 'x' or 't' value
+jme_intervals=Number of intervals
+
+// new shapes default description
+new_point=point
+new_segment=segment
+new_segment_extreme=segment extreme
+new_arc=arc
+new_circumference=circumference
+new_circumference_center=circumference center
+new_arrow=arrow
+new_triangle=triangle
+new_rectangle=rectangle
+new_square=square
+new_regular_polygon=regular polygon
+new_polygon=polygon
+new_polyline=polyline
+new_ellipse=ellipse
+new_v_axis=vertical axis
+new_h_axis=horizontal axis
+new_parabola=parabola
+new_spline=spline
+new_free_hand=free hand
+new_midpoint=midpoint of
+new_vertex=vertex of
+new_extreme=extreme of
+new_parallel=parallel to
+new_perpendicular=perpendicular to
+new_mediatrix=mediatrix of
+new_bisectrix=bisectrix of
+new_capable_arc=capable arc of
+new_fragment=fragment of
+new_div=division point of
+new_join=intersection between
+new_bounds=bounds of
+new_fusion=fusion of
+new_focus=focus
+new_para_vertex=parabola vertex
+new_para_bounds=parabola bounds
+new_directrix=directrix
+new_hype_branch=hyperbola branch
+new_hype_vertex=hyperbola vertex
+new_hype_bounds=hyperbola bounds
+new_hype_center=hyperbola center
+new_main_axis=hyperbola main axis
+new_img_axis=hyperbola imaginary axis
+new_circumscribed=circumscribed circumference
+new_center_reg=regular polygon center
+
+// status msg
+txt_hand=Use mouse wheel to zoom. Mouse dragging with second buttom to move shapes. Shift over shape for select/unselect several shapes. Drag to move viewport
+txt_eyedropper=Select shape to capture line style. Shift for capture point style
+txt_paste_style1=Select shape to apply line style. Shift for apply point style
+txt_ruler1=Select start point
+txt_ruler2=Select end point. Shift for add to current distance. Control for substract
+txt_prot1=Select vertex angle
+txt_prot2=Select first side point
+txt_prot3=Select second side point
+txt_sel1=Drag mouse to select a rectangular area
+txt_point=Select point position. Control for non-intersection adjusting. Shift to use line style instead of point style
+txt_seg1=Select segment start point
+txt_seg2=Select segment end point. Shift for 45º fixed angles. Control to add extremes
+txt_arrow1=Select arrow start point
+txt_arrow2=Select arrow end point. Shift for 45º fixed angles. Control for double arrow
+txt_circ1=Select circumference center. Shift for switch radius/diameter
+txt_circ2=Select radius. Shift for switch radius/diameter. Control to add center
+txt_arc1=Select arc center
+txt_arc2=Select start angle
+txt_arc3=Select end angle. Control for conjugate angle. Shift for fixed angle. Alt Gr for integer angles
+txt_angle1=Select vertex
+txt_angle2=Select end point of the first side
+txt_angle3=Select end point of the second side. Shift for suplementary angle. Control for complementary angle. Alt for include both sides
+txt_rect1=Select rectangle start point
+txt_rect2=Move mouse to select rectangle end point. Shift for square. You can use ruler
+txt_ellipse1=Select center or corner. Shift for alternate center/corner mode
+txt_ellipse2=Select ellipse size. Control to add axis and focuses. Shift for alternate center/corner mode. You can use ruler
+txt_poly=Select vertex. Double click to finish
+txt_free1=Drag mouse to draw free shape. Double click to finish
+txt_modify1=Select segment to modify
+txt_modify2=Select first extreme
+txt_modify3=Select second extreme. Shift for current line style instead of old segment style
+txt_midpoint=Select shape to add midpoint of the shape bounds. Shift to use line style. Control for centroid
+txt_vtx1=Select shape to add vertex (not recommended for arcs/circumferences)
+txt_ext1=Select shape to add extreme vertex (must be an open shape)
+txt_div1=Select shape to add divisions points. You can use Fix distance
+txt_fragment1=Select shape to fragment sides. Press Shift for use current stroke instead of shape stroke
+txt_bounds1=Select shape to add rectangle bounds
+txt_perp1=Select segment
+txt_perp2=Select perpendicular start
+txt_perp3=Select perpendicular end
+txt_para1=Select segment
+txt_para2=Select parallel start
+txt_para3=Select parallel end
+txt_mediatrix1=Select segment
+txt_mediatrix2=Select mediatrix start
+txt_mediatrix3=Select mediatrix end
+txt_bisectrix1=Select first segment
+txt_bisectrix2=Select second segment
+txt_bisectrix3=Select first bisectrix extreme
+txt_bisectrix4=Select second bisectrix extreme
+txt_cap1=Select segment
+txt_cap2=Select one of the two sides
+txt_translate1=Select first point of direction vector
+txt_translate2=Select second point of direction vector. You can use ruler
+txt_rotation1=Select rotation center
+txt_rotation2=Move mouse to selectangle. Shift for fixed angle. Control for integer angles
+txt_homothety1=Select homothety center. Shift for negative factor. Control for inverted factor
+txt_central_sym1=Select symmetry center
+txt_axial_sym1=Select first point of axis
+txt_axial_sym2=Select second point of axis
+txt_triangle_points1=Select three points. Shift for equilateral. Control for right
+txt_triangle_points2=Select three points
+txt_parabola1=Select parabola bounds start point
+txt_parabola2=Move mouse to select parabola bounds end point. Control to add additional shapes. Shift for square bounds. You can use ruler
+txt_hyperbola1=Select hyperbola bounds start point
+txt_hyperbola2=Move mouse to select end point. You can use the ruler
+txt_hyperbola3=Move mouse to select main axis. Control to add auxiliary shapes
+txt_reg_poly1=Select center of the polygon
+txt_reg_poly2=Select radius. Control to add auxiliary shapes. You can use ruler
+
+// mnemonics
+mne_menu_file=f
+mne_menu_edit=e
+mne_menu_style=s
+mne_menu_shapes=h
+mne_menu_tools=t
+mne_menu_exercise=x
+mne_menu_view=v
+mne_menu_help=l
+mne_menu_transform=t
+mne_menu_trian=t
+mne_menu_poly=o
+mne_menu_conics=i
+mne_menu_appea=a
+
+mne_about=a
+mne_angle=n
+mne_arc=a
+mne_arrow=r
+mne_sym_axial=a
+mne_backward=p
+mne_baricenter=b
+mne_bisectrix=b
+mne_bounds=g
+mne_canvas_col=c
+mne_cap_arc=c
+mne_sym_central=c
+mne_circ=c
+mne_circumcenter=c
+mne_copy=c
+mne_delete=t
+mne_divisions=s
+mne_ellipse=e
+mne_end=e
+mne_ex_metadata=x
+mne_exit=e
+mne_extremes=e
+mne_eyedropper=e
+mne_forward=n
+mne_fragment=f
+mne_free=f
+mne_fusion=u
+mne_homo=h
+mne_hyperbola=h
+mne_incenter=i
+mne_intersection=n
+mne_invert_sel=i
+mne_jme=m
+mne_mediatrix=m
+mne_midpoint=i
+mne_mod_seg=y
+mne_z_up=p
+mne_z_down=d
+mne_new=n
+mne_open=o
+mne_ortocenter=o
+mne_parabola=p
+mne_parallel=a
+mne_paste=a
+mne_perp=p
+mne_point=p
+mne_point_col=p
+mne_polygon=p
+mne_polyline=o
+mne_protractor=o
+mne_rect=e
+mne_redo=r
+mne_reg_pol=r
+mne_rewind=r
+mne_rotation=r
+mne_ruler=l
+mne_save=s
+mne_save_as=a
+mne_save_img=v
+mne_print=p
+mne_segment=s
+mne_sel_all=l
+mne_selection=e
+mne_shape_col=s
+mne_spline=l
+mne_text=s
+mne_trans=t
+mne_triangle=t
+mne_undo=u
+mne_vertex=v
+mne_zoom_all=z
+mne_zoom_in=o
+mne_zoom_out=m
diff --git a/bin/jdrafting/resources/language/language_en.properties b/bin/jdrafting/resources/language/language_en.properties
new file mode 100644
index 0000000..557e9de
--- /dev/null
+++ b/bin/jdrafting/resources/language/language_en.properties
@@ -0,0 +1,422 @@
+// general
+app_des=is an open-source drafting application to design small Technical Drawing sketches.
This application is inspired by the 'Classical Construction',
also known as 'Ruler-and-compass Construction' or 'Compass-and-straightedge construction'.
However, another drawing tools can be used.
(More info about classical construction: Wikipedia)
+width=Width
+height=Height
+degrees=deg
+not_saved=Not saved
+cancel=Cancel
+
+// labels
+thickness=Line
thickness
+point_thickness=Point
thickness
+
+// actions
+new=New exercise
+new_des=Start a new exercise
+open=Open...
+open_des=Open an exercise
+save=Save
+save_des=Save exercise
+save_as=Save as...
+save_as_des=Save exercise as
+save_image=Save image...
+save_image_des=Export exercise as image SVG, PNG
+print=Print...
+print_des=Print in selected printer
+fileinfo=Exercise info
+fileinfo_des=Get or modify exercise info
+redo=Redo
+undo=Undo
+move_up=Up shapes
+move_up_des=Increase selected shapes index
+move_down=Down shapes
+move_down_des=Decrease selected shapes index
+copy=Copy selected
+copy_des=Copy and paste selected shapes
+exit=Exit
+exit_des=Quit program
+about=About...
+zoom_all=Zoom all
+zoom_all_des=Adjust content to canvas
+zoom_in=Zoom in
+zoom_in_des=Zoom in
+zoom_out=Zoom out
+zoom_out_des=Zoom out
+delete=Delete selected
+delete_des=Delete selected shapes
+background_color=Canvas color...
+background_color_des=Canvas background color
+color=Shape color...
+color_des=Shape color
+point_color=Point color...
+point_color_des=Point color
+eyedropper=Eyedropper
+eyedropper_des=Capture shape style
+paste_style=Paste style
+paste_style_des=Paste current style color and stroke
+text=See/Hide shape names
+text_des=See/Hide shape names
+backward=Previous frame
+backward_des=Previous frame
+forward=Next frame
+forward_des=Next frame
+end=End frame
+end_des=End frame
+rewind=Rewind
+rewind_des=Rewind
+selection=Rectangular selection
+selection_des=Select shapes in a rectangular area
+invert=Invert selection
+invert_des=Invert selection
+select_all=Select all
+select_all_des=Select all
+point=Point
+point_des=Create a new point
+segment=Segment
+segment_des=Create segment
+arrow=Arrow
+arrow_des=Create single or double arrow
+polygon_tools=Polygon tools
+reg_poly=Regular polygon
+reg_poly_des=Create regular polygon
+polygon=Polygon
+polygon_des=Create polygon
+polyline=Polyline
+polyline_des=Create polyline
+free_hand=Free hand
+free_hand_des=Create an arbitrary shape
+rectangle=Rectangle
+rectangle_des=Create rectangle
+ellipse=Ellipse
+ellipse_des=Create ellipse
+arc=Arc
+arc_des=Create arc
+circumference=Circumference
+circumference_des=Create circumference
+angle=Angle
+angle_des=Create a segment by angle
+triangle_tools=Triangle tools
+triangle=Triangle
+triangle_des=Create triangle
+incenter=Incenter
+ortocenter=Ortocenter
+baricenter=Baricenter
+circumcenter=Circumcenter
+spline=Spline
+spline_des=Create spline between points
+parabola=Parabola
+parabola_des=Create parabola from rectangle bounds
+hyperbola=Hyperbola
+hyperbola_des=Create hyperbola from rectangle bounds
+func_des=Create graph from function
+func=Function
+ruler=Ruler
+ruler_des=Capture distance
+protractor=Protractor
+protractor_des=Capture angle
+divisions=Division points
+divisions_des=Divide shape in points
+modify=Modify segment
+modify_des=Modify a segment along its container straight
+midpoint=Midpoint
+midpoint_des=Set midpoint in the center of the shape bounds
+vertex=Vertex
+vertex_des=Add vertex points to shape
+extremes=Extremes
+extremes_des=Add extreme vertex to open shapes
+inter=Intersection points
+inter_des=Select two or more shapes (none points) to add intersections between them
+fragment=Fragment shape sides
+fragment_des=Fragment shape sides into individual segments
+fusion=Fusion shapes
+fusion_des=Select shapes to be merged. Shift for connect extremes
+bounds=Rectangle bounds
+bounds_des=Create rectangle bounds of a shape
+perp=Perpendicular
+perp_des=Create perpendicular from segment
+para=Parallel
+para_des=Create parallel from segment
+mediatrix=Mediatrix
+mediatrix_des=Create mediatrix of a segment
+bisectrix=Bisectrix
+bisectrix_des=Create bisectrix
+capable_arc=Capable arc
+capable_arc_des=Create capable arc of a segment
+translation=Translate
+translation_des=Translate selected shapes
+rotation=Rotate
+rotation_des=Rotate selected shapes
+homothety=Homothety
+homothety_des=Homothety of the selected shapes
+central_sym=Central symmetry
+central_sym_des=Central symmetry of the selected shapes
+axial_sym=Axial symmetry
+axial_sym_des=Axial symmetry of the selected shapes
+fix_dist=Fix
distance
+
+// menus
+file=File
+edit=Edit
+style=Style
+shapes=Shapes
+exercise=Exercise
+transforms=Transforms
+conics=Conics
+view=View
+appearance=Appearance
+help=Help
+
+item_style=Show/hide style bar
+item_ruler_prot=Show/hide ruler&protractor bar
+item_status=Show/hide status bar
+item_action=Show/hide action bar
+item_shape=Show/hide shape bar
+item_tool=Show/hide tool bar
+show_all=Show all
+hide_all=Hide all
+
+// toolbars
+tools=Tools
+actions=Actions
+tit_style=Line/Point style
+ruler_prot=Ruler and Protractor
+
+// dialogs
+exit_msg=Ignore changes?
+exit_dlg=Exit
+inter_msg=Select two or more shapes (none points)
+inter_dlg=Intersection points error
+ext_dlg=The shape must be an open shape
+ext_title=Error while selecting shape
+bisectrix_dlg=Parallel or coincident segments
+bisectrix_title=Error while calculating bisectrix
+div_dlg=Number of divisions
+reg_poly_dlg=Number of vertex/sides
+save_image_acce1=Image setting
+save_image_acce2=Include background
+save_image_acce3=Include shape names
+overwrite1=File exists, overwrite?
+overwrite2=Overwrite
+exer_prop=Exercise properties
+title=Title
+exer_desc=Exercise description
+shape_name=Shape identifier
+shape_prop=Shape properties
+shape_desc=Shape description
+save_close=Save and Close
+details=Details
+selected_shapes_msg=You must select at least one shape
+homo_dlg=Homothety factor
+dist_mult_dlg=Multiply distance by factor
+jme_dlg=JME expression
+jme_examples=examples
+jme_doc=JME documentation
+jme_min=Min 'x' or 't' value
+jme_max=Max 'x' or 't' value
+jme_intervals=Number of intervals
+
+// new shapes default description
+new_point=point
+new_segment=segment
+new_segment_extreme=segment extreme
+new_arc=arc
+new_circumference=circumference
+new_circumference_center=circumference center
+new_arrow=arrow
+new_triangle=triangle
+new_rectangle=rectangle
+new_square=square
+new_ellipse=ellipse
+new_regular_polygon=regular polygon
+new_polygon=polygon
+new_polyline=polyline
+new_v_axis=vertical axis
+new_h_axis=horizontal axis
+new_parabola=parabola
+new_spline=spline
+new_free_hand=free hand
+new_midpoint=midpoint of
+new_vertex=vertex of
+new_extreme=extreme of
+new_parallel=parallel to
+new_perpendicular=perpendicular to
+new_mediatrix=mediatrix of
+new_bisectrix=bisectrix of
+new_capable_arc=capable arc of
+new_fragment=fragment of
+new_div=division point of
+new_join=intersection between
+new_bounds=bounds of
+new_fusion=fusion of
+new_focus=focus
+new_para_vertex=parabola vertex
+new_para_bounds=parabola bounds
+new_directrix=directrix
+new_hype_branch=hyperbola branch
+new_hype_vertex=hyperbola vertex
+new_hype_bounds=hyperbola bounds
+new_hype_center=hyperbola center
+new_main_axis=hyperbola main axis
+new_img_axis=hyperbola imaginary axis
+new_circumscribed=circumscribed circumference
+new_center_reg=regular polygon center
+
+// status msg
+txt_hand=Use mouse wheel to zoom. Mouse dragging with second buttom to move shapes. Shift over shape for select/unselect several shapes. Drag to move viewport
+txt_eyedropper=Select shape to capture line style. Shift for capture point style
+txt_paste_style1=Select shape to apply line style. Shift for apply point style
+txt_ruler1=Select start point
+txt_ruler2=Select end point. Shift for add to current distance. Control for substract
+txt_prot1=Select vertex angle
+txt_prot2=Select first side point
+txt_prot3=Select second side point
+txt_sel1=Drag mouse to select a rectangular area
+txt_point=Select point position. Control for non-intersection adjusting. Shift to use line style instead of point style
+txt_seg1=Select segment start point
+txt_seg2=Select segment end point. Shift for 45º fixed angles. Control to add extremes
+txt_arrow1=Select arrow start point
+txt_arrow2=Select arrow end point. Shift for 45º fixed angles. Control for double arrow
+txt_circ1=Select circumference center. Shift for switch radius/diameter
+txt_circ2=Select radius. Shift for switch radius/diameter. Control to add center
+txt_arc1=Select arc center
+txt_arc2=Select start angle
+txt_arc3=Select end angle. Control for conjugate angle. Shift for fixed angle. Alt Gr for integer angles
+txt_angle1=Select vertex
+txt_angle2=Select end point of the first side
+txt_angle3=Select end point of the second side. Shift for suplementary angle. Control for complementary angle. Alt for include both sides
+txt_rect1=Select rectangle start point
+txt_rect2=Move mouse to select rectangle end point. Shift for square. You can use ruler
+txt_ellipse1=Select center or corner. Shift for alternate center/corner mode
+txt_ellipse2=Select ellipse size. Control to add axis and focuses. Shift for alternate center/corner mode. You can use ruler
+txt_poly=Select vertex. Double click to finish
+txt_free1=Drag mouse to draw free shape. Double click to finish
+txt_modify1=Select segment to modify
+txt_modify2=Select first extreme
+txt_modify3=Select second extreme. Shift for current line style instead of old segment style
+txt_midpoint=Select shape to add midpoint of the shape bounds. Shift to use line style. Control for centroid
+txt_vtx1=Select shape to add vertex (not recommended for arcs/circumferences)
+txt_ext1=Select shape to add extreme vertex (must be an open shape)
+txt_div1=Select shape to add divisions points. You can use Fix distance
+txt_fragment1=Select shape to fragment sides. Press Shift for use current stroke instead of shape stroke
+txt_bounds1=Select shape to add rectangle bounds
+txt_perp1=Select segment
+txt_perp2=Select perpendicular start
+txt_perp3=Select perpendicular end
+txt_para1=Select segment
+txt_para2=Select parallel start
+txt_para3=Select parallel end
+txt_mediatrix1=Select segment
+txt_mediatrix2=Select mediatrix start
+txt_mediatrix3=Select mediatrix end
+txt_bisectrix1=Select first segment
+txt_bisectrix2=Select second segment
+txt_bisectrix3=Select first bisectrix extreme
+txt_bisectrix4=Select second bisectrix extreme
+txt_cap1=Select segment
+txt_cap2=Select one of the two sides
+txt_translate1=Select first point of direction vector
+txt_translate2=Select second point of direction vector. You can use ruler
+txt_rotation1=Select rotation center
+txt_rotation2=Move mouse to selectangle. Shift for fixed angle. Control for integer angles
+txt_homothety1=Select homothety center. Shift for negative factor. Control for inverted factor
+txt_central_sym1=Select symmetry center
+txt_axial_sym1=Select first point of axis
+txt_axial_sym2=Select second point of axis
+txt_triangle_points1=Select three points. Shift for equilateral. Control for right
+txt_triangle_points2=Select three points
+txt_parabola1=Select parabola bounds start point
+txt_parabola2=Move mouse to select parabola bounds end point. Control to add additional shapes. Shift for square bounds. You can use ruler
+txt_hyperbola1=Select hyperbola bounds start point
+txt_hyperbola2=Move mouse to select end point. You can use the ruler
+txt_hyperbola3=Move mouse to select main axis. Control to add auxiliary shapes
+txt_reg_poly1=Select center of the polygon
+txt_reg_poly2=Select radius. Control to add auxiliary shapes. You can use ruler
+
+// mnemonics
+mne_menu_file=f
+mne_menu_edit=e
+mne_menu_style=s
+mne_menu_shapes=h
+mne_menu_tools=t
+mne_menu_exercise=x
+mne_menu_view=v
+mne_menu_help=l
+mne_menu_transform=t
+mne_menu_trian=t
+mne_menu_poly=o
+mne_menu_conics=i
+mne_menu_appea=a
+
+mne_about=a
+mne_angle=n
+mne_arc=a
+mne_arrow=r
+mne_sym_axial=a
+mne_backward=p
+mne_baricenter=b
+mne_bisectrix=b
+mne_bounds=g
+mne_canvas_col=c
+mne_cap_arc=c
+mne_sym_central=c
+mne_circ=c
+mne_circumcenter=c
+mne_copy=c
+mne_delete=t
+mne_divisions=s
+mne_ellipse=e
+mne_end=e
+mne_ex_metadata=x
+mne_exit=e
+mne_extremes=e
+mne_eyedropper=e
+mne_forward=n
+mne_fragment=f
+mne_free=f
+mne_fusion=u
+mne_homo=h
+mne_hyperbola=h
+mne_incenter=i
+mne_intersection=n
+mne_invert_sel=i
+mne_jme=m
+mne_mediatrix=m
+mne_midpoint=i
+mne_mod_seg=y
+mne_z_up=p
+mne_z_down=d
+mne_new=n
+mne_open=o
+mne_ortocenter=o
+mne_parabola=p
+mne_parallel=a
+mne_paste=a
+mne_perp=p
+mne_point=p
+mne_point_col=p
+mne_polygon=p
+mne_polyline=o
+mne_protractor=o
+mne_rect=e
+mne_redo=r
+mne_reg_pol=r
+mne_rewind=r
+mne_rotation=r
+mne_ruler=l
+mne_save=s
+mne_save_as=a
+mne_save_img=v
+mne_print=p
+mne_segment=s
+mne_sel_all=l
+mne_selection=e
+mne_shape_col=s
+mne_spline=l
+mne_text=s
+mne_trans=t
+mne_triangle=t
+mne_undo=u
+mne_vertex=v
+mne_zoom_all=z
+mne_zoom_in=o
+mne_zoom_out=m
diff --git a/bin/jdrafting/resources/language/language_es.properties b/bin/jdrafting/resources/language/language_es.properties
new file mode 100644
index 0000000..59cf468
--- /dev/null
+++ b/bin/jdrafting/resources/language/language_es.properties
@@ -0,0 +1,423 @@
+// general
+app_des=es una aplicación open-source para diseñar pequeños ejercicios de Dibujo Técnico.
Esta aplicación está inspirada por la 'Construcción clásica',
también conocida como 'Construcción de regla y compás'.
Sin embargo, otras herramientas de trazado pueden usarse.
(Más info sobre construcción clásica: Wikipedia)
+width=Ancho
+height=Alto
+degrees=grad
+not_saved=No guardado
+cancel=Cancelar
+
+// labels
+thickness=Grosor
de línea
+point_thickness=Grosor
de punto
+
+// actions
+new=Nuevo
+new_des=Empezar un nuevo ejercicio
+open=Abrir...
+open_des=Abrir un ejercicio
+save=Guardar
+save_des=Guardar ejercicio
+save_as=Guardar como...
+save_as_des=Guardar ejercicio como
+save_image=Guardar imagen...
+save_image_des=Exportar ejercicio como imagen SVG, PNG
+print=Imprimir...
+print_des=Imprimir en la impresora seleccionada
+fileinfo=Ejercicio info
+fileinfo_des=Obtener o modificar la información del ejercicio
+redo=Rehacer
+undo=Deshacer
+move_up=Subir figuras
+move_up_des=Incrementar índice de las figuras seleccionadas
+move_down=Bajar figuras
+move_down_des=Decrementar índice de las figuras seleccionadas
+copy=Copiar seleccionadas
+copy_des=Copiar y pegar figuras seleccionadas
+exit=Salir
+exit_des=Salir
+about=Acerca de...
+zoom_all=Zoom a todo
+zoom_all_des=Ajustar contenido a lienzo
+zoom_in=Aumentar Zoom
+zoom_in_des=Aumentar Zoom
+zoom_out=Disminuir Zoom
+zoom_out_des=Disminuir Zoom
+delete=Borrar seleccionadas
+delete_des=Borrar figuras seleccionadas
+background_color=Color del lienzo...
+background_color_des=Color del lienzo
+color=Color de la figura...
+color_des=Color de la figura
+point_color=Color de punto...
+point_color_des=Color de punto
+eyedropper=Cuentagotas
+eyedropper_des=Capturar estilo de figura
+paste_style=Pegar estilo
+paste_style_des=Pegar actual estilo y color de línea
+text=Mostrar/ocultar nombre figuras
+text_des=Mostrar/ocultar nombre figuras
+backward=Paso previo
+backward_des=Paso previo
+forward=Siguiente paso
+forward_des=Siguiente paso
+end=Final
+end_des=Final
+rewind=Inicio
+rewind_des=Inicio
+selection=Selección rectangular
+selection_des=Seleccionar figuras en un área rectangular
+invert=Invertir selección
+invert_des=Invertir selección
+select_all=Seleccionar todo
+select_all_des=Seleccionar todo
+point=Punto
+point_des=Crear un punto nuevo
+segment=Segmento
+segment_des=Crear segmento
+arrow=Flecha
+arrow_des=Crear flecha simple o doble
+polygon_tools=Herramientas de polígono
+reg_poly=Polígono regular
+reg_poly_des=Crear polígono regular
+polygon=Polígono
+polygon_des=Crear polígono
+polyline=Polilínea
+polyline_des=Crear polilínea
+free_hand=Mano libre
+free_hand_des=Crear una figura arbitraria
+rectangle=Rectangulo
+rectangle_des=Crear rectángulo
+ellipse=Elipse
+ellipse_des=Crear elipse
+arc=Arco
+arc_des=Crear arco
+circumference=Circunferencia
+circumference_des=Crear circunferencia
+angle=Ángulo
+angle_des=Crear un segmento por ángulo
+triangle_tools=Herramientas de triángulo
+triangle=Triángulo
+triangle_des=Crear triángulo
+incenter=Incentro
+ortocenter=Ortocentro
+baricenter=Baricentro
+circumcenter=Circuncentro
+spline=Spline
+spline_des=Crear spline entre puntos
+parabola=Parábola
+parabola_des=Crear parábola a partir de rectángulo frontera
+hyperbola=Hipérbola
+hyperbola_des=Crear hipérbola a partir de rectángulo frontera
+func_des=Crear gráfico desde función
+func=Función
+ruler=Regla
+ruler_des=Capturar distancia
+protractor=Transportador
+protractor_des=Capturar ángulo
+divisions=Puntos de división
+divisions_des=Dividir figura en puntos
+modify=Modificar segmento
+modify_des=Modifica un segmento en su recta contenedora
+midpoint=Punto medio
+midpoint_des=Punto medio del rectángulo contenedor de la figura
+vertex=Vértices
+vertex_des=Añadir vértices a la figura
+extremes=Extremos
+extremes_des=Añadir extremos a una figura no cerrada
+inter=Puntos de intersección
+inter_des=Seleccionar dos o más figuras (no puntos) para añadir intersecciones entre ellas
+fragment=Fragmentar lados
+fragment_des=Fragmenta una figura en sus lados constituyentes
+fusion=Mezclar figuras
+fusion_des=Seleccionar figuras para ser mezcladas. Shift para conectar extremos
+bounds=Rectángulo frontera
+bounds_des=Crear rectángulo frontera de una figura
+perp=Perpendicular
+perp_des=Perpendicular de un segmento
+para=Paralela
+para_des=Paralela a un segmento
+mediatrix=Mediatriz
+mediatrix_des=Mediatriz de un segmento
+bisectrix=Bisectriz
+bisectrix_des=Bisectriz entre dos segmentos
+capable_arc=Arco capaz
+capable_arc_des=Arco capaz de un segmento
+translation=Trasladar
+translation_des=Trasladar figuras seleccionadas
+rotation=Rotar
+rotation_des=Rotar figuras seleccionadas
+homothety=Homotecia
+homothety_des=Homotecia de las figuras seleccionadas
+central_sym=Simetría central
+central_sym_des=Simetría central de las figuras seleccionadas
+axial_sym=Simetría axial
+axial_sym_des=Simetría axial de las figuras seleccionadas
+fix_dist=Fijar
distancia
+
+// menus
+file=Archivo
+edit=Editar
+style=Estilo
+shapes=Formas
+exercise=Ejercicio
+transforms=Transformaciones
+conics=Cónicas
+view=Vista
+appearance=Apariencia
+help=Ayuda
+
+item_style=Mostrar/Ocultar barra de estilo
+item_ruler_prot=Mostrar/Ocultar barra de regla y compás
+item_status=Mostrar/Ocultar barra de estado
+item_action=Mostrar/Ocultar barra de acciones
+item_shape=Mostrar/Ocultar barra de figuras
+item_tool=Mostrar/Ocultar barra de herramientas
+show_all=Mostrar todo
+hide_all=Ocultar todo
+
+// toolbars
+tools=Herramientas
+actions=Acciones
+tit_style=Estilo de línea/punto
+ruler_prot=Regla y Transportador
+
+// dialogs
+exit_msg=Ignorar cambios?
+exit_dlg=Salir
+inter_msg=Seleccione dos o más figuras (puntos no)
+inter_dlg=Error en la intersección
+ext_dlg=La figura debe ser abierta
+ext_title=Error al seleccionar figura
+bisectrix_dlg=Segmentos paralelos o coincidentes
+bisectrix_title=Error en bisectriz
+div_dlg=Número de divisiones
+reg_poly_dlg=Número de vértices/lados
+save_image_acce1=Parámetros de imagen
+save_image_acce2=Incluir fondo
+save_image_acce3=Incluir nombre de figuras
+overwrite1=El fichero existe, ¿sobreescribir?
+overwrite2=Sobreescribir
+exer_prop=Propiedades del ejercicio
+title=Título
+exer_desc=Descripción del ejercicio
+shape_name=Nombre de la figura
+shape_prop=Propiedades de la figura
+shape_desc=Descripción de la figura
+save_close=Guardar y cerrar
+details=Detalles
+selected_shapes_msg=Se debe seleccionar al menos una figura
+homo_dlg=Factor de homotecia
+dist_mult_dlg=Multiplicar distancia por factor
+jme_dlg=Expresión JME
+jme_examples=ejemplos
+jme_doc=Documentación JME
+jme_min=Mínimo valor 'x' o 't'
+jme_max=Máximo valor 'x' o 't'
+jme_intervals=Número de intervalos
+
+// new shapes default description
+new_point=punto
+new_segment=segmento
+new_segment_extreme=extremo de segmento
+new_arc=arco
+new_circumference=circunferencia
+new_circumference_center=centro circunferencia
+new_arrow=flecha
+new_triangle=triángulo
+new_rectangle=rentángulo
+new_square=cuadrado
+new_regular_polygon=polígono regular
+new_polygon=polígono
+new_polyline=polilínea
+new_ellipse=elipse
+new_v_axis=eje vertical
+new_h_axis=eje horizontal
+new_parabola=parábola
+new_spline=spline
+new_free_hand=mano alzada
+new_midpoint=punto medio de
+new_vertex=vértice de
+new_extreme=extremo de
+new_parallel=paralela a
+new_perpendicular=perpendicular a
+new_mediatrix=mediatriz de
+new_bisectrix=bisectriz de
+new_capable_arc=arco capaz de
+new_fragment=fragmento de
+new_div=division de
+new_join=intersección entre
+new_bounds=frontera de
+new_fusion=fusión de
+new_focus=foco
+new_para_vertex=vértice de parábola
+new_para_bounds=frontera de parábola
+new_directrix=directriz
+new_hype_branch=rama de hipérbola
+new_hype_vertex=vértice de hipérbola
+new_hype_bounds=frontera de hipérbola
+new_hype_center=centro de hipérbola
+new_main_axis=eje principal de hipérbola
+new_img_axis=eje imaginario de hipérbola
+new_circumscribed=circunferencia circunscrita
+new_center_reg=centro de polígono regular
+
+// status msg
+txt_hand=Use rueda de ratón para hacer zoom. Arrastrar ratón con botón secundario para mover figuras. Shift sobre la figura para seleccionar/deseleccionar.
+txt_eyedropper=Seleccionar figura para capturar estilo de línea. Shift para capturar estilo de punto
+txt_paste_style1=Seleccionar figura para aplicar estilo de línea. Shift para aplicar estilo de punto
+txt_ruler1=Seleccionar punto de inicio
+txt_ruler2=Seleccionar punto final. Shift para añadir distancia. Control para restar
+txt_prot1=Seleccionar vértice del ángulo
+txt_prot2=Seleccionar primer lado
+txt_prot3=Seleccionar segundo lado
+txt_sel1=Arrastrar ratón para seleccionar área rectangular
+txt_point=Seleccionar posición del punto. Control para no ajustar a intersección. Shift para usar estilo de línea en lugar de punto
+txt_seg1=Seleccionar punto de inicio
+txt_seg2=Seleccionar punto final. Shift para ángulos fijos cada 45º. Control para añadir extremos
+txt_arrow1=Seleccionar punto de inicio
+txt_arrow2=Seleccionar punto final. Shift para ángulos fijos cada 45º. Control para flecha doble
+txt_circ1=Seleccionar centro de la circunferencia. Shift para intercambiar radio/diametro
+txt_circ2=Seleccionar radio. Shift para intercambiar radio/diametro. Control para añadir centro
+txt_arc1=Seleccionar centro del arco
+txt_arc2=Seleccionar ángulo inicial
+txt_arc3=Seleccionar ángulo final. Control para ángulo conjugado. Shift para ángulo fijo. Alt para ángulos enteros
+txt_angle1=Seleccionar vértice
+txt_angle2=Seleccionar primer lado
+txt_angle3=Seleccionar segundo lado. Shift para ángulo suplementario. Control para ángulo complementario. Alt para añadir ambos lados
+txt_rect1=Selecionar punto inicial del rectángulo
+txt_rect2=Mover ratón para seleccionar punto final. Shift para cuadrado. Puede usar la regla
+txt_ellipse1=Seleccionar centro o esquina. Shift para modo centro/esquina
+txt_ellipse2=Seleccionar tamaño de la elipse. Control para añadir ejes y focos. Shift para modo centro/esquina. Puede usar la regla
+txt_poly=Seleccionar vértices. Doble click para terminar
+txt_free1=Arrartre ratón para dibujar una figura arbitraria. Doble click para terminar
+txt_modify1=Seleccionar segmento a modificar
+txt_modify2=Seleccionar primer extremo
+txt_modify3=Seleccionar segundo extremo. Shift para actual estilo de línea en lugar del estilo de la figura
+txt_midpoint=Seleccionar figura para añadir punto medio del rectángulo frontera. Shift para usar estilo de línea. Control para centroide
+txt_vtx1=Seleccione figura para añadir vértices (no recomendado para arcos, circumferencias)
+txt_ext1=Seleccione figura para añadir extremos (debe ser una figura abierta)
+txt_div1=Seleccione figura para añadir puntos de división. Puede usar la regla para una distancia fijada
+txt_fragment1=Seleccionar figura para fragmentar lados. Shift para usar estilo actual en lugar de estilo de figura
+txt_bounds1=Seleccionar figura para añadir rectángulo frontera
+txt_perp1=Seleccione segmento
+txt_perp2=Seleccione comienzo de la perpendicular
+txt_perp3=Seleccione fin de la perpendicular
+txt_para1=Seleccione segmento
+txt_para2=Seleccione comienzo de la paralela
+txt_para3=Seleccione fin de la paralela
+txt_mediatrix1=Seleccione segmento
+txt_mediatrix2=Seleccione comienzo de la mediatriz
+txt_mediatrix3=Seleccione final de la mediatriz
+txt_bisectrix1=Seleccione primer segmento
+txt_bisectrix2=Seleccione segundo segmento
+txt_bisectrix3=Seleccione comienzo de la bisectriz
+txt_bisectrix4=Seleccione final de la bisectriz
+txt_cap1=Seleccione segmento
+txt_cap2=Seleccione uno de los dos lados
+txt_translate1=Seleccione primer punto del vector de dirección
+txt_translate2=Seleccione segundo punto del vector de dirección. Puede usar la regla
+txt_rotation1=Seleccione centro de rotación
+txt_rotation2=Mueva ratón para seleccionar ángulo. Shift para ángulos fijos. Control para ángulos enteros
+txt_homothety1=Seleccione centro de homotecia. Shift para factor negativo. Control para invertir factor
+txt_central_sym1=Seleccione centro de simetría
+txt_axial_sym1=Seleccione primer punto del eje
+txt_axial_sym2=Seleccione segundo punto del eje
+txt_triangle_points1=Seleccione tres puntos. Shift para equilátero. Control para rectángulo
+txt_triangle_points2=Seleccione tres puntos
+txt_parabola1=Selecionar punto inicial de la frontera de la parábola
+txt_parabola2=Mover ratón para seleccionar punto final. Control para añadir figuras auxiliares. Shift para frontera cuadrada. Puede usar la regla
+txt_hyperbola1=Selecionar punto inicial de la frontera de la hipérbola
+txt_hyperbola2=Mover ratón para seleccionar punto final. Puede usar la regla
+txt_hyperbola3=Mover ratón para seleccionar eje principal. Control para añadir figuras auxiliares
+txt_reg_poly1=Seleccione centro del polígono
+txt_reg_poly2=Seleccione radio. Control para añadir figuras auxiliares. Puede usar la regla
+
+
+// mnemonics
+mne_menu_file=a
+mne_menu_edit=e
+mne_menu_style=s
+mne_menu_shapes=f
+mne_menu_tools=h
+mne_menu_exercise=j
+mne_menu_view=v
+mne_menu_help=y
+mne_menu_transform=t
+mne_menu_trian=h
+mne_menu_poly=e
+mne_menu_conics=i
+mne_menu_appea=a
+
+mne_about=a
+mne_angle=n
+mne_arc=a
+mne_arrow=f
+mne_sym_axial=i
+mne_backward=p
+mne_baricenter=b
+mne_bisectrix=b
+mne_bounds=c
+mne_canvas_col=l
+mne_cap_arc=r
+mne_sym_central=s
+mne_circ=c
+mne_circumcenter=c
+mne_copy=c
+mne_delete=o
+mne_divisions=n
+mne_ellipse=e
+mne_end=f
+mne_ex_metadata=e
+mne_exit=s
+mne_extremes=e
+mne_eyedropper=u
+mne_forward=s
+mne_fragment=f
+mne_free=m
+mne_fusion=z
+mne_homo=h
+mne_hyperbola=h
+mne_incenter=i
+mne_intersection=s
+mne_invert_sel=i
+mne_jme=t
+mne_mediatrix=m
+mne_midpoint=u
+mne_mod_seg=o
+mne_z_up=u
+mne_z_down=b
+mne_new=n
+mne_open=a
+mne_ortocenter=o
+mne_parabola=p
+mne_parallel=a
+mne_paste=p
+mne_perp=p
+mne_point=p
+mne_point_col=o
+mne_polygon=o
+mne_polyline=l
+mne_protractor=d
+mne_rect=r
+mne_redo=r
+mne_reg_pol=p
+mne_rewind=i
+mne_rotation=r
+mne_ruler=g
+mne_save=g
+mne_save_as=u
+mne_save_img=r
+mne_print=i
+mne_segment=s
+mne_sel_all=e
+mne_selection=s
+mne_shape_col=c
+mne_spline=l
+mne_text=s
+mne_trans=t
+mne_triangle=t
+mne_undo=d
+mne_vertex=v
+mne_zoom_all=z
+mne_zoom_in=u
+mne_zoom_out=d
diff --git a/src/jdrafting/gui/Application.java b/src/jdrafting/gui/Application.java
index 25b7567..c73f855 100644
--- a/src/jdrafting/gui/Application.java
+++ b/src/jdrafting/gui/Application.java
@@ -133,6 +133,7 @@
import jdrafting.gui.controller.actions.PointColorAction;
import jdrafting.gui.controller.actions.PolyLineAction;
import jdrafting.gui.controller.actions.PolygonAction;
+import jdrafting.gui.controller.actions.PrintAction;
import jdrafting.gui.controller.actions.ProtractorAction;
import jdrafting.gui.controller.actions.RectangleAction;
import jdrafting.gui.controller.actions.RedoAction;
@@ -172,7 +173,7 @@ public class Application extends JFrame
//////////////////////
// metainfo
public static final String APPNAME = "JDrafting";
- public static final String VERSION = "0.1.10.1";
+ public static final String VERSION = "0.1.10.2";
public static final String AUTHOR = "Miguel Alejandro Moreno Barrientos";
public static final String COPYLEFT = "2016,2020";
public static final String PROJECT_PAGE =
@@ -606,10 +607,14 @@ private void createActions()
menuFile.add( action = new SaveImageAction( this ) );
actionMap.put( action.getValue( Action.NAME ), action );
menuFile.addSeparator();
+ // Print as image
+ menuFile.add( action = new PrintAction( this ) );
+ actionMap.put( action.getValue( Action.NAME ), action );
+ menuFile.addSeparator();
// Exit
menuFile.add( action = new ExitAction( this ) );
actionMap.put( action.getValue( Action.NAME ), action );
- // undo/redo
+ // Undo/Redo
menuEdit.add( action = new UndoAction( this ) );
actionMap.put( action.getValue( Action.NAME ), action );
menuEdit.add( action = new RedoAction( this ) );
@@ -1057,6 +1062,8 @@ public void actionPerformed(ActionEvent arg0)
actionbar.add( actionMap.get( getLocaleText( "open" ) ) );
actionbar.add( actionMap.get( getLocaleText( "save" ) ) );
actionbar.add( actionMap.get( getLocaleText( "save_image" ) ) );
+ actionbar.add( actionMap.get( getLocaleText( "print" ) ) );
+ actionbar.addSeparator( HSEP );
actionbar.add( actionMap.get( getLocaleText( "fileinfo" ) ) );
actionbar.addSeparator( HSEP );
actionbar.add( actionMap.get( getLocaleText( "undo" ) ) );
diff --git a/src/jdrafting/gui/CanvasPanel.java b/src/jdrafting/gui/CanvasPanel.java
index 550b69e..1e9321b 100644
--- a/src/jdrafting/gui/CanvasPanel.java
+++ b/src/jdrafting/gui/CanvasPanel.java
@@ -198,7 +198,7 @@ public void paintComponent( Graphics g )
}
public static void drawExercise( Graphics2D g2, AffineTransform transform,
- Exercise exercise, Set selected, boolean text )
+ Exercise exercise, Set selected, boolean text )
{
// draw non-selected shapes
for ( JDraftingShape jdshape : exercise.getFramesUntilIndex() )
@@ -219,14 +219,12 @@ public static void drawExercise( Graphics2D g2, AffineTransform transform,
for ( JDraftingShape jdshape: selected )
{
// transform shape to canvas
- Shape transShape = transform.createTransformedShape(
- jdshape.getShape() );
+ Shape transShape = transform.createTransformedShape( jdshape.getShape() );
// set style
BasicStroke stroke = jdshape.getStroke();
if ( stroke.getLineWidth() < 8f )
- g2.setStroke( new BasicStroke( 8f, stroke.getEndCap(),
- stroke.getLineJoin() ) );
+ g2.setStroke( new BasicStroke( 8f, stroke.getEndCap(), stroke.getLineJoin() ) );
else
g2.setStroke( stroke );
g2.setColor( new Color( 200, 32, 32, 222 ) );
@@ -248,8 +246,7 @@ public static void drawExercise( Graphics2D g2, AffineTransform transform,
g2.setFont( textFont );
g2.setColor( new Color( 0, 0, 0, 200 ) );
- Rectangle2D bounds =
- getShapeCanvasBounds( jdshape, transform);
+ Rectangle2D bounds = getShapeCanvasBounds( jdshape, transform);
double textX = bounds.getCenterX()
+ jdshape.getTextPosition().getX() * bounds.getWidth();
@@ -275,8 +272,7 @@ public Viewport getCanvasViewport()
case SAME_RATIO:
Viewport logicView = getViewport();
double canvasRatio = (double) getWidth() / getHeight();
- double logicRatio =
- logicView.getWidth() / logicView.getHeight();
+ double logicRatio = logicView.getWidth() / logicView.getHeight();
if ( canvasRatio >= logicRatio )
return new Viewport(
0, getWidth() / canvasRatio * logicRatio,
diff --git a/src/jdrafting/gui/JDUtils.java b/src/jdrafting/gui/JDUtils.java
index 7162b04..a6dfac4 100644
--- a/src/jdrafting/gui/JDUtils.java
+++ b/src/jdrafting/gui/JDUtils.java
@@ -77,8 +77,7 @@ public static String getLocaleText( String key )
*/
public static int getLocaleMnemonic( String key )
{
- return KeyEvent.getExtendedKeyCodeForChar(
- getLocaleText( key ).charAt( 0 ) );
+ return KeyEvent.getExtendedKeyCodeForChar( getLocaleText( key ).charAt( 0 ) );
}
/**
diff --git a/src/jdrafting/gui/controller/actions/PrintAction.java b/src/jdrafting/gui/controller/actions/PrintAction.java
new file mode 100644
index 0000000..bb6851a
--- /dev/null
+++ b/src/jdrafting/gui/controller/actions/PrintAction.java
@@ -0,0 +1,105 @@
+package jdrafting.gui.controller.actions;
+
+import static jdrafting.gui.JDUtils.getLargeIcon;
+import static jdrafting.gui.JDUtils.getLocaleText;
+import static jdrafting.gui.JDUtils.getSmallIcon;
+
+import java.awt.Graphics2D;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.util.HashSet;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+
+import jdrafting.gui.Application;
+import jdrafting.gui.CanvasPanel;
+import jdrafting.gui.JDUtils;
+import jdrafting.gui.Viewport;
+
+@SuppressWarnings("serial")
+public class PrintAction extends AbstractAction
+{
+ private Application app;
+
+ public PrintAction( Application app )
+ {
+ this.app = app;
+
+ putValue( NAME, getLocaleText( "print" ) );
+ putValue( SHORT_DESCRIPTION, getLocaleText( "print_des" ) );
+ putValue( MNEMONIC_KEY, JDUtils.getLocaleMnemonic( "mne_print" ) );
+ putValue( ACCELERATOR_KEY, KeyStroke.getKeyStroke( KeyEvent.VK_L, InputEvent.CTRL_MASK ) );
+ putValue( SMALL_ICON, getSmallIcon( "print.png" ) );
+ putValue( LARGE_ICON_KEY, getLargeIcon( "print.png" ) );
+ }
+
+ @Override
+ public void actionPerformed( ActionEvent e )
+ {
+ if ( app.getExercise().isEmpty() )
+ return;
+
+ // set job and get a printer
+ final PrinterJob job = PrinterJob.getPrinterJob();
+ job.setJobName( Application.APPNAME + ": " + app.getExercise().getTitle() );
+ if ( !job.printDialog() )
+ return;
+ // set printable image
+ job.setPrintable( (g, pageFormat, pageIndex) -> {
+
+ final double pageWidth = pageFormat.getImageableWidth(),
+ pageHeight = pageFormat.getImageableHeight();
+
+ Rectangle2D bounds = app.getExercise().getBounds();
+ final double marginX = bounds.getWidth() / 16., marginY = bounds.getHeight() / 16.;
+ bounds = new Rectangle2D.Double( bounds.getX() - marginX,
+ bounds.getY() - marginY,
+ bounds.getWidth() + 2*marginX,
+ bounds.getHeight() + 2*marginY );
+
+ final double scaleX = pageWidth / bounds.getWidth(),
+ scaleY = pageHeight / bounds.getHeight(),
+ scale = Math.min( scaleX, scaleY );
+
+ final BufferedImage img = new BufferedImage( (int) (bounds.getWidth() * scale),
+ (int) (bounds.getHeight() * scale),
+ BufferedImage.TYPE_INT_ARGB );
+ final Graphics2D g2 = (Graphics2D) img.getGraphics();
+
+ // High quality render
+ JDUtils.setHighQualityRender( g2 );
+
+ // draw exercise in image context
+ CanvasPanel.drawExercise( g2, CanvasPanel.getTransform(
+ new Viewport( bounds ),
+ new Viewport( 0, img.getWidth() - 1, 0, img.getHeight() - 1 ) ),
+ app.getExercise(), new HashSet<>(), true );
+
+ g.translate( (int) (pageFormat.getImageableX()), (int) (pageFormat.getImageableY()) );
+ if ( pageIndex == 0 )
+ {
+ g.drawImage( img, 0, 0, null );
+ return Printable.PAGE_EXISTS;
+ }
+ return Printable.NO_SUCH_PAGE;
+ } );
+ // print job
+ try
+ {
+ job.print();
+ }
+ catch ( PrinterException ex )
+ {
+ JOptionPane.showMessageDialog( app, ex.getMessage(), "Printing error",
+ JOptionPane.ERROR_MESSAGE );
+ }
+ }
+}
diff --git a/src/jdrafting/gui/controller/actions/SaveImageAction.java b/src/jdrafting/gui/controller/actions/SaveImageAction.java
index 3b5c098..d8b9384 100644
--- a/src/jdrafting/gui/controller/actions/SaveImageAction.java
+++ b/src/jdrafting/gui/controller/actions/SaveImageAction.java
@@ -91,10 +91,8 @@ public void actionPerformed( ActionEvent e )
// set png format as the unique filter
Arrays.stream( fileChooser.getChoosableFileFilters() )
.forEach( f -> fileChooser.removeChoosableFileFilter( f ) );
- FileNameExtensionFilter svgFilter =
- new FileNameExtensionFilter( "SVG images", "svg" );
- FileNameExtensionFilter pngFilter =
- new FileNameExtensionFilter( "PNG images", "png" );
+ FileNameExtensionFilter svgFilter = new FileNameExtensionFilter( "SVG images", "svg" );
+ FileNameExtensionFilter pngFilter = new FileNameExtensionFilter( "PNG images", "png" );
fileChooser.addChoosableFileFilter( svgFilter );
fileChooser.addChoosableFileFilter( pngFilter );
@@ -103,12 +101,11 @@ public void actionPerformed( ActionEvent e )
fileChooser.setSelectedFile( new File( "jd_" + ( counter++ ) ) );
else
fileChooser.setSelectedFile( new File(
- JDUtils.camelCase( app.getExercise().getTitle() ) ) );
+ JDUtils.camelCase( app.getExercise().getTitle() ) ) );
// set fields
- fileChooser.textHeight.setText(
- String.valueOf( getAutomaticHeight( 1000 ) ) );
+ fileChooser.textHeight.setText( String.valueOf( getAutomaticHeight( 1000 ) ) );
fileChooser.labelImage.setIcon( new ImageIcon(
- createBImage( MINI_SIZE, MINI_SIZE, false ) ) );
+ createBImage( MINI_SIZE, MINI_SIZE, false ) ) );
fileChooser.checkText.setSelected( app.isVisibleNames() );
if ( fileChooser.showSaveDialog( app ) == JFileChooser.APPROVE_OPTION )
@@ -162,7 +159,7 @@ public void actionPerformed( ActionEvent e )
private int getAutomaticHeight( int width )
{
- Rectangle2D bound = app.getExercise().getBounds();
+ final Rectangle2D bound = app.getExercise().getBounds();
return (int) Math.round( width * bound.getHeight() / bound.getWidth() );
}
@@ -179,8 +176,7 @@ private void toSVG( File filename, int width, int height )
throws UnsupportedEncodingException, SVGGraphics2DIOException
{
// Get a DOMImplementation.
- DOMImplementation domImpl =
- GenericDOMImplementation.getDOMImplementation();
+ DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();
// Create an instance of org.w3c.dom.Document.
String svgNS = "http://www.w3.org/2000/svg";
@@ -198,16 +194,15 @@ private void toSVG( File filename, int width, int height )
// draw exercise to SVG generator
CanvasPanel.drawExercise( svgGenerator,
- CanvasPanel.getTransform(
- new Viewport( app.getExercise().getBounds() ),
- new Viewport( 0., width, 0., height ) ),
- app.getExercise(), new HashSet<>(),
- fileChooser.checkText.isSelected() );
+ CanvasPanel.getTransform(
+ new Viewport( app.getExercise().getBounds() ),
+ new Viewport( 0., width, 0., height ) ),
+ app.getExercise(), new HashSet<>(),
+ fileChooser.checkText.isSelected() );
// Stream out SVG to output using UTF-8 encoding
boolean useCSS = true; // we want to use CSS style attributes
- try ( PrintWriter out =
- new PrintWriter( filename, "UTF-8" ) )
+ try ( PrintWriter out = new PrintWriter( filename, "UTF-8" ) )
{
svgGenerator.stream( out, useCSS );
out.write( "