summaryrefslogtreecommitdiffstats
path: root/languages/ruby/debugger/framestackwidget.h
blob: 373d0690bdddccae6fa1b85aa7307f3b2020cf32 (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
/***************************************************************************
    begin                : Sun Aug 8 1999
    copyright            : (C) 1999 by John Birch
    email                : jbb@kdevelop.org
	
                          Adapted for ruby debugging
                          --------------------------
    begin                : Mon Nov 1 2004
    copyright            : (C) 2004 by Richard Dale
    email                : Richard_Dale@tipitina.demon.co.uk
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef _FRAMESTACKWIDGET_H_
#define _FRAMESTACKWIDGET_H_

#include <qlistview.h>
#include <qstringlist.h>

#include "rdbcontroller.h"

namespace RDBDebugger
{

class FramestackWidget;


class ThreadStackItem : public QListViewItem
{
public:
    ThreadStackItem(FramestackWidget *parent, int threadNo, const QString &threadDesc);
    virtual ~ThreadStackItem();

	virtual int rtti() const { return RTTI_THREAD_STACK_ITEM; }
	
	void setOpen(bool open);
    int threadNo() { return threadNo_; }

private:
	int threadNo_;
};

/***************************************************************************/
/***************************************************************************/
/***************************************************************************/

class FrameStackItem : public QListViewItem
{
public:
    FrameStackItem(ThreadStackItem * parent, int frameNo, const QString & frameDesc, const QString & frameName);
    virtual ~FrameStackItem();

	virtual int rtti() const { return RTTI_FRAME_STACK_ITEM; }
	virtual QString key(int column, bool ascending) const;

    int frameNo() { return frameNo_; }
    int threadNo() { return threadNo_; }
	QString frameName() { return frameName_; }
	
private:
    int frameNo_;
    int threadNo_;
	QString frameName_;
	QString key_;
};

/***************************************************************************/
/***************************************************************************/
/***************************************************************************/

/**
 * @author John Birch
 */
class FramestackWidget : public QListView
{
    Q_OBJECT

public:
    FramestackWidget( QWidget *parent=0, const char *name=0, WFlags f=0 );
    virtual ~FramestackWidget();

    void clear();

    void parseRDBThreadList(char *str);
    void parseRDBBacktraceList(char *str);

    ThreadStackItem *findThread(int threadNo);
    FrameStackItem *findFrame(int frameNo, int threadNo);

    int viewedThread()
    { return viewedThread_ ? viewedThread_->threadNo() : -1; }

public slots:
    void slotSelectFrame(int frameNo, int threadNo);
    void slotSelectionChanged(QListViewItem *thisItem);

signals:
    void selectFrame(int frameNo, int threadNo, const QString& frameName);
    void frameActive(int frameNo, int threadNo, const QString& frameName);

private:
    ThreadStackItem *viewedThread_;
};

}

#endif