blob: 4b9512a1eed8d971c8e75f4f7c90f159fe8a6948 [file] [log] [blame]
//===-- TVFrame.h - Main window class for llvm-tv ----------------*- C++ -*-==//
//
// The gui for llvm-tv.
//
//===----------------------------------------------------------------------===//
#ifndef TVFRAME_H
#define TVFRAME_H
#include "TVSnapshotList.h"
#include "TVWindowIDs.h"
#include "wx/wx.h"
#include "wx/listctrl.h"
#include "wx/splitter.h"
#include "wx/treectrl.h"
#include "wx/notebook.h"
#include "ItemDisplayer.h"
#include <string>
#include <vector>
/// TVTreeCtrl - A specialization of wxTreeCtrl that displays a list of LLVM
/// Modules and Functions from a snapshot
///
class TVFrame;
class TVTreeCtrl : public wxTreeCtrl {
TVFrame *myFrame;
public:
TVTreeCtrl::TVTreeCtrl(wxWindow *parent, TVFrame *frame, const wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTR_HIDE_ROOT | wxTR_DEFAULT_STYLE
| wxSUNKEN_BORDER);
virtual ~TVTreeCtrl() { }
void AddSnapshotsToTree(TVSnapshotList*);
void updateSnapshotList(TVSnapshotList*);
void OnSelChanged(wxTreeEvent &event);
TVTreeItemData *GetSelectedItemData ();
DECLARE_EVENT_TABLE();
};
///==---------------------------------------------------------------------==///
/// TVNotebook - The class which is responsible for the "tab view"
/// containing visualizers, which appears on the right-hand side
/// of the main LLVM-TV window.
///
class TVNotebook : public wxNotebook {
std::vector<ItemDisplayer *> displayers;
TVTreeItemData *selectedItem;
void displaySelectedItemOnPage (int page);
public:
TVNotebook (wxWindow *_parent)
: wxNotebook (_parent, LLVM_TV_NOTEBOOK) { }
void OnSelChanged (wxNotebookEvent &event);
bool AddItemDisplayer (ItemDisplayer *displayWidget);
void SetSelectedItem (TVTreeItemData *newSelectedItem);
DECLARE_EVENT_TABLE ()
};
///==---------------------------------------------------------------------==///
/// TVFrame - The main application window for LLVM-TV, which is responsible
/// for displaying the tree view, tab view, status bar, and menu bar.
///
class TVApplication;
class TVFrame : public wxFrame {
TVApplication *myApp;
wxSplitterWindow *splitterWindow; // divides this into left & right sides
TVTreeCtrl *myTreeCtrl; // left side - displays tree view of module
TVNotebook *notebook; // right side - tab views w/ item displayers
void Resize();
public:
TVFrame (TVApplication *app, const char *title);
void OnExit (wxCommandEvent &event);
void CallGraphView (wxCommandEvent &event);
void CFGView (wxCommandEvent &event);
void BUDSView (wxCommandEvent &event);
void TDDSView (wxCommandEvent &event);
void LocalDSView (wxCommandEvent &event);
void CodeView (wxCommandEvent &event);
void OnAbout (wxCommandEvent &event);
void OnHelp (wxCommandEvent &event);
void OnOpen (wxCommandEvent &event);
void OnRefresh (wxCommandEvent &event);
void CreateTree(long style, std::vector<TVSnapshot>&);
void refreshSnapshotList ();
void initializeSnapshotListAndView ();
void updateDisplayedItem (TVTreeItemData *newlyDisplayedItem);
DECLARE_EVENT_TABLE ();
};
#endif // TVFRAME_H