+#ifndef INCLUDE__Mainwindow_hxx_
+#define INCLUDE__Mainwindow_hxx_
+
#include <memory>
#include <map>
+#include <vector>
+#include <string>
+
#include <QTextEdit>
#include <QPushButton>
#include <QMainWindow>
-#include <QListWidget>
+#include <QTreeWidget>
#include <QStackedWidget>
-#include "disassembler/Disassembler.hxx"
-#include "widgets/BasicBlockWidget.hxx"
-#include "widgets/ScriptingDock.hxx"
+#include <log4cxx/logger.h>
+
+class Disassembler;
+class Function;
+class InformationManager;
+class FunctionWidget;
+class BasicBlockWidget;
+class FridaDock;
class Mainwindow : public QMainWindow {
- Q_OBJECT
+ Q_OBJECT
public:
- Mainwindow(const std::string& filename = "");
-private:
- void openBinary(const std::string& filename);
+ Mainwindow(InformationManager* mgr);
- void populateSymbolInformation(Function * fun);
+public Q_SLOTS:
+ void switchMainPlaneToAddress(uint64_t);
+ void requestNewFunctionByAddress(uint64_t address);
- QTextEdit *textEdit;
- QPushButton *quitButton;
- QMenu *fileMenu;
+private:
+ void addFunction(Function* fun);
+ void setGlobalHotkeys();
- QTabWidget * tabwidget;
- QListWidget * listWidget;
- QStackedWidget * stackedWidget;
- QDockWidget * dockWidget;
- ScriptingDock * scripting;
+ QTextEdit *textEdit;
+ QPushButton *quitButton;
+ QMenu *fileMenu;
- QAction *exitAction;
- QAction *openAction;
+ QTabWidget * tabwidget;
+ QTreeWidget * listWidget;
+ QStackedWidget * stackedWidget;
+ QDockWidget * dockWidget;
+ FridaDock * fdock;
+
+ QAction *exitAction;
+ QAction *openAction;
+ QAction *loadAction;
+ QAction *saveAction;
- std::shared_ptr<Disassembler> disassembler;
std::map<uint64_t, BasicBlockWidget*> blocks;
-private slots:
- void quit();
- void open();
+ std::map<uint64_t, Function*> functions;
+ std::map<QTreeWidgetItem*, FunctionWidget*> objects_list;
+ std::map<uint64_t, QTreeWidgetItem*> objects_list_by_address;
+ std::vector<QTreeWidgetItem*> group_list;
+
+ InformationManager* manager;
+ log4cxx::LoggerPtr logger;
+
+private Q_SLOTS:
+ void quit();
+ void open();
+ void load();
+ void save();
+ void switchMainPlane(QTreeWidgetItem* item);
+ void showListContextMenu(const QPoint&);
+ void requestNewFunction();
+ void requestNewGroup();
+ void renameFunction(Function* function);
+ void renameGroup(QTreeWidgetItem* item);
};
+
+#endif /* INCLUDE__Mainwindow_hxx_ */