فهرست منبع

- fixed issue with arrays of items could not be added in the Gerber/Excellon Editor when a translation is used
- fixed issue in the Excellon Editor where the Space key did not toggle the direction of the array of drills
- combed the application strings all over the app and trimmed them up until those starting with letter 'O'
- updated the translation strings

Marius Stanciu 5 سال پیش
والد
کامیت
90e3b26b68
64فایلهای تغییر یافته به همراه2183 افزوده شده و 2321 حذف شده
  1. 4 0
      CHANGELOG.md
  2. 9 10
      appDatabase.py
  3. 204 201
      appEditors/AppExcEditor.py
  4. 33 38
      appEditors/AppGeoEditor.py
  5. 22 22
      appEditors/AppGerberEditor.py
  6. 5 5
      appGUI/GUIElements.py
  7. 15 16
      appGUI/MainGUI.py
  8. 1 1
      appGUI/ObjectUI.py
  9. 1 1
      appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py
  10. 2 2
      appGUI/preferences/excellon/ExcellonExpPrefGroupUI.py
  11. 2 2
      appGUI/preferences/excellon/ExcellonGenPrefGroupUI.py
  12. 1 1
      appGUI/preferences/excellon/ExcellonOptPrefGroupUI.py
  13. 1 1
      appGUI/preferences/general/GeneralAppPrefGroupUI.py
  14. 1 1
      appGUI/preferences/geometry/GeometryOptPrefGroupUI.py
  15. 2 2
      appGUI/preferences/gerber/GerberExpPrefGroupUI.py
  16. 2 2
      appGUI/preferences/gerber/GerberGenPrefGroupUI.py
  17. 1 1
      appGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py
  18. 1 1
      appGUI/preferences/tools/Tools2sidedPrefGroupUI.py
  19. 1 1
      appGUI/preferences/tools/ToolsDrillPrefGroupUI.py
  20. 1 1
      appGUI/preferences/tools/ToolsFilmPrefGroupUI.py
  21. 6 6
      appGUI/preferences/tools/ToolsISOPrefGroupUI.py
  22. 10 12
      appGUI/preferences/tools/ToolsNCCPrefGroupUI.py
  23. 6 6
      appGUI/preferences/tools/ToolsPaintPrefGroupUI.py
  24. 2 2
      appObjects/FlatCAMCNCJob.py
  25. 1 1
      appObjects/FlatCAMGeometry.py
  26. 1 1
      appObjects/FlatCAMScript.py
  27. 6 8
      appParsers/ParseGerber.py
  28. 1 1
      appParsers/ParseHPGL2.py
  29. 2 2
      appTools/ToolCalibration.py
  30. 1 1
      appTools/ToolDblSided.py
  31. 2 2
      appTools/ToolDrilling.py
  32. 6 6
      appTools/ToolFilm.py
  33. 7 7
      appTools/ToolIsolation.py
  34. 4 4
      appTools/ToolMilling.py
  35. 2 1
      appTools/ToolMove.py
  36. 14 16
      appTools/ToolNCC.py
  37. 8 8
      appTools/ToolPaint.py
  38. 8 11
      appTools/ToolPanelize.py
  39. 3 3
      appTools/ToolPcbWizard.py
  40. 1 1
      appTools/ToolProperties.py
  41. 7 8
      appTools/ToolTransform.py
  42. 28 29
      app_Main.py
  43. 7 6
      camlib.py
  44. BIN
      locale/de/LC_MESSAGES/strings.mo
  45. 173 174
      locale/de/LC_MESSAGES/strings.po
  46. BIN
      locale/en/LC_MESSAGES/strings.mo
  47. 172 173
      locale/en/LC_MESSAGES/strings.po
  48. BIN
      locale/es/LC_MESSAGES/strings.mo
  49. 174 173
      locale/es/LC_MESSAGES/strings.po
  50. BIN
      locale/fr/LC_MESSAGES/strings.mo
  51. 173 172
      locale/fr/LC_MESSAGES/strings.po
  52. BIN
      locale/it/LC_MESSAGES/strings.mo
  53. 171 169
      locale/it/LC_MESSAGES/strings.po
  54. BIN
      locale/pt_BR/LC_MESSAGES/strings.mo
  55. 171 169
      locale/pt_BR/LC_MESSAGES/strings.po
  56. BIN
      locale/ro/LC_MESSAGES/strings.mo
  57. 174 189
      locale/ro/LC_MESSAGES/strings.po
  58. BIN
      locale/ru/LC_MESSAGES/strings.mo
  59. 170 170
      locale/ru/LC_MESSAGES/strings.po
  60. BIN
      locale/tr/LC_MESSAGES/strings.mo
  61. 172 169
      locale/tr/LC_MESSAGES/strings.po
  62. 190 191
      locale_template/strings.pot
  63. 0 120
      make_freezed.py
  64. 1 1
      tclCommands/TclCommandImportSvg.py

+ 4 - 0
CHANGELOG.md

@@ -10,6 +10,10 @@ CHANGELOG for FlatCAM beta
 4.11.2020
 
 - updated all the translation files
+- fixed issue with arrays of items could not be added in the Gerber/Excellon Editor when a translation is used
+- fixed issue in the Excellon Editor where the Space key did not toggle the direction of the array of drills
+- combed the application strings all over the app and trimmed them up until those starting with letter 'O'
+- updated the translation strings
 
 3.11.2020
 

+ 9 - 10
appDatabase.py

@@ -607,7 +607,7 @@ class ToolsDB2UI:
         # Milling Type Radio Button
         self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
         self.milling_type_label.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -615,7 +615,7 @@ class ToolsDB2UI:
         self.ncc_milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
                                                 {'label': _('Conventional'), 'value': 'cv'}])
         self.ncc_milling_type_radio.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -629,8 +629,8 @@ class ToolsDB2UI:
         nccoverlabel.setToolTip(
             _("How much (percentage) of the tool width to overlap each tool pass.\n"
               "Adjust the value starting with lower values\n"
-              "and increasing it if areas that should be cleared are still \n"
-              "not cleared.\n"
+              "and increasing it if areas that should be processed are still \n"
+              "not processed.\n"
               "Lower values = faster processing, faster execution on CNC.\n"
               "Higher values = slow processing and slow execution on CNC\n"
               "due of too many paths.")
@@ -703,8 +703,7 @@ class ToolsDB2UI:
         self.ncc_choice_offset_cb.setToolTip(
             _("If used, it will add an offset to the copper features.\n"
               "The copper clearing will finish to a distance\n"
-              "from the copper features.\n"
-              "The value can be between 0 and 10 FlatCAM units.")
+              "from the copper features.")
         )
         self.grid2.addWidget(self.ncc_choice_offset_cb, 19, 0)
 
@@ -738,8 +737,8 @@ class ToolsDB2UI:
         ovlabel.setToolTip(
             _("How much (percentage) of the tool width to overlap each tool pass.\n"
               "Adjust the value starting with lower values\n"
-              "and increasing it if areas that should be painted are still \n"
-              "not painted.\n"
+              "and increasing it if areas that should be processed are still \n"
+              "not processed.\n"
               "Lower values = faster processing, faster execution on CNC.\n"
               "Higher values = slow processing and slow execution on CNC\n"
               "due of too many paths.")
@@ -853,7 +852,7 @@ class ToolsDB2UI:
         # Milling Type Radio Button
         self.iso_milling_type_label = FCLabel('%s:' % _('Milling Type'))
         self.iso_milling_type_label.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -861,7 +860,7 @@ class ToolsDB2UI:
         self.iso_milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
                                                 {'label': _('Conventional'), 'value': 'cv'}])
         self.iso_milling_type_radio.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 204 - 201
appEditors/AppExcEditor.py


+ 33 - 38
appEditors/AppGeoEditor.py

@@ -454,8 +454,8 @@ class PaintOptionsTool(AppTool):
         ovlabel.setToolTip(
             _("How much (percentage) of the tool width to overlap each tool pass.\n"
               "Adjust the value starting with lower values\n"
-              "and increasing it if areas that should be painted are still \n"
-              "not painted.\n"
+              "and increasing it if areas that should be processed are still \n"
+              "not processed.\n"
               "Lower values = faster processing, faster execution on CNC.\n"
               "Higher values = slow processing and slow execution on CNC\n"
               "due of too many paths.")
@@ -582,7 +582,7 @@ class PaintOptionsTool(AppTool):
 
     def on_paint(self):
         if not self.fcdraw.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         tooldia = self.painttooldia_entry.get_value()
@@ -1071,7 +1071,7 @@ class TransformEditorTool(AppTool):
 
     def template(self):
         if not self.draw_app.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         self.draw_app.select_tool("select")
@@ -1427,7 +1427,7 @@ class TransformEditorTool(AppTool):
         shape_list = self.draw_app.selected
 
         if not shape_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
             return
         else:
             with self.app.proc_container.new(_("Applying Buffer")):
@@ -1455,10 +1455,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_rotate(val=val, ref=1)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape rotate done"))
+            self.app.inform.emit('[success] %s...' % _("Rotate done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Geometry shape rotate cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Rotate cancelled"))
 
     def on_offx_key(self):
         units = self.app.defaults['units'].lower()
@@ -1473,10 +1473,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_offx(val=val)
-            self.app.inform.emit('[success] %s' % _("Geometry shape offset on X axis done"))
+            self.app.inform.emit('[success] %s' % _("Offset on the X axis done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Geometry shape offset X cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Offset X cancelled"))
 
     def on_offy_key(self):
         units = self.app.defaults['units'].lower()
@@ -1491,10 +1491,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_offx(val=val)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape offset on Y axis done"))
+            self.app.inform.emit('[success] %s...' % _("Offset on Y axis done"))
             return
         else:
-            self.app.inform.emit('[success] %s...' % _("Geometry shape offset on Y axis canceled"))
+            self.app.inform.emit('[success] %s...' % _("Offset on the Y axis canceled"))
 
     def on_skewx_key(self):
         val_box = FCInputDialog(title=_("Skew on X axis ..."),
@@ -1507,10 +1507,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_skewx(val=val, ref=3)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape skew on X axis done"))
+            self.app.inform.emit('[success] %s...' % _("Skew on X axis done"))
             return
         else:
-            self.app.inform.emit('[success] %s...' % _("Geometry shape skew on X axis canceled"))
+            self.app.inform.emit('[success] %s...' % _("Skew on X axis canceled"))
 
     def on_skewy_key(self):
         val_box = FCInputDialog(title=_("Skew on Y axis ..."),
@@ -1523,10 +1523,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_skewx(val=val, ref=3)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape skew on Y axis done"))
+            self.app.inform.emit('[success] %s...' % _("Skew on Y axis done"))
             return
         else:
-            self.app.inform.emit('[success] %s...' % _("Geometry shape skew on Y axis canceled"))
+            self.app.inform.emit('[success] %s...' % _("Skew on Y axis canceled"))
 
     @staticmethod
     def alt_bounds(shapelist):
@@ -2606,7 +2606,7 @@ class FCExplode(FCShapeTool):
 
         self.draw_app.active_tool = self
         if len(self.draw_app.get_selected()) == 0:
-            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s...' % _("No shape selected. Select a shape to explode"))
+            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
         else:
             self.make()
 
@@ -2670,11 +2670,10 @@ class FCMove(FCShapeTool):
         self.selection_shape = self.selection_bbox()
 
         if len(self.draw_app.get_selected()) == 0:
-            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s...' %
-                                          _("MOVE: No shape selected. Select a shape to move"))
+            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
             return
         else:
-            self.draw_app.app.inform.emit(_(" MOVE: Click on reference point ..."))
+            self.draw_app.app.inform.emit(_("Click on reference location ..."))
 
         self.draw_app.app.jump_signal.connect(lambda x: self.draw_app.update_utility_geometry(data=x))
 
@@ -2694,7 +2693,7 @@ class FCMove(FCShapeTool):
             # self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Move cancelled. No shape selected."))
             self.select_shapes(point)
             self.draw_app.replot()
-            self.draw_app.app.inform.emit(_(" MOVE: Click on reference point ..."))
+            self.draw_app.app.inform.emit(_("Click on reference location ..."))
             return
 
         if self.origin is None:
@@ -2709,7 +2708,7 @@ class FCMove(FCShapeTool):
             return "Done."
 
     def make(self):
-        with self.draw_app.app.proc_container.new(_("Working ...")):
+        with self.draw_app.app.proc_container.new(_("Moving ...")):
             # Create new geometry
             dx = self.destination[0] - self.origin[0]
             dy = self.destination[1] - self.origin[1]
@@ -2973,7 +2972,7 @@ class FCBuffer(FCShapeTool):
 
     def on_buffer(self):
         if not self.draw_app.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         try:
@@ -3001,7 +3000,7 @@ class FCBuffer(FCShapeTool):
 
     def on_buffer_int(self):
         if not self.draw_app.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         try:
@@ -3029,7 +3028,7 @@ class FCBuffer(FCShapeTool):
 
     def on_buffer_ext(self):
         if not self.draw_app.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         try:
@@ -3040,7 +3039,7 @@ class FCBuffer(FCShapeTool):
                 buffer_distance = float(self.buff_tool.buffer_distance_entry.get_value().replace(',', '.'))
                 self.buff_tool.buffer_distance_entry.set_value(buffer_distance)
             except ValueError:
-                self.app.inform.emit('[WARNING_NOTCL] %s' %
+                self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
                                      _("Buffer distance value is missing or wrong format. Add it and retry."))
                 return
         # the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
@@ -4410,7 +4409,7 @@ class AppGeoEditor(QtCore.QObject):
 
     def on_copy_click(self):
         if not self.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         self.app.ui.geo_copy_btn.setChecked(True)
@@ -4934,13 +4933,11 @@ class AppGeoEditor(QtCore.QObject):
             return 'fail'
 
         if len(selected) == 0:
-            self.app.inform.emit('[WARNING_NOTCL] %s' %
-                                 _("Nothing selected for buffering."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
             return 'fail'
 
         if not isinstance(buf_distance, float):
-            self.app.inform.emit('[WARNING_NOTCL] %s' %
-                                 _("Invalid distance for buffering."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance."))
 
             # deselect everything
             self.selected = []
@@ -4988,11 +4985,11 @@ class AppGeoEditor(QtCore.QObject):
             return 'fail'
 
         if len(selected) == 0:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected for buffering."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
             return 'fail'
 
         if not isinstance(buf_distance, float):
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance for buffering."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance."))
             # deselect everything
             self.selected = []
             self.replot()
@@ -5037,13 +5034,11 @@ class AppGeoEditor(QtCore.QObject):
             return
 
         if len(selected) == 0:
-            self.app.inform.emit('[WARNING_NOTCL] %s' %
-                                 _("Nothing selected for buffering."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
             return
 
         if not isinstance(buf_distance, float):
-            self.app.inform.emit('[WARNING_NOTCL] %s' %
-                                 _("Invalid distance for buffering."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance."))
             # deselect everything
             self.selected = []
             self.replot()
@@ -5086,7 +5081,7 @@ class AppGeoEditor(QtCore.QObject):
         selected = self.get_selected()
 
         if len(selected) == 0:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected for painting."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
             return
 
         for param in [tooldia, overlap, margin]:
@@ -5162,7 +5157,7 @@ class AppGeoEditor(QtCore.QObject):
         # This is a dirty patch:
         for r in results:
             self.add_shape(DrawToolShape(r))
-        self.app.inform.emit('[success] %s' % _("Paint done."))
+        self.app.inform.emit('[success] %s' % _("Done."))
         self.replot()
 
     def flatten(self, geometry, orient_val=1, reset=True, pathonly=False):

+ 22 - 22
appEditors/AppGerberEditor.py

@@ -19,7 +19,7 @@ import logging
 
 from camlib import distance, arc, three_point_circle
 from appGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \
-    EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox, NumericalEvalTupleEntry
+    EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox, NumericalEvalTupleEntry, FCComboBox2
 from appTool import AppTool
 
 import numpy as np
@@ -455,7 +455,7 @@ class FCPadArray(FCShapeTool):
 
         self.selected_size = None
         self.pad_axis = 'X'
-        self.pad_array = 'linear'
+        self.pad_array = 0  # 'linear'
         self.pad_array_size = None
         self.pad_pitch = None
         self.pad_linear_angle = None
@@ -487,7 +487,7 @@ class FCPadArray(FCShapeTool):
 
     def click(self, point):
 
-        if self.pad_array == 'Linear':
+        if self.draw_app.ui.array_type_combo.get_value() == 0:     # 'Linear'
             self.make()
             return
         else:
@@ -529,7 +529,7 @@ class FCPadArray(FCShapeTool):
             self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' % _("The value is mistyped. Check the value."))
             return
 
-        if self.pad_array == 'Linear':
+        if self.pad_array == 0:     # 'Linear'
             if data[0] is None and data[1] is None:
                 dx = self.draw_app.x
                 dy = self.draw_app.y
@@ -573,7 +573,7 @@ class FCPadArray(FCShapeTool):
             self.last_dx = dx
             self.last_dy = dy
             return DrawToolUtilityShape(geo_el_list)
-        else:
+        else:   # 'Circular'
             if data[0] is None and data[1] is None:
                 cdx = self.draw_app.x
                 cdy = self.draw_app.y
@@ -700,7 +700,7 @@ class FCPadArray(FCShapeTool):
 
         self.draw_app.current_storage = self.storage_obj
 
-        if self.pad_array == 'Linear':
+        if self.pad_array == 0:     # 'Linear'
             for item in range(self.pad_array_size):
                 if self.pad_axis == 'X':
                     geo = self.util_shape(((self.points[0] + (self.pad_pitch * item)), self.points[1]))
@@ -714,7 +714,7 @@ class FCPadArray(FCShapeTool):
                     )
 
                 self.geometry.append(DrawToolShape(geo))
-        else:
+        else:   # 'Circular'
             if (self.pad_angle * self.pad_array_size) > 360:
                 self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
                                               _("Too many items for the selected spacing angle."))
@@ -3013,7 +3013,7 @@ class AppGerberEditor(QtCore.QObject):
             if ap_code not in self.oldapcode_newapcode:
                 self.storage_dict[ap_code] = {}
 
-                type_val = self.aptype_cb.currentText()
+                type_val = self.ui.aptype_cb.currentText()
                 self.storage_dict[ap_code]['type'] = type_val
 
                 if type_val == 'R' or type_val == 'O':
@@ -3092,7 +3092,7 @@ class AppGerberEditor(QtCore.QObject):
             else:
                 # deleted_tool_dia = float(self.ui.apertures_table.item(self.ui.apertures_table.currentRow(), 1).text())
                 if len(self.ui.apertures_table.selectionModel().selectedRows()) == 0:
-                    self.app.inform.emit('[WARNING_NOTCL] %s' % _(" Select an aperture in Aperture Table"))
+                    self.app.inform.emit('[WARNING_NOTCL] %s' % _("Select an aperture in Aperture Table"))
                     return
 
                 deleted_apcode_list = []
@@ -5279,7 +5279,7 @@ class AppGerberEditorUI:
         )
         self.array_box.addWidget(self.padarray_label)
 
-        self.array_type_combo = FCComboBox()
+        self.array_type_combo = FCComboBox2()
         self.array_type_combo.setToolTip(
             _("Select the type of pads array to create.\n"
               "It can be Linear X(Y) or Circular")
@@ -5885,7 +5885,7 @@ class TransformEditorTool(AppTool):
 
     def template(self):
         if not self.draw_app.selected:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
+            self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
             return
 
         self.draw_app.select_tool("select")
@@ -6278,7 +6278,7 @@ class TransformEditorTool(AppTool):
         elem_list = self.draw_app.selected
 
         if not elem_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
             return
 
         with self.app.proc_container.new(_("Applying Buffer")):
@@ -6321,10 +6321,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_rotate(val=val, ref=1)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape rotate done"))
+            self.app.inform.emit('[success] %s...' % _("Rotate done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape rotate cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Rotate cancelled"))
 
     def on_offx_key(self):
         units = self.app.defaults['units'].lower()
@@ -6339,10 +6339,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_offx(val=val)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape offset on X axis done"))
+            self.app.inform.emit('[success] %s...' % _("Offset on the X axis done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape offset X cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Offset X cancelled"))
 
     def on_offy_key(self):
         units = self.app.defaults['units'].lower()
@@ -6357,10 +6357,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_offx(val=val)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape offset on Y axis done"))
+            self.app.inform.emit('[success] %s...' % _("Offset on Y axis done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape offset Y cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Offset Y cancelled"))
 
     def on_skewx_key(self):
         val_box = FCInputDialog(title=_("Skew on X axis ..."),
@@ -6373,10 +6373,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_skewx(val=val, ref=3)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape skew on X axis done"))
+            self.app.inform.emit('[success] %s...' % _("Skew on X axis done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape skew X cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Skew X cancelled"))
 
     def on_skewy_key(self):
         val_box = FCInputDialog(title=_("Skew on Y axis ..."),
@@ -6389,10 +6389,10 @@ class TransformEditorTool(AppTool):
         val, ok = val_box.get_value()
         if ok:
             self.on_skewx(val=val, ref=3)
-            self.app.inform.emit('[success] %s...' % _("Geometry shape skew on Y axis done"))
+            self.app.inform.emit('[success] %s...' % _("Skew on Y axis done"))
             return
         else:
-            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape skew Y cancelled"))
+            self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Skew Y cancelled"))
 
     @staticmethod
     def alt_bounds(shapelist):

+ 5 - 5
appGUI/GUIElements.py

@@ -4173,7 +4173,7 @@ class FCJog(QtWidgets.QFrame):
         self.jog_origin_button = QtWidgets.QToolButton()
         self.jog_origin_button.setIcon(QtGui.QIcon(self.app.resource_location + '/origin2_32.png'))
         self.jog_origin_button.setToolTip(
-            _("Move to Origin.")
+            '%s' % _("Move to Origin")
         )
 
         grbl_jog_grid.addWidget(self.jog_origin_button, 3, 1)
@@ -4534,23 +4534,23 @@ class FlatCAMSystemTray(QtWidgets.QSystemTrayIcon):
 
             # Open Project ...
             menu_openproject = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/folder16.png'),
-                                                 _('Open Project ...'), self)
+                                                 '%s ...' % _('Open Project'), self)
             self.menu_open.addAction(menu_openproject)
             self.menu_open.addSeparator()
 
             # Open Gerber ...
             menu_opengerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon24.png'),
-                                                _('Open &Gerber ...\tCtrl+G'), self)
+                                                '%s ...\t%s' % (_('Open Gerber'), _('Ctrl+G')), self)
             self.menu_open.addAction(menu_opengerber)
 
             # Open Excellon ...
             menu_openexcellon = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'),
-                                                  _('Open &Excellon ...\tCtrl+E'), self)
+                                                  '%s ...\t%s' % (_('Open Excellon'), _('Ctrl+E')), self)
             self.menu_open.addAction(menu_openexcellon)
 
             # Open G-Code ...
             menu_opengcode = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/code.png'),
-                                               _('Open G-&Code ...'), self)
+                                               '%s ...' % _('Open G-Code'), self)
             self.menu_open.addAction(menu_opengcode)
 
             self.menu_open.addSeparator()

+ 15 - 16
appGUI/MainGUI.py

@@ -737,7 +737,7 @@ class MainGUI(QtWidgets.QMainWindow):
 
         self.exc_move_drill_menuitem = self.exc_editor_menu.addAction(
             QtGui.QIcon(self.app.resource_location + '/move32.png'),
-            '%s\t%s' % (_('Move Drill(s)'), _('M')))
+            '%s\t%s' % (_('Move Drill'), _('M')))
 
         # ########################################################################
         # ########################## GERBER Editor # #############################
@@ -860,7 +860,7 @@ class MainGUI(QtWidgets.QMainWindow):
         self.menuproject.addSeparator()
 
         self.menuprojectgeneratecnc = self.menuproject.addAction(
-            QtGui.QIcon(self.app.resource_location + '/cnc32.png'), _('Generate CNC'))
+            QtGui.QIcon(self.app.resource_location + '/cnc32.png'), _('Create CNCJob'))
         self.menuprojectviewsource = self.menuproject.addAction(
             QtGui.QIcon(self.app.resource_location + '/source32.png'), _('View Source'))
 
@@ -971,7 +971,7 @@ class MainGUI(QtWidgets.QMainWindow):
             QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon"))
         self.toolbarfile.addSeparator()
         self.file_open_btn = self.toolbarfile.addAction(
-            QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open project"))
+            QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open Project"))
         self.file_save_btn = self.toolbarfile.addAction(
             QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project"))
 
@@ -1026,11 +1026,11 @@ class MainGUI(QtWidgets.QMainWindow):
         self.shell_btn = self.toolbarshell.addAction(
             QtGui.QIcon(self.app.resource_location + '/shell32.png'), _("Command Line"))
         self.new_script_btn = self.toolbarshell.addAction(
-            QtGui.QIcon(self.app.resource_location + '/script_new24.png'), _('New Script ...'))
+            QtGui.QIcon(self.app.resource_location + '/script_new24.png'), '%s ...' % _('New Script'))
         self.open_script_btn = self.toolbarshell.addAction(
-            QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...'))
+            QtGui.QIcon(self.app.resource_location + '/open_script32.png'), '%s ...' % _('Open Script'))
         self.run_script_btn = self.toolbarshell.addAction(
-            QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Run Script ...'))
+            QtGui.QIcon(self.app.resource_location + '/script16.png'), '%s ...' % _('Run Script'))
 
         # ########################################################################
         # ########################## Tools Toolbar# ##############################
@@ -1167,7 +1167,7 @@ class MainGUI(QtWidgets.QMainWindow):
             QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations"))
         self.geo_edit_toolbar.addSeparator()
         self.geo_move_btn = self.geo_edit_toolbar.addAction(
-            QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects "))
+            QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects"))
 
         # ########################################################################
         # ########################## Gerber Editor Toolbar# ######################
@@ -2142,9 +2142,9 @@ class MainGUI(QtWidgets.QMainWindow):
             QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon"))
         self.toolbarfile.addSeparator()
         self.file_open_btn = self.toolbarfile.addAction(
-            QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open project"))
+            QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open Project"))
         self.file_save_btn = self.toolbarfile.addAction(
-            QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project"))
+            QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save Project"))
 
         # ########################################################################
         # ######################### Edit Toolbar #################################
@@ -2195,11 +2195,11 @@ class MainGUI(QtWidgets.QMainWindow):
         self.shell_btn = self.toolbarshell.addAction(
             QtGui.QIcon(self.app.resource_location + '/shell32.png'), _("Command Line"))
         self.new_script_btn = self.toolbarshell.addAction(
-            QtGui.QIcon(self.app.resource_location + '/script_new24.png'), _('New Script ...'))
+            QtGui.QIcon(self.app.resource_location + '/script_new24.png'), '%s ...' % _('New Script'))
         self.open_script_btn = self.toolbarshell.addAction(
-            QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...'))
+            QtGui.QIcon(self.app.resource_location + '/open_script32.png'), '%s ...' % _('Open Script'))
         self.run_script_btn = self.toolbarshell.addAction(
-            QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Run Script ...'))
+            QtGui.QIcon(self.app.resource_location + '/script16.png'), '%s ...' % _('Run Script'))
 
         # #########################################################################
         # ######################### Tools Toolbar #################################
@@ -2290,7 +2290,7 @@ class MainGUI(QtWidgets.QMainWindow):
         # ################### Geometry Editor Toolbar ############################
         # ########################################################################
         self.geo_select_btn = self.geo_edit_toolbar.addAction(
-            QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select 'Esc'"))
+            QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select"))
         self.geo_add_circle_btn = self.geo_edit_toolbar.addAction(
             QtGui.QIcon(self.app.resource_location + '/circle32.png'), _('Add Circle'))
         self.geo_add_arc_btn = self.geo_edit_toolbar.addAction(
@@ -3555,13 +3555,12 @@ class MainGUI(QtWidgets.QMainWindow):
                     self.app.exc_editor.select_tool('slot_add')
                     return
 
-                # Propagate to tool
-
                 # Show Shortcut list
                 if key == QtCore.Qt.Key_F3 or key == 'F3':
                     self.app.on_shortcut_list()
                     return
 
+                # Propagate to tool
                 # we do this so we can reuse the following keys while inside a Tool
                 # the above keys are general enough so were left outside
                 if self.app.exc_editor.active_tool is not None and self.select_drill_btn.isChecked() is False:
@@ -3646,7 +3645,7 @@ class MainGUI(QtWidgets.QMainWindow):
                         self.app.exc_editor.launched_from_shortcuts = True
                         # ## Current application units in Upper Case
                         self.units = self.general_defaults_form.general_app_group.units_radio.get_value().upper()
-                        tool_add_popup = FCInputDialog(title=_("New Tool ..."),
+                        tool_add_popup = FCInputDialog(title='%s ...' % _("New Tool"),
                                                        text='%s:' % _('Enter a Tool Diameter'),
                                                        min=0.0000, max=99.9999, decimals=4)
                         tool_add_popup.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/letter_t_32.png'))

+ 1 - 1
appGUI/ObjectUI.py

@@ -721,7 +721,7 @@ class ExcellonObjectUI(ObjectUI):
         self.drill_button = QtWidgets.QPushButton(_('Drilling Tool'))
         self.drill_button.setIcon(QtGui.QIcon(self.app.resource_location + '/drilling_tool32.png'))
         self.drill_button.setToolTip(
-            _("Generate GCode out of drill holes in an Excellon object.")
+            _("Generate GCode from the drill holes in an Excellon object.")
         )
         self.drill_button.setStyleSheet("""
                                       QPushButton

+ 1 - 1
appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py

@@ -161,7 +161,7 @@ class ExcellonEditorPrefGroupUI(OptionsGroupUI):
         # Slot length
         self.slot_length_label = QtWidgets.QLabel('%s:' % _('Length'))
         self.slot_length_label.setToolTip(
-            _("Length = The length of the slot.")
+            _("Length. The length of the slot.")
         )
         self.slot_length_label.setMinimumWidth(100)
 

+ 2 - 2
appGUI/preferences/excellon/ExcellonExpPrefGroupUI.py

@@ -43,8 +43,8 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI):
             _("The units used in the Excellon file.")
         )
 
-        self.excellon_units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
-                                              {'label': _('MM'), 'value': 'METRIC'}])
+        self.excellon_units_radio = RadioSet([{'label': _('Inch'), 'value': 'INCH'},
+                                              {'label': _('mm'), 'value': 'METRIC'}])
         self.excellon_units_radio.setToolTip(
             _("The units used in the Excellon file.")
         )

+ 2 - 2
appGUI/preferences/excellon/ExcellonGenPrefGroupUI.py

@@ -179,8 +179,8 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI):
               "therefore this parameter will be used.")
         )
 
-        self.excellon_units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
-                                              {'label': _('MM'), 'value': 'METRIC'}])
+        self.excellon_units_radio = RadioSet([{'label': _('Inch'), 'value': 'INCH'},
+                                              {'label': _('mm'), 'value': 'METRIC'}])
         self.excellon_units_radio.setToolTip(
             _("This sets the units of Excellon files.\n"
               "Some Excellon files don't have an header\n"

+ 1 - 1
appGUI/preferences/excellon/ExcellonOptPrefGroupUI.py

@@ -30,7 +30,7 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI):
         self.decimals = decimals
 
         # ## Create CNC Job
-        self.cncjob_label = QtWidgets.QLabel('<b>%s</b>' % _('Create CNC Job'))
+        self.cncjob_label = QtWidgets.QLabel('<b>%s</b>' % _('Create CNCJob'))
         self.cncjob_label.setToolTip(
             _("Parameters used to create a CNC Job object\n"
               "for this drill object.")

+ 1 - 1
appGUI/preferences/general/GeneralAppPrefGroupUI.py

@@ -61,7 +61,7 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
         grid0.addWidget(self.precision_metric_entry, 1, 1)
 
         # Precision Inch
-        self.precision_inch_label = QtWidgets.QLabel('%s:' % _('Precision INCH'))
+        self.precision_inch_label = QtWidgets.QLabel('%s:' % _('Precision Inch'))
         self.precision_inch_label.setToolTip(
             _("The number of decimals used throughout the application\n"
               "when the set units are in INCH system.\n"

+ 1 - 1
appGUI/preferences/geometry/GeometryOptPrefGroupUI.py

@@ -32,7 +32,7 @@ class GeometryOptPrefGroupUI(OptionsGroupUI):
         # ------------------------------
         # ## Create CNC Job
         # ------------------------------
-        self.cncjob_label = QtWidgets.QLabel('<b>%s:</b>' % _('Create CNC Job'))
+        self.cncjob_label = QtWidgets.QLabel('<b>%s:</b>' % _('Create CNCJob'))
         self.cncjob_label.setToolTip(
             _("Create a CNC Job object\n"
               "tracing the contours of this\n"

+ 2 - 2
appGUI/preferences/gerber/GerberExpPrefGroupUI.py

@@ -44,8 +44,8 @@ class GerberExpPrefGroupUI(OptionsGroupUI):
             _("The units used in the Gerber file.")
         )
 
-        self.gerber_units_radio = RadioSet([{'label': _('INCH'), 'value': 'IN'},
-                                            {'label': _('MM'), 'value': 'MM'}])
+        self.gerber_units_radio = RadioSet([{'label': _('Inch'), 'value': 'IN'},
+                                            {'label': _('mm'), 'value': 'MM'}])
         self.gerber_units_radio.setToolTip(
             _("The units used in the Gerber file.")
         )

+ 2 - 2
appGUI/preferences/gerber/GerberGenPrefGroupUI.py

@@ -84,8 +84,8 @@ class GerberGenPrefGroupUI(OptionsGroupUI):
             _("The units used in the Gerber file.")
         )
 
-        self.gerber_units_radio = RadioSet([{'label': _('INCH'), 'value': 'IN'},
-                                            {'label': _('MM'), 'value': 'MM'}])
+        self.gerber_units_radio = RadioSet([{'label': _('Inch'), 'value': 'IN'},
+                                            {'label': _('mm'), 'value': 'MM'}])
         self.gerber_units_radio.setToolTip(
             _("The units used in the Gerber file.")
         )

+ 1 - 1
appGUI/preferences/tools/Tools2FiducialsPrefGroupUI.py

@@ -73,7 +73,7 @@ class Tools2FiducialsPrefGroupUI(OptionsGroupUI):
             {'label': _('Auto'), 'value': 'auto'},
             {"label": _("Manual"), "value": "manual"}
         ], stretch=False)
-        self.mode_label = QtWidgets.QLabel(_("Mode:"))
+        self.mode_label = QtWidgets.QLabel('%s:' % _("Mode"))
         self.mode_label.setToolTip(
             _("- 'Auto' - automatic placement of fiducials in the corners of the bounding box.\n"
               "- 'Manual' - manual placement of fiducials.")

+ 1 - 1
appGUI/preferences/tools/Tools2sidedPrefGroupUI.py

@@ -66,7 +66,7 @@ class Tools2sidedPrefGroupUI(OptionsGroupUI):
         # ## Axis
         self.mirror_axis_radio = RadioSet([{'label': 'X', 'value': 'X'},
                                            {'label': 'Y', 'value': 'Y'}])
-        self.mirax_label = QtWidgets.QLabel(_("Mirror Axis:"))
+        self.mirax_label = QtWidgets.QLabel('%s:' % _("Mirror Axis"))
         self.mirax_label.setToolTip(
             _("Mirror vertically (X) or horizontally (Y).")
         )

+ 1 - 1
appGUI/preferences/tools/ToolsDrillPrefGroupUI.py

@@ -306,7 +306,7 @@ class ToolsDrillPrefGroupUI(OptionsGroupUI):
         # Start Z
         startzlabel = FCLabel('%s:' % _('Start Z'))
         startzlabel.setToolTip(
-            _("Height of the tool just after start.\n"
+            _("Height of the tool just after starting the work.\n"
               "Delete the value if you don't need this feature.")
         )
         self.estartz_entry = NumericalEvalEntry(border_color='#0069A9')

+ 1 - 1
appGUI/preferences/tools/ToolsFilmPrefGroupUI.py

@@ -198,7 +198,7 @@ class ToolsFilmPrefGroupUI(OptionsGroupUI):
                                           {'label': _('Y'), 'value': 'y'},
                                           {'label': _('Both'), 'value': 'both'}],
                                          stretch=False)
-        self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror axis"))
+        self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror Axis"))
 
         grid0.addWidget(self.film_mirror_axis_label, 13, 0)
         grid0.addWidget(self.film_mirror_axis, 13, 1)

+ 6 - 6
appGUI/preferences/tools/ToolsISOPrefGroupUI.py

@@ -181,7 +181,7 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
         # Milling Type Radio Button
         self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type'))
         self.milling_type_label.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -189,7 +189,7 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
         self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
                                             {'label': _('Conventional'), 'value': 'cv'}])
         self.milling_type_radio.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -244,11 +244,11 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
         self.rest_cb.setObjectName("i_rest_machining")
         self.rest_cb.setToolTip(
             _("If checked, use 'rest machining'.\n"
-              "Basically it will isolate outside PCB features,\n"
+              "Basically it will process copper outside PCB features,\n"
               "using the biggest tool and continue with the next tools,\n"
-              "from bigger to smaller, to isolate the copper features that\n"
-              "could not be cleared by previous tool, until there is\n"
-              "no more copper features to isolate or there are no more tools.\n"
+              "from bigger to smaller, to process the copper features that\n"
+              "could not be processed by previous tool, until there is\n"
+              "nothing left to process or there are no more tools.\n\n"
               "If not checked, use the standard algorithm.")
         )
 

+ 10 - 12
appGUI/preferences/tools/ToolsNCCPrefGroupUI.py

@@ -136,7 +136,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
         # Milling Type Radio Button
         self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type'))
         self.milling_type_label.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -144,7 +144,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
         self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
                                             {'label': _('Conventional'), 'value': 'cv'}])
         self.milling_type_radio.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -183,8 +183,8 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
         nccoverlabel.setToolTip(
            _("How much (percentage) of the tool width to overlap each tool pass.\n"
              "Adjust the value starting with lower values\n"
-             "and increasing it if areas that should be cleared are still \n"
-             "not cleared.\n"
+             "and increasing it if areas that should be processed are still \n"
+             "not processed.\n"
              "Lower values = faster processing, faster execution on CNC.\n"
              "Higher values = slow processing and slow execution on CNC\n"
              "due of too many paths.")
@@ -256,8 +256,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
         self.ncc_choice_offset_cb.setToolTip(
             _("If used, it will add an offset to the copper features.\n"
               "The copper clearing will finish to a distance\n"
-              "from the copper features.\n"
-              "The value can be between 0 and 10 FlatCAM units.")
+              "from the copper features.")
         )
 
         grid0.addWidget(self.ncc_choice_offset_cb, 14, 0, 1, 2)
@@ -267,8 +266,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
         self.ncc_offset_label.setToolTip(
             _("If used, it will add an offset to the copper features.\n"
               "The copper clearing will finish to a distance\n"
-              "from the copper features.\n"
-              "The value can be between 0.0 and 9999.9 FlatCAM units.")
+              "from the copper features.")
         )
         self.ncc_offset_spinner = FCDoubleSpinner()
         self.ncc_offset_spinner.set_range(0.00, 10000.0000)
@@ -288,11 +286,11 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
         self.ncc_rest_cb = FCCheckBox('%s' % _("Rest"))
         self.ncc_rest_cb.setToolTip(
             _("If checked, use 'rest machining'.\n"
-              "Basically it will clear copper outside PCB features,\n"
+              "Basically it will process copper outside PCB features,\n"
               "using the biggest tool and continue with the next tools,\n"
-              "from bigger to smaller, to clear areas of copper that\n"
-              "could not be cleared by previous tool, until there is\n"
-              "no more copper to clear or there are no more tools.\n"
+              "from bigger to smaller, to process the copper features that\n"
+              "could not be processed by previous tool, until there is\n"
+              "nothing left to process or there are no more tools.\n\n"
               "If not checked, use the standard algorithm.")
         )
 

+ 6 - 6
appGUI/preferences/tools/ToolsPaintPrefGroupUI.py

@@ -162,8 +162,8 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI):
         ovlabel.setToolTip(
             _("How much (percentage) of the tool width to overlap each tool pass.\n"
               "Adjust the value starting with lower values\n"
-              "and increasing it if areas that should be painted are still \n"
-              "not painted.\n"
+              "and increasing it if areas that should be processed are still \n"
+              "not processed.\n"
               "Lower values = faster processing, faster execution on CNC.\n"
               "Higher values = slow processing and slow execution on CNC\n"
               "due of too many paths.")
@@ -243,11 +243,11 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI):
         self.rest_cb.setObjectName(_("Rest"))
         self.rest_cb.setToolTip(
             _("If checked, use 'rest machining'.\n"
-              "Basically it will clear copper outside PCB features,\n"
+              "Basically it will process copper outside PCB features,\n"
               "using the biggest tool and continue with the next tools,\n"
-              "from bigger to smaller, to clear areas of copper that\n"
-              "could not be cleared by previous tool, until there is\n"
-              "no more copper to clear or there are no more tools.\n\n"
+              "from bigger to smaller, to process the copper features that\n"
+              "could not be processed by previous tool, until there is\n"
+              "nothing left to process or there are no more tools.\n\n"
               "If not checked, use the standard algorithm.")
         )
         grid0.addWidget(self.rest_cb, 14, 0, 1, 2)

+ 2 - 2
appObjects/FlatCAMCNCJob.py

@@ -1679,7 +1679,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
                 return 'fail'
 
     def on_edit_probing_gcode(self):
-        self.app.proc_container.view.set_busy(_("Loading..."))
+        self.app.proc_container.view.set_busy('%s...' % _("Loading"))
 
         gco = self.probing_gcode_text
         if gco is None or gco == '':
@@ -1969,7 +1969,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
         :return:
         """
 
-        self.app.proc_container.view.set_busy(_("Loading..."))
+        self.app.proc_container.view.set_busy('%s...' % _("Loading"))
 
         preamble = self.prepend_snippet
         postamble = self.append_snippet

+ 1 - 1
appObjects/FlatCAMGeometry.py

@@ -2001,7 +2001,7 @@ class GeometryObject(FlatCAMObj, Geometry):
             if self.special_group:
                 self.app.inform.emit(
                     '[WARNING_NOTCL] %s %s %s.' %
-                    (_("This Geometry can't be processed because it is"), str(self.special_group), _("geometry"))
+                    (_("This Geometry can't be processed because it is"), str(self.special_group), _("Geometry"))
                 )
                 return
         except AttributeError:

+ 1 - 1
appObjects/FlatCAMScript.py

@@ -126,7 +126,7 @@ class ScriptObject(FlatCAMObj):
         # ---------------------------------------------------- #
         # ----------- LOAD THE TEXT SOURCE FILE -------------- #
         # ---------------------------------------------------- #
-        self.app.proc_container.view.set_busy(_("Loading..."))
+        self.app.proc_container.view.set_busy('%s...' % _("Loading"))
         self.script_editor_tab.t_frame.hide()
 
         try:

+ 6 - 8
appParsers/ParseGerber.py

@@ -421,7 +421,7 @@ class Gerber(Geometry):
 
         s_tol = float(self.app.defaults["gerber_simp_tolerance"])
 
-        self.app.inform.emit('%s %d %s.' % (_("Gerber processing. Parsing"), len(glines), _("lines")))
+        self.app.inform.emit('%s %d %s.' % (_("Gerber processing. Parsing"), len(glines), _("Lines").lower()))
         try:
             for gline in glines:
                 if self.app.abort_flag:
@@ -2042,7 +2042,7 @@ class Gerber(Geometry):
             log.debug('camlib.Gerber.scale() Exception --> %s' % str(e))
             return 'fail'
 
-        self.app.inform.emit('[success] %s' % _("Gerber Scale done."))
+        self.app.inform.emit('[success] %s' % _("Done."))
         self.app.proc_container.new_text = ''
 
         # ## solid_geometry ???
@@ -2133,8 +2133,7 @@ class Gerber(Geometry):
             log.debug('camlib.Gerber.offset() Exception --> %s' % str(e))
             return 'fail'
 
-        self.app.inform.emit('[success] %s' %
-                             _("Gerber Offset done."))
+        self.app.inform.emit('[success] %s' % _("Done."))
         self.app.proc_container.new_text = ''
 
     def mirror(self, axis, point):
@@ -2209,8 +2208,7 @@ class Gerber(Geometry):
             log.debug('camlib.Gerber.mirror() Exception --> %s' % str(e))
             return 'fail'
 
-        self.app.inform.emit('[success] %s' %
-                             _("Gerber Mirror done."))
+        self.app.inform.emit('[success] %s' % _("Done."))
         self.app.proc_container.new_text = ''
 
     def skew(self, angle_x, angle_y, point):
@@ -2284,7 +2282,7 @@ class Gerber(Geometry):
             log.debug('camlib.Gerber.skew() Exception --> %s' % str(e))
             return 'fail'
 
-        self.app.inform.emit('[success] %s' % _("Gerber Skew done."))
+        self.app.inform.emit('[success] %s' % _("Done."))
         self.app.proc_container.new_text = ''
 
     def rotate(self, angle, point):
@@ -2346,7 +2344,7 @@ class Gerber(Geometry):
         except Exception as e:
             log.debug('camlib.Gerber.rotate() Exception --> %s' % str(e))
             return 'fail'
-        self.app.inform.emit('[success] %s' % _("Gerber Rotate done."))
+        self.app.inform.emit('[success] %s' % _("Done."))
         self.app.proc_container.new_text = ''
 
     def buffer(self, distance, join=2, factor=None):

+ 1 - 1
appParsers/ParseHPGL2.py

@@ -198,7 +198,7 @@ class HPGL2:
         line_num = 0
         gline = ""
 
-        self.app.inform.emit('%s %d %s.' % (_("HPGL2 processing. Parsing"), len(glines), _("lines")))
+        self.app.inform.emit('%s %d %s.' % (_("HPGL2 processing. Parsing"), len(glines), _("Lines").lower()))
         try:
             for gline in glines:
                 if self.app.abort_flag:

+ 2 - 2
appTools/ToolCalibration.py

@@ -600,7 +600,7 @@ class ToolCalibration(AppTool):
             self.cal_object = model_index.internalPointer().obj
         except Exception as e:
             log.debug("ToolCalibration.on_cal_button_click() --> %s" % str(e))
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no FlatCAM object selected..."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return 'fail'
 
         obj_name = self.cal_object.options["name"] + "_calibrated"
@@ -696,7 +696,7 @@ class ToolCalibration(AppTool):
         obj_name = obj_name
 
         if obj is None:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no FlatCAM object selected..."))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             log.debug("ToolCalibration.new_calibrated_object() --> No object to calibrate")
             return 'fail'
 

+ 1 - 1
appTools/ToolDblSided.py

@@ -403,7 +403,7 @@ class DblSidedTool(AppTool):
         obj_list = self.app.collection.get_selected()
 
         if not obj_list:
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No object(s) selected..."))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
             return
 
         for obj in obj_list:

+ 2 - 2
appTools/ToolDrilling.py

@@ -1670,7 +1670,7 @@ class ToolDrilling(AppTool, Excellon):
         # Object initialization function for app.app_obj.new_object()
         def job_init(job_obj, app_obj):
             assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj)
-            app_obj.inform.emit(_("Generating Excellon CNCJob..."))
+            app_obj.inform.emit(_("Generating CNCJob..."))
 
             # #########################################################################################################
             # #########################################################################################################
@@ -2414,7 +2414,7 @@ class DrillingUI:
         # Start move Z:
         self.estartz_label = QtWidgets.QLabel('%s:' % _("Start Z"))
         self.estartz_label.setToolTip(
-            _("Height of the tool just after start.\n"
+            _("Height of the tool just after starting the work.\n"
               "Delete the value if you don't need this feature.")
         )
         self.estartz_entry = NumericalEvalEntry(border_color='#0069A9')

+ 6 - 6
appTools/ToolFilm.py

@@ -156,19 +156,19 @@ class Film(AppTool):
         try:
             name = self.ui.tf_object_combo.currentText()
         except Exception:
-            self.app.inform.emit('[ERROR_NOTCL] %s' %
-                                 _("No FlatCAM object selected. Load an object for Film and retry."))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' %
+                                 (_("No object is selected."), _("Load an object for Film and retry.")))
             return
 
         try:
             boxname = self.ui.tf_box_combo.currentText()
         except Exception:
-            self.app.inform.emit('[ERROR_NOTCL] %s' %
-                                 _("No FlatCAM object selected. Load an object for Box and retry."))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' %
+                                 (_("No object is selected."), _("Load an object for Box and retry.")))
             return
 
         if name == '' or boxname == '':
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("No FlatCAM object selected."))
+            self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
             return
 
         scale_stroke_width = float(self.ui.film_scale_stroke_entry.get_value())
@@ -1108,7 +1108,7 @@ class FilmUI:
                                           {'label': _('Y'), 'value': 'y'},
                                           {'label': _('Both'), 'value': 'both'}],
                                          stretch=False)
-        self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror axis"))
+        self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror Axis"))
 
         grid0.addWidget(self.film_mirror_axis_label, 16, 0)
         grid0.addWidget(self.film_mirror_axis, 16, 1)

+ 7 - 7
appTools/ToolIsolation.py

@@ -1476,7 +1476,7 @@ class ToolIsolation(AppTool, Gerber):
             self.find_safe_tooldia_multiprocessing()
 
         def worker_task(iso_obj):
-            with self.app.proc_container.new(_("Isolating ...")):
+            with self.app.proc_container.new('%s ...' % _("Isolating")):
                 self.isolate_handler(iso_obj)
 
         self.app.worker_task.emit({'fcn': worker_task, 'params': [self.grb_obj]})
@@ -3308,7 +3308,7 @@ class IsoUI:
         # Milling Type Radio Button
         self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
         self.milling_type_label.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -3316,7 +3316,7 @@ class IsoUI:
         self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
                                             {'label': _('Conventional'), 'value': 'cv'}])
         self.milling_type_radio.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -3392,11 +3392,11 @@ class IsoUI:
         self.rest_cb.setObjectName("i_rest")
         self.rest_cb.setToolTip(
             _("If checked, use 'rest machining'.\n"
-              "Basically it will isolate outside PCB features,\n"
+              "Basically it will process copper outside PCB features,\n"
               "using the biggest tool and continue with the next tools,\n"
-              "from bigger to smaller, to isolate the copper features that\n"
-              "could not be cleared by previous tool, until there is\n"
-              "no more copper features to isolate or there are no more tools.\n"
+              "from bigger to smaller, to process the copper features that\n"
+              "could not be processed by previous tool, until there is\n"
+              "nothing left to process or there are no more tools.\n\n"
               "If not checked, use the standard algorithm.")
         )
 

+ 4 - 4
appTools/ToolMilling.py

@@ -1352,7 +1352,7 @@ class ToolMilling(AppTool, Excellon):
         def job_init(job_obj, app_obj):
             assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj)
 
-            app_obj.inform.emit(_("Generating Excellon CNCJob..."))
+            app_obj.inform.emit(_("Generating CNCJob..."))
 
             # get the tool_table items in a list of row items
             tool_table_items = self.get_selected_tools_table_items()
@@ -2086,7 +2086,7 @@ class MillingUI:
         # Start move Z:
         self.estartz_label = QtWidgets.QLabel('%s:' % _("Start Z"))
         self.estartz_label.setToolTip(
-            _("Height of the tool just after start.\n"
+            _("Height of the tool just after starting the work.\n"
               "Delete the value if you don't need this feature.")
         )
         self.estartz_entry = NumericalEvalEntry(border_color='#0069A9')
@@ -2163,7 +2163,7 @@ class MillingUI:
         self.feedrate_probe_entry.setVisible(False)
 
         # Preprocessor Excellon selection
-        pp_excellon_label = QtWidgets.QLabel('%s:' % _("Preprocessor E"))
+        pp_excellon_label = QtWidgets.QLabel('%s:' % _("Preprocessor"))
         pp_excellon_label.setToolTip(
             _("The preprocessor JSON file that dictates\n"
               "Gcode output for Excellon Objects.")
@@ -2175,7 +2175,7 @@ class MillingUI:
         self.grid3.addWidget(self.pp_excellon_name_cb, 15, 1)
 
         # Preprocessor Geometry selection
-        pp_geo_label = QtWidgets.QLabel('%s:' % _("Preprocessor G"))
+        pp_geo_label = QtWidgets.QLabel('%s:' % _("Preprocessor"))
         pp_geo_label.setToolTip(
             _("The preprocessor JSON file that dictates\n"
               "Gcode output for Geometry (Milling) Objects.")

+ 2 - 1
appTools/ToolMove.py

@@ -163,7 +163,8 @@ class ToolMove(AppTool):
                         with self.app.proc_container.new(_("Moving ...")):
 
                             if not obj_list:
-                                app_obj.app.inform.emit('[WARNING_NOTCL] %s' % _("No object(s) selected."))
+                                app_obj.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."),
+                                                                                 _("No object is selected.")))
                                 return "fail"
 
                             try:

+ 14 - 16
appTools/ToolNCC.py

@@ -2167,9 +2167,9 @@ class NonCopperClear(AppTool, Gerber):
         log.debug("Executing the handler ...")
 
         if run_threaded:
-            proc = self.app.proc_container.new(_("Non-Copper clearing ..."))
+            proc = self.app.proc_container.new('%s...' % _("Non-Copper Clearing"))
         else:
-            self.app.proc_container.view.set_busy(_("Non-Copper clearing ..."))
+            self.app.proc_container.view.set_busy('%s...' % _("Non-Copper Clearing"))
             QtWidgets.QApplication.processEvents()
 
         # ######################################################################################################
@@ -2751,9 +2751,9 @@ class NonCopperClear(AppTool, Gerber):
         :return:
         """
         if run_threaded:
-            proc = self.app.proc_container.new(_("Non-Copper clearing ..."))
+            proc = self.app.proc_container.new('%s...' % _("Non-Copper Clearing"))
         else:
-            self.app.proc_container.view.set_busy(_("Non-Copper clearing ..."))
+            self.app.proc_container.view.set_busy('%s...' % _("Non-Copper Clearing"))
             QtWidgets.QApplication.processEvents()
 
         # #####################################################################
@@ -4180,7 +4180,7 @@ class NccUI:
         # Milling Type Radio Button
         self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
         self.milling_type_label.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -4188,7 +4188,7 @@ class NccUI:
         self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
                                             {'label': _('Conventional'), 'value': 'cv'}])
         self.milling_type_radio.setToolTip(
-            _("Milling type when the selected tool is of type: 'iso_op':\n"
+            _("Milling type:\n"
               "- climb / best for precision milling and to reduce tool usage\n"
               "- conventional / useful when there is no backlash compensation")
         )
@@ -4205,8 +4205,8 @@ class NccUI:
         self.nccoverlabel.setToolTip(
             _("How much (percentage) of the tool width to overlap each tool pass.\n"
               "Adjust the value starting with lower values\n"
-              "and increasing it if areas that should be cleared are still \n"
-              "not cleared.\n"
+              "and increasing it if areas that should be processed are still \n"
+              "not processed.\n"
               "Lower values = faster processing, faster execution on CNC.\n"
               "Higher values = slow processing and slow execution on CNC\n"
               "due of too many paths.")
@@ -4284,8 +4284,7 @@ class NccUI:
         self.ncc_choice_offset_cb.setToolTip(
             _("If used, it will add an offset to the copper features.\n"
               "The copper clearing will finish to a distance\n"
-              "from the copper features.\n"
-              "The value can be between 0 and 10 FlatCAM units.")
+              "from the copper features.")
         )
         self.grid3.addWidget(self.ncc_choice_offset_cb, 19, 0)
 
@@ -4337,11 +4336,11 @@ class NccUI:
 
         self.ncc_rest_cb.setToolTip(
             _("If checked, use 'rest machining'.\n"
-              "Basically it will clear copper outside PCB features,\n"
+              "Basically it will process copper outside PCB features,\n"
               "using the biggest tool and continue with the next tools,\n"
-              "from bigger to smaller, to clear areas of copper that\n"
-              "could not be cleared by previous tool, until there is\n"
-              "no more copper to clear or there are no more tools.\n"
+              "from bigger to smaller, to process the copper features that\n"
+              "could not be processed by previous tool, until there is\n"
+              "nothing left to process or there are no more tools.\n\n"
               "If not checked, use the standard algorithm.")
         )
 
@@ -4381,8 +4380,7 @@ class NccUI:
         self.rest_ncc_choice_offset_cb.setToolTip(
             _("If used, it will add an offset to the copper features.\n"
               "The copper clearing will finish to a distance\n"
-              "from the copper features.\n"
-              "The value can be between 0 and 10 FlatCAM units.")
+              "from the copper features.")
         )
         self.grid3.addWidget(self.rest_ncc_choice_offset_cb, 28, 0)
 

+ 8 - 8
appTools/ToolPaint.py

@@ -2182,13 +2182,13 @@ class ToolPaint(AppTool, Gerber):
             proc.done()
 
             if ret == 'fail':
-                self.app.inform.emit('[ERROR] %s' % _("Paint failed."))
+                self.app.inform.emit('[ERROR] %s' % _("Failed."))
                 return
 
             # focus on Properties Tab
             # self.app.ui.notebook.setCurrentWidget(self.app.ui.properties_tab)
 
-            self.app.inform.emit('[success] %s' % _("Paint Done."))
+            self.app.inform.emit('[success] %s' % _("Done."))
 
         # Promise object with the new name
         self.app.collection.promise(name)
@@ -2974,8 +2974,8 @@ class PaintUI:
         ovlabel.setToolTip(
             _("How much (percentage) of the tool width to overlap each tool pass.\n"
               "Adjust the value starting with lower values\n"
-              "and increasing it if areas that should be painted are still \n"
-              "not painted.\n"
+              "and increasing it if areas that should be processed are still \n"
+              "not processed.\n"
               "Lower values = faster processing, faster execution on CNC.\n"
               "Higher values = slow processing and slow execution on CNC\n"
               "due of too many paths.")
@@ -3077,11 +3077,11 @@ class PaintUI:
         self.rest_cb.setObjectName('p_rest_machining')
         self.rest_cb.setToolTip(
             _("If checked, use 'rest machining'.\n"
-              "Basically it will clear copper outside PCB features,\n"
+              "Basically it will process copper outside PCB features,\n"
               "using the biggest tool and continue with the next tools,\n"
-              "from bigger to smaller, to clear areas of copper that\n"
-              "could not be cleared by previous tool, until there is\n"
-              "no more copper to clear or there are no more tools.\n\n"
+              "from bigger to smaller, to process the copper features that\n"
+              "could not be processed by previous tool, until there is\n"
+              "nothing left to process or there are no more tools.\n\n"
               "If not checked, use the standard algorithm.")
         )
         grid4.addWidget(self.rest_cb, 16, 0, 1, 2)

+ 8 - 11
appTools/ToolPanelize.py

@@ -603,24 +603,21 @@ class Panelize(AppTool):
                         panel_type, self.outname, job_init_geometry, plot=True, autoselected=True)
 
         if self.constrain_flag is False:
-            self.app.inform.emit('[success] %s' % _("Panel done..."))
+            self.app.inform.emit('[success] %s' % _("Done."))
         else:
             self.constrain_flag = False
             self.app.inform.emit(_("{text} Too big for the constrain area. "
                                    "Final panel has {col} columns and {row} rows").format(
                 text='[WARNING] ', col=columns, row=rows))
 
-        proc = self.app.proc_container.new(_("Working ..."))
-
         def job_thread(app_obj):
-            try:
-                panelize_worker()
-                app_obj.inform.emit('[success] %s' % _("Panel created successfully."))
-            except Exception as ee:
-                proc.done()
-                log.debug(str(ee))
-                return
-            proc.done()
+            with self.app.proc_container.new(_("Working ...")):
+                try:
+                    panelize_worker()
+                    app_obj.inform.emit('[success] %s' % _("Panel created successfully."))
+                except Exception as ee:
+                    log.debug(str(ee))
+                    return
 
         self.app.collection.promise(self.outname)
         self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]})

+ 3 - 3
appTools/ToolPcbWizard.py

@@ -450,8 +450,8 @@ class WizardUI:
         form_layout1.addRow(self.zeros_label, self.zeros_radio)
 
         # Units type
-        self.units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
-                                     {'label': _('MM'), 'value': 'METRIC'}])
+        self.units_radio = RadioSet([{'label': _('Inch'), 'value': 'INCH'},
+                                     {'label': _('mm'), 'value': 'METRIC'}])
         self.units_label = FCLabel("<b>%s:</b>" % _('Units'))
         self.units_label.setToolTip(
             _("The type of units that the coordinates and tool\n"
@@ -463,7 +463,7 @@ class WizardUI:
 
         self.import_button = QtWidgets.QPushButton(_("Import Excellon"))
         self.import_button.setToolTip(
-            _("Import in FlatCAM an Excellon file\n"
+            _("Import an Excellon file\n"
               "that store it's information's in 2 files.\n"
               "One usually has .DRL extension while\n"
               "the other has .INF extension.")

+ 1 - 1
appTools/ToolProperties.py

@@ -109,7 +109,7 @@ class Properties(AppTool):
     def properties(self):
         obj_list = self.app.collection.get_selected()
         if not obj_list:
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
+            self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
             self.app.ui.notebook.setTabText(2, _("Tools"))
             self.properties_frame.hide()
             self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab)

+ 7 - 8
appTools/ToolTransform.py

@@ -139,7 +139,7 @@ class ToolTransform(AppTool):
                 py = (ymax + ymin) * 0.5
                 return px, py
             else:
-                self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
+                self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
                 return "fail"
         elif ref_val == 2:  # "Point" reference
             point_val = self.uipoint_entry.get_value()
@@ -290,7 +290,7 @@ class ToolTransform(AppTool):
         obj_list = self.app.collection.get_selected()
 
         if not obj_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to rotate!"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
         else:
             with self.app.proc_container.new(_("Appying Rotate")):
@@ -315,7 +315,7 @@ class ToolTransform(AppTool):
         obj_list = self.app.collection.get_selected()
 
         if not obj_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s!' % _("No object selected. Please Select an object to flip"))
+            self.app.inform.emit('[WARNING_NOTCL] %s!' % _("No object is selected."))
             return
         else:
             with self.app.proc_container.new(_("Applying Flip")):
@@ -360,8 +360,7 @@ class ToolTransform(AppTool):
             return
 
         if not obj_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' %
-                                 _("No object selected. Please Select an object to shear/skew!"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
         else:
             with self.app.proc_container.new(_("Applying Skew")):
@@ -387,7 +386,7 @@ class ToolTransform(AppTool):
         obj_list = self.app.collection.get_selected()
 
         if not obj_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to scale!"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
         else:
             with self.app.proc_container.new(_("Applying Scale")):
@@ -414,7 +413,7 @@ class ToolTransform(AppTool):
         obj_list = self.app.collection.get_selected()
 
         if not obj_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to offset!"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
         else:
             with self.app.proc_container.new(_("Applying Offset")):
@@ -443,7 +442,7 @@ class ToolTransform(AppTool):
         obj_list = self.app.collection.get_selected()
 
         if not obj_list:
-            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to buffer!"))
+            self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
         else:
             with self.app.proc_container.new(_("Applying Buffer")):

+ 28 - 29
app_Main.py

@@ -4763,7 +4763,7 @@ class App(QtCore.QObject):
                         self.exc_areas.clear_shapes()
                     self.inform.emit('%s...' % _("Object(s) deleted"))
                 else:
-                    self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No object(s) selected..."))
+                    self.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
         else:
             self.inform.emit(_("Save the work in Editor and try again ..."))
 
@@ -5104,7 +5104,7 @@ class App(QtCore.QObject):
         self.defaults.report_usage("on_locate()")
 
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return 'fail'
 
         class DialogBoxChoice(QtWidgets.QDialog):
@@ -5433,7 +5433,7 @@ class App(QtCore.QObject):
         if not self.collection.get_selected():
             log.warning("App.convert_any2geo --> No object selected")
             self.inform.emit('[WARNING_NOTCL] %s' %
-                             _("No object is selected. Select an object and try again."))
+                             _("No object is selected."))
             return
 
         for obj in self.collection.get_selected():
@@ -5511,7 +5511,7 @@ class App(QtCore.QObject):
         if not self.collection.get_selected():
             log.warning("App.convert_any2gerber --> No object selected")
             self.inform.emit('[WARNING_NOTCL] %s' %
-                             _("No object is selected. Select an object and try again."))
+                             _("No object is selected."))
             return
 
         for obj in self.collection.get_selected():
@@ -5681,7 +5681,7 @@ class App(QtCore.QObject):
 
         if not self.collection.get_selected():
             log.warning("App.convert_any2excellon--> No object selected")
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected. Select an object and try again."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         for obj in self.collection.get_selected():
@@ -6019,7 +6019,7 @@ class App(QtCore.QObject):
         ymaxlist = []
 
         if not obj_list:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Flip on Y axis."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
         else:
             try:
                 # first get a bounding box to fit all
@@ -6065,7 +6065,7 @@ class App(QtCore.QObject):
         ymaxlist = []
 
         if not obj_list:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Flip on X axis."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
         else:
             try:
                 # first get a bounding box to fit all
@@ -6112,7 +6112,7 @@ class App(QtCore.QObject):
         ymaxlist = []
 
         if not obj_list:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Rotate."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
         else:
             if silent is False:
                 rotatebox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"),
@@ -6165,7 +6165,7 @@ class App(QtCore.QObject):
         yminlist = []
 
         if not obj_list:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Skew/Shear on X axis."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
         else:
             skewxbox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"),
                                      min=-360, max=360, decimals=4,
@@ -6203,7 +6203,7 @@ class App(QtCore.QObject):
         yminlist = []
 
         if not obj_list:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Skew/Shear on Y axis."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
         else:
             skewybox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"),
                                      min=-360, max=360, decimals=4,
@@ -6348,7 +6348,7 @@ class App(QtCore.QObject):
                 try:
                     self.defaults["global_grid_context_menu"][str(units)].remove(val)
                 except ValueError:
-                    self.inform.emit('[ERROR_NOTCL]%s...' % _(" Grid Value does not exist"))
+                    self.inform.emit('[ERROR_NOTCL]%s...' % _("Grid Value does not exist"))
                     return
                 self.inform.emit('[success] %s...' % _("Grid Value deleted"))
         else:
@@ -6394,12 +6394,11 @@ class App(QtCore.QObject):
             name = obj.options["name"]
         except AttributeError:
             self.log.debug("on_copy_name() --> No object selected to copy it's name")
-            self.inform.emit('[WARNING_NOTCL] %s' %
-                             _(" No object selected to copy it's name"))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         self.clipboard.setText(name)
-        self.inform.emit(_("Name copied on clipboard ..."))
+        self.inform.emit(_("Name copied to clipboard ..."))
 
     def on_mouse_click_over_plot(self, event):
         """
@@ -7173,7 +7172,7 @@ class App(QtCore.QObject):
             return 'fail'
 
         self.inform.emit('%s' % _("Viewing the source code of the selected object."))
-        self.proc_container.view.set_busy(_("Loading..."))
+        self.proc_container.view.set_busy('%s...' % _("Loading"))
 
         flt = "All Files (*.*)"
         if obj.kind == 'gerber':
@@ -7271,7 +7270,7 @@ class App(QtCore.QObject):
         :return: None
         """
         dia_box = Dialog_box(title=_("Go to Line ..."),
-                             label=_("Line:"),
+                             label='%s:' % _("Line"),
                              icon=QtGui.QIcon(self.resource_location + '/jump_to16.png'),
                              initial_text='')
         try:
@@ -8506,7 +8505,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             msg = _("Please Select a Geometry object to export")
             msgbox = QtWidgets.QMessageBox()
             msgbox.setIcon(QtWidgets.QMessageBox.Warning)
@@ -8608,7 +8607,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         # Check for more compatible types and add as required
@@ -8650,7 +8649,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         # Check for more compatible types and add as required
@@ -8692,7 +8691,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         # Check for more compatible types and add as required
@@ -8734,7 +8733,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         # Check for more compatible types and add as required
@@ -8775,7 +8774,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         # Check for more compatible types and add as required
@@ -8820,7 +8819,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             return
 
         # Check for more compatible types and add as required
@@ -8865,7 +8864,7 @@ class MenuFileHandlers(QtCore.QObject):
 
         obj = self.app.collection.get_active()
         if obj is None:
-            self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
             msg = _("Please Select a Geometry object to export")
             msgbox = QtWidgets.QMessageBox()
             msgbox.setIcon(QtWidgets.QMessageBox.Warning)
@@ -9328,11 +9327,11 @@ class MenuFileHandlers(QtCore.QObject):
                 obj_name = _("FlatCAM objects print")
         except AttributeError as err:
             self.app.log.debug("App.on_file_save_object_pdf() --> %s" % str(err))
-            self.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
             return
 
         if not obj_selection:
-            self.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
+            self.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
             return
 
         filter_ = "PDF File .pdf (*.PDF);; All Files (*.*)"
@@ -10067,7 +10066,7 @@ class MenuFileHandlers(QtCore.QObject):
             # appGUI feedback
             app_obj.inform.emit('[success] %s: %s' % (_("Opened"), filename))
 
-        with self.app.proc_container.new(_("Importing ...")):
+        with self.app.proc_container.new('%s ...' % _("Importing")):
 
             # Object name
             name = outname or filename.split('/')[-1].split('\\')[-1]
@@ -10122,7 +10121,7 @@ class MenuFileHandlers(QtCore.QObject):
             # appGUI feedback
             app_obj.inform.emit('[success] %s: %s' % (_("Opened"), filename))
 
-        with self.app.proc_container.new(_("Importing ...")):
+        with self.app.proc_container.new('%s ...' % _("Importing")):
 
             # Object name
             name = outname or filename.split('/')[-1].split('\\')[-1]
@@ -10385,7 +10384,7 @@ class MenuFileHandlers(QtCore.QObject):
             # # ## Object creation # ##
             ret = self.app.app_obj.new_object("geometry", name, obj_init, autoselected=False)
             if ret == 'fail':
-                self.inform.emit('[ERROR_NOTCL]%s' % _(' Open HPGL2 failed. Probable not a HPGL2 file.'))
+                self.inform.emit('[ERROR_NOTCL]%s' % _('Failed. Probable not a HPGL2 file.'))
                 return 'fail'
 
             # Register recent file

+ 7 - 6
camlib.py

@@ -2400,7 +2400,8 @@ class Geometry(object):
                 self.solid_geometry = mirror_geom(self.solid_geometry)
             self.app.inform.emit('[success] %s...' % _('Object was mirrored'))
         except AttributeError:
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to mirror. No object selected"))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
+
 
         self.app.proc_container.new_text = ''
 
@@ -2467,7 +2468,7 @@ class Geometry(object):
                 self.solid_geometry = rotate_geom(self.solid_geometry)
             self.app.inform.emit('[success] %s...' % _('Object was rotated'))
         except AttributeError:
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to rotate. No object selected"))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
 
         self.app.proc_container.new_text = ''
 
@@ -2535,7 +2536,7 @@ class Geometry(object):
                 self.solid_geometry = skew_geom(self.solid_geometry)
             self.app.inform.emit('[success] %s...' % _('Object was skewed'))
         except AttributeError:
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to skew. No object selected"))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
 
         self.app.proc_container.new_text = ''
 
@@ -2613,7 +2614,7 @@ class Geometry(object):
 
             self.app.inform.emit('[success] %s...' % _('Object was buffered'))
         except AttributeError:
-            self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to buffer. No object selected"))
+            self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
 
         self.app.proc_container.new_text = ''
 
@@ -5955,7 +5956,7 @@ class CNCjob(Geometry):
         self.gcode += self.doformat(p.lift_code, x=current_pt[0], y=current_pt[1])
         self.gcode += self.doformat(p.end_code, x=0, y=0)
         self.app.inform.emit(
-            '%s... %s %s' % (_("Finished G-Code generation"), str(path_count), _(" paths traced."))
+            '%s... %s %s.' % (_("Finished G-Code generation"), str(path_count), _("paths traced"))
         )
 
         return self.gcode, start_gcode
@@ -6073,7 +6074,7 @@ class CNCjob(Geometry):
 
         log.debug("Finishing SolderPste G-Code... %s paths traced." % path_count)
         self.app.inform.emit(
-            '%s... %s %s' % (_("Finished SolderPaste G-Code generation"), str(path_count), _("paths traced."))
+            '%s... %s %s.' % (_("Finished SolderPaste G-Code generation"), str(path_count), _("paths traced"))
         )
 
         # Finish

BIN
locale/de/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 173 - 174
locale/de/LC_MESSAGES/strings.po


BIN
locale/en/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 172 - 173
locale/en/LC_MESSAGES/strings.po


BIN
locale/es/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 174 - 173
locale/es/LC_MESSAGES/strings.po


BIN
locale/fr/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 173 - 172
locale/fr/LC_MESSAGES/strings.po


BIN
locale/it/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 171 - 169
locale/it/LC_MESSAGES/strings.po


BIN
locale/pt_BR/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 171 - 169
locale/pt_BR/LC_MESSAGES/strings.po


BIN
locale/ro/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 174 - 189
locale/ro/LC_MESSAGES/strings.po


BIN
locale/ru/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 170 - 170
locale/ru/LC_MESSAGES/strings.po


BIN
locale/tr/LC_MESSAGES/strings.mo


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 172 - 169
locale/tr/LC_MESSAGES/strings.po


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 190 - 191
locale_template/strings.pot


+ 0 - 120
make_freezed.py

@@ -1,120 +0,0 @@
-# ##########################################################
-# FlatCAM: 2D Post-processing for Manufacturing            #
-# http://flatcam.org                                       #
-# Author: Juan Pablo Caram (c)                             #
-# Date: 12/20/2018                                         #
-# MIT Licence                                              #
-#                                                          #
-# Creates a portable copy of FlatCAM, including Python     #
-# itself and all dependencies.                             #
-#                                                          #
-# This is not an aid to install FlatCAM from source on     #
-# Windows platforms. It is only useful when FlatCAM is up  #
-# and running and ready to be packaged.                    #
-# ##########################################################
-
-# ##########################################################
-# File Modified: Marius Adrian Stanciu                     #
-# Date: 3/10/2019                                          #
-# ##########################################################
-
-
-# Files not needed: Qt, tk.dll, tcl.dll, tk/, tcl/, vtk/,
-#   scipy.lib.lapack.flapack.pyd, scipy.lib.blas.fblas.pyd,
-#   numpy.core._dotblas.pyd, scipy.sparse.sparsetools._bsr.pyd,
-#   scipy.sparse.sparsetools._csr.pyd, scipy.sparse.sparsetools._csc.pyd,
-#   scipy.sparse.sparsetools._coo.pyd
-
-import os
-import site
-import sys
-import platform
-from cx_Freeze import setup, Executable
-
-# this is done to solve the tkinter not being found
-PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
-os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
-os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
-
-# Get the site-package folder, not everybody will install
-# Python into C:\PythonXX
-site_dir = site.getsitepackages()[1]
-
-include_files = []
-
-include_files.append((os.path.join(site_dir, "shapely"), "shapely"))
-include_files.append((os.path.join(site_dir, "svg"), "svg"))
-include_files.append((os.path.join(site_dir, "svg/path"), "svg"))
-include_files.append((os.path.join(site_dir, "vispy"), "vispy"))
-include_files.append((os.path.join(site_dir, "vispy/app"), "vispy/app"))
-include_files.append((os.path.join(site_dir, "vispy/app/backends"), "vispy/app/backends"))
-# include_files.append((os.path.join(site_dir, "matplotlib"), "matplotlib"))
-include_files.append((os.path.join(site_dir, "rtree"), "rtree"))
-
-if platform.architecture()[0] == '64bit':
-    include_files.append((os.path.join(site_dir, "google"), "google"))
-    include_files.append((os.path.join(site_dir, "google/protobuf"), "google/protobuf"))
-    include_files.append((os.path.join(site_dir, "ortools"), "ortools"))
-
-include_files.append(("locale", "lib/locale"))
-include_files.append(("preprocessors", "lib/preprocessors"))
-# include_files.append(("assets", "lib/assets"))
-include_files.append(("assets/examples", "lib/assets/examples"))
-include_files.append(("assets/linux", "lib/assets/linux"))
-include_files.append(("assets/resources", "lib/assets/resources"))
-# include_files.append(("share", "lib/share"))
-include_files.append(("appGUI/VisPyData", "lib/vispy"))
-include_files.append(("config", "lib/config"))
-
-include_files.append(("README.md", "README.md"))
-include_files.append(("LICENSE", "LICENSE"))
-include_files.append(("CHANGELOG.md", "CHANGELOG.md"))
-base = None
-
-# Lets not open the console while running the app
-if sys.platform == "win32":
-    base = "Win32GUI"
-
-if platform.architecture()[0] == '64bit':
-    buildOptions = dict(
-        include_files=include_files,
-        excludes=['scipy', 'pytz', "matplotlib.tests", "numpy.random._examples"],
-        # packages=['OpenGL','numpy','vispy','ortools','google']
-        # packages=['numpy','google', 'rasterio'] # works for Python 3.7
-        packages=['opengl', 'numpy', 'google', 'rasterio'],   # works for Python 3.6.5 and Python 3.7.1
-    )
-else:
-    buildOptions = dict(
-        include_files=include_files,
-        excludes=['scipy', 'pytz'],
-        # packages=['OpenGL','numpy','vispy','ortools','google']
-        # packages=['numpy', 'rasterio']  # works for Python 3.7
-        packages=['opengl', 'numpy', 'rasterio'],   # works for Python 3.6.5 and Python 3.7.1
-    )
-
-if sys.platform == "win32":
-    buildOptions["include_msvcr"] = True
-
-print("INCLUDE_FILES", include_files)
-
-
-def getTargetName():
-    my_OS = platform.system()
-    if my_OS == 'Linux':
-        return "FlatCAM"
-    elif my_OS == 'Windows':
-        return "FlatCAM.exe"
-    else:
-        return "FlatCAM.dmg"
-
-
-exe = Executable("FlatCAM.py", icon='assets/resources/flatcam_icon48.ico', base=base, targetName=getTargetName())
-
-setup(
-    name="FlatCAM",
-    author="Community effort",
-    version="8.9",
-    description="FlatCAM Evo: 2D Computer Aided PCB Manufacturing",
-    options=dict(build_exe=buildOptions),
-    executables=[exe]
-)

+ 1 - 1
tclCommands/TclCommandImportSvg.py

@@ -73,7 +73,7 @@ class TclCommandImportSvg(TclCommandSignaled):
         if obj_type != "geometry" and obj_type != "gerber":
             self.raise_tcl_error("Option type can be 'geometry' or 'gerber' only, got '%s'." % obj_type)
 
-        with self.app.proc_container.new('%s' % _("Importing ...")):
+        with self.app.proc_container.new('%s ...' % _("Importing")):
 
             # Object creation
             self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False)

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است