Files
Aldbg/interface/memory/MemoryView.hpp
2025-02-24 20:39:55 +08:00

57 lines
1.7 KiB
C++

#include <gtkmm.h>
#include "../../core/MemoryMap.hpp"
class MemoryView : public Gtk::TreeView
{
private:
Glib::RefPtr<Gtk::ListStore> _memoryViewStore;
public:
void GetSelection(uint64_t& address)
{
Gtk::TreeModel::Row row = *get_selection()->get_selected();
row.get_value(0, address);
}
std::vector<MapEntire> _map;
MemoryView(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &refBuilder) : Gtk::TreeView(cobject),
_memoryViewStore(std::dynamic_pointer_cast<Gtk::ListStore>(get_model()))
{
}
void set_data(std::vector<MapEntire>& list)
{
_map = list;
_memoryViewStore->clear();
for(auto e : list)
{
auto mm = _memoryViewStore->append();
Gtk::TreeModel::Row row = *mm;
char startAddr[32], endAddr[32], offset[32];
std::string permission;
permission += (e.access & READ ? "r" : "-");
permission += (e.access & WRITE ? "w" : "-");
permission += (e.access & EXECUTE ? "x" : "-");
permission += (e.access & PRIVATE ? "p" : "-");
permission += (e.access & SHARED ? "s" : "-");
sprintf(startAddr, "%16lx", e.startAddress);
sprintf(endAddr, "%16lx", e.endAddress);
sprintf(offset, "%8x", e.offset);
row.set_value(0, std::string(startAddr));
row.set_value(1, std::string(endAddr));
row.set_value(2, permission);
row.set_value(3, std::string(offset));
row.set_value(4, std::string(e.path));
}
}
};