- fixed the UI layout in Excellon Editor and made sure that after changing a value in the Notebook side after the mouse is inside the canvas, the canvas takes the focus allowing the key shortcuts to work

- Turkish language strings updated (by Mehmet Kaya)
This commit is contained in:
Marius Stanciu 2020-11-04 21:40:17 +02:00 committed by Marius Stanciu
parent 90e3b26b68
commit 846c0dc59d
6 changed files with 348 additions and 376 deletions

View File

@ -14,6 +14,8 @@ CHANGELOG for FlatCAM beta
- fixed issue in the Excellon Editor where the Space key did not toggle the direction of the array of drills - 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' - combed the application strings all over the app and trimmed them up until those starting with letter 'O'
- updated the translation strings - updated the translation strings
- fixed the UI layout in Excellon Editor and made sure that after changing a value in the Notebook side after the mouse is inside the canvas, the canvas takes the focus allowing the key shortcuts to work
- Turkish language strings updated (by Mehmet Kaya)
3.11.2020 3.11.2020
@ -3080,7 +3082,7 @@ RELEASE 8.993
- added all the tools from Gerber Editor to the the contextual menu - added all the tools from Gerber Editor to the the contextual menu
- added the menu entry "Edit" in the Project contextual menu for Gerber objects - added the menu entry "Edit" in the Project contextual menu for Gerber objects
- started to work in adding slots and slots array in Excellon Editor - started to work in adding slots and slots array in Excellon Editor
- in FCSlot finished the utility geometry and the GUI for it - in SlotAdd finished the utility geometry and the GUI for it
12.08.2019 12.08.2019

View File

@ -9,7 +9,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from camlib import distance, arc, FlatCAMRTreeStorage from camlib import distance, arc, FlatCAMRTreeStorage
from appGUI.GUIElements import FCEntry, FCComboBox2, FCTable, FCDoubleSpinner, RadioSet, FCSpinner, FCButton from appGUI.GUIElements import FCEntry, FCComboBox2, FCTable, FCDoubleSpinner, RadioSet, FCSpinner, FCButton, FCLabel
from appEditors.AppGeoEditor import FCShapeTool, DrawTool, DrawToolShape, DrawToolUtilityShape, AppGeoEditor from appEditors.AppGeoEditor import FCShapeTool, DrawTool, DrawToolShape, DrawToolUtilityShape, AppGeoEditor
from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, Point from shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, Point
@ -35,7 +35,7 @@ if '_' not in builtins.__dict__:
log = logging.getLogger('base') log = logging.getLogger('base')
class FCDrillSelect(FCShapeTool): class SelectEditorExc(FCShapeTool):
def __init__(self, draw_app): def __init__(self, draw_app):
DrawTool.__init__(self, draw_app) DrawTool.__init__(self, draw_app)
self.name = 'drill_select' self.name = 'drill_select'
@ -219,7 +219,7 @@ class FCDrillSelect(FCShapeTool):
pass pass
class FCDrillAdd(FCShapeTool): class DrillAdd(FCShapeTool):
""" """
Resulting type: MultiLineString Resulting type: MultiLineString
""" """
@ -317,7 +317,7 @@ class FCDrillAdd(FCShapeTool):
pass pass
class FCDrillArray(FCShapeTool): class DrillArray(FCShapeTool):
""" """
Resulting type: MultiLineString Resulting type: MultiLineString
""" """
@ -404,7 +404,7 @@ class FCDrillArray(FCShapeTool):
def utility_geometry(self, data=None, static=None): def utility_geometry(self, data=None, static=None):
self.drill_axis = self.draw_app.ui.drill_axis_radio.get_value() self.drill_axis = self.draw_app.ui.drill_axis_radio.get_value()
self.drill_direction = self.draw_app.ui.drill_direction_radio.get_value() self.drill_direction = self.draw_app.ui.drill_array_dir_radio.get_value()
self.drill_array = self.draw_app.ui.array_type_combo.get_value() self.drill_array = self.draw_app.ui.array_type_combo.get_value()
try: try:
self.drill_array_size = int(self.draw_app.ui.drill_array_size_entry.get_value()) self.drill_array_size = int(self.draw_app.ui.drill_array_size_entry.get_value())
@ -577,7 +577,7 @@ class FCDrillArray(FCShapeTool):
pass pass
class FCSlot(FCShapeTool): class SlotAdd(FCShapeTool):
""" """
Resulting type: Polygon Resulting type: Polygon
""" """
@ -751,7 +751,7 @@ class FCSlot(FCShapeTool):
try: try:
self.geometry = DrawToolShape(self.util_shape(self.points)) self.geometry = DrawToolShape(self.util_shape(self.points))
except Exception as e: except Exception as e:
log.debug("FCSlot.make() --> %s" % str(e)) log.debug("SlotAdd.make() --> %s" % str(e))
# add the point to drills/slots if the diameter is a key in the dict, if not, create it add the drill location # add the point to drills/slots if the diameter is a key in the dict, if not, create it add the drill location
# to the value, as a list of itself # to the value, as a list of itself
@ -791,7 +791,7 @@ class FCSlot(FCShapeTool):
pass pass
class FCSlotArray(FCShapeTool): class SlotArray(FCShapeTool):
""" """
Resulting type: MultiPolygon Resulting type: MultiPolygon
""" """
@ -1150,7 +1150,7 @@ class FCSlotArray(FCShapeTool):
pass pass
class FCDrillResize(FCShapeTool): class ResizeEditorExc(FCShapeTool):
def __init__(self, draw_app): def __init__(self, draw_app):
DrawTool.__init__(self, draw_app) DrawTool.__init__(self, draw_app)
self.name = 'drill_resize' self.name = 'drill_resize'
@ -1386,7 +1386,7 @@ class FCDrillResize(FCShapeTool):
pass pass
class FCDrillMove(FCShapeTool): class MoveEditorExc(FCShapeTool):
def __init__(self, draw_app): def __init__(self, draw_app):
DrawTool.__init__(self, draw_app) DrawTool.__init__(self, draw_app)
self.name = 'drill_move' self.name = 'drill_move'
@ -1535,9 +1535,9 @@ class FCDrillMove(FCShapeTool):
pass pass
class FCDrillCopy(FCDrillMove): class CopyEditorExc(MoveEditorExc):
def __init__(self, draw_app): def __init__(self, draw_app):
FCDrillMove.__init__(self, draw_app) MoveEditorExc.__init__(self, draw_app)
self.name = 'drill_copy' self.name = 'drill_copy'
def make(self): def make(self):
@ -1777,14 +1777,14 @@ class AppExcEditor(QtCore.QObject):
def connect_exc_toolbar_signals(self): def connect_exc_toolbar_signals(self):
self.tools_exc.update({ self.tools_exc.update({
"drill_select": {"button": self.app.ui.select_drill_btn, "constructor": FCDrillSelect}, "drill_select": {"button": self.app.ui.select_drill_btn, "constructor": SelectEditorExc},
"drill_add": {"button": self.app.ui.add_drill_btn, "constructor": FCDrillAdd}, "drill_add": {"button": self.app.ui.add_drill_btn, "constructor": DrillAdd},
"drill_array": {"button": self.app.ui.add_drill_array_btn, "constructor": FCDrillArray}, "drill_array": {"button": self.app.ui.add_drill_array_btn, "constructor": DrillArray},
"slot_add": {"button": self.app.ui.add_slot_btn, "constructor": FCSlot}, "slot_add": {"button": self.app.ui.add_slot_btn, "constructor": SlotAdd},
"slot_array": {"button": self.app.ui.add_slot_array_btn, "constructor": FCSlotArray}, "slot_array": {"button": self.app.ui.add_slot_array_btn, "constructor": SlotArray},
"drill_resize": {"button": self.app.ui.resize_drill_btn, "constructor": FCDrillResize}, "drill_resize": {"button": self.app.ui.resize_drill_btn, "constructor": ResizeEditorExc},
"drill_copy": {"button": self.app.ui.copy_drill_btn, "constructor": FCDrillCopy}, "drill_copy": {"button": self.app.ui.copy_drill_btn, "constructor": CopyEditorExc},
"drill_move": {"button": self.app.ui.move_drill_btn, "constructor": FCDrillMove}, "drill_move": {"button": self.app.ui.move_drill_btn, "constructor": MoveEditorExc},
}) })
for tool in self.tools_exc: for tool in self.tools_exc:
@ -1842,7 +1842,7 @@ class AppExcEditor(QtCore.QObject):
self.ui.drill_axis_radio.set_value(self.app.defaults['excellon_editor_lin_dir']) self.ui.drill_axis_radio.set_value(self.app.defaults['excellon_editor_lin_dir'])
self.ui.drill_pitch_entry.set_value(float(self.app.defaults['excellon_editor_lin_pitch'])) self.ui.drill_pitch_entry.set_value(float(self.app.defaults['excellon_editor_lin_pitch']))
self.ui.linear_angle_spinner.set_value(float(self.app.defaults['excellon_editor_lin_angle'])) self.ui.linear_angle_spinner.set_value(float(self.app.defaults['excellon_editor_lin_angle']))
self.ui.drill_direction_radio.set_value(self.app.defaults['excellon_editor_circ_dir']) self.ui.drill_array_dir_radio.set_value(self.app.defaults['excellon_editor_circ_dir'])
self.ui.drill_angle_entry.set_value(float(self.app.defaults['excellon_editor_circ_angle'])) self.ui.drill_angle_entry.set_value(float(self.app.defaults['excellon_editor_circ_angle']))
self.ui.slot_length_entry.set_value(float(self.app.defaults['excellon_editor_slot_length'])) self.ui.slot_length_entry.set_value(float(self.app.defaults['excellon_editor_slot_length']))
@ -1856,8 +1856,14 @@ class AppExcEditor(QtCore.QObject):
self.ui.slot_array_direction_radio.set_value(self.app.defaults['excellon_editor_slot_circ_dir']) self.ui.slot_array_direction_radio.set_value(self.app.defaults['excellon_editor_slot_circ_dir'])
self.ui.slot_array_angle_entry.set_value(float(self.app.defaults['excellon_editor_slot_circ_angle'])) self.ui.slot_array_angle_entry.set_value(float(self.app.defaults['excellon_editor_slot_circ_angle']))
self.ui.slot_array_circular_frame.hide() # make sure that th visibility of the various UI frame are updated
self.ui.slot_array_linear_frame.show() # according to the set Preferences already loaded
self.on_slot_angle_radio()
self.on_array_type_combo()
self.on_slot_array_type_combo()
self.on_linear_angle_radio()
self.on_slot_array_linear_angle_radio()
def build_ui(self, first_run=None): def build_ui(self, first_run=None):
@ -2989,7 +2995,7 @@ class AppExcEditor(QtCore.QObject):
self.tools_exc[t]["button"].setChecked(False) self.tools_exc[t]["button"].setChecked(False)
self.select_tool('drill_select') self.select_tool('drill_select')
self.active_tool = FCDrillSelect(self) self.active_tool = SelectEditorExc(self)
def on_row_selected(self, row, col): def on_row_selected(self, row, col):
if col == 0: if col == 0:
@ -3067,14 +3073,14 @@ class AppExcEditor(QtCore.QObject):
if key_modifier == modifier_to_use: if key_modifier == modifier_to_use:
self.select_tool(self.active_tool.name) self.select_tool(self.active_tool.name)
else: else:
# return to Select tool but not for FCDrillAdd or FCSlot # return to Select tool but not for FCDrillAdd or SlotAdd
if isinstance(self.active_tool, FCDrillAdd) or isinstance(self.active_tool, FCSlot): if isinstance(self.active_tool, DrillAdd) or isinstance(self.active_tool, SlotAdd):
self.select_tool(self.active_tool.name) self.select_tool(self.active_tool.name)
else: else:
self.select_tool("drill_select") self.select_tool("drill_select")
return return
if isinstance(self.active_tool, FCDrillSelect): if isinstance(self.active_tool, SelectEditorExc):
# self.app.log.debug("Replotting after click.") # self.app.log.debug("Replotting after click.")
self.replot() self.replot()
else: else:
@ -3192,14 +3198,14 @@ class AppExcEditor(QtCore.QObject):
QtGui.QGuiApplication.restoreOverrideCursor() QtGui.QGuiApplication.restoreOverrideCursor()
except Exception: except Exception:
pass pass
if self.active_tool.complete is False and not isinstance(self.active_tool, FCDrillSelect): if self.active_tool.complete is False and not isinstance(self.active_tool, SelectEditorExc):
self.active_tool.complete = True self.active_tool.complete = True
self.in_action = False self.in_action = False
self.delete_utility_geometry() self.delete_utility_geometry()
self.app.inform.emit('[success] %s' % _("Done.")) self.app.inform.emit('[success] %s' % _("Done."))
self.select_tool('drill_select') self.select_tool('drill_select')
else: else:
if isinstance(self.active_tool, FCDrillAdd): if isinstance(self.active_tool, DrillAdd):
self.active_tool.complete = True self.active_tool.complete = True
self.in_action = False self.in_action = False
self.delete_utility_geometry() self.delete_utility_geometry()
@ -3222,7 +3228,7 @@ class AppExcEditor(QtCore.QObject):
self.draw_selection_area_handler(self.pos, pos, self.app.selection_type) self.draw_selection_area_handler(self.pos, pos, self.app.selection_type)
self.app.selection_type = None self.app.selection_type = None
elif isinstance(self.active_tool, FCDrillSelect): elif isinstance(self.active_tool, SelectEditorExc):
self.active_tool.click_release((self.pos[0], self.pos[1])) self.active_tool.click_release((self.pos[0], self.pos[1]))
# if there are selected objects then plot them # if there are selected objects then plot them
@ -3333,6 +3339,9 @@ class AppExcEditor(QtCore.QObject):
:return: None :return: None
""" """
if not self.app.plotcanvas.native.hasFocus():
self.app.plotcanvas.native.setFocus()
if self.app.is_legacy is False: if self.app.is_legacy is False:
event_pos = event.pos event_pos = event.pos
event_is_dragging = event.is_dragging event_is_dragging = event.is_dragging
@ -3398,10 +3407,10 @@ class AppExcEditor(QtCore.QObject):
# ## Selection area on canvas section # ## # ## Selection area on canvas section # ##
if event_is_dragging == 1 and event.button == 1: if event_is_dragging == 1 and event.button == 1:
# I make an exception for FCDrillAdd and FCDrillArray because clicking and dragging while making regions # I make an exception for FCDrillAdd and DrillArray because clicking and dragging while making regions
# can create strange issues. Also for FCSlot and FCSlotArray # can create strange issues. Also for SlotAdd and SlotArray
if isinstance(self.active_tool, FCDrillAdd) or isinstance(self.active_tool, FCDrillArray) or \ if isinstance(self.active_tool, DrillAdd) or isinstance(self.active_tool, DrillArray) or \
isinstance(self.active_tool, FCSlot) or isinstance(self.active_tool, FCSlotArray): isinstance(self.active_tool, SlotAdd) or isinstance(self.active_tool, SlotArray):
self.app.selection_type = None self.app.selection_type = None
else: else:
dx = pos[0] - self.pos[0] dx = pos[0] - self.pos[0]
@ -3764,144 +3773,155 @@ class AppExcEditorUI:
self.drills_frame = QtWidgets.QFrame() self.drills_frame = QtWidgets.QFrame()
self.drills_frame.setContentsMargins(0, 0, 0, 0) self.drills_frame.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.drills_frame) layout.addWidget(self.drills_frame)
self.tools_box = QtWidgets.QVBoxLayout()
self.tools_box.setContentsMargins(0, 0, 0, 0) # #############################################################################################################
self.drills_frame.setLayout(self.tools_box) # ######################## MAIN Grid ##########################################################################
# #############################################################################################################
self.ui_vertical_lay = QtWidgets.QVBoxLayout()
self.ui_vertical_lay.setContentsMargins(0, 0, 0, 0)
self.drills_frame.setLayout(self.ui_vertical_lay)
# ## Page Title box (spacing between children) # ## Page Title box (spacing between children)
self.title_box = QtWidgets.QHBoxLayout() self.title_box = QtWidgets.QHBoxLayout()
self.tools_box.addLayout(self.title_box) self.ui_vertical_lay.addLayout(self.title_box)
# ## Page Title icon # ## Page Title
pixmap = QtGui.QPixmap(self.app.resource_location + '/flatcam_icon32.png') pixmap = QtGui.QPixmap(self.app.resource_location + '/flatcam_icon32.png')
self.icon = QtWidgets.QLabel() self.icon = FCLabel()
self.icon.setPixmap(pixmap) self.icon.setPixmap(pixmap)
self.title_box.addWidget(self.icon, stretch=0)
# ## Title label self.title_label = FCLabel("<font size=5><b>%s</b></font>" % _('Excellon Editor'))
self.title_label = QtWidgets.QLabel("<font size=5><b>%s</b></font>" % _('Excellon Editor'))
self.title_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.title_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.title_box.addWidget(self.icon, stretch=0)
self.title_box.addWidget(self.title_label, stretch=1) self.title_box.addWidget(self.title_label, stretch=1)
# ## Object name # ## Object name
self.name_box = QtWidgets.QHBoxLayout() self.name_box = QtWidgets.QHBoxLayout()
self.tools_box.addLayout(self.name_box) self.ui_vertical_lay.addLayout(self.name_box)
name_label = QtWidgets.QLabel(_("Name:"))
self.name_box.addWidget(name_label) name_label = FCLabel(_("Name:"))
self.name_entry = FCEntry() self.name_entry = FCEntry()
self.name_box.addWidget(name_label)
self.name_box.addWidget(self.name_entry) self.name_box.addWidget(self.name_entry)
# ### Tools Drills ## ## # ### Tools Drills ## ##
self.tools_table_label = QtWidgets.QLabel("<b>%s</b>" % _('Tools Table')) self.tools_table_label = FCLabel("<b>%s</b>" % _('Tools Table'))
self.tools_table_label.setToolTip( self.tools_table_label.setToolTip(
_("Tools in this Excellon object\n" _("Tools in this Excellon object\n"
"when are used for drilling.") "when are used for drilling.")
) )
self.tools_box.addWidget(self.tools_table_label) self.ui_vertical_lay.addWidget(self.tools_table_label)
# Drills TABLE
self.tools_table_exc = FCTable() self.tools_table_exc = FCTable()
# delegate = SpinBoxDelegate(units=self.units)
# self.ui.tools_table_exc.setItemDelegateForColumn(1, delegate)
self.tools_box.addWidget(self.tools_table_exc)
self.tools_table_exc.setColumnCount(4) self.tools_table_exc.setColumnCount(4)
self.tools_table_exc.setHorizontalHeaderLabels(['#', _('Diameter'), 'D', 'S']) self.tools_table_exc.setHorizontalHeaderLabels(['#', _('Diameter'), 'D', 'S'])
self.tools_table_exc.setSortingEnabled(False) self.tools_table_exc.setSortingEnabled(False)
self.tools_table_exc.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.tools_table_exc.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.ui_vertical_lay.addWidget(self.tools_table_exc)
separator_line = QtWidgets.QFrame() separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.tools_box.addWidget(separator_line) self.ui_vertical_lay.addWidget(separator_line)
self.convert_slots_btn = FCButton('%s' % _("Convert Slots")) self.convert_slots_btn = FCButton('%s' % _("Convert Slots"))
self.convert_slots_btn.setToolTip( self.convert_slots_btn.setToolTip(
_("Convert the slots in the selected tools to drills.") _("Convert the slots in the selected tools to drills.")
) )
self.tools_box.addWidget(self.convert_slots_btn) self.ui_vertical_lay.addWidget(self.convert_slots_btn)
separator_line = QtWidgets.QFrame() separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.tools_box.addWidget(separator_line) self.ui_vertical_lay.addWidget(separator_line)
# ### Add a new Tool ## ## # ### Add a new Tool ## ##
self.addtool_label = QtWidgets.QLabel('<b>%s</b>' % _('Add/Delete Tool')) self.addtool_label = FCLabel('<b>%s</b>' % _('Add/Delete Tool'))
self.addtool_label.setToolTip( self.addtool_label.setToolTip(
_("Add/Delete a tool to the tool list\n" _("Add/Delete a tool to the tool list\n"
"for this Excellon object.") "for this Excellon object.")
) )
self.tools_box.addWidget(self.addtool_label) self.ui_vertical_lay.addWidget(self.addtool_label)
# #############################################################################################################
# ######################## ADD New Tool Grid ##################################################################
# #############################################################################################################
grid1 = QtWidgets.QGridLayout() grid1 = QtWidgets.QGridLayout()
self.tools_box.addLayout(grid1)
grid1.setColumnStretch(0, 0) grid1.setColumnStretch(0, 0)
grid1.setColumnStretch(1, 1) grid1.setColumnStretch(1, 1)
self.ui_vertical_lay.addLayout(grid1)
addtool_entry_lbl = QtWidgets.QLabel('%s:' % _('Tool Dia')) # Tool Diameter Label
addtool_entry_lbl = FCLabel('%s:' % _('Tool Dia'))
addtool_entry_lbl.setToolTip( addtool_entry_lbl.setToolTip(
_("Diameter for the new tool") _("Diameter for the new tool")
) )
hlay = QtWidgets.QHBoxLayout() hlay = QtWidgets.QHBoxLayout()
self.addtool_entry = FCDoubleSpinner() # Tool Diameter Entry
self.addtool_entry = FCDoubleSpinner(policy=False)
self.addtool_entry.set_precision(self.decimals) self.addtool_entry.set_precision(self.decimals)
self.addtool_entry.set_range(0.0000, 10000.0000) self.addtool_entry.set_range(0.0000, 10000.0000)
hlay.addWidget(self.addtool_entry) hlay.addWidget(self.addtool_entry)
self.addtool_btn = QtWidgets.QPushButton(_('Add Tool')) # Tool Diameter Button
self.addtool_btn = QtWidgets.QPushButton(_('Add'))
self.addtool_btn.setToolTip( self.addtool_btn.setToolTip(
_("Add a new tool to the tool list\n" _("Add a new tool to the tool list\n"
"with the diameter specified above.") "with the diameter specified above.")
) )
self.addtool_btn.setFixedWidth(80)
hlay.addWidget(self.addtool_btn) hlay.addWidget(self.addtool_btn)
grid1.addWidget(addtool_entry_lbl, 0, 0) grid1.addWidget(addtool_entry_lbl, 0, 0)
grid1.addLayout(hlay, 0, 1) grid1.addLayout(hlay, 0, 1)
grid2 = QtWidgets.QGridLayout() # Delete Tool
self.tools_box.addLayout(grid2)
self.deltool_btn = QtWidgets.QPushButton(_('Delete Tool')) self.deltool_btn = QtWidgets.QPushButton(_('Delete Tool'))
self.deltool_btn.setToolTip( self.deltool_btn.setToolTip(
_("Delete a tool in the tool list\n" _("Delete a tool in the tool list\n"
"by selecting a row in the tool table.") "by selecting a row in the tool table.")
) )
grid2.addWidget(self.deltool_btn, 0, 1) grid1.addWidget(self.deltool_btn, 2, 0, 1, 2)
# add a frame and inside add a vertical box layout. Inside this vbox layout I add all the Drills widgets separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
grid1.addWidget(separator_line, 4, 0, 1, 2)
# #############################################################################################################
# ############################## Resize Tool Grid #############################################################
# #############################################################################################################
# add a frame and inside add a grid box layout. Inside this layout I add all the Drills widgets
# this way I can hide/show the frame # this way I can hide/show the frame
self.resize_frame = QtWidgets.QFrame() self.resize_frame = QtWidgets.QFrame()
self.resize_frame.setContentsMargins(0, 0, 0, 0) self.resize_frame.setContentsMargins(0, 0, 0, 0)
self.tools_box.addWidget(self.resize_frame) self.ui_vertical_lay.addWidget(self.resize_frame)
self.resize_box = QtWidgets.QVBoxLayout()
self.resize_box.setContentsMargins(0, 0, 0, 0)
self.resize_frame.setLayout(self.resize_box)
# ### Resize a drill ## ## self.resize_grid = QtWidgets.QGridLayout()
self.emptyresize_label = QtWidgets.QLabel('') self.resize_grid.setColumnStretch(0, 0)
self.resize_box.addWidget(self.emptyresize_label) self.resize_grid.setColumnStretch(1, 1)
self.resize_grid.setContentsMargins(0, 0, 0, 0)
self.resize_frame.setLayout(self.resize_grid)
self.drillresize_label = QtWidgets.QLabel('<b>%s</b>' % _("Resize Drill(s)")) self.drillresize_label = FCLabel('<b>%s</b>' % _("Resize Tool"))
self.drillresize_label.setToolTip( self.drillresize_label.setToolTip(
_("Resize a drill or a selection of drills.") _("Resize a drill or a selection of drills.")
) )
self.resize_box.addWidget(self.drillresize_label) self.resize_grid.addWidget(self.drillresize_label, 0, 0, 1, 2)
grid3 = QtWidgets.QGridLayout() # Resize Diameter
self.resize_box.addLayout(grid3) res_entry_lbl = FCLabel('%s:' % _('Resize Dia'))
res_entry_lbl = QtWidgets.QLabel('%s:' % _('Resize Dia'))
res_entry_lbl.setToolTip( res_entry_lbl.setToolTip(
_("Diameter to resize to.") _("Diameter to resize to.")
) )
grid3.addWidget(res_entry_lbl, 0, 0)
hlay2 = QtWidgets.QHBoxLayout() hlay2 = QtWidgets.QHBoxLayout()
self.resdrill_entry = FCDoubleSpinner() self.resdrill_entry = FCDoubleSpinner(policy=False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
self.resdrill_entry.setSizePolicy(sizePolicy) self.resdrill_entry.setSizePolicy(sizePolicy)
self.resdrill_entry.set_precision(self.decimals) self.resdrill_entry.set_precision(self.decimals)
@ -3909,369 +3929,384 @@ class AppExcEditorUI:
hlay2.addWidget(self.resdrill_entry) hlay2.addWidget(self.resdrill_entry)
# Resize Button
self.resize_btn = QtWidgets.QPushButton(_('Resize')) self.resize_btn = QtWidgets.QPushButton(_('Resize'))
self.resize_btn.setToolTip( self.resize_btn.setToolTip(
_("Resize drill(s)") _("Resize drill(s)")
) )
self.resize_btn.setFixedWidth(80)
hlay2.addWidget(self.resize_btn) hlay2.addWidget(self.resize_btn)
grid3.addLayout(hlay2, 0, 1)
self.resize_grid.addWidget(res_entry_lbl, 2, 0)
self.resize_grid.addLayout(hlay2, 2, 1)
separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.resize_grid.addWidget(separator_line, 6, 0, 1, 2)
self.resize_frame.hide() self.resize_frame.hide()
# #################################### # #############################################################################################################
# ### Add DRILL Array ################ # ################################## Add DRILL Array ##########################################################
# #################################### # #############################################################################################################
# add a frame and inside add a grid box layout. Inside this grid layout I add
# add a frame and inside add a vertical box layout. Inside this vbox layout I add
# all the add drill array widgets # all the add drill array widgets
# this way I can hide/show the frame # this way I can hide/show the frame
self.array_frame = QtWidgets.QFrame() self.array_frame = QtWidgets.QFrame()
self.array_frame.setContentsMargins(0, 0, 0, 0) self.array_frame.setContentsMargins(0, 0, 0, 0)
self.tools_box.addWidget(self.array_frame) self.ui_vertical_lay.addWidget(self.array_frame)
self.array_box = QtWidgets.QVBoxLayout()
self.array_box.setContentsMargins(0, 0, 0, 0)
self.array_frame.setLayout(self.array_box)
self.emptyarray_label = QtWidgets.QLabel('') self.array_grid = QtWidgets.QGridLayout()
self.array_box.addWidget(self.emptyarray_label) self.array_grid.setColumnStretch(0, 0)
self.array_grid.setColumnStretch(1, 1)
self.array_grid.setContentsMargins(0, 0, 0, 0)
self.array_frame.setLayout(self.array_grid)
self.drill_array_label = QtWidgets.QLabel('<b>%s</b>' % _("Add Drill Array")) # Type of Drill Array
self.drill_array_label = FCLabel('<b>%s</b>' % _("Add Drill Array"))
self.drill_array_label.setToolTip( self.drill_array_label.setToolTip(
_("Add an array of drills (linear or circular array)") _("Add an array of drills (linear or circular array)")
) )
self.array_box.addWidget(self.drill_array_label)
# Special Combo - it works by indexes as opposed to the items Text
self.array_type_combo = FCComboBox2() self.array_type_combo = FCComboBox2()
self.array_type_combo.setToolTip( self.array_type_combo.setToolTip(
_("Select the type of drills array to create.\n" _("Select the type of drills array to create.\n"
"It can be Linear X(Y) or Circular") "It can be Linear X(Y) or Circular")
) )
self.array_type_combo.addItem(_("Linear")) self.array_type_combo.addItems([_("Linear"), _("Circular")])
self.array_type_combo.addItem(_("Circular"))
self.array_box.addWidget(self.array_type_combo) self.array_grid.addWidget(self.drill_array_label, 0, 0, 1, 2)
self.array_grid.addWidget(self.array_type_combo, 2, 0, 1, 2)
self.array_form = QtWidgets.QFormLayout()
self.array_box.addLayout(self.array_form)
# Set the number of drill holes in the drill array # Set the number of drill holes in the drill array
self.drill_array_size_label = QtWidgets.QLabel('%s:' % _('Nr of drills')) self.drill_array_size_label = FCLabel('%s:' % _('Number'))
self.drill_array_size_label.setToolTip(_("Specify how many drills to be in the array.")) self.drill_array_size_label.setToolTip(_("Specify how many drills to be in the array."))
self.drill_array_size_label.setMinimumWidth(100)
self.drill_array_size_entry = FCSpinner() self.drill_array_size_entry = FCSpinner(policy=False)
self.drill_array_size_entry.set_range(1, 9999) self.drill_array_size_entry.set_range(1, 10000)
self.array_form.addRow(self.drill_array_size_label, self.drill_array_size_entry)
self.array_grid.addWidget(self.drill_array_size_label, 4, 0)
self.array_grid.addWidget(self.drill_array_size_entry, 4, 1)
# #############################################################################################################
# ###################### LINEAR Drill Array ###################################################################
# #############################################################################################################
self.array_linear_frame = QtWidgets.QFrame() self.array_linear_frame = QtWidgets.QFrame()
self.array_linear_frame.setContentsMargins(0, 0, 0, 0) self.array_linear_frame.setContentsMargins(0, 0, 0, 0)
self.array_box.addWidget(self.array_linear_frame) self.array_grid.addWidget(self.array_linear_frame, 6, 0, 1, 2)
self.linear_box = QtWidgets.QVBoxLayout() self.lin_grid = QtWidgets.QGridLayout()
self.linear_box.setContentsMargins(0, 0, 0, 0) self.lin_grid.setColumnStretch(0, 0)
self.array_linear_frame.setLayout(self.linear_box) self.lin_grid.setColumnStretch(1, 1)
self.lin_grid.setContentsMargins(0, 0, 0, 0)
self.linear_form = QtWidgets.QFormLayout() self.array_linear_frame.setLayout(self.lin_grid)
self.linear_box.addLayout(self.linear_form)
# Linear Drill Array direction # Linear Drill Array direction
self.drill_axis_label = QtWidgets.QLabel('%s:' % _('Direction')) self.drill_axis_label = FCLabel('%s:' % _('Direction'))
self.drill_axis_label.setToolTip( self.drill_axis_label.setToolTip(
_("Direction on which the linear array is oriented:\n" _("Direction on which the linear array is oriented:\n"
"- 'X' - horizontal axis \n" "- 'X' - horizontal axis \n"
"- 'Y' - vertical axis or \n" "- 'Y' - vertical axis or \n"
"- 'Angle' - a custom angle for the array inclination") "- 'Angle' - a custom angle for the array inclination")
) )
self.drill_axis_label.setMinimumWidth(100)
self.drill_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'}, self.drill_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
{'label': _('Y'), 'value': 'Y'}, {'label': _('Y'), 'value': 'Y'},
{'label': _('Angle'), 'value': 'A'}]) {'label': _('Angle'), 'value': 'A'}])
self.linear_form.addRow(self.drill_axis_label, self.drill_axis_radio)
self.lin_grid.addWidget(self.drill_axis_label, 0, 0)
self.lin_grid.addWidget(self.drill_axis_radio, 0, 1)
# Linear Drill Array pitch distance # Linear Drill Array pitch distance
self.drill_pitch_label = QtWidgets.QLabel('%s:' % _('Pitch')) self.drill_pitch_label = FCLabel('%s:' % _('Pitch'))
self.drill_pitch_label.setToolTip( self.drill_pitch_label.setToolTip(
_("Pitch = Distance between elements of the array.") _("Pitch = Distance between elements of the array.")
) )
self.drill_pitch_label.setMinimumWidth(100)
self.drill_pitch_entry = FCDoubleSpinner() self.drill_pitch_entry = FCDoubleSpinner(policy=False)
self.drill_pitch_entry.set_precision(self.decimals) self.drill_pitch_entry.set_precision(self.decimals)
self.drill_pitch_entry.set_range(0.0000, 10000.0000) self.drill_pitch_entry.set_range(0.0000, 10000.0000)
self.linear_form.addRow(self.drill_pitch_label, self.drill_pitch_entry) self.lin_grid.addWidget(self.drill_pitch_label, 2, 0)
self.lin_grid.addWidget(self.drill_pitch_entry, 2, 1)
# Linear Drill Array angle # Linear Drill Array angle
self.linear_angle_label = QtWidgets.QLabel('%s:' % _('Angle')) self.linear_angle_label = FCLabel('%s:' % _('Angle'))
self.linear_angle_label.setToolTip( self.linear_angle_label.setToolTip(
_("Angle at which the linear array is placed.\n" _("Angle at which the linear array is placed.\n"
"The precision is of max 2 decimals.\n" "The precision is of max 2 decimals.\n"
"Min value is: -360.00 degrees.\n" "Min value is: -360.00 degrees.\n"
"Max value is: 360.00 degrees.") "Max value is: 360.00 degrees.")
) )
self.linear_angle_label.setMinimumWidth(100)
self.linear_angle_spinner = FCDoubleSpinner() self.linear_angle_spinner = FCDoubleSpinner(policy=False)
self.linear_angle_spinner.set_precision(self.decimals) self.linear_angle_spinner.set_precision(self.decimals)
self.linear_angle_spinner.setSingleStep(1.0) self.linear_angle_spinner.setSingleStep(1.0)
self.linear_angle_spinner.setRange(-360.00, 360.00) self.linear_angle_spinner.setRange(-360.00, 360.00)
self.linear_form.addRow(self.linear_angle_label, self.linear_angle_spinner)
self.lin_grid.addWidget(self.linear_angle_label, 4, 0)
self.lin_grid.addWidget(self.linear_angle_spinner, 4, 1)
# #############################################################################################################
# ###################### CIRCULAR Drill Array #################################################################
# #############################################################################################################
self.array_circular_frame = QtWidgets.QFrame() self.array_circular_frame = QtWidgets.QFrame()
self.array_circular_frame.setContentsMargins(0, 0, 0, 0) self.array_circular_frame.setContentsMargins(0, 0, 0, 0)
self.array_box.addWidget(self.array_circular_frame) self.array_grid.addWidget(self.array_circular_frame, 8, 0, 1, 2)
self.circular_box = QtWidgets.QVBoxLayout()
self.circular_box.setContentsMargins(0, 0, 0, 0)
self.array_circular_frame.setLayout(self.circular_box)
self.drill_direction_label = QtWidgets.QLabel('%s:' % _('Direction')) self.circ_grid = QtWidgets.QGridLayout()
self.drill_direction_label.setToolTip(_("Direction for circular array.\n" self.circ_grid.setColumnStretch(0, 0)
self.circ_grid.setColumnStretch(1, 1)
self.circ_grid.setContentsMargins(0, 0, 0, 0)
self.array_circular_frame.setLayout(self.circ_grid)
# Array Direction
self.drill_array_dir_lbl = FCLabel('%s:' % _('Direction'))
self.drill_array_dir_lbl.setToolTip(_("Direction for circular array.\n"
"Can be CW = clockwise or CCW = counter clockwise.")) "Can be CW = clockwise or CCW = counter clockwise."))
self.drill_direction_label.setMinimumWidth(100)
self.circular_form = QtWidgets.QFormLayout() self.drill_array_dir_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
self.circular_box.addLayout(self.circular_form)
self.drill_direction_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
{'label': _('CCW'), 'value': 'CCW'}]) {'label': _('CCW'), 'value': 'CCW'}])
self.circular_form.addRow(self.drill_direction_label, self.drill_direction_radio)
self.drill_angle_label = QtWidgets.QLabel('%s:' % _('Angle')) self.circ_grid.addWidget(self.drill_array_dir_lbl, 0, 0)
self.drill_angle_label.setToolTip(_("Angle at which each element in circular array is placed.")) self.circ_grid.addWidget(self.drill_array_dir_radio, 0, 1)
self.drill_angle_label.setMinimumWidth(100)
self.drill_angle_entry = FCDoubleSpinner() # Array Angle
self.drill_array_angle_lbl = FCLabel('%s:' % _('Angle'))
self.drill_array_angle_lbl.setToolTip(_("Angle at which each element in circular array is placed."))
self.drill_angle_entry = FCDoubleSpinner(policy=False)
self.drill_angle_entry.set_precision(self.decimals) self.drill_angle_entry.set_precision(self.decimals)
self.drill_angle_entry.setSingleStep(1.0) self.drill_angle_entry.setSingleStep(1.0)
self.drill_angle_entry.setRange(-360.00, 360.00) self.drill_angle_entry.setRange(-360.00, 360.00)
self.circular_form.addRow(self.drill_angle_label, self.drill_angle_entry) self.circ_grid.addWidget(self.drill_array_angle_lbl, 2, 0)
self.circ_grid.addWidget(self.drill_angle_entry, 2, 1)
self.array_circular_frame.hide() separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.array_grid.addWidget(separator_line, 10, 0, 1, 2)
self.linear_angle_spinner.hide() # #############################################################################################################
self.linear_angle_label.hide() # ################################### ADDING SLOTS ############################################################
# #############################################################################################################
self.array_frame.hide() # add a frame and inside add a grid box layout. Inside this grid layout I add
# ######################################################
# ##### ADDING SLOTS ###################################
# ######################################################
# add a frame and inside add a vertical box layout. Inside this vbox layout I add
# all the add slot widgets # all the add slot widgets
# this way I can hide/show the frame # this way I can hide/show the frame
self.slot_frame = QtWidgets.QFrame() self.slot_frame = QtWidgets.QFrame()
self.slot_frame.setContentsMargins(0, 0, 0, 0) self.slot_frame.setContentsMargins(0, 0, 0, 0)
self.tools_box.addWidget(self.slot_frame) self.ui_vertical_lay.addWidget(self.slot_frame)
self.slot_box = QtWidgets.QVBoxLayout()
self.slot_box.setContentsMargins(0, 0, 0, 0)
self.slot_frame.setLayout(self.slot_box)
self.emptyarray_label = QtWidgets.QLabel('') self.slot_grid = QtWidgets.QGridLayout()
self.slot_box.addWidget(self.emptyarray_label) self.slot_grid.setColumnStretch(0, 0)
self.slot_grid.setColumnStretch(1, 1)
self.slot_grid.setContentsMargins(0, 0, 0, 0)
self.slot_frame.setLayout(self.slot_grid)
self.slot_label = QtWidgets.QLabel('<b>%s</b>' % _("Slot Parameters")) # Slot Tile Label
self.slot_label = FCLabel('<b>%s</b>' % _("Slot Parameters"))
self.slot_label.setToolTip( self.slot_label.setToolTip(
_("Parameters for adding a slot (hole with oval shape)\n" _("Parameters for adding a slot (hole with oval shape)\n"
"either single or as an part of an array.") "either single or as an part of an array.")
) )
self.slot_box.addWidget(self.slot_label) self.slot_grid.addWidget(self.slot_label, 0, 0, 1, 2)
self.slot_form = QtWidgets.QFormLayout()
self.slot_box.addLayout(self.slot_form)
# Slot length # Slot length
self.slot_length_label = QtWidgets.QLabel('%s:' % _('Length')) self.slot_length_label = FCLabel('%s:' % _('Length'))
self.slot_length_label.setToolTip( self.slot_length_label.setToolTip(
_("Length. The length of the slot.") _("Length. The length of the slot.")
) )
self.slot_length_label.setMinimumWidth(100)
self.slot_length_entry = FCDoubleSpinner() self.slot_length_entry = FCDoubleSpinner(policy=False)
self.slot_length_entry.set_precision(self.decimals) self.slot_length_entry.set_precision(self.decimals)
self.slot_length_entry.setSingleStep(0.1) self.slot_length_entry.setSingleStep(0.1)
self.slot_length_entry.setRange(0.0000, 10000.0000) self.slot_length_entry.setRange(0.0000, 10000.0000)
self.slot_form.addRow(self.slot_length_label, self.slot_length_entry) self.slot_grid.addWidget(self.slot_length_label, 2, 0)
self.slot_grid.addWidget(self.slot_length_entry, 2, 1)
# Slot direction # Slot direction
self.slot_axis_label = QtWidgets.QLabel('%s:' % _('Direction')) self.slot_axis_label = FCLabel('%s:' % _('Direction'))
self.slot_axis_label.setToolTip( self.slot_axis_label.setToolTip(
_("Direction on which the slot is oriented:\n" _("Direction on which the slot is oriented:\n"
"- 'X' - horizontal axis \n" "- 'X' - horizontal axis \n"
"- 'Y' - vertical axis or \n" "- 'Y' - vertical axis or \n"
"- 'Angle' - a custom angle for the slot inclination") "- 'Angle' - a custom angle for the slot inclination")
) )
self.slot_axis_label.setMinimumWidth(100)
self.slot_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'}, self.slot_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
{'label': _('Y'), 'value': 'Y'}, {'label': _('Y'), 'value': 'Y'},
{'label': _('Angle'), 'value': 'A'}]) {'label': _('Angle'), 'value': 'A'}])
self.slot_form.addRow(self.slot_axis_label, self.slot_axis_radio)
self.slot_grid.addWidget(self.slot_axis_label, 4, 0)
self.slot_grid.addWidget(self.slot_axis_radio, 4, 1)
# Slot custom angle # Slot custom angle
self.slot_angle_label = QtWidgets.QLabel('%s:' % _('Angle')) self.slot_angle_label = FCLabel('%s:' % _('Angle'))
self.slot_angle_label.setToolTip( self.slot_angle_label.setToolTip(
_("Angle at which the slot is placed.\n" _("Angle at which the slot is placed.\n"
"The precision is of max 2 decimals.\n" "The precision is of max 2 decimals.\n"
"Min value is: -360.00 degrees.\n" "Min value is: -360.00 degrees.\n"
"Max value is: 360.00 degrees.") "Max value is: 360.00 degrees.")
) )
self.slot_angle_label.setMinimumWidth(100)
self.slot_angle_spinner = FCDoubleSpinner() self.slot_angle_spinner = FCDoubleSpinner(policy=False)
self.slot_angle_spinner.set_precision(self.decimals) self.slot_angle_spinner.set_precision(self.decimals)
self.slot_angle_spinner.setWrapping(True) self.slot_angle_spinner.setWrapping(True)
self.slot_angle_spinner.setRange(-360.00, 360.00) self.slot_angle_spinner.setRange(-360.00, 360.00)
self.slot_angle_spinner.setSingleStep(1.0) self.slot_angle_spinner.setSingleStep(1.0)
self.slot_form.addRow(self.slot_angle_label, self.slot_angle_spinner)
self.slot_frame.hide() self.slot_grid.addWidget(self.slot_angle_label, 6, 0)
self.slot_grid.addWidget(self.slot_angle_spinner, 6, 1)
# ###################################################### separator_line = QtWidgets.QFrame()
# ##### ADDING SLOT ARRAY ############################# separator_line.setFrameShape(QtWidgets.QFrame.HLine)
# ###################################################### separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.slot_grid.addWidget(separator_line, 8, 0, 1, 2)
# #############################################################################################################
# ##################################### ADDING SLOT ARRAY ####################################################
# #############################################################################################################
# add a frame and inside add a vertical box layout. Inside this vbox layout I add # add a frame and inside add a vertical box layout. Inside this vbox layout I add
# all the add slot widgets # all the add slot widgets
# this way I can hide/show the frame # this way I can hide/show the frame
self.slot_array_frame = QtWidgets.QFrame() self.slot_array_frame = QtWidgets.QFrame()
self.slot_array_frame.setContentsMargins(0, 0, 0, 0) self.slot_array_frame.setContentsMargins(0, 0, 0, 0)
self.tools_box.addWidget(self.slot_array_frame) self.ui_vertical_lay.addWidget(self.slot_array_frame)
self.slot_array_box = QtWidgets.QVBoxLayout()
self.slot_array_box.setContentsMargins(0, 0, 0, 0)
self.slot_array_frame.setLayout(self.slot_array_box)
self.emptyarray_label = QtWidgets.QLabel('') self.slot_array_grid = QtWidgets.QGridLayout()
self.slot_array_box.addWidget(self.emptyarray_label) self.slot_array_grid.setColumnStretch(0, 0)
self.slot_array_grid.setColumnStretch(1, 1)
self.slot_array_grid.setContentsMargins(0, 0, 0, 0)
self.slot_array_frame.setLayout(self.slot_array_grid)
self.slot_array_label = QtWidgets.QLabel('<b>%s</b>' % _("Slot Array Parameters")) # Slot Array Title
self.slot_array_label = FCLabel('<b>%s</b>' % _("Slot Array Parameters"))
self.slot_array_label.setToolTip( self.slot_array_label.setToolTip(
_("Parameters for the array of slots (linear or circular array)") _("Parameters for the array of slots (linear or circular array)")
) )
self.slot_array_box.addWidget(self.slot_array_label)
self.l_form = QtWidgets.QFormLayout() self.slot_array_grid.addWidget(self.slot_array_label, 0, 0, 1, 2)
self.slot_array_box.addLayout(self.l_form)
# Special type of Combobox that get_value() by indexes and not by items text
self.slot_array_type_combo = FCComboBox2() self.slot_array_type_combo = FCComboBox2()
self.slot_array_type_combo.setToolTip( self.slot_array_type_combo.setToolTip(
_("Select the type of slot array to create.\n" _("Select the type of slot array to create.\n"
"It can be Linear X(Y) or Circular") "It can be Linear X(Y) or Circular")
) )
self.slot_array_type_combo.addItem(_("Linear")) self.slot_array_type_combo.addItems([_("Linear"), _("Circular")])
self.slot_array_type_combo.addItem(_("Circular"))
self.slot_array_box.addWidget(self.slot_array_type_combo) self.slot_array_grid.addWidget(self.slot_array_type_combo, 2, 0, 1, 2)
self.slot_array_form = QtWidgets.QFormLayout()
self.slot_array_box.addLayout(self.slot_array_form)
# Set the number of slot holes in the slot array # Set the number of slot holes in the slot array
self.slot_array_size_label = QtWidgets.QLabel('%s:' % _('Nr of slots')) self.slot_array_size_label = FCLabel('%s:' % _('Number'))
self.slot_array_size_label.setToolTip(_("Specify how many slots to be in the array.")) self.slot_array_size_label.setToolTip(_("Specify how many slots to be in the array."))
self.slot_array_size_label.setMinimumWidth(100)
self.slot_array_size_entry = FCSpinner() self.slot_array_size_entry = FCSpinner(policy=False)
self.slot_array_size_entry.set_range(0, 9999) self.slot_array_size_entry.set_range(0, 10000)
self.slot_array_form.addRow(self.slot_array_size_label, self.slot_array_size_entry) self.slot_array_grid.addWidget(self.slot_array_size_label, 4, 0)
self.slot_array_grid.addWidget(self.slot_array_size_entry, 4, 1)
# #############################################################################################################
# ##################################### Linear SLOT ARRAY ####################################################
# #############################################################################################################
self.slot_array_linear_frame = QtWidgets.QFrame() self.slot_array_linear_frame = QtWidgets.QFrame()
self.slot_array_linear_frame.setContentsMargins(0, 0, 0, 0) self.slot_array_linear_frame.setContentsMargins(0, 0, 0, 0)
self.slot_array_box.addWidget(self.slot_array_linear_frame) self.slot_array_grid.addWidget(self.slot_array_linear_frame, 6, 0, 1, 2)
self.slot_array_linear_box = QtWidgets.QVBoxLayout()
self.slot_array_linear_box.setContentsMargins(0, 0, 0, 0)
self.slot_array_linear_frame.setLayout(self.slot_array_linear_box)
self.slot_array_linear_form = QtWidgets.QFormLayout() self.slot_array_lin_grid = QtWidgets.QGridLayout()
self.slot_array_linear_box.addLayout(self.slot_array_linear_form) self.slot_array_lin_grid.setColumnStretch(0, 0)
self.slot_array_lin_grid.setColumnStretch(1, 1)
self.slot_array_lin_grid.setContentsMargins(0, 0, 0, 0)
self.slot_array_linear_frame.setLayout(self.slot_array_lin_grid)
# Linear Slot Array direction # Linear Slot Array direction
self.slot_array_axis_label = QtWidgets.QLabel('%s:' % _('Direction')) self.slot_array_axis_label = FCLabel('%s:' % _('Direction'))
self.slot_array_axis_label.setToolTip( self.slot_array_axis_label.setToolTip(
_("Direction on which the linear array is oriented:\n" _("Direction on which the linear array is oriented:\n"
"- 'X' - horizontal axis \n" "- 'X' - horizontal axis \n"
"- 'Y' - vertical axis or \n" "- 'Y' - vertical axis or \n"
"- 'Angle' - a custom angle for the array inclination") "- 'Angle' - a custom angle for the array inclination")
) )
self.slot_array_axis_label.setMinimumWidth(100)
self.slot_array_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'}, self.slot_array_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
{'label': _('Y'), 'value': 'Y'}, {'label': _('Y'), 'value': 'Y'},
{'label': _('Angle'), 'value': 'A'}]) {'label': _('Angle'), 'value': 'A'}])
self.slot_array_linear_form.addRow(self.slot_array_axis_label, self.slot_array_axis_radio)
self.slot_array_lin_grid.addWidget(self.slot_array_axis_label, 0, 0)
self.slot_array_lin_grid.addWidget(self.slot_array_axis_radio, 0, 1)
# Linear Slot Array pitch distance # Linear Slot Array pitch distance
self.slot_array_pitch_label = QtWidgets.QLabel('%s:' % _('Pitch')) self.slot_array_pitch_label = FCLabel('%s:' % _('Pitch'))
self.slot_array_pitch_label.setToolTip( self.slot_array_pitch_label.setToolTip(
_("Pitch = Distance between elements of the array.") _("Pitch = Distance between elements of the array.")
) )
self.slot_array_pitch_label.setMinimumWidth(100)
self.slot_array_pitch_entry = FCDoubleSpinner() self.slot_array_pitch_entry = FCDoubleSpinner(policy=False)
self.slot_array_pitch_entry.set_precision(self.decimals) self.slot_array_pitch_entry.set_precision(self.decimals)
self.slot_array_pitch_entry.setSingleStep(0.1) self.slot_array_pitch_entry.setSingleStep(0.1)
self.slot_array_pitch_entry.setRange(0.0000, 10000.0000) self.slot_array_pitch_entry.setRange(0.0000, 10000.0000)
self.slot_array_linear_form.addRow(self.slot_array_pitch_label, self.slot_array_pitch_entry) self.slot_array_lin_grid.addWidget(self.slot_array_pitch_label, 2, 0)
self.slot_array_lin_grid.addWidget(self.slot_array_pitch_entry, 2, 1)
# Linear Slot Array angle # Linear Slot Array angle
self.slot_array_linear_angle_label = QtWidgets.QLabel('%s:' % _('Angle')) self.slot_array_linear_angle_label = FCLabel('%s:' % _('Angle'))
self.slot_array_linear_angle_label.setToolTip( self.slot_array_linear_angle_label.setToolTip(
_("Angle at which the linear array is placed.\n" _("Angle at which the linear array is placed.\n"
"The precision is of max 2 decimals.\n" "The precision is of max 2 decimals.\n"
"Min value is: -360.00 degrees.\n" "Min value is: -360.00 degrees.\n"
"Max value is: 360.00 degrees.") "Max value is: 360.00 degrees.")
) )
self.slot_array_linear_angle_label.setMinimumWidth(100)
self.slot_array_linear_angle_spinner = FCDoubleSpinner() self.slot_array_linear_angle_spinner = FCDoubleSpinner(policy=False)
self.slot_array_linear_angle_spinner.set_precision(self.decimals) self.slot_array_linear_angle_spinner.set_precision(self.decimals)
self.slot_array_linear_angle_spinner.setSingleStep(1.0) self.slot_array_linear_angle_spinner.setSingleStep(1.0)
self.slot_array_linear_angle_spinner.setRange(-360.00, 360.00) self.slot_array_linear_angle_spinner.setRange(-360.00, 360.00)
self.slot_array_linear_form.addRow(self.slot_array_linear_angle_label, self.slot_array_linear_angle_spinner)
self.slot_array_lin_grid.addWidget(self.slot_array_linear_angle_label, 4, 0)
self.slot_array_lin_grid.addWidget(self.slot_array_linear_angle_spinner, 4, 1)
# #############################################################################################################
# ##################################### Circular SLOT ARRAY ##################################################
# #############################################################################################################
self.slot_array_circular_frame = QtWidgets.QFrame() self.slot_array_circular_frame = QtWidgets.QFrame()
self.slot_array_circular_frame.setContentsMargins(0, 0, 0, 0) self.slot_array_circular_frame.setContentsMargins(0, 0, 0, 0)
self.slot_array_box.addWidget(self.slot_array_circular_frame) self.slot_array_grid.addWidget(self.slot_array_circular_frame, 8, 0, 1, 2)
self.slot_array_circular_box = QtWidgets.QVBoxLayout()
self.slot_array_circular_box.setContentsMargins(0, 0, 0, 0)
self.slot_array_circular_frame.setLayout(self.slot_array_circular_box)
self.slot_array_direction_label = QtWidgets.QLabel('%s:' % _('Direction')) self.slot_array_circ_grid = QtWidgets.QGridLayout()
self.slot_array_circ_grid.setColumnStretch(0, 0)
self.slot_array_circ_grid.setColumnStretch(1, 1)
self.slot_array_circ_grid.setContentsMargins(0, 0, 0, 0)
self.slot_array_circular_frame.setLayout(self.slot_array_circ_grid)
# Slot Circular Array Direction
self.slot_array_direction_label = FCLabel('%s:' % _('Direction'))
self.slot_array_direction_label.setToolTip(_("Direction for circular array.\n" self.slot_array_direction_label.setToolTip(_("Direction for circular array.\n"
"Can be CW = clockwise or CCW = counter clockwise.")) "Can be CW = clockwise or CCW = counter clockwise."))
self.slot_array_direction_label.setMinimumWidth(100)
self.slot_array_circular_form = QtWidgets.QFormLayout()
self.slot_array_circular_box.addLayout(self.slot_array_circular_form)
self.slot_array_direction_radio = RadioSet([{'label': _('CW'), 'value': 'CW'}, self.slot_array_direction_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
{'label': _('CCW'), 'value': 'CCW'}]) {'label': _('CCW'), 'value': 'CCW'}])
self.slot_array_circular_form.addRow(self.slot_array_direction_label, self.slot_array_direction_radio)
self.slot_array_angle_label = QtWidgets.QLabel('%s:' % _('Angle')) self.slot_array_circ_grid.addWidget(self.slot_array_direction_label, 0, 0)
self.slot_array_circ_grid.addWidget(self.slot_array_direction_radio, 0, 1)
# Slot Circular Array Angle
self.slot_array_angle_label = FCLabel('%s:' % _('Angle'))
self.slot_array_angle_label.setToolTip(_("Angle at which each element in circular array is placed.")) self.slot_array_angle_label.setToolTip(_("Angle at which each element in circular array is placed."))
self.slot_array_angle_label.setMinimumWidth(100)
self.slot_array_angle_entry = FCDoubleSpinner() self.slot_array_angle_entry = FCDoubleSpinner(policy=False)
self.slot_array_angle_entry.set_precision(self.decimals) self.slot_array_angle_entry.set_precision(self.decimals)
self.slot_array_angle_entry.setSingleStep(1) self.slot_array_angle_entry.setSingleStep(1)
self.slot_array_angle_entry.setRange(-360.00, 360.00) self.slot_array_angle_entry.setRange(-360.00, 360.00)
self.slot_array_circular_form.addRow(self.slot_array_angle_label, self.slot_array_angle_entry) self.slot_array_circ_grid.addWidget(self.slot_array_angle_label, 2, 0)
self.slot_array_circ_grid.addWidget(self.slot_array_angle_entry, 2, 1)
self.slot_array_linear_angle_spinner.hide() self.ui_vertical_lay.addStretch()
self.slot_array_linear_angle_label.hide() layout.addStretch(1)
self.slot_array_frame.hide()
self.tools_box.addStretch()
layout.addStretch()
# Editor # Editor
self.exit_editor_button = QtWidgets.QPushButton(_('Exit Editor')) self.exit_editor_button = QtWidgets.QPushButton(_('Exit Editor'))
@ -4286,6 +4321,21 @@ class AppExcEditorUI:
} }
""") """)
layout.addWidget(self.exit_editor_button) layout.addWidget(self.exit_editor_button)
# #############################################################################################################
# ###################### INIT Excellon Editor UI ##############################################################
# #############################################################################################################
self.linear_angle_spinner.hide()
self.linear_angle_label.hide()
self.array_linear_frame.hide()
self.array_circular_frame.hide()
self.array_frame.hide()
self.slot_frame.hide()
self.slot_array_linear_angle_spinner.hide()
self.slot_array_linear_angle_label.hide()
self.slot_array_frame.hide()
# ############################ FINSIHED GUI ################################### # ############################ FINSIHED GUI ###################################
# ############################################################################# # #############################################################################

View File

@ -4365,6 +4365,10 @@ class AppGerberEditor(QtCore.QObject):
:param event: Event object dispatched by VisPy SceneCavas :param event: Event object dispatched by VisPy SceneCavas
:return: None :return: None
""" """
if not self.app.plotcanvas.native.hasFocus():
self.app.plotcanvas.native.setFocus()
if self.app.is_legacy is False: if self.app.is_legacy is False:
event_pos = event.pos event_pos = event.pos
event_is_dragging = event.is_dragging event_is_dragging = event.is_dragging

View File

@ -899,7 +899,7 @@ class FCSpinner(QtWidgets.QSpinBox):
returnPressed = QtCore.pyqtSignal() returnPressed = QtCore.pyqtSignal()
confirmation_signal = QtCore.pyqtSignal(bool, float, float) confirmation_signal = QtCore.pyqtSignal(bool, float, float)
def __init__(self, suffix=None, alignment=None, parent=None, callback=None): def __init__(self, suffix=None, alignment=None, parent=None, callback=None, policy=True):
super(FCSpinner, self).__init__(parent) super(FCSpinner, self).__init__(parent)
self.readyToEdit = True self.readyToEdit = True
@ -924,8 +924,9 @@ class FCSpinner(QtWidgets.QSpinBox):
self.prev_readyToEdit = True self.prev_readyToEdit = True
self.menu = None self.menu = None
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred) if policy:
self.setSizePolicy(sizePolicy) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
self.setSizePolicy(sizePolicy)
def eventFilter(self, object, event): def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.MouseButtonPress and self.prev_readyToEdit is True: if event.type() == QtCore.QEvent.MouseButtonPress and self.prev_readyToEdit is True:
@ -1277,7 +1278,7 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
returnPressed = QtCore.pyqtSignal() returnPressed = QtCore.pyqtSignal()
confirmation_signal = QtCore.pyqtSignal(bool, float, float) confirmation_signal = QtCore.pyqtSignal(bool, float, float)
def __init__(self, suffix=None, alignment=None, parent=None, callback=None): def __init__(self, suffix=None, alignment=None, parent=None, callback=None, policy=True):
""" """
:param suffix: a char added to the end of the value in the LineEdit; like a '%' or '$' etc :param suffix: a char added to the end of the value in the LineEdit; like a '%' or '$' etc
@ -1314,8 +1315,9 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
self.prev_readyToEdit = True self.prev_readyToEdit = True
self.menu = None self.menu = None
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred) if policy:
self.setSizePolicy(sizePolicy) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
self.setSizePolicy(sizePolicy)
def on_edit_finished(self): def on_edit_finished(self):
self.clearFocus() self.clearFocus()

Binary file not shown.

View File

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"POT-Creation-Date: 2020-11-04 18:02+0200\n" "POT-Creation-Date: 2020-11-04 18:02+0200\n"
"PO-Revision-Date: 2020-11-04 18:02+0200\n" "PO-Revision-Date: 2020-11-04 21:22+0300\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: tr_TR\n" "Language: tr_TR\n"
@ -753,15 +753,6 @@ msgstr "Üst Üste Gelme"
#: appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:184 #: appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:184
#: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:163 #: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:163
#: appTools/ToolNCC.py:4206 appTools/ToolPaint.py:2975 #: appTools/ToolNCC.py:4206 appTools/ToolPaint.py:2975
#, fuzzy
#| msgid ""
#| "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"
#| "Lower values = faster processing, faster execution on CNC.\n"
#| "Higher values = slow processing and slow execution on CNC\n"
#| "due of too many paths."
msgid "" msgid ""
"How much (percentage) of the tool width to overlap each tool pass.\n" "How much (percentage) of the tool width to overlap each tool pass.\n"
"Adjust the value starting with lower values\n" "Adjust the value starting with lower values\n"
@ -773,11 +764,11 @@ msgid ""
msgstr "" msgstr ""
"Ucun her geçişinde uç genişliğinin ne kadarlık kısmının (yüzde) üst üste " "Ucun her geçişinde uç genişliğinin ne kadarlık kısmının (yüzde) üst üste "
"geleceğini belirler.\n" "geleceğini belirler.\n"
"Daha düşük değerlerden başlayarak ve temizlenecek alanlar hala \n" "Değeri daha düşük değerlerden başlayarak ayarlayın ve işlenmesi gereken "
"temizlenmemişse değeri artırın.\n" "alanlar hâlâ işlenmiyorsa değeri artırın.\n"
"Düşük değerler = Daha hızlı işleme, CNC'de daha hızlı yürütme sağlar.\n" "Düşük değerler = Daha hızlı işleme, CNC'de daha hızlı yürütme sağlar.\n"
"Daha yüksek değerler = Çok sayıda yol nedeniyle CNC'de yavaş\n" "Daha yüksek değerler = Çok sayıda yol nedeniyle CNC'de yavaş işleme \n"
"işleme ve yavaş yürütmeye sebep olur." "ve yavaş yürütmeye sebep olur."
#: appDatabase.py:649 appDatabase.py:1156 appEditors/AppGeoEditor.py:473 #: appDatabase.py:649 appDatabase.py:1156 appEditors/AppGeoEditor.py:473
#: appGUI/ObjectUI.py:1679 #: appGUI/ObjectUI.py:1679
@ -930,12 +921,6 @@ msgstr "Hizala"
#: appDatabase.py:704 appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:257 #: appDatabase.py:704 appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:257
#: appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:267 appTools/ToolNCC.py:4285 #: appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:267 appTools/ToolNCC.py:4285
#: appTools/ToolNCC.py:4381 #: appTools/ToolNCC.py:4381
#, fuzzy
#| msgid ""
#| "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."
msgid "" msgid ""
"If used, it will add an offset to the copper features.\n" "If used, it will add an offset to the copper features.\n"
"The copper clearing will finish to a distance\n" "The copper clearing will finish to a distance\n"
@ -943,8 +928,7 @@ msgid ""
msgstr "" msgstr ""
"İşaretlendiğinde, bakır alanlara bir hiza ekleyecektir.\n" "İşaretlendiğinde, bakır alanlara bir hiza ekleyecektir.\n"
"Bakır temizliği, bakır alanların belirli bir mesafesine\n" "Bakır temizliği, bakır alanların belirli bir mesafesine\n"
"kadar olacaktır.\n" "kadar olacaktır."
"Değer, 0 ile 10 arasında FlatCAM birimi olabilir."
#: appDatabase.py:759 appEditors/AppGeoEditor.py:475 #: appDatabase.py:759 appEditors/AppGeoEditor.py:475
#: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:183 #: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:183
@ -2101,10 +2085,8 @@ msgstr "Uzunluk"
#: appEditors/AppExcEditor.py:4085 #: appEditors/AppExcEditor.py:4085
#: appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:164 #: appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:164
#, fuzzy
#| msgid "Length = The length of the slot."
msgid "Length. The length of the slot." msgid "Length. The length of the slot."
msgstr "Uzunluk = Yuvanın uzunluğu." msgstr "Uzunluk. Yuvanın uzunluğu."
#: appEditors/AppExcEditor.py:4099 #: appEditors/AppExcEditor.py:4099
#: appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:180 #: appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:180
@ -2535,7 +2517,7 @@ msgstr ""
#: appEditors/AppGeoEditor.py:741 appEditors/AppGerberEditor.py:5555 #: appEditors/AppGeoEditor.py:741 appEditors/AppGerberEditor.py:5555
#: appTools/ToolTransform.py:667 #: appTools/ToolTransform.py:667
msgid "Skew X" msgid "Skew X"
msgstr "X Eğrilt" msgstr "Eğrilt"
#: appEditors/AppGeoEditor.py:743 appEditors/AppGeoEditor.py:764 #: appEditors/AppGeoEditor.py:743 appEditors/AppGeoEditor.py:764
#: appEditors/AppGerberEditor.py:5557 appEditors/AppGerberEditor.py:5578 #: appEditors/AppGerberEditor.py:5557 appEditors/AppGerberEditor.py:5578
@ -2559,7 +2541,7 @@ msgstr "Y Eğim Açısı"
#: appEditors/AppGeoEditor.py:762 appEditors/AppGerberEditor.py:5576 #: appEditors/AppGeoEditor.py:762 appEditors/AppGerberEditor.py:5576
#: appTools/ToolTransform.py:688 #: appTools/ToolTransform.py:688
msgid "Skew Y" msgid "Skew Y"
msgstr "Y Eğrilt" msgstr "Eğrilt"
#: appEditors/AppGeoEditor.py:793 appEditors/AppGerberEditor.py:5607 #: appEditors/AppGeoEditor.py:793 appEditors/AppGerberEditor.py:5607
#: appGUI/preferences/tools/ToolsFilmPrefGroupUI.py:120 #: appGUI/preferences/tools/ToolsFilmPrefGroupUI.py:120
@ -2900,10 +2882,8 @@ msgid "Rotate done"
msgstr "Döndürme işlemi tamamlandı" msgstr "Döndürme işlemi tamamlandı"
#: appEditors/AppGeoEditor.py:1461 appEditors/AppGerberEditor.py:6327 #: appEditors/AppGeoEditor.py:1461 appEditors/AppGerberEditor.py:6327
#, fuzzy
#| msgid "Rotate Angle"
msgid "Rotate cancelled" msgid "Rotate cancelled"
msgstr "Rotate Angle" msgstr "Döndürme işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1466 appEditors/AppGerberEditor.py:6332 #: appEditors/AppGeoEditor.py:1466 appEditors/AppGerberEditor.py:6332
msgid "Offset on X axis ..." msgid "Offset on X axis ..."
@ -2915,58 +2895,44 @@ msgid "Enter a distance Value"
msgstr "Bir mesafe değeri girin" msgstr "Bir mesafe değeri girin"
#: appEditors/AppGeoEditor.py:1479 appEditors/AppGerberEditor.py:6345 #: appEditors/AppGeoEditor.py:1479 appEditors/AppGerberEditor.py:6345
#, fuzzy
#| msgid "Open DXF cancelled."
msgid "Offset X cancelled" msgid "Offset X cancelled"
msgstr "Open DXF cancelled." msgstr "X hizalama işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1484 appEditors/AppGerberEditor.py:6350 #: appEditors/AppGeoEditor.py:1484 appEditors/AppGerberEditor.py:6350
msgid "Offset on Y axis ..." msgid "Offset on Y axis ..."
msgstr "Y ekseninde hiza ..." msgstr "Y ekseninde hiza ..."
#: appEditors/AppGeoEditor.py:1494 appEditors/AppGerberEditor.py:6360 #: appEditors/AppGeoEditor.py:1494 appEditors/AppGerberEditor.py:6360
#, fuzzy
#| msgid "Offset on the Y axis done"
msgid "Offset on Y axis done" msgid "Offset on Y axis done"
msgstr "Y eksenindeki hizalama işlemi yapıldı" msgstr "Y ekseninde hizalama işlemi yapıldı"
#: appEditors/AppGeoEditor.py:1497 #: appEditors/AppGeoEditor.py:1497
#, fuzzy
#| msgid "Offset on the Y axis done"
msgid "Offset on the Y axis canceled" msgid "Offset on the Y axis canceled"
msgstr "Y eksenindeki hizalama işlemi yapıldı" msgstr "Y ekseninde hizalama işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1500 appEditors/AppGerberEditor.py:6366 #: appEditors/AppGeoEditor.py:1500 appEditors/AppGerberEditor.py:6366
msgid "Skew on X axis ..." msgid "Skew on X axis ..."
msgstr "X ekseninde eğrilt ..." msgstr "X ekseninde eğrilt ..."
#: appEditors/AppGeoEditor.py:1510 appEditors/AppGerberEditor.py:6376 #: appEditors/AppGeoEditor.py:1510 appEditors/AppGerberEditor.py:6376
#, fuzzy
#| msgid "Skew on X axis done."
msgid "Skew on X axis done" msgid "Skew on X axis done"
msgstr "X ekseninde eğme işlemi tamamlandı." msgstr "X ekseninde eğritlme işlemi yapıldı"
#: appEditors/AppGeoEditor.py:1513 #: appEditors/AppGeoEditor.py:1513
#, fuzzy
#| msgid "Skew on X axis done."
msgid "Skew on X axis canceled" msgid "Skew on X axis canceled"
msgstr "X ekseninde eğme işlemi tamamlandı." msgstr "X eksenindeki eğriltme işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1516 appEditors/AppGerberEditor.py:6382 #: appEditors/AppGeoEditor.py:1516 appEditors/AppGerberEditor.py:6382
msgid "Skew on Y axis ..." msgid "Skew on Y axis ..."
msgstr "Y Ekseninde Eğrilt ..." msgstr "Y Ekseninde Eğrilt ..."
#: appEditors/AppGeoEditor.py:1526 appEditors/AppGerberEditor.py:6392 #: appEditors/AppGeoEditor.py:1526 appEditors/AppGerberEditor.py:6392
#, fuzzy
#| msgid "Skew on Y axis done."
msgid "Skew on Y axis done" msgid "Skew on Y axis done"
msgstr "Y ekseninde eğme işlemi tamamlandı." msgstr "Y ekseninde eğriltme işlemi yapıldı"
#: appEditors/AppGeoEditor.py:1529 #: appEditors/AppGeoEditor.py:1529
#, fuzzy
#| msgid "Skew on Y axis done."
msgid "Skew on Y axis canceled" msgid "Skew on Y axis canceled"
msgstr "Y ekseninde eğme işlemi tamamlandı." msgstr "Y ekseninde eğrilme işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1960 appEditors/AppGeoEditor.py:2031 #: appEditors/AppGeoEditor.py:1960 appEditors/AppGeoEditor.py:2031
#: appEditors/AppGerberEditor.py:1500 appEditors/AppGerberEditor.py:1583 #: appEditors/AppGerberEditor.py:1500 appEditors/AppGerberEditor.py:1583
@ -3161,17 +3127,13 @@ msgstr ""
#: appEditors/AppGeoEditor.py:4936 appEditors/AppGeoEditor.py:4988 #: appEditors/AppGeoEditor.py:4936 appEditors/AppGeoEditor.py:4988
#: appEditors/AppGeoEditor.py:5037 appEditors/AppGeoEditor.py:5084 #: appEditors/AppGeoEditor.py:5037 appEditors/AppGeoEditor.py:5084
#, fuzzy
#| msgid "Failed. Nothing selected."
msgid "Nothing selected." msgid "Nothing selected."
msgstr "Hata. Hiçbir şey seçilmedi." msgstr "Hiçbir şey seçilmedi."
#: appEditors/AppGeoEditor.py:4940 appEditors/AppGeoEditor.py:4992 #: appEditors/AppGeoEditor.py:4940 appEditors/AppGeoEditor.py:4992
#: appEditors/AppGeoEditor.py:5041 #: appEditors/AppGeoEditor.py:5041
#, fuzzy
#| msgid "Invalid distance for buffering."
msgid "Invalid distance." msgid "Invalid distance."
msgstr "Tampon oluşturmak için geçersiz mesafe." msgstr "Geçersiz mesafe."
#: appEditors/AppGeoEditor.py:4964 appEditors/AppGeoEditor.py:5012 #: appEditors/AppGeoEditor.py:4964 appEditors/AppGeoEditor.py:5012
#: appEditors/AppGeoEditor.py:5061 #: appEditors/AppGeoEditor.py:5061
@ -3341,10 +3303,8 @@ msgid "Added new aperture with code"
msgstr "Şu kodlu yeni şekil eklendi" msgstr "Şu kodlu yeni şekil eklendi"
#: appEditors/AppGerberEditor.py:3095 #: appEditors/AppGerberEditor.py:3095
#, fuzzy
#| msgid " Select an aperture in Aperture Table"
msgid "Select an aperture in Aperture Table" msgid "Select an aperture in Aperture Table"
msgstr " Şekil Tablosundan bir şekil seçin" msgstr "Şekil Tablosundan bir şekil seçin"
#: appEditors/AppGerberEditor.py:3103 #: appEditors/AppGerberEditor.py:3103
msgid "Select an aperture in Aperture Table -->" msgid "Select an aperture in Aperture Table -->"
@ -3701,22 +3661,16 @@ msgid "Specify how many pads to be in the array."
msgstr "Dizide kaç tane ped olması gerektiğini belirtin." msgstr "Dizide kaç tane ped olması gerektiğini belirtin."
#: appEditors/AppGerberEditor.py:6363 #: appEditors/AppGerberEditor.py:6363
#, fuzzy
#| msgid "Open cancelled."
msgid "Offset Y cancelled" msgid "Offset Y cancelled"
msgstr "Open cancelled." msgstr "Y hizalama işlemi iptal edildi"
#: appEditors/AppGerberEditor.py:6379 #: appEditors/AppGerberEditor.py:6379
#, fuzzy
#| msgid "Open DXF cancelled."
msgid "Skew X cancelled" msgid "Skew X cancelled"
msgstr "Open DXF cancelled." msgstr "X eğriltme işlemi iptal edildi"
#: appEditors/AppGerberEditor.py:6395 #: appEditors/AppGerberEditor.py:6395
#, fuzzy
#| msgid "Skew_Y angle"
msgid "Skew Y cancelled" msgid "Skew Y cancelled"
msgstr "Skew_Y angle" msgstr "Y eğriltme işlemi iptal edildi"
#: appEditors/AppTextEditor.py:84 #: appEditors/AppTextEditor.py:84
msgid "Find" msgid "Find"
@ -5093,8 +5047,6 @@ msgstr "Varsayılan"
#: appGUI/MainGUI.py:863 #: appGUI/MainGUI.py:863
#: appGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:33 #: appGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:33
#: appGUI/preferences/geometry/GeometryOptPrefGroupUI.py:35 #: appGUI/preferences/geometry/GeometryOptPrefGroupUI.py:35
#, fuzzy
#| msgid "Create CNC Job"
msgid "Create CNCJob" msgid "Create CNCJob"
msgstr "CNC İşi Oluştur" msgstr "CNC İşi Oluştur"
@ -6549,10 +6501,8 @@ msgstr ""
"sağlar." "sağlar."
#: appGUI/ObjectUI.py:724 #: appGUI/ObjectUI.py:724
#, fuzzy
#| msgid "Generate GCode out of drill holes in an Excellon object."
msgid "Generate GCode from the drill holes in an Excellon object." msgid "Generate GCode from the drill holes in an Excellon object."
msgstr "Bir Excellon nesnesindeki matkap deliklerinden G Kod oluşturun." msgstr "Bir Excellon nesnesindeki deliklerinden G Kodu oluşturun."
#: appGUI/ObjectUI.py:735 appGUI/ObjectUI.py:1790 #: appGUI/ObjectUI.py:735 appGUI/ObjectUI.py:1790
msgid "Milling Tool" msgid "Milling Tool"
@ -9206,8 +9156,6 @@ msgstr ""
"başlatılmasını gerektirir." "başlatılmasını gerektirir."
#: appGUI/preferences/general/GeneralAppPrefGroupUI.py:64 #: appGUI/preferences/general/GeneralAppPrefGroupUI.py:64
#, fuzzy
#| msgid "Precision INCH"
msgid "Precision Inch" msgid "Precision Inch"
msgstr "İNÇ Hassasiyet" msgstr "İNÇ Hassasiyet"
@ -12105,15 +12053,6 @@ msgstr "Kalan Parça İşleme"
#: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:245 #: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:245
#: appTools/ToolIsolation.py:3394 appTools/ToolNCC.py:4338 #: appTools/ToolIsolation.py:3394 appTools/ToolNCC.py:4338
#: appTools/ToolPaint.py:3079 #: appTools/ToolPaint.py:3079
#, fuzzy
#| msgid ""
#| "If checked, use 'rest machining'.\n"
#| "Basically it will isolate 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"
#| "If not checked, use the standard algorithm."
msgid "" msgid ""
"If checked, use 'rest machining'.\n" "If checked, use 'rest machining'.\n"
"Basically it will process copper outside PCB features,\n" "Basically it will process copper outside PCB features,\n"
@ -12124,12 +12063,12 @@ msgid ""
"\n" "\n"
"If not checked, use the standard algorithm." "If not checked, use the standard algorithm."
msgstr "" msgstr ""
"Bu onay kutusu işaretlenirse, 'Kalan Parça İşleme' kullanılır.\n" "İşaretlenirse, 'Kalan Parça İşleme' kullanılır.\n"
"Bu, en büyük ucu kullanarak PCB'nin ana bakırını \n" "Temel olarak, PCB özelliklerinin dışında kalan bakırları işleyecek.\n"
"temizler ve temizlenecek daha fazla bakır kalmayana veya \n" "En büyük uçtan başlayarak ve büyükten küçüğe doğru kullanarak işlenecek "
"daha fazla uç kalmayana kadar önceki uçla temizlenemeyen\n" "hiçbir şey kalmayıncaya kadar veya önceki uçla temizlenemeyen bakırları "
"bakır alanlarını temizlemek için bir sonraki uçla, daha büyükten\n" "işlemeye devam edecektir.\n"
"daha küçüğe doğru ilerler.\n" "\n"
"Onay kutusu seçilmezse, standart algoritma kullanılır." "Onay kutusu seçilmezse, standart algoritma kullanılır."
#: appGUI/preferences/tools/ToolsISOPrefGroupUI.py:258 #: appGUI/preferences/tools/ToolsISOPrefGroupUI.py:258
@ -13827,8 +13766,6 @@ msgstr "İptal edildi. G Kod üretimi için dört nokta gereklidir."
#: app_Main.py:8652 app_Main.py:8694 app_Main.py:8736 app_Main.py:8777 #: app_Main.py:8652 app_Main.py:8694 app_Main.py:8736 app_Main.py:8777
#: app_Main.py:8822 app_Main.py:8867 app_Main.py:9330 app_Main.py:9334 #: app_Main.py:8822 app_Main.py:8867 app_Main.py:9330 app_Main.py:9334
#: camlib.py:2403 camlib.py:2471 camlib.py:2539 camlib.py:2617 #: camlib.py:2403 camlib.py:2471 camlib.py:2539 camlib.py:2617
#, fuzzy
#| msgid "No object selected."
msgid "No object is selected." msgid "No object is selected."
msgstr "Hiçbir nesne seçilmedi." msgstr "Hiçbir nesne seçilmedi."
@ -15134,10 +15071,8 @@ msgid "Starting G-Code"
msgstr "G-Kodu başlatılıyor" msgstr "G-Kodu başlatılıyor"
#: appTools/ToolDrilling.py:1673 appTools/ToolMilling.py:1355 #: appTools/ToolDrilling.py:1673 appTools/ToolMilling.py:1355
#, fuzzy
#| msgid "Generating Excellon CNCJob..."
msgid "Generating CNCJob..." msgid "Generating CNCJob..."
msgstr "Excellon CNC İşi oluşturuluyor ..." msgstr "CNC İşi oluşturuluyor ..."
#: appTools/ToolDrilling.py:1791 camlib.py:3214 camlib.py:3644 camlib.py:5730 #: appTools/ToolDrilling.py:1791 camlib.py:3214 camlib.py:3644 camlib.py:5730
msgid "The Toolchange X,Y format has to be (x, y)." msgid "The Toolchange X,Y format has to be (x, y)."
@ -15406,20 +15341,12 @@ msgstr ""
"Genişlik, her zaman bakır kaynağının genişliğinin iki katıdır." "Genişlik, her zaman bakır kaynağının genişliğinin iki katıdır."
#: appTools/ToolFilm.py:160 #: appTools/ToolFilm.py:160
#, fuzzy
#| msgid "No FlatCAM object selected. Load an object for Film and retry."
msgid "Load an object for Film and retry." msgid "Load an object for Film and retry."
msgstr "" msgstr "Film için bir nesne yükleyin ve tekrar deneyin."
"Hiçbir FlatCAM nesnesi seçilmedi. Film için bir nesne yükleyin ve tekrar "
"deneyin."
#: appTools/ToolFilm.py:167 #: appTools/ToolFilm.py:167
#, fuzzy
#| msgid "No FlatCAM object selected. Load an object for Box and retry."
msgid "Load an object for Box and retry." msgid "Load an object for Box and retry."
msgstr "" msgstr "Çerçeve için bir nesne yükleyin ve tekrar deneyin."
"Hiçbir FlatCAM nesnesi seçilmedi. Çerçeve için bir nesne yükleyin ve tekrar "
"deneyin."
#: appTools/ToolFilm.py:182 #: appTools/ToolFilm.py:182
msgid "Generating Film ..." msgid "Generating Film ..."
@ -15785,10 +15712,8 @@ msgid "Tool(s) deleted from Tool Table."
msgstr "Uç(lar) Araçlar Tablosundan silindi." msgstr "Uç(lar) Araçlar Tablosundan silindi."
#: appTools/ToolIsolation.py:1479 #: appTools/ToolIsolation.py:1479
#, fuzzy
#| msgid "Isolation"
msgid "Isolating" msgid "Isolating"
msgstr "Yalıtım" msgstr "Yalıtılıyor"
#: appTools/ToolIsolation.py:1499 #: appTools/ToolIsolation.py:1499
msgid "Following geometry was generated" msgid "Following geometry was generated"
@ -16022,7 +15947,7 @@ msgstr "TAŞIMA işlemi iptal edildi. Taşınacak nesne (ler) yok."
#: appTools/ToolMove.py:211 #: appTools/ToolMove.py:211
msgid "object was moved" msgid "object was moved"
msgstr "nesne taşındı" msgstr "nesnesi taşındı"
#: appTools/ToolMove.py:221 #: appTools/ToolMove.py:221
msgid "Error when mouse left click." msgid "Error when mouse left click."
@ -16820,21 +16745,16 @@ msgid "Import Excellon"
msgstr "Excellon'u İçe Aktar" msgstr "Excellon'u İçe Aktar"
#: appTools/ToolPcbWizard.py:466 #: appTools/ToolPcbWizard.py:466
#, fuzzy
#| msgid ""
#| "Import in FlatCAM 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."
msgid "" msgid ""
"Import an Excellon file\n" "Import an Excellon file\n"
"that store it's information's in 2 files.\n" "that store it's information's in 2 files.\n"
"One usually has .DRL extension while\n" "One usually has .DRL extension while\n"
"the other has .INF extension." "the other has .INF extension."
msgstr "" msgstr ""
"FlatCAM'de, bilgileri 2 dosyada bulunan\n" "Bilgilerinin 2 dosyada saklandığı \n"
"Excellon dosyasını içe aktarın. \n" "bir Excellon dosyasını içe aktarın.\n"
"Birinde genellikle .DRL, diğerinde .INF uzantısı vardır." "Biri genellikle .DRL uzantısına sahipken\n"
"diğeri .INF uzantısına sahiptir."
#: appTools/ToolProperties.py:127 #: appTools/ToolProperties.py:127
msgid "Object Properties are displayed." msgid "Object Properties are displayed."
@ -18196,10 +18116,8 @@ msgid "Adding New Grid cancelled"
msgstr "Yeni ızgara ekleme işlemi iptal edildi" msgstr "Yeni ızgara ekleme işlemi iptal edildi"
#: app_Main.py:6351 #: app_Main.py:6351
#, fuzzy
#| msgid " Grid Value does not exist"
msgid "Grid Value does not exist" msgid "Grid Value does not exist"
msgstr " Izgara değeri mevcut değil" msgstr "Izgara değeri mevcut değil"
#: app_Main.py:6353 #: app_Main.py:6353
msgid "Grid Value deleted" msgid "Grid Value deleted"
@ -18214,8 +18132,6 @@ msgid "Key Shortcut List"
msgstr "Klavye Kısayol Listesi" msgstr "Klavye Kısayol Listesi"
#: app_Main.py:6401 #: app_Main.py:6401
#, fuzzy
#| msgid "Name copied on clipboard ..."
msgid "Name copied to clipboard ..." msgid "Name copied to clipboard ..."
msgstr "İsim panoya kopyalandı ..." msgstr "İsim panoya kopyalandı ..."
@ -18631,10 +18547,8 @@ msgstr ""
"ediliyor." "ediliyor."
#: app_Main.py:10387 #: app_Main.py:10387
#, fuzzy
#| msgid " Open HPGL2 failed. Probable not a HPGL2 file."
msgid "Failed. Probable not a HPGL2 file." msgid "Failed. Probable not a HPGL2 file."
msgstr " HPGL2 açılamadı. Muhtemelen bir HPGL2 dosyası değil." msgstr "Başarısız oldu. Muhtemelen bir HPGL2 dosyası değil."
#: app_Main.py:10413 #: app_Main.py:10413
msgid "TCL script file opened in Code Editor." msgid "TCL script file opened in Code Editor."