- remove hud.cxx/readLabel and let the instr_label read its properties
- remove unused copy constructor - fix potential crash bug
This commit is contained in:
parent
812275cf15
commit
ddda2c68d5
4 changed files with 190 additions and 330 deletions
|
@ -84,8 +84,6 @@ int HUD_style = 0;
|
|||
float HUD_matrix[16];
|
||||
|
||||
|
||||
//$$$ begin - added, Neetha, 28 Nov 2k
|
||||
|
||||
static string name;
|
||||
static int x;
|
||||
static int y;
|
||||
|
@ -105,13 +103,9 @@ static int dp_showing = 0;
|
|||
static string label_format;
|
||||
static string prelabel;
|
||||
static string postlabel;
|
||||
static int justi;
|
||||
static int blinking;
|
||||
static float maxBankAngle;
|
||||
static float maxSlipAngle;
|
||||
static UINT gap_width;
|
||||
static bool latitude;
|
||||
static bool longitude;
|
||||
static bool tick_bottom;
|
||||
static bool tick_top;
|
||||
static bool tick_right;
|
||||
|
@ -126,8 +120,6 @@ static bool enable_pointer;
|
|||
static string type_pointer;
|
||||
static string type_tick;
|
||||
static string length_tick;
|
||||
static bool label_box;
|
||||
static int digits;
|
||||
static float radius;
|
||||
static int divisions;
|
||||
static int zoom;
|
||||
|
@ -136,16 +128,11 @@ static float rad;
|
|||
|
||||
|
||||
static FLTFNPTR load_fn;
|
||||
static fgLabelJust justification;
|
||||
static const char *pre_label_string = 0;
|
||||
static const char *post_label_string = 0;
|
||||
|
||||
int readHud( istream &input );
|
||||
int readInstrument ( const SGPropertyNode * node);
|
||||
static instr_item * readCard ( const SGPropertyNode * node);
|
||||
static instr_item * readLabel( const SGPropertyNode * node);
|
||||
static instr_item * readTBI( const SGPropertyNode * node);
|
||||
//$$$ end - added, Neetha, 28 Nov 2k
|
||||
|
||||
static void drawHUD();
|
||||
static void fgUpdateHUDVirtual();
|
||||
|
@ -303,165 +290,6 @@ readCard(const SGPropertyNode * node)
|
|||
return p;
|
||||
}// end readCard
|
||||
|
||||
static instr_item *
|
||||
readLabel(const SGPropertyNode * node)
|
||||
{
|
||||
instr_item *p;
|
||||
|
||||
int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? HUD_FONT_LARGE : HUD_FONT_SMALL;
|
||||
|
||||
name = node->getStringValue("name");
|
||||
x = node->getIntValue("x");
|
||||
y = node->getIntValue("y");
|
||||
width = node->getIntValue("width");
|
||||
height = node->getIntValue("height");
|
||||
loadfn = node->getStringValue("data_source");
|
||||
label_format = node->getStringValue("label_format");
|
||||
prelabel = node->getStringValue("pre_label_string");
|
||||
postlabel = node->getStringValue("post_label_string");
|
||||
scaling = node->getFloatValue("scale_data");
|
||||
options = node->getIntValue("options");
|
||||
justi = node->getIntValue("justification");
|
||||
blinking = node->getIntValue("blinking");
|
||||
latitude = node->getBoolValue("latitude",false);
|
||||
longitude = node->getBoolValue("longitude",false);
|
||||
label_box = node->getBoolValue("label_box",false);
|
||||
working = node->getBoolValue("working");
|
||||
digits = node->getIntValue("digits");
|
||||
|
||||
|
||||
SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
|
||||
|
||||
|
||||
if ( justi == 0 ) {
|
||||
justification = LEFT_JUST;
|
||||
} else {
|
||||
if ( justi == 1 ) {
|
||||
justification = CENTER_JUST;
|
||||
} else {
|
||||
if ( justi == 2 ) {
|
||||
justification = RIGHT_JUST;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( prelabel == "NULL" ) {
|
||||
pre_label_string = NULL;
|
||||
} else {
|
||||
if ( prelabel == "blank" ) {
|
||||
pre_label_string = " ";
|
||||
} else {
|
||||
pre_label_string = prelabel.c_str();
|
||||
}
|
||||
}
|
||||
|
||||
if ( postlabel == "blank" ) {
|
||||
post_label_string = " ";
|
||||
} else {
|
||||
if ( postlabel == "NULL" ) {
|
||||
post_label_string = NULL;
|
||||
} else {
|
||||
if ( postlabel == "units" ) {
|
||||
post_label_string = units;
|
||||
} else {
|
||||
post_label_string = postlabel.c_str();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
p = (instr_item *) new instr_label ( x,
|
||||
y,
|
||||
width,
|
||||
height,
|
||||
load_fn,
|
||||
label_format.c_str(),
|
||||
pre_label_string,
|
||||
post_label_string,
|
||||
scaling,
|
||||
options,
|
||||
justification,
|
||||
font_size,
|
||||
blinking,
|
||||
latitude,
|
||||
longitude,
|
||||
label_box,
|
||||
working,
|
||||
digits);
|
||||
|
||||
return p;
|
||||
} // end readLabel
|
||||
|
||||
static instr_item *
|
||||
readTBI(const SGPropertyNode * node)
|
||||
{
|
||||
|
@ -541,56 +369,46 @@ int readInstrument(const SGPropertyNode * node)
|
|||
if (ladder_group != 0) {
|
||||
int nLadders = ladder_group->nChildren();
|
||||
for (int j = 0; j < nLadders; j++) {
|
||||
|
||||
HIptr = static_cast<instr_item *>(new HudLadder(ladder_group->getChild(j)));
|
||||
HUD_deque.insert( HUD_deque.begin(), HIptr);
|
||||
|
||||
}// for - ladders
|
||||
HUD_deque.insert(HUD_deque.begin(), HIptr);
|
||||
}
|
||||
}
|
||||
|
||||
const SGPropertyNode * card_group = node->getNode("cards");
|
||||
if (card_group != 0) {
|
||||
int nCards = card_group->nChildren();
|
||||
for (int j = 0; j < nCards; j++) {
|
||||
|
||||
HIptr = readCard(card_group->getChild(j));
|
||||
HUD_deque.insert( HUD_deque.begin(), HIptr);
|
||||
|
||||
}//for - cards
|
||||
HUD_deque.insert(HUD_deque.begin(), HIptr);
|
||||
}
|
||||
}
|
||||
|
||||
const SGPropertyNode * label_group = node->getNode("labels");
|
||||
if (label_group != 0) {
|
||||
int nLabels = label_group->nChildren();
|
||||
for (int j = 0; j < nLabels; j++) {
|
||||
|
||||
HIptr = readLabel(label_group->getChild(j));
|
||||
HUD_deque.insert( HUD_deque.begin(), HIptr);
|
||||
|
||||
}//for - labels
|
||||
HIptr = static_cast<instr_item *>(new instr_label(label_group->getChild(j)));
|
||||
HUD_deque.insert(HUD_deque.begin(), HIptr);
|
||||
}
|
||||
}
|
||||
|
||||
const SGPropertyNode * tbi_group = node->getNode("tbis");
|
||||
if (tbi_group != 0) {
|
||||
int nTbis = tbi_group->nChildren();
|
||||
for (int j = 0; j < nTbis; j++) {
|
||||
|
||||
HIptr = readTBI(tbi_group->getChild(j));
|
||||
HUD_deque.insert( HUD_deque.begin(), HIptr);
|
||||
|
||||
}//for - tbis
|
||||
}
|
||||
}
|
||||
|
||||
const SGPropertyNode * rwy_group = node->getNode("runways");
|
||||
if (rwy_group != 0) {
|
||||
int nRwy = rwy_group->nChildren();
|
||||
for (int j = 0; j < nRwy; j++) {
|
||||
SG_LOG( SG_COCKPIT, SG_DEBUG,
|
||||
"************** Reading runway properties" );
|
||||
SG_LOG(SG_COCKPIT, SG_DEBUG, "*** Reading runway properties ***");
|
||||
HIptr = readRunway(rwy_group->getChild(j));
|
||||
HUD_deque.insert( HUD_deque.begin(), HIptr);
|
||||
|
||||
}//for - runways
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}//end readinstrument
|
||||
|
|
|
@ -443,6 +443,7 @@ public:
|
|||
|
||||
virtual ~instr_item ();
|
||||
|
||||
void set_data_source ( FLTFNPTR fn ) { load_value_fn = fn; }
|
||||
int get_brightness ( void ) { return brightness;}
|
||||
RECT get_location ( void ) { return scrn_pos; }
|
||||
bool is_broken ( void ) { return broken; }
|
||||
|
@ -521,9 +522,6 @@ class HUDdraw {
|
|||
}
|
||||
};
|
||||
|
||||
//typedef deque < instr_item * > hud_deque_type;
|
||||
//typedef hud_deque_type::iterator hud_deque_iterator;
|
||||
//typedef hud_deque_type::const_iterator hud_deque_const_iterator;
|
||||
|
||||
extern deque< instr_item *> HUD_deque;
|
||||
extern int HUD_style;
|
||||
|
@ -536,45 +534,25 @@ extern int HUD_style;
|
|||
|
||||
class instr_label : public instr_item {
|
||||
private:
|
||||
const char *pformat;
|
||||
const char *pre_str;
|
||||
const char *post_str;
|
||||
const char *pformat;
|
||||
const char *pre_str;
|
||||
const char *post_str;
|
||||
fgLabelJust justify;
|
||||
int fontSize;
|
||||
int blink;
|
||||
char format_buffer[80];
|
||||
char format_buffer[80];
|
||||
bool lat;
|
||||
bool lon;
|
||||
bool lbox;
|
||||
|
||||
public:
|
||||
instr_label( int x,
|
||||
int y,
|
||||
UINT width,
|
||||
UINT height,
|
||||
FLTFNPTR data_source,
|
||||
const char *label_format,
|
||||
const char *pre_label_string,
|
||||
const char *post_label_string,
|
||||
float scale_data,
|
||||
UINT options,
|
||||
fgLabelJust justification,
|
||||
int font_size,
|
||||
int blinking,
|
||||
bool latitude,
|
||||
bool longitude,
|
||||
bool label_box,
|
||||
bool working,
|
||||
int digit );
|
||||
|
||||
instr_label(const SGPropertyNode *);
|
||||
~instr_label();
|
||||
|
||||
instr_label( const instr_label & image);
|
||||
virtual void draw( void ); // Required method in base class
|
||||
instr_label(const instr_label& image);
|
||||
virtual void draw(void);
|
||||
};
|
||||
|
||||
typedef instr_label * pInstlabel;
|
||||
|
||||
|
||||
class lat_label : public instr_item {
|
||||
private:
|
||||
|
@ -609,7 +587,6 @@ public:
|
|||
virtual void draw( void ); // Required method in base class
|
||||
};
|
||||
|
||||
typedef lat_label * pLatlabel;
|
||||
|
||||
class lon_label : public instr_item {
|
||||
private:
|
||||
|
@ -645,7 +622,6 @@ public:
|
|||
virtual void draw( void ); // Required method in base class
|
||||
};
|
||||
|
||||
typedef lon_label * pLonlabel;
|
||||
|
||||
//
|
||||
// fgRunway_instr This class is responsible for rendering the active runway
|
||||
|
@ -815,7 +791,6 @@ public:
|
|||
void zoomed_scale(int,int);
|
||||
};
|
||||
|
||||
typedef hud_card * pCardScale;
|
||||
|
||||
class gauge_instr : public instr_scale {
|
||||
public:
|
||||
|
@ -839,7 +814,7 @@ public:
|
|||
virtual void draw( void ); // Required method in base class
|
||||
};
|
||||
|
||||
typedef gauge_instr * pGaugeInst;
|
||||
|
||||
//
|
||||
// dual_instr_item This class was created to form the base class
|
||||
// for both panel and HUD Turn Bank Indicators.
|
||||
|
@ -899,8 +874,6 @@ public:
|
|||
virtual void draw( void ); // Required method in base class
|
||||
};
|
||||
|
||||
typedef fgTBI_instr * pTBI;
|
||||
|
||||
|
||||
class HudLadder : public dual_instr_item {
|
||||
private:
|
||||
|
|
|
@ -1,55 +1,154 @@
|
|||
#include <Main/fg_props.hxx>
|
||||
|
||||
#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
|
||||
|
||||
//======================= Top of instr_label class =========================
|
||||
instr_label::instr_label(
|
||||
int x,
|
||||
int y,
|
||||
UINT width,
|
||||
UINT height,
|
||||
FLTFNPTR data_source,
|
||||
const char *label_format,
|
||||
const char *pre_label_string,
|
||||
const char *post_label_string,
|
||||
float scale_data,
|
||||
UINT options,
|
||||
fgLabelJust justification,
|
||||
int font_size,
|
||||
int blinking,
|
||||
bool latitude,
|
||||
bool longitude,
|
||||
bool label_box,
|
||||
bool working,
|
||||
int digit) :
|
||||
instr_item( x, y, width, height,
|
||||
data_source,scale_data,options, working, digit),
|
||||
pformat ( label_format ),
|
||||
pre_str ( pre_label_string ),
|
||||
post_str ( post_label_string ),
|
||||
justify ( justification ),
|
||||
fontSize ( font_size ),
|
||||
blink ( blinking ),
|
||||
lat ( latitude ),
|
||||
lon ( longitude ),
|
||||
lbox ( label_box )
|
||||
// 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();
|
||||
|
||||
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"),
|
||||
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))
|
||||
{
|
||||
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);
|
||||
|
||||
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 );
|
||||
if (post_str != NULL)
|
||||
sprintf(format_buffer, "%s%s%s", pre_str, pformat, post_str);
|
||||
else
|
||||
sprintf( format_buffer, "%s%s", pre_str, pformat );
|
||||
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.
|
||||
|
||||
sprintf(format_buffer, "%s%s", pformat, post_str);
|
||||
} else {
|
||||
strcpy(format_buffer, pformat); // FIXME
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -58,47 +157,18 @@ instr_label::~instr_label()
|
|||
}
|
||||
|
||||
|
||||
// Copy constructor
|
||||
instr_label::instr_label(const instr_label & image) :
|
||||
instr_item((const instr_item &)image),
|
||||
pformat ( image.pformat ),
|
||||
pre_str ( image.pre_str ),
|
||||
post_str ( image.post_str ),
|
||||
blink ( image.blink ),
|
||||
lat ( image.lat ),
|
||||
lon ( image.lon ),
|
||||
lbox ( image.lbox )
|
||||
|
||||
{
|
||||
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.
|
||||
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// draw Draws a label anywhere in the HUD
|
||||
//
|
||||
//
|
||||
void instr_label::draw( void )
|
||||
void instr_label::draw(void)
|
||||
{
|
||||
char label_buffer[80];
|
||||
int posincr;
|
||||
int lenstr;
|
||||
RECT scrn_rect = get_location();
|
||||
RECT scrn_rect = get_location();
|
||||
|
||||
if (data_available()) {
|
||||
if (lat)
|
||||
sprintf( label_buffer, format_buffer, coord_format_lat(get_value()) );
|
||||
sprintf(label_buffer, format_buffer, coord_format_lat(get_value()));
|
||||
else if (lon)
|
||||
sprintf( label_buffer, format_buffer, coord_format_lon(get_value()) );
|
||||
sprintf(label_buffer, format_buffer, coord_format_lon(get_value()));
|
||||
else {
|
||||
if (lbox) {// Box for label
|
||||
float x = scrn_rect.left;
|
||||
|
@ -110,59 +180,57 @@ void instr_label::draw( void )
|
|||
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);
|
||||
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 );
|
||||
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);
|
||||
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() );
|
||||
sprintf(label_buffer, format_buffer, get_value() * data_scaling());
|
||||
}
|
||||
|
||||
} else {
|
||||
// sprintf( label_buffer, format_buffer );
|
||||
sprintf(label_buffer, format_buffer);
|
||||
}
|
||||
|
||||
lenstr = getStringWidth( label_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" );
|
||||
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 );
|
||||
lenstr = strlen(label_buffer);
|
||||
|
||||
if (justify == RIGHT_JUST) {
|
||||
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; // 0;
|
||||
}
|
||||
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());
|
||||
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());
|
||||
textString(scrn_rect.left + posincr, scrn_rect.top,
|
||||
label_buffer, get_digits());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -49,9 +49,10 @@ HudLadder::HudLadder(const SGPropertyNode *node) :
|
|||
// Invert to convert the "compression" factor to a
|
||||
// pixels-per-degree number.
|
||||
if (fgGetBool("/sim/hud/enable3d", true) && HUD_style == 1)
|
||||
factor = (640./55.);
|
||||
factor = 640.0 / 55.0;
|
||||
|
||||
SG_LOG(SG_INPUT, SG_INFO, "Done reading HudLadder instrument"); // TODO add name
|
||||
SG_LOG(SG_INPUT, SG_INFO, "Done reading HudLadder instrument"
|
||||
<< node->getStringValue("name", "[NONE]"));
|
||||
|
||||
if (!width_units)
|
||||
width_units = 45;
|
||||
|
|
Loading…
Add table
Reference in a new issue