FEM: Data extraction code version conflicts resolved: PySide, mpl, VTK
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>259</width>
|
||||
<width>279</width>
|
||||
<height>38</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -27,7 +27,14 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="Name"/>
|
||||
<widget class="QLineEdit" name="Name">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
|
||||
@@ -172,7 +172,9 @@ class _ElideToolButton(QtGui.QToolButton):
|
||||
|
||||
def sizeHint(self):
|
||||
button_size = super().sizeHint()
|
||||
return QtCore.QSize(self.iconSize().width()+10, button_size.height())
|
||||
icn_size = self.iconSize()
|
||||
min_margin = max((button_size - icn_size).height(), 6)
|
||||
return QtCore.QSize(self.iconSize().width()+10, icn_size.height() + min_margin)
|
||||
|
||||
def paintEvent(self, event):
|
||||
|
||||
@@ -186,17 +188,39 @@ class _ElideToolButton(QtGui.QToolButton):
|
||||
painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform, True)
|
||||
|
||||
margin = (self.height() - self.iconSize().height()) / 2
|
||||
match type(self._icon):
|
||||
case QtGui.QPixmap:
|
||||
painter.drawPixmap(margin, margin, self._icon.scaled(self.iconSize()))
|
||||
case QtGui.QIcon:
|
||||
self._icon.paint(painter, QtCore.QRect(QtCore.QPoint(margin, margin), self.iconSize()))
|
||||
icn_width = self.iconSize().width()
|
||||
if self._icon.isNull():
|
||||
icn_width = 0;
|
||||
|
||||
|
||||
fm = self.fontMetrics()
|
||||
text_size = self.width() - self.iconSize().width() - 3*margin
|
||||
text = fm.elidedText(self._text, QtGui.Qt.ElideMiddle, text_size)
|
||||
if text:
|
||||
painter.drawText(2*margin+self.iconSize().width(), margin + fm.ascent(), text)
|
||||
txt_size = self.width() - icn_width - 2*margin
|
||||
if not self._icon.isNull():
|
||||
# we add the margin between icon and text
|
||||
txt_size -= margin
|
||||
|
||||
txt_min = fm.boundingRect("...").width()
|
||||
|
||||
# should we center the icon?
|
||||
xpos = margin
|
||||
if not self._icon.isNull() and txt_size < txt_min:
|
||||
# center icon
|
||||
xpos = self.width()/2 - self.iconSize().width()/2
|
||||
|
||||
if not self._icon.isNull():
|
||||
match type(self._icon):
|
||||
case QtGui.QPixmap:
|
||||
painter.drawPixmap(xpos, margin, self._icon.scaled(self.iconSize()))
|
||||
xpos += self.iconSize().width()
|
||||
case QtGui.QIcon:
|
||||
self._icon.paint(painter, QtCore.QRect(QtCore.QPoint(margin, margin), self.iconSize()))
|
||||
xpos += self.iconSize().width()
|
||||
|
||||
xpos += margin # the margin to the text
|
||||
|
||||
if txt_size >= txt_min:
|
||||
text = fm.elidedText(self._text, QtGui.Qt.ElideMiddle, txt_size)
|
||||
painter.drawText(xpos, margin + fm.ascent(), text)
|
||||
|
||||
painter.end()
|
||||
|
||||
@@ -234,7 +258,6 @@ class _TreeChoiceButton(QtGui.QToolButton):
|
||||
|
||||
QtCore.Slot(QtCore.QModelIndex)
|
||||
def selectIndex(self, index):
|
||||
print("select triggered")
|
||||
item = self.model.itemFromIndex(index)
|
||||
|
||||
if item and not item.hasChildren():
|
||||
@@ -251,13 +274,14 @@ class _TreeChoiceButton(QtGui.QToolButton):
|
||||
# check if we should be disabled
|
||||
self.setEnabled(bool(model.rowCount()))
|
||||
|
||||
class _SettingsPopup(QtGui.QDialog):
|
||||
class _SettingsPopup(QtGui.QMenu):
|
||||
|
||||
close = QtCore.Signal()
|
||||
|
||||
def __init__(self, setting, parent):
|
||||
super().__init__(parent)
|
||||
|
||||
self._setting = setting
|
||||
self.setWindowFlags(QtGui.Qt.Popup)
|
||||
self.setFocusPolicy(QtGui.Qt.ClickFocus)
|
||||
|
||||
@@ -277,6 +301,9 @@ class _SettingsPopup(QtGui.QDialog):
|
||||
vbox2.addWidget(widget)
|
||||
self.setLayout(vbox2)
|
||||
|
||||
def size(self):
|
||||
return self._setting.sizeHint()
|
||||
|
||||
def showEvent(self, event):
|
||||
# required to get keyboard events
|
||||
self.setFocus()
|
||||
@@ -309,16 +336,15 @@ class _SummaryWidget(QtGui.QWidget):
|
||||
# build the UI
|
||||
hbox = QtGui.QHBoxLayout()
|
||||
hbox.setContentsMargins(6,0,6,0)
|
||||
hbox.setSpacing(5)
|
||||
hbox.setSpacing(2)
|
||||
|
||||
self.extrButton = self._button(extractor.ViewObject.Icon, extr_label)
|
||||
self.viewButton = self._button(extr_repr[0], extr_repr[1], 1)
|
||||
if not extr_repr[0].isNull():
|
||||
size = self.viewButton.iconSize()
|
||||
size.setWidth(size.width()*2)
|
||||
self.viewButton.setIconSize(size)
|
||||
else:
|
||||
self.viewButton.setIconSize(QtCore.QSize(0,0))
|
||||
|
||||
size = self.viewButton.iconSize()
|
||||
size.setWidth(size.width()*2)
|
||||
self.viewButton.setIconSize(size)
|
||||
|
||||
|
||||
if st_object:
|
||||
self.stButton = self._button(st_object.ViewObject.Icon, st_object.Label)
|
||||
@@ -406,7 +432,7 @@ class _SummaryWidget(QtGui.QWidget):
|
||||
scroll = viewport.parent()
|
||||
|
||||
top_left = summary.geometry().topLeft() + base_widget.geometry().topLeft() + viewport.geometry().topLeft()
|
||||
delta = (summary.width() - dialog.sizeHint().width())/2
|
||||
delta = (summary.width() - dialog.size().width())/2
|
||||
local_point = QtCore.QPoint(top_left.x()+delta, top_left.y()+summary.height())
|
||||
global_point = scroll.mapToGlobal(local_point)
|
||||
|
||||
@@ -423,7 +449,6 @@ class _SummaryWidget(QtGui.QWidget):
|
||||
# position correctly and show
|
||||
self._position_dialog(self.appDialog)
|
||||
self.appDialog.show()
|
||||
#self.appDialog.raise_()
|
||||
|
||||
@QtCore.Slot()
|
||||
def editView(self):
|
||||
@@ -437,7 +462,6 @@ class _SummaryWidget(QtGui.QWidget):
|
||||
# position correctly and show
|
||||
self._position_dialog(self.viewDialog)
|
||||
self.viewDialog.show()
|
||||
#self.viewDialog.raise_()
|
||||
|
||||
@QtCore.Slot()
|
||||
def deleteTriggered(self):
|
||||
@@ -457,7 +481,7 @@ class _SummaryWidget(QtGui.QWidget):
|
||||
|
||||
# update the preview
|
||||
extr_label = self._extractor.Proxy.get_representive_fieldname(self._extractor)
|
||||
self.extrButton.setCustomText = extr_label
|
||||
self.extrButton.setCustomText(extr_label)
|
||||
self.extrButton.setToolTip(extr_label)
|
||||
|
||||
|
||||
@@ -574,7 +598,7 @@ class ExtractLinkView(QtGui.QWidget):
|
||||
|
||||
# fill the scroll area
|
||||
vbox = self._scroll_widget.layout()
|
||||
for widget in self._widgets:
|
||||
for widget in reversed(self._widgets):
|
||||
vbox.insertWidget(0, widget)
|
||||
|
||||
# also reset the add button model
|
||||
|
||||
@@ -40,6 +40,7 @@ from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
import io
|
||||
import numpy as np
|
||||
import matplotlib as mpl
|
||||
from packaging.version import Version
|
||||
|
||||
from vtkmodules.numpy_interface.dataset_adapter import VTKArray
|
||||
|
||||
@@ -104,6 +105,7 @@ class EditViewWidget(QtGui.QWidget):
|
||||
|
||||
action = QtGui.QWidgetAction(button)
|
||||
diag = QtGui.QColorDialog(barColor, parent=button)
|
||||
diag.setOption(QtGui.QColorDialog.DontUseNativeDialog, True)
|
||||
diag.accepted.connect(action.trigger)
|
||||
diag.rejected.connect(action.trigger)
|
||||
diag.colorSelected.connect(callback)
|
||||
@@ -512,7 +514,7 @@ class VPPostHistogram(view_base_fempostvisualization.VPPostVisualization):
|
||||
|
||||
# we do not iterate the table, but iterate the children. This makes it possible
|
||||
# to attribute the correct styles
|
||||
full_args = {}
|
||||
full_args = []
|
||||
full_data = []
|
||||
labels = []
|
||||
for child in self.Object.Group:
|
||||
@@ -526,15 +528,14 @@ class VPPostHistogram(view_base_fempostvisualization.VPPostVisualization):
|
||||
for i in range(table.GetNumberOfColumns()):
|
||||
|
||||
# add the kw args, with some slide change over color for multiple frames
|
||||
args = kwargs.copy()
|
||||
for key in kwargs:
|
||||
if not (key in full_args):
|
||||
full_args[key] = []
|
||||
|
||||
if "color" in key:
|
||||
value = np.array(kwargs[key])*color_factor[i]
|
||||
full_args[key].append(mpl.colors.to_hex(value))
|
||||
else:
|
||||
full_args[key].append(kwargs[key])
|
||||
args[key] = mpl.colors.to_hex(value)
|
||||
|
||||
full_args.append(args)
|
||||
|
||||
data = VTKArray(table.GetColumn(i))
|
||||
full_data.append(data)
|
||||
@@ -552,15 +553,26 @@ class VPPostHistogram(view_base_fempostvisualization.VPPostVisualization):
|
||||
legend_prefix = child.Source.Label + ": "
|
||||
labels.append(legend_prefix + table.GetColumnName(i))
|
||||
|
||||
args = {}
|
||||
args["rwidth"] = self.ViewObject.BarWidth
|
||||
args["cumulative"] = self.ViewObject.Cumulative
|
||||
args["histtype"] = self.ViewObject.Type
|
||||
args["label"] = labels
|
||||
if Version(mpl.__version__) >= Version("3.10.0"):
|
||||
args["hatch_linewidth"] = self.ViewObject.HatchLineWidth
|
||||
|
||||
full_args["hatch_linewidth"] = self.ViewObject.HatchLineWidth
|
||||
full_args["rwidth"] = self.ViewObject.BarWidth
|
||||
full_args["cumulative"] = self.ViewObject.Cumulative
|
||||
full_args["histtype"] = self.ViewObject.Type
|
||||
full_args["label"] = labels
|
||||
n, b, patches = self._plot.axes.hist(full_data, bins, **args)
|
||||
|
||||
self._plot.axes.hist(full_data, bins, **full_args)
|
||||
# set the patches view properties.
|
||||
if len(full_args) == 1:
|
||||
for patch in patches:
|
||||
patch.set(**full_args[0])
|
||||
elif len(full_args) > 1:
|
||||
for i, args in enumerate(full_args):
|
||||
for patch in patches[i]:
|
||||
patch.set(**full_args[i])
|
||||
|
||||
# axes decoration
|
||||
if self.ViewObject.Title:
|
||||
self._plot.axes.set_title(self.ViewObject.Title)
|
||||
if self.ViewObject.XLabel:
|
||||
|
||||
@@ -102,6 +102,7 @@ class EditViewWidget(QtGui.QWidget):
|
||||
|
||||
action = QtGui.QWidgetAction(button)
|
||||
diag = QtGui.QColorDialog(barColor, parent=button)
|
||||
diag.setOption(QtGui.QColorDialog.DontUseNativeDialog, True)
|
||||
diag.accepted.connect(action.trigger)
|
||||
diag.rejected.connect(action.trigger)
|
||||
diag.colorSelected.connect(callback)
|
||||
|
||||
@@ -207,7 +207,7 @@ class VPPostTableFieldData(view_base_fempostextractors.VPPostExtractor):
|
||||
return EditViewWidget(self.Object, post_dialog)
|
||||
|
||||
def get_preview(self):
|
||||
name = "----"
|
||||
name = QT_TRANSLATE_NOOP("FEM", "default")
|
||||
if self.ViewObject.Name:
|
||||
name = self.ViewObject.Name
|
||||
return (QtGui.QPixmap(), name)
|
||||
|
||||
Reference in New Issue
Block a user