///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright (c) 2000-2019 Ericsson Telecom AB                               //
//                                                                           //
// All rights reserved. This program and the accompanying materials          //
// are made available under the terms of the Eclipse Public License v2.0     //
// which accompanies this distribution, and is available at                  //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html                                 //
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
//  Module: EPTF_CLL_UIHandler_XTDPTemplateDefinitions
// 
//  Purpose:
//    This module contains message templates for communication with the TTCN-3 Runtime GUI implementation.
//
//  Module Parameters:
//      tsp_EPTF_runtimeGuiExitButtonWidgetId - *charstring* - the widget ID of the exit button.
//		    NOTE: It should be removed when the handling of the pushbutton event will be moved to another component.
// 
//  Module depends on:
//    <XTDP_PDU_Defs>
//    <XTDPasp_Types>
//    <EPTF_CLL_UIHandler_MsgDefinitions>
//
//  Current Owner:
//    Laszlo Skumat (ELSZSKU)
// 
//  Last Review Date:
//    2007-
//
//  Detailed Comments:
//    -
//
///////////////////////////////////////////////////////////////

module EPTF_CLL_UIHandler_XSD_XTDPTemplateDefinitions
{

//=========================================================================
// Import Part
//=========================================================================
import from ttcn_ericsson_se_protocolModules_xtdp_xtdl all;
import from ttcn_ericsson_se_protocolModules_xtdp_xtdp all;
import from EPTF_CLL_UIHandler_MsgDefinitions all;
import from EPTF_CLL_UIHandler_Definitions all;

modulepar charstring tsp_EPTF_runtimeGuiExitButtonWidgetId := "EPTF_exit_ttcn_button";


///////////////////////////////////////////////////////////
// Template: tr_ASP_XTDP_exitTTCNButtonPressed
//
// Purpose:
//   Receive template to remark that Exit TTCN button was pressed by user on Runtime GUI.
//
// References:
//   <XTDP_Requests>
///////////////////////////////////////////////////////////
template XTDP_Requests tr_XTDP_Requests_exitTTCNButtonPressed :=
{
  ackRequested := *,
  xTDP_Request_list := {
    { requestId := ?,
      action_ := { choice := {
        put := {
          widget := { widgetId := tsp_EPTF_runtimeGuiExitButtonWidgetId, widgetType := ? },
          argument_list := ?
        }
      } }
    }
  }
}

group WidgetManipulation{
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_layoutRequest
  //
  // Purpose:
  //   Send template to get current layout (widget structure) of Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> 
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_layoutRequest :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_LayoutRequest:= {
          widgetId := omit
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_enableWidget
  //
  // Purpose:
  //   Send template to enable xtdp_pushButton field with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_enableWidget(
    XTDP_Identifier pl_strId // widgetId of the xtdp_pushButton field to enable
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                enable := {
                  widget := { widgetId := pl_strId, widgetType := pushButton }
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_disableWidget
  //
  // Purpose:
  //   Send template to disable xtdp_pushButton field with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_disableWidget(
    XTDP_Identifier pl_strId // widgetId of the xtdp_pushButton field to disable
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                disable := {
                  widget := { widgetId := pl_strId, widgetType := pushButton }
                }
              }}
            }
          }
        }
      }
    }
  }

  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_setFocusToWidget
  //
  // Purpose:
  //   Send template to set the focus to a widget with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_setFocusToWidget(
    XTDP_Identifier pl_strId // ID of widget to be focused
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ :=  { choice := {
                setfocus := {
                  widget := { widgetId := pl_strId, widgetType := none_ }
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_setFocusToTab
  //
  // Purpose:
  //   Send template to set the focus to certain tab of a tabbox with given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_setFocusToTab(
    XTDP_Identifier pl_strId, // ID of widget to be focused
    integer pl_arg 
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ :=  { choice := {
                setfocus := {
                  widget := { widgetId := pl_strId, widgetType := none_ }
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  //////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleAddElementToGUI
  //
  // Purpose:
  //   Send template to add an element to the Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (template charstring pl_parentWidgetId, XTDP_XML_Tag pl_xul)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleAddElementToGUI(template EPTF_UIHandler_WidgetIdString pl_parentWidgetId, Widgets pl_widgets) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_AddRequests := {
          xTDP_AddRequest_list := {
            {
              requestId := ?,
              parentWidgetId := pl_parentWidgetId,
              widgets := pl_widgets
            }
          }
        }
      }
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRemoveElementFromGUI
  //
  // Purpose:
  //   Send template to add an element to the Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_widgetId)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRemoveElementFromGUI(XTDP_Identifier pl_widgetId) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_RemoveRequests := {
          xTDP_RemoveRequest_list := {
            {
              requestId := ?,
              widgetId := pl_widgetId
            }
          }
        }
      }
    }
  }
  
}
group DataManipulation{
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToLedWithText
  //
  // Purpose:
  //   Send template to modify value of xtdp_statusLEDWithText field with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_LedId,
  //               charstring pl_arg)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToLedWithText(
    XTDP_Identifier pl_LedId, // widgetId of LED 
    charstring pl_arg 
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_LedId, widgetType := statusLEDWithText },
                  argument_list := {pl_arg}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToLed
  //
  // Purpose:
  //   Send template to modify color of xtdp_statusLED field with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_LedId,
  //               charstring pl_color)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToLed(
    XTDP_Identifier pl_LedId, // widgetId of LED 
    charstring pl_color //color of LED to be set to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_LedId, widgetType := statusLED },
                  argument_list := {pl_color}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToInt
  //
  // Purpose:
  //   Send template to modify value of xtdp_integerField with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_intId,
  //               integer pl_int)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToInt(
    XTDP_Identifier pl_intId, // widgetId of the integer field to modify
    integer pl_int //the integer to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_intId, widgetType := integerField },
                  argument_list := {int2str(pl_int)}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToFlt
  //
  // Purpose:
  //   Send template to modify value of xtdp_string with the given widgetId on Runtime GUI.
  //   NOTE that float handling implemented as strings in GUI! 
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_fltId,
  //               float pl_flt)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToFlt(
    XTDP_Identifier pl_fltId, // widgetId of the float field to modify
    float pl_flt //the float to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_fltId, widgetType := string },
                  argument_list := {float2str(pl_flt)}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToBitStr
  //
  // Purpose:
  //   Send template to modify value of xtdp_string with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId,
  //                charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToBitStr(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    charstring pl_str //the xtdp_string to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_strId, widgetType := string },
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToOctStr
  //
  // Purpose:
  //   Send template to modify value of xtdp_string with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId,
  //                charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToOctStr(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    charstring pl_str //the xtdp_string to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_strId, widgetType := string },
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToStr
  //
  // Purpose:
  //   Send template to modify value of xtdp_string with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId,
  //                charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToStr(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    charstring pl_str //the xtdp_string to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_strId, widgetType := string },
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }

  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueTovalueList
  //
  // Purpose:
  //   Send template to modify value of xtdp_valueList with the given widgetId on Runtime GUI.
  //
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueTovalueList(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    XTDP_Actions.choice.put.argument_list pl_strl //the xtdp_valueList to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_strId, widgetType := string },
                  argument_list := pl_strl
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }

  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToHexStr
  //
  // Purpose:
  //   Send template to modify value of xtdp_string with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId,
  //                charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToHexStr(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    charstring pl_str //the xtdp_string to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            {
              requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_strId, widgetType := string },
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToChkBox
  //
  // Purpose:
  //   Send template to modify value of xtdp_checkBox with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_chkId,
  //                charstring pl_chk)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToChkBox(
    XTDP_Identifier pl_chkId, // widgetId of the checkbox to modify
    charstring pl_chk //the xtdp_string to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_chkId, widgetType := checkBox },
                  argument_list := {pl_chk}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }

  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToTgglButton
  //
  // Purpose:
  //   Send template to modify value of xtdp_toggleButton with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_chkId,
  //                charstring pl_chk)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToTgglButton(
    XTDP_Identifier pl_chkId, // widgetId of the checkbox to modify
    charstring pl_chk //the xtdp_string to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { widgetId := pl_chkId, widgetType := toggleButton },
                  argument_list := {pl_chk}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_singleRqPutValueToFloatNumericalwidget
  //
  // Purpose:
  //   Send template to modify value of the floatField of the Numerical widget with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_chkId,
  //                charstring pl_arg)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_singleRqPutValueToNumericalwidget(
    XTDP_Identifier pl_chkId, // widgetId of the checkbox to modify
    charstring  pl_arg //the tje value to set the widget to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                put := {
                  widget := { 
                    widgetId := pl_chkId, 
                    widgetType := none_
                  },
                  argument_list := {pl_arg}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_traceItem
  //
  // Purpose:
  //   Send template to send a traceitem to a trace on the Runtime GUI.
  //   This template reprezents an element of xtdp_Requests array in
  //   the <ts_ASP_XTDP_sendTimeline> template
  //
  // References:
  //   <ASP_XTDP> ( integer pl_requestId, <EPTF_UIHandler_WidgetIdString> pl_widgetId, charstring pl_valPair)
  ///////////////////////////////////////////////////////////
  template XTDP_Request ts_ASP_XTDP_traceItem(
    integer pl_requestId,
    EPTF_UIHandler_WidgetIdString pl_widgetId,
    charstring pl_valPair) := {
    requestId := pl_requestId,
    action_ := { choice := {
      put := {
        widget := {
          widgetId := pl_widgetId,
          widgetType := trace
        },
        argument_list := {pl_valPair}
      }
    }}
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_sendTimeline
  //
  // Purpose:
  //   Send template to send data to a trace on the Runtime GUI.
  //     The pl_requests parameter can be created by <ts_ASP_XTDP_traceItem> template.
  //
  // References:
  //   <ASP_XSD_XTDP> ( integer pl_clientId, <XTDP_Requests> pl_requests)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_sendTimeline(
    integer pl_clientId, 
    XTDP_Requests pl_requests) := {
    client_id := pl_clientId,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := pl_requests
      }
    }
  }
}

group TooltipManipulation{
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_setTooltipforString
  //
  // Purpose:
  //   Send template to set tooltip value of xtdp_string with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId,
  //                charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_setTooltipforString(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    charstring pl_str //the xtdp_string to set the tooltip to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                settooltip := {
                  widget := { widgetId := pl_strId, widgetType := string },
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }// xtdp-message
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_setTooltipforStatusLed
  //
  // Purpose:
  //   Send template to set tooltip value of xtdp_statusLEDWithText with the given widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId,
  //                charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_setTooltipForStatusLed(
    XTDP_Identifier pl_strId, // widgetId of the xtdp_string field to modify
    charstring pl_str //the xtdp_string to set the tooltip to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := {
                settooltip := {
                  widget := { widgetId := pl_strId, widgetType := statusLEDWithText },
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_ASP_XTDP_setTooltipforAnyWidget
  //
  // Purpose:
  //   Send template to set tooltip value for any widget with the given type and widgetId on Runtime GUI.
  //
  // References:
  //   <ASP_XSD_XTDP> (<XTDP_Identifier> pl_strId, 
  //               XTDL_WidgetType pl_type,
  //               charstring pl_str)
  ///////////////////////////////////////////////////////////
  template ASP_XSD_XTDP ts_ASP_XTDP_setTooltipforAnyWidget(
    XTDP_Identifier pl_strId, // widgetId of the widget field  to modify
    Widgettype pl_type, // widget type of the widget field  to modify
    charstring pl_str //the xtdp_string to set the tooltip to
  ) :=
  {
    client_id := omit,
    data := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?, 
              action_ := { choice := {
                settooltip := {
                  widget := { widgetId := pl_strId, widgetType := pl_type }, 
                  argument_list := {pl_str}
                }
              }}
            }
          }
        }
      }
    }
  }
}

///////////////////////////////////////////////////////////
// Template: tr_ASP_XTDP_singleSuccessResp
//
// Purpose:
//   Receive template to indicate success from Runtime GUI.
//
// References:
//   <ASP_XSD_XTDP> 
///////////////////////////////////////////////////////////
template ASP_XSD_XTDP tr_ASP_XTDP_singleSuccessResp :=
{
  client_id := ?,
  data := {
    transactionID := omit,
    choice := {
      xTDP_Responses := {
        xTDP_Response_list := {
          { requestId := ?,
            responseCode := success,
            argument := omit,
            errorSource := omit,
            errorCode := omit,
            errorMessage := omit
          }
        }
      }
    }
  }
}

///////////////////////////////////////////////////////////
// Template: tr_XTDP_Responses_singleSuccessResp
//
// Purpose:
//   Receive template to indicate success from Runtime GUI.
//
// References:
//   <XTDP_Responses> 
///////////////////////////////////////////////////////////
template XTDP_Responses tr_XTDP_Responses_singleSuccessResp :=
{
  xTDP_Response_list := {
    { requestId := ?,
      responseCode := success,
      argument := omit,
      errorSource := omit,
      errorCode := omit,
      errorMessage := omit
    }
  }
}


///////////////////////////////////////////////////////////
// Template: ts_XTDP_Responses_singleSuccessResp
//
// Purpose:
//   Receive template to indicate success from Runtime GUI.
//   This is an answer for a corresponding request, both identified by the same requestID.
//
// References:
//   <XTDP_Responses>  (integer pl_rqId)
///////////////////////////////////////////////////////////
template XTDP_Responses ts_XTDP_Responses_singleSuccessResp (
  integer pl_rqId //requestId
) :=
{
  xTDP_Response_list := {
    { requestId := pl_rqId,
      responseCode := success,
      argument := omit,
      errorSource := omit,
      errorCode := omit,
      errorMessage := omit
    }
  }
}

///////////////////////////////////////////////////////////
// Template: ts_ASP_XTDP_singleErrorResp
//
// Purpose:
//   Receive template to indicate error on Runtime GUI.
//   This is an answer for a request, both identified by the same requestID.
//
// References:
//   <ASP_XSD_XTDP>  (integer pl_rqId,
//    charstring pl_argument,
//    <XTDP_ErrorSource> pl_errorSource,
//    <XTDP_ActionErrorCode> pl_errorCode,
//    charstring pl_errorMessage)
///////////////////////////////////////////////////////////
template ASP_XSD_XTDP ts_ASP_XTDP_singleErrorResp (
  integer pl_rqId,
  charstring pl_argument,
  XTDP_ErrorSource pl_errorSource,
  XTDP_ActionErrorCode pl_errorCode,
  charstring pl_errorMessage
) :=
{
  client_id := omit,
  data := {
    transactionID := omit,
    choice := {
      xTDP_Responses := {
        xTDP_Response_list := {
          { requestId := pl_rqId,
            responseCode := error_,
            argument := pl_argument,
            errorSource := pl_errorSource,
            errorCode := pl_errorCode,
            errorMessage := pl_errorMessage
          }
        }
      }
    }
  }
}

///////////////////////////////////////////////////////////
// Template: tr_ASP_XTDP_singleErrorResp
//
// Purpose:
//   Receive template to indicate error on Runtime GUI.
//
// References:
//   <ASP_XSD_XTDP> 
///////////////////////////////////////////////////////////
template ASP_XSD_XTDP tr_ASP_XTDP_singleErrorResp :=
{
  client_id := ?,
  data := {
    transactionID := omit,
    choice := {
      xTDP_Responses := {
        xTDP_Response_list := {
          { requestId := ?,
            responseCode := ?,
            argument := *,
            errorSource := ?,
            errorCode := ?,
            errorMessage := ?
          }
        }
      }
    }
  }
}

///////////////////////////////////////////////////////////
// Template: tr_ASP_XTDP_widgetModification
//
// Purpose:
//   Receive template to modify a widget of given type and ID on Runtime GUI.
//
// References:
//   <ASP_XSD_XTDP> (template <XTDP_Identifier> pl_wId, template <Widgettype> pl_wType)
///////////////////////////////////////////////////////////
template ASP_XSD_XTDP tr_ASP_XTDP_widgetModification(template XTDP_Identifier pl_wId, template Widgettype pl_wType) :=
{
  client_id := ?,
  data := {
    transactionID := omit,
    choice := {
      xTDP_Requests := {
        ackRequested := omit,
        xTDP_Request_list := {
          { requestId := ?,
            action_ := { choice := {
              put := {
                widget := { widgetId := pl_wId, widgetType := pl_wType },
                argument_list := ?
              }
            }}
          }
        }
      }
    }    
  }
}

///////////////////////////////////////////////////////////
// Template: tr_XTDP_Requests_widgetModification
//
// Purpose:
//   Receive template to modify a widget of given type and ID on Runtime GUI.
//
// References:
//   <XTDP_Requests> (template <XTDP_Identifier> pl_wId, template <Widgettype> pl_wType)
///////////////////////////////////////////////////////////
template XTDP_Requests tr_XTDP_Requests_widgetModification(template XTDP_Identifier pl_wId, template Widgettype pl_wType) :=
{
  ackRequested := *,
  xTDP_Request_list := {
    { requestId := ?,
      action_ := { choice := {
        put := {
          widget := { widgetId := pl_wId, widgetType := pl_wType },
          argument_list := ?
        }
      }}
    }
  }
}

group TypedWidgetCreationTemplates{
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createTab
  //
  // Purpose:
  //   Send template to create a tab on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (<EPTF_UIHandler_WidgetIdString> pl_myWidgetID, charstring pl_myLabel)
  ///////////////////////////////////////////////////////////
  /*template Widgets ts_XTDP_XML_Tag_createTab(EPTF_UIHandler_WidgetIdString pl_myWidgetID, charstring pl_myLabel) := 
  {
    tab := {
      id       := pl_myWidgetID,
      label_ := pl_myLabel
    }
  }*/
  
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createTabPanel
  //
  // Purpose:
  //   Send template to create a tabpanel on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (charstring pl_widgetId, charstring pl_myLabel)
  ///////////////////////////////////////////////////////////
  /*template Widgets ts_XTDP_XML_Tag_createTabPanel(charstring pl_myWidgetID, charstring pl_myLabel) := 
  {
    tabpanel := {
      id := omit,
      maxheight := omit,
      orientation := vertical,
      embeddedwidgets   := {{}}
    }
  }*/
  
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createTabPage
  //
  // Purpose:
  //   Send template to create a tabpage on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (charstring pl_widgetId, charstring pl_myLabel)
  ///////////////////////////////////////////////////////////
  template Widgets ts_XTDP_XML_Tag_createTabPage(charstring pl_myWidgetID, charstring pl_myLabel) := 
  {
    tabpage := {
      customclass := omit,
      disabledongui := omit,
      id := pl_myWidgetID,
      label_ := pl_myLabel,
      maxheight := omit,
      orientation := vertical,
      tooltiptext := omit,
      embeddedwidgets   := {{}}
    }
  }
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createEmptyHbox
  //
  // Purpose:
  //   Send template to create an empty hbox on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (charstring pl_widgetId)
  ///////////////////////////////////////////////////////////
  template Widgets ts_XTDP_XML_Tag_createEmptyHbox(charstring pl_myWidgetID) := 
  {
    hbox := {
      customclass := omit,
      disabled := omit,
      disabledongui := omit,
      fixedposition := omit,
      flex    := omit,
      id      := pl_myWidgetID,
      orientation  := vertical,
      scrollable := omit,
      embeddedwidgets := {{}}
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createEmptyHboxOrient
  //
  // Purpose:
  //   Send template to create an empty hbox with given orientation on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (charstring pl_widgetId, charstring pl_orient)
  ///////////////////////////////////////////////////////////
  template Widgets ts_XTDP_XML_Tag_createEmptyHboxOrient(charstring pl_myWidgetID, Orientation pl_orient) := 
  {
    hbox := {
      customclass := omit,
      disabled := omit,
      disabledongui := omit,
      fixedposition := omit,
      flex    := omit,
      id      := pl_myWidgetID,
      orientation  := pl_orient,
      scrollable := omit,
      embeddedwidgets := {{}}
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createLabelType
  //
  // Purpose:
  //   Send template to create a label on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (charstring pl_widgetId, charstring pl_labelStyle, charstring pl_textValue)
  ///////////////////////////////////////////////////////////
  template Widgets ts_XTDP_XML_Tag_createLabelType(charstring pl_myWidgetID, charstring pl_labelStyle, charstring pl_textValue) := 
  {
    label_ := {
      /*customclass  :=*/ omit,
      /*disabled  :=*/ omit,
      /*disabledongui :=*/ omit,
      /*flex      :=*/ omit,
      /*id        :=*/ pl_myWidgetID,
      /*style     :=*/ pl_labelStyle,
      /*tooltiptext :=*/ omit,
      /*value_    :=*/ pl_textValue,
      /*externaldata :=*/ omit
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createButton
  //
  // Purpose:
  //   Send template to create a button on the Runtime GUI.
  //
  // References:
  //   <XTDP_XML_Tag> (charstring pl_widgetId, boolean pl_buttonDisabled, charstring pl_buttonLabel)
  ///////////////////////////////////////////////////////////
  template Widgets ts_XTDP_XML_Tag_createButton(charstring pl_myWidgetID, boolean pl_buttonDisabled, charstring pl_buttonLabel, in charstring pl_imageid) := 
  {
    button := {
      checked     := omit,
      customclass := omit,
      disabled    := pl_buttonDisabled,
      disabledongui := omit,
      flex        := omit,
      id          := pl_myWidgetID,
      imageid     := pl_imageid,
      label_      := pl_buttonLabel,
      tooltiptext := omit,
      type_       := omit,
      externaldata := omit
    }
  }
  
  ///////////////////////////////////////////////////////////
  // Template: ts_XTDP_XML_Tag_createSpacer
  //
  // Purpose:
  //   Send template to create a spacer on the Runtime GUI.
  //
  // References:
  //   <Widgets> (float pl_flex)
  ///////////////////////////////////////////////////////////
  template Widgets ts_XTDP_XML_Tag_createSpacer(float pl_flex) := 
  {
    spacer := {
      flex := pl_flex,
      id   := omit
    }
  }
}
} // end of module
