- 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
This commit is contained in:
Marius Stanciu 2020-11-04 18:40:59 +02:00 committed by Marius Stanciu
parent e5569360a7
commit 90e3b26b68
64 changed files with 12203 additions and 11937 deletions

View File

@ -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

View File

@ -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")
)

File diff suppressed because it is too large Load Diff

View File

@ -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):

View File

@ -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):

View File

@ -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()

View File

@ -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'))

View File

@ -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

View File

@ -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)

View File

@ -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.")
)

View File

@ -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"

View File

@ -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.")

View File

@ -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"

View File

@ -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"

View File

@ -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.")
)

View File

@ -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.")
)

View File

@ -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.")

View File

@ -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).")
)

View File

@ -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')

View File

@ -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)

View File

@ -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.")
)

View File

@ -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.")
)

View File

@ -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)

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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):

View File

@ -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:

View File

@ -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'

View File

@ -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:

View File

@ -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')

View File

@ -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)

View File

@ -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.")
)

View File

@ -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.")

View File

@ -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:

View File

@ -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)

View File

@ -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)

View File

@ -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]})

View File

@ -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.")

View File

@ -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)

View File

@ -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")):

View File

@ -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

View File

@ -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

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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]
)

View File

@ -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)