diff --git a/CHANGELOG.md b/CHANGELOG.md
index ff9a9ec1..f24a0f23 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
- combed the application strings all over the app and trimmed them up until those starting with letter 'O'
- 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
@@ -3080,7 +3082,7 @@ RELEASE 8.993
- 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
- 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
diff --git a/appEditors/AppExcEditor.py b/appEditors/AppExcEditor.py
index 5f7691f6..2a1d99a7 100644
--- a/appEditors/AppExcEditor.py
+++ b/appEditors/AppExcEditor.py
@@ -9,7 +9,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtCore import Qt
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 shapely.geometry import LineString, LinearRing, MultiLineString, Polygon, MultiPolygon, Point
@@ -35,7 +35,7 @@ if '_' not in builtins.__dict__:
log = logging.getLogger('base')
-class FCDrillSelect(FCShapeTool):
+class SelectEditorExc(FCShapeTool):
def __init__(self, draw_app):
DrawTool.__init__(self, draw_app)
self.name = 'drill_select'
@@ -219,7 +219,7 @@ class FCDrillSelect(FCShapeTool):
pass
-class FCDrillAdd(FCShapeTool):
+class DrillAdd(FCShapeTool):
"""
Resulting type: MultiLineString
"""
@@ -317,7 +317,7 @@ class FCDrillAdd(FCShapeTool):
pass
-class FCDrillArray(FCShapeTool):
+class DrillArray(FCShapeTool):
"""
Resulting type: MultiLineString
"""
@@ -404,7 +404,7 @@ class FCDrillArray(FCShapeTool):
def utility_geometry(self, data=None, static=None):
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()
try:
self.drill_array_size = int(self.draw_app.ui.drill_array_size_entry.get_value())
@@ -577,7 +577,7 @@ class FCDrillArray(FCShapeTool):
pass
-class FCSlot(FCShapeTool):
+class SlotAdd(FCShapeTool):
"""
Resulting type: Polygon
"""
@@ -751,7 +751,7 @@ class FCSlot(FCShapeTool):
try:
self.geometry = DrawToolShape(self.util_shape(self.points))
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
# to the value, as a list of itself
@@ -791,7 +791,7 @@ class FCSlot(FCShapeTool):
pass
-class FCSlotArray(FCShapeTool):
+class SlotArray(FCShapeTool):
"""
Resulting type: MultiPolygon
"""
@@ -1150,7 +1150,7 @@ class FCSlotArray(FCShapeTool):
pass
-class FCDrillResize(FCShapeTool):
+class ResizeEditorExc(FCShapeTool):
def __init__(self, draw_app):
DrawTool.__init__(self, draw_app)
self.name = 'drill_resize'
@@ -1386,7 +1386,7 @@ class FCDrillResize(FCShapeTool):
pass
-class FCDrillMove(FCShapeTool):
+class MoveEditorExc(FCShapeTool):
def __init__(self, draw_app):
DrawTool.__init__(self, draw_app)
self.name = 'drill_move'
@@ -1535,9 +1535,9 @@ class FCDrillMove(FCShapeTool):
pass
-class FCDrillCopy(FCDrillMove):
+class CopyEditorExc(MoveEditorExc):
def __init__(self, draw_app):
- FCDrillMove.__init__(self, draw_app)
+ MoveEditorExc.__init__(self, draw_app)
self.name = 'drill_copy'
def make(self):
@@ -1777,14 +1777,14 @@ class AppExcEditor(QtCore.QObject):
def connect_exc_toolbar_signals(self):
self.tools_exc.update({
- "drill_select": {"button": self.app.ui.select_drill_btn, "constructor": FCDrillSelect},
- "drill_add": {"button": self.app.ui.add_drill_btn, "constructor": FCDrillAdd},
- "drill_array": {"button": self.app.ui.add_drill_array_btn, "constructor": FCDrillArray},
- "slot_add": {"button": self.app.ui.add_slot_btn, "constructor": FCSlot},
- "slot_array": {"button": self.app.ui.add_slot_array_btn, "constructor": FCSlotArray},
- "drill_resize": {"button": self.app.ui.resize_drill_btn, "constructor": FCDrillResize},
- "drill_copy": {"button": self.app.ui.copy_drill_btn, "constructor": FCDrillCopy},
- "drill_move": {"button": self.app.ui.move_drill_btn, "constructor": FCDrillMove},
+ "drill_select": {"button": self.app.ui.select_drill_btn, "constructor": SelectEditorExc},
+ "drill_add": {"button": self.app.ui.add_drill_btn, "constructor": DrillAdd},
+ "drill_array": {"button": self.app.ui.add_drill_array_btn, "constructor": DrillArray},
+ "slot_add": {"button": self.app.ui.add_slot_btn, "constructor": SlotAdd},
+ "slot_array": {"button": self.app.ui.add_slot_array_btn, "constructor": SlotArray},
+ "drill_resize": {"button": self.app.ui.resize_drill_btn, "constructor": ResizeEditorExc},
+ "drill_copy": {"button": self.app.ui.copy_drill_btn, "constructor": CopyEditorExc},
+ "drill_move": {"button": self.app.ui.move_drill_btn, "constructor": MoveEditorExc},
})
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_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.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.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_angle_entry.set_value(float(self.app.defaults['excellon_editor_slot_circ_angle']))
- self.ui.slot_array_circular_frame.hide()
- self.ui.slot_array_linear_frame.show()
+ # make sure that th visibility of the various UI frame are updated
+ # 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):
@@ -2989,7 +2995,7 @@ class AppExcEditor(QtCore.QObject):
self.tools_exc[t]["button"].setChecked(False)
self.select_tool('drill_select')
- self.active_tool = FCDrillSelect(self)
+ self.active_tool = SelectEditorExc(self)
def on_row_selected(self, row, col):
if col == 0:
@@ -3067,14 +3073,14 @@ class AppExcEditor(QtCore.QObject):
if key_modifier == modifier_to_use:
self.select_tool(self.active_tool.name)
else:
- # return to Select tool but not for FCDrillAdd or FCSlot
- if isinstance(self.active_tool, FCDrillAdd) or isinstance(self.active_tool, FCSlot):
+ # return to Select tool but not for FCDrillAdd or SlotAdd
+ if isinstance(self.active_tool, DrillAdd) or isinstance(self.active_tool, SlotAdd):
self.select_tool(self.active_tool.name)
else:
self.select_tool("drill_select")
return
- if isinstance(self.active_tool, FCDrillSelect):
+ if isinstance(self.active_tool, SelectEditorExc):
# self.app.log.debug("Replotting after click.")
self.replot()
else:
@@ -3192,14 +3198,14 @@ class AppExcEditor(QtCore.QObject):
QtGui.QGuiApplication.restoreOverrideCursor()
except Exception:
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.in_action = False
self.delete_utility_geometry()
self.app.inform.emit('[success] %s' % _("Done."))
self.select_tool('drill_select')
else:
- if isinstance(self.active_tool, FCDrillAdd):
+ if isinstance(self.active_tool, DrillAdd):
self.active_tool.complete = True
self.in_action = False
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.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]))
# if there are selected objects then plot them
@@ -3333,6 +3339,9 @@ class AppExcEditor(QtCore.QObject):
:return: None
"""
+ if not self.app.plotcanvas.native.hasFocus():
+ self.app.plotcanvas.native.setFocus()
+
if self.app.is_legacy is False:
event_pos = event.pos
event_is_dragging = event.is_dragging
@@ -3398,10 +3407,10 @@ class AppExcEditor(QtCore.QObject):
# ## Selection area on canvas section # ##
if event_is_dragging == 1 and event.button == 1:
- # I make an exception for FCDrillAdd and FCDrillArray because clicking and dragging while making regions
- # can create strange issues. Also for FCSlot and FCSlotArray
- if isinstance(self.active_tool, FCDrillAdd) or isinstance(self.active_tool, FCDrillArray) or \
- isinstance(self.active_tool, FCSlot) or isinstance(self.active_tool, FCSlotArray):
+ # I make an exception for FCDrillAdd and DrillArray because clicking and dragging while making regions
+ # can create strange issues. Also for SlotAdd and SlotArray
+ if isinstance(self.active_tool, DrillAdd) or isinstance(self.active_tool, DrillArray) or \
+ isinstance(self.active_tool, SlotAdd) or isinstance(self.active_tool, SlotArray):
self.app.selection_type = None
else:
dx = pos[0] - self.pos[0]
@@ -3764,144 +3773,155 @@ class AppExcEditorUI:
self.drills_frame = QtWidgets.QFrame()
self.drills_frame.setContentsMargins(0, 0, 0, 0)
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)
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')
- self.icon = QtWidgets.QLabel()
+ self.icon = FCLabel()
self.icon.setPixmap(pixmap)
- self.title_box.addWidget(self.icon, stretch=0)
- # ## Title label
- self.title_label = QtWidgets.QLabel("%s" % _('Excellon Editor'))
+ self.title_label = FCLabel("%s" % _('Excellon Editor'))
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)
# ## Object name
self.name_box = QtWidgets.QHBoxLayout()
- self.tools_box.addLayout(self.name_box)
- name_label = QtWidgets.QLabel(_("Name:"))
- self.name_box.addWidget(name_label)
+ self.ui_vertical_lay.addLayout(self.name_box)
+
+ name_label = FCLabel(_("Name:"))
self.name_entry = FCEntry()
+
+ self.name_box.addWidget(name_label)
self.name_box.addWidget(self.name_entry)
# ### Tools Drills ## ##
- self.tools_table_label = QtWidgets.QLabel("%s" % _('Tools Table'))
+ self.tools_table_label = FCLabel("%s" % _('Tools Table'))
self.tools_table_label.setToolTip(
_("Tools in this Excellon object\n"
"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()
- # 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.setHorizontalHeaderLabels(['#', _('Diameter'), 'D', 'S'])
self.tools_table_exc.setSortingEnabled(False)
self.tools_table_exc.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+ self.ui_vertical_lay.addWidget(self.tools_table_exc)
+
separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
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.setToolTip(
_("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.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
- self.tools_box.addWidget(separator_line)
+ self.ui_vertical_lay.addWidget(separator_line)
# ### Add a new Tool ## ##
- self.addtool_label = QtWidgets.QLabel('%s' % _('Add/Delete Tool'))
+ self.addtool_label = FCLabel('%s' % _('Add/Delete Tool'))
self.addtool_label.setToolTip(
_("Add/Delete a tool to the tool list\n"
"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()
- self.tools_box.addLayout(grid1)
grid1.setColumnStretch(0, 0)
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(
_("Diameter for the new tool")
)
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_range(0.0000, 10000.0000)
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(
_("Add a new tool to the tool list\n"
"with the diameter specified above.")
)
- self.addtool_btn.setFixedWidth(80)
hlay.addWidget(self.addtool_btn)
grid1.addWidget(addtool_entry_lbl, 0, 0)
grid1.addLayout(hlay, 0, 1)
- grid2 = QtWidgets.QGridLayout()
- self.tools_box.addLayout(grid2)
-
+ # Delete Tool
self.deltool_btn = QtWidgets.QPushButton(_('Delete Tool'))
self.deltool_btn.setToolTip(
_("Delete a tool in the tool list\n"
"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
self.resize_frame = QtWidgets.QFrame()
self.resize_frame.setContentsMargins(0, 0, 0, 0)
- self.tools_box.addWidget(self.resize_frame)
- self.resize_box = QtWidgets.QVBoxLayout()
- self.resize_box.setContentsMargins(0, 0, 0, 0)
- self.resize_frame.setLayout(self.resize_box)
+ self.ui_vertical_lay.addWidget(self.resize_frame)
- # ### Resize a drill ## ##
- self.emptyresize_label = QtWidgets.QLabel('')
- self.resize_box.addWidget(self.emptyresize_label)
+ self.resize_grid = QtWidgets.QGridLayout()
+ self.resize_grid.setColumnStretch(0, 0)
+ 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('%s' % _("Resize Drill(s)"))
+ self.drillresize_label = FCLabel('%s' % _("Resize Tool"))
self.drillresize_label.setToolTip(
_("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()
- self.resize_box.addLayout(grid3)
-
- res_entry_lbl = QtWidgets.QLabel('%s:' % _('Resize Dia'))
+ # Resize Diameter
+ res_entry_lbl = FCLabel('%s:' % _('Resize Dia'))
res_entry_lbl.setToolTip(
_("Diameter to resize to.")
)
- grid3.addWidget(res_entry_lbl, 0, 0)
hlay2 = QtWidgets.QHBoxLayout()
- self.resdrill_entry = FCDoubleSpinner()
+ self.resdrill_entry = FCDoubleSpinner(policy=False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
self.resdrill_entry.setSizePolicy(sizePolicy)
self.resdrill_entry.set_precision(self.decimals)
@@ -3909,369 +3929,384 @@ class AppExcEditorUI:
hlay2.addWidget(self.resdrill_entry)
+ # Resize Button
self.resize_btn = QtWidgets.QPushButton(_('Resize'))
self.resize_btn.setToolTip(
_("Resize drill(s)")
)
- self.resize_btn.setFixedWidth(80)
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()
- # ####################################
- # ### Add DRILL Array ################
- # ####################################
-
- # add a frame and inside add a vertical box layout. Inside this vbox layout I add
+ # #############################################################################################################
+ # ################################## Add DRILL Array ##########################################################
+ # #############################################################################################################
+ # add a frame and inside add a grid box layout. Inside this grid layout I add
# all the add drill array widgets
# this way I can hide/show the frame
self.array_frame = QtWidgets.QFrame()
self.array_frame.setContentsMargins(0, 0, 0, 0)
- self.tools_box.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.ui_vertical_lay.addWidget(self.array_frame)
- self.emptyarray_label = QtWidgets.QLabel('')
- self.array_box.addWidget(self.emptyarray_label)
+ self.array_grid = QtWidgets.QGridLayout()
+ 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('%s' % _("Add Drill Array"))
+ # Type of Drill Array
+ self.drill_array_label = FCLabel('%s' % _("Add Drill Array"))
self.drill_array_label.setToolTip(
_("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.setToolTip(
_("Select the type of drills array to create.\n"
"It can be Linear X(Y) or Circular")
)
- self.array_type_combo.addItem(_("Linear"))
- self.array_type_combo.addItem(_("Circular"))
+ self.array_type_combo.addItems([_("Linear"), _("Circular")])
- self.array_box.addWidget(self.array_type_combo)
-
- self.array_form = QtWidgets.QFormLayout()
- self.array_box.addLayout(self.array_form)
+ self.array_grid.addWidget(self.drill_array_label, 0, 0, 1, 2)
+ self.array_grid.addWidget(self.array_type_combo, 2, 0, 1, 2)
# 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.setMinimumWidth(100)
- self.drill_array_size_entry = FCSpinner()
- self.drill_array_size_entry.set_range(1, 9999)
- self.array_form.addRow(self.drill_array_size_label, self.drill_array_size_entry)
+ self.drill_array_size_entry = FCSpinner(policy=False)
+ self.drill_array_size_entry.set_range(1, 10000)
+ 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.setContentsMargins(0, 0, 0, 0)
- self.array_box.addWidget(self.array_linear_frame)
- self.linear_box = QtWidgets.QVBoxLayout()
- self.linear_box.setContentsMargins(0, 0, 0, 0)
- self.array_linear_frame.setLayout(self.linear_box)
-
- self.linear_form = QtWidgets.QFormLayout()
- self.linear_box.addLayout(self.linear_form)
+ self.array_grid.addWidget(self.array_linear_frame, 6, 0, 1, 2)
+ self.lin_grid = QtWidgets.QGridLayout()
+ self.lin_grid.setColumnStretch(0, 0)
+ self.lin_grid.setColumnStretch(1, 1)
+ self.lin_grid.setContentsMargins(0, 0, 0, 0)
+ self.array_linear_frame.setLayout(self.lin_grid)
# Linear Drill Array direction
- self.drill_axis_label = QtWidgets.QLabel('%s:' % _('Direction'))
+ self.drill_axis_label = FCLabel('%s:' % _('Direction'))
self.drill_axis_label.setToolTip(
_("Direction on which the linear array is oriented:\n"
"- 'X' - horizontal axis \n"
"- 'Y' - vertical axis or \n"
"- 'Angle' - a custom angle for the array inclination")
)
- self.drill_axis_label.setMinimumWidth(100)
self.drill_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
{'label': _('Y'), 'value': 'Y'},
{'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
- self.drill_pitch_label = QtWidgets.QLabel('%s:' % _('Pitch'))
+ self.drill_pitch_label = FCLabel('%s:' % _('Pitch'))
self.drill_pitch_label.setToolTip(
_("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_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
- self.linear_angle_label = QtWidgets.QLabel('%s:' % _('Angle'))
+ self.linear_angle_label = FCLabel('%s:' % _('Angle'))
self.linear_angle_label.setToolTip(
_("Angle at which the linear array is placed.\n"
"The precision is of max 2 decimals.\n"
"Min value is: -360.00 degrees.\n"
"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.setSingleStep(1.0)
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.setContentsMargins(0, 0, 0, 0)
- self.array_box.addWidget(self.array_circular_frame)
- self.circular_box = QtWidgets.QVBoxLayout()
- self.circular_box.setContentsMargins(0, 0, 0, 0)
- self.array_circular_frame.setLayout(self.circular_box)
+ self.array_grid.addWidget(self.array_circular_frame, 8, 0, 1, 2)
- self.drill_direction_label = QtWidgets.QLabel('%s:' % _('Direction'))
- self.drill_direction_label.setToolTip(_("Direction for circular array.\n"
+ self.circ_grid = QtWidgets.QGridLayout()
+ 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."))
- self.drill_direction_label.setMinimumWidth(100)
- self.circular_form = QtWidgets.QFormLayout()
- self.circular_box.addLayout(self.circular_form)
-
- self.drill_direction_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
+ self.drill_array_dir_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
{'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.drill_angle_label.setToolTip(_("Angle at which each element in circular array is placed."))
- self.drill_angle_label.setMinimumWidth(100)
+ self.circ_grid.addWidget(self.drill_array_dir_lbl, 0, 0)
+ self.circ_grid.addWidget(self.drill_array_dir_radio, 0, 1)
- 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.setSingleStep(1.0)
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()
-
- self.array_frame.hide()
-
- # ######################################################
- # ##### ADDING SLOTS ###################################
- # ######################################################
-
- # add a frame and inside add a vertical box layout. Inside this vbox layout I add
+ # #############################################################################################################
+ # ################################### ADDING SLOTS ############################################################
+ # #############################################################################################################
+ # add a frame and inside add a grid box layout. Inside this grid layout I add
# all the add slot widgets
# this way I can hide/show the frame
self.slot_frame = QtWidgets.QFrame()
self.slot_frame.setContentsMargins(0, 0, 0, 0)
- self.tools_box.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.ui_vertical_lay.addWidget(self.slot_frame)
- self.emptyarray_label = QtWidgets.QLabel('')
- self.slot_box.addWidget(self.emptyarray_label)
+ self.slot_grid = QtWidgets.QGridLayout()
+ 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('%s' % _("Slot Parameters"))
+ # Slot Tile Label
+ self.slot_label = FCLabel('%s' % _("Slot Parameters"))
self.slot_label.setToolTip(
_("Parameters for adding a slot (hole with oval shape)\n"
"either single or as an part of an array.")
)
- self.slot_box.addWidget(self.slot_label)
-
- self.slot_form = QtWidgets.QFormLayout()
- self.slot_box.addLayout(self.slot_form)
+ self.slot_grid.addWidget(self.slot_label, 0, 0, 1, 2)
# Slot length
- self.slot_length_label = QtWidgets.QLabel('%s:' % _('Length'))
+ self.slot_length_label = FCLabel('%s:' % _('Length'))
self.slot_length_label.setToolTip(
_("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.setSingleStep(0.1)
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
- self.slot_axis_label = QtWidgets.QLabel('%s:' % _('Direction'))
+ self.slot_axis_label = FCLabel('%s:' % _('Direction'))
self.slot_axis_label.setToolTip(
_("Direction on which the slot is oriented:\n"
"- 'X' - horizontal axis \n"
"- 'Y' - vertical axis or \n"
"- 'Angle' - a custom angle for the slot inclination")
)
- self.slot_axis_label.setMinimumWidth(100)
self.slot_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
{'label': _('Y'), 'value': 'Y'},
{'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
- self.slot_angle_label = QtWidgets.QLabel('%s:' % _('Angle'))
+ self.slot_angle_label = FCLabel('%s:' % _('Angle'))
self.slot_angle_label.setToolTip(
_("Angle at which the slot is placed.\n"
"The precision is of max 2 decimals.\n"
"Min value is: -360.00 degrees.\n"
"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.setWrapping(True)
self.slot_angle_spinner.setRange(-360.00, 360.00)
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)
- # ######################################################
- # ##### ADDING SLOT ARRAY #############################
- # ######################################################
+ separator_line = QtWidgets.QFrame()
+ 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
# all the add slot widgets
# this way I can hide/show the frame
self.slot_array_frame = QtWidgets.QFrame()
self.slot_array_frame.setContentsMargins(0, 0, 0, 0)
- self.tools_box.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.ui_vertical_lay.addWidget(self.slot_array_frame)
- self.emptyarray_label = QtWidgets.QLabel('')
- self.slot_array_box.addWidget(self.emptyarray_label)
+ self.slot_array_grid = QtWidgets.QGridLayout()
+ 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('%s' % _("Slot Array Parameters"))
+ # Slot Array Title
+ self.slot_array_label = FCLabel('%s' % _("Slot Array Parameters"))
self.slot_array_label.setToolTip(
_("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_box.addLayout(self.l_form)
+ self.slot_array_grid.addWidget(self.slot_array_label, 0, 0, 1, 2)
+ # 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.setToolTip(
_("Select the type of slot array to create.\n"
"It can be Linear X(Y) or Circular")
)
- self.slot_array_type_combo.addItem(_("Linear"))
- self.slot_array_type_combo.addItem(_("Circular"))
+ self.slot_array_type_combo.addItems([_("Linear"), _("Circular")])
- self.slot_array_box.addWidget(self.slot_array_type_combo)
-
- self.slot_array_form = QtWidgets.QFormLayout()
- self.slot_array_box.addLayout(self.slot_array_form)
+ self.slot_array_grid.addWidget(self.slot_array_type_combo, 2, 0, 1, 2)
# 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.setMinimumWidth(100)
- self.slot_array_size_entry = FCSpinner()
- self.slot_array_size_entry.set_range(0, 9999)
+ self.slot_array_size_entry = FCSpinner(policy=False)
+ 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.setContentsMargins(0, 0, 0, 0)
- self.slot_array_box.addWidget(self.slot_array_linear_frame)
- 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_grid.addWidget(self.slot_array_linear_frame, 6, 0, 1, 2)
- self.slot_array_linear_form = QtWidgets.QFormLayout()
- self.slot_array_linear_box.addLayout(self.slot_array_linear_form)
+ self.slot_array_lin_grid = QtWidgets.QGridLayout()
+ 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
- self.slot_array_axis_label = QtWidgets.QLabel('%s:' % _('Direction'))
+ self.slot_array_axis_label = FCLabel('%s:' % _('Direction'))
self.slot_array_axis_label.setToolTip(
_("Direction on which the linear array is oriented:\n"
"- 'X' - horizontal axis \n"
"- 'Y' - vertical axis or \n"
"- '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'},
{'label': _('Y'), 'value': 'Y'},
{'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
- self.slot_array_pitch_label = QtWidgets.QLabel('%s:' % _('Pitch'))
+ self.slot_array_pitch_label = FCLabel('%s:' % _('Pitch'))
self.slot_array_pitch_label.setToolTip(
_("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.setSingleStep(0.1)
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
- 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(
_("Angle at which the linear array is placed.\n"
"The precision is of max 2 decimals.\n"
"Min value is: -360.00 degrees.\n"
"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.setSingleStep(1.0)
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.setContentsMargins(0, 0, 0, 0)
- self.slot_array_box.addWidget(self.slot_array_circular_frame)
- 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_grid.addWidget(self.slot_array_circular_frame, 8, 0, 1, 2)
- 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"
"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'},
{'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.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.setSingleStep(1)
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.slot_array_linear_angle_label.hide()
-
- self.slot_array_frame.hide()
-
- self.tools_box.addStretch()
-
- layout.addStretch()
+ self.ui_vertical_lay.addStretch()
+ layout.addStretch(1)
# Editor
self.exit_editor_button = QtWidgets.QPushButton(_('Exit Editor'))
@@ -4286,6 +4321,21 @@ class AppExcEditorUI:
}
""")
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 ###################################
# #############################################################################
diff --git a/appEditors/AppGerberEditor.py b/appEditors/AppGerberEditor.py
index fa7b2ef2..660da32a 100644
--- a/appEditors/AppGerberEditor.py
+++ b/appEditors/AppGerberEditor.py
@@ -4365,6 +4365,10 @@ class AppGerberEditor(QtCore.QObject):
:param event: Event object dispatched by VisPy SceneCavas
:return: None
"""
+
+ if not self.app.plotcanvas.native.hasFocus():
+ self.app.plotcanvas.native.setFocus()
+
if self.app.is_legacy is False:
event_pos = event.pos
event_is_dragging = event.is_dragging
diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py
index 0d0c3b2c..8759da42 100644
--- a/appGUI/GUIElements.py
+++ b/appGUI/GUIElements.py
@@ -899,7 +899,7 @@ class FCSpinner(QtWidgets.QSpinBox):
returnPressed = QtCore.pyqtSignal()
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)
self.readyToEdit = True
@@ -924,8 +924,9 @@ class FCSpinner(QtWidgets.QSpinBox):
self.prev_readyToEdit = True
self.menu = None
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
- self.setSizePolicy(sizePolicy)
+ if policy:
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
+ self.setSizePolicy(sizePolicy)
def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.MouseButtonPress and self.prev_readyToEdit is True:
@@ -1277,7 +1278,7 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
returnPressed = QtCore.pyqtSignal()
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
@@ -1314,8 +1315,9 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
self.prev_readyToEdit = True
self.menu = None
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
- self.setSizePolicy(sizePolicy)
+ if policy:
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
+ self.setSizePolicy(sizePolicy)
def on_edit_finished(self):
self.clearFocus()
diff --git a/locale/tr/LC_MESSAGES/strings.mo b/locale/tr/LC_MESSAGES/strings.mo
index 785c4d69..3401a59a 100644
Binary files a/locale/tr/LC_MESSAGES/strings.mo and b/locale/tr/LC_MESSAGES/strings.mo differ
diff --git a/locale/tr/LC_MESSAGES/strings.po b/locale/tr/LC_MESSAGES/strings.po
index 114a994a..c0119f12 100644
--- a/locale/tr/LC_MESSAGES/strings.po
+++ b/locale/tr/LC_MESSAGES/strings.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: \n"
"Language: tr_TR\n"
@@ -753,15 +753,6 @@ msgstr "Üst Üste Gelme"
#: appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:184
#: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:163
#: 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 ""
"How much (percentage) of the tool width to overlap each tool pass.\n"
"Adjust the value starting with lower values\n"
@@ -773,11 +764,11 @@ msgid ""
msgstr ""
"Ucun her geçişinde uç genişliğinin ne kadarlık kısmının (yüzde) üst üste "
"geleceğini belirler.\n"
-"Daha düşük değerlerden başlayarak ve temizlenecek alanlar hala \n"
-"temizlenmemişse değeri artırın.\n"
+"Değeri daha düşük değerlerden başlayarak ayarlayın ve işlenmesi gereken "
+"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"
-"Daha yüksek değerler = Çok sayıda yol nedeniyle CNC'de yavaş\n"
-"işleme ve yavaş yürütmeye sebep olur."
+"Daha yüksek değerler = Çok sayıda yol nedeniyle CNC'de yavaş işleme \n"
+"ve yavaş yürütmeye sebep olur."
#: appDatabase.py:649 appDatabase.py:1156 appEditors/AppGeoEditor.py:473
#: appGUI/ObjectUI.py:1679
@@ -930,12 +921,6 @@ msgstr "Hizala"
#: appDatabase.py:704 appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:257
#: appGUI/preferences/tools/ToolsNCCPrefGroupUI.py:267 appTools/ToolNCC.py:4285
#: 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 ""
"If used, it will add an offset to the copper features.\n"
"The copper clearing will finish to a distance\n"
@@ -943,8 +928,7 @@ msgid ""
msgstr ""
"İşaretlendiğinde, bakır alanlara bir hiza ekleyecektir.\n"
"Bakır temizliği, bakır alanların belirli bir mesafesine\n"
-"kadar olacaktır.\n"
-"Değer, 0 ile 10 arasında FlatCAM birimi olabilir."
+"kadar olacaktır."
#: appDatabase.py:759 appEditors/AppGeoEditor.py:475
#: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:183
@@ -2101,10 +2085,8 @@ msgstr "Uzunluk"
#: appEditors/AppExcEditor.py:4085
#: appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:164
-#, fuzzy
-#| 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
#: appGUI/preferences/excellon/ExcellonEditorPrefGroupUI.py:180
@@ -2535,7 +2517,7 @@ msgstr ""
#: appEditors/AppGeoEditor.py:741 appEditors/AppGerberEditor.py:5555
#: appTools/ToolTransform.py:667
msgid "Skew X"
-msgstr "X Eğrilt"
+msgstr "Eğrilt"
#: appEditors/AppGeoEditor.py:743 appEditors/AppGeoEditor.py:764
#: 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
#: appTools/ToolTransform.py:688
msgid "Skew Y"
-msgstr "Y Eğrilt"
+msgstr "Eğrilt"
#: appEditors/AppGeoEditor.py:793 appEditors/AppGerberEditor.py:5607
#: appGUI/preferences/tools/ToolsFilmPrefGroupUI.py:120
@@ -2900,10 +2882,8 @@ msgid "Rotate done"
msgstr "Döndürme işlemi tamamlandı"
#: appEditors/AppGeoEditor.py:1461 appEditors/AppGerberEditor.py:6327
-#, fuzzy
-#| msgid "Rotate Angle"
msgid "Rotate cancelled"
-msgstr "Rotate Angle"
+msgstr "Döndürme işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1466 appEditors/AppGerberEditor.py:6332
msgid "Offset on X axis ..."
@@ -2915,58 +2895,44 @@ msgid "Enter a distance Value"
msgstr "Bir mesafe değeri girin"
#: appEditors/AppGeoEditor.py:1479 appEditors/AppGerberEditor.py:6345
-#, fuzzy
-#| msgid "Open DXF cancelled."
msgid "Offset X cancelled"
-msgstr "Open DXF cancelled."
+msgstr "X hizalama işlemi iptal edildi"
#: appEditors/AppGeoEditor.py:1484 appEditors/AppGerberEditor.py:6350
msgid "Offset on Y axis ..."
msgstr "Y ekseninde hiza ..."
#: appEditors/AppGeoEditor.py:1494 appEditors/AppGerberEditor.py:6360
-#, fuzzy
-#| msgid "Offset on the 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
-#, fuzzy
-#| msgid "Offset on the Y axis done"
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
msgid "Skew on X axis ..."
msgstr "X ekseninde eğrilt ..."
#: appEditors/AppGeoEditor.py:1510 appEditors/AppGerberEditor.py:6376
-#, fuzzy
-#| 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
-#, fuzzy
-#| msgid "Skew on X axis done."
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
msgid "Skew on Y axis ..."
msgstr "Y Ekseninde Eğrilt ..."
#: appEditors/AppGeoEditor.py:1526 appEditors/AppGerberEditor.py:6392
-#, fuzzy
-#| 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
-#, fuzzy
-#| msgid "Skew on Y axis done."
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/AppGerberEditor.py:1500 appEditors/AppGerberEditor.py:1583
@@ -3161,17 +3127,13 @@ msgstr ""
#: appEditors/AppGeoEditor.py:4936 appEditors/AppGeoEditor.py:4988
#: appEditors/AppGeoEditor.py:5037 appEditors/AppGeoEditor.py:5084
-#, fuzzy
-#| msgid "Failed. 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:5041
-#, fuzzy
-#| msgid "Invalid distance for buffering."
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:5061
@@ -3341,10 +3303,8 @@ msgid "Added new aperture with code"
msgstr "Şu kodlu yeni şekil eklendi"
#: appEditors/AppGerberEditor.py:3095
-#, fuzzy
-#| 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
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."
#: appEditors/AppGerberEditor.py:6363
-#, fuzzy
-#| msgid "Open cancelled."
msgid "Offset Y cancelled"
-msgstr "Open cancelled."
+msgstr "Y hizalama işlemi iptal edildi"
#: appEditors/AppGerberEditor.py:6379
-#, fuzzy
-#| msgid "Open DXF cancelled."
msgid "Skew X cancelled"
-msgstr "Open DXF cancelled."
+msgstr "X eğriltme işlemi iptal edildi"
#: appEditors/AppGerberEditor.py:6395
-#, fuzzy
-#| msgid "Skew_Y angle"
msgid "Skew Y cancelled"
-msgstr "Skew_Y angle"
+msgstr "Y eğriltme işlemi iptal edildi"
#: appEditors/AppTextEditor.py:84
msgid "Find"
@@ -5093,8 +5047,6 @@ msgstr "Varsayılan"
#: appGUI/MainGUI.py:863
#: appGUI/preferences/excellon/ExcellonOptPrefGroupUI.py:33
#: appGUI/preferences/geometry/GeometryOptPrefGroupUI.py:35
-#, fuzzy
-#| msgid "Create CNC Job"
msgid "Create CNCJob"
msgstr "CNC İşi Oluştur"
@@ -6549,10 +6501,8 @@ msgstr ""
"sağlar."
#: 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."
-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
msgid "Milling Tool"
@@ -9206,8 +9156,6 @@ msgstr ""
"başlatılmasını gerektirir."
#: appGUI/preferences/general/GeneralAppPrefGroupUI.py:64
-#, fuzzy
-#| msgid "Precision INCH"
msgid "Precision Inch"
msgstr "İNÇ Hassasiyet"
@@ -12105,15 +12053,6 @@ msgstr "Kalan Parça İşleme"
#: appGUI/preferences/tools/ToolsPaintPrefGroupUI.py:245
#: appTools/ToolIsolation.py:3394 appTools/ToolNCC.py:4338
#: 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 ""
"If checked, use 'rest machining'.\n"
"Basically it will process copper outside PCB features,\n"
@@ -12124,12 +12063,12 @@ msgid ""
"\n"
"If not checked, use the standard algorithm."
msgstr ""
-"Bu onay kutusu işaretlenirse, 'Kalan Parça İşleme' kullanılır.\n"
-"Bu, en büyük ucu kullanarak PCB'nin ana bakırını \n"
-"temizler ve temizlenecek daha fazla bakır kalmayana veya \n"
-"daha fazla uç kalmayana kadar önceki uçla temizlenemeyen\n"
-"bakır alanlarını temizlemek için bir sonraki uçla, daha büyükten\n"
-"daha küçüğe doğru ilerler.\n"
+"İşaretlenirse, 'Kalan Parça İşleme' kullanılır.\n"
+"Temel olarak, PCB özelliklerinin dışında kalan bakırları işleyecek.\n"
+"En büyük uçtan başlayarak ve büyükten küçüğe doğru kullanarak işlenecek "
+"hiçbir şey kalmayıncaya kadar veya önceki uçla temizlenemeyen bakırları "
+"işlemeye devam edecektir.\n"
+"\n"
"Onay kutusu seçilmezse, standart algoritma kullanılır."
#: 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: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
-#, fuzzy
-#| msgid "No object selected."
msgid "No object is selected."
msgstr "Hiçbir nesne seçilmedi."
@@ -15134,10 +15071,8 @@ msgid "Starting G-Code"
msgstr "G-Kodu başlatılıyor"
#: appTools/ToolDrilling.py:1673 appTools/ToolMilling.py:1355
-#, fuzzy
-#| msgid "Generating Excellon 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
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."
#: 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."
-msgstr ""
-"Hiçbir FlatCAM nesnesi seçilmedi. Film için bir nesne yükleyin ve tekrar "
-"deneyin."
+msgstr "Film için bir nesne yükleyin ve tekrar deneyin."
#: 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."
-msgstr ""
-"Hiçbir FlatCAM nesnesi seçilmedi. Çerçeve için bir nesne yükleyin ve tekrar "
-"deneyin."
+msgstr "Çerçeve için bir nesne yükleyin ve tekrar deneyin."
#: appTools/ToolFilm.py:182
msgid "Generating Film ..."
@@ -15785,10 +15712,8 @@ msgid "Tool(s) deleted from Tool Table."
msgstr "Uç(lar) Araçlar Tablosundan silindi."
#: appTools/ToolIsolation.py:1479
-#, fuzzy
-#| msgid "Isolation"
msgid "Isolating"
-msgstr "Yalıtım"
+msgstr "Yalıtılıyor"
#: appTools/ToolIsolation.py:1499
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
msgid "object was moved"
-msgstr "nesne taşındı"
+msgstr "nesnesi taşındı"
#: appTools/ToolMove.py:221
msgid "Error when mouse left click."
@@ -16820,21 +16745,16 @@ msgid "Import Excellon"
msgstr "Excellon'u İçe Aktar"
#: 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 ""
"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."
msgstr ""
-"FlatCAM'de, bilgileri 2 dosyada bulunan\n"
-"Excellon dosyasını içe aktarın. \n"
-"Birinde genellikle .DRL, diğerinde .INF uzantısı vardır."
+"Bilgilerinin 2 dosyada saklandığı \n"
+"bir Excellon dosyasını içe aktarın.\n"
+"Biri genellikle .DRL uzantısına sahipken\n"
+"diğeri .INF uzantısına sahiptir."
#: appTools/ToolProperties.py:127
msgid "Object Properties are displayed."
@@ -18196,10 +18116,8 @@ msgid "Adding New Grid cancelled"
msgstr "Yeni ızgara ekleme işlemi iptal edildi"
#: app_Main.py:6351
-#, fuzzy
-#| 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
msgid "Grid Value deleted"
@@ -18214,8 +18132,6 @@ msgid "Key Shortcut List"
msgstr "Klavye Kısayol Listesi"
#: app_Main.py:6401
-#, fuzzy
-#| msgid "Name copied on clipboard ..."
msgid "Name copied to clipboard ..."
msgstr "İsim panoya kopyalandı ..."
@@ -18631,10 +18547,8 @@ msgstr ""
"ediliyor."
#: app_Main.py:10387
-#, fuzzy
-#| msgid " Open HPGL2 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
msgid "TCL script file opened in Code Editor."