Преглед изворни кода

Synchronize the state of the plot checkboxes to the state of the settings.

mquezada пре 7 година
родитељ
комит
8e4f081ac3
3 измењених фајлова са 62 додато и 3 уклоњено
  1. 57 0
      FlatCAMApp.py
  2. 4 2
      FlatCAMGUI.py
  3. 1 1
      ObjectCollection.py

+ 57 - 0
FlatCAMApp.py

@@ -554,6 +554,8 @@ class App(QtCore.QObject):
         # Options
         # Options
         self.ui.options_combo.activated.connect(self.on_options_combo_change)
         self.ui.options_combo.activated.connect(self.on_options_combo_change)
         self.options_form.units_radio.group_toggle_fn = self.on_toggle_units
         self.options_form.units_radio.group_toggle_fn = self.on_toggle_units
+        #Notebook tabs
+        self.ui.notebook.currentChanged.connect(self.on_tab_change)
 
 
         ####################
         ####################
         ### Other setups ###
         ### Other setups ###
@@ -1529,6 +1531,61 @@ class App(QtCore.QObject):
     def on_row_activated(self, index):
     def on_row_activated(self, index):
         self.ui.notebook.setCurrentWidget(self.ui.selected_tab)
         self.ui.notebook.setCurrentWidget(self.ui.selected_tab)
 
 
+    def on_tab_change(self, tabIndex):
+        """
+        Event callback that signals when a tab in the notebook is switched.
+
+        When switching TO the Project tab, this method synchronizes the state of the plot checkboxes
+        in the object list with the state of the plot checkbox for the selected object in
+        the Selected tab. It might not be the most efficient way but it does a check on
+        all objects in the list and compares their plot setting value to the value of the
+        checkbox state. The matches the value of the checkbox to the value of the settings.
+
+        When switching TO the Selected tab, this method synchronizes the plot checkbox state with
+        the state of the plot settings as long as it can find a plot_cb associated with the
+        FlatCAMObj ui.
+
+        :param tabIndex: The integer index of the tab that is selected and broight into view.
+        :return: None
+        """
+        #print("TAB CHANGE!!!!!!!!!!!!!!!!!!!" + str(tabIndex))
+        # Because the checkboxes attached to the list model might be
+        # programmatically toggled, we block their signal to avoid
+        # unnecessarily sending it out.
+        self.collection.model.blockSignals(True)
+
+        # Tab index 0 is the Project tab
+        if tabIndex == 0:
+            # Loop through all objects in the collection list by index
+            for index in range(len(self.collection.object_list)):
+                # Use the index to retrieve the matching item from the ListView model
+                item = self.collection.model.item(index)
+                # Verify the current state of the checkbox in the Project tab ListView model
+                checked = item.checkState() == QtCore.Qt.Checked
+                # Use the index of the item to retrieve the matching object from the object list
+                obj = self.collection.object_list[item.row()]
+                # Compare the value of the checkbox to that of the settings and update as required
+                if obj.options["plot"] != checked: #(item.checkState() == QtCore.Qt.Checked)
+                    if obj.options["plot"] == True:
+                        item.setCheckState(2)#Qt.Checked)
+                    else:
+                        item.setCheckState(0) #Qt.Unchecked)
+        # Tab index 1 is Selected tab
+        elif tabIndex == 1:
+            # Grab the active object from the collection
+            obj = self.collection.get_active()
+            # If an object is selected and it has a plot_cb object and the plot checkbox state
+            # does NOT match the plot options state
+            if obj != None and obj.ui.plot_cb != None and obj.ui.plot_cb.get_value() != obj.options["plot"]:
+                # Block the checkbox signal
+                obj.ui.plot_cb.blockSignals(True)
+                # Set the checkbox state to match the options state
+                obj.ui.plot_cb.set_value(obj.options["plot"])
+                # Restore the checkbox signal
+                obj.ui.plot_cb.blockSignals(False)
+        # Unblock the signals in the ListView model to return to normal operation
+        self.collection.model.blockSignals(False)
+
     def on_object_created(self, obj):
     def on_object_created(self, obj):
         """
         """
         Event callback for object creation.
         Event callback for object creation.

+ 4 - 2
FlatCAMGUI.py

@@ -5,7 +5,6 @@
 # Date: 2/5/2014                                           #
 # Date: 2/5/2014                                           #
 # MIT Licence                                              #
 # MIT Licence                                              #
 ############################################################
 ############################################################
-
 from PyQt4 import QtGui, QtCore, Qt
 from PyQt4 import QtGui, QtCore, Qt
 from GUIElements import *
 from GUIElements import *
 
 
@@ -152,6 +151,7 @@ class FlatCAMGUI(QtGui.QMainWindow):
         ### Notebook ###
         ### Notebook ###
         ################
         ################
         self.notebook = QtGui.QTabWidget()
         self.notebook = QtGui.QTabWidget()
+        
         # self.notebook.setMinimumWidth(250)
         # self.notebook.setMinimumWidth(250)
 
 
         ### Projet ###
         ### Projet ###
@@ -268,6 +268,7 @@ class FlatCAMGUI(QtGui.QMainWindow):
         QtGui.qApp.quit()
         QtGui.qApp.quit()
 
 
 
 
+
 class FlatCAMActivityView(QtGui.QWidget):
 class FlatCAMActivityView(QtGui.QWidget):
 
 
     def __init__(self, parent=None):
     def __init__(self, parent=None):
@@ -375,6 +376,7 @@ class GerberOptionsGroupUI(OptionsGroupUI):
         self.plot_options_label.setToolTip(
         self.plot_options_label.setToolTip(
             "Plot (show) this object."
             "Plot (show) this object."
         )
         )
+
         grid0.addWidget(self.plot_cb, 0, 0)
         grid0.addWidget(self.plot_cb, 0, 0)
 
 
         # Solid CB
         # Solid CB
@@ -945,4 +947,4 @@ class GlobalOptionsUI(QtGui.QWidget):
 #
 #
 #
 #
 # if __name__ == '__main__':
 # if __name__ == '__main__':
-#     main()
+#     main()

+ 1 - 1
ObjectCollection.py

@@ -306,7 +306,7 @@ class ObjectCollection(QtCore.QAbstractListModel):
         self.object_list[selection_index].build_ui()
         self.object_list[selection_index].build_ui()
 
 
     def on_item_changed(self, item):
     def on_item_changed(self, item):
-        #FlatCAMApp.App.log.debug("on_item_changed(): " + str(item.row()) + " " + self.object_list[item.row()].options["name"])
+        FlatCAMApp.App.log.debug("on_item_changed(): " + str(item.row()) + " " + self.object_list[item.row()].options["name"])
         if item.checkState() == QtCore.Qt.Checked:
         if item.checkState() == QtCore.Qt.Checked:
            self.object_list[item.row()].options["plot"] = True #(item.checkState() == QtCore.Qt.Checked)
            self.object_list[item.row()].options["plot"] = True #(item.checkState() == QtCore.Qt.Checked)
         else:
         else: