class ColorMapEditor(QDialog): def __init__(self, genie): super(ColorMapEditor, self).__init__() self.setWindowTitle("Colormap Presets") self.resize(640, 480) self.genie = genie layout = QVBoxLayout() self.list = QListWidget() layout.addWidget(self.list) for filename in glob.glob( os.path.realpath(os.path.join(genie.COLORMAPS_DIR, "*.json"))): self.add_preset(filename, user_defined=False) for filename in glob.glob( os.path.join(self.genie.cfg.current_project_dir, "color_maps", "*.json")): self.add_preset(filename, 0, user_defined=True) self.list.item(0).setSelected(True) buttons = QDialogButtonBox(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) import_button = QPushButton("Import...") buttons.addButton(import_button, QDialogButtonBox.ActionRole) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) import_button.clicked.connect(self.import_preset) layout.addWidget(buttons) self.setLayout(layout) self.list.focusWidget() def set_new_lut(self, lut): colormap_item = self.list.selectedItems()[0] colormap_widget = self.list.itemWidget(colormap_item) new_lut = colormap_widget.make_new_lut(lut) lut.DeepCopy(new_lut) if colormap_widget.user_defined: #user defined color map filename = os.path.relpath(colormap_widget.color_data_filename, self.genie.cfg.current_project_dir) else: #default color maps filename = os.path.relpath(colormap_widget.color_data_filename, self.genie.COLORMAPS_DIR) self.genie.current_inversion_cfg.colormap_file = os.path.normpath( filename) def add_preset(self, abs_filename, index=None, user_defined=False): widget = ColorMapPreset(abs_filename, user_defined) names = [ self.list.itemWidget(self.list.item(index)).name.text() for index in range(self.list.count()) ] name_extension = 1 original_name = widget.name.text() while widget.name.text() in names: widget.name.setText(original_name + f"_{name_extension}") name_extension += 1 item = QListWidgetItem() self.list.insertItem(index if index is not None else self.list.count(), item) item.setSizeHint(widget.sizeHint()) self.list.setItemWidget(item, widget) return widget def import_preset(self): filename = QFileDialog.getOpenFileName( self, "Import Colormap", self.genie.cfg.last_colormap_dir, "Colormap file (*.json)")[0] if filename: self.genie.cfg.last_colormap_dir = os.path.dirname(filename) colormap_dir = os.path.join(self.genie.cfg.current_project_dir, "color_maps") Path(colormap_dir).mkdir(parents=True, exist_ok=True) dest_file = os.path.join(colormap_dir, os.path.split(filename)[1]) index = 1 while os.path.exists(dest_file): root, ext = os.path.splitext(dest_file) dest_file = root + f"_{index}" + ext index += 1 copyfile(filename, dest_file) self.add_preset(os.path.relpath(dest_file), 0, user_defined=True)