📄 uifltk.h
字号:
/*************************************************************************** DSemu - The Next Generation ** Fltk user interface: Class definition [uiflkt.h] ** Copyright Imran Nazar, 2005; released under the BSD public licence. ***************************************************************************/#ifndef __UIFLTK_H_#define __UIFLTK_H_#include <vector>#include "defs.h"#include "plggui.h"#include "msgqueue.h"#include "plgcpu.h"#include "plgmmu32.h"#include "plggpu.h"#include "plgapu.h"#include <FL/Fl.H>#include <FL/Fl_Double_Window.H>#include <FL/Fl_Menu_Item.H>#include <FL/Fl_Menu_Bar.H>#include <FL/Fl_Box.H>#include <FL/Fl_Group.H>#include <FL/Fl_File_Chooser.H>#include <FL/Fl_Text_Buffer.H>#include <FL/Fl_Text_Display.H>#include <FL/Fl_Hold_Browser.H>#include <FL/Fl_Group.H>#include <FL/Fl_Tabs.H>class UIFltk : public GUIPlugin{ public: UIFltk(std::string name, REQPTR req, UNREQPTR unreq); ~UIFltk(); PLUGININFO *getinfo(); void reset(); void release(); void status(int,int); int run(); // Wrapper functions for the equivalents in UI int subwinCreate(int, int, const char*, u32*); void subwinRefresh(int); uint64_t getTimestamp(); void eventPush(u32, int, vfptr, void*); private: //---Plugin-generic stuff std::string pName, pClass; static REQPTR pRequest; static UNREQPTR pUnrequest; static PLUGININFO pInfo; static std::string pluginName; // This is the seperation: the class above is a plugin, the // UI itself is a Window. class UI : public Fl_Double_Window { public: UI(int, int, int, int, const char*); ~UI(); int handle(int); void draw(); // Overload draw to do our own stuff void execFrame(); void execStep(); // Functions that receive the wrap from above int subwinCreate(int, int, const char*, u32*); void subwinRefresh(int); void eventPush(u32, int, vfptr, void*); uint64_t getTimestamp(); private: static std::string ROMpath; static u8 *outbuf; // All the plugins that'll be used static CPUPlugin *cpu, *cpuSub; static MMU32Plugin *mmu, *mmuSub; static GPUPlugin *gpu; static APUPlugin *apu; static Plugin *timer; static int loaded, running, stepping, DSmode; static int cpuStatMode, mmuDumpAddr, mmuDumpMode; static uint64_t timestamp; static std::deque<EventMsg> events; static int frames; // Key handling and I/O access static u16 keys; static u8 keyRdB(u32); static u16 keyRdH(u32); static u32 keyRdW(u32); static void keyWrB(u32, u8); static void keyWrH(u32, u16); static void keyWrW(u32, u32); static const Fl_Menu_Item menuInit[]; static std::vector<Fl_Menu_Item> menu; static Fl_Menu_Bar *mbar; static Fl_Box *sbarl, *sbarr; static Fl_Box *display; static Fl_Group *mbarcon; // Callbacks static void cbOpenGBA(Fl_Widget*, void*); static void cbOpenDS(Fl_Widget*, void*); static void cbClose(Fl_Widget*, void*); static void cbExit(Fl_Widget*, void*); static void cbRun(Fl_Widget*, void*); static void cbReset(Fl_Widget*, void*); static void cbBkpt(Fl_Widget*, void*); static void cbStep(Fl_Widget*, void*); static void cbAStep(Fl_Widget*, void*); static void cbCpuStatARM(Fl_Widget*, void*); static void cbCpuStatThumb(Fl_Widget*, void*); static void cbCpuStatAuto(Fl_Widget*, void*); static void cbMmuDumpB(Fl_Widget*, void*); static void cbMmuDumpH(Fl_Widget*, void*); static void cbMmuDumpW(Fl_Widget*, void*); static void cbMmuAddr(Fl_Widget*, void*); static void cbLog(Fl_Widget*, void*); static void cbFPScount(void*); static void cbAbout(Fl_Widget*, void*); inline void cbOpenGBAI(); inline void cbOpenDSI(); inline void cbCloseI(); inline void cbExitI(); inline void cbRunI(); inline void cbResetI(); inline void cbBkptI(); inline void cbStepI(); static void cbAStepI(void*); inline void cbCpuStatARMI(); inline void cbCpuStatThumbI(); inline void cbCpuStatAutoI(); inline void cbMmuDumpBI(); inline void cbMmuDumpHI(); inline void cbMmuDumpWI(); inline void cbMmuAddrI(); inline void cbLogI(); inline void cbAboutI(); // Log display window definition class LogWindow : public Fl_Double_Window { public: LogWindow(int, int, void*); ~LogWindow(); int handle(int); private: static void cb(void*); static Fl_Window *mainWnd; static Fl_Text_Buffer *buf; static Fl_Text_Display *text; static u32 sizeOld, sizeNew; }; static LogWindow *logWnd; static int logVisible; // The About box class AboutWindow : public Fl_Double_Window { public: AboutWindow(int, int, void*); ~AboutWindow(); int handle(int); private: static void cb(void*); static void cbOK(Fl_Widget*, void*); inline void cbOKI(); static const char *aboutTxt; static Fl_Window *mainWnd; static Fl_Text_Buffer *buf; static Fl_Text_Display *text; static Fl_Button *ok; }; static AboutWindow *aboutWnd; static int aboutVisible; // Any plugin-specific subwindows become one of these class SubWindow : public Fl_Double_Window { public: SubWindow(int, int, void*); ~SubWindow(); int handle(int); void draw(); u32 *buffer; int visible; int winID; const char *title; private: Fl_Window *mainWnd; int xdim, ydim; }; // The map of subwindows static std::map<int, SubWindow*> subwindows; static void cbSub(Fl_Widget*, void*); inline void cbSubI(const char*); // Breakpoint dialog window class BkptWindow : public Fl_Window { public: BkptWindow(int, int, void*); ~BkptWindow(); int handle(int); private: static Fl_Window *mainWnd; static Fl_Hold_Browser *browsemain, *browsesub; static Fl_Group *grpmain, *grpsub; static Fl_Button *del; static Fl_Button *add; static Fl_Button *ok; static Fl_Tabs *tabs; static int which; static void cbAdd(Fl_Widget*, void*); static void cbDel(Fl_Widget*, void*); static void cbOK(Fl_Widget*, void*); static void cbTabs(Fl_Widget*, void*); inline void cbAddI(); inline void cbDelI(); inline void cbOKI(); }; static BkptWindow *bkptWnd; static int bkptVisible; }; // The UI that the base class'll be using static UI *ui;};// Menu offsets#define MENU_FILE 0#define MENU_FILE_OPENGBA 1#define MENU_FILE_OPENDS 2#define MENU_FILE_CLOSE 3#define MENU_FILE_EXIT 4#define MENU_DEBUG 6#define MENU_DEBUG_RUN 7#define MENU_DEBUG_RESET 8#define MENU_DEBUG_BKPT 9#define MENU_DEBUG_STEP 10#define MENU_DEBUG_ASTEP 11#define MENU_DEBUG_CPUMODE 12#define MENU_DEBUG_CPUMODE_ARM 13#define MENU_DEBUG_CPUMODE_THUMB 14#define MENU_DEBUG_CPUMODE_AUTO 15#define MENU_DEBUG_MMUMODE 17#define MENU_DEBUG_MMUMODE_B 18#define MENU_DEBUG_MMUMODE_H 19#define MENU_DEBUG_MMUMODE_W 20#define MENU_DEBUG_MMUADDR 22#define MENU_VIEW 24#define MENU_VIEW_LOG 25#define MENU_OPT (27+subwindows.size())#define MENU_OPT_CONF (28+subwindows.size())#define MENU_HELP (30+subwindows.size())#define MENU_HELP_ABOUT (31+subwindows.size())#endif//__UIFLTK_H_/*** EOF: uifltk.h *******************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -