Пример #1
0
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)