compile function RTI_Example_Login_Template( object, method, param1, param2, param3, param4, param5, param6, param7, param8 )
/*
   ** Copyright (C) 2012-2019 Revelation Software Inc. All Rights Reserved **

   Author   : Mr C
   Date     : September 2019
   Purpose  : Commuter module for the RTI_EXAMPLE_LOGIN_TEMPLATE form

   Comments
   ========
    

   Amended  Date        Reason
   =======  ====        ======
*/
   #pragma precomp event_precomp

   declare function get_Property, set_Property, utility, retStack, rti_ErrorText
   declare function ps_Get_Property, rti_Res2Str, msg, exec_Method
   $insert rti_SSP_Equates
   $insert logical
   
   if assigned( object ) else object = ""
   if assigned( method ) else method = ""
   if assigned( param1 ) else param1 = ""
   if assigned( param2 ) else param2 = ""
   if assigned( param3 ) else param3 = ""
   if assigned( param4 ) else param4 = ""
   if assigned( param5 ) else param5 = ""
   if assigned( param6 ) else param6 = ""
   if assigned( param7 ) else param7 = ""
   if assigned( param8 ) else param8 = ""
   
   errorText = ""
   abort     = FALSE$
   retVal    = ""
   atCtrl    = field( object, ".", 2, 999 )
   
   if bLen( method ) then
      locate method in "CLICK,OMNIEVENT" using "," setting pos then
         on pos goSub onClick,onOmniEvent
      end
   end

   if abort then
      if bLen( errorText ) then
         goSub errorMsg
      end
   end

return retVal

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////  
// onClick subroutine
//
// Main CLICK event dispatch handler
//
// ----------------------------------------------------------------------------
// [i]   atCtrl : ID of the object triggering the CLICK event - this is
//              : NOT fully qualified.
// ----------------------------------------------------------------------------
onClick:

   begin case
      case ( atCtrl == "LOGIN_BUTTON" )
         goSub loginButton_OnClick
   end case
   
return

///////////////////////////////////////////////////////////////////////////////
// onOmniEvent subroutine
//
// Main OMNIEVENT event dispatch handler
//
// ----------------------------------------------------------------------------
// [i]   param1  : message
// [i]   param2  : Param 1
// [i]   param3  : Param 2
// [i]   param4  : Param 3
// [i]   param5  : Param 4
// [i]   param6  : Param 5
// [i]   param7  : Param 6
// ----------------------------------------------------------------------------  
onOmniEvent:

   transfer param1 to message
   transfer param2 to param1
   transfer param3 to param2
   transfer param4 to param3
   transfer param5 to param4
   transfer param6 to param5
   transfer param7 to param6
   
   begin case
      case ( atCtrl == "INITLOGIN" )
         goSub initLogin_OnOmniEvent
   end case
   
   transfer param6  to param7
   transfer param5  to param6
   transfer param4  to param5
   transfer param3  to param4
   transfer param2  to param3
   transfer param1  to param2
   transfer message to param1
   
return

///////////////////////////////////////////////////////////////////////////////
#region initLogin 
///////////////////////////////////////////////////////////////////////////////
// initLogin_OnOmniEvent subroutine
//
// OMNIEVENT event handler for the INITLOGIN control
//
//    INITLOGIN is a simple static control that responds to an "INITLOGIN" 
//    OMNIEVENT message - this is called from the "hosting" PS_OPENAPP form
//    this form is used as a template
//
// ----------------------------------------------------------------------------
// [i]   message : Identifies the message to process
// [i]   param1  : Message dependant parameter
// [i]   param2  : Message dependant parameter
// [i]   param3  : Message dependant parameter
// [i]   param4  : Message dependant parameter
// [i]   param5  : Message dependant parameter
// [i]   param6  : Message dependant parameter
// ----------------------------------------------------------------------------  
initLogin_OnOmniEvent:

   locate message in "INITLOGIN" using "," setting pos then
      on pos goSub initLogin_OnOmniEvent_initLogin
   end
   
return

///////////////////////////////////////////////////////////////////////////////
// initLogin_OnOmniEvent_initLogin subroutine
//
// INITLOGIN OMNIEVENT message handler for the INITLOGIN control
//
//    1) Check that we have an EXAMPLES application and select it
//    2) Force it into run mode
//
// ----------------------------------------------------------------------------
// [i]   param1 : CreateParam.  Contains the original parameters as passed to 
//              : the "real" login form (PS_OPENAPP)
//              :
//              :   <1> AppID to preselect
//              :   <2> UserID to preselect
//              :   <3> Primary boot flag
//              :   <4> Template ID to use
// ----------------------------------------------------------------------------
initLogin_OnOmniEvent_initLogin:

   createParam = param1
   
   // Check to see that this system supports the EXAMPLES app
   appIDs = .lst_AppIDs->list
   
   locate "EXAMPLES" in appIDs using @fm setting pos else
      errorText = "The EXAMPLES app cannot be found in this system"
      goSub errorMsg; errorText = ""
      call send_Event( @window, "CLOSE" )
      return
   end
      
   // Changing the appID and checking the "RunApp" checkbox will change 
   // the window title so something like "Open Application" or "Run 
   // Application", so cache it and reset it after the changes.
   winText = @@window->text
   
   // Force the examples app to load
   .lst_appIDs->changeText( "EXAMPLES" )
   
   // If the EXAMPLES app can be "Run" then the CHK_RUNAPP checkbox will be
   // enabled - in this case we'll ensure it's checked.
   if ( .chk_RunApp->enabled ) then
      .chk_RunApp->setChecked( TRUE$ )
   end
   
   // Restore the title from the template
   @@window->text = winText
   
return

///////////////////////////////////////////////////////////////////////////////
#endregion initLogin
///////////////////////////////////////////////////////////////////////////////
#region loginButton 
///////////////////////////////////////////////////////////////////////////////
// loginButton_OnClick subroutine
//
// CLICK event handler for the LOGIN_BUTTON control. 
//
//    1) Transfer the username and password entered by the user to the "real"
//       controls (EDL_USERNAME) and (EDL_PASSWORD)
//    2) Execute a Click method on the "real" OK button (BTK_OK) to log into
//       the application.
//
// ----------------------------------------------------------------------------
loginButton_OnClick:

   // Transfer the credentials
   .edl_UserName->text = .userName->text
   .edl_Password->text = .password->text
   
   // Click the OK button to authenticate
   .btn_ok->click( "" )

return

///////////////////////////////////////////////////////////////////////////////
#endregion loginButton
///////////////////////////////////////////////////////////////////////////////
#region errorHandlers
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// errorMsg subroutine
//
// Displays a simple error message
//
// ----------------------------------------------------------------------------
// [i]   errorText    : Text to display in the message
// [i]   errorCaption : Caption for the message
// ----------------------------------------------------------------------------
errorMsg:

   if assigned( errorCaption ) else errorCaption = ""
   if bLen( errorCaption ) else
      errorCaption = @@window->text
   end

   msgArray     = errorText
   msgArray<4>  = "!"
   msgArray<6>  = -2
   msgArray<7>  = -2
   msgArray<8>  = "C"
   msgArray<12> = errorCaption

   call msg( @window, msgArray )

return

///////////////////////////////////////////////////////////////////////////////
// setSPError subroutine
//
// Translates an SSP status error array into a "text version" from REVERROR.DAT
//
// ----------------------------------------------------------------------------
// [i,o] errorText : SSP status error to convert.  Returns the "text" version 
// ----------------------------------------------------------------------------
setSPError:
   errorText = rti_ErrorText( "SP", errorText )
   abort = TRUE$
return

///////////////////////////////////////////////////////////////////////////////
#endregion errorHandlers
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
