diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-15 01:25:38 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-15 01:25:38 +0100 |
commit | 1f7475248b369e18114086b507ceceacdc1a0c24 (patch) | |
tree | 3c4e157ff099dc6faa8978c4e5e1558e6424e4a0 /interface.h | |
parent | 33d3311dc9fe09e8cc670dc11378980f2f1d3eab (diff) | |
download | sciteco-1f7475248b369e18114086b507ceceacdc1a0c24.tar.gz |
added Interface class to ease porting SciTECO to other platforms (toolkits)
* will support Scintilla with Scinterm/NCurses
* changes are in such a way that the generated machine code should have almost no overhead compared
to the previous implementation (at least when compiled with optimizations)
Diffstat (limited to 'interface.h')
-rw-r--r-- | interface.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/interface.h b/interface.h new file mode 100644 index 0000000..a67fbfa --- /dev/null +++ b/interface.h @@ -0,0 +1,54 @@ +#ifndef __INTERFACE_H +#define __INTERFACE_H + +#include <glib.h> + +#include <Scintilla.h> + +/* + * Base class for all user interfaces - used mereley as a class interface. + * The actual instance of the interface has the platform-specific type + * (e.g. InterfaceGtk) since we would like to have the benefits of using + * classes but avoid the calling overhead when invoking virtual methods + * on Interface pointers. + * There's only one Interface* instance in the system. + */ +class Interface { +public: + virtual void parse_args(int &argc, char **&argv) {} + + enum MessageType { + MSG_USER, + MSG_INFO, + MSG_WARNING, + MSG_ERROR + }; + virtual void msg(MessageType type, const gchar *fmt, ...) + G_GNUC_PRINTF(3, 4) = 0; + + virtual sptr_t ssm(unsigned int iMessage, + uptr_t wParam = 0, sptr_t lParam = 0) = 0; + + virtual void cmdline_update(const gchar *cmdline) = 0; + + enum PopupFileType { + POPUP_FILE, + POPUP_DIRECTORY + }; + virtual void popup_add_filename(PopupFileType type, + const gchar *filename, + bool highlight = false) = 0; + virtual void popup_show(void) = 0; + virtual void popup_clear(void) = 0; + + /* main entry point */ + virtual void event_loop(void) = 0; +}; + +#ifdef INTERFACE_GTK +#include "interface-gtk.h" +#elif defined(INTERFACE_NCURSES) +#include "interface-ncurses.h" +#endif + +#endif |