finalcif 140__tar.gz → 141__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. {finalcif-140 → finalcif-141}/PKG-INFO +1 -1
  2. finalcif-141/finalcif/__init__.py +2 -0
  3. {finalcif-140 → finalcif-141}/finalcif/appwindow.py +15 -8
  4. {finalcif-140 → finalcif-141}/finalcif/cif/cif_file_io.py +4 -0
  5. {finalcif-140 → finalcif-141}/finalcif/datafiles/p4p_reader.py +1 -1
  6. finalcif-141/finalcif/gui/block_combobox.py +35 -0
  7. {finalcif-140 → finalcif-141}/finalcif/gui/finalcif_gui_ui.py +2 -1
  8. {finalcif-140 → finalcif-141}/finalcif/gui/finalcif_gui_ui.ui +6 -1
  9. finalcif-140/finalcif/__init__.py +0 -2
  10. {finalcif-140 → finalcif-141}/.gitattributes +0 -0
  11. {finalcif-140 → finalcif-141}/.gitignore +0 -0
  12. {finalcif-140 → finalcif-141}/.run/Make Documentation MAC.run.xml +0 -0
  13. {finalcif-140 → finalcif-141}/.run/compile_ui_files.run.xml +0 -0
  14. {finalcif-140 → finalcif-141}/.run/make documentation Windows.run.xml +0 -0
  15. {finalcif-140 → finalcif-141}/CODE_OF_CONDUCT.md +0 -0
  16. {finalcif-140 → finalcif-141}/CONTRIBUTING.md +0 -0
  17. {finalcif-140 → finalcif-141}/Finalcif_installer_win.spec +0 -0
  18. {finalcif-140 → finalcif-141}/Finalcif_linux_onefile.spec +0 -0
  19. {finalcif-140 → finalcif-141}/Finalcif_mac.spec +0 -0
  20. {finalcif-140 → finalcif-141}/Hydrogen_solution_type.cif +0 -0
  21. {finalcif-140 → finalcif-141}/LICENSE +0 -0
  22. {finalcif-140 → finalcif-141}/README.md +0 -0
  23. {finalcif-140 → finalcif-141}/finalcif/app_path.py +0 -0
  24. {finalcif-140 → finalcif-141}/finalcif/cif/__init__.py +0 -0
  25. {finalcif-140 → finalcif-141}/finalcif/cif/all_cif_dicts.py +0 -0
  26. {finalcif-140 → finalcif-141}/finalcif/cif/atoms.py +0 -0
  27. {finalcif-140 → finalcif-141}/finalcif/cif/checkcif/__init__.py +0 -0
  28. {finalcif-140 → finalcif-141}/finalcif/cif/checkcif/checkcif.py +0 -0
  29. {finalcif-140 → finalcif-141}/finalcif/cif/cif_dict_foo.py +0 -0
  30. {finalcif-140 → finalcif-141}/finalcif/cif/cif_order.py +0 -0
  31. {finalcif-140 → finalcif-141}/finalcif/cif/cod/__init__.py +0 -0
  32. {finalcif-140 → finalcif-141}/finalcif/cif/cod/deposit.py +0 -0
  33. {finalcif-140 → finalcif-141}/finalcif/cif/cod/deposit_check.py +0 -0
  34. {finalcif-140 → finalcif-141}/finalcif/cif/cod/deposition_list.py +0 -0
  35. {finalcif-140 → finalcif-141}/finalcif/cif/cod/doi.py +0 -0
  36. {finalcif-140 → finalcif-141}/finalcif/cif/cod/upload.py +0 -0
  37. {finalcif-140 → finalcif-141}/finalcif/cif/cod/website_parser.py +0 -0
  38. {finalcif-140 → finalcif-141}/finalcif/cif/core_dict.py +0 -0
  39. {finalcif-140 → finalcif-141}/finalcif/cif/hkl.py +0 -0
  40. {finalcif-140 → finalcif-141}/finalcif/cif/modulation_dict.py +0 -0
  41. {finalcif-140 → finalcif-141}/finalcif/cif/powder_dict.py +0 -0
  42. {finalcif-140 → finalcif-141}/finalcif/cif/reference.py +0 -0
  43. {finalcif-140 → finalcif-141}/finalcif/cif/restraints_dict.py +0 -0
  44. {finalcif-140 → finalcif-141}/finalcif/cif/text.py +0 -0
  45. {finalcif-140 → finalcif-141}/finalcif/cif/twin_dict.py +0 -0
  46. {finalcif-140 → finalcif-141}/finalcif/datafiles/__init__.py +0 -0
  47. {finalcif-140 → finalcif-141}/finalcif/datafiles/bruker_data.py +0 -0
  48. {finalcif-140 → finalcif-141}/finalcif/datafiles/bruker_frame.py +0 -0
  49. {finalcif-140 → finalcif-141}/finalcif/datafiles/ccdc_mail.py +0 -0
  50. {finalcif-140 → finalcif-141}/finalcif/datafiles/data.py +0 -0
  51. {finalcif-140 → finalcif-141}/finalcif/datafiles/sadabs.py +0 -0
  52. {finalcif-140 → finalcif-141}/finalcif/datafiles/saint.py +0 -0
  53. {finalcif-140 → finalcif-141}/finalcif/datafiles/shelx_lst.py +0 -0
  54. {finalcif-140 → finalcif-141}/finalcif/datafiles/utils.py +0 -0
  55. {finalcif-140 → finalcif-141}/finalcif/displaymol/__init__.py +0 -0
  56. {finalcif-140 → finalcif-141}/finalcif/displaymol/molecule2D.py +0 -0
  57. {finalcif-140 → finalcif-141}/finalcif/displaymol/sdm.py +0 -0
  58. {finalcif-140 → finalcif-141}/finalcif/displaymol/vtk_molecule.py +0 -0
  59. {finalcif-140 → finalcif-141}/finalcif/equip_property/__init__.py +0 -0
  60. {finalcif-140 → finalcif-141}/finalcif/equip_property/author_loop_templates.py +0 -0
  61. {finalcif-140 → finalcif-141}/finalcif/equip_property/equipment.py +0 -0
  62. {finalcif-140 → finalcif-141}/finalcif/equip_property/properties.py +0 -0
  63. {finalcif-140 → finalcif-141}/finalcif/equip_property/tools.py +0 -0
  64. {finalcif-140 → finalcif-141}/finalcif/finalcif_start.py +0 -0
  65. {finalcif-140 → finalcif-141}/finalcif/gui/__init__.py +0 -0
  66. {finalcif-140 → finalcif-141}/finalcif/gui/combobox.py +0 -0
  67. {finalcif-140 → finalcif-141}/finalcif/gui/custom_classes.py +0 -0
  68. {finalcif-140 → finalcif-141}/finalcif/gui/dialogs.py +0 -0
  69. {finalcif-140 → finalcif-141}/finalcif/gui/edit_button.py +0 -0
  70. {finalcif-140 → finalcif-141}/finalcif/gui/equipmenttable.py +0 -0
  71. {finalcif-140 → finalcif-141}/finalcif/gui/file_editor.py +0 -0
  72. {finalcif-140 → finalcif-141}/finalcif/gui/import_selector.py +0 -0
  73. {finalcif-140 → finalcif-141}/finalcif/gui/import_selector_ui.py +0 -0
  74. {finalcif-140 → finalcif-141}/finalcif/gui/import_selector_ui.ui +0 -0
  75. {finalcif-140 → finalcif-141}/finalcif/gui/loop_creator.py +0 -0
  76. {finalcif-140 → finalcif-141}/finalcif/gui/loop_creator_ui.py +0 -0
  77. {finalcif-140 → finalcif-141}/finalcif/gui/loop_creator_ui.ui +0 -0
  78. {finalcif-140 → finalcif-141}/finalcif/gui/loops.py +0 -0
  79. {finalcif-140 → finalcif-141}/finalcif/gui/mainstackwidget.py +0 -0
  80. {finalcif-140 → finalcif-141}/finalcif/gui/mixins.py +0 -0
  81. {finalcif-140 → finalcif-141}/finalcif/gui/new_key_dialog.py +0 -0
  82. {finalcif-140 → finalcif-141}/finalcif/gui/new_key_dialog_ui.py +0 -0
  83. {finalcif-140 → finalcif-141}/finalcif/gui/new_key_dialog_ui.ui +0 -0
  84. {finalcif-140 → finalcif-141}/finalcif/gui/plaintextedit.py +0 -0
  85. {finalcif-140 → finalcif-141}/finalcif/gui/playground.py +0 -0
  86. {finalcif-140 → finalcif-141}/finalcif/gui/propertytable.py +0 -0
  87. {finalcif-140 → finalcif-141}/finalcif/gui/spell_check_edit.py +0 -0
  88. {finalcif-140 → finalcif-141}/finalcif/gui/text_templates_ui.py +0 -0
  89. {finalcif-140 → finalcif-141}/finalcif/gui/text_templates_ui.ui +0 -0
  90. {finalcif-140 → finalcif-141}/finalcif/gui/text_value_editor.py +0 -0
  91. {finalcif-140 → finalcif-141}/finalcif/gui/validators.py +0 -0
  92. {finalcif-140 → finalcif-141}/finalcif/gui/vrf_classes.py +0 -0
  93. {finalcif-140 → finalcif-141}/finalcif/icon/__init__.py +0 -0
  94. {finalcif-140 → finalcif-141}/finalcif/icon/finalcif.png +0 -0
  95. {finalcif-140 → finalcif-141}/finalcif/icon/finalcif2.ico +0 -0
  96. {finalcif-140 → finalcif-141}/finalcif/icon/finalcif2.png +0 -0
  97. {finalcif-140 → finalcif-141}/finalcif/icon/multitable.ico +0 -0
  98. {finalcif-140 → finalcif-141}/finalcif/icon/multitable.png +0 -0
  99. {finalcif-140 → finalcif-141}/finalcif/icon/multitable.xcf +0 -0
  100. {finalcif-140 → finalcif-141}/finalcif/report/__init__.py +0 -0
  101. {finalcif-140 → finalcif-141}/finalcif/report/archive_report.py +0 -0
  102. {finalcif-140 → finalcif-141}/finalcif/report/gui/__init__.py +0 -0
  103. {finalcif-140 → finalcif-141}/finalcif/report/gui/mainwindow.py +0 -0
  104. {finalcif-140 → finalcif-141}/finalcif/report/gui/mainwindow.ui +0 -0
  105. {finalcif-140 → finalcif-141}/finalcif/report/mtools.py +0 -0
  106. {finalcif-140 → finalcif-141}/finalcif/report/references.py +0 -0
  107. {finalcif-140 → finalcif-141}/finalcif/report/report_text.py +0 -0
  108. {finalcif-140 → finalcif-141}/finalcif/report/symm.py +0 -0
  109. {finalcif-140 → finalcif-141}/finalcif/report/tables.py +0 -0
  110. {finalcif-140 → finalcif-141}/finalcif/report/templated_report.py +0 -0
  111. {finalcif-140 → finalcif-141}/finalcif/template/__init__.py +0 -0
  112. {finalcif-140 → finalcif-141}/finalcif/template/bootstrap/bootstrap.min.css +0 -0
  113. {finalcif-140 → finalcif-141}/finalcif/template/machines/D8_VENTURE.cif +0 -0
  114. {finalcif-140 → finalcif-141}/finalcif/template/mathml2omml.xsl +0 -0
  115. {finalcif-140 → finalcif-141}/finalcif/template/report.tmpl +0 -0
  116. {finalcif-140 → finalcif-141}/finalcif/template/template1.docx +0 -0
  117. {finalcif-140 → finalcif-141}/finalcif/template/template_for_multitable.docx +0 -0
  118. {finalcif-140 → finalcif-141}/finalcif/template/template_text.docx +0 -0
  119. {finalcif-140 → finalcif-141}/finalcif/template/template_without_text.docx +0 -0
  120. {finalcif-140 → finalcif-141}/finalcif/template/templates.py +0 -0
  121. {finalcif-140 → finalcif-141}/finalcif/template/xsl/convert.py +0 -0
  122. {finalcif-140 → finalcif-141}/finalcif/template/xsl/xmltohtml.xsl +0 -0
  123. {finalcif-140 → finalcif-141}/finalcif/tools/__init__.py +0 -0
  124. {finalcif-140 → finalcif-141}/finalcif/tools/chemparse.py +0 -0
  125. {finalcif-140 → finalcif-141}/finalcif/tools/download.py +0 -0
  126. {finalcif-140 → finalcif-141}/finalcif/tools/dsrmath.py +0 -0
  127. {finalcif-140 → finalcif-141}/finalcif/tools/misc.py +0 -0
  128. {finalcif-140 → finalcif-141}/finalcif/tools/options.py +0 -0
  129. {finalcif-140 → finalcif-141}/finalcif/tools/platon.py +0 -0
  130. {finalcif-140 → finalcif-141}/finalcif/tools/pupdate.py +0 -0
  131. {finalcif-140 → finalcif-141}/finalcif/tools/settings.py +0 -0
  132. {finalcif-140 → finalcif-141}/finalcif/tools/shred.py +0 -0
  133. {finalcif-140 → finalcif-141}/finalcif/tools/space_groups.py +0 -0
  134. {finalcif-140 → finalcif-141}/finalcif/tools/spgr_format.py +0 -0
  135. {finalcif-140 → finalcif-141}/finalcif/tools/statusbar.py +0 -0
  136. {finalcif-140 → finalcif-141}/finalcif/tools/sumformula.py +0 -0
  137. {finalcif-140 → finalcif-141}/finalcif.exe +0 -0
  138. {finalcif-140 → finalcif-141}/install_requirements +0 -0
  139. {finalcif-140 → finalcif-141}/install_requirements.bat +0 -0
  140. {finalcif-140 → finalcif-141}/pyproject.toml +0 -0
  141. {finalcif-140 → finalcif-141}/requirements.txt +0 -0
  142. {finalcif-140 → finalcif-141}/requirements_devel.txt +0 -0
  143. {finalcif-140 → finalcif-141}/requirements_doku.txt +0 -0
  144. {finalcif-140 → finalcif-141}/run_finalcif +0 -0
  145. {finalcif-140 → finalcif-141}/run_finalcif.bat +0 -0
  146. {finalcif-140 → finalcif-141}/screenshots/finalcif_checkcif.png +0 -0
  147. {finalcif-140 → finalcif-141}/screenshots/finalcif_details.png +0 -0
  148. {finalcif-140 → finalcif-141}/screenshots/finalcif_loops.png +0 -0
  149. {finalcif-140 → finalcif-141}/screenshots/finalcif_loops2.png +0 -0
  150. {finalcif-140 → finalcif-141}/screenshots/finalcif_main.png +0 -0
  151. {finalcif-140 → finalcif-141}/screenshots/finalcif_report.png +0 -0
  152. {finalcif-140 → finalcif-141}/screenshots/finalcif_responses.png +0 -0
  153. {finalcif-140 → finalcif-141}/update.exe +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: finalcif
3
- Version: 140
3
+ Version: 141
4
4
  Summary: CIF file editor
5
5
  Project-URL: Homepage, https://dkratzert.de/finalcif.html
6
6
  Project-URL: Bug Tracker, https://github.com/dkratzert/FinalCif/issues
@@ -0,0 +1,2 @@
1
+
2
+ VERSION = 141
@@ -302,6 +302,7 @@ class AppWindow(QMainWindow):
302
302
  this method connects all signals to slots. Only a few mighjt be defined elsewere.
303
303
  """
304
304
  self.ui.datanameComboBox.currentIndexChanged.connect(self._load_block)
305
+ self.ui.datanameComboBox.delete_signal.connect(self._delete_current_block)
305
306
  ## main
306
307
  self.ui.BackPushButton.clicked.connect(self.back_to_main)
307
308
  self.ui.BackFromDepositPushButton.clicked.connect(self.back_to_main)
@@ -1566,6 +1567,11 @@ class AppWindow(QMainWindow):
1566
1567
  t = QtCore.QTimer(self)
1567
1568
  t.singleShot(1000, self.check_cecksums)
1568
1569
 
1570
+ def _delete_current_block(self, index):
1571
+ self.cif.delete_block(index)
1572
+ self.add_data_names_to_combobox()
1573
+ self.ui.datanameComboBox.setCurrentIndex(0)
1574
+
1569
1575
  def set_vertical_header_width(self):
1570
1576
  """
1571
1577
  Sets the width of the vertical header to the length of the longest string in the list.
@@ -1604,8 +1610,6 @@ class AppWindow(QMainWindow):
1604
1610
  self.ui.ShredCifButton.setDisabled(True)
1605
1611
 
1606
1612
  def append_cif(self, cif_file: Path):
1607
- self.cif.save()
1608
- self.load_cif_file(filepath=self.cif.finalcif_file, load_changes=False)
1609
1613
  if not cif_file:
1610
1614
  cif_file = self.get_file_from_dialog()
1611
1615
  if not cif_file:
@@ -1613,11 +1617,14 @@ class AppWindow(QMainWindow):
1613
1617
  cif2 = CifContainer(cif_file)
1614
1618
  if cif2.is_multi_cif:
1615
1619
  show_general_warning(self, 'Can add single data CIFs only!')
1620
+ return
1616
1621
  if cif2.block.name in [x.name for x in self.cif.doc]:
1617
1622
  show_general_warning(self, warn_text='Duplicate block',
1618
- info_text=f'Data block name "<b>{self.cif.block.name}</b>" '
1623
+ info_text=f'Data block name "<b>{cif2.block.name}</b>" '
1619
1624
  f'already present in current CIF!')
1620
1625
  return
1626
+ self.cif.save()
1627
+ self.load_cif_file(filepath=self.cif.finalcif_file, load_changes=False)
1621
1628
  self.cif.doc.add_copied_block(block=cif2.block, pos=-1)
1622
1629
  self.cif.save()
1623
1630
  self.load_cif_file(filepath=self.cif.fileobj, load_changes=False)
@@ -1808,11 +1815,11 @@ class AppWindow(QMainWindow):
1808
1815
  # Add the CCDC number in case we have a deposition mail lying around:
1809
1816
  self.add_ccdc_number()
1810
1817
  if self.cif.shx and self.cif.shx.abin and not self.cif['_platon_squeeze_void_probe_radius']:
1811
- show_general_warning(self, f"A SQUEEZE refinement was detected.\n"
1812
- f"Please import the "
1813
- f"corresponding .sqf file from PLATON and\n"
1814
- f"complete the _platon_squeeze_void_content information"
1815
- f"in the 'Platon SQUEEZE voids' loop.")
1818
+ show_general_warning(self, "A SQUEEZE refinement was detected.\n"
1819
+ "Please import the "
1820
+ "corresponding .sqf file from PLATON and\n"
1821
+ "complete the _platon_squeeze_void_content information"
1822
+ "in the 'Platon SQUEEZE voids' loop.")
1816
1823
  vheadlist = []
1817
1824
  for row_number in range(self.ui.cif_main_table.model().rowCount()):
1818
1825
  vheadlist.append(self.ui.cif_main_table.model().headerData(row_number, QtCore.Qt.Vertical))
@@ -126,6 +126,10 @@ class CifContainer():
126
126
  self.current_block = self.block.name
127
127
  self._on_load()
128
128
 
129
+ def delete_block(self, index: int) -> None:
130
+ del self.doc[index]
131
+ self.block: gemmi.cif.Block = self.doc[0]
132
+
129
133
  def _on_load(self) -> None:
130
134
  # will not ok with non-ascii characters in the res file:
131
135
  self.chars_ok = True
@@ -104,7 +104,7 @@ class P4PFile():
104
104
  self.crystal_size = spline[1:4]
105
105
  try:
106
106
  # in Kelvin:
107
- self._temperature = float(spline[-1]) + 273.15
107
+ self._temperature = round(float(spline[-1]) + 273.15, 6)
108
108
  except ValueError:
109
109
  pass
110
110
 
@@ -0,0 +1,35 @@
1
+ from PyQt5 import QtWidgets, QtCore
2
+
3
+
4
+ class ComboBoxWithContextMenu(QtWidgets.QComboBox):
5
+ delete_signal = QtCore.pyqtSignal(int)
6
+
7
+ def __init__(self, parent=None):
8
+ super().__init__(parent)
9
+
10
+ def contextMenuEvent(self, event):
11
+ context_menu = QtWidgets.QMenu(self)
12
+ delete_action = context_menu.addAction(f"Delete block '{self.currentText()}'")
13
+ action = context_menu.exec_(self.mapToGlobal(event.pos()))
14
+ if action == delete_action and self.count() > 1:
15
+ self.delete_signal.emit(self.currentIndex())
16
+
17
+
18
+ def delete_block(index):
19
+ # For testing only
20
+ print(f"Block with index {index} was deleted.")
21
+
22
+
23
+ if __name__ == "__main__":
24
+ app = QtWidgets.QApplication([])
25
+ window = QtWidgets.QWidget()
26
+ layout = QtWidgets.QVBoxLayout(window)
27
+
28
+ combo_box = ComboBoxWithContextMenu()
29
+ combo_box.addItems(["Item 1", "Item 2", "Item 3"])
30
+ layout.addWidget(combo_box)
31
+
32
+ combo_box.delete_signal.connect(delete_block)
33
+
34
+ window.show()
35
+ app.exec_()
@@ -1741,7 +1741,7 @@ class Ui_FinalCifWindow(object):
1741
1741
  self.verticalLayout_33.setObjectName("verticalLayout_33")
1742
1742
  self.MainStackedWidget.addWidget(self.page_textTemplate)
1743
1743
  self.gridLayout_6.addWidget(self.MainStackedWidget, 2, 0, 1, 13)
1744
- self.datanameComboBox = QtWidgets.QComboBox(self.CifDataItemsFrame)
1744
+ self.datanameComboBox = ComboBoxWithContextMenu(self.CifDataItemsFrame)
1745
1745
  self.datanameComboBox.setEditable(True)
1746
1746
  self.datanameComboBox.setMaxVisibleItems(20)
1747
1747
  self.datanameComboBox.setInsertPolicy(QtWidgets.QComboBox.InsertAtCurrent)
@@ -2181,6 +2181,7 @@ class Ui_FinalCifWindow(object):
2181
2181
  self.SumFormMainLabel.setText(_translate("FinalCifWindow", "Sum Formula"))
2182
2182
  self.appendCifPushButton.setText(_translate("FinalCifWindow", "Append CIF"))
2183
2183
  from finalcif.displaymol.molecule2D import MoleculeWidget
2184
+ from finalcif.gui.block_combobox import ComboBoxWithContextMenu
2184
2185
  from finalcif.gui.custom_classes import MyCifTable
2185
2186
  from finalcif.gui.equipmenttable import MyEQTableWidget
2186
2187
  from finalcif.gui.file_editor import QCodeEditor
@@ -4082,7 +4082,7 @@ please add a publication author:</string>
4082
4082
  </widget>
4083
4083
  </item>
4084
4084
  <item row="0" column="1">
4085
- <widget class="QComboBox" name="datanameComboBox">
4085
+ <widget class="ComboBoxWithContextMenu" name="datanameComboBox">
4086
4086
  <property name="editable">
4087
4087
  <bool>true</bool>
4088
4088
  </property>
@@ -4294,6 +4294,11 @@ please add a publication author:</string>
4294
4294
  <extends>QPlainTextEdit</extends>
4295
4295
  <header>finalcif.gui.file_editor.h</header>
4296
4296
  </customwidget>
4297
+ <customwidget>
4298
+ <class>ComboBoxWithContextMenu</class>
4299
+ <extends>QComboBox</extends>
4300
+ <header>finalcif.gui.block_combobox.h</header>
4301
+ </customwidget>
4297
4302
  </customwidgets>
4298
4303
  <tabstops>
4299
4304
  <tabstop>publishedDepositionRadioButton</tabstop>
@@ -1,2 +0,0 @@
1
-
2
- VERSION = 140
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes