root/src/apps/debugger/user_interface/gui/team_window/StackTraceView.h
/*
 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef STACK_TRACE_VIEW_H
#define STACK_TRACE_VIEW_H

#include <GroupView.h>

#include "table/Table.h"
#include "Team.h"


class StackFrame;


class StackTraceView : public BGroupView, private TableListener {
public:
        class Listener;

public:
                                                                StackTraceView(Listener* listener);
                                                                ~StackTraceView();

        static  StackTraceView*         Create(Listener* listener);
                                                                        // throws

                        void                            UnsetListener();

                        void                            SetStackTrace(StackTrace* stackTrace);
                        void                            SetStackFrame(StackFrame* stackFrame);

                        void                            LoadSettings(const BMessage& settings);
                        status_t                        SaveSettings(BMessage& settings);

                        void                            SetStackTraceClearPending();

private:
                        class FramesTableModel;

private:
        // TableListener
        virtual void                            TableSelectionChanged(Table* table);

                        void                            _Init();

private:
                        StackTrace*                     fStackTrace;
                        Table*                          fFramesTable;
                        FramesTableModel*       fFramesTableModel;
                        bool                            fTraceClearPending;
                        Listener*                       fListener;
};


class StackTraceView::Listener {
public:
        virtual                                         ~Listener();

        virtual void                            StackFrameSelectionChanged(
                                                                        StackFrame* frame) = 0;
};


#endif  // STACK_TRACE_VIEW_H