#ifndef __KONST_UI_MENU_H_
#define __KONST_UI_MENU_H_
#include "conf.h"
#include "conscommon.h"
#include "textwindow.h"
#include <string>
#include <vector>
__KTOOL_BEGIN_NAMESPACE
#define ITEM_NORM 0
#define ITEM_SEP 1
#define ITEM_LINE 2
class verticalmenu: public abstractuicontrol {
private:
struct verticalmenuitem {
string text;
int color, kind;
void *ref;
};
vector<verticalmenuitem> items;
textwindow window;
int ncolor, scolor;
int curelem, firstdisp, lastkey;
void initmembers();
bool shownelem(int n, int selected);
void showall();
void checkclear();
void intredraw();
public:
bool clearonfocuslost;
bool cycled;
bool exitonedges;
int (*otherkeys)(verticalmenu &caller, int k);
// function called on pressing of non-standard menu keys
// should return a number of selected menu item or -1 to
// continue browsing
void (*idle)(verticalmenu &caller);
verticalmenu(int px1, int py1, int px2, int py2, int pncolor, int pscolor);
verticalmenu(int pncolor = 0, int pscolor = 0);
~verticalmenu();
// following special characters are valid in the items text:
// \001 == switch the color attribute
// \002 == HLINE [ - ]
// \003 == VLINE [ | ]
// \004 == RTEE [ -| ]
// \005 == LTEE [ |- ]
// \006 == ULCORNER [ |^ ]
// \007 == LLCORNER [ |_ ]
// \008 == LRCORNER [ _| ]
// \009 == URCORNER [ ^| ]
void additemf(const char *fmt, ...);
void additem(const string &text);
void additem(int color, void *ref, const string &text);
void additemf(int color, void *ref, const char *fmt, ...);
void additem(int color, int ref, const string &text);
void additemf(int color, int ref, const char *fmt, ...);
void addline();
void addline(int color, const char *fmt = 0, ...);
void clear();
void redraw();
bool empty();
int getcount();
int getlastkey();
void *getref(int n);
int getpos();
void getpos(int &cur, int &first);
void setpos(int cur, int first = -1);
void setitemcolor(int pos, int color);
void setwindow(textwindow nwindow);
void remove(int pos);
int open();
void scale();
void close();
void setcoords(int nx1, int ny1, int nx2, int ny2);
void setcolor(int pncolor, int pscolor);
friend class horizontalmenu;
};
struct horizontalmenuitem {
string text;
int color;
verticalmenu menu;
horizontalmenuitem();
horizontalmenuitem(const horizontalmenuitem &a);
~horizontalmenuitem();
};
class horizontalmenu: public abstractuicontrol {
protected:
vector<horizontalmenuitem> menus;
int ncolor, scolor, fcolor, coordy, coordx, selected;
static int menu_otherkeys(verticalmenu &ref, int k);
void draw();
void moveelem(int old);
void saveline();
void restoreline();
int getx(int n);
int menulen(int n);
public:
bool (*otherkeys)(horizontalmenu &caller, int k);
void (*idle)(horizontalmenu &caller);
horizontalmenu(int x, int y, int normcolor, int selcolor, int framecolor);
horizontalmenu();
~horizontalmenu();
void additemf(int color, const char *fmt, ...);
void additemf(const char *fmt, ...);
void additem(int color, const string &text);
void additem(const string &text);
verticalmenu *pulldown(int n);
virtual void redraw();
bool open(int *hor, int *pulld);
void close();
};
__KTOOL_END_NAMESPACE
#ifdef __KTOOL_USE_NAMESPACES
using ktool::verticalmenu;
using ktool::horizontalmenu;
#endif
#endif
syntax highlighted by Code2HTML, v. 0.9.1