1999-05-12 02:11:43 +00:00
|
|
|
|
|
|
|
#include "hud.hxx"
|
|
|
|
|
2000-02-15 03:30:01 +00:00
|
|
|
|
1999-05-12 02:11:43 +00:00
|
|
|
#ifdef USE_HUD_TextList
|
2001-09-19 22:23:25 +00:00
|
|
|
#define textString( x , y, text, font,digit ) TextString( text, x , y,digit ) //suma
|
1999-06-01 21:17:10 +00:00
|
|
|
#else
|
2001-09-19 22:23:25 +00:00
|
|
|
#define textString( x , y, text, font,digit ) puDrawString ( guiFnt, text, x, y ); //suma
|
1999-05-12 02:11:43 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
//======================= Top of instr_label class =========================
|
|
|
|
lon_label ::
|
|
|
|
lon_label( int x,
|
|
|
|
int y,
|
|
|
|
UINT width,
|
|
|
|
UINT height,
|
|
|
|
FLTFNPTR data_source,
|
1999-06-01 21:17:10 +00:00
|
|
|
// DBLFNPTR data_source,
|
1999-05-12 02:11:43 +00:00
|
|
|
const char *label_format,
|
|
|
|
const char *pre_label_string,
|
|
|
|
const char *post_label_string,
|
|
|
|
float scale_data,
|
1999-06-01 21:17:10 +00:00
|
|
|
// double scale_data,
|
1999-05-12 02:11:43 +00:00
|
|
|
UINT options,
|
|
|
|
fgLabelJust justification,
|
|
|
|
int font_size,
|
|
|
|
int blinking,
|
2001-09-19 22:23:25 +00:00
|
|
|
bool working,
|
|
|
|
int digit): //suma
|
1999-05-12 02:11:43 +00:00
|
|
|
instr_item( x, y, width, height,
|
2001-09-19 22:23:25 +00:00
|
|
|
data_source, scale_data,options, working,digit ), //suma
|
1999-05-12 02:11:43 +00:00
|
|
|
pformat ( label_format ),
|
|
|
|
pre_str ( pre_label_string ),
|
|
|
|
post_str ( post_label_string ),
|
|
|
|
justify ( justification ),
|
|
|
|
fontSize ( font_size ),
|
|
|
|
blink ( blinking )
|
|
|
|
{
|
|
|
|
if( pre_str != NULL) {
|
|
|
|
if( post_str != NULL ) {
|
|
|
|
sprintf( format_buffer, "%s%s%s", pre_str, pformat, post_str );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sprintf( format_buffer, "%s%s", pre_str, pformat );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if( post_str != NULL ) {
|
|
|
|
sprintf( format_buffer, "%s%s", pformat, post_str );
|
|
|
|
}
|
|
|
|
} // else do nothing if both pre and post strings are nulls. Interesting.
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// I put this in to make it easy to construct a class member using the current
|
|
|
|
// C code.
|
|
|
|
|
|
|
|
|
|
|
|
lon_label :: ~lon_label()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy constructor
|
|
|
|
lon_label :: lon_label( const lon_label & image) :
|
|
|
|
instr_item((const instr_item &)image),
|
|
|
|
pformat ( image.pformat ),
|
|
|
|
pre_str ( image.pre_str ),
|
|
|
|
post_str ( image.post_str ),
|
|
|
|
blink ( image.blink )
|
|
|
|
{
|
|
|
|
if( pre_str != NULL) {
|
|
|
|
if( post_str != NULL ) {
|
|
|
|
sprintf( format_buffer, "%s%s%s", pre_str, pformat, post_str );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sprintf( format_buffer, "%s%s", pre_str, pformat );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if( post_str != NULL ) {
|
|
|
|
sprintf( format_buffer, "%s%s", pformat, post_str );
|
|
|
|
}
|
|
|
|
} // else do nothing if both pre and post strings are nulls. Interesting.
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
lon_label & lon_label ::operator = (const lon_label & rhs )
|
|
|
|
{
|
|
|
|
if( !(this == &rhs)) {
|
|
|
|
instr_item::operator = (rhs);
|
|
|
|
pformat = rhs.pformat;
|
|
|
|
fontSize = rhs.fontSize;
|
|
|
|
blink = rhs.blink;
|
|
|
|
justify = rhs.justify;
|
|
|
|
pre_str = rhs.pre_str;
|
|
|
|
post_str = rhs.post_str;
|
1999-06-01 21:17:10 +00:00
|
|
|
strcpy(format_buffer,rhs.format_buffer);
|
1999-05-12 02:11:43 +00:00
|
|
|
}
|
1999-06-01 21:17:10 +00:00
|
|
|
return *this;
|
1999-05-12 02:11:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// draw Draws a label anywhere in the HUD
|
|
|
|
//
|
|
|
|
//
|
|
|
|
void lon_label ::
|
|
|
|
draw( void ) // Required method in base class
|
|
|
|
{
|
|
|
|
// char format_buffer[80];
|
|
|
|
char label_buffer[80];
|
|
|
|
int posincr;
|
|
|
|
int lenstr;
|
|
|
|
RECT scrn_rect = get_location();
|
|
|
|
float lon = get_value();
|
|
|
|
// double lon = get_value();
|
|
|
|
if( data_available() ) {
|
1999-06-01 21:17:10 +00:00
|
|
|
// char *lonstring = coord_format_lon(lon);
|
1999-05-12 02:11:43 +00:00
|
|
|
lenstr = sprintf( label_buffer, format_buffer, coord_format_lon(lon) );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
lenstr = sprintf( label_buffer, format_buffer );
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef DEBUGHUD
|
2001-03-24 06:03:11 +00:00
|
|
|
fgPrintf( SG_COCKPIT, SG_DEBUG, format_buffer );
|
|
|
|
fgPrintf( SG_COCKPIT, SG_DEBUG, "\n" );
|
|
|
|
fgPrintf( SG_COCKPIT, SG_DEBUG, label_buffer );
|
|
|
|
fgPrintf( SG_COCKPIT, SG_DEBUG, "\n" );
|
1999-05-12 02:11:43 +00:00
|
|
|
#endif
|
1999-06-01 21:17:10 +00:00
|
|
|
|
|
|
|
lenstr = getStringWidth(label_buffer);
|
|
|
|
|
|
|
|
if( justify == RIGHT_JUST ) {
|
|
|
|
posincr = scrn_rect.right - lenstr;
|
|
|
|
}else if( justify == CENTER_JUST ) {
|
2000-05-13 00:02:43 +00:00
|
|
|
posincr = get_span() - (lenstr/2);
|
1999-06-01 21:17:10 +00:00
|
|
|
} else {
|
|
|
|
// justify == LEFT_JUST
|
2000-05-13 00:02:43 +00:00
|
|
|
posincr = 0;
|
1999-06-01 21:17:10 +00:00
|
|
|
}
|
|
|
|
|
1999-05-12 02:11:43 +00:00
|
|
|
if( fontSize == SMALL ) {
|
|
|
|
textString( scrn_rect.left + posincr, scrn_rect.top,
|
2001-09-19 22:23:25 +00:00
|
|
|
label_buffer, GLUT_BITMAP_8_BY_13, get_digits()); //suma
|
1999-05-12 02:11:43 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
if( fontSize == LARGE ) {
|
|
|
|
textString( scrn_rect.left + posincr, scrn_rect.top,
|
2001-09-19 22:23:25 +00:00
|
|
|
label_buffer, GLUT_BITMAP_9_BY_15, get_digits()); //suma
|
1999-05-12 02:11:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|