示例#1
0
 def apply(self):
     ui = self.createTTUi
     if self.dirty == True:
         if self.selectedObject == None:
             obj = FreeCAD.ActiveDocument.addObject(
                 'App::DocumentObjectGroupPython', "ToolTable")
             ViewToolTable(obj.ViewObject)
             obj.addProperty("App::PropertyString", "ObjectType")
             obj.ObjectType = "ToolTable"
             obj.setEditorMode("ObjectType", ("ReadOnly", ))
             self.selectedObject = obj
             FreeCADGui.Selection.clearSelection()
             FreeCADGui.Selection.addSelection(obj)
         for tool in self.selectedObject.Group:
             FreeCAD.ActiveDocument.removeObject(tool.Name)
         for line in self.toolList:
             tool = Tool(self.selectedObject)
             tool.getObject().Label = line['label']
             tool.setProperties(line['properties'], tool.getObject())
         self.selectedObject.Label = ui.nameLE.text()
         self.dirty = False
         FreeCAD.ActiveDocument.recompute()
示例#2
0
class ToolGui():
    def __init__(self):
        self.createToolUi = FreeCADGui.PySideUic.loadUi(
            os.path.dirname(__file__) + "/resources/ui/tool.ui")

        self.straightToolPic = QtGui.QPixmap(
            os.path.dirname(__file__) + "/resources/png/straightBitPic.png")
        self.taperedToolPic = QtGui.QPixmap(
            os.path.dirname(__file__) + "/resources/png/taperedBitPic.png")
        self.conicalToolPic = QtGui.QPixmap(
            os.path.dirname(__file__) + "/resources/png/conicalBitPic.png")
        self.ballToolPic = QtGui.QPixmap(
            os.path.dirname(__file__) + "/resources/png/ballBitPic.png")
        self.taperedBallToolPic = QtGui.QPixmap(
            os.path.dirname(__file__) + "/resources/png/taperedBallBitPic.png")

        self.toolTypes = [
            "StraightTool", "TaperedTool", "ConicalTool", "BallTool",
            "TaperedBallTool"
        ]

        ui = self.createToolUi
        iv = VAL.MyIntValidator()
        ui.logoL.setPixmap(
            QtGui.QPixmap(
                os.path.dirname(__file__) +
                "/resources/ui/logo side by side.png"))

        ui.numberEdit.setValidator(iv)
        ui.toolTypeCB.currentIndexChanged.connect(self.validateAllFields)
        ui.numberEdit.textChanged.connect(self.validateAllFields)
        ui.nameEdit.textChanged.connect(self.validateAllFields)
        ui.feedRateEdit.textChanged.connect(self.validateAllFields)
        ui.plungeRateEdit.textChanged.connect(self.validateAllFields)
        ui.spindleSpeedEdit.textChanged.connect(self.validateAllFields)
        ui.stepOverEdit.textChanged.connect(self.validateAllFields)
        ui.depthOfCutEdit.textChanged.connect(self.validateAllFields)

        ui.straightDiameterEdit.textChanged.connect(self.validateAllFields)
        ui.straightCutLengthEdit.textChanged.connect(self.validateAllFields)
        ui.straightToolLengthEdit.textChanged.connect(self.validateAllFields)
        ui.straightShaftDiameterEdit.textChanged.connect(
            self.validateAllFields)

        ui.taperedTopDiameterEdit.textChanged.connect(self.validateAllFields)
        ui.taperedBottomDiameterEdit.textChanged.connect(
            self.validateAllFields)
        ui.taperedCutLengthEdit.textChanged.connect(self.validateAllFields)
        ui.taperedToolLengthEdit.textChanged.connect(self.validateAllFields)
        ui.taperedShaftDiameterEdit.textChanged.connect(self.validateAllFields)

        ui.conicalTopDiameterEdit.textChanged.connect(self.validateAllFields)
        ui.conicalCutAngleEdit.textChanged.connect(self.validateAllFields)
        ui.conicalToolLengthEdit.textChanged.connect(self.validateAllFields)
        ui.conicalShaftDiameterEdit.textChanged.connect(self.validateAllFields)

        ui.ballDiameterEdit.textChanged.connect(self.validateAllFields)
        ui.ballToolLengthEdit.textChanged.connect(self.validateAllFields)
        ui.ballShaftDiameterEdit.textChanged.connect(self.validateAllFields)

        ui.taperedBallTopDiameterEdit.textChanged.connect(
            self.validateAllFields)
        ui.taperedBallDiameterEdit.textChanged.connect(self.validateAllFields)
        ui.taperedBallCutLengthEdit.textChanged.connect(self.validateAllFields)
        ui.taperedBallToolLengthEdit.textChanged.connect(
            self.validateAllFields)
        ui.taperedBallShaftDiameterEdit.textChanged.connect(
            self.validateAllFields)

        ui.buttonBox.accepted.connect(self.accept)
        ui.buttonBox.rejected.connect(self.reject)
        ui.toolTypeCB.currentIndexChanged.connect(self.changeToolTypeWidget)

        self.selectedObject = None
        self.currentToolNumber = -1
        self.originalToolName = ""

    def reset(self):
        ui = self.createToolUi
        ui.stackedWidget.setCurrentIndex(0)
        ui.nameEdit.clear()
        ui.numberEdit.clear()
        ui.makeEdit.clear()
        ui.modelEdit.clear()
        ui.toolTypeCB.setCurrentIndex(0)
        ui.materialEdit.clear()
        ui.feedRateEdit.clear()
        ui.plungeRateEdit.clear()
        ui.spindleSpeedEdit.clear()
        ui.stepOverEdit.clear()
        ui.depthOfCutEdit.clear()
        ui.straightDiameterEdit.clear()
        ui.straightCutLengthEdit.clear()
        ui.straightToolLengthEdit.clear()
        ui.straightShaftDiameterEdit.clear()
        ui.taperedTopDiameterEdit.clear()
        ui.taperedBottomDiameterEdit.clear()
        ui.taperedCutLengthEdit.clear()
        ui.taperedToolLengthEdit.clear()
        ui.taperedShaftDiameterEdit.clear()
        ui.conicalTopDiameterEdit.clear()
        ui.conicalCutAngleEdit.clear()
        ui.conicalToolLengthEdit.clear()
        ui.conicalShaftDiameterEdit.clear()
        ui.ballDiameterEdit.clear()
        ui.ballToolLengthEdit.clear()
        ui.ballShaftDiameterEdit.clear()
        ui.taperedBallTopDiameterEdit.clear()
        ui.taperedBallDiameterEdit.clear()
        ui.taperedBallCutLengthEdit.clear()
        ui.taperedBallToolLengthEdit.clear()
        ui.taperedBallShaftDiameterEdit.clear()

    def GetResources(self):
        return {
            'Pixmap': os.path.dirname(__file__) +
            "/resources/svg/tool.svg",  # the name of a svg file available in the resources
            'MenuText': "New Tool",
            'ToolTip': "Sets up a new tool that can be added to a tool table"
        }

    def validateAllFields(self):
        ui = self.createToolUi
        valid = True
        toolType = ui.toolTypeCB.currentText()
        if toolType == 'None Selected...':
            VAL.setLabel(ui.toolTypeLabel, 'INVALID')
            valid = False
        else:
            VAL.setLabel(ui.toolTypeLabel, 'VALID')
        if ui.numberEdit.text() == "":
            VAL.setLabel(ui.numberLabel, 'INVALID')
            valid = False
        else:
            VAL.setLabel(ui.numberLabel, 'VALID')
            for tool in self.parent.Group:
                if tool.Number == self.currentToolNumber: continue
                if str(tool.Number) == ui.numberEdit.text():
                    VAL.setLabel(ui.numberLabel, 'INVALID')
                    valid = False
                    break
        VAL.setLabel(ui.nameLabel, 'VALID')
        if ui.nameEdit.text() == "":
            valid = False
            VAL.setLabel(ui.nameLabel, 'INVALID')
        mode = getGUIMode()
        sameName = FreeCAD.ActiveDocument.getObjectsByLabel(ui.nameEdit.text())
        if (len(sameName) > 0):
            if len(sameName) > 1:
                valid = False
                VAL.setLabel(ui.nameLabel, 'INVALID')
            elif mode != 'EditingToolFromIcon' and mode != 'EditingToolFromGUI':
                valid = False
                VAL.setLabel(ui.nameLabel, 'INVALID')
            else:
                if ui.nameEdit.text() == self.originalToolName:
                    VAL.setLabel(ui.nameLabel, 'VALID')
                else:
                    VAL.setLabel(ui.nameLabel, 'INVALID')
                    valid = False

        valid = VAL.validate(ui.feedRateEdit, ui.feedRateL, False, valid,
                             VAL.VELOCITY)
        valid = VAL.validate(ui.plungeRateEdit, ui.plungeRateL, False, valid,
                             VAL.VELOCITY)
        valid = VAL.validate(ui.spindleSpeedEdit, ui.spindleSpeedLabel, False,
                             valid, VAL.ANGULAR_VELOCITY)
        valid = VAL.validate(ui.stepOverEdit, ui.stepOverL, False, valid,
                             VAL.LENGTH)
        valid = VAL.validate(ui.depthOfCutEdit, ui.docL, False, valid,
                             VAL.LENGTH)
        if toolType == "Straight":
            valid = VAL.validate(ui.straightDiameterEdit, ui.straightDiameterL,
                                 True, valid, VAL.LENGTH)
            valid = VAL.validate(ui.straightCutLengthEdit, ui.straightCutLenL,
                                 True, valid, VAL.LENGTH)
            valid = VAL.validate(ui.straightToolLengthEdit,
                                 ui.straightToolLenL, True, valid, VAL.LENGTH)
            valid = VAL.validate(ui.straightShaftDiameterEdit,
                                 ui.staightShaftDiameterL, True, valid,
                                 VAL.LENGTH)
        elif toolType == "Tapered":
            valid = VAL.validate(ui.taperedTopDiameterEdit,
                                 ui.taperedTopDiameterL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedBottomDiameterEdit,
                                 ui.taperedBottomDiameterL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedCutLengthEdit, ui.taperedCutLengthL,
                                 True, valid, VAL.LENGTH)
            valid = VAL.validate(ui.taperedToolLengthEdit,
                                 ui.taperedToolLengthL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedShaftDiameterEdit,
                                 ui.taperedShaftDiameterL, True, valid,
                                 VAL.LENGTH)
        elif toolType == "Conical":
            valid = VAL.validate(ui.conicalTopDiameterEdit,
                                 ui.conicalTopDiameterL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.conicalCutAngleEdit, ui.conicalCutAngleL,
                                 True, valid, VAL.ANGLE)
            valid = VAL.validate(ui.conicalToolLengthEdit,
                                 ui.conicalToolLengthL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.conicalShaftDiameterEdit,
                                 ui.conicalShaftDiameterL, True, valid,
                                 VAL.LENGTH)
        elif toolType == "Ball":
            valid = VAL.validate(ui.ballDiameterEdit, ui.ballDiameterL, True,
                                 valid, VAL.LENGTH)
            valid = VAL.validate(ui.ballToolLengthEdit, ui.ballToolLengthL,
                                 True, valid, VAL.LENGTH)
            valid = VAL.validate(ui.ballShaftDiameterEdit,
                                 ui.ballShaftDiameterL, True, valid,
                                 VAL.LENGTH)
        elif toolType == "TaperedBall":
            valid = VAL.validate(ui.taperedBallTopDiameterEdit,
                                 ui.taperedBallTopDiameterL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedBallDiameterEdit,
                                 ui.taperedBallBallDiameterL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedBallCutLengthEdit,
                                 ui.taperedBallCutLengthL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedBallToolLengthEdit,
                                 ui.taperedBallToolLengthL, True, valid,
                                 VAL.LENGTH)
            valid = VAL.validate(ui.taperedBallShaftDiameterEdit,
                                 ui.taperedBallShaftDiameterL, True, valid,
                                 VAL.LENGTH)

        ui.buttonBox.buttons()[0].setEnabled(valid)
        return valid

    def changeToolTypeWidget(self):
        i = self.createToolUi.toolTypeCB.currentIndex()
        self.createToolUi.stackedWidget.setCurrentIndex(i)
        if i == 1: self.createToolUi.imageLabel.setPixmap(self.straightToolPic)
        elif i == 2:
            self.createToolUi.imageLabel.setPixmap(self.taperedToolPic)
        elif i == 3:
            self.createToolUi.imageLabel.setPixmap(self.conicalToolPic)
        elif i == 4:
            self.createToolUi.imageLabel.setPixmap(self.ballToolPic)
        elif i == 5:
            self.createToolUi.imageLabel.setPixmap(self.taperedBallToolPic)
        else:
            self.createToolUi.imageLabel.setPixmap(None)

    def setUnits(self):
        ui = self.createToolUi
        if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt(
                "UserSchema") in [0, 1, 4, 6]:
            self.units = 'mm'
            ui.unitsLabel.setText("Default units are mm, mm/min, and rpm")
        else:
            ui.unitsLabel.setText("Default units are in, in/min, and rpm")
            self.units = 'in'

    def getToolProperties(self, obj):
        ui = self.createToolUi
        ui.stackedWidget.setCurrentIndex(
            self.toolTypes.index(obj.ObjectType) + 1)
        ui.nameEdit.setText(obj.Label)
        ui.numberEdit.setText(str(obj.Number))
        if hasattr(obj, 'Make'): ui.makeEdit.setText(obj.Make)
        if hasattr(obj, 'Model'): ui.modelEdit.setText(obj.Model)
        ui.toolTypeCB.setCurrentIndex(self.toolTypes.index(obj.ObjectType) + 1)
        if hasattr(obj, 'StockMaterial'):
            ui.materialEdit.setText(obj.StockMaterial)
        if hasattr(obj, 'FeedRate'):
            ui.feedRateEdit.setText(obj.FeedRate.UserString)
        if hasattr(obj, 'PlungeRate'):
            ui.plungeRateEdit.setText(obj.PlungeRate.UserString)
        if hasattr(obj, 'SpindleSpeed'):
            ui.spindleSpeedEdit.setText(obj.SpindleSpeed)
        if hasattr(obj, 'StepOver'):
            ui.stepOverEdit.setText(obj.StepOver.UserString)
        if hasattr(obj, 'DepthOfCut'):
            ui.depthOfCutEdit.setText(obj.DepthOfCut.UserString)

        toolType = ui.toolTypeCB.currentText()
        if toolType == "Straight":
            ui.straightDiameterEdit.setText(obj.Diameter.UserString)
            ui.straightCutLengthEdit.setText(obj.CutLength.UserString)
            ui.straightToolLengthEdit.setText(obj.ToolLength.UserString)
            ui.straightShaftDiameterEdit.setText(obj.ShaftDiameter.UserString)
        elif toolType == "Tapered":
            ui.taperedTopDiameterEdit.setText(obj.TopDiameter.UserString)
            ui.taperedBottomDiameterEdit.setText(obj.BottomDiameter.UserString)
            ui.taperedCutLengthEdit.setText(obj.CutLength.UserString)
            ui.taperedToolLengthEdit.setText(obj.ToolLength.UserString)
            ui.taperedShaftDiameterEdit.setText(obj.ShaftDiameter.UserString)
        elif toolType == "Conical":
            ui.conicalTopDiameterEdit.setText(obj.TopDiameter.UserString)
            ui.conicalCutAngleEdit.setText(obj.CutAngle.UserString)
            ui.conicalToolLengthEdit.setText(obj.ToolLength.UserString)
            ui.conicalShaftDiameterEdit.setText(obj.ShaftDiameter.UserString)
        elif toolType == "Ball":
            ui.ballDiameterEdit.setText(obj.BallDiameter.UserString)
            ui.ballToolLengthEdit.setText(obj.ToolLength.UserString)
            ui.ballShaftDiameterEdit.setText(obj.ShaftDiameter.UserString)
        elif toolType == "TaperedBall":
            ui.taperedBallTopDiameterEdit.setText(obj.TopDiameter.UserString)
            ui.taperedBallDiameterEdit.setText(obj.BallDiameter.UserString)
            ui.taperedBallCutLengthEdit.setText(obj.CutLength.UserString)
            ui.taperedBallToolLengthEdit.setText(obj.ToolLength.UserString)
            ui.taperedBallShaftDiameterEdit.setText(
                obj.ShaftDiameter.UserString)

    def getToolPropertiesFromGUI(self, props):
        ui = self.createToolUi
        ui.nameEdit.setText(props['label'])
        for prop in props['properties']:
            if prop[1] == 'ToolType': toolType = prop[2]
        for prop in props['properties']:
            if prop[1] == 'Number': ui.numberEdit.setText(str(prop[2]))
            elif prop[1] == 'Make': ui.makeEdit.setText(prop[2])
            elif prop[1] == 'Model': ui.modelEdit.setText(prop[2])
            elif prop[1] == 'ToolType':
                index = 0
                while index < ui.toolTypeCB.count():
                    if prop[2] == ui.toolTypeCB.itemText(index):
                        ui.toolTypeCB.setCurrentIndex(index)
                        break
                    index = index + 1
            elif prop[1] == 'StockMaterial':
                ui.materialEdit.setText(prop[2])
            elif prop[1] == 'FeedRate':
                ui.feedRateEdit.setText(
                    VAL.fromSystemValue('velocity', prop[2]))
            elif prop[1] == 'PlungeRate':
                ui.plungeRateEdit.setText(
                    VAL.fromSystemValue('velocity', prop[2]))
            elif prop[1] == 'SpindleSpeed':
                ui.spindleSpeedEdit.setText(prop[2])
            elif prop[1] == 'StepOver':
                ui.stepOverEdit.setText(VAL.fromSystemValue('length', prop[2]))
            elif prop[1] == 'DepthOfCut':
                ui.depthOfCutEdit.setText(
                    VAL.fromSystemValue('length', prop[2]))
            elif toolType == "Straight":
                if prop[1] == 'Diameter':
                    ui.straightDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == 'CutLength':
                    ui.straightCutLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == 'ToolLength':
                    ui.straightToolLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == 'ShaftDiameter':
                    ui.straightShaftDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
            elif toolType == "Tapered":
                if prop[1] == "TopDiameter":
                    ui.taperedTopDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "BottomDiameter":
                    ui.taperedBottomDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "CutLength":
                    ui.taperedCutLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "ToolLength":
                    ui.taperedToolLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "ShaftDiameter":
                    ui.taperedShaftDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
            elif toolType == "Conical":
                if prop[1] == "TopDiameter":
                    ui.conicalTopDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == 'CutAngle':
                    ui.conicalCutAngleEdit.setText(
                        VAL.fromSystemValue('angle', prop[2]))
                elif prop[1] == 'ToolLength':
                    ui.conicalToolLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == 'ShaftDiameter':
                    ui.conicalShaftDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
            elif toolType == "Ball":
                if prop[1] == "BallDiameter":
                    ui.ballDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "ToolLength":
                    ui.ballToolLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "ShaftDiameter":
                    ui.ballShaftDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
            elif toolType == "TaperedBall":
                if prop[1] == "TopDiameter":
                    ui.taperedBallTopDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "BallDiameter":
                    ui.taperedBallDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "CutLength":
                    ui.taperedBallCutLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "ToolLength":
                    ui.taperedBallToolLengthEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))
                elif prop[1] == "ShaftDiameter":
                    ui.taperedBallShaftDiameterEdit.setText(
                        VAL.fromSystemValue('length', prop[2]))

    def setToolProperties(self):
        ui = self.createToolUi
        if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt(
                "UserSchema") in [0, 1, 4, 6]:
            units = 1
        else:
            units = 25.4
        S = "App::PropertyString"
        I = "App::PropertyInteger"
        L = "App::PropertyLength"
        A = "App::PropertyAngle"
        V = "App::PropertySpeed"
        Q = "App::PropertyQuantity"
        tooltype = ui.toolTypeCB.currentText()
        #obj.Label = ui.nameEdit.text()
        p = [
            [S, "ObjectType", tooltype + "Tool"],
            #[S,	"Name",				ui.nameEdit.text()],
            [I, "Number", eval(ui.numberEdit.text())],
            [S, "ToolType", tooltype]
        ]
        if ui.makeEdit.text() != "": p.append([S, "Make", ui.makeEdit.text()])
        if ui.modelEdit.text() != "":
            p.append([S, "Model", ui.modelEdit.text()])
        if ui.materialEdit.text() != "":
            p.append([S, "StockMaterial", ui.materialEdit.text()])
        if ui.feedRateEdit.text() != "":
            p.append([
                V, "FeedRate",
                VAL.toSystemValue(ui.feedRateEdit, 'velocity')
            ])
        if ui.plungeRateEdit.text() != "":
            p.append([
                V, "PlungeRate",
                VAL.toSystemValue(ui.plungeRateEdit, 'velocity')
            ])
        if ui.spindleSpeedEdit.text() != "":
            p.append([
                S, "SpindleSpeed",
                VAL.toSystemValue(ui.spindleSpeedEdit, 'angularVelocity')
            ])
        if ui.stepOverEdit.text() != "":
            p.append(
                [L, "StepOver",
                 VAL.toSystemValue(ui.stepOverEdit, 'length')])
        if ui.depthOfCutEdit.text() != "":
            p.append([
                L, "DepthOfCut",
                VAL.toSystemValue(ui.depthOfCutEdit, 'length')
            ])
        if tooltype == "Straight":
            p.append([
                L, "Diameter",
                VAL.toSystemValue(ui.straightDiameterEdit, 'length')
            ])
            p.append([
                L, "CutLength",
                VAL.toSystemValue(ui.straightCutLengthEdit, 'length')
            ])
            p.append([
                L, "ToolLength",
                VAL.toSystemValue(ui.straightToolLengthEdit, 'length')
            ])
            p.append([
                L, "ShaftDiameter",
                VAL.toSystemValue(ui.straightShaftDiameterEdit, 'length')
            ])
        elif tooltype == "Tapered":
            p.append([
                L, "TopDiameter",
                VAL.toSystemValue(ui.taperedTopDiameterEdit, 'length')
            ])
            p.append([
                L, "BottomDiameter",
                VAL.toSystemValue(ui.taperedBottomDiameterEdit, 'length')
            ])
            p.append([
                L, "CutLength",
                VAL.toSystemValue(ui.taperedCutLengthEdit, 'length')
            ])
            p.append([
                L, "ToolLength",
                VAL.toSystemValue(ui.taperedToolLengthEdit, 'length')
            ])
            p.append([
                L, "ShaftDiameter",
                VAL.toSystemValue(ui.taperedShaftDiameterEdit, 'length')
            ])
        elif tooltype == "Conical":
            p.append([
                L, "TopDiameter",
                VAL.toSystemValue(ui.conicalTopDiameterEdit, 'length')
            ])
            p.append([
                A, "CutAngle",
                VAL.toSystemValue(ui.conicalCutAngleEdit, 'angle')
            ])
            p.append([
                L, "ToolLength",
                VAL.toSystemValue(ui.conicalToolLengthEdit, 'length')
            ])
            p.append([
                L, "ShaftDiameter",
                VAL.toSystemValue(ui.conicalShaftDiameterEdit, 'length')
            ])
        elif tooltype == "Ball":
            p.append([
                L, "BallDiameter",
                VAL.toSystemValue(ui.ballDiameterEdit, 'length')
            ])
            p.append([
                L, "ToolLength",
                VAL.toSystemValue(ui.ballToolLengthEdit, 'length')
            ])
            p.append([
                L, "ShaftDiameter",
                VAL.toSystemValue(ui.ballShaftDiameterEdit, 'length')
            ])
        elif tooltype == "TaperedBall":
            p.append([
                L, "TopDiameter",
                VAL.toSystemValue(ui.taperedBallTopDiameterEdit, 'length')
            ])
            p.append([
                L, "BallDiameter",
                VAL.toSystemValue(ui.taperedBallDiameterEdit, 'length')
            ])
            p.append([
                L, "CutLength",
                VAL.toSystemValue(ui.taperedBallCutLengthEdit, 'length')
            ])
            p.append([
                L, "ToolLength",
                VAL.toSystemValue(ui.taperedBallToolLengthEdit, 'length')
            ])
            p.append([
                L, "ShaftDiameter",
                VAL.toSystemValue(ui.taperedBallShaftDiameterEdit, 'length')
            ])

        return p

    def setSelectedObject(self, obj):
        self.selectedObject = obj

    def setMode(self):
        if self.selectedObject == None: mode = getGUIMode()
        elif self.selectedObject.ObjectType in self.toolTypes:
            mode = "EditingToolFromIcon"
        elif self.selectedObject.ObjectType == "ToolTable":
            if getGUIMode() == 'None': mode = "AddingToolFromIcon"
            else: mode = getGUIMode()
        setGUIMode(mode)
        return mode

    def Activated(self):
        self.setUnits()
        mode = self.setMode()
        if mode == "AddingToolFromIcon":
            self.currentToolNumber = -1
            self.originalToolName = ""
            self.reset()
            self.parent = self.selectedObject
            self.validateAllFields()
        elif mode == "EditingToolFromIcon":
            self.currentToolNumber = self.selectedObject.Number
            self.originalToolName = self.selectedObject.Label
            self.parent = self.selectedObject.getParentGroup()
            self.getToolProperties(self.selectedObject)
            self.validateAllFields()
        elif mode == "AddingToolFromGUI":
            self.currentToolNumber = -1
            self.originalToolName = ""
            self.parent = self.selectedObject
            self.reset()
            self.validateAllFields()
        elif mode == "EditingToolFromGUI":
            self.parent = self.selectedObject
            self.getToolPropertiesFromGUI(getGUIProperties())
            self.currentToolNumber = eval(self.createToolUi.numberEdit.text())
            self.originalToolName = self.createToolUi.nameEdit.text()
            self.validateAllFields()
        else:
            print "unexpected mode (" + mode + ")"
            return False
        self.createToolUi.show()
        setStatus("showing")
        return True

    def accept(self):
        ui = self.createToolUi
        ui.hide()
        setStatus("hidden")
        mode = getGUIMode()
        if mode == "AddingToolFromIcon":
            self.tool = Tool(self.selectedObject)
            p = self.setToolProperties()
            self.tool.getObject().Label = ui.nameEdit.text()
            self.tool.setProperties(p, self.tool.getObject())
            setGUIMode("None")
            return True
        elif mode == "EditingToolFromIcon":
            self.tool = self.selectedObject.Proxy
            self.tool.Label = ui.nameEdit.text()
            p = self.setToolProperties()
            self.tool.setProperties(p, self.selectedObject)
            setGUIMode("None")
            return True
        elif mode == "AddingToolFromGUI":
            p = self.setToolProperties()
            setGUIProperties(ui.nameEdit.text(), p)
            return True
        elif mode == "EditingToolFromGUI":
            p = self.setToolProperties()
            setGUIProperties(ui.nameEdit.text(), p)
            return True
        else:
            print "unexpected mode (" + mode + ")"
        return False

    def reject(self):
        self.createToolUi.hide()
        setStatus("hidden")
        setGUIMode("None")
        return False

    def IsActive(self):
        mode = getGUIMode()
        if mode in ["EditingToolFromGUI", "AddingToolFromGUI"]:
            return True
        mw = FreeCADGui.getMainWindow()
        tree = mw.findChildren(QtGui.QTreeWidget)[0]
        if len(tree.selectedItems()) != 1: return False
        item = tree.selectedItems()[0]
        obj = FreeCAD.ActiveDocument.getObjectsByLabel(item.text(0))[0]
        if obj.ObjectType in [
                "ToolTable", "StraightTool", "TaperedTool", "ConicalTool",
                "BallTool", "TaperedBallTool"
        ]:
            self.selectedObject = obj
            return True
        return False