From bf56b15f7ede38486e4e1593bb05d80d9a613bf9 Mon Sep 17 00:00:00 2001 From: curt Date: Thu, 27 May 1999 00:21:22 +0000 Subject: [PATCH] GUI changes contributed by Norman Vine. --- Simulator/GUI/gui.cxx | 254 +++++++++++++++++++++--------------------- Simulator/GUI/gui.h | 2 - 2 files changed, 124 insertions(+), 132 deletions(-) diff --git a/Simulator/GUI/gui.cxx b/Simulator/GUI/gui.cxx index d3db56ff3..5a50fe92d 100644 --- a/Simulator/GUI/gui.cxx +++ b/Simulator/GUI/gui.cxx @@ -63,18 +63,9 @@ FG_USING_STD(string); -// Pui hides low level access to the mouse and menu display states -// so for now we track these in case we want to know about them -puFont guiFnt = 0; // Our High Level Gui Font -fntTexFont *guiFntHandle = 0; // lower level access to guiFnt's Font -static int _mX = 0; // current mouse x -static int _mY = 0; // y -static int last_buttons = 0 ; // mouse button state -static int mouse_active = 0; // is mouse displayed -static int menu_on = 0; // menu displayed +puFont guiFnt = 0; +fntTexFont *guiFntHandle = 0; - -// PUI objects static puMenuBar *mainMenuBar = 0; //static puButton *hideMenuButton = 0; @@ -90,7 +81,6 @@ static puText *YNdialogBoxMessage = 0; static puOneShot *YNdialogBoxOkButton = 0; static puOneShot *YNdialogBoxNoButton = 0; -// Accessor CallBacks for external PUI Objects // extern void NewAltitude( puObject *cb ); // extern void NewHeading( puObject *cb ); extern void fgAPAdjust( puObject * ); @@ -99,6 +89,13 @@ extern void fgLatLonFormatToggle( puObject *); /* -------------------------------------------------------------------- Mouse stuff ---------------------------------------------------------------------*/ + +static int _mX = 0; +static int _mY = 0; +static int last_buttons = 0 ; +static int mouse_active = 0; +static int menu_on = 0; + void guiMotionFunc ( int x, int y ) { _mX = x; @@ -155,11 +152,6 @@ static inline void TurnCursorOff( void ) #endif } -// If the gui isn't active try to hide the mouse -// an if the qui requested show the mouse -// this can get confused if it rerequesting the gui object -// should resync things. -// see PUI macros in gui.hxx for normal use void maybeToggleMouse( void ) { static int first_time = ~0; @@ -199,7 +191,7 @@ void BusyCursor( int restore ) void ConfirmExitDialog(void) { string Msg("Really Quit"); - YNdialogBoxMessage -> setLabel(Msg.c_str()); + YNdialogBoxMessage -> setLabel(Msg.c_str()); YNdialogBoxNoButton-> makeReturnDefault (TRUE ); FG_PUSH_PUI_DIALOG( YNdialogBox ); } @@ -216,26 +208,25 @@ void mkDialog (char *txt) } // Repair any damage done to the Panel by other Gui Items -// see PUI macros in gui.hxx for use void guiFixPanel( void ) { int toggle_pause; if ( current_options.get_panel_status() ) { - - FGView *v = ¤t_view; - FGTime *t = FGTime::cur_time_params; + + FGView *v = ¤t_view; + FGTime *t = FGTime::cur_time_params; - if( (toggle_pause = !t->getPause()) ) - t->togglePauseMode(); - - // this seems to be the only way to do this :-( - // problem is the viewport has been mucked with - xglViewport(0, 0 , (GLint)(v->winWidth), (GLint)(v->winHeight) ); - FGPanel::OurPanel->ReInit(0, 0, 1024, 768); - - if(toggle_pause) - t->togglePauseMode(); + if( (toggle_pause = !t->getPause()) ) + t->togglePauseMode(); + + // this seems to be the only way to do this :-( + // problem is the viewport has been mucked with + xglViewport(0, 0 , (GLint)(v->winWidth), (GLint)(v->winHeight) ); + FGPanel::OurPanel->ReInit(0, 0, 1024, 768); + + if(toggle_pause) + t->togglePauseMode(); } } @@ -243,13 +234,13 @@ void guiFixPanel( void ) void guiToggleMenu(void) { if( menu_on ) { - // printf("Hiding Menu\n"); - mainMenuBar->hide (); - TurnCursorOff(); + // printf("Hiding Menu\n"); + mainMenuBar->hide (); + TurnCursorOff(); } else { - // printf("Showing Menu\n"); - mainMenuBar->reveal(); - TurnCursorOn(); + // printf("Showing Menu\n"); + mainMenuBar->reveal(); + TurnCursorOn(); } menu_on = ~menu_on; } @@ -277,11 +268,10 @@ void hideMenuCb (puObject *cb) guiToggleMenu(); } -// This is the accessor function void goodBye(puObject *) { - // FG_LOG( FG_INPUT, FG_ALERT, - // "Program exiting normally at user request." ); + // FG_LOG( FG_INPUT, FG_ALERT, + // "Program exiting normally at user request." ); cout << "Program exiting normally at user request." << endl; // if(gps_bug) @@ -298,13 +288,15 @@ void goAwayCb (puObject *me) void mkDialogInit (void) { -// printf("mkDialogInit\n"); - dialogBox = new puDialogBox (150, 50); + // printf("mkDialogInit\n"); + int x = (current_options.get_xsize()/2 - 400/2); + int y = (current_options.get_ysize()/2 - 100/2); + dialogBox = new puDialogBox (x, y); // 150, 50 { - dialogFrame = new puFrame (0,0,400, 100); - dialogBoxMessage = new puText (10, 70); - dialogBoxMessage -> setLabel (""); - dialogBoxOkButton = new puOneShot (180, 10, 240, 50); + dialogFrame = new puFrame (0,0,400,100); + dialogBoxMessage = new puText (10, 70); + dialogBoxMessage -> setLabel (""); + dialogBoxOkButton = new puOneShot (180, 10, 240, 50); } FG_FINALIZE_PUI_DIALOG( dialogBox ); } @@ -321,26 +313,30 @@ void goAwayYesNoCb(puObject *me) void ConfirmExitDialogInit(void) { -// printf("ConfirmExitDialogInit\n"); + // printf("ConfirmExitDialogInit\n"); string Msg("Really Quit"); -// int len = 350/2 - puGetStringWidth( puGetDefaultLabelFont(), AptLabel )/2; + // int len = 350/2 - puGetStringWidth( puGetDefaultLabelFont(), AptLabel )/2; int len = 200 - puGetStringWidth( puGetDefaultLabelFont(), Msg.c_str() )/2; - - YNdialogBox = new puDialogBox (150, 50); + + int x = (current_options.get_xsize()/2 - 400/2); + int y = (current_options.get_ysize()/2 - 100/2); + + YNdialogBox = new puDialogBox (x, y); // 150, 50 + // YNdialogBox = new puDialogBox (150, 50); { - YNdialogFrame = new puFrame (0,0,400, 100); - - YNdialogBoxMessage = new puText (len, 70); - YNdialogBoxMessage -> setLabel (Msg.c_str()); - - YNdialogBoxOkButton = new puOneShot (100, 10, 160, 50); - YNdialogBoxOkButton -> setLegend ("OK"); - YNdialogBoxOkButton -> setCallback (goodBye); - - YNdialogBoxNoButton = new puOneShot (240, 10, 300, 50); - YNdialogBoxNoButton -> setLegend ("NO"); -// YNdialogBoxNoButton -> makeReturnDefault (TRUE ); - YNdialogBoxNoButton -> setCallback (goAwayYesNoCb); + YNdialogFrame = new puFrame (0,0,400, 100); + + YNdialogBoxMessage = new puText (len, 70); + YNdialogBoxMessage -> setLabel (Msg.c_str()); + + YNdialogBoxOkButton = new puOneShot (100, 10, 160, 50); + YNdialogBoxOkButton -> setLegend ("OK"); + YNdialogBoxOkButton -> setCallback (goodBye); + + YNdialogBoxNoButton = new puOneShot (240, 10, 300, 50); + YNdialogBoxNoButton -> setLegend ("NO"); + // YNdialogBoxNoButton -> makeReturnDefault (TRUE ); + YNdialogBoxNoButton -> setCallback (goAwayYesNoCb); } FG_FINALIZE_PUI_DIALOG( YNdialogBox ); } @@ -357,8 +353,8 @@ void helpCb (puObject *) #if defined(FX) && !defined(WIN32) # if defined(XMESA_FX_FULLSCREEN) && defined(XMESA_FX_WINDOW) if ( global_fullscreen ) { - global_fullscreen = false; - XMesaSetFXmode( XMESA_FX_WINDOW ); + global_fullscreen = false; + XMesaSetFXmode( XMESA_FX_WINDOW ); } # endif #endif @@ -407,7 +403,7 @@ void AptDialog_OK (puObject *) FGTime *t = FGTime::cur_time_params; int PauseMode = t->getPause(); if(!PauseMode) - t->togglePauseMode(); + t->togglePauseMode(); char *s; AptDialogInput->getValue(&s); @@ -416,29 +412,29 @@ void AptDialog_OK (puObject *) AptDialog_Cancel( NULL ); if ( AptId.length() ) { - // set initial position from airport id - - fgAIRPORTS airports; - fgAIRPORT a; - - FG_LOG( FG_GENERAL, FG_INFO, - "Attempting to set starting position from airport code " - << s ); - - airports.load("apt_simple"); - if ( airports.search( AptId, &a ) ) - { - current_options.set_airport_id( AptId.c_str() ); - BusyCursor(0); - fgReInitSubsystems(); - BusyCursor(1); - } else { - AptId += " not in database."; - mkDialog(AptId.c_str()); - } + // set initial position from airport id + + fgAIRPORTS airports; + fgAIRPORT a; + + FG_LOG( FG_GENERAL, FG_INFO, + "Attempting to set starting position from airport code " + << s ); + + airports.load("apt_simple"); + if ( airports.search( AptId, &a ) ) + { + current_options.set_airport_id( AptId.c_str() ); + BusyCursor(0); + fgReInitSubsystems(); + BusyCursor(1); + } else { + AptId += " not in database."; + mkDialog(AptId.c_str()); + } } if( PauseMode != t->getPause() ) - t->togglePauseMode(); + t->togglePauseMode(); } void AptDialog_Reset(puObject *) @@ -447,8 +443,6 @@ void AptDialog_Reset(puObject *) AptDialogInput->setCursor( 0 ) ; } - -// This is the accessor function void NewAirport(puObject *cb) { string AptLabel("Enter New Airport ID"); @@ -465,40 +459,40 @@ static void NewAirportInit(void) cout << "NewAirportInit" << endl; string AptLabel("Enter New Airport ID"); -// int len = 350/2 - puGetStringWidth( puGetDefaultLabelFont(), AptLabel )/2; + // int len = 350/2 - puGetStringWidth( puGetDefaultLabelFont(), AptLabel )/2; int len = 150 - puGetStringWidth( puGetDefaultLabelFont(), AptLabel.c_str() )/2; AptDialog = new puDialogBox (150, 50); { - AptDialogFrame = new puFrame (0,0,350, 150); - AptDialogMessage = new puText (len, 110); - - AptDialogInput = new puInput ( 50, 70, 300, 100 ); - - AptDialogOkButton = new puOneShot (50, 10, 110, 50); - AptDialogOkButton -> setLegend ("OK"); - AptDialogOkButton -> setCallback (AptDialog_OK); - - AptDialogCancelButton = new puOneShot (140, 10, 210, 50); - AptDialogCancelButton -> setLegend ("Cancel"); - AptDialogCancelButton -> setCallback (AptDialog_Cancel); - - AptDialogResetButton = new puOneShot (240, 10, 300, 50); - AptDialogResetButton -> setLegend ("Reset"); - AptDialogResetButton -> setCallback (AptDialog_Reset); + AptDialogFrame = new puFrame (0,0,350, 150); + AptDialogMessage = new puText (len, 110); + + AptDialogInput = new puInput ( 50, 70, 300, 100 ); + + AptDialogOkButton = new puOneShot (50, 10, 110, 50); + AptDialogOkButton -> setLegend ("OK"); + AptDialogOkButton -> setCallback (AptDialog_OK); + + AptDialogCancelButton = new puOneShot (140, 10, 210, 50); + AptDialogCancelButton -> setLegend ("Cancel"); + AptDialogCancelButton -> setCallback (AptDialog_Cancel); + + AptDialogResetButton = new puOneShot (240, 10, 300, 50); + AptDialogResetButton -> setLegend ("Reset"); + AptDialogResetButton -> setCallback (AptDialog_Reset); } FG_FINALIZE_PUI_DIALOG( AptDialog ); } /* ----------------------------------------------------------------------- - The menu stuff - ---------------------------------------------------------------------*/ +The menu stuff +---------------------------------------------------------------------*/ char *fileSubmenu [] = { "Exit", "Close", "---------", "Print", "---------", "Save", "Reset", NULL }; puCallback fileSubmenuCb [] = { - MayBeGoodBye, hideMenuCb, NULL, notCb, NULL, notCb, reInit, NULL}; - + MayBeGoodBye, hideMenuCb, NULL, notCb, NULL, notCb, reInit, NULL}; + char *editSubmenu [] = { "Edit text", NULL }; puCallback editSubmenuCb [] = { @@ -547,7 +541,7 @@ void guiInit() // Install our fast fonts string fntpath = current_options.get_fg_root() + "/Fonts/" + - "typewriter" + ".txf"; + "typewriter" + ".txf"; guiFntHandle = new fntTexFont ; guiFntHandle -> load ( fntpath.c_str() ) ; puFont GuiFont ( guiFntHandle, 15 ) ; @@ -555,26 +549,26 @@ void guiInit() guiFnt = puGetDefaultLabelFont(); if ( current_options.get_mouse_pointer() == 0 ) { - // no preference specified for mouse pointer, attempt to autodetect... - // Determine if we need to render the cursor, or if the windowing - // system will do it. First test if we are rendering with glide. - if ( strstr ( general.get_glRenderer(), "Glide" ) ) { - // Test for the MESA_GLX_FX env variable - if ( (mesa_win_state = getenv( "MESA_GLX_FX" )) != NULL) { - // test if we are fullscreen mesa/glide - if ( (mesa_win_state[0] == 'f') || - (mesa_win_state[0] == 'F') ) { - puShowCursor (); - } - } - } - mouse_active = ~mouse_active; + // no preference specified for mouse pointer, attempt to autodetect... + // Determine if we need to render the cursor, or if the windowing + // system will do it. First test if we are rendering with glide. + if ( strstr ( general.get_glRenderer(), "Glide" ) ) { + // Test for the MESA_GLX_FX env variable + if ( (mesa_win_state = getenv( "MESA_GLX_FX" )) != NULL) { + // test if we are fullscreen mesa/glide + if ( (mesa_win_state[0] == 'f') || + (mesa_win_state[0] == 'F') ) { + puShowCursor (); + } + } + } + mouse_active = ~mouse_active; } else if ( current_options.get_mouse_pointer() == 1 ) { - // don't show pointer + // don't show pointer } else if ( current_options.get_mouse_pointer() == 2 ) { - // force showing pointer - puShowCursor(); - mouse_active = ~mouse_active; + // force showing pointer + puShowCursor(); + mouse_active = ~mouse_active; } // Set up our Dialog Boxes diff --git a/Simulator/GUI/gui.h b/Simulator/GUI/gui.h index e2fc514e5..75d20f80e 100644 --- a/Simulator/GUI/gui.h +++ b/Simulator/GUI/gui.h @@ -50,7 +50,6 @@ extern fntTexFont *guiFntHandle; // Activate Dialog Box #define FG_PUSH_PUI_DIALOG( X ) \ maybeToggleMouse(); \ - puPushGroup( (X) ) ; \ puPushLiveInterface( (X) ) ; \ ( X )->reveal() @@ -58,7 +57,6 @@ extern fntTexFont *guiFntHandle; #define FG_POP_PUI_DIALOG( X ) \ (X)->hide(); \ puPopLiveInterface(); \ - puPopGroup(); \ guiFixPanel(); \ maybeToggleMouse();