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