home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
g
/
gina15.zip
/
demos
/
sleuth
/
SleuthView.C
< prev
next >
Wrap
Text File
|
1992-02-27
|
5KB
|
177 lines
// This may look like C code, but it is really -*- C++ -*-
// Module : SleuthView.C Version 1.2
// LastSCCS : 2/26/92 16:38:21
// LastEdit : "Fri Oct 18 09:26:57 1991"
// Description :
// Author :
// Copyright : GMD Schloss Birlinghoven
SleuthView::
SleuthView(SleuthDocument* doc)
: GnView( doc )
{
setR_width( TableWidth() + 2 * TableHorizontalOffset() );
setR_height( TableHeight() + 2 * TableVerticalOffset() );
setR_resizePolicy(XmRESIZE_NONE);
document = doc;
}
void SleuthView::
draw(int, int, int, Dimension, Dimension)
{
DrawEmptyTable();
}
TableArea SleuthView::
WhatsUnder(int x, int y, int &shape, int &color, int &value)
{
if(x < TableX() || y < TableY() ||
x >= TableMaxX() || y >= TableMaxY())
return eTableNothing;
if(x < CardShapeX(0)) {
if(y < CardColorColumnY(0)) {
return ePlayer;
} else {
color = (y - CardColorColumnY(0))/TableFieldHeight();
return eColorColumn;
}
} else {
if( y < CardColorColumnY(0) ) {
shape = (x - CardShapeX(0))/CardShapeWidth();
if( y < CardValueY() ) {
return eShapeRow;
} else {
value = ((x - CardShapeX(0)) % CardShapeWidth())
/ TableFieldWidth();
return eValueRow;
}
} else {
x -= CardShapeX(0);
shape = x/CardShapeWidth();
color = (y - CardColorColumnY(0))/TableFieldHeight();
value = (x % CardShapeWidth())/TableFieldWidth();
return eField;
}
}
}
void SleuthView::
DrawFilledString(char *string, unsigned int length,
Pixel foreground_color, Pixel background_color,
int x, int y, Dimension width, Dimension height,
unsigned char alignment, Dimension offset)
{
XSetForeground(get_display(), text_gc, background_color);
XSetBackground(get_display(), text_gc, foreground_color);
XFillRectangle(get_display(), x_window, text_gc, x, y, width, height);
XSetForeground(get_display(), text_gc, foreground_color);
XSetBackground(get_display(), text_gc, background_color);
DrawStringAligned(text_gc, string, length, x, y, width, height,
alignment, offset);
}
void SleuthView::
DrawEmptyTable()
{
//cout << "DrawEmptyTable " "\n";
int i,j;
XGCValues val;
val.foreground = foreground;
val.background = background;
val.line_width = TableLineWidth() == 1 ? 0 : TableLineWidth();
change_gc(&val, GCForeground | GCBackground | GCLineWidth );
// Horizontal lines
draw_line(CardShapeX(0), CardShapeY(), TableMaxX(), CardShapeY());
draw_line(CardShapeX(0), CardValueY(), TableMaxX(), CardValueY());
for( i = 0; i < 5; i++ )
draw_line(CardColorColumnX(), FieldY( i), TableMaxX(), FieldY( i));
// Vertical lines
draw_line(CardColorColumnX(), CardColorColumnY(0),
CardColorColumnX(), TableMaxY());
for( i = 0; i < 4; i++)
draw_line(CardShapeX(i), CardShapeY(), CardShapeX(i), TableMaxY());
for( i = 0; i < 3; i++) {
draw_line(CardValueX(i, 1), CardValueY(),
CardValueX(i, 1), TableMaxY());
draw_line(CardValueX(i, 2), CardValueY(),
CardValueX(i, 2), TableMaxY());
}
// Texts
for( i = 0; i < 4; i++ )
DrawName(i);
for( i = 0; i < 3; i++ ) {
DrawShape(i);
for( j = 0; j < 3; j++ )
DrawValue(i, j);
}
}
void SleuthView::
DrawName(int name, Boolean reverse)
{
DrawFilledString(document->ColorName(name),
strlen(document->ColorName(name)),
reverse ? background : foreground,
reverse ? foreground : background,
InnerX(CardColorColumnX()),
InnerY(CardColorColumnY(name)),
InnerWidth(CardColorColumnWidth()),
InnerHeight(TableFieldHeight()),
XmALIGNMENT_BEGINNING,
StringLeftOffset());
}
void SleuthView::
DrawShape(int shape, Boolean reverse)
{
DrawFilledString(document->ShapeName(shape),
strlen(document->ShapeName(shape)),
reverse ? background : foreground,
reverse ? foreground : background,
InnerX(CardShapeX(shape)),
InnerY(CardShapeY()),
InnerWidth(CardShapeWidth()),
InnerHeight(TableFieldHeight()));
}
void SleuthView::
DrawValue(int shape, int value, Boolean reverse)
{
DrawFilledString(document->ValueName(value),
strlen(document->ValueName(value)),
reverse ? background : foreground,
reverse ? foreground : background,
InnerX(CardValueX(shape, value)),
InnerY(CardValueY()),
InnerWidth(TableFieldWidth()),
InnerHeight(TableFieldHeight()));
}