| //===-- CodeViewer.h - Interactive instruction stream viewer ----*- C++ -*-===// |
| // |
| // The interactive code explorer for llvm-tv. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef CODEVIEWER_H |
| #define CODEVIEWER_H |
| |
| #include "ItemDisplayer.h" |
| #include <wx/wx.h> |
| #include <wx/listctrl.h> |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| class TVApplication; |
| |
| namespace llvm { |
| class Module; |
| class Function; |
| class Value; |
| } |
| |
| /// TVCodeItem - contains an instruction, basic block, or function (which prints |
| /// out as the header) |
| /// |
| class TVCodeItem : public wxListItem { |
| private: |
| llvm::Value *Val; |
| std::string label; |
| |
| void SetLabel(); |
| public: |
| TVCodeItem(llvm::Value *V) : Val(V) { SetLabel(); } |
| llvm::Value* getValue() { return Val; } |
| }; |
| |
| class TVCodeListCtrl : public wxListCtrl { |
| typedef std::vector<TVCodeItem*> Items; |
| Items itemList; |
| std::map<llvm::Value*, TVCodeItem*> ValueToItem; |
| std::map<TVCodeItem*, long> ItemToIndex; |
| |
| void refreshView(); |
| void changeItemTextAttrs (TVCodeItem *item, const wxColour *newColor, |
| int newWgt); |
| |
| public: |
| void SetFunction (llvm::Function *F); |
| TVCodeListCtrl(wxWindow *_parent); |
| TVCodeListCtrl(wxWindow *_parent, llvm::Function *F); |
| void OnItemSelected(wxListEvent &event); |
| void OnItemDeselected(wxListEvent &event); |
| |
| DECLARE_EVENT_TABLE () |
| }; |
| |
| /// TVCodeViewer |
| /// |
| class TVCodeViewer : public ItemDisplayer { |
| TVCodeListCtrl *myListCtrl; |
| public: |
| TVCodeViewer (wxWindow *_parent) { |
| myListCtrl = new TVCodeListCtrl (_parent); |
| } |
| virtual ~TVCodeViewer () { delete myListCtrl; } |
| void displayItem (TVTreeItemData *data); |
| void viewFunctionCode (llvm::Function *F); |
| void viewModuleCode (llvm::Module *M); |
| std::string getDisplayTitle (TVTreeItemData *data) { return "Code view"; } |
| wxWindow *getWindow () { return myListCtrl; } |
| }; |
| |
| #endif |