summaryrefslogtreecommitdiffstats
path: root/languages/lib/debugger/debugger.h
blob: ed545f2814a2e581e3dbd808c0aa1b0a7872fa75 (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifndef __DEBUGGER_H__
#define __DEBUGGER_H__

#include <qvaluelist.h>

#include "kdevdebugger.h"

#include <kparts/part.h>
#include <ktexteditor/markinterface.h>

#include <kdeversion.h>
#include <ktexteditor/markinterfaceextension.h>

class KDevPartController;

/**
* Describes a single breakpoint in the system
*
* This is used so that we can track the breakpoints and move them appropriately
* as the user adds or removes lines of code before breakpoints.
*/

class BPItem
{
public:
    /**
    * default ctor - required from QValueList
    */
    BPItem() : m_fileName(""), m_lineNum(0)
    {}

    BPItem( const QString& fileName, const uint lineNum)
            : m_fileName(fileName),
            m_lineNum(lineNum)
    {}

    uint lineNum() const        {  return m_lineNum; }
    QString fileName() const    {  return m_fileName; }

    bool operator==( const BPItem& rhs ) const
    {
        return (m_fileName == rhs.m_fileName
                && m_lineNum == rhs.m_lineNum);
    }

private:
    QString m_fileName;
    uint m_lineNum;
};


/**
* Handles signals from the editor that relate to breakpoints and the execution
* point of the debugger.
* We may change, add or remove breakpoints in this class.
*/
class Debugger : public KDevDebugger
{
    Q_OBJECT

public:

    /**
    */
//     static Debugger *getInstance();

    /**
    * Controls the breakpoint icon being displayed in the editor through the
    * markinterface
    *
    * @param fileName   The breakpoint is added or removed from this file
    * @param lineNum    ... at this line number
    * @param id         This is an internal id. which has a special number
    *                   that prevents us changing the mark icon. (why?)
    * @param enabled    The breakpoint could be enabled, disabled
    * @param pending    pending or active. Each state has a different icon.
    */
    void setBreakpoint(const QString &fileName, int lineNum,
                       int id, bool enabled, bool pending);

    /**
    * Displays an icon in the file at the line that the debugger has stoped
    * at.
    * @param url        The file the debugger has stopped at.
    * @param lineNum    The line number to display. Note: We may not know it.
    */
    void gotoExecutionPoint(const KURL &url, int lineNum=-1);

    /**
    * Remove the executution point being displayed.
    */
    void clearExecutionPoint();

// protected:

    Debugger(KDevPartController *partController);
    ~Debugger();

private slots:

    /**
    * Whenever a new part is added this slot gets triggered and we then
    * look for a MarkInterfaceExtension part. When it is a
    * MarkInterfaceExtension part we set the various pixmaps of the
    * breakpoint icons.
    */
    void partAdded( KParts::Part* part );

    /**
    * Called by the TextEditor interface when the marks have changed position
    * because the user has added or removed source.
    * In here we figure out if we need to reset the breakpoints due to
    * these source changes.
    */
    void marksChanged();

private:
    enum MarkType {
        Bookmark           = KTextEditor::MarkInterface::markType01,
        Breakpoint         = KTextEditor::MarkInterface::markType02,
        ActiveBreakpoint   = KTextEditor::MarkInterface::markType03,
        ReachedBreakpoint  = KTextEditor::MarkInterface::markType04,
        DisabledBreakpoint = KTextEditor::MarkInterface::markType05,
        ExecutionPoint     = KTextEditor::MarkInterface::markType06
    };

    static Debugger *s_instance;
    KDevPartController *m_partController;
    QValueList<BPItem> BPList;
};

#endif