]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/keyboard.cxx
Fixed a problem with autodetecting if we need to draw our own mouse cursor
[flightgear.git] / src / Main / keyboard.cxx
index e50eb6100437ef10b7354c6da5bd050f6b08ceef..faf28ecdef80d1ccafca55f9b38c935ef4977d31 100644 (file)
@@ -55,7 +55,6 @@
 #include <Cockpit/hud.hxx>
 #include <Cockpit/panel.hxx>
 #include <Cockpit/panel_io.hxx>
-#include <Cockpit/sp_panel.hxx>
 #include <GUI/gui.h>
 #include <Scenery/tilemgr.hxx>
 #include <Objects/matlib.hxx>
 #include "bfi.hxx"
 #include "globals.hxx"
 #include "keyboard.hxx"
+#include "fg_props.hxx"
 #include "options.hxx"
-#include "save.hxx"
-#include "views.hxx"
+                               // From main.cxx
+extern void fgReshape( int width, int height );
 
 
 // Handle keyboard events
 void GLUTkey(unsigned char k, int x, int y) {
-    FGInterface *f;
-    SGTime *t;
-    FGView *v;
     float fov, tmp;
     static bool winding_ccw = true;
     int speed;
 
-    f = current_aircraft.fdm_state;
-    v = &current_view;
+    FGInterface *f = current_aircraft.fdm_state;
+    FGViewer *v = globals->get_current_view();
 
     FG_LOG( FG_INPUT, FG_DEBUG, "Key hit = " << k );
     if ( puKeyboard(k, PU_DOWN) ) {
@@ -111,8 +108,8 @@ void GLUTkey(unsigned char k, int x, int y) {
                );
            return;
        case 8: // Ctrl-H key
-           current_autopilot->set_HeadingMode( 
-                  FGAutopilot::FG_HEADING_LOCK );
+           current_autopilot->set_HeadingMode(
+                 FGAutopilot::FG_DG_HEADING_LOCK );
            current_autopilot->set_HeadingEnabled(
                  ! current_autopilot->get_HeadingEnabled()
                );
@@ -150,7 +147,7 @@ void GLUTkey(unsigned char k, int x, int y) {
            // unflipping yourself :-)
            {
                double alt = cur_fdm_state->get_Altitude() + 1000;
-               fgFDMForceAltitude( current_options.get_flight_model(), 
+               fgFDMForceAltitude( fgGetString("/sim/flight-model"), 
                                    alt * FEET_TO_METER );
            }
            return;
@@ -179,16 +176,14 @@ void GLUTkey(unsigned char k, int x, int y) {
            v->set_goal_view_offset( FG_PI * 1.75 );
            return;
        case 65: // A key
-           speed = current_options.get_speed_up();
+           speed = fgGetInt("/sim/speed-up");
            speed--;
            if ( speed < 1 ) {
                speed = 1;
            }
-           current_options.set_speed_up( speed );
+           fgSetInt("/sim/speed-up", speed);
            return;
        case 72: // H key
-           // status = current_options.get_hud_status();
-           // current_options.set_hud_status(!status);
            HUD_brightkey( true );
            return;
        case 73: // I key
@@ -200,7 +195,12 @@ void GLUTkey(unsigned char k, int x, int y) {
            fgUpdateSkyAndLightingParams();
            return;
        case 80: // P key
-           current_options.toggle_panel();
+           if (fgGetBool("/sim/panel/visibility"))
+             fgSetBool("/sim/panel/visibility", false);
+           else
+             fgSetBool("/sim/panel/visibility", true);
+           fgReshape(fgGetInt("/sim/startup/xsize"),
+                     fgGetInt("/sim/startup/ysize"));
            break;
        case 84: // T key
            globals->inc_warp_delta( -30 );
@@ -216,13 +216,13 @@ void GLUTkey(unsigned char k, int x, int y) {
 #endif
            return;
        case 88: // X key
-           fov = current_options.get_fov();
+           fov = globals->get_current_view()->get_fov();
            fov *= 1.05;
            if ( fov > FG_FOV_MAX ) {
                fov = FG_FOV_MAX;
            }
-           current_options.set_fov(fov);
-           v->force_update_fov_math();
+           globals->get_current_view()->set_fov(fov);
+           // v->force_update_fov_math();
            return;
        case 90: // Z key
 #ifndef FG_OLD_WEATHER
@@ -309,9 +309,9 @@ void GLUTkey(unsigned char k, int x, int y) {
                    "Set flaps to " << controls.get_flaps() );
            return;
        case 97: // a key
-           speed = current_options.get_speed_up();
+           speed = fgGetInt("/sim/speed-up");
            speed++;
-           current_options.set_speed_up( speed );
+           fgSetInt("/sim/speed-up", speed);
            return;
        case 98: // b key
            int b_ret;
@@ -348,9 +348,9 @@ void GLUTkey(unsigned char k, int x, int y) {
            globals->set_freeze( ! globals->get_freeze() );
 
            {
-               FGBucket p( f->get_Longitude() * RAD_TO_DEG,
+               SGBucket p( f->get_Longitude() * RAD_TO_DEG,
                            f->get_Latitude() * RAD_TO_DEG );
-               FGPath tile_path( current_options.get_fg_root() );
+               FGPath tile_path( globals->get_fg_root() );
                tile_path.append( "Scenery" );
                tile_path.append( p.gen_base_path() );
                tile_path.append( p.gen_index_str() );
@@ -373,16 +373,20 @@ void GLUTkey(unsigned char k, int x, int y) {
            fgUpdateSkyAndLightingParams();
            return;
        case 118: // v key
-           current_options.cycle_view_mode();
+           // handles GUI state as well as Viewer LookAt Direction
+           CenterView();
+           globals->set_current_view( globals->get_viewmgr()->next_view() );
+           fgReshape( fgGetInt("/sim/startup/xsize"),
+                      fgGetInt("/sim/startup/ysize") );
            return;
        case 120: // x key
-           fov = current_options.get_fov();
+           fov = globals->get_current_view()->get_fov();
            fov /= 1.05;
            if ( fov < FG_FOV_MIN ) {
                fov = FG_FOV_MIN;
            }
-           current_options.set_fov(fov);
-           v->force_update_fov_math();
+           globals->get_current_view()->set_fov(fov);
+           // v->force_update_fov_math();
            return;
        case 122: // z key
 #ifndef FG_OLD_WEATHER
@@ -400,7 +404,7 @@ void GLUTkey(unsigned char k, int x, int y) {
            //   fclose( fg_DebugOutput );
            // }
            FG_LOG( FG_INPUT, FG_ALERT, 
-                   "Program exiting normally at user request." );
+                   "Program exit requested." );
            ConfirmExitDialog();
            return;
        }
@@ -410,9 +414,7 @@ void GLUTkey(unsigned char k, int x, int y) {
 
 // Handle "special" keyboard events
 void GLUTspecialkey(int k, int x, int y) {
-    FGView *v;
-
-    v = &current_view;
+    FGViewer *v = globals->get_current_view();
 
     FG_LOG( FG_INPUT, FG_DEBUG, "Special key hit = " << k );
 
@@ -435,7 +437,9 @@ void GLUTspecialkey(int k, int x, int y) {
        }
        case GLUT_KEY_F2: {
            FG_LOG(FG_INPUT, FG_INFO, "Saving flight");
+           cerr << "Opening output stream" << endl;
            ofstream output("fgfs.sav");
+           cerr << "output stream opened" << endl;
            if (output.good() && fgSaveFlight(output)) {
                output.close();
                FG_LOG(FG_INPUT, FG_INFO, "Saved flight to fgfs.sav");
@@ -446,8 +450,7 @@ void GLUTspecialkey(int k, int x, int y) {
        }
        case GLUT_KEY_F3: {
          string panel_path =
-           current_properties.getStringValue("/sim/panel",
-                                             "Panels/Default/default.xml");
+           fgGetString("/sim/panel/path", "Panels/Default/default.xml");
          FGPanel * new_panel = fgReadPanel(panel_path);
          if (new_panel == 0) {
            FG_LOG(FG_INPUT, FG_ALERT,
@@ -455,10 +458,44 @@ void GLUTspecialkey(int k, int x, int y) {
            return;
          }
          FG_LOG(FG_INPUT, FG_INFO, "Loaded new panel from " << panel_path);
+         current_panel->unbind();
          delete current_panel;
          current_panel = new_panel;
          return;
        }
+       case GLUT_KEY_F4: {
+         FGPath props_path(globals->get_fg_root());
+         props_path.append("preferences.xml");
+         FG_LOG(FG_INPUT, FG_INFO, "Rereading global preferences");
+         if (!readProperties(props_path.str(), globals->get_props())) {
+           FG_LOG(FG_INPUT, FG_ALERT,
+                  "Failed to reread global preferences from "
+                  << props_path.str());
+         } else {
+           FG_LOG(FG_INPUT, FG_INFO, "Finished Reading global preferences");
+         }
+         return;
+       }
+       case GLUT_KEY_F5: {
+         current_panel->setYOffset(current_panel->getYOffset() - 5);
+         fgReshape(fgGetInt("/sim/startup/xsize"),
+                   fgGetInt("/sim/startup/ysize"));
+         return;
+       }
+       case GLUT_KEY_F6: {
+         current_panel->setYOffset(current_panel->getYOffset() + 5);
+         fgReshape(fgGetInt("/sim/startup/xsize"),
+                   fgGetInt("/sim/startup/ysize"));
+         return;
+       }
+       case GLUT_KEY_F7: {
+         current_panel->setXOffset(current_panel->getXOffset() - 5);
+         return;
+       }
+       case GLUT_KEY_F8: {
+         current_panel->setXOffset(current_panel->getXOffset() + 5);
+         return;
+       }
        case GLUT_KEY_END: // numeric keypad 1
            v->set_goal_view_offset( FG_PI * 0.75 );
            return;
@@ -489,7 +526,7 @@ void GLUTspecialkey(int k, int x, int y) {
        switch (k) {
        case GLUT_KEY_F2: // F2 Reload Tile Cache...
            {
-               bool freeze;
+               bool freeze = globals->get_freeze();
                FG_LOG(FG_INPUT, FG_INFO, "ReIniting TileCache");
                if ( !freeze ) 
                    globals->set_freeze( true );
@@ -512,41 +549,44 @@ void GLUTspecialkey(int k, int x, int y) {
        case GLUT_KEY_F3: // F3 Take a screen shot
            fgDumpSnapShot();
            return;
+        case GLUT_KEY_F4: // F4 Update lighting manually
+           fgUpdateSkyAndLightingParams();
         case GLUT_KEY_F6: // F6 toggles Autopilot target location
            if ( current_autopilot->get_HeadingMode() !=
                 FGAutopilot::FG_HEADING_WAYPOINT ) {
                current_autopilot->set_HeadingMode(
                    FGAutopilot::FG_HEADING_WAYPOINT );
+               current_autopilot->set_HeadingEnabled( true );
            } else {
                current_autopilot->set_HeadingMode(
-                   FGAutopilot::FG_HEADING_LOCK );
+                   FGAutopilot::FG_DG_HEADING_LOCK );
            }
            return;
-       case GLUT_KEY_F8: // F8 toggles fog ... off fastest nicest...
-           current_options.cycle_fog();
-       
-           if ( current_options.get_fog() == fgOPTIONS::FG_FOG_DISABLED ) {
-               FG_LOG( FG_INPUT, FG_INFO, "Fog disabled" );
-           } else if ( current_options.get_fog() == 
-                       fgOPTIONS::FG_FOG_FASTEST )
-           {
-               FG_LOG( FG_INPUT, FG_INFO, 
-                       "Fog enabled, hint set to fastest" );
-           } else if ( current_options.get_fog() ==
-                       fgOPTIONS::FG_FOG_NICEST )
-           {
-               FG_LOG( FG_INPUT, FG_INFO,
-                       "Fog enabled, hint set to nicest" );
+       case GLUT_KEY_F8: {// F8 toggles fog ... off fastest nicest...
+           const string &fog = fgGetString("/sim/rendering/fog");
+           if (fog == "disabled") {
+             fgSetString("/sim/rendering/fog", "fastest");
+             FG_LOG(FG_INPUT, FG_INFO, "Fog enabled, hint=fastest");
+           } else if (fog == "fastest") {
+             fgSetString("/sim/rendering/fog", "nicest");
+             FG_LOG(FG_INPUT, FG_INFO, "Fog enabled, hint=nicest");
+           } else if (fog == "nicest") {
+             fgSetString("/sim/rendering/fog", "disabled");
+             FG_LOG(FG_INPUT, FG_INFO, "Fog disabled");
+           } else {
+             fgSetString("/sim/rendering/fog", "disabled");
+             FG_LOG(FG_INPUT, FG_ALERT, "Unrecognized fog type "
+                    << fog << ", changed to 'disabled'");
            }
-
            return;
+       }
        case GLUT_KEY_F9: // F9 toggles textures on and off...
            FG_LOG( FG_INPUT, FG_INFO, "Toggling texture" );
-           if ( current_options.get_textures() ) {
-               current_options.set_textures( false );
+           if ( fgGetBool("/sim/rendering/textures")) {
+               fgSetBool("/sim/rendering/textures", false);
                material_lib.set_step( 1 );
            } else {
-               current_options.set_textures( true );
+               fgSetBool("/sim/rendering/textures", true);
                material_lib.set_step( 0 );
            }
            return;