///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_TimeProfileEditor_XTDPTemplates
//
// Purpose:
//   This TTCN-3 module contains XTDP templates for EPTF Time Profile Editor
//
//  Module depends on:
//    <ttcn_ericsson_se_protocolModules_xtdp_xtdp>
//    <ttcn_ericsson_se_protocolModules_xtdp_xtdl>
//    <XSD>
// 
// Current Owner:
//    Janos Zoltan Svaner (ejnosvn)
//
// Last Review Date:
//    2008-??-??
//
//  Detailed Comments:
//   -
// 
///////////////////////////////////////////////////////////

module EPTF_CLL_TimeProfileEditor_XTDPTemplates
{

//=========================================================================
// Import Part
//=========================================================================

import from XSD all;
import from ttcn_ericsson_se_protocolModules_xtdp_xtdl all;
import from ttcn_ericsson_se_protocolModules_xtdp_xtdp all;

//=========================================================================
// Templates for sending
//=========================================================================

template Tabpages ts_xtdp_tabpages(
    template charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    Tabpagegroups pl_tabpagegroups ) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  id := pl_id,
  layout := omit,
  tabpagegroups := pl_tabpagegroups
}

template Tabpage ts_xtdp_tabpage(
    template charstring pl_id,
    template charstring pl_label,
    template Orientation pl_orientation,
    Embeddedwidgets pl_embeddedwidgets) := {
  customclass := omit,
  disabledongui := omit,
  id := pl_id,
  label_ := pl_label,
  maxheight := omit,
  orientation := pl_orientation,
  tooltiptext := omit,
  embeddedwidgets := pl_embeddedwidgets
}

template Hbox ts_xtdp_hbox(
    template charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    template Orientation pl_orient,
    Embeddedwidgets pl_embeddedwidgets) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  fixedposition := omit,
  flex := pl_flex,
  id := pl_id,
  orientation := pl_orient,
  scrollable := omit,
  embeddedwidgets := pl_embeddedwidgets
}

template Textbox ts_xtdp_textbox(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    template boolean pl_multiline,
    template boolean pl_readonly,
    template float pl_rows,
    template charstring pl_textvalue,
    template charstring pl_type,
    template boolean pl_wrap) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  focusafterchange := omit,
  id := pl_id,
  multiline := pl_multiline,
  readonly := pl_readonly,
  rows := pl_rows,
  tooltiptext := omit,
  value_ := pl_textvalue,
  widgetType := pl_type,
  wrap := pl_wrap,
  externaldata := omit
}

template Button ts_xtdp_button(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    template boolean pl_checked,
    template charstring pl_buttonlabel,
    template charstring pl_type,
    template charstring pl_imageid) := {
  checked := pl_checked,
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  id := pl_id,
  imageid := pl_imageid,
  label_ := pl_buttonlabel,
  tooltiptext := omit,
  type_ := pl_type,
  externaldata := omit
}

template Listbox ts_xtdp_listbox(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    integer pl_rows,
    template Seltype pl_seltype,
    Listitemgroups pl_listitemgroups) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  id := pl_id,
  rows := pl_rows,
  seltype := pl_seltype,
  tooltiptext := omit,
  externaldata := omit,
  listitemgroups := pl_listitemgroups
}

template Listitem ts_xtdp_listitem(
    charstring pl_id,
    charstring pl_label,
    template boolean pl_selected) := {
  id := pl_id,
  label_ := pl_label,
  selected := pl_selected
}

template Label ts_xtdp_label(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    charstring pl_value) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  id := pl_id,
  style := omit,
  tooltiptext := omit,
  value_ := pl_value,
  externaldata := omit
}

template Spacer ts_xtdp_spacer(
    template charstring pl_id,
    float pl_flex) := {
  flex := pl_flex,
  id := pl_id
}

template Numericalwidget ts_xtdp_numericalwidget(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    Numericalwidgettype pl_type,
    float pl_value,
    template boolean pl_readonly,
    template boolean pl_spinner,
    template boolean pl_slider,
    template float pl_minvalue,
    template float pl_maxvalue,
    template float pl_stepsize) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  id := pl_id,
  maxvalue := pl_maxvalue,
  minvalue := pl_minvalue,
  readonly := pl_readonly,
  slider := pl_slider,
  spinner := pl_spinner,
  stepsize := pl_stepsize,
  tooltiptext := omit,
  value_  := pl_value,
  widgetType := pl_type,
  externaldata := omit
}

template Menulist ts_xtdp_menulist(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    template boolean pl_editable,
    template charstring pl_menulabel,
    Menupopup pl_menupopup) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  editable := pl_editable,
  flex := pl_flex,
  id := pl_id,
  label_ := pl_menulabel,
  readonly := omit,
  tooltiptext := omit,
  menupopup := pl_menupopup,
  externaldata := omit
}

template Menuitem ts_xtdp_menuitem(
    charstring pl_id,
    charstring pl_label,
    template boolean pl_selected) := {
  id := pl_id,
  label_ := pl_label,
  selected := pl_selected,
  externaldata := omit
}

template Tree ts_xtdp_tree(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    float pl_rows,
    Treecols pl_treecols,
    Treechildren pl_treechildren) := {
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  hidecolumnpicker := omit,
  id := pl_id,
  rows := pl_rows,
  treecols := pl_treecols,
  treechildren := pl_treechildren
}

template Treecol ts_xtdp_treecol(
    template charstring pl_id,
    template float pl_flex,
    template boolean pl_editable,
    charstring pl_columnlabel,
    Widgettype pl_widgettype) := {
  align := omit,
  customclass := omit,
  disabledongui := omit,
  editable := pl_editable,
  flex := pl_flex,
  id := pl_id,
  label_ := pl_columnlabel,
  tooltiptext := omit,
  treecellalign := omit,
  widgetType := pl_widgettype  
}

template Treecell ts_xtdp_treecell(
    template charstring pl_id,
    charstring pl_label,
    template charstring pl_tooltip) := {
  align := omit,
  customclass := omit,
  id := pl_id,
  imageid := omit,
  label_ := pl_label,
  tooltiptext := pl_tooltip,
  visible := true,
  externaldata := omit
}

template Chart ts_xtdp_chart(
    charstring pl_id,
    template float pl_flex,
    template boolean pl_disabled,
    charstring pl_title,
    template boolean pl_zoomable,
    template AxisType pl_axisXType,
    template AxisType pl_axisYType,
    template boolean pl_gridX,
    template boolean pl_gridY,
    template charstring pl_foregroundColor,
    template charstring pl_backgroundColor,
    template charstring pl_gridColor,
    Tracegroups pl_tracegroups) := {
  axisXType := pl_axisXType,
  axisYType := pl_axisYType,
  backgroundColor := pl_backgroundColor,
  customclass := omit,
  disabled := pl_disabled,
  disabledongui := omit,
  flex := pl_flex,
  foregroundColor := pl_foregroundColor,
  gridColor := pl_gridColor,
  gridX := pl_gridX,
  gridY := pl_gridY,
  id := pl_id,
  title := pl_title,
  tooltiptext := omit,
  zoomable := pl_zoomable,
  tracegroups := pl_tracegroups
}

template Trace ts_xtdp_trace(
    charstring pl_id,
    charstring pl_name,
    template XSD.NonNegativeInteger pl_maxPoints,
    template charstring pl_color,
    template boolean pl_fill,
    template charstring pl_physicalUnitX,
    template charstring pl_physicalUnitY) := {
  color := pl_color,
  fill := pl_fill,
  id := pl_id,
  maxPoints := pl_maxPoints,
  name := pl_name,
  physicalUnitX := pl_physicalUnitX,
  physicalUnitY := pl_physicalUnitY,
  tooltiptext := omit,
  externaldata := omit,
  choice_list := {}
}


template XTDP_Message ts_xtdp_request(
  template integer pl_client_id,
  integer pl_requestId,
  XTDP_Actions pl_action) := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
          {
            requestId := pl_requestId,
            action_ := pl_action
          }}
        }
      }
} 

//=========================================================================
// Templates for receiving
//=========================================================================

template XTDP_Message tr_xtdp_widget_modification(
    template XTDP_Identifier pl_widgetId,
    template Widgettype pl_widgetType) := {
      transactionID := omit,
      choice := {
        xTDP_Requests := {
          ackRequested := omit,
          xTDP_Request_list := {
            { requestId := ?,
              action_ := { choice := { get := { widget := { pl_widgetId, pl_widgetType}} }    } }
            }
          }
      }
}

template XTDP_Message tr_xtdp_response(
  template integer pl_requestId,
  template XTDP_Result pl_responseCode) := {
      transactionID := omit,
      choice := {
        xTDP_Responses := {
          xTDP_Response_list := { {
            requestId := pl_requestId,
            responseCode := pl_responseCode,
            argument := *,
            errorSource := omit,
            errorCode := omit,
            errorMessage := omit
           } }
        }
      }
}

}  // end of module
