def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(960, 480) self.setWindowTitle("Scene editor") self.save_path = "./settings.json" self.object_list = self.load_object_list() if not self.object_list: self.object_list = { 1: {"Type": "Cube", "Position": "1,2,3", "Dimension": 0.1}, 2: {"Type": "Sphere", "Position": "-1,-2,-3", "Dimension": 0.2}, } self.glWidget = ObjectView(self) self.table_widget = ObjectTable(len(self.object_list), 4, self) self.connect( self.table_widget.selectionModel(), QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.select_obj, ) self.table_widget.itemChanged.connect(self.update_object) self.connect(self, QtCore.SIGNAL("table_update_obj"), self.glWidget.glWidget.updateGL) self.connect(self.glWidget.glWidget, QtCore.SIGNAL("drag_update_obj"), self.table_widget.set_data) self.mode_cbk = QtGui.QCheckBox("Drag mode", self) self.mode_cbk.stateChanged.connect(self.glWidget.glWidget.drag_mode) button_layout = QtGui.QHBoxLayout() button_layout.addWidget(self.mode_cbk) self.x_d = QtGui.QRadioButton("X", self) self.y_d = QtGui.QRadioButton("Y", self) self.z_d = QtGui.QRadioButton("Z", self) self.axis_group = QtGui.QButtonGroup(self) self.axis_group.addButton(self.x_d) button_layout.addWidget(self.x_d) self.axis_group.addButton(self.y_d) button_layout.addWidget(self.y_d) self.axis_group.addButton(self.z_d) button_layout.addWidget(self.z_d) radio_buttons = QtGui.QWidget(self) radio_buttons.setLayout(button_layout) self.axis_group.buttonClicked.connect(self.glWidget.glWidget.set_drag_direction) layout = QtGui.QGridLayout() layout.addWidget(self.glWidget, 0, 0) layout.addWidget(self.table_widget, 0, 1) # layout.addWidget(self.mode_cbk, 1, 0) layout.addWidget(radio_buttons, 1, 0) self.setLayout(layout)
class MainWindow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(960, 480) self.setWindowTitle("Scene editor") self.save_path = "./settings.json" self.object_list = self.load_object_list() if not self.object_list: self.object_list = { 1: {"Type": "Cube", "Position": "1,2,3", "Dimension": 0.1}, 2: {"Type": "Sphere", "Position": "-1,-2,-3", "Dimension": 0.2}, } self.glWidget = ObjectView(self) self.table_widget = ObjectTable(len(self.object_list), 4, self) self.connect( self.table_widget.selectionModel(), QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.select_obj, ) self.table_widget.itemChanged.connect(self.update_object) self.connect(self, QtCore.SIGNAL("table_update_obj"), self.glWidget.glWidget.updateGL) self.connect(self.glWidget.glWidget, QtCore.SIGNAL("drag_update_obj"), self.table_widget.set_data) self.mode_cbk = QtGui.QCheckBox("Drag mode", self) self.mode_cbk.stateChanged.connect(self.glWidget.glWidget.drag_mode) button_layout = QtGui.QHBoxLayout() button_layout.addWidget(self.mode_cbk) self.x_d = QtGui.QRadioButton("X", self) self.y_d = QtGui.QRadioButton("Y", self) self.z_d = QtGui.QRadioButton("Z", self) self.axis_group = QtGui.QButtonGroup(self) self.axis_group.addButton(self.x_d) button_layout.addWidget(self.x_d) self.axis_group.addButton(self.y_d) button_layout.addWidget(self.y_d) self.axis_group.addButton(self.z_d) button_layout.addWidget(self.z_d) radio_buttons = QtGui.QWidget(self) radio_buttons.setLayout(button_layout) self.axis_group.buttonClicked.connect(self.glWidget.glWidget.set_drag_direction) layout = QtGui.QGridLayout() layout.addWidget(self.glWidget, 0, 0) layout.addWidget(self.table_widget, 0, 1) # layout.addWidget(self.mode_cbk, 1, 0) layout.addWidget(radio_buttons, 1, 0) self.setLayout(layout) def select_obj(self, selected, deselected): for i in deselected.indexes(): if i.row() < len(self.object_list): self.object_list[i.row()].selected = False for i in selected.indexes(): if i.row() < len(self.object_list): self.object_list[i.row()].selected = True def update_object(self, item): if item.row() < len(self.object_list): i = item.row() if item.column() == 1: self.object_list[i].center = map(float, item.text().split(",")) if item.column() == 3: self.object_list[i].dimension = float(item.text()) self.emit(QtCore.SIGNAL("table_update_obj")) def closeEvent(self, event): self.save_object_list() # report_session() def load_object_list(self): try: with open(self.save_path, "rb") as infile: data = json.load(infile) data = byteify(data) ret = [] for i in range(1, len(data.values()) + 1): new_obj = SceneObject(data[str(i)]) ret.append(new_obj) return ret except IOError: return None def save_object_list(self): with open(self.save_path, "wb") as outfile: outdata = {} for i, obj in enumerate(self.object_list): outdata[i + 1] = { "Position": ",".join(map(str, obj.center)), "Type": obj.type, "Dimension": str(obj.dimension), } json.dump(outdata, outfile)