diff --git a/psemektypes.py b/psemektypes.py new file mode 100644 index 00000000..fddcf6eb --- /dev/null +++ b/psemektypes.py @@ -0,0 +1,110 @@ +############################################################################ +# +# Copyright (C) 2016 The Qt Company Ltd. +# Contact: https://www.qt.io/licensing/ +# +# This file is part of Qt Creator. +# +# Commercial License Usage +# Licensees holding valid commercial Qt licenses may use this file in +# accordance with the commercial license agreement provided with the +# Software or, alternatively, in accordance with the terms contained in +# a written agreement between you and The Qt Company. For licensing terms +# and conditions see https://www.qt.io/terms-conditions. For further +# information use the contact form at https://www.qt.io/contact-us. +# +# GNU General Public License Usage +# Alternatively, this file may be used under the terms of the GNU +# General Public License version 3 as published by the Free Software +# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +# included in the packaging of this file. Please review the following +# information to ensure the GNU General Public License requirements will +# be met: https://www.gnu.org/licenses/gpl-3.0.html. +# +############################################################################ + +# This is a place to add your own dumpers for testing purposes. +# Any contents here will be picked up by GDB, LLDB, and CDB based +# debugging in Qt Creator automatically. + +# NOTE: This file will get overwritten when updating Qt Creator. +# +# To add dumpers that don't get overwritten, copy this file here +# to a safe location outside the Qt Creator installation and +# make this location known to Qt Creator using the Debugger > +# Locals & Expressions > Extra Debugging Helpers setting. + +# Example to display a simple type +# template struct MapNode +# { +# U key; +# V data; +# } +# +# def qdump__MapNode(d, value): +# d.putValue("This is the value column contents") +# d.putExpandable() +# if d.isExpanded(): +# with Children(d): +# # Compact simple case. +# d.putSubItem("key", value["key"]) +# # Same effect, with more customization possibilities. +# with SubItem(d, "data") +# d.putItem("data", value["data"]) + +# Check http://doc.qt.io/qtcreator/creator-debugging-helpers.html +# for more details or look at qttypes.py, stdtypes.py, boosttypes.py +# for more complex examples. + +import dumper +import struct + +######################## Your code below ####################### + +typeFormats = { + 'float': 'f', + 'double': 'd', + 'int': 'i', +} + +def qdump__psemek__geom__vector(d, value): + size = value.type[1] + coordType = value.type[0] + canPrint = coordType.name in typeFormats + d.putExpandable() + if d.isExpanded() or not canPrint: + d.putItemCount(size) + d.putArrayData(value.address(), size, value.type[0]) + else: + desc = "" + arr = None + for m in value.members(False): + if m.name == 'coords': + arr = m.data() + break + f = typeFormats[coordType.name] + for v in struct.iter_unpack(f, arr): + if len(desc) > 0: + desc += ", " + desc += '{:.5f}'.format(v[0]) + d.putValue("(" + desc + ")") + +def qdump__psemek__geom__point(d, value): + qdump__psemek__geom__vector(d, value) + +def qdump__psemek__geom__interval(d, value): + coordType = value.type[0] + canPrint = coordType.name in typeFormats + d.putExpandable() + if d.isExpanded() or not canPrint: + # TODO + pass + else: + desc = "" + arr = value.data() + f = typeFormats[coordType.name] + for v in struct.iter_unpack(f, arr): + if len(desc) > 0: + desc += ", " + desc += '{:.5f}'.format(v[0]) + d.putValue("[" + desc + "]")