X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fhud_labl.cxx;h=d19fed05696da5f33f462dcbf281898f00577699;hb=5f134cdec82692e4a414af302a8f30c3825ebe64;hp=6012e58bd7ba0be7df5604475bca376983ee086a;hpb=ed7ee6b53478bd39807315598a00238a01f90750;p=flightgear.git diff --git a/src/Cockpit/hud_labl.cxx b/src/Cockpit/hud_labl.cxx index 6012e58bd..d19fed056 100644 --- a/src/Cockpit/hud_labl.cxx +++ b/src/Cockpit/hud_labl.cxx @@ -1,4 +1,7 @@ -#include
+ +#ifdef HAVE_CONFIG_H +# include +#endif #include "hud.hxx" @@ -8,13 +11,7 @@ #define textString(x, y, text, digit) puDrawString(guiFnt, text, x, y) #endif -// FIXME -extern float get_aux1(), get_aux2(), get_aux3(), get_aux4(), get_aux5(), get_aux6(); -extern float get_aux7(), get_aux8(), get_aux9(), get_aux10(), get_aux11(), get_aux12(); -extern float get_aux13(), get_aux14(), get_aux15(), get_aux16(), get_aux17(), get_aux18(); -extern float get_Ax(), get_speed(), get_mach(), get_altitude(), get_agl(), get_frame_rate(); -extern float get_heading(), get_fov(), get_vfc_tris_culled(), get_vfc_tris_drawn(), get_aoa(); -extern float get_latitude(), get_anzg(), get_longitude(), get_throttleval(); +FLTFNPTR get_func(const char *name); // FIXME instr_label::instr_label(const SGPropertyNode *node) : instr_item( @@ -25,95 +22,21 @@ instr_label::instr_label(const SGPropertyNode *node) : NULL /* node->getStringValue("data_source") */, // FIXME node->getFloatValue("scale_data"), node->getIntValue("options"), - node->getBoolValue("working"), + 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)) + 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", "[none]")); - - string loadfn = node->getStringValue("data_source"); // FIXME - float (*load_fn)(void); -#ifdef ENABLE_SP_FMDS - if (loadfn == "aux1") - load_fn = get_aux1; - else if (loadfn == "aux2") - load_fn = get_aux2; - else if (loadfn == "aux3") - load_fn = get_aux3; - else if (loadfn == "aux4") - load_fn = get_aux4; - else if (loadfn == "aux5") - load_fn = get_aux5; - else if (loadfn == "aux6") - load_fn = get_aux6; - else if (loadfn == "aux7") - load_fn = get_aux7; - else if (loadfn == "aux8") - load_fn = get_aux8; - else if (loadfn == "aux9") - load_fn = get_aux9; - else if (loadfn == "aux10") - load_fn = get_aux10; - else if (loadfn == "aux11") - load_fn = get_aux11; - else if (loadfn == "aux12") - load_fn = get_aux12; - else if (loadfn == "aux13") - load_fn = get_aux13; - else if (loadfn == "aux14") - load_fn = get_aux14; - else if (loadfn == "aux15") - load_fn = get_aux15; - else if (loadfn == "aux16") - load_fn = get_aux16; - else if (loadfn == "aux17") - load_fn = get_aux17; - else if (loadfn == "aux18") - load_fn = get_aux18; - else -#endif - if (loadfn == "ax") - load_fn = get_Ax; - else if (loadfn == "speed") - load_fn = get_speed; - else if (loadfn == "mach") - load_fn = get_mach; - else if (loadfn == "altitude") - load_fn = get_altitude; - else if (loadfn == "agl") - load_fn = get_agl; - else if (loadfn == "framerate") - load_fn = get_frame_rate; - else if (loadfn == "heading") - load_fn = get_heading; - else if (loadfn == "fov") - load_fn = get_fov; - else if (loadfn == "vfc_tris_culled") - load_fn = get_vfc_tris_culled; - else if (loadfn == "vfc_tris_drawn") - load_fn = get_vfc_tris_drawn; - else if (loadfn == "aoa") - load_fn = get_aoa; - else if (loadfn == "latitude") - load_fn = get_latitude; - else if (loadfn == "anzg") - load_fn = get_anzg; - else if (loadfn == "longitude") - load_fn = get_longitude; - else if (loadfn =="throttleval") - load_fn = get_throttleval; - else - load_fn = 0; - - set_data_source(load_fn); + << node->getStringValue("name", "[unnamed]")); + + set_data_source(get_func(node->getStringValue("data_source"))); int just = node->getIntValue("justification"); if (just == 0) @@ -123,32 +46,24 @@ instr_label::instr_label(const SGPropertyNode *node) : else if (just == 2) justify = RIGHT_JUST; - if (!strcmp(pre_str, "NULL")) - pre_str = NULL; - else if (!strcmp(pre_str, "blank")) + string pre_str(node->getStringValue("pre_label_string")); + if (pre_str== "NULL") + pre_str.clear(); + else if (pre_str == "blank") pre_str = " "; const char *units = strcmp(fgGetString("/sim/startup/units"), "feet") ? " m" : " ft"; // FIXME - if (!strcmp(post_str, "blank")) + string post_str(node->getStringValue("post_label_string")); + if (post_str== "NULL") + post_str.clear(); + else if (post_str == "blank") post_str = " "; - else if (!strcmp(post_str, "NULL")) - post_str = NULL; - else if (!strcmp(post_str, "units")) + else if (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 - } + format_buffer = pre_str + pformat; + format_buffer += post_str; } @@ -159,11 +74,12 @@ void instr_label::draw(void) int lenstr; RECT scrn_rect = get_location(); + memset( label_buffer, 0, sizeof( label_buffer)); if (data_available()) { if (lat) - sprintf(label_buffer, format_buffer, coord_format_lat(get_value())); + snprintf(label_buffer, sizeof( label_buffer)-1, format_buffer.c_str(), lat_node->getStringValue()); else if (lon) - sprintf(label_buffer, format_buffer, coord_format_lon(get_value())); + snprintf(label_buffer, sizeof( label_buffer)-1, format_buffer.c_str(), lon_node->getStringValue()); else { if (lbox) {// Box for label float x = scrn_rect.left; @@ -194,11 +110,11 @@ void instr_label::draw(void) glDisable(GL_LINE_STIPPLE); glPopMatrix(); } - sprintf(label_buffer, format_buffer, get_value() * data_scaling()); + snprintf(label_buffer, sizeof(label_buffer)-1, format_buffer.c_str(), get_value() * data_scaling()); } } else { - sprintf(label_buffer, format_buffer); + snprintf(label_buffer, sizeof( label_buffer) -1, format_buffer.c_str()); } lenstr = getStringWidth(label_buffer); @@ -227,5 +143,3 @@ void instr_label::draw(void) label_buffer, get_digits()); } } - -