fb1b1d98d3
done in Main/fg_props.cxx and available via /position/{long,lat}itude-string
156 lines
4.8 KiB
C++
156 lines
4.8 KiB
C++
|
|
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
#include "hud.hxx"
|
|
|
|
#ifdef USE_HUD_TextList
|
|
#define textString(x, y, text, digit) TextString(text, x , y ,digit)
|
|
#else
|
|
#define textString(x, y, text, digit) puDrawString(guiFnt, text, x, y)
|
|
#endif
|
|
|
|
FLTFNPTR get_func(const char *name); // FIXME
|
|
|
|
instr_label::instr_label(const SGPropertyNode *node) :
|
|
instr_item(
|
|
node->getIntValue("x"),
|
|
node->getIntValue("y"),
|
|
node->getIntValue("width"),
|
|
node->getIntValue("height"),
|
|
NULL /* node->getStringValue("data_source") */, // FIXME
|
|
node->getFloatValue("scale_data"),
|
|
node->getIntValue("options"),
|
|
node->getBoolValue("working", true),
|
|
node->getIntValue("digits")),
|
|
pformat(node->getStringValue("label_format")),
|
|
pre_str(node->getStringValue("pre_label_string")),
|
|
post_str(node->getStringValue("post_label_string")),
|
|
fontSize(fgGetInt("/sim/startup/xsize") > 1000 ? HUD_FONT_LARGE : HUD_FONT_SMALL), // FIXME
|
|
blink(node->getIntValue("blinking")),
|
|
lat(node->getBoolValue("latitude", false)),
|
|
lon(node->getBoolValue("longitude", false)),
|
|
lbox(node->getBoolValue("label_box", false)),
|
|
lon_node(fgGetNode("/position/longitude-string", true)),
|
|
lat_node(fgGetNode("/position/latitude-string", true))
|
|
{
|
|
SG_LOG(SG_INPUT, SG_INFO, "Done reading instr_label instrument "
|
|
<< node->getStringValue("name", "[unnamed]"));
|
|
|
|
set_data_source(get_func(node->getStringValue("data_source")));
|
|
|
|
int just = node->getIntValue("justification");
|
|
if (just == 0)
|
|
justify = LEFT_JUST;
|
|
else if (just == 1)
|
|
justify = CENTER_JUST;
|
|
else if (just == 2)
|
|
justify = RIGHT_JUST;
|
|
|
|
if (!strcmp(pre_str, "NULL"))
|
|
pre_str = NULL;
|
|
else if (!strcmp(pre_str, "blank"))
|
|
pre_str = " ";
|
|
|
|
const char *units = strcmp(fgGetString("/sim/startup/units"), "feet") ? " m" : " ft"; // FIXME
|
|
|
|
if (!strcmp(post_str, "blank"))
|
|
post_str = " ";
|
|
else if (!strcmp(post_str, "NULL"))
|
|
post_str = NULL;
|
|
else if (!strcmp(post_str, "units"))
|
|
post_str = units;
|
|
|
|
|
|
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 {
|
|
strcpy(format_buffer, pformat); // FIXME
|
|
}
|
|
}
|
|
|
|
|
|
void instr_label::draw(void)
|
|
{
|
|
char label_buffer[80];
|
|
int posincr;
|
|
int lenstr;
|
|
RECT scrn_rect = get_location();
|
|
|
|
if (data_available()) {
|
|
if (lat)
|
|
snprintf(label_buffer, 80, format_buffer, lat_node->getStringValue());
|
|
else if (lon)
|
|
snprintf(label_buffer, 80, format_buffer, lon_node->getStringValue());
|
|
else {
|
|
if (lbox) {// Box for label
|
|
float x = scrn_rect.left;
|
|
float y = scrn_rect.top;
|
|
float w = scrn_rect.right;
|
|
float h = HUD_TextSize;
|
|
|
|
glPushMatrix();
|
|
glLoadIdentity();
|
|
|
|
glBegin(GL_LINES);
|
|
glVertex2f(x - 2.0, y - 2.0);
|
|
glVertex2f(x + w + 2.0, y - 2.0);
|
|
glVertex2f(x + w + 2.0, y + h + 2.0);
|
|
glVertex2f(x - 2.0, y + h + 2.0);
|
|
glEnd();
|
|
|
|
glEnable(GL_LINE_STIPPLE);
|
|
glLineStipple(1, 0xAAAA);
|
|
|
|
glBegin(GL_LINES);
|
|
glVertex2f(x + w + 2.0, y - 2.0);
|
|
glVertex2f(x + w + 2.0, y + h + 2.0);
|
|
glVertex2f(x - 2.0, y + h + 2.0);
|
|
glVertex2f(x - 2.0, y - 2.0);
|
|
glEnd();
|
|
|
|
glDisable(GL_LINE_STIPPLE);
|
|
glPopMatrix();
|
|
}
|
|
sprintf(label_buffer, format_buffer, get_value() * data_scaling());
|
|
}
|
|
|
|
} else {
|
|
sprintf(label_buffer, format_buffer);
|
|
}
|
|
|
|
lenstr = getStringWidth(label_buffer);
|
|
|
|
#ifdef DEBUGHUD
|
|
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");
|
|
#endif
|
|
lenstr = strlen(label_buffer);
|
|
|
|
if (justify == RIGHT_JUST)
|
|
posincr = scrn_rect.right - lenstr;
|
|
else if (justify == CENTER_JUST)
|
|
posincr = get_span() - (lenstr / 2); // -lenstr*4;
|
|
else // justify == LEFT_JUST
|
|
posincr = 0;
|
|
|
|
if (fontSize == HUD_FONT_SMALL) {
|
|
textString(scrn_rect.left + posincr, scrn_rect.top,
|
|
label_buffer, get_digits());
|
|
|
|
} else if (fontSize == HUD_FONT_LARGE) {
|
|
textString(scrn_rect.left + posincr, scrn_rect.top,
|
|
label_buffer, get_digits());
|
|
}
|
|
}
|
|
|
|
|