Skip to content

Commit

Permalink
Basic task panel.
Browse files Browse the repository at this point in the history
  • Loading branch information
ml authored and mlampert committed Oct 18, 2016
1 parent dffb449 commit 0897089
Show file tree
Hide file tree
Showing 3 changed files with 253 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/Mod/Path/Gui/Resources/Path.qrc
Expand Up @@ -82,5 +82,6 @@
<file>panels/DlgJobChooser.ui</file>
<file>panels/ContourEdit.ui</file>
<file>panels/ProfileEdgesEdit.ui</file>
<file>panels/DogboneEdit.ui</file>
</qresource>
</RCC>
166 changes: 166 additions & 0 deletions src/Mod/Path/Gui/Resources/panels/DogboneEdit.ui
@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TaskPanel</class>
<widget class="QWidget" name="TaskPanel">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>352</width>
<height>486</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Dogbones</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QToolBox" name="toolBox">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="Dressup">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>334</width>
<height>410</height>
</rect>
</property>
<attribute name="label">
<string>Dressup</string>
</attribute>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Shape</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="shape">
<item>
<property name="text">
<string>Dogbone</string>
</property>
</item>
<item>
<property name="text">
<string>T-bone horizontal</string>
</property>
</item>
<item>
<property name="text">
<string>T-bone vertical</string>
</property>
</item>
<item>
<property name="text">
<string>T-bone long edge</string>
</property>
</item>
<item>
<property name="text">
<string>T-bone short edge</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Side</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="side">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Left</string>
</property>
</item>
<item>
<property name="text">
<string>Right</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Length </string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="lenght">
<property name="enabled">
<bool>false</bool>
</property>
<property name="currentIndex">
<number>2</number>
</property>
<item>
<property name="text">
<string>adaptive</string>
</property>
</item>
<item>
<property name="text">
<string>custom</string>
</property>
</item>
<item>
<property name="text">
<string>fixed</string>
</property>
</item>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="custom">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="Selection">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>334</width>
<height>410</height>
</rect>
</property>
<attribute name="label">
<string>Selection</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QListWidget" name="bones"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
87 changes: 86 additions & 1 deletion src/Mod/Path/PathScripts/DogboneDressup.py
Expand Up @@ -143,13 +143,15 @@ class ObjectDressup:
LabelTbone_S = 'T-bone short edge'

def __init__(self, obj):
obj.addProperty("App::PropertyLink", "Base","Path", "The base path to modify")
obj.addProperty("App::PropertyLink", "Base","Base", "The base path to modify")
obj.addProperty("App::PropertyEnumeration", "Side", "Dressup", "The side of path to insert dog-bones")
obj.Side = ['Left', 'Right']
obj.Side = 'Right'
obj.addProperty("App::PropertyEnumeration", "Shape", "Dressup", "The shape of dogboness")
obj.Shape = [ObjectDressup.LabelDogbone, ObjectDressup.LabelTbone_H, ObjectDressup.LabelTbone_V, ObjectDressup.LabelTbone_L, ObjectDressup.LabelTbone_S]
obj.Shape = ObjectDressup.LabelDogbone
obj.addProperty("App::PropertyIntegerList", "BoneBlacklist", "", "Bones that aren't dressed up")
obj.setEditorMode('BoneBlacklist', 2) # hide this one
obj.Proxy = self

def __getstate__(self):
Expand Down Expand Up @@ -316,6 +318,9 @@ def setup(self, obj):
else:
self.toolRadius = tool.Diameter / 2

def boneStateList(self):
return [ (FreeCAD.Vector(0,0,17), False), (FreeCAD.Vector(1,1,23), True), (FreeCAD.Vector(7,9,0), True) ]

class ViewProviderDressup:

def __init__(self, vobj):
Expand All @@ -337,6 +342,13 @@ def claimChildren(self):
#FreeCADGui.ActiveDocument.getObject(obj.Base.Name).Visibility = False
return [self.Object.Base]

def setEdit(self, vobj, mode=0):
FreeCADGui.Control.closeDialog()
panel = TaskPanel(vobj.Object)
FreeCADGui.Control.showDialog(panel)
panel.setupUi()
return True

def __getstate__(self):
return None

Expand Down Expand Up @@ -391,6 +403,79 @@ def Activated(self):
FreeCAD.ActiveDocument.commitTransaction()
FreeCAD.ActiveDocument.recompute()

class TaskPanel:
def __init__(self, obj):
self.obj = obj
self.form = FreeCADGui.PySideUic.loadUi(":/panels/DogboneEdit.ui")
self.updating = False

def accept(self):
self.getFields()
FreeCADGui.ActiveDocument.resetEdit()
FreeCADGui.Control.closeDialog()
FreeCAD.ActiveDocument.recompute()
FreeCADGui.Selection.removeObserver(self.s)

def reject(self):
FreeCADGui.Control.closeDialog()
FreeCAD.ActiveDocument.recompute()
FreeCADGui.Selection.removeObserver(self.s)

def getFields(self):
self.obj.Shape = str(self.form.shape.currentText())
self.obj.Side = str(self.form.side.currentText())
self.obj.Proxy.execute(self.obj)

def updateModel(self):
self.getFields()
self.obj.Proxy.execute(self.obj)
FreeCAD.ActiveDocument.recompute()

def comboSelectText(self, combo, text):
index = combo.findText(text, QtCore.Qt.MatchFixedString)
if index >= 0:
combo.setCurrentIndex(index)

def setFields(self):
self.comboSelectText(self.form.shape, self.obj.Shape)
self.comboSelectText(self.form.side, self.obj.Side)
self.form.bones.clear()
for (pos, enabled) in self.obj.Proxy.boneStateList():
lbl = '(%.2f, %2f, *)' % (pos.x, pos.y)
item = QtGui.QListWidgetItem(lbl, self.form.bones)
item.setFlags(QtCore.Qt.ItemFlag.ItemIsEnabled | QtCore.Qt.ItemFlag.ItemIsSelectable | QtCore.Qt.ItemFlag.ItemIsUserCheckable)
if enabled:
item.setCheckState(QtCore.Qt.CheckState.Checked)
else:
item.setCheckState(QtCore.Qt.CheckState.Unchecked)
self.form.bones.addItem(item)

def open(self):
self.s = SelObserver()
# install the function mode resident
FreeCADGui.Selection.addObserver(self.s)

def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Ok)

def setupUi(self):
self.form.shape.currentIndexChanged.connect(self.updateModel)
self.form.side.currentIndexChanged.connect(self.updateModel)
self.form.bones.itemActivated.connect(self.updateModel)
self.setFields()

class SelObserver:
def __init__(self):
import PathScripts.PathSelection as PST
PST.eselect()

def __del__(self):
import PathScripts.PathSelection as PST
PST.clear()

def addSelection(self, doc, obj, sub, pnt):
FreeCADGui.doCommand('Gui.Selection.addSelection(FreeCAD.ActiveDocument.' + obj + ')')
FreeCADGui.updateGui()

if FreeCAD.GuiUp:
# register the FreeCAD command
Expand Down

0 comments on commit 0897089

Please sign in to comment.