Source code for qtdraw.multipie.dialog_modulation

"""
Modulation dialog.

This module provides a dialog for modulation dialog.
"""

import copy
from PySide6.QtWidgets import QWidget, QDialog, QDialogButtonBox
from gcoreutils.nsarray import NSArray
from qtdraw.widget.custom_widget import Layout, Button
from qtdraw.multipie.plugin_multipie_setting import modulation_panel
from qtdraw.widget.group_model import GroupModel
from qtdraw.widget.group_view import GroupView
from qtdraw.multipie.util import parse_modulation_list


# ==================================================
[docs] class ModulationDialog(QDialog): # ================================================== def __init__(self, widget, basis, modulation, head, is_orbital=False, parent=None): """ Modulation dialog. Args: widget (PyVistaWidget): widget. basis (list): valid basis list. modulation (str): modulation list. head (str): multipole type. is_orbital (bool, optional): orbital plot ? parent (QWidget, optional): parent. """ super().__init__(parent) title = "Modulation" if is_orbital: title += " - " + "orbital" else: title += " - " + "vector" self.setWindowTitle(title) self.resize(600, 300) self.widget = widget self.basis = basis self.head = head self.is_orbital = is_orbital self.widget.save_current() data = parse_modulation_list(modulation) panel = self.create_panel(data, self) layout = Layout(self) layout.addWidget(panel, 0, 0, 1, 1) self.show() # ==================================================
[docs] def create_panel(self, data, parent): """ Create panel. Args: data (list): modulation data. parent (QWidget): parent. Returns: - (QWidget) -- panel widget. """ panel = QWidget(parent) layout = Layout(panel) layout.setContentsMargins(10, 10, 10, 10) layout.setSpacing(5) # modulation view. mod_panel = copy.deepcopy(modulation_panel) mod_panel["basis"] = ("combo", self.basis, self.basis[0]) model = GroupModel("modulation", mod_panel, self.widget) model.set_data(data) self.view = GroupView(model, parent) self.view.customContextMenuRequested.disconnect() self.view.update_widget(force=True) # buttons. button_add = Button(parent, "add") button_remove = Button(parent, "remove") # button. button = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Apply) button.accepted.connect(self.accept) button.rejected.connect(self.reject) button.button(QDialogButtonBox.Apply).clicked.connect(self.apply) # main layout. layout.addWidget(self.view, 0, 0, 1, 4) layout.addWidget(button_add, 1, 0, 1, 2) layout.addWidget(button_remove, 1, 2, 1, 2) layout.addWidget(button, 2, 0, 1, 4) # connections. button_add.clicked.connect(self.add_data) button_remove.clicked.connect(self.remove_data) return panel
# ==================================================
[docs] def get_raw_data(self): """ Get raw modulation list. Returns: - (list) -- modulation list. """ data = self.view.model().tolist() if len(data) < 1: return None data = [i[1:] for i in data] return data
# ==================================================
[docs] def add_modulation(self): """ Add modulation. """ ilower = self.parent().plugin._pvw._status["plus"]["ilower"] dims = self.parent().plugin._pvw._status["plus"]["dims"] data = self.get_raw_data() if data is None: return self.widget.set_repeat(False) v = NSArray.vector3d() samb_type = "orbital" if self.is_orbital else "vector" obj, igrid = self.parent().plugin.create_samb_modulation(samb_type, v, self.head, data, dims, ilower) if self.is_orbital: self.parent().plugin._pvw._data["orbital"].block_update_widget(True) self.parent().plugin.add_orbital_modulation(obj, igrid, self.head) self.parent().plugin._pvw._data["orbital"].block_update_widget(False) else: self.parent().plugin._pvw._data["vector"].block_update_widget(True) self.parent().plugin.add_vector_modulation(obj, igrid, self.head, v) self.parent().plugin._pvw._data["vector"].block_update_widget(False)
# ==================================================
[docs] def add_data(self): """ Add data in panel. """ row_data = copy.deepcopy(self.view.model().column_default) n = self.view.model().rowCount() row_data[0] = str(n) self.view.model().append_row(row_data)
# ==================================================
[docs] def remove_data(self): """ Remove data in panel. """ index = self.view.selectedIndexes() if len(index) != 0: self.view.model().remove_row(index[0]) data = self.view.model().tolist() for row in range(len(data)): data[row][0] = str(row) self.view.model().clear_data() self.view.model().set_data(data)
# ==================================================
[docs] def accept(self): """ Accept input. """ data = self.get_raw_data() if data is not None: data = str(data).replace("'", "") if self.is_orbital: self.parent().basis_edit_orbital_modulation.setText(data) else: self.parent().basis_edit_vector_modulation.setText(data) self.widget.restore() self.add_modulation() self.close() super().accept()
# ==================================================
[docs] def reject(self): """ Reject input. """ self.widget.restore() self.close() super().reject()
# ==================================================
[docs] def apply(self, button): """ Apply input. """ self.widget.restore() self.add_modulation()
# ==================================================
[docs] def close(self): """ Close. """ super().reject()