aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/debugger/watchdata.h
blob: 00e85584b3a08478a68222f537d559aabf54a055 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/****************************************************************************
**
** 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.
**
****************************************************************************/

#pragma once

#include "debuggerprotocol.h"

#include <utils/treemodel.h>

#include <QMetaType>

#include <vector>

namespace Debugger::Internal {

class GdbMi;

class WatchItem : public Utils::TypedTreeItem<WatchItem, WatchItem>
{
public:
    WatchItem();

    void parse(const GdbMi &input, bool maySort);

    bool isLocal()   const;
    bool isWatcher() const;
    bool isInspect() const;

    QString expression() const;
    QString sourceExpression() const;
    QString realName() const;
    QString internalName() const;
    QString toToolTip() const;

    QVariant editValue() const;
    int editType() const;

    static const qint64 InvalidId = -1;

    void setHasChildren(bool c)   { wantsChildren = c; }

    bool isValid()   const { return !iname.isEmpty(); }
    bool isVTablePointer() const;
    int guessSize() const;

    void setError(const QString &);
    void setValue(const QString &);

    QString toString() const;

    static QString shadowedName(const QString &name, int seen);

    QString hexAddress() const;
    QString key() const { return address ? hexAddress() : iname; }

public:
    qint64          id;            // Token for the engine for internal mapping
    QString         iname;         // Internal name sth like 'local.baz.public.a'
    QString         exp;           // The expression
    QString         name;          // Displayed name
    QString         value;         // Displayed value
    QString         editvalue;     // Displayed value
    QString         editformat;    // Format of displayed value
    DebuggerEncoding editencoding; // Encoding of displayed value
    QString         type;          // Type for further processing
    quint64         address;       // Displayed address of the actual object
    quint64         origaddr;      // Address of the pointer referencing this item (gdb auto-deref)
    uint            size;          // Size
    uint            bitpos;        // Position within bit fields
    uint            bitsize;       // Size in case of bit fields
    int             elided;        // Full size if value was cut off, -1 if cut on unknown size, 0 otherwise
    int             arrayIndex;    // -1 if not an array member
    uchar           sortGroup;     // 0 - ordinary member, 1 - vptr, 2 - base class
    bool            wantsChildren;
    bool            valueEnabled;  // Value will be enabled or not
    bool            valueEditable; // Value will be editable
    uint            autoDerefCount; // number of levels of automatic dereferencing that has taken place (for pointer types)
    bool            outdated;      // \internal item is to be removed.
    double          time = 0;      // Time used on the dumper side to produce this item

private:
    void parseHelper(const GdbMi &input, bool maySort);
};

} // Debugger::Internal