Skip to content

Commit

Permalink
Added ability to create multiple attributes in a row
Browse files Browse the repository at this point in the history
  • Loading branch information
mlampert committed Jan 27, 2021
1 parent cc12ce4 commit cbaa1ba
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 59 deletions.
91 changes: 60 additions & 31 deletions src/Mod/Path/Gui/Resources/panels/PropertyCreate.ui
Expand Up @@ -6,64 +6,83 @@
<rect>
<x>0</x>
<y>0</y>
<width>432</width>
<width>474</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="4" column="1">
<widget class="QTextEdit" name="propertyInfo"/>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="propertyName"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Type</string>
<string>Group</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Name</string>
</property>
<item row="1" column="1">
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<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="QComboBox" name="propertyGroup">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_3">
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Info</string>
<string>Type</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>
<item row="4" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Info</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Group</string>
<item row="4" column="1">
<widget class="QTextEdit" name="propertyInfo">
<property name="tabChangesFocus">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<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>
Expand All @@ -77,9 +96,19 @@
<number>0</number>
</property>
<item>
<widget class="QComboBox" name="propertyGroup">
<property name="editable">
<bool>true</bool>
<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>
Expand Down
79 changes: 51 additions & 28 deletions src/Mod/Path/PathScripts/PathPropertyContainerGui.py
Expand Up @@ -139,15 +139,24 @@ def updateEditorGeometry(self, widget, option, index):

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)
Expand All @@ -163,15 +172,20 @@ def updateUI(self):
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):
Expand Down Expand Up @@ -247,24 +261,33 @@ def propertySelected(self, selection):

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()
Expand Down

0 comments on commit cbaa1ba

Please sign in to comment.