!******************************************************************************!
! Test initialization with LOOKANDFEEL
!
! Arguments: None
!
! @bug      NXM-3619 Intrinsic Initialization
! @author:  Zachary Matthews
! @since    NeXtMidas 3.9.4
!******************************************************************************!
startmacro
  switch INTERACTIVE interAct GET DEF=TRUE  SDEF=TRUE  ! for normal interactive test(s)
  switch BASELINE    baseline GET DEF=FALSE SDEF=TRUE  ! for defects or more obscure test case(s)

  call setDatDir

  if interAct then
    res oldTheme ENV.THEME

    set instructions "Four plots should be displayed below, each with a different lookandfeel theme:\n\n&
    1. JAVA\n2. GEAR3\n3. OCEAN\n4. GEAR1\n\n&
    If all plots appear as described, please click PASS to pass this test."

    set this.timer(0) 0.3
    pipe on
      panel/msgid=MAIN/setup/controls=gc
      gcontrol label macro "Test MACRO"
      gcontrol menu  main "Exit with Status =" "PASS,FAIL" TABLE={ItemColors={PASS="GREEN",FAIL="RED"}} /tleft

      gcontrol text  idtext "Instructions" instructions 24 12 /title

    pipe off

    ! restore original look and feel
    lookandfeel oldTheme
  endif
endmacro

!******************************************************************************!
! Main process message for this macro. Should be right after the ENDMACRO.
!******************************************************************************!
procedure processMessage m:msg
  if msg.name eqs "MAIN" then
    assert/text="^reg.main.name: User indicated tests" msg.data eqss "PASS"
    pipe stop
  elseif msg.name eqs "TIMER" then
    new java.util.ArrayList() myLookAndFeel
    invoke ,, myLookAndFeel.add("JAVA")
    invoke ,, myLookAndFeel.add("GEAR3")
    invoke ,, myLookAndFeel.add("OCEAN")
    invoke ,, myLookAndFeel.add("GEAR1")

    res xpos  (190,450,710,970)
    res ypos   450
    res width  250
    res height 250

    do L:cntr 0 myLookAndFeel.size-1 1
      lookandfeel myLookAndFeel.get(^cntr)
      plot/wpos=(xpos.^cntr,^ypos,^width,^height) ^{datDir}.apenny.prm /bg
    enddo
    set this.timer(0) 0.0   ! turn off the timer
  else
    say "Unhandled message name: ^msg.name from fid: ^msg.fid data: ^msg.data"
  endif
return

!******************************************************************************!
! If an unexpected exception is caught, mark test as failed, unless it is expected
!******************************************************************************!
procedure processException m:emsg
  if expectedException REXISTS then
    assert/text="^reg.main.name: Expected ERROR starts with: ^{expectedException}" expectedException EQSS emsg.data.message
    remove expectedException
  else
    assert/text="^reg.main.name: Caught unexpected exception ^{emsg.data}" "FALSE" isTrue
    if "Trace" SUBS ENV.DEBUG then invoke ,, emsg.data.printStackTrace()
  endif
return

!******************************************************************************!
! Set the dat directory
!******************************************************************************!
procedure setDatDir
  invoke nxmMajor env.nmversion.subString(0,1)
  invoke major java.lang.Integer.valueOf(nxmMajor)
  if major GE 4 then
    invoke s:datDir           nxm.sys.test.DatLocator.getDatDirLocation()
    invoke s:datDirSlash      nxm.sys.test.DatLocator.getDatDirSlashLocation()
    invoke z:sysDatFull       nxm.sys.test.DatLocator.sysDatFull()
    invoke z:sysTestDatExists nxm.sys.test.DatLocator.sysTestDatExists()
  else
    set s:datDir           "nxm.sys.dat"
    set s:datDirSlash      "nxm/sys/dat"
    set z:sysDatFull       true
    set z:sysTestDatExists false
  endif
return
