#ifndef UDB_TUI_ULMAPP_HPP
#define UDB_TUI_ULMAPP_HPP
#include <cstdint>
#include <final/final.h>
#include "codeview.hpp"
#include "cpuview.hpp"
#include "memview.hpp"
#include "ioview.hpp"
class UlmApp final : public finalcut::FApplication
{
public:
UlmApp(const int &, char *[]);
void openCpuView(finalcut::FWidget *);
void openCodeView(finalcut::FWidget *);
void openMemView(finalcut::FWidget *);
void openIOView(finalcut::FWidget *);
void step();
void run();
void terminate();
void notify();
private:
void onTimer(finalcut::FTimerEvent *);
finalcut::FMenuBar menuBar;
finalcut::FStatusBar statusbar;
// menu group 'ULM Debug'
finalcut::FMenu ulm;
finalcut::FMenuItem ulmAbout;
finalcut::FMenuItem ulmLine1;
finalcut::FMenuItem ulmPref;
finalcut::FMenuItem ulmLine2;
finalcut::FMenuItem ulmQuit;
// menu group 'File'
finalcut::FMenu file;
finalcut::FMenuItem filePrg;
// menu group 'View'
finalcut::FMenu view;
finalcut::FMenuItem viewCpu;
finalcut::FMenuItem viewPrg;
finalcut::FMenuItem viewMem;
finalcut::FMenuItem viewIO;
// menu group 'Debug'
finalcut::FMenu debug;
finalcut::FMenuItem debugRun;
finalcut::FMenuItem debugStep;
finalcut::FMenuItem debugTerminate;
std::unique_ptr<CpuView> cpuView{ nullptr };
std::unique_ptr<CodeView> codeView{ nullptr };
std::unique_ptr<MemView> memView{ nullptr };
std::unique_ptr<IOView> ioView{ nullptr };
int timerId{0};
};
#endif // UDB_TUI_ULMAPP_HPP