#include <iostream>
#include <plib/pu.h>
#include <simgear/debug/logstream.hxx>
+#include <simgear/structure/SGBinding.hxx>
-#include <Autopilot/auto_gui.hxx>
-#include <Input/input.hxx>
#include <Main/globals.hxx>
-#include <Main/fg_props.hxx>
#include "new_gui.hxx"
#include "menubar.hxx"
// user-configured dialogs and new commands where necessary.
////////////////////////////////////////////////////////////////////////
-extern void reInit (puObject *);
-static bool
-do_reinit_dialog (const SGPropertyNode * arg)
-{
- reInit(0);
- return true;
-}
-
#if defined(TR_HIRES_SNAP)
-extern void dumpHiResSnapShot (puObject *);
+extern void dumpHiResSnapShot ();
static bool
do_hires_snapshot_dialog (const SGPropertyNode * arg)
{
- dumpHiResSnapShot(0);
+ dumpHiResSnapShot();
return true;
}
#endif // TR_HIRES_SNAP
-#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined(__MINGW32__)
-extern void printScreen (puObject *);
+#if defined( _WIN32 ) && !defined(__MINGW32__)
+extern void printScreen ();
static bool
do_print_dialog (const SGPropertyNode * arg)
{
- printScreen(0);
- return true;
-}
-#endif
-
-extern void prop_pickerView (puObject *);
-static bool
-do_properties_dialog (const SGPropertyNode * arg)
-{
- prop_pickerView(0);
- return true;
-}
-
-extern void AddWayPoint (puObject *);
-static bool
-do_ap_add_waypoint_dialog (const SGPropertyNode * arg)
-{
- AddWayPoint(0);
- return true;
-}
-
-extern void PopWayPoint (puObject *);
-static bool
-do_ap_pop_waypoint_dialog (const SGPropertyNode * arg)
-{
- PopWayPoint(0);
- return true;
-}
-
-extern void ClearRoute (puObject *);
-static bool
-do_ap_clear_route_dialog (const SGPropertyNode * arg)
-{
- ClearRoute(0);
- return true;
-}
-
-#if 0
-extern void fgAPAdjust (puObject *);
-static bool
-do_ap_adjust_dialog (const SGPropertyNode * arg)
-{
- fgAPAdjust(0);
+ printScreen();
return true;
}
#endif
-extern void fgLatLonFormatToggle (puObject *);
-static bool
-do_lat_lon_format_dialog (const SGPropertyNode * arg)
-{
- fgLatLonFormatToggle(0);
- return true;
-}
-
-extern void helpCb (puObject *);
+extern void helpCb ();
static bool
do_help_dialog (const SGPropertyNode * arg)
{
- helpCb(0);
+ helpCb();
return true;
}
const char * name;
SGCommandMgr::command_t command;
} deprecated_dialogs [] = {
- { "old-reinit-dialog", do_reinit_dialog },
#if defined(TR_HIRES_SNAP)
{ "old-hires-snapshot-dialog", do_hires_snapshot_dialog },
#endif
-#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined(__MINGW32__)
+#if defined( _WIN32 ) && !defined(__MINGW32__)
{ "old-print-dialog", do_print_dialog },
#endif
- { "old-properties-dialog", do_properties_dialog },
- { "old-ap-add-waypoint-dialog", do_ap_add_waypoint_dialog },
- { "old-ap-pop-waypoint-dialog", do_ap_pop_waypoint_dialog },
- { "old-ap-clear-route-dialog", do_ap_clear_route_dialog },
- { "old-lat-lon-format-dialog", do_lat_lon_format_dialog },
{ "old-help-dialog", do_help_dialog },
{ 0, 0 }
};
FGMenuBar::fireItem (puObject * item)
{
const char * name = item->getLegend();
- vector<FGBinding *> &bindings = _bindings[name];
+ vector<SGBinding *> &bindings = _bindings[name];
int nBindings = bindings.size();
for (int i = 0; i < nBindings; i++)
for (unsigned int k = 0; k < bindings.size(); k++) {
unsigned int m = 0;
- SGPropertyNode *binding;
+ SGPropertyNode_ptr binding;
while (dest->getChild("binding", m))
m++;
binding = dest->getChild("binding", m, true);
copyProperties(bindings[k], binding);
- _bindings[items[j]].push_back(new FGBinding(binding));
+ _bindings[items[j]].push_back(new SGBinding(binding, globals->get_props()));
}
}
make_menu(menu_nodes[i]);
_menuBar->close();
- make_map(props);
+ make_object_map(props);
if (_visible)
_menuBar->reveal();
// Delete all the character arrays
// we were forced to keep around for
// plib.
- SG_LOG(SG_GENERAL, SG_INFO, "Deleting char arrays");
+ SG_LOG(SG_GENERAL, SG_BULK, "Deleting char arrays");
for (i = 0; i < _char_arrays.size(); i++) {
for (int j = 0; _char_arrays[i][j] != 0; j++)
free(_char_arrays[i][j]); // added with strdup
// Delete all the callback arrays
// we were forced to keep around for
// plib.
- SG_LOG(SG_GENERAL, SG_INFO, "Deleting callback arrays");
+ SG_LOG(SG_GENERAL, SG_BULK, "Deleting callback arrays");
for (i = 0; i < _callback_arrays.size(); i++)
delete[] _callback_arrays[i];
// Delete all those bindings
- SG_LOG(SG_GENERAL, SG_INFO, "Deleting bindings");
- map<string,vector<FGBinding *> >::iterator it;
- it = _bindings.begin();
+ SG_LOG(SG_GENERAL, SG_BULK, "Deleting bindings");
+ map<string,vector<SGBinding *> >::iterator it;
for (it = _bindings.begin(); it != _bindings.end(); it++) {
- SG_LOG(SG_GENERAL, SG_INFO, "Deleting bindings for " << it->first);
+ SG_LOG(SG_GENERAL, SG_BULK, "Deleting bindings for " << it->first);
for ( i = 0; i < it->second.size(); i++ )
delete it->second[i];
}
- SG_LOG(SG_GENERAL, SG_INFO, "Done.");
+ SG_LOG(SG_GENERAL, SG_BULK, "Done.");
}
void
-FGMenuBar::make_map(SGPropertyNode * node)
+FGMenuBar::make_object_map(SGPropertyNode * node)
{
- int menu_index = 0;
+ unsigned int menu_index = 0;
+ vector<SGPropertyNode_ptr> menus = node->getChildren("menu");
for (puObject *obj = ((puGroup *)_menuBar)->getFirstChild();
obj; obj = obj->getNextObject()) {
if (!(obj->getType() & PUCLASS_ONESHOT))
continue;
- SGPropertyNode *menu = node->getNode("menu", menu_index, false);
- if (!menu) {
+ if (menu_index >= menus.size()) {
SG_LOG(SG_GENERAL, SG_WARN, "'menu' object without node: "
<< node->getPath() << "/menu[" << menu_index << ']');
- continue;
+ return;
}
+ SGPropertyNode *menu = menus.at(menu_index);
_objects[menu->getPath()] = obj;
add_enabled_listener(menu);
for (puObject *me = popup->getFirstChild(); me; me = me->getNextObject())
e.push_back(me);
+ vector<SGPropertyNode_ptr> items = menu->getChildren("item");
for (unsigned int i = 0; i < e.size(); i++) {
- SGPropertyNode *item = menu->getNode("item", e.size() - i - 1, false);
- if (!item) {
+ if (i >= items.size()) {
SG_LOG(SG_GENERAL, SG_WARN, "'item' object without node: "
<< menu->getPath() << "/item[" << i << ']');
- continue;
+ break;
}
+ SGPropertyNode *item = items.at(e.size() - i - 1);
_objects[item->getPath()] = e[i];
add_enabled_listener(item);
}
bool
FGMenuBar::enable_item(const SGPropertyNode * node, bool state)
{
- if (!node || _objects.find(node->getPath()) == _objects.end()) {
- SG_LOG(SG_GENERAL, SG_WARN, "Trying to enable/disable "
- "non-existent menu item");
+ const char *path = node->getPath();
+ if (_objects.find(path) == _objects.end()) {
+ SG_LOG(SG_GENERAL, SG_ALERT, "Trying to enable/disable "
+ "non-existent menu item for node `" << path << '\'');
return false;
}
- puObject *object = _objects[node->getPath()];
+ puObject *object = _objects[path];
if (state)
object->activate();
else