home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 110
/
EnigmaAmiga110CD.iso
/
indispensabili
/
utility
/
apdf
/
xpdf-0.80
/
ltk
/
ltkmenu.h
< prev
next >
Wrap
C/C++ Source or Header
|
1998-11-27
|
3KB
|
122 lines
//========================================================================
//
// LTKMenu.h
//
// Menus and menu items.
//
// Copyright 1997 Derek B. Noonburg.
//
//========================================================================
#ifndef LTKMENU_H
#define LTKMENU_H
#ifdef __GNUC__
#pragma interface
#endif
#include <stddef.h>
#include <X11/Xlib.h>
#include "gtypes.h"
#include "GString.h"
class LTKWindow;
class LTKMenuItem;
//------------------------------------------------------------------------
// callback type
//------------------------------------------------------------------------
// Menu item selection.
typedef void (*LTKMenuCbk)(LTKMenuItem *item);
//------------------------------------------------------------------------
// LTKMenu
//------------------------------------------------------------------------
class LTKMenu {
public:
//---------- constructor and destructor ----------
// Constructor. The extra args are the list of menu items.
LTKMenu(char *title1, int numItems1, ...);
// Destructor.
~LTKMenu();
//---------- access ----------
Window getXWindow() { return xwin; }
//---------- drawing ----------
// Post the menu. Put the top left corner as close as possible
// to <x1>,<y1>.
void post(LTKWindow *win1, int x1, int y1, LTKMenu *parent1);
//---------- event handlers ----------
void redraw();
void buttonPress(int mx, int my, int button, GBool dblClick);
void buttonRelease(int mx, int my, int button, GBool click);
void mouseMove(int mx, int my, int btn);
private:
void repost();
void unpost();
void done();
char *title; // menu title (may be NULL)
LTKMenuItem **items; // array of items
int numItems; // number of items
LTKWindow *win; // parent window
LTKMenu *parent; // parent menu, or NULL if none
int x, y; // current position
int width, height; // size of window
int itemHeight; // height of menu item
Display *display; // X display
Window xwin; // X window
GC fgGC, bgGC; // foreground/background GCs
GC brightGC, darkGC; // shaded border GCs
int currentItem; // currently selected item or -1 if none
int currentY; // y coordinate of current item
LTKMenu *currentSubmenu; // currently posted submenu
};
//------------------------------------------------------------------------
// LTKMenuItem
//------------------------------------------------------------------------
class LTKMenuItem {
public:
//---------- constructor ----------
// Constructor.
LTKMenuItem(char *text1, char *shortcut1, int itemNum1,
LTKMenuCbk cbk1, LTKMenu *submenu1);
//---------- access ----------
int getItemNum() { return itemNum; }
private:
int getWidth();
int getHeight();
char *text; // text of the menu item
char *shortcut; // shortcut for menu item
int itemNum; // item number
LTKMenuCbk cbk; // selection callback
LTKMenu *submenu; // pointer to submenu, or NULL if none
friend class LTKMenu;
};
#endif