Added ability to create multiple attributes in a row

This commit is contained in:
Markus Lampert
2020-12-10 22:23:22 -08:00
parent b4ed9724d8
commit b0c69e5a8f
2 changed files with 113 additions and 61 deletions

View File

@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>432</width>
<width>474</width>
<height>300</height>
</rect>
</property>
@@ -14,19 +14,6 @@
<string>Dialog</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="4" column="1">
<widget class="QTextEdit" name="propertyInfo"/>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="propertyName"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Type</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
@@ -34,25 +21,8 @@
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Info</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="propertyType"/>
</item>
<item row="5" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<item row="0" column="1">
<widget class="QLineEdit" name="propertyName"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
@@ -86,6 +56,65 @@
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Type</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="propertyType"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Info</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QTextEdit" name="propertyInfo">
<property name="tabChangesFocus">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QWidget" name="widget_2" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="createAnother">
<property name="text">
<string>Create another</string>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<tabstops>

View File

@@ -139,15 +139,24 @@ class Delegate(QtGui.QStyledItemDelegate):
class PropertyCreate(object):
def __init__(self, obj, parent=None):
def __init__(self, obj, grp, typ, another):
self.obj = obj
self.form = FreeCADGui.PySideUic.loadUi(":panels/PropertyCreate.ui")
for group in sorted(obj.CustomPropertyGroups):
self.form.propertyGroup.addItem(group)
for typ in sorted(SupportedPropertyType):
self.form.propertyType.addItem(typ)
self.form.propertyType.setCurrentText('String')
for g in sorted(obj.CustomPropertyGroups):
self.form.propertyGroup.addItem(g)
if grp:
self.form.propertyGroup.setCurrentText(grp)
for t in sorted(SupportedPropertyType):
self.form.propertyType.addItem(t)
if SupportedPropertyType[t] == typ:
typ = t
if typ:
self.form.propertyType.setCurrentText(typ)
else:
self.form.propertyType.setCurrentText('String')
self.form.createAnother.setChecked(another)
self.form.propertyGroup.currentTextChanged.connect(self.updateUI)
self.form.propertyGroup.currentIndexChanged.connect(self.updateUI)
@@ -163,15 +172,20 @@ class PropertyCreate(object):
ok.setEnabled(False)
def propertyName(self):
return self.form.propertyName.text()
return self.form.propertyName.text().strip()
def propertyGroup(self):
return self.form.propertyGroup.currentText()
return self.form.propertyGroup.currentText().strip()
def propertyType(self):
return SupportedPropertyType[self.form.propertyType.currentText()]
return SupportedPropertyType[self.form.propertyType.currentText()].strip()
def propertyInfo(self):
return self.form.propertyInfo.toPlainText()
return self.form.propertyInfo.toPlainText().strip()
def createAnother(self):
return self.form.createAnother.isChecked()
def exec_(self):
self.form.propertyName.setText('')
self.form.propertyInfo.setText('')
#self.form.propertyName.setFocus()
return self.form.exec_()
class TaskPanel(object):
@@ -247,24 +261,33 @@ class TaskPanel(object):
def propertyAdd(self):
PathLog.track()
dialog = PropertyCreate(self.obj)
if dialog.exec_():
# if we block signals the view doesn't get updated, surprise, surprise
#self.model.blockSignals(True)
name = dialog.propertyName()
typ = dialog.propertyType()
grpe = dialog.propertyGroup()
info = dialog.propertyInfo()
self.obj.Proxy.addCustomProperty(typ, name, grpe, info)
index = 0
for i in range(self.model.rowCount()):
index = i
if self.model.item(i, self.ColumnName).data(QtCore.Qt.EditRole) > dialog.propertyName():
break
self.model.insertRows(index, 1)
self._setupProperty(index, name)
self.form.table.selectionModel().setCurrentIndex(self.model.index(index, 0), QtCore.QItemSelectionModel.Rows)
#self.model.blockSignals(False)
more = False
grp = None
typ = None
while True:
dialog = PropertyCreate(self.obj, grp, typ, more)
if dialog.exec_():
# if we block signals the view doesn't get updated, surprise, surprise
#self.model.blockSignals(True)
name = dialog.propertyName()
typ = dialog.propertyType()
grp = dialog.propertyGroup()
info = dialog.propertyInfo()
self.obj.Proxy.addCustomProperty(typ, name, grp, info)
index = 0
for i in range(self.model.rowCount()):
index = i
if self.model.item(i, self.ColumnName).data(QtCore.Qt.EditRole) > dialog.propertyName():
break
self.model.insertRows(index, 1)
self._setupProperty(index, name)
self.form.table.selectionModel().setCurrentIndex(self.model.index(index, 0), QtCore.QItemSelectionModel.Rows)
#self.model.blockSignals(False)
more = dialog.createAnother()
else:
more = False
if not more:
break
def propertyRemove(self):
PathLog.track()