virtual SGPropertyNode * getProp2 () const { return _prop2; }
virtual const SGPropertyNode * getValue () const
{ return _value ? _value : &_dummy_0; }
+ virtual const bool hasStep () const { return _step != 0; }
virtual const SGPropertyNode * getStep () const
{ return _step ? _step : &_dummy_0; }
virtual const SGPropertyNode * getMin () const { return _min; }
}
-/**
- * Built-in command: let PUI handle a mouse click.
- *
- * button: the mouse button number, zero-based.
- * is-down: true if the button is down, false if it is up.
- * x-pos: the x position of the mouse click.
- * y-pos: the y position of the mouse click.
- */
-static bool
-do_pui_mouse_click (const SGPropertyNode * arg, SGCommandState ** state)
-{
- return puMouse(arg->getIntValue("button"),
- arg->getBoolValue("is-down") ? PU_DOWN : PU_UP,
- arg->getIntValue("x-pos"),
- arg->getIntValue("y-pos"));
-}
-
-
-/**
- * Built-in command: let PUI *or* the panel handle a mouse click.
- *
- * button: the mouse button number, zero-based.
- * is-down: true if the button is down, false if it is up.
- * x-pos: the x position of the mouse click.
- * y-pos: the y position of the mouse click.
- */
-static bool
-do_pui_or_panel_mouse_click (const SGPropertyNode * arg,
- SGCommandState ** state)
-{
- int button = arg->getIntValue("button");
- bool is_down = arg->getBoolValue("is-down");
- int x = arg->getIntValue("x-pos");
- int y = arg->getIntValue("y-pos");
- return (puMouse(button, is_down ? PU_DOWN : PU_UP, x, y) ||
- (current_panel != 0 &&
- current_panel->doMouseAction(button,
- is_down ? PU_DOWN : PU_UP, x, y)));
-}
-
-
/**
* Built-in command: (re)load the panel.
*
globals->get_props()->setBoolValue( "/sim/hud/visibility", false );
}
}
+ global_tile_mgr.refresh_view_timestamps();
// fgReshape(fgGetInt("/sim/startup/xsize"), fgGetInt("/sim/startup/ysize"));
return true;
}
// BusyCursor(0);
if ( global_tile_mgr.init() ) {
// Load the local scenery data
+ double visibility_meters = fgGetDouble("/environment/visibility-m");
global_tile_mgr.update(fgGetDouble("/position/longitude-deg"),
- fgGetDouble("/position/latitude-deg"));
+ fgGetDouble("/position/latitude-deg"),
+ visibility_meters);
} else {
SG_LOG( SG_GENERAL, SG_ALERT,
"Error in Tile Manager initialization!" );
*
* property: the name of the property to increment or decrement.
* step: the amount of the increment or decrement (default: 0).
+ * offset: a normalized amount to offset by (if step is not present).
+ * factor: the amount by which to multiply the offset (if step is not present).
* min: the minimum allowed value (default: no minimum).
* max: the maximum allowed value (default: no maximum).
* wrap: true if the value should be wrapped when it passes min or max;
{
if (*state == 0)
*state = new PropertyCommandState(arg);
+ bool hasStep = ((PropertyCommandState *)(*state))->hasStep();
SGPropertyNode * prop = ((PropertyCommandState *)(*state))->getProp();
const SGPropertyNode * step = ((PropertyCommandState *)(*state))->getStep();
+ const SGPropertyNode * offset =
+ ((PropertyCommandState *)(*state))->getOffset();
+ const SGPropertyNode * factor =
+ ((PropertyCommandState *)(*state))->getFactor();
const SGPropertyNode * min = ((PropertyCommandState *)(*state))->getMin();
const SGPropertyNode * max = ((PropertyCommandState *)(*state))->getMax();
bool wrap = ((PropertyCommandState *)(*state))->getWrap()->getBoolValue();
+ double amount = 0;
+ if (!hasStep) {
+ amount = offset->getDoubleValue() * factor->getDoubleValue();
+ }
+
+
switch (prop->getType()) {
case SGPropertyNode::BOOL:
- if (step->getBoolValue())
+ bool value;
+ if (hasStep)
+ value = step->getBoolValue();
+ else
+ value = (0.0 != amount);
+ if (value)
return prop->setBoolValue(!prop->getBoolValue());
else
return true;
case SGPropertyNode::INT: {
- int value = prop->getIntValue() + step->getIntValue();
+ int value;
+ if (hasStep)
+ value = prop->getIntValue() + step->getIntValue();
+ else
+ value = prop->getIntValue() + int(amount);
if (min && (value < min->getIntValue())) {
if (wrap && max)
value = max->getIntValue();
return prop->setIntValue(value);
}
case SGPropertyNode::LONG: {
- long value = prop->getLongValue() + step->getLongValue();
+ long value;
+ if (hasStep)
+ value = prop->getLongValue() + step->getLongValue();
+ else
+ value = prop->getLongValue() + long(amount);
if (min && (value < min->getLongValue())) {
if (wrap && max)
value = max->getLongValue();
return prop->setLongValue(value);
}
case SGPropertyNode::FLOAT: {
- float value = prop->getFloatValue() + step->getFloatValue();
+ float value;
+ if (hasStep)
+ value = prop->getFloatValue() + step->getFloatValue();
+ else
+ value = prop->getFloatValue() + float(amount);
if (min && (value < min->getFloatValue())) {
if (wrap && max)
value = max->getFloatValue();
case SGPropertyNode::DOUBLE:
case SGPropertyNode::UNSPECIFIED:
case SGPropertyNode::NONE: {
- double value = prop->getDoubleValue() + step->getDoubleValue();
+ double value;
+ if (hasStep)
+ value = prop->getDoubleValue() + step->getDoubleValue();
+ else
+ value = prop->getDoubleValue() + amount;
if (min && (value < min->getDoubleValue())) {
if (wrap && max)
value = max->getDoubleValue();
{ "exit", do_exit },
{ "load", do_load },
{ "save", do_save },
- { "pui-mouse-click", do_pui_mouse_click },
- { "pui-or-panel-mouse-click", do_pui_or_panel_mouse_click },
{ "panel-load", do_panel_load },
{ "panel-mouse-click", do_panel_mouse_click },
{ "preferences-load", do_preferences_load },
}
}
-// end of fg_commands.hxx
-
+// end of fg_commands.cxx