Переглянути джерело

- updated all the FlatCAM Tools and the Gerber UI FCComboBoxes to update the box value with the latest object loaded in the App
- some fixes in the NCC Tool
- modified some strings

Marius Stanciu 5 роки тому
батько
коміт
15ee54d057

+ 10 - 3
FlatCAMObj.py

@@ -733,7 +733,12 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
         # set the model for the Area Exception comboboxes
         self.ui.obj_combo.setModel(self.app.collection)
         self.ui.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.ui.obj_combo.set_last = True
+        self.ui.obj_combo.is_last = True
+        self.ui.obj_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Geometry"): "Geometry"
+        }[self.ui.type_obj_combo.get_value()]
+        self.on_type_obj_index_changed()
+
         self.ui.type_obj_combo.currentIndexChanged.connect(self.on_type_obj_index_changed)
 
         self.ui.tool_type_radio.activated_custom.connect(self.on_tool_type_change)
@@ -813,10 +818,12 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
         tool_diameter = tdia + (2 * cutz * math.tan(math.radians(half_tip_angle)))
         self.ui.iso_tool_dia_entry.set_value(tool_diameter)
 
-    def on_type_obj_index_changed(self, index):
-        obj_type = self.ui.type_obj_combo.currentIndex()
+    def on_type_obj_index_changed(self):
+        val = self.ui.type_obj_combo.get_value()
+        obj_type = {"Gerber": 0, "Geometry": 2}[val]
         self.ui.obj_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.ui.obj_combo.setCurrentIndex(0)
+        self.ui.obj_combo.obj_type = {_("Gerber"): "Gerber", _("Geometry"): "Geometry"}[val]
 
     def on_tool_type_change(self, state):
         if state == 'circular':

+ 6 - 0
README.md

@@ -9,6 +9,12 @@ CAD program, and create G-Code for Isolation routing.
 
 =================================================
 
+4.03.2020
+
+- updated all the FlatCAM Tools and the Gerber UI FCComboBoxes to update the box value with the latest object loaded in the App
+- some fixes in the NCC Tool
+- modified some strings
+
 02.03.2020
 
 - added property that allow the FCComboBox to update the view with the last item loaded; updated the app to use this property

+ 16 - 5
flatcamGUI/GUIElements.py

@@ -1286,6 +1286,7 @@ class FCComboBox(QtWidgets.QComboBox):
         self.view.setContextMenuPolicy(Qt.CustomContextMenu)
 
         self._set_last = False
+        self._obj_type = None
 
         # the callback() will be called on customcontextmenu event and will be be passed 2 parameters:
         # pos = mouse right click click position
@@ -1309,17 +1310,27 @@ class FCComboBox(QtWidgets.QComboBox):
         self.setCurrentIndex(self.findText(str(val)))
 
     @property
-    def set_last(self):
+    def is_last(self):
         return self._set_last
 
-    @set_last.setter
-    def set_last(self, val):
+    @is_last.setter
+    def is_last(self, val):
         self._set_last = val
         if self._set_last is True:
             self.model().rowsInserted.connect(self.on_model_changed)
+        self.setCurrentIndex(1)
 
-    def on_model_changed(self, first, last):
-        self.setCurrentIndex(last)
+    @property
+    def obj_type(self):
+        return self._obj_type
+
+    @obj_type.setter
+    def obj_type(self, val):
+        self._obj_type = val
+
+    def on_model_changed(self, parent, first, last):
+        if self.model().data(parent, QtCore.Qt.DisplayRole) == self.obj_type:
+            self.setCurrentIndex(first)
 
 
 class FCInputDialog(QtWidgets.QInputDialog):

+ 1 - 5
flatcamGUI/ObjectUI.py

@@ -446,11 +446,7 @@ class GerberObjectUI(ObjectUI):
         # ##### Type of object to be excepted ############
         # ################################################
         self.type_obj_combo = FCComboBox()
-        self.type_obj_combo.addItems(["Gerber", "Geometry"])
-
-        # self.type_obj_combo.addItem("Gerber")
-        # self.type_obj_combo.addItem("Excellon")
-        # self.type_obj_combo.addItem("Geometry")
+        self.type_obj_combo.addItems([_("Gerber"), _("Geometry")])
 
         # we get rid of item1 ("Excellon") as it is not suitable
         # self.type_obj_combo.view().setRowHidden(1, True)

+ 4 - 2
flatcamTools/ToolAlignObjects.py

@@ -80,7 +80,7 @@ class AlignObjects(FlatCAMTool):
         self.object_combo = FCComboBox()
         self.object_combo.setModel(self.app.collection)
         self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.object_combo.set_last = True
+        self.object_combo.is_last = True
 
         self.object_combo.setToolTip(
             _("Object to be aligned.")
@@ -116,7 +116,7 @@ class AlignObjects(FlatCAMTool):
         self.aligner_object_combo = FCComboBox()
         self.aligner_object_combo.setModel(self.app.collection)
         self.aligner_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.aligner_object_combo.set_last = True
+        self.aligner_object_combo.is_last = True
 
         self.aligner_object_combo.setToolTip(
             _("Object to be aligned to. Aligner.")
@@ -270,11 +270,13 @@ class AlignObjects(FlatCAMTool):
         obj_type = {'grb': 0, 'exc': 1}[val]
         self.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.object_combo.setCurrentIndex(0)
+        self.object_combo.obj_type = {'grb': "Gerber", 'exc': "Excellon"}[val]
 
     def on_type_aligner_changed(self, val):
         obj_type = {'grb': 0, 'exc': 1}[val]
         self.aligner_object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.aligner_object_combo.setCurrentIndex(0)
+        self.aligner_object_combo.obj_type = {'grb': "Gerber", 'exc': "Excellon"}[val]
 
     def on_align(self):
         self.app.delete_selection_shape()

+ 22 - 9
flatcamTools/ToolCalibration.py

@@ -195,7 +195,6 @@ class ToolCalibration(FlatCAMTool):
         self.obj_type_combo = FCComboBox()
         self.obj_type_combo.addItem(_("Gerber"))
         self.obj_type_combo.addItem(_("Excellon"))
-        self.obj_type_combo.setCurrentIndex(1)
 
         self.obj_type_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
         self.obj_type_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/drill16.png"))
@@ -206,7 +205,7 @@ class ToolCalibration(FlatCAMTool):
         self.object_combo = FCComboBox()
         self.object_combo.setModel(self.app.collection)
         self.object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
-        self.object_combo.set_last = True
+        self.object_combo.is_last = True
 
         self.object_label = QtWidgets.QLabel("%s:" % _("Source object selection"))
         self.object_label.setToolTip(
@@ -630,16 +629,13 @@ class ToolCalibration(FlatCAMTool):
 
         self.adj_object_type_combo = FCComboBox()
         self.adj_object_type_combo.addItems([_("Gerber"), _("Excellon"), _("Geometry")])
-        self.adj_object_type_combo.setCurrentIndex(0)
 
         self.adj_object_type_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
         self.adj_object_type_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/drill16.png"))
         self.adj_object_type_combo.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png"))
 
         self.adj_object_type_label = QtWidgets.QLabel("%s:" % _("Adjusted object type"))
-        self.adj_object_type_label.setToolTip(
-            _("Type of the FlatCAM Object to be adjusted.")
-        )
+        self.adj_object_type_label.setToolTip(_("Type of the FlatCAM Object to be adjusted."))
 
         grid_lay.addWidget(self.adj_object_type_label, 46, 0, 1, 3)
         grid_lay.addWidget(self.adj_object_type_combo, 47, 0, 1, 3)
@@ -647,7 +643,10 @@ class ToolCalibration(FlatCAMTool):
         self.adj_object_combo = FCComboBox()
         self.adj_object_combo.setModel(self.app.collection)
         self.adj_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.adj_object_combo.setCurrentIndex(0)
+        self.adj_object_combo.is_last = True
+        self.adj_object_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.adj_object_type_combo.get_value()]
 
         self.adj_object_label = QtWidgets.QLabel("%s:" % _("Adjusted object selection"))
         self.adj_object_label.setToolTip(
@@ -787,6 +786,14 @@ class ToolCalibration(FlatCAMTool):
         self.skewx_entry.set_value(0.0)
         self.skewy_entry.set_value(0.0)
 
+        # default object selection is Excellon = index_1
+        self.obj_type_combo.setCurrentIndex(1)
+        self.on_obj_type_combo()
+
+        self.adj_object_type_combo.setCurrentIndex(0)
+        self.on_adj_obj_type_combo()
+        # self.adj_object_combo.setCurrentIndex(0)
+
         # calibrated object
         self.cal_object = None
 
@@ -795,12 +802,18 @@ class ToolCalibration(FlatCAMTool):
     def on_obj_type_combo(self):
         obj_type = self.obj_type_combo.currentIndex()
         self.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
-        self.object_combo.setCurrentIndex(0)
+        # self.object_combo.setCurrentIndex(0)
+        self.object_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon"
+        }[self.obj_type_combo.get_value()]
 
     def on_adj_obj_type_combo(self):
         obj_type = self.adj_object_type_combo.currentIndex()
         self.adj_object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
-        self.adj_object_combo.setCurrentIndex(0)
+        # self.adj_object_combo.setCurrentIndex(0)
+        self.adj_object_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.adj_object_type_combo.get_value()]
 
     def on_cal_source_radio(self, val):
         if val == 'object':

+ 44 - 38
flatcamTools/ToolCopperThieving.py

@@ -69,7 +69,8 @@ class ToolCopperThieving(FlatCAMTool):
         self.grb_object_combo = FCComboBox()
         self.grb_object_combo.setModel(self.app.collection)
         self.grb_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.grb_object_combo.set_last = True
+        self.grb_object_combo.is_last = True
+        self.grb_object_combo.obj_type = 'Gerber'
 
         self.grbobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("GERBER"))
         self.grbobj_label.setToolTip(
@@ -135,35 +136,36 @@ class ToolCopperThieving(FlatCAMTool):
         grid_lay.addWidget(self.reference_label, 3, 0)
         grid_lay.addWidget(self.reference_radio, 3, 1)
 
-        self.box_combo_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type"))
-        self.box_combo_type_label.setToolTip(
+        self.ref_combo_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type"))
+        self.ref_combo_type_label.setToolTip(
             _("The type of FlatCAM object to be used as copper thieving reference.\n"
               "It can be Gerber, Excellon or Geometry.")
         )
-        self.box_combo_type = FCComboBox()
-        self.box_combo_type.addItem(_("Reference Gerber"))
-        self.box_combo_type.addItem(_("Reference Excellon"))
-        self.box_combo_type.addItem(_("Reference Geometry"))
+        self.ref_combo_type = FCComboBox()
+        self.ref_combo_type.addItems([_("Gerber"), _("Excellon"), _("Geometry")])
 
-        grid_lay.addWidget(self.box_combo_type_label, 4, 0)
-        grid_lay.addWidget(self.box_combo_type, 4, 1)
+        grid_lay.addWidget(self.ref_combo_type_label, 4, 0)
+        grid_lay.addWidget(self.ref_combo_type, 4, 1)
 
-        self.box_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object"))
-        self.box_combo_label.setToolTip(
+        self.ref_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object"))
+        self.ref_combo_label.setToolTip(
             _("The FlatCAM object to be used as non copper clearing reference.")
         )
-        self.box_combo = FCComboBox()
-        self.box_combo.setModel(self.app.collection)
-        self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.box_combo.set_last = True
-
-        grid_lay.addWidget(self.box_combo_label, 5, 0)
-        grid_lay.addWidget(self.box_combo, 5, 1)
-
-        self.box_combo.hide()
-        self.box_combo_label.hide()
-        self.box_combo_type.hide()
-        self.box_combo_type_label.hide()
+        self.ref_combo = FCComboBox()
+        self.ref_combo.setModel(self.app.collection)
+        self.ref_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
+        self.ref_combo.is_last = True
+        self.ref_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.ref_combo_type.get_value()]
+
+        grid_lay.addWidget(self.ref_combo_label, 5, 0)
+        grid_lay.addWidget(self.ref_combo, 5, 1)
+
+        self.ref_combo.hide()
+        self.ref_combo_label.hide()
+        self.ref_combo_type.hide()
+        self.ref_combo_type_label.hide()
 
         # Bounding Box Type #
         self.bbox_type_radio = RadioSet([
@@ -420,7 +422,8 @@ class ToolCopperThieving(FlatCAMTool):
         self.sm_object_combo = FCComboBox()
         self.sm_object_combo.setModel(self.app.collection)
         self.sm_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.sm_object_combo.set_last = True
+        self.sm_object_combo.is_last = True
+        self.sm_object_combo.obj_type = 'Gerber'
 
         grid_lay_1.addWidget(self.sm_obj_label, 7, 0, 1, 3)
         grid_lay_1.addWidget(self.sm_object_combo, 8, 0, 1, 3)
@@ -526,7 +529,7 @@ class ToolCopperThieving(FlatCAMTool):
         self.rb_thickness = None
 
         # SIGNALS
-        self.box_combo_type.currentIndexChanged.connect(self.on_combo_box_type)
+        self.ref_combo_type.currentIndexChanged.connect(self.on_ref_combo_type_change)
         self.reference_radio.group_toggle_fn = self.on_toggle_reference
         self.fill_type_radio.activated_custom.connect(self.on_thieving_type)
 
@@ -594,22 +597,25 @@ class ToolCopperThieving(FlatCAMTool):
         self.robber_line = None
         self.new_solid_geometry = None
 
-    def on_combo_box_type(self):
-        obj_type = self.box_combo_type.currentIndex()
-        self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
-        self.box_combo.setCurrentIndex(0)
+    def on_ref_combo_type_change(self):
+        obj_type = self.ref_combo_type.currentIndex()
+        self.ref_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
+        self.ref_combo.setCurrentIndex(0)
+        self.ref_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.ref_combo_type.get_value()]
 
     def on_toggle_reference(self):
         if self.reference_radio.get_value() == "itself" or self.reference_radio.get_value() == "area":
-            self.box_combo.hide()
-            self.box_combo_label.hide()
-            self.box_combo_type.hide()
-            self.box_combo_type_label.hide()
+            self.ref_combo.hide()
+            self.ref_combo_label.hide()
+            self.ref_combo_type.hide()
+            self.ref_combo_type_label.hide()
         else:
-            self.box_combo.show()
-            self.box_combo_label.show()
-            self.box_combo_type.show()
-            self.box_combo_type_label.show()
+            self.ref_combo.show()
+            self.ref_combo_label.show()
+            self.ref_combo_type.show()
+            self.ref_combo_type_label.show()
 
         if self.reference_radio.get_value() == "itself":
             self.bbox_type_label.show()
@@ -778,7 +784,7 @@ class ToolCopperThieving(FlatCAMTool):
             self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
 
         elif reference_method == 'box':
-            bound_obj_name = self.box_combo.currentText()
+            bound_obj_name = self.ref_combo.currentText()
 
             # Get reference object.
             try:

+ 4 - 2
flatcamTools/ToolCutOut.py

@@ -108,7 +108,7 @@ class CutOut(FlatCAMTool):
         self.obj_combo = FCComboBox()
         self.obj_combo.setModel(self.app.collection)
         self.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.obj_combo.set_last = True
+        self.obj_combo.is_last = True
 
         grid0.addWidget(self.obj_combo, 3, 0, 1, 2)
 
@@ -321,7 +321,8 @@ class CutOut(FlatCAMTool):
         self.man_object_combo = FCComboBox()
         self.man_object_combo.setModel(self.app.collection)
         self.man_object_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
-        self.man_object_combo.set_last = True
+        self.man_object_combo.is_last = True
+        self.man_object_combo.obj_type = "Geometry"
 
         self.man_object_label = QtWidgets.QLabel('%s:' % _("Geometry Object"))
         self.man_object_label.setToolTip(
@@ -416,6 +417,7 @@ class CutOut(FlatCAMTool):
         obj_type = {'grb': 0, 'geo': 2}[val]
         self.obj_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.obj_combo.setCurrentIndex(0)
+        self.obj_combo.obj_type = {"grb": "Gerber", "geo": "Geometry"}[val]
 
     def run(self, toggle=True):
         self.app.report_usage("ToolCutOut()")

+ 14 - 9
flatcamTools/ToolDblSided.py

@@ -59,7 +59,8 @@ class DblSidedTool(FlatCAMTool):
         self.gerber_object_combo = FCComboBox()
         self.gerber_object_combo.setModel(self.app.collection)
         self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.gerber_object_combo.set_last = True
+        self.gerber_object_combo.is_last = True
+        self.gerber_object_combo.obj_type = "Gerber"
 
         self.botlay_label = QtWidgets.QLabel("%s:" % _("GERBER"))
         self.botlay_label.setToolTip('%s.' % _("Gerber to be mirrored"))
@@ -86,7 +87,8 @@ class DblSidedTool(FlatCAMTool):
         self.exc_object_combo = FCComboBox()
         self.exc_object_combo.setModel(self.app.collection)
         self.exc_object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
-        self.exc_object_combo.set_last = True
+        self.exc_object_combo.is_last = True
+        self.exc_object_combo.obj_type = "Excellon"
 
         self.excobj_label = QtWidgets.QLabel("%s:" % _("EXCELLON"))
         self.excobj_label.setToolTip(_("Excellon Object to be mirrored."))
@@ -113,7 +115,8 @@ class DblSidedTool(FlatCAMTool):
         self.geo_object_combo = FCComboBox()
         self.geo_object_combo.setModel(self.app.collection)
         self.geo_object_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
-        self.geo_object_combo.set_last = True
+        self.geo_object_combo.is_last = True
+        self.geo_object_combo.obj_type = "Geometry"
 
         self.geoobj_label = QtWidgets.QLabel("%s:" % _("GEOMETRY"))
         self.geoobj_label.setToolTip(
@@ -232,7 +235,7 @@ class DblSidedTool(FlatCAMTool):
         self.box_combo = FCComboBox()
         self.box_combo.setModel(self.app.collection)
         self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.box_combo.set_last = True
+        self.box_combo.is_last = True
 
         self.box_combo.hide()
 
@@ -555,14 +558,16 @@ class DblSidedTool(FlatCAMTool):
 
         self.align_ref_label_val.set_value('%.*f' % (self.decimals, 0.0))
 
+        # run once to make sure that the obj_type attribute is updated in the FCComboBox
+        self.box_type_radio.set_value('grb')
+        self.on_combo_box_type('grb')
+
     def on_combo_box_type(self, val):
-        obj_type = {
-            'grb': 0,
-            'exc': 1,
-            'geo': 2
-        }[val]
+        obj_type = {'grb': 0, 'exc': 1, 'geo': 2}[val]
         self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.box_combo.setCurrentIndex(0)
+        self.box_combo.obj_type = {
+            "grb": "Gerber", "exc": "Excellon", "geo": "Geometry"}[val]
 
     def on_create_alignment_holes(self):
         axis = self.align_axis_radio.get_value()

+ 2 - 1
flatcamTools/ToolExtractDrills.py

@@ -55,7 +55,8 @@ class ToolExtractDrills(FlatCAMTool):
         self.gerber_object_combo = FCComboBox()
         self.gerber_object_combo.setModel(self.app.collection)
         self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.gerber_object_combo.set_last = True
+        self.gerber_object_combo.is_last = True
+        self.gerber_object_combo.obj_type = "Gerber"
 
         self.grb_label = QtWidgets.QLabel("<b>%s:</b>" % _("GERBER"))
         self.grb_label.setToolTip('%s.' % _("Gerber from which to extract drill holes"))

+ 4 - 2
flatcamTools/ToolFiducials.py

@@ -253,7 +253,8 @@ class ToolFiducials(FlatCAMTool):
         self.grb_object_combo = FCComboBox()
         self.grb_object_combo.setModel(self.app.collection)
         self.grb_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.grb_object_combo.set_last = True
+        self.grb_object_combo.is_last = True
+        self.grb_object_combo.obj_type = "Gerber"
 
         self.grbobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("Copper Gerber"))
         self.grbobj_label.setToolTip(
@@ -289,7 +290,8 @@ class ToolFiducials(FlatCAMTool):
         self.sm_object_combo = FCComboBox()
         self.sm_object_combo.setModel(self.app.collection)
         self.sm_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.sm_object_combo.set_last = True
+        self.sm_object_combo.is_last = True
+        self.sm_object_combo.obj_type = "Gerber"
 
         grid_lay.addWidget(self.sm_object_label, 13, 0, 1, 2)
         grid_lay.addWidget(self.sm_object_combo, 14, 0, 1, 2)

+ 19 - 10
flatcamTools/ToolFilm.py

@@ -66,10 +66,7 @@ class Film(FlatCAMTool):
 
         # Type of object for which to create the film
         self.tf_type_obj_combo = FCComboBox()
-        self.tf_type_obj_combo.addItems(["Gerber", "Geometry"])
-        # self.tf_type_obj_combo.addItem("Gerber")
-        # self.tf_type_obj_combo.addItem("Excellon")
-        # self.tf_type_obj_combo.addItem("Geometry")
+        self.tf_type_obj_combo.addItems([_("Gerber"), _("Geometry")])
 
         # we get rid of item1 ("Excellon") as it is not suitable for creating film
         # self.tf_type_obj_combo.view().setRowHidden(1, True)
@@ -90,7 +87,7 @@ class Film(FlatCAMTool):
         self.tf_object_combo = FCComboBox()
         self.tf_object_combo.setModel(self.app.collection)
         self.tf_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.tf_object_combo.set_last = True
+        self.tf_object_combo.is_last = True
 
         self.tf_object_label = QtWidgets.QLabel('%s:' % _("Film Object"))
         self.tf_object_label.setToolTip(
@@ -102,7 +99,7 @@ class Film(FlatCAMTool):
         # Type of Box Object to be used as an envelope for film creation
         # Within this we can create negative
         self.tf_type_box_combo = FCComboBox()
-        self.tf_type_box_combo.addItems(["Gerber", "Geometry"])
+        self.tf_type_box_combo.addItems([_("Gerber"), _("Geometry")])
 
         # self.tf_type_box_combo.addItem("Gerber")
         # self.tf_type_box_combo.addItem("Excellon")
@@ -127,7 +124,7 @@ class Film(FlatCAMTool):
         self.tf_box_combo = FCComboBox()
         self.tf_box_combo.setModel(self.app.collection)
         self.tf_box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.tf_box_combo.set_last = True
+        self.tf_box_combo.is_last = True
 
         self.tf_box_combo_label = QtWidgets.QLabel('%s:' % _("Box Object"))
         self.tf_box_combo_label.setToolTip(
@@ -372,7 +369,9 @@ class Film(FlatCAMTool):
         self.exc_combo = FCComboBox()
         self.exc_combo.setModel(self.app.collection)
         self.exc_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
-        self.exc_combo.set_last = True
+        self.exc_combo.is_last = True
+        self.exc_combo.obj_type = "Excellon"
+
         punch_grid.addWidget(self.exc_label, 1, 0)
         punch_grid.addWidget(self.exc_combo, 1, 1)
 
@@ -542,15 +541,21 @@ class Film(FlatCAMTool):
         self.file_type_radio.activated_custom.connect(self.on_file_type)
         self.reset_button.clicked.connect(self.set_tool_ui)
 
-    def on_type_obj_index_changed(self, index):
+    def on_type_obj_index_changed(self):
         obj_type = self.tf_type_obj_combo.currentIndex()
         self.tf_object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.tf_object_combo.setCurrentIndex(0)
+        self.tf_object_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Geometry"): "Geometry"
+        }[self.tf_type_obj_combo.get_value()]
 
-    def on_type_box_index_changed(self, index):
+    def on_type_box_index_changed(self):
         obj_type = self.tf_type_box_combo.currentIndex()
         self.tf_box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.tf_box_combo.setCurrentIndex(0)
+        self.tf_box_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Geometry"): "Geometry"
+        }[self.tf_type_obj_combo.get_value()]
 
     def run(self, toggle=True):
         self.app.report_usage("ToolFilm()")
@@ -613,6 +618,10 @@ class Film(FlatCAMTool):
         self.orientation_radio.set_value(self.app.defaults["tools_film_orientation"])
         self.pagesize_combo.set_value(self.app.defaults["tools_film_pagesize"])
 
+        # run once to update the obj_type attribute in the FCCombobox so the last object is showed in cb
+        self.on_type_obj_index_changed()
+        self.on_type_box_index_changed()
+
     def on_film_type(self, val):
         type_of_film = val
 

+ 6 - 7
flatcamTools/ToolImage.py

@@ -46,8 +46,7 @@ class ToolImage(FlatCAMTool):
 
         # Type of object to create for the image
         self.tf_type_obj_combo = FCComboBox()
-        self.tf_type_obj_combo.addItem("Gerber")
-        self.tf_type_obj_combo.addItem("Geometry")
+        self.tf_type_obj_combo.addItems([_("Gerber"), _("Geometry")])
 
         self.tf_type_obj_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
         self.tf_type_obj_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/geometry16.png"))
@@ -238,7 +237,7 @@ class ToolImage(FlatCAMTool):
             filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import IMAGE"), filter=filter)
 
         filename = str(filename)
-        type_obj = self.tf_type_obj_combo.get_value().lower()
+        type_obj = self.tf_type_obj_combo.get_value()
         dpi = self.dpi_entry.get_value()
         mode = self.image_type.get_value()
         mask = [self.mask_bw_entry.get_value(), self.mask_r_entry.get_value(), self.mask_g_entry.get_value(),
@@ -250,7 +249,7 @@ class ToolImage(FlatCAMTool):
             self.app.worker_task.emit({'fcn': self.import_image,
                                        'params': [filename, type_obj, dpi, mode, mask]})
 
-    def import_image(self, filename, o_type='gerber', dpi=96, mode='black', mask=None, outname=None):
+    def import_image(self, filename, o_type=_("Gerber"), dpi=96, mode='black', mask=None, outname=None):
         """
         Adds a new Geometry Object to the projects and populates
         it with shapes extracted from the SVG file.
@@ -269,10 +268,10 @@ class ToolImage(FlatCAMTool):
         if mask is None:
             mask = [250, 250, 250, 250]
 
-        if o_type is None or o_type == "geometry":
+        if o_type is None or o_type == _("Geometry"):
             obj_type = "geometry"
-        elif o_type == "gerber":
-            obj_type = o_type
+        elif o_type == _("Gerber"):
+            obj_type = "gerber"
         else:
             self.app.inform.emit('[ERROR_NOTCL] %s' %
                                  _("Not supported type is picked as parameter. "

+ 2 - 1
flatcamTools/ToolInvertGerber.py

@@ -66,7 +66,8 @@ class ToolInvertGerber(FlatCAMTool):
         self.gerber_combo = FCComboBox()
         self.gerber_combo.setModel(self.app.collection)
         self.gerber_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.gerber_combo.set_last = True
+        self.gerber_combo.is_last = True
+        self.gerber_combo.obj_type = "Gerber"
 
         self.gerber_label = QtWidgets.QLabel('<b>%s:</b>' % _("GERBER"))
         self.gerber_label.setToolTip(

+ 59 - 48
flatcamTools/ToolNCC.py

@@ -71,15 +71,15 @@ class NonCopperClear(FlatCAMTool, Gerber):
         # ################################################
         # ##### Type of object to be copper cleaned ######
         # ################################################
-        # self.type_obj_combo = FCComboBox()
-        # self.type_obj_combo.addItem("Gerber")
-        # self.type_obj_combo.addItem("Excellon")
-        # self.type_obj_combo.addItem("Geometry")
+        # self.type_obj_radio = FCComboBox()
+        # self.type_obj_radio.addItem("Gerber")
+        # self.type_obj_radio.addItem("Excellon")
+        # self.type_obj_radio.addItem("Geometry")
         #
         # # we get rid of item1 ("Excellon") as it is not suitable
-        # self.type_obj_combo.view().setRowHidden(1, True)
-        # self.type_obj_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
-        # self.type_obj_combo.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png"))
+        # self.type_obj_radio.view().setRowHidden(1, True)
+        # self.type_obj_radio.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
+        # self.type_obj_radio.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png"))
 
         self.type_obj_combo_label = QtWidgets.QLabel('%s:' % _("Obj Type"))
         self.type_obj_combo_label.setToolTip(
@@ -90,10 +90,10 @@ class NonCopperClear(FlatCAMTool, Gerber):
         )
         self.type_obj_combo_label.setMinimumWidth(60)
 
-        self.type_obj_combo = RadioSet([{'label': "Geometry", 'value': 'geometry'},
-                                        {'label': "Gerber", 'value': 'gerber'}])
+        self.type_obj_radio = RadioSet([{'label': _("Geometry"), 'value': 'geometry'},
+                                        {'label': _("Gerber"), 'value': 'gerber'}])
 
-        form_layout.addRow(self.type_obj_combo_label, self.type_obj_combo)
+        form_layout.addRow(self.type_obj_combo_label, self.type_obj_radio)
 
         # ################################################
         # ##### The object to be copper cleaned ##########
@@ -102,7 +102,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
         self.object_combo.setModel(self.app.collection)
         self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
         # self.object_combo.setCurrentIndex(1)
-        self.object_combo.set_last = True
+        self.object_combo.is_last = True
 
         self.object_label = QtWidgets.QLabel('%s:' % _("Object"))
         self.object_label.setToolTip(_("Object to be cleared of excess copper."))
@@ -546,31 +546,30 @@ class NonCopperClear(FlatCAMTool, Gerber):
         form1 = QtWidgets.QFormLayout()
         self.grid3.addLayout(form1, 28, 0, 1, 2)
 
-        self.box_combo_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type"))
-        self.box_combo_type_label.setToolTip(
+        self.reference_combo_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type"))
+        self.reference_combo_type_label.setToolTip(
             _("The type of FlatCAM object to be used as non copper clearing reference.\n"
               "It can be Gerber, Excellon or Geometry.")
         )
-        self.box_combo_type = FCComboBox()
-        self.box_combo_type.addItem(_("Reference Gerber"))
-        self.box_combo_type.addItem(_("Reference Excellon"))
-        self.box_combo_type.addItem(_("Reference Geometry"))
-        form1.addRow(self.box_combo_type_label, self.box_combo_type)
-
-        self.box_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object"))
-        self.box_combo_label.setToolTip(
+        self.reference_combo_type = FCComboBox()
+        self.reference_combo_type.addItems([_("Gerber"), _("Excellon"), _("Geometry")])
+
+        form1.addRow(self.reference_combo_type_label, self.reference_combo_type)
+
+        self.reference_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object"))
+        self.reference_combo_label.setToolTip(
             _("The FlatCAM object to be used as non copper clearing reference.")
         )
-        self.box_combo = FCComboBox()
-        self.box_combo.setModel(self.app.collection)
-        self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.box_combo.set_last = True
-        form1.addRow(self.box_combo_label, self.box_combo)
+        self.reference_combo = FCComboBox()
+        self.reference_combo.setModel(self.app.collection)
+        self.reference_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
+        self.reference_combo.is_last = True
+        form1.addRow(self.reference_combo_label, self.reference_combo)
 
-        self.box_combo.hide()
-        self.box_combo_label.hide()
-        self.box_combo_type.hide()
-        self.box_combo_type_label.hide()
+        self.reference_combo.hide()
+        self.reference_combo_label.hide()
+        self.reference_combo_type.hide()
+        self.reference_combo_type_label.hide()
 
         separator_line = QtWidgets.QFrame()
         separator_line.setFrameShape(QtWidgets.QFrame.HLine)
@@ -706,13 +705,13 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
         self.op_radio.activated_custom.connect(self.on_operation_change)
 
-        self.box_combo_type.currentIndexChanged.connect(self.on_combo_box_type)
-        self.select_combo.group_toggle_fn = self.on_toggle_reference
+        self.reference_combo_type.currentIndexChanged.connect(self.on_reference_combo_changed)
+        self.select_combo.currentIndexChanged.connect(self.on_toggle_reference)
 
         self.ncc_rest_cb.stateChanged.connect(self.on_rest_machining_check)
         self.ncc_order_radio.activated_custom[str].connect(self.on_order_changed)
 
-        self.type_obj_combo.activated_custom.connect(self.on_type_obj_index_changed)
+        self.type_obj_radio.activated_custom.connect(self.on_type_obj_index_changed)
 
         self.apply_param_to_all.clicked.connect(self.on_apply_param_to_all_clicked)
 
@@ -722,6 +721,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
         obj_type = 0 if val == 'gerber' else 2
         self.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.object_combo.setCurrentIndex(0)
+        self.object_combo.obj_type = {
+            "gerber": "Gerber", "geometry": "Geometry"
+        }[self.type_obj_radio.get_value()]
 
     def on_operation_change(self, val):
         if val == 'iso':
@@ -910,6 +912,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
     def run(self, toggle=True):
         self.app.report_usage("ToolNonCopperClear()")
+        log.debug("ToolNCC().run() was launched ...")
 
         if toggle:
             # if the splitter is hidden, display it, else hide it but only if the current widget is the same
@@ -948,7 +951,12 @@ class NonCopperClear(FlatCAMTool, Gerber):
 
         self.tools_frame.show()
 
-        self.type_obj_combo.set_value('gerber')
+        self.type_obj_radio.set_value('gerber')
+
+        # run those once so the obj_type attribute is updated for the FCComboboxes
+        # so the last loaded object is displayed
+        self.on_type_obj_index_changed(val="gerber")
+        self.on_reference_combo_changed()
 
         self.op_radio.set_value(self.app.defaults["tools_nccoperation"])
         self.ncc_order_radio.set_value(self.app.defaults["tools_nccorder"])
@@ -1254,22 +1262,25 @@ class NonCopperClear(FlatCAMTool, Gerber):
         if self.tool_type_radio.get_value() == 'C1':
             self.old_tool_dia = self.addtool_entry.get_value()
 
-    def on_combo_box_type(self):
-        obj_type = self.box_combo_type.currentIndex()
-        self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
-        self.box_combo.setCurrentIndex(0)
+    def on_reference_combo_changed(self):
+        obj_type = self.reference_combo_type.currentIndex()
+        self.reference_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
+        self.reference_combo.setCurrentIndex(0)
+        self.reference_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.reference_combo_type.get_value()]
 
     def on_toggle_reference(self):
         if self.select_combo.get_value() == _("Itself") or self.select_combo.get_value() == _("Area Selection"):
-            self.box_combo.hide()
-            self.box_combo_label.hide()
-            self.box_combo_type.hide()
-            self.box_combo_type_label.hide()
+            self.reference_combo.hide()
+            self.reference_combo_label.hide()
+            self.reference_combo_type.hide()
+            self.reference_combo_type_label.hide()
         else:
-            self.box_combo.show()
-            self.box_combo_label.show()
-            self.box_combo_type.show()
-            self.box_combo_type_label.show()
+            self.reference_combo.show()
+            self.reference_combo_label.show()
+            self.reference_combo_type.show()
+            self.reference_combo_type_label.show()
 
     def on_order_changed(self, order):
         if order != 'no':
@@ -1567,7 +1578,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
                                                                     "use a number."))
                         continue
 
-                if self.tools_table.cellWidget(x.row(), 4).currentText() == 'iso_op':
+                if self.op_radio.get_value() == _("Isolation"):
                     self.iso_dia_list.append(self.tooldia)
                 else:
                     self.ncc_dia_list.append(self.tooldia)
@@ -1606,7 +1617,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
             self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_release)
             self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
         elif self.select_method == 'box':
-            self.bound_obj_name = self.box_combo.currentText()
+            self.bound_obj_name = self.reference_combo.currentText()
             # Get source object.
             try:
                 self.bound_obj = self.app.collection.get_by_name(self.bound_obj_name)

+ 2 - 1
flatcamTools/ToolOptimal.py

@@ -66,7 +66,8 @@ class ToolOptimal(FlatCAMTool):
         self.gerber_object_combo = FCComboBox()
         self.gerber_object_combo.setModel(self.app.collection)
         self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.gerber_object_combo.set_last = True
+        self.gerber_object_combo.is_last = True
+        self.gerber_object_combo.obj_type = "Gerber"
 
         self.gerber_object_label = QtWidgets.QLabel("<b>%s:</b>" % _("GERBER"))
         self.gerber_object_label.setToolTip(

+ 43 - 35
flatcamTools/ToolPaint.py

@@ -97,7 +97,7 @@ class ToolPaint(FlatCAMTool, Gerber):
         self.obj_combo = FCComboBox()
         self.obj_combo.setModel(self.app.collection)
         self.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.obj_combo.set_last = True
+        self.obj_combo.is_last = True
 
         self.object_label = QtWidgets.QLabel('%s:' % _("Object"))
         self.object_label.setToolTip(_("Object to be painted."))
@@ -491,31 +491,30 @@ class ToolPaint(FlatCAMTool, Gerber):
         form1 = QtWidgets.QFormLayout()
         grid4.addLayout(form1, 20, 0, 1, 2)
 
-        self.box_combo_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type"))
-        self.box_combo_type_label.setToolTip(
+        self.reference_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type"))
+        self.reference_type_label.setToolTip(
             _("The type of FlatCAM object to be used as paint reference.\n"
               "It can be Gerber, Excellon or Geometry.")
         )
-        self.box_combo_type = FCComboBox()
-        self.box_combo_type.addItem(_("Reference Gerber"))
-        self.box_combo_type.addItem(_("Reference Excellon"))
-        self.box_combo_type.addItem(_("Reference Geometry"))
-        form1.addRow(self.box_combo_type_label, self.box_combo_type)
-
-        self.box_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object"))
-        self.box_combo_label.setToolTip(
+        self.reference_type_combo = FCComboBox()
+        self.reference_type_combo.addItems([_("Gerber"), _("Excellon"), _("Geometry")])
+
+        form1.addRow(self.reference_type_label, self.reference_type_combo)
+
+        self.reference_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object"))
+        self.reference_combo_label.setToolTip(
             _("The FlatCAM object to be used as non copper clearing reference.")
         )
-        self.box_combo = FCComboBox()
-        self.box_combo.setModel(self.app.collection)
-        self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.box_combo.set_last = True
-        form1.addRow(self.box_combo_label, self.box_combo)
+        self.reference_combo = FCComboBox()
+        self.reference_combo.setModel(self.app.collection)
+        self.reference_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
+        self.reference_combo.is_last = True
+        form1.addRow(self.reference_combo_label, self.reference_combo)
 
-        self.box_combo.hide()
-        self.box_combo_label.hide()
-        self.box_combo_type.hide()
-        self.box_combo_type_label.hide()
+        self.reference_combo.hide()
+        self.reference_combo_label.hide()
+        self.reference_type_combo.hide()
+        self.reference_type_label.hide()
 
         # GO Button
         self.generate_paint_button = QtWidgets.QPushButton(_('Generate Geometry'))
@@ -633,7 +632,7 @@ class ToolPaint(FlatCAMTool, Gerber):
         self.order_radio.activated_custom[str].connect(self.on_order_changed)
         self.rest_cb.stateChanged.connect(self.on_rest_machining_check)
 
-        self.box_combo_type.currentIndexChanged.connect(self.on_combo_box_type)
+        self.reference_type_combo.currentIndexChanged.connect(self.on_reference_combo_changed)
         self.type_obj_combo.activated_custom.connect(self.on_type_obj_changed)
 
         self.apply_param_to_all.clicked.connect(self.on_apply_param_to_all_clicked)
@@ -660,6 +659,7 @@ class ToolPaint(FlatCAMTool, Gerber):
         obj_type = 0 if val == 'gerber' else 2
         self.obj_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.obj_combo.setCurrentIndex(0)
+        self.obj_combo.obj_type = {"gerber": "Gerber", "geometry": "Geometry"}[val]
 
         idx = self.paintmethod_combo.findText(_("Laser_lines"))
         if self.type_obj_combo.get_value().lower() == 'gerber':
@@ -669,6 +669,14 @@ class ToolPaint(FlatCAMTool, Gerber):
             if self.paintmethod_combo.get_value() == _("Laser_lines"):
                 self.paintmethod_combo.set_value(_("Lines"))
 
+    def on_reference_combo_changed(self):
+        obj_type = self.reference_type_combo.currentIndex()
+        self.reference_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
+        self.reference_combo.setCurrentIndex(0)
+        self.reference_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.reference_type_combo.get_value()]
+
     def install(self, icon=None, separator=None, **kwargs):
         FlatCAMTool.install(self, icon, separator, shortcut='ALT+P', **kwargs)
 
@@ -888,15 +896,15 @@ class ToolPaint(FlatCAMTool, Gerber):
 
     def on_selection(self):
         if self.selectmethod_combo.get_value() == _("Reference Object"):
-            self.box_combo.show()
-            self.box_combo_label.show()
-            self.box_combo_type.show()
-            self.box_combo_type_label.show()
+            self.reference_combo.show()
+            self.reference_combo_label.show()
+            self.reference_type_combo.show()
+            self.reference_type_label.show()
         else:
-            self.box_combo.hide()
-            self.box_combo_label.hide()
-            self.box_combo_type.hide()
-            self.box_combo_type_label.hide()
+            self.reference_combo.hide()
+            self.reference_combo_label.hide()
+            self.reference_type_combo.hide()
+            self.reference_type_label.hide()
 
         if self.selectmethod_combo.get_value() == _("Polygon Selection"):
             # disable rest-machining for single polygon painting
@@ -997,6 +1005,11 @@ class ToolPaint(FlatCAMTool, Gerber):
         # make the default object type, "Geometry"
         self.type_obj_combo.set_value("geometry")
 
+        # run those once so the obj_type attribute is updated in the FCComboBoxes
+        # to make sure that the last loaded object is displayed in the combobox
+        self.on_type_obj_changed(val="geometry")
+        self.on_reference_combo_changed()
+
         try:
             diameters = [float(self.app.defaults["tools_painttooldia"])]
         except (ValueError, TypeError):
@@ -1103,11 +1116,6 @@ class ToolPaint(FlatCAMTool, Gerber):
 
         self.ui_connect()
 
-    def on_combo_box_type(self):
-        obj_type = self.box_combo_type.currentIndex()
-        self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
-        self.box_combo.setCurrentIndex(0)
-
     def on_tool_add(self, dia=None, muted=None):
         self.blockSignals(True)
 
@@ -1411,7 +1419,7 @@ class ToolPaint(FlatCAMTool, Gerber):
             self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_release)
             self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
         elif self.select_method == _("Reference Object"):
-            self.bound_obj_name = self.box_combo.currentText()
+            self.bound_obj_name = self.reference_combo.currentText()
             # Get source object.
             try:
                 self.bound_obj = self.app.collection.get_by_name(self.bound_obj_name)

+ 14 - 6
flatcamTools/ToolPanelize.py

@@ -83,7 +83,7 @@ class Panelize(FlatCAMTool):
         self.object_combo = FCComboBox()
         self.object_combo.setModel(self.app.collection)
         self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.object_combo.set_last = True
+        self.object_combo.is_last = True
 
         self.object_combo.setToolTip(
             _("Object to be panelized. This means that it will\n"
@@ -115,10 +115,7 @@ class Panelize(FlatCAMTool):
 
         # Type of Box Object to be used as an envelope for panelization
         self.type_box_combo = FCComboBox()
-        self.type_box_combo.addItems(["Gerber", "Geometry"])
-        # self.type_box_combo.addItem("Gerber")
-        # self.type_box_combo.addItem("Excellon")
-        # self.type_box_combo.addItem("Geometry")
+        self.type_box_combo.addItems([_("Gerber"), _("Geometry")])
 
         # we get rid of item1 ("Excellon") as it is not suitable for use as a "box" for panelizing
         # self.type_box_combo.view().setRowHidden(1, True)
@@ -138,7 +135,7 @@ class Panelize(FlatCAMTool):
         self.box_combo = FCComboBox()
         self.box_combo.setModel(self.app.collection)
         self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.box_combo.set_last = True
+        self.box_combo.is_last = True
 
         self.box_combo.setToolTip(
             _("The actual object that is used a container for the\n "
@@ -364,10 +361,18 @@ class Panelize(FlatCAMTool):
             self.app.defaults["tools_panelize_panel_type"] else 'gerber'
         self.panel_type_radio.set_value(panel_type)
 
+        # run once the following so the obj_type attribute is updated in the FCComboBoxes
+        # such that the last loaded object is populated in the combo boxes
+        self.on_type_obj_index_changed()
+        self.on_type_box_index_changed()
+
     def on_type_obj_index_changed(self):
         obj_type = self.type_obj_combo.currentIndex()
         self.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.object_combo.setCurrentIndex(0)
+        self.object_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Excellon"): "Excellon", _("Geometry"): "Geometry"
+        }[self.type_obj_combo.get_value()]
 
         # hide the panel type for Excellons, the panel can be only of type Geometry
         if self.type_obj_combo.currentText() != 'Excellon':
@@ -382,6 +387,9 @@ class Panelize(FlatCAMTool):
         obj_type = self.type_box_combo.currentIndex()
         self.box_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
         self.box_combo.setCurrentIndex(0)
+        self.box_combo.obj_type = {
+            _("Gerber"): "Gerber", _("Geometry"): "Geometry"
+        }[self.type_box_combo.get_value()]
 
     def on_reference_radio_changed(self, current_val):
         if current_val == 'object':

+ 4 - 2
flatcamTools/ToolPunchGerber.py

@@ -58,7 +58,8 @@ class ToolPunchGerber(FlatCAMTool):
         self.gerber_object_combo = FCComboBox()
         self.gerber_object_combo.setModel(self.app.collection)
         self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.gerber_object_combo.set_last = True
+        self.gerber_object_combo.is_last = True
+        self.gerber_object_combo.obj_type = "Gerber"
 
         self.grb_label = QtWidgets.QLabel("<b>%s:</b>" % _("GERBER"))
         self.grb_label.setToolTip('%s.' % _("Gerber into which to punch holes"))
@@ -168,7 +169,8 @@ class ToolPunchGerber(FlatCAMTool):
         self.exc_combo = FCComboBox()
         self.exc_combo.setModel(self.app.collection)
         self.exc_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
-        self.exc_combo.set_last = True
+        self.exc_combo.is_last = True
+        self.exc_combo.obj_type = "Excellon"
 
         grid0.addWidget(self.exc_label, 3, 0, 1, 2)
         grid0.addWidget(self.exc_combo, 4, 0, 1, 2)

+ 3 - 2
flatcamTools/ToolQRCode.py

@@ -72,9 +72,10 @@ class QRCode(FlatCAMTool):
         self.grb_object_combo = FCComboBox()
         self.grb_object_combo.setModel(self.app.collection)
         self.grb_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.grb_object_combo.set_last = True
+        self.grb_object_combo.is_last = True
+        self.grb_object_combo.obj_type = "Gerber"
 
-        self.grbobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("GERBER"))
+        self.grbobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("Object"))
         self.grbobj_label.setToolTip(
             _("Gerber Object to which the QRCode will be added.")
         )

+ 18 - 9
flatcamTools/ToolRulesCheck.py

@@ -72,7 +72,8 @@ class RulesCheck(FlatCAMTool):
         self.copper_t_object = FCComboBox()
         self.copper_t_object.setModel(self.app.collection)
         self.copper_t_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.copper_t_object.set_last = True
+        self.copper_t_object.is_last = True
+        self.copper_t_object.obj_type = "Gerber"
 
         self.copper_t_object_lbl = QtWidgets.QLabel('%s:' % _("Top"))
         self.copper_t_object_lbl.setToolTip(
@@ -89,7 +90,8 @@ class RulesCheck(FlatCAMTool):
         self.copper_b_object = FCComboBox()
         self.copper_b_object.setModel(self.app.collection)
         self.copper_b_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.copper_b_object.set_last = True
+        self.copper_b_object.is_last = True
+        self.copper_b_object.obj_type = "Gerber"
 
         self.copper_b_object_lbl = QtWidgets.QLabel('%s:' % _("Bottom"))
         self.copper_b_object_lbl.setToolTip(
@@ -106,7 +108,8 @@ class RulesCheck(FlatCAMTool):
         self.sm_t_object = FCComboBox()
         self.sm_t_object.setModel(self.app.collection)
         self.sm_t_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.sm_t_object.set_last = True
+        self.sm_t_object.is_last = True
+        self.sm_t_object.obj_type = "Gerber"
 
         self.sm_t_object_lbl = QtWidgets.QLabel('%s:' % _("SM Top"))
         self.sm_t_object_lbl.setToolTip(
@@ -123,7 +126,8 @@ class RulesCheck(FlatCAMTool):
         self.sm_b_object = FCComboBox()
         self.sm_b_object.setModel(self.app.collection)
         self.sm_b_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.sm_b_object.set_last = True
+        self.sm_b_object.is_last = True
+        self.sm_b_object.obj_type = "Gerber"
 
         self.sm_b_object_lbl = QtWidgets.QLabel('%s:' % _("SM Bottom"))
         self.sm_b_object_lbl.setToolTip(
@@ -140,7 +144,8 @@ class RulesCheck(FlatCAMTool):
         self.ss_t_object = FCComboBox()
         self.ss_t_object.setModel(self.app.collection)
         self.ss_t_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.ss_t_object.set_last = True
+        self.ss_t_object.is_last = True
+        self.ss_t_object.obj_type = "Gerber"
 
         self.ss_t_object_lbl = QtWidgets.QLabel('%s:' % _("Silk Top"))
         self.ss_t_object_lbl.setToolTip(
@@ -157,7 +162,8 @@ class RulesCheck(FlatCAMTool):
         self.ss_b_object = FCComboBox()
         self.ss_b_object.setModel(self.app.collection)
         self.ss_b_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.ss_b_object.set_last = True
+        self.ss_b_object.is_last = True
+        self.ss_b_object.obj_type = "Gerber"
 
         self.ss_b_object_lbl = QtWidgets.QLabel('%s:' % _("Silk Bottom"))
         self.ss_b_object_lbl.setToolTip(
@@ -174,7 +180,8 @@ class RulesCheck(FlatCAMTool):
         self.outline_object = FCComboBox()
         self.outline_object.setModel(self.app.collection)
         self.outline_object.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.outline_object.set_last = True
+        self.outline_object.is_last = True
+        self.outline_object.obj_type = "Gerber"
 
         self.outline_object_lbl = QtWidgets.QLabel('%s:' % _("Outline"))
         self.outline_object_lbl.setToolTip(
@@ -200,7 +207,8 @@ class RulesCheck(FlatCAMTool):
         self.e1_object = FCComboBox()
         self.e1_object.setModel(self.app.collection)
         self.e1_object.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
-        self.e1_object.set_last = True
+        self.e1_object.is_last = True
+        self.e1_object.obj_type = "Excellon"
 
         self.e1_object_lbl = QtWidgets.QLabel('%s:' % _("Excellon 1"))
         self.e1_object_lbl.setToolTip(
@@ -218,7 +226,8 @@ class RulesCheck(FlatCAMTool):
         self.e2_object = FCComboBox()
         self.e2_object.setModel(self.app.collection)
         self.e2_object.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
-        self.e2_object.set_last = True
+        self.e2_object.is_last = True
+        self.e2_object.obj_type = "Excellon"
 
         self.e2_object_lbl = QtWidgets.QLabel('%s:' % _("Excellon 2"))
         self.e2_object_lbl.setToolTip(

+ 6 - 3
flatcamTools/ToolSolderPaste.py

@@ -61,7 +61,8 @@ class SolderPaste(FlatCAMTool):
         self.obj_combo = FCComboBox(callback=self.on_rmb_combo)
         self.obj_combo.setModel(self.app.collection)
         self.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.obj_combo.set_last = True
+        self.obj_combo.is_last = True
+        self.obj_combo.obj_type = "Gerber"
 
         self.object_label = QtWidgets.QLabel("Gerber:   ")
         self.object_label.setToolTip(
@@ -383,7 +384,8 @@ class SolderPaste(FlatCAMTool):
         self.geo_obj_combo = FCComboBox(callback=self.on_rmb_combo)
         self.geo_obj_combo.setModel(self.app.collection)
         self.geo_obj_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
-        self.geo_obj_combo.set_last = True
+        self.geo_obj_combo.is_last = True
+        self.geo_obj_combo.obj_type = "Geometry"
 
         self.geo_object_label = QtWidgets.QLabel('%s:' % _("Geo Result"))
         self.geo_object_label.setToolTip(
@@ -416,7 +418,8 @@ class SolderPaste(FlatCAMTool):
         self.cnc_obj_combo = FCComboBox(callback=self.on_rmb_combo)
         self.cnc_obj_combo.setModel(self.app.collection)
         self.cnc_obj_combo.setRootModelIndex(self.app.collection.index(3, 0, QtCore.QModelIndex()))
-        self.cnc_obj_combo.set_last = True
+        self.cnc_obj_combo.is_last = True
+        self.geo_obj_combo.obj_type = "CNCJob"
 
         self.cnc_object_label = QtWidgets.QLabel('%s:' % _("CNC Result"))
         self.cnc_object_label.setToolTip(

+ 10 - 4
flatcamTools/ToolSub.py

@@ -69,7 +69,9 @@ class ToolSub(FlatCAMTool):
         self.target_gerber_combo = FCComboBox()
         self.target_gerber_combo.setModel(self.app.collection)
         self.target_gerber_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.target_gerber_combo.setCurrentIndex(1)
+        # self.target_gerber_combo.setCurrentIndex(1)
+        self.target_gerber_combo.is_last = True
+        self.target_gerber_combo.obj_type = "Gerber"
 
         self.target_gerber_label = QtWidgets.QLabel('%s:' % _("Target"))
         self.target_gerber_label.setToolTip(
@@ -83,7 +85,8 @@ class ToolSub(FlatCAMTool):
         self.sub_gerber_combo = FCComboBox()
         self.sub_gerber_combo.setModel(self.app.collection)
         self.sub_gerber_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
-        self.sub_gerber_combo.set_last = True
+        self.sub_gerber_combo.is_last = True
+        self.sub_gerber_combo.obj_type = "Gerber"
 
         self.sub_gerber_label = QtWidgets.QLabel('%s:' % _("Subtractor"))
         self.sub_gerber_label.setToolTip(
@@ -121,7 +124,9 @@ class ToolSub(FlatCAMTool):
         self.target_geo_combo = FCComboBox()
         self.target_geo_combo.setModel(self.app.collection)
         self.target_geo_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
-        self.target_geo_combo.setCurrentIndex(1)
+        # self.target_geo_combo.setCurrentIndex(1)
+        self.target_geo_combo.is_last = True
+        self.target_geo_combo.obj_type = "Geometry"
 
         self.target_geo_label = QtWidgets.QLabel('%s:' % _("Target"))
         self.target_geo_label.setToolTip(
@@ -135,7 +140,8 @@ class ToolSub(FlatCAMTool):
         self.sub_geo_combo = FCComboBox()
         self.sub_geo_combo.setModel(self.app.collection)
         self.sub_geo_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
-        self.sub_geo_combo.set_last = True
+        self.sub_geo_combo.is_last = True
+        self.sub_geo_combo.obj_type = "Geometry"
 
         self.sub_geo_label = QtWidgets.QLabel('%s:' % _("Subtractor"))
         self.sub_geo_label.setToolTip(