File: _abstractvariableitem.h

package info (click to toggle)
kdevelop 4%3A4.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 18,064 kB
  • ctags: 8,825
  • sloc: cpp: 76,399; python: 920; lex: 422; ruby: 120; sh: 85; makefile: 49; xml: 42
file content (125 lines) | stat: -rw-r--r-- 3,532 bytes parent folder | download | duplicates (2)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
 * GDB Debugger Support
 *
 * Copyright 1999 John Birch <jbb@kdevelop.org>
 * Copyright 2007 Hamish Rodda <rodda@kde.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#ifndef _ABSTRACTVARIABLEITEM_H_
#define _ABSTRACTVARIABLEITEM_H_

#include <QObject>

namespace GDBDebugger
{

class VariableCollection;
class GDBController;
class GDBCommand;

class AbstractVariableItem : public QObject
{
    Q_OBJECT

public:
    enum Columns {
      ColumnName = 0,
      ColumnValue = 1,
      ColumnType = 2,
      ColumnLast = ColumnType
    };

    AbstractVariableItem(VariableCollection* parent);
    AbstractVariableItem(AbstractVariableItem* parent);
    virtual ~AbstractVariableItem();

    VariableCollection* collection() const;
    GDBController* controller() const;
    AbstractVariableItem* abstractParent() const;
    AbstractVariableItem* abstractRoot() const;
    int depth() const;

    int thread() const;
    void setThread(int thread);
    int frame() const;
    void setFrame(int frame);

    virtual Qt::ItemFlags flags(int column) const;
    virtual QVariant data(int column, int role = Qt::DisplayRole ) const = 0;
    /// Use this method to notify the collection that data has changed in the given \a column.
    void dataChanged(int column) const;
    virtual bool hasChildren() const;

    const QList<AbstractVariableItem*>& children() const;
    void addChild(AbstractVariableItem* item);
    void addChild(const QString& expression, const QString& type);
    void removeChild(AbstractVariableItem* item);
    void deleteChild(AbstractVariableItem* item);
    void deleteAllChildren();

    virtual void registerWithGdb();
    virtual void deregisterWithGdb();
    bool isRegisteredWithGdb() const;

    bool isDirty() const;
    void setDirty(bool dirty = true);
    void refresh();

    bool isChildrenDirty() const;
    virtual void setChildrenDirty(bool dirty = true);
    virtual void refreshChildren();

    bool isValueDirty() const;
    virtual void setValueDirty(bool dirty = true);
    virtual void updateValue();

    /**
     * Set a serial number for the last time this item was present 
     * when the frame was last updated.
     */
    void setLastSeen(int serial);

    /**
     * Find out when the item was last present in the frame.
     */
    int lastSeen() const;

protected:
    /**
     * Queue a command with the controller, adding thread and frame information to the command.
     */
    void addCommand(GDBCommand* command);

    /**
     * Queue a command with the controller, without adding thread and frame information to the command.
     */
    void addCommandUnaltered(GDBCommand* command);

private:
    QList<AbstractVariableItem*> m_children;

    bool m_registered : 1;
    bool m_childrenDirty : 1;
    bool m_valueDirty : 1;
    int m_lastSeen;
    int m_thread, m_frame;
};

}

#endif