# Path: robot_designer_plugin/operators/segments.py
# class SelectSegment(RDOperator):
# class RenameSegment(RDOperator):
# class InsertNewParentSegment(RDOperator):
# class AssignParentSegment(RDOperator):
# class ImportBlenderArmature(RDOperator):
# class ConvertVertexMapSkinning(RDOperator):
# class DeleteSegment(RDOperator):
# class SetDefaultJointName(RDOperator):
# class SetDefaultJointNameAll(RDOperator):
# class CreateNewSegment(RDOperator):
# class UpdateSegments(RDOperator):
#     def execute(self, context):
#     def run(cls, segment_name=""):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def run(cls, new_name=""):
#     def run(cls, segment_name):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def run(cls, parent_name):
#     def execute(self, context):
#     def execute_on_bone(self, bone):
#     def execute(self, context):
#     def allow_connect_to_that_bone_because_vertex_weight(self, bone, obj):
#     def allow_connect_to_that_bone(self, bone, obj):
#     def stop_vertex_group_from_interfering(self, armature, obj, context):
#     def execute_on_bone(self, bone, armature, context):
#     def execute(self, context):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def execute(self, context):
#     def execute(self, context):
#     def run(cls, segment_name):  # , parent_name=""):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def execute(self, context):
# 
# Path: robot_designer_plugin/core/logfile.py
# def LogFunction(func):
#     """
#     Logging / exception handling decorator for functions (use for draw function for instance).
# 
#     :param func: The function to decorate
#     :return: A :term:`decorator`
#     """
# 
#     def func_logger(self, context):
# 
#         # Execute the Operator
#         try:
#             return func(self, context)
# 
#         except Exception as e:
#             gui_logger.error("Draw function in {} module threw an exception:\n {} {} {} {} {}".format(
#                              func.__module__, EXCEPTION_MESSAGE, type(e).__name__, e, log_callstack(), log_callstack(back_trace=True)))
#             InfoBox.global_messages.append(e)
# 
#     return func_logger


from ..operators import segments
from ..core.logfile import LogFunction
        parent_column.label(text="DH parameter:")
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.theta,
            "value",
            slider=False,
            text="Theta",
        )
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.d, "value", slider=False, text="D"
        )
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.alpha,
            "value",
            slider=False,
            text="Alpha",
        )
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.a, "value", slider=False, text="A"
        )

    if (context.active_bone.parent is not None) or (
        context.active_bone.RobotDesigner.world is True
    ):
        # Only show joint if not root bone. Unless root bone is connected to world
        jointbox = layout.box()
        jointbox.label(text="Joint:")

        name = jointbox.column(align=True)
        name.prop(context.active_bone.RobotDesigner, "joint_name", text="Joint Name")
        row = jointbox.row(align=True)

# Path: robot_designer_plugin/operators/segments.py
# class SelectSegment(RDOperator):
# class RenameSegment(RDOperator):
# class InsertNewParentSegment(RDOperator):
# class AssignParentSegment(RDOperator):
# class ImportBlenderArmature(RDOperator):
# class ConvertVertexMapSkinning(RDOperator):
# class DeleteSegment(RDOperator):
# class SetDefaultJointName(RDOperator):
# class SetDefaultJointNameAll(RDOperator):
# class CreateNewSegment(RDOperator):
# class UpdateSegments(RDOperator):
#     def execute(self, context):
#     def run(cls, segment_name=""):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def run(cls, new_name=""):
#     def run(cls, segment_name):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def run(cls, parent_name):
#     def execute(self, context):
#     def execute_on_bone(self, bone):
#     def execute(self, context):
#     def allow_connect_to_that_bone_because_vertex_weight(self, bone, obj):
#     def allow_connect_to_that_bone(self, bone, obj):
#     def stop_vertex_group_from_interfering(self, armature, obj, context):
#     def execute_on_bone(self, bone, armature, context):
#     def execute(self, context):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def execute(self, context):
#     def execute(self, context):
#     def run(cls, segment_name):  # , parent_name=""):
#     def execute(self, context):
#     def invoke(self, context, event):
#     def execute(self, context):
# 
# Path: robot_designer_plugin/core/logfile.py
# def LogFunction(func):
#     """
#     Logging / exception handling decorator for functions (use for draw function for instance).
# 
#     :param func: The function to decorate
#     :return: A :term:`decorator`
#     """
# 
#     def func_logger(self, context):
# 
#         # Execute the Operator
#         try:
#             return func(self, context)
# 
#         except Exception as e:
#             gui_logger.error("Draw function in {} module threw an exception:\n {} {} {} {} {}".format(
#                              func.__module__, EXCEPTION_MESSAGE, type(e).__name__, e, log_callstack(), log_callstack(back_trace=True)))
#             InfoBox.global_messages.append(e)
# 
#     return func_logger


# Path: robot_designer_plugin/interface/kinematics.py
from ..operators import segments
from ..core.logfile import LogFunction

        parent_column.label(text="DH parameter:")
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.theta,
            "value",
            slider=False,
            text="Theta",
        )
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.d, "value", slider=False, text="D"
        )
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.alpha,
            "value",
            slider=False,
            text="Alpha",
        )
        parent_column.prop(
            context.active_bone.RobotDesigner.DH.a, "value", slider=False, text="A"
        )

    if (context.active_bone.parent is not None) or (
        context.active_bone.RobotDesigner.world is True
    ):
        # Only show joint if not root bone. Unless root bone is connected to world
        jointbox = layout.box()
        jointbox.label(text="Joint:")

        name = jointbox.column(align=True)
        name.prop(context.active_bone.RobotDesigner, "joint_name", text="Joint Name")
        row = jointbox.row(align=True)

        segments.SetDefaultJointName.place_button(row, text="Use Default Name")