home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 110
/
EnigmaAmiga110CD.iso
/
indispensabili
/
utility
/
apdf
/
xpdf-0.80
/
ltk
/
ltkwidget.h
< prev
next >
Wrap
C/C++ Source or Header
|
1998-11-27
|
5KB
|
162 lines
//========================================================================
//
// LTKWidget.h
//
// Widget base class.
//
// Copyright 1996 Derek B. Noonburg
//
//========================================================================
#ifndef LTKWIDGET_H
#define LTKWIDGET_H
#ifdef __GNUC__
#pragma interface
#endif
#include <stddef.h>
#include <X11/Xlib.h>
#include "gtypes.h"
#include "GString.h"
#include "LTKWindow.h"
//------------------------------------------------------------------------
// callback types
//------------------------------------------------------------------------
// Mouse button press/release.
typedef void (*LTKButtonPressCbk)(LTKWidget *widget, int widgetNum,
int mx, int my, int button, GBool dblClick);
typedef void (*LTKButtonReleaseCbk)(LTKWidget *widget, int widgetNum,
int mx, int my, int button, GBool click);
// Mouse move.
typedef void (*LTKMouseMoveCbk)(LTKWidget *widget, int widgetNum,
int mx, int my);
// Mouse drag.
typedef void (*LTKMouseDragCbk)(LTKWidget *widget, int widgetNum,
int mx, int my, int button);
// Boolean value change.
typedef void (*LTKBoolValCbk)(LTKWidget *widget, int widgetNum, GBool on);
// Integer value change.
typedef void (*LTKIntValCbk)(LTKWidget *widget, int widgetNum, int val);
// String value change.
typedef void (*LTKStringValCbk)(LTKWidget *widget, int widgetNum,
GString *val);
// Redraw widget.
typedef void (*LTKRedrawCbk)(LTKWidget *widget, int widgetNum);
//------------------------------------------------------------------------
// LTKWidget
//------------------------------------------------------------------------
class LTKWidget {
public:
//---------- constructor and destructor ----------
// Constructor.
LTKWidget(char *name1, int widgetNum1);
// Destructor.
virtual ~LTKWidget();
//---------- access ----------
virtual GBool isBox() { return gFalse; }
char *getName() { return name; }
virtual void setParent(LTKWindow *parent1);
LTKWindow *getParent() { return parent; }
virtual void setCompoundParent(LTKWidget *compParent1);
LTKWidget *getCompoundParent() { return compParent; }
int getWidth() { return width; }
int getHeight() { return height; }
Window getXWindow() { return xwin; }
virtual long getEventMask();
Display *getDisplay() { return parent->getDisplay(); }
int getScreenNum() { return parent->getScreenNum(); }
unsigned long getFgColor() { return parent->getFgColor(); }
unsigned long getBgColor() { return parent->getBgColor(); }
GC getFgGC() { return parent->getFgGC(); }
GC getBgGC() { return parent->getBgGC(); }
GC getBrightGC() { return parent->getBrightGC(); }
GC getDarkGC() { return parent->getDarkGC(); }
GC getXorGC() { return parent->getXorGC(); }
XFontStruct *getXFontStruct() { return parent->getXFontStruct(); }
LTKWidget *getNext() { return next; }
LTKWidget *setNext(LTKWidget *next1) { return next = next1; }
//---------- special access ----------
void setButtonPressCbk(LTKButtonPressCbk cbk) { btnPressCbk = cbk; }
void setButtonReleaseCbk(LTKButtonReleaseCbk cbk) { btnReleaseCbk = cbk; }
void setMouseMoveCbk(LTKMouseMoveCbk cbk) { mouseMoveCbk = cbk; }
void setMouseDragCbk(LTKMouseDragCbk cbk) { mouseDragCbk = cbk; }
//---------- layout ----------
// Compute minimum width and height of widget.
virtual void layout1() = 0;
// Layout widget internals at specified position, with specified size.
virtual void layout2(int x1, int y1, int width1, int height1);
// Construct the X window(s) for widget and children. If windows
// are already constructed, move/resize them as necessary.
virtual void layout3();
// Map the X window(s) for widget and children.
virtual void map();
//---------- drawing ----------
// Clear the widget's window to the background color.
virtual void clear();
// Draw the widget and its children.
virtual void redraw() = 0;
// Draw the window background (only used by boxes, compound widgets,
// etc., which draw directly in the window).
virtual void redrawBackground() {}
//---------- callbacks and event handlers ----------
virtual void buttonPress(int mx, int my, int button, GBool dblClick);
virtual void buttonRelease(int mx, int my, int button, GBool click);
virtual void activate(GBool on) {}
virtual void activateDefault() {}
virtual void mouseMove(int mx, int my, int btn);
virtual void keyPress(KeySym key, Guint modifiers, char *s, int n) {}
virtual void repeatEvent() {}
virtual void clearSelection() {}
virtual void paste(GString *str) {}
protected:
char *name; // name (for lookup within window)
int widgetNum; // widget number (for callbacks)
LTKWindow *parent; // parent window
LTKWidget *compParent; // parent compound widget
int x, y; // current position (in window)
int width, height; // current size
LTKButtonPressCbk btnPressCbk; // mouse button press callback
LTKButtonReleaseCbk btnReleaseCbk; // mouse button release callback
LTKMouseMoveCbk mouseMoveCbk; // mouse move callback
LTKMouseDragCbk mouseDragCbk; // mouse drag callback
Window xwin; // X window (not used for Boxes)
GBool mapped; // set when mapped
LTKWidget *next; // LTKWindow keeps a list of widgets
};
#endif