* FICSAMPLE.VCX.SRC
* Class library derived from 'FoxInCloud base classes' aw.vcx, shared by desktop/LAN ans web versions of the application
* C:\PROGRAM FILES (X86)\ABAQUE\FICSAMPLES\CLASSE\FICSAMPLE.VCX.SRC (included in c:\program files (x86)\abaque\ficsamples\fictuto\fictutobs.exe)
* (3,382 lines before localization)
* ========================================================================================================================

**************************************************
*-- Class Library: ab\aw\samples\fic\classe\ficsample.vcx
**************************************************

**************************************************
*-- Class: ficcad (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcad (ab\aw\aw.vcx)
*-- BaseClass: cursoradapter
*-- Time Stamp: 11/16/16 09:21:14 AM

DEFINE CLASS ficcad AS awcad

  Name = "ficcad"

ENDDEFINE
*-- EndDefine: ficcad
**************************************************

**************************************************
*-- Class: ficcadcustomers (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcad (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: cursoradapter
*-- Time Stamp: 09/13/18 02:02:14 PM

DEFINE CLASS ficcadcustomers AS ficcad

  Height = 22
  Width = 23
  SelectCmd = "SELECT Customer.customer_id, Customer.company_name, Customer.contact_name, Customer.contact_title, Customer.region_id, Customer.active FROM tastrade!customer order by Customer.customer_id"
  CursorSchema = "customer_id c(6),company_name c(40),contact_name c(30),contact_title c(40),region_id I,active L"
  Alias = "customer_lcad"
  DataSourceType = "Native"
  CompareMemo = .F.
  KeyFieldList = "customer_id"
  Tables = "customer"
  UpdatableFieldList = "company_name,contact_name,contact_title,region_id,active"
  UpdateNameList = "customer_id customer.customer_id,company_name customer.company_name,contact_name customer.contact_name,contact_title customer.contact_title,region_id customer.region_id,active customer.active"
  UseCursorSchema = .T.
  __vfpsetup = 0
  Name = "ficcadcustomers"

  PROCEDURE BeforeCursorFill
    lparameters lUseCursorSchema, lNoDataOnLoad, cSelectCmd && Adapting your code: when your code returns .T., add RETURN dodefault(@m.lUseCursorSchema, @m.lNoDataOnLoad, @m.cSelectCmd)

    #IF .F.

    local aFilter[1], iFilter, cFilter

    for iFilter = 1 to AMembers(aFilter, this.oFilter)
      cFilter = m.aFilter[m.iFilter]
      cSelectCmd = m.cSelectCmd + Iif(m.iFilter = 1, ' where', '');
        + Textmerge([((?this.oFilter.<<m.cFilter>>::text) is null or <<m.cFilter>> = ?this.oFilter.<<m.cFilter>>)])
    endfor

    #ENDIF

    RETURN dodefault(@m.lUseCursorSchema, @m.lNoDataOnLoad, @m.cSelectCmd)
  ENDPROC

  PROCEDURE Init
    *** Setup code: DO NOT REMOVE
    local llReturn
    do case
      case not pemstatus(This, '__VFPSetup', 5)
        This.AddProperty('__VFPSetup', 0)
      case This.__VFPSetup = 1
        This.__VFPSetup = 2
      case This.__VFPSetup = 2
        This.__VFPSetup = 0
        return
    endcase
    set multilocks on
    llReturn = dodefault()
    *** End of Setup code: DO NOT REMOVE
    *** Select connection code: DO NOT REMOVE

    local lcDBC
    lcDBC = FullPath('';
      + Iif(lDevMode();
        , Home(1) + 'TOOLS\AB\AW\SAMPLES\'; && '..\..\' && Home(1) + 'TOOLS\AB\AW\SAMPLES\' is better for standalone instantiation
        , '..\';
        );
      + '_DATA\TASTRADE.DBC';
      )
    if dbused(m.lcDBC)
      set database to (m.lcDBC)
    else
      open database (m.lcDBC)
    endif
    *** End of Select connection code: DO NOT REMOVE

    *** Setup code: DO NOT REMOVE
    if This.__VFPSetup = 1
      This.__VFPSetup = 2
    endif
    return llReturn
    *** End of Setup code: DO NOT REMOVE
  ENDPROC

  PROCEDURE AutoOpen
    *** Setup code: DO NOT REMOVE
    if not pemstatus(This, '__VFPSetup', 5)
      This.AddProperty('__VFPSetup', 1)
      This.Init()
    endif
    *** End of Setup code: DO NOT REMOVE
  ENDPROC

ENDDEFINE
*-- EndDefine: ficcadcustomers
**************************************************

**************************************************
*-- Class: ficcbo (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcbo (ab\aw\aw.vcx)
*-- BaseClass: combobox
*-- Time Stamp: 11/12/13 11:15:10 AM

DEFINE CLASS ficcbo AS awcbo

  Name = "ficcbo"

ENDDEFINE
*-- EndDefine: ficcbo
**************************************************

**************************************************
*-- Class: ficcbojsvalue (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcbo (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: combobox
*-- Time Stamp: 04/20/16 07:27:03 PM

DEFINE CLASS ficcbojsvalue AS ficcbo

  FontName = "Consolas"
  Style = 2
  Name = "ficcbojsvalue"

  PROCEDURE Valid
    if (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud base classes Manager (source mode) on 02/11/15 17:53:33
      return Textmerge([comboValueCollect('<<m.this.Name>>', this.value);]) && comboValueCollect(): see tuto.js
    endif

    && We use this.Name as an identifier because we'll use this comboBox class as
    && siblings contained in the same parent (form, page, container, etc.)
    && If we were to use them differently, such as spread across various parent containers,
    && we could use strtran(this.wcID, '-', '0000'), '0000' being an arbitrary string that
    && we're sure will never be part of any Form member object's .Name
    && In this case, the method in charge of collecting these values would have to retrieve the object's address as:
    && address = strtran(m.address, '0000', '.')
    && combo = Evaluate('thisForm' + Substr(m.address, Atc('.', m.address))) && replaces form's name by thisForm

    &&
    &&
    &&
    &&
    &&
    &&
    &&
    &&
    &&
  ENDPROC

  PROCEDURE InteractiveChange
    return .F.
  ENDPROC

ENDDEFINE
*-- EndDefine: ficcbojsvalue
**************************************************

**************************************************
*-- Class: ficcboautocomp (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcboautocomp (ab\aw\aw.vcx)
*-- BaseClass: combobox
*-- Time Stamp: 04/05/19 01:10:04 PM

DEFINE CLASS ficcboautocomp AS awcboautocomp

  Name = "ficcboautocomp"

ENDDEFINE
*-- EndDefine: ficcboautocomp
**************************************************

**************************************************
*-- Class: ficchk (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awchk (ab\aw\aw.vcx)
*-- BaseClass: checkbox
*-- Time Stamp: 09/10/13 12:06:00 PM

DEFINE CLASS ficchk AS awchk

  Alignment = 0
  Name = "ficchk"

ENDDEFINE
*-- EndDefine: ficchk
**************************************************

**************************************************
*-- Class: ficcmd (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcmd (ab\aw\aw.vcx)
*-- BaseClass: commandbutton
*-- Time Stamp: 03/22/18 04:06:00 PM

DEFINE CLASS ficcmd AS awcmd

  FontSize = 9
  caption_fr = ""
  caption_en = ""
  caption_es = ""
  caption_it = ""
  caption_de = ""
  caption_pt = ""
  _memberdata = [<VFPData><memberdata name="caption_fr" display="Caption_FR" favorites="True"/><memberdata name="caption_en" display="Caption_EN" favorites="True"/><memberdata name="caption_es" display="Caption_ES" favorites="True"/><memberdata name="caption_it" display="Caption_IT" favorites="True"/><memberdata name="caption_de" display="Caption_DE" favorites="True"/><memberdata name="caption_pt" display="Caption_PT" favorites="True"/></VFPData>]
  wcpropsave = "Enabled,Caption"
  wcpropsavenot = "Caption_de, Caption_en, Caption_fr, Caption_es, Caption_it, Caption_pt"
  Name = "ficcmd"

  PROCEDURE refresh_
    lparameters void_parameter_reminder_call_dodefault_in_your_sub_class_code

    if Type('thisForm.wcLangUser') == 'C' and !empty(thisForm.wcLangUser)

      local lcCaptionEN
      lcCaptionEN = Evl(this.Caption_EN, this.Caption)
      this.Caption = Iif(lProperty(m.this, 'Caption_' + thisForm.wcLangUser);
        , Evl(Evaluate('m.this.Caption_' + thisForm.wcLangUser), m.lcCaptionEN);
        , m.lcCaptionEN;
        )

    endif
  ENDPROC

ENDDEFINE
*-- EndDefine: ficcmd
**************************************************

**************************************************
*-- Class: ficcmdhover (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcmd (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: commandbutton
*-- Time Stamp: 07/17/18 04:53:03 PM

DEFINE CLASS ficcmdhover AS ficcmd

  Anchor = 161
  Themes = .F.
  wbswidth = "lg"
  Name = "ficcmdhover"

  PROCEDURE MouseEnter
    lparameters nButton, nShift, nXcoord, nYcoord && doc in Parent Code

    IF (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud base classes Manager (source mode)
      return .F. && Ignore Event: default for Surface Events Ignorer l'événement: défaut pour les événements de surface
    endif

    * save current aspect
    this.FontBold_ = this.FontBold
    this.BackColor_ = this.BackColor
    this.ForeColor_ = this.ForeColor

    * set hover aspect
    this.FontBold = NOT this.FontBold
    this.BackColor = 0 && = Rgb(0,0,0) black
    this.ForeColor = Rgb(255,255,255) && white
  ENDPROC

  PROCEDURE Init
    * create properties to save current aspect
    this.AddProperty('FontBold_', this.FontBold)
    this.AddProperty('BackColor_', this.BackColor)
    this.AddProperty('ForeColor_', this.ForeColor)

    return DoDefault()
  ENDPROC

  PROCEDURE MouseLeave
    lparameters nButton, nShift, nXcoord, nYcoord && doc in Parent Code

    IF (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud base classes Manager (source mode)
      return .F. && Ignore Event: default for Surface Events Ignorer l'événement: défaut pour les événements de surface
    endif

    * restore current aspect
    this.FontBold = this.FontBold_
    this.BackColor = this.BackColor_
    this.ForeColor = this.ForeColor_
  ENDPROC

  PROCEDURE Click
    lparameters nButton, nShift, nXcoord, nYcoord && doc in Parent Code

    if (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud base classes Manager (source mode) on 11/28/14 18:19:21
      return
    endif

    thisForm.wMessageBox(ICase(;
      thisForm.wcLangUser = 'fr',  [Rien à voir ici],; && Copy-paste this line to support another language
      thisform.wcLangUser = 'de',  [Hier passiert nichts],; && Copy-paste this line to support another language
      thisform.wcLangUser = 'it',  [Non succede niente qui],; && Copy-paste this line to support another language
      thisform.wcLangUser = 'es',  [Nada sucede aquí],; && Copy-paste this line to support another language
      thisform.wcLangUser = 'pt',  [Nada acontece aqui],; && Copy-paste this line to support another language
      "Nothing happens here"; && Default: English
      ) + '...!', 0, 'FoxInCloud Live Tutorial')
  ENDPROC

  PROCEDURE wchtmlgen
    LPARAMETERS toHTMLgen AS awHTMLgen OF awHTML.prg, tlInnerHTML && doc in Parent Code

    * implement source code display in Web mode as the default mechanism using bindEvent() can't work because of the

    local cSrceCode

    cSrceCode = thisForm.srceCodeDisplay(m.this)
    = !Empty(m.cSrceCode) and m.toHTMLgen.cScriptJSadd(Textmerge([jQuery('
#<<m.this.wcID>>').mouseover(function(event){<<m.cSrceCode>>});]))
  ENDPROC

ENDDEFINE
*-- EndDefine: ficcmdhover
**************************************************

**************************************************
*-- Class: ficcmdok (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcmdok (ab\aw\aw.vcx)
*-- BaseClass: commandbutton
*-- Time Stamp: 04/05/19 05:10:12 PM
DEFINE CLASS ficcmdok AS awcmdok

  Height = 30
  Width = 50
  Name = "ficcmdok"

  PROCEDURE Init
    this.ZOrder
    return DoDefault()
  ENDPROC

ENDDEFINE
*-- EndDefine: ficcmdok
**************************************************

**************************************************
*-- Class: ficcmg (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcmg (ab\aw\aw.vcx)
*-- BaseClass: commandgroup
*-- Time Stamp: 09/10/13 12:06:00 PM
DEFINE CLASS ficcmg AS awcmg

  MemberClassLibrary = "ficsample.vcx"
  MemberClass = "ficcmd"
  Name = "ficcmg"

ENDDEFINE
*-- EndDefine: ficcmg
**************************************************

**************************************************
*-- Class: ficcnt (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcnt (ab\aw\aw.vcx)
*-- BaseClass: container
*-- Time Stamp: 09/10/13 12:06:00 PM
DEFINE CLASS ficcnt AS awcnt

  Name = "ficcnt"

ENDDEFINE
*-- EndDefine: ficcnt
**************************************************

**************************************************
*-- Class: ficcntlstgrc (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcnt (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: container
*-- Time Stamp: 12/05/20 11:00:13 PM
*-- see: modify Form "fictuto\progs\forms\dynamicGrid.scx"
DEFINE CLASS ficcntlstgrc AS ficcnt

  Width = 112
  Height = 150
  BorderWidth = 0
  *-- Grid column number
  igrc = 0
  _memberdata = [<VFPData><memberdata name="igrc" display="iGrc"/><memberdata name="cnthideshow" display="cntHideShow"/><memberdata name="lstvalueenable" display="lstValueEnable"/></VFPData>]
  wueffecthide = .F.
  wueffectshow = .F.
  wcssclassadd = "cntLstGrc"
  Name = "ficcntlstgrc"

  ADD OBJECT lst AS ficlst WITH ;
    RowSourceType = 8, ;
    RowSource = "customer", ;
    Height = 120, ;
    Left = 0, ;
    Top = 30, ;
    Width = 110, ;
    Name = "lst"

  ADD OBJECT lbl AS ficlbl WITH ;
    Caption = "Col. ", ;
    Height = 18, ;
    Left = 5, ;
    Top = 6, ;
    Width = 61, ;
    Name = "lbl"

  ADD OBJECT cmd AS ficcmd WITH ;
    Top = 3, ;
    Left = 82, ;
    Height = 24, ;
    Width = 27, ;
    Caption = "x", ;
    wcpropsave = "Enabled", ;
    Name = "cmd"

  PROCEDURE cnthideshow
    lparameters lHide

    local aCnt[1];
    , nCnt, iCnt;
    , oCnt as ficCntLstGrc of ficSample;

    * Collect sibling containers
    nCnt = aoClassCont(@m.aCnt, this.Parent, this.Class)
    aColsIns(@m.aCnt)
    for iCnt = m.nCnt to 1 step -1
      oCnt = m.aCnt[m.iCnt, 1]
      aCnt[m.iCnt, 2] = GetPem(m.oCnt, '
iGrc')
    endfor
    Asort(m.aCnt, 2)

    * Enable / disable this.Lst.Value in sibling lists
    if !Empty(this.lst.Value_)
      this.lstValueEnable(@m.aCnt, this, .T., this.lst.Value_)
    endif
    this.lstValueEnable(@m.aCnt, this, m.lHide)

    * Show / Hide sibling containers
    for iCnt = this.iGrc + 1 to m.nCnt
      oCnt = m.aCnt[m.iCnt, 1]
      if !m.lHide
        oCnt.Visible = .T.
        oCnt.Refresh
        exit
      endif
      this.lstValueEnable(@m.aCnt, m.oCnt, .T.)
      oCnt.lst.Value = '
'
      oCnt.Visible = .F.
    endfor

    this.Refresh
  ENDPROC

  PROCEDURE lstvalueenable
    lparameters aCnt, oCnt, lEnable, cLst_ as String

    local success;
    , nCnt, iCnt;
    , oCnt as ficCntLstGrc of ficSample;
    , oLst as ficLst of ficSample;
    , cLst as String, cLstT as String;
    , iLst as Integer;

    cLst_ = Evl(m.cLst_, m.oCnt.lst.Value)

    for iCnt = 1 to Alen(m.aCnt, 1)
      oLst = m.aCnt[m.iCnt, 1]
      if !m.lEnable and m.oLst == m.oCnt
        loop
      endif
      oLst = m.oLst.lst
      for iLst = 1 to m.oLst.ListCount
        cLst = Iif(thisForm.wlLAN;
          , m.oLst.List(m.iLst);
          , m.oLst.waRowSource[m.iLst];
          )
        cLstT = Ltrim(m.cLst, '
\')
        if m.cLstT == m.cLst_
          cLst = Iif(m.lEnable, '
', '\') + m.cLstT
          if thisForm.wlLAN
            m.oLst.List(m.iLst) = m.cLst
          else
            m.oLst.waRowSource[m.iLst] = m.cLst
          endif
          exit
        endif
      endfor
    endfor
  ENDPROC

  PROCEDURE Init
    lparameters useless_parm_simple_reminder_to_call_doDefault_anywhere_in_your_subclass_code

    this.Visible = this.iGrc = 1
    wcPropSaveEdit(this, '
Visible')

    return DoDefault()
  ENDPROC

  PROCEDURE lst.InteractiveChange
    lparameters uselessParm && doc in Parent Code

    if Type("thisForm.wlHTMLgen") == '
L' and thisForm.wlHTMLgen
      return
    endif

    thisForm.grd.columnCount = Max(thisForm.grd.columnCount, this.Parent.iGrc)
    with thisForm.grd.columns(this.Parent.iGrc) as Column
      .controlSource = this.Value
      .ficGrh1.Caption = Lower(Chrtran(this.Value, '
_', ' '))
    endwith
    thisForm.grd.autoFit

    this.Parent.cntHideShow()

    this.Value_ = this.Value
  ENDPROC

  PROCEDURE lst.Init
    lparameters fake_parameter_reminder_return_dodefault_after_your_code_you_can_remove_me

    wcPropSaveEdit(this, '
Value_')
    return DoDefault()
  ENDPROC

  PROCEDURE lbl.Init
    lparameters fake_parameter_reminder_call_dodefault_after_your_code_you_can_remove_it

    this.Caption = this.Caption + Cast(this.Parent.iGrc as M)

    return DoDefault()
  ENDPROC

  PROCEDURE cmd.Init
    wcPropSaveEdit(this, '
Enabled')
    if Type('
thisForm') == 'O' and thisForm.wBSlHTMLgen
      this.Left = this.Left - 10
      this.Width = this.Width + 10
    endif

    return DoDefault()
  ENDPROC

  PROCEDURE cmd.refresh_
    lparameters void_parameter_reminder_call_dodefault_in_your_sub_class_code

    this.Enabled = !Empty(this.Parent.lst.value)

    return DoDefault()
  ENDPROC

  PROCEDURE cmd.Click
    lparameters nButton, nShift, nXcoord, nYcoord && doc in Parent Code

    if Type("thisForm.wlHTMLgen") == '
L' and thisForm.wlHTMLgen
      return
    endif

    this.Parent.cntHideShow(.T.)

    store '
' to this.Parent.lst.Value, thisForm.grd.columns(this.Parent.iGrc).controlSource
    thisForm.grd.columnCount = this.Parent.iGrc - 1

    this.Parent.Refresh
  ENDPROC

ENDDEFINE
*-- EndDefine: ficcntlstgrc
**************************************************

**************************************************
*-- Class: ficcntrowsourcetype (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcnt (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: container
*-- Time Stamp: 08/04/17 11:44:04 AM
DEFINE CLASS ficcntrowsourcetype AS ficcnt

  Width = 185
  Height = 107
  BackStyle = 0
  BorderWidth = 0
  Name = "ficcntrowsourcetype"

  ADD OBJECT lbl AS ficlbl WITH ;
    FontBold = .T., ;
    Anchor = 11, ;
    BackStyle = 0, ;
    Caption = "RowSourceType = 1-Values", ;
    Height = 17, ;
    Left = 0, ;
    Top = 0, ;
    Width = 185, ;
    ForeColor = RGB(0,128,0), ;
    ZOrderSet = 0, ;
    Name = "lbl"

  ADD OBJECT lst AS ficlst WITH ;
    FontName = "Consolas", ;
    Anchor = 15, ;
    RowSourceType = 1, ;
    Height = 62, ;
    Left = 0, ;
    ToolTipText = "Tastrade Products", ;
    Top = 18, ;
    Width = 185, ;
    ZOrderSet = 1, ;
    Name = "lst"

  ADD OBJECT txt AS fictxt WITH ;
    Anchor = 14, ;
    Height = 22, ;
    Left = 0, ;
    Margin = 1, ;
    ReadOnly = .T., ;
    ToolTipText = "Selection in the above listbox", ;
    Top = 85, ;
    Width = 185, ;
    ZOrderSet = 2, ;
    Name = "txt"

ENDDEFINE
*-- EndDefine: ficcntrowsourcetype
**************************************************

**************************************************
*-- Class: ficcntgetfile (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcntgetfile (ab\aw\aw.vcx)
*-- BaseClass: container
*-- Time Stamp: 09/10/13 12:06:04 PM
DEFINE CLASS ficcntgetfile AS awcntgetfile

  Name = "ficcntgetfile"
  awimggetfile.Height = 16
  awimggetfile.Width = 16
  awimggetfile.Name = "awimggetfile"

ENDDEFINE
*-- EndDefine: ficcntgetfile
**************************************************

**************************************************
*-- Class: ficcntgetpict (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcntgetpict (ab\aw\aw.vcx)
*-- BaseClass: container
*-- Time Stamp: 09/10/13 12:06:04 PM
DEFINE CLASS ficcntgetpict AS awcntgetpict

  Name = "ficcntgetpict"
  awimggetpict.Height = 16
  awimggetpict.Width = 16
  awimggetpict.Name = "awimggetpict"

ENDDEFINE
*-- EndDefine: ficcntgetpict
**************************************************

**************************************************
*-- Class: ficcntgrdpage (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcntgrdpage (ab\aw\aw.vcx)
*-- BaseClass: container
*-- Time Stamp: 12/12/14 06:11:00 PM
DEFINE CLASS ficcntgrdpage AS awcntgrdpage

  Name = "ficcntgrdpage"
  spnPage.Name = "spnPage"
  cboLines.Name = "cboLines"
  lbl1.Name = "lbl1"
  lbl2.Name = "lbl2"
  imgTop.Height = 11
  imgTop.Width = 10
  imgTop.Name = "imgTop"
  imgBot.Height = 11
  imgBot.Width = 10
  imgBot.Name = "imgBot"
  txtSearch.txt.Name = "txt"
  txtSearch.img.Height = 16
  txtSearch.img.Width = 16
  txtSearch.img.Name = "img"
  txtSearch.Name = "txtSearch"

ENDDEFINE
*-- EndDefine: ficcntgrdpage
**************************************************

**************************************************
*-- Class: ficcol (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcol (ab\aw\aw.vcx)
*-- BaseClass: collection
*-- Time Stamp: 09/10/13 12:06:00 PM
DEFINE CLASS ficcol AS awcol

  Name = "ficcol"

ENDDEFINE
*-- EndDefine: ficcol
**************************************************

**************************************************
*-- Class: ficcst (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcst (ab\aw\aw.vcx)
*-- BaseClass: custom
*-- Time Stamp: 09/10/13 12:06:00 PM
DEFINE CLASS ficcst AS awcst

  Name = "ficcst"

ENDDEFINE
*-- EndDefine: ficcst
**************************************************

**************************************************
*-- Class: ficcstapp (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcst (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: custom
*-- Time Stamp: 04/15/16 10:17:13 AM
DEFINE CLASS ficcstapp AS ficcst

  *-- sample user property that FAS maintains across user requests
  userproperty = .NULL.
  _memberdata = [<VFPData><memberdata name="userproperty" display="userProperty"/></VFPData>]
  wcpropsave = "userProperty"
  Name = "ficcstapp"

ENDDEFINE
*-- EndDefine: ficcstapp
**************************************************

**************************************************
*-- Class: ficctl (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awctl (ab\aw\aw.vcx)
*-- BaseClass: control
*-- Time Stamp: 09/10/13 12:06:01 PM
DEFINE CLASS ficctl AS awctl

  Name = "ficctl"

ENDDEFINE
*-- EndDefine: ficctl
**************************************************

**************************************************
*-- Class: ficcur (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awcur (ab\aw\aw.vcx)
*-- BaseClass: cursor
*-- Time Stamp: 09/10/13 12:06:01 PM
DEFINE CLASS ficcur AS awcur

  Height = 23
  Width = 23
  Name = "ficcur"

ENDDEFINE
*-- EndDefine: ficcur
**************************************************

**************************************************
*-- Class: ficcurcus (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficcur (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: cursor
*-- Time Stamp: 11/28/16 06:14:06 PM
DEFINE CLASS ficcurcus AS ficcur

  Height = 23
  Width = 23
  Alias = "customer"
  Database = "..\..\_data\tastrade.dbc"
  CursorSource = "customer"
  wcpropsave = "Tag"
  Name = "ficcurcus"

ENDDEFINE
*-- EndDefine: ficcurcus
**************************************************

**************************************************
*-- Class: ficdte (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awdte (ab\aw\aw.vcx)
*-- BaseClass: dataenvironment
*-- Time Stamp: 11/28/16 06:12:05 PM
DEFINE CLASS ficdte AS awdte

  Width = 201
  Height = 115
  DataSourceType = "NATIVE"
  wcpropsave = "Tag"
  Name = "ficdte"

  ADD OBJECT ficcurcus1 AS ficcurcus WITH ;
    Top = 25, ;
    Left = 65, ;
    Height = 23, ;
    Width = 23, ;
    Name = "Ficcurcus1"

ENDDEFINE
*-- EndDefine: ficdte
**************************************************

**************************************************
*-- Class: ficebx (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awebx (ab\aw\aw.vcx)
*-- BaseClass: editbox
*-- Time Stamp: 09/10/13 12:06:07 PM
DEFINE CLASS ficebx AS awebx

  Name = "ficebx"

ENDDEFINE
*-- EndDefine: ficebx
**************************************************

**************************************************
*-- Class: ficebxevent (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficebx (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: editbox
*-- Time Stamp: 08/20/21 11:39:00 AM
DEFINE CLASS ficebxevent AS ficebx

  FontName = "Consolas"
  FontSize = 8
  Anchor = 15
  ReadOnly = .T.
  TabStop = .F.
  ToolTipText = "Event log"
  Name = "ficebxevent"

ENDDEFINE
*-- EndDefine: ficebxevent
**************************************************

**************************************************
*-- Class: ficebxsrcecode (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficebx (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: editbox
*-- Time Stamp: 06/20/18 12:35:01 PM
DEFINE CLASS ficebxsrcecode AS ficebx

  FontName = "Consolas"
  Anchor = 15
  ReadOnly = .T.
  TabStop = .F.
  ToolTipText = "Hovering a control displays its source code here (dynamically read from form.scx and colorized) - freeze by pressing the shift key while hovering - click to enlarge - copy code as you like"
  wcpropsave = "ToolTipText"
  wcssclassadd = "sourceCode"
  Name = "ficebxsrcecode"

  PROCEDURE wchtmlgen
    lparameters toHTMLgen AS awHTMLgen OF awHTML.prg, tlInnerHTML && awHTMLgen instance render container'
s inner HTML

    this.wcHTML = m.toHTMLgen.cAttribs(,,,,,,.T.)
    this.wcHTML = Textmerge('<div id="<<m.this.wcID>>"<<this.wcHTML>>><<m.this.Value>></div>')

    m.toHTMLgen.cScriptJSadd(Textmerge([jQuery('#<<m.this.wcID>>').click(function(event){return srceCodeWindow(event, '', <<cLitteralJS(JustFname(Sys(1271, thisForm)))>>)});])) && srceCodeWindow(): modify file tuto.js
  ENDPROC

  PROCEDURE refresh_
    local cToolTipText

    do case

    case thisForm.wcLangUser = 'fr' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Le survol d'un contrôle affiche son code source ici...
        (<i>le code source est lu, localisé et colorisé dynamiquement</i>)
        - <b>Geler l'
affichage</b> : presser la touche majuscule en déplaçant la souris
        - <b>Agrandir dans un écran enfant</b> : clic (mode Web seulement)<br>
        - <b>Agrandir dans une nouvelle page</b> : control+click (mode Web seulement)<br>
        <i>Copiez le code comme vous voulez !</i>
      endtext

    case thisForm.wcLangUser = 'de' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Schwebt ein Steuer zeigt den Quellcode hier ...
        (<i>der Quellcode lesen, lokalisiert und dynamisch eingefärbt</i>)
        - <b>Gefriert Display </b>: Drücken Sie die shift-Taste im Schwebeflug
        - <b>Zu einem Kind Form vergrößern </b>: Klicken Sie auf (Web-Modus)<br>
        - <b>Zu eine neue Seite vergröß
ßern </b>: control+Klicke (Web-Modus)<br>
        <i>Code kopieren, wie Sie möchten!</i>
      endtext

    case thisForm.wcLangUser = 'es' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Al pasar por un control muestra el código fuente aquí ...
        (<i>código fuente se lee dinámicamente desde form.scx y coloreada</i>)
        - <b>Congelar pantalla </b>: pulse la tecla Mayús mientras pasas
        - <b>Ampliar a un formulario secundario </b>: clic (modo Web solamente)<br>
        - <b>Ampliar a una nueva página </b>: control+clic (modo Web solamente)<br>
        <i>Copie el código que quieras!</i>
      endtext

    case thisForm.wcLangUser = 'it' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Passando un controllo visualizza il codice sorgente qui ...
        (<i>del codice sorgente viene letto dinamicamente da form.scx e colorata </i>)
        - <b>Blocca schermo <b />: premere il tasto shift mentre si libra
        - <b>Ingrandisci ad un form figlio </b>: clic (modalità solo web)<br>
        - <b>Ingrandisci ad una pagina nuova </b>: control+clic (modalità solo web)<br>
        <i>Copia il codice come ti piace!</i>
      endtext

    case thisForm.wcLangUser = 'pt' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Pairando um controle exibe seu código fonte aqui ...
        (<i>código-fonte é ler dinamicamente a partir form.scx e colorida </i>)
        - <b>Congelar exibição </b>: pressione a tecla shift enquanto paira
        - <b>Aumentar a um formulário filho </b>: Clique (modo apenas na web)<br>
        - <b>Aumentar a uma nova página</b>: control+Clique (modo apenas na web)<br>
        <i>Copie o código como você gosta!</i>
      endtext

    otherwise && default: English
      text to m.cToolTipText noshow flags 1 pretext 3
        Hovering the mouse pointer over a control displays its source code here ...
        (<i>source code is dynamically read from form.scx and colorized</i>)
        - <b>Freeze display</b>: press the shift key while hovering
        - <b>Enlarge to a child form</b>: Click (Web mode only)
        - <b>Enlarge to a new page</b>: control+Click (Web mode only)
        <i>Enjoy and copy code as you like!</i>
      endtext
    endcase

    this.ToolTipText = cTagsStripped(m.cToolTipText) && never keep tags, even in web mode

    = thisForm.wlWeb and !thisForm.wlInitFirst and thisForm.wcScriptJSadd(Textmerge('';
     + [var ebx = jQuery('#<<m.this.wcID>>');];
     + [ebx.html() || ebx.html(<<cLitteralJS(cPAR(m.cToolTipText))>>);]; && <div>
     ))
  ENDPROC

ENDDEFINE
*-- EndDefine: ficebxsrcecode
**************************************************

**************************************************
*-- Class: ficfrm (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awfrm (ab\aw\aw.vcx)
*-- BaseClass: form
*-- Time Stamp: 09/02/21 10:32:07 AM

#INCLUDE "ab\ab.h"
DEFINE CLASS ficfrm AS awfrm

  DataSession = 2
  Height = 420
  Width = 800
  DoCreate = .T.
  ShowTips = .T.
  AutoCenter = .T.
  Caption = "FoxInCloud Tutorial - Base Form"
  MaxHeight = 700
  MaxWidth = 900
  MinHeight = 300
  MinWidth = 700
  AllowOutput = .F.
  cobjectevent = ""
  icounterevent = 0
  cobjectserver = ""
  cobjectclient = ""
  wlanonymousallowed = .T.
  _memberdata = [<VFPData><memberdata name="wremoveobject" display="wRemoveObject" type="method"/><memberdata name="waddobject" display="wAddObject" type="method"/><memberdata name="cchangetabulbysixspace" type="method" display="cChangeTabulBySixSpace"/><memberdata name="cobjectevent" type="property" display="cObjectEvent"/><memberdata name="eventhandler" type="method" display="eventHandler"/><memberdata name="icounterevent" type="property" display="iCounterEvent"/><memberdata name="ladapted" type="method" display="lAdapted"/><memberdata name="useficevent" type="method" display="useFicEvent"/><memberdata name="usemygridcursor" type="method" display="useMyGridCursor"/><memberdata name="usegridcacursor" type="method" display="useGridcaCursor"/><memberdata name="usemygridcacursor" type="method" display="useMyGridcaCursor"/><memberdata name="editmygridcacursor" type="method" display="editMyGridcaCursor"/><memberdata name="initmygridcacursor" type="method" display="initMyGridcaCursor"/><memberdata name="caupdate" type="method" display="caUpdate"/><memberdata name="undocursoradapter" type="method" display="undoCursorAdapter"/><memberdata name="undotable" type="method" display="undoTable"/><memberdata name="undoview" type="method" display="undoView"/><memberdata name="updatecursoradapter" type="method" display="updateCursorAdapter"/><memberdata name="updatetable" type="method" display="updateTable"/><memberdata name="updateview" type="method" display="updateView"/><memberdata name="srcecodedisplay" display="srceCodeDisplay"/><memberdata name="cobjectserver" display="cObjectServer"/><memberdata name="cobjectclient" display="cObjectClient"/><memberdata name="init_srcecode" display="Init_SrceCode"/><memberdata name="init_eventhandler" display="Init_EventHandler"/><memberdata name="init_tooltip" display="Init_ToolTip"/><memberdata name="luienable" display="lUIenable"/><memberdata name="ficeventadd" display="ficEventAdd"/></VFPData>]
  wcmessageboxclass = "ficFrmMB"
  wcinputboxclass = "ficFrmIB"
  Name = "ficfrm"
  waitpic.Picture = "..\..\..\..\graphics\led.svg.thumb.green.png"
  waitpic.Stretch = 1
  waitpic.Height = 10
  waitpic.Left = -12
  waitpic.Top = 0
  waitpic.Width = 10
  waitpic.ZOrderSet = 1
  waitpic.Name = "waitpic"

  *-- Log .UIenable() events
  luienable = .F.

  ADD OBJECT cntok AS ficcnt WITH ;
    Anchor = 13, ;
    Top = 8, ;
    Left = 696, ;
    Width = 100, ;
    Height = 357, ;
    BackStyle = 0, ;
    BorderWidth = 0, ;
    ZOrderSet = 0, ;
    wcssclassadd = "cntOK", ;
    Name = "cntOK"

  ADD OBJECT ficfrm.cntok.imgsrce AS ficimgsrce WITH ;
    Anchor = 9, ;
    Picture = "..\..\..\..\graphics\source-code.png", ;
    Left = 37, ;
    Top = 33, ;
    ZOrderSet = 6, ;
    wbscolno = .T., ;
    Name = "imgSrce"

  ADD OBJECT ficfrm.cntok.cmdok AS ficcmdok WITH ;
    Top = 0, ;
    Left = 32, ;
    Height = 28, ;
    Width = 40, ;
    FontName = "Consolas", ;
    FontSize = 10, ;
    Anchor = 9, ;
    ZOrderSet = 2, ;
    wbscolno = .T., ;
    Name = "cmdOK"

  ADD OBJECT ficfrm.cntok.opgstyle AS ficopg WITH ;
    ButtonCount = 2, ;
    Anchor = 9, ;
    BackStyle = 0, ;
    BorderStyle = 0, ;
    Height = 62, ;
    Left = 16, ;
    Top = 101, ;
    Width = 73, ;
    wcpropsave = "Visible", ;
    wueffecthide = .F., ;
    wueffectshow = .F., ;
    Name = "opgStyle", ;
    Ficopt1.Caption = "Classic", ;
    Ficopt1.Height = 31, ;
    Ficopt1.Left = 0, ;
    Ficopt1.Style = 1, ;
    Ficopt1.Top = 0, ;
    Ficopt1.Width = 71, ;
    Ficopt1.Name = "optClassic", ;
    Ficopt2.Caption = "Responsive", ;
    Ficopt2.Height = 31, ;
    Ficopt2.Left = 0, ;
    Ficopt2.Style = 1, ;
    Ficopt2.Top = 30, ;
    Ficopt2.Width = 71, ;
    Ficopt2.Name = "optBS"

  ADD OBJECT ficfrm.cntok.imghelp AS ficimg WITH ;
    Anchor = 9, ;
    Picture = "..\..\..\..\graphics\question-fic-48.png", ;
    Stretch = 1, ;
    Height = 22, ;
    Left = 41, ;
    MousePointer = 15, ;
    Top = 68, ;
    Width = 22, ;
    ZOrderSet = 3, ;
    ToolTipText = "More details on this form ...", ;
    wbscolno = .T., ;
    Name = "imgHelp"

  ADD OBJECT lblfic AS ficlbl WITH ;
    FontSize = 8, ;
    Anchor = 14, ;
    Caption = "desktop mode", ;
    Height = 15, ;
    Left = 12, ;
    Top = 396, ;
    ForeColor = RGB(64,128,128), ;
    ZOrderSet = 4, ;
    wcpropsave = "Caption, Top", ;
    wbsctag = "small", ;
    Name = "lblFiC"

  ADD OBJECT lbltime AS ficlbl WITH ;
    FontName = "Consolas", ;
    FontSize = 8, ;
    Anchor = 14, ;
    Alignment = 1, ;
    Caption = "Détails du temps de réponse (Web)", ;
    Height = 15, ;
    Left = 408, ;
    Top = 396, ;
    ZOrderSet = 5, ;
    ToolTipText = "These figures are echoed in the Browser Console - Browser Tools open generally using F12 or ctrl+shift+I", ;
    wcssclassadd = "lblTime text-info", ;
    wcpropsave = "Caption,top,left", ;
    wbsctag = "small", ;
    Name = "lblTime"

  PROCEDURE eventhandler
    LPARAMETERS p1, p2, p3, p4 && for events methods requiring parameters like .mouse*()

    && delegate method for any event|method of any object -- see this.Init_EventHandler()
    &&

    LOCAL junk;
    , laEvent[1] AS String;
    , loSrce AS awTxt OF aw.vcx; && for example
    , lcBaseClass AS String;
    , lcEvent AS String;
    , llEventSurface AS Boolean;
    , llEvent AS Boolean;
    , llEventSupported AS Boolean;
    , llEventClient AS Boolean;
    , llEventServer AS Boolean;
    , luEvent AS Variant;
    , luValue AS Variant;
    ;
    , nParms AS Integer;
    , cParms AS String;
    , cEvent AS String;
    , lObjectSame as Boolean;
    , lEventSame as Boolean;
    , oGrd AS Grid;
    , cValue AS String;
    , lAJAX as Boolean;
    , oAJAX as awAJAX of awServer.prg;
    , oRequest as wwRequest of wwRequest.prg;
    , iBindEventFlag as Integer;
    , lBindEvent as Boolean;

    AEvents(m.laEvent, 0)
    loSrce = m.laEvent[1]
    lcEvent = cPEMcased(m.loSrce, m.laEvent[2]) && modify command abOOP
    if Lower(m.lcEvent) == Lower('UIEnable') and !m.thisForm.lUIenable
      return
    endif

    llEventSurface = InList(Proper(m.lcEvent), Proper("MouseEnter"), Proper("MouseMove"), Proper("MouseLeave"))
    lcBaseClass = Padr(m.loSrce.BaseClass, 14) && Len('DataEnvironment') = 15
    lAJAX = wlAJAX(@m.oAJAX)
    luValue = Iif(InList(Proper(m.lcEvent), Proper('InteractiveChange'), Proper('RangeLow'), Proper('RangeHigh'), 'Valid') and lProperty(m.loSrce, 'Value');
      , Iif(lProperty(m.loSrce, 'DisplayValue'), Evl(m.loSrce.Value, m.loSrce.DisplayValue), m.loSrce.Value);
      , .null.;
      )
    lObjectSame = Evaluate(('m.thisForm.cObject' + Iif(m.llEventSurface, 'Client', 'Server'))) == m.lcBaseClass && m.loSrce.cHierarchy
    lEventSame = m.thisForm.cObjectEvent == m.lcEvent
    thisForm.iCounterEvent = Iif(m.lObjectSame and m.lEventSame and Proper(m.lcEvent) != Proper('InteractiveChange');
      , m.thisForm.iCounterEvent + 1;
      , 1;
      )
    store m.lcBaseClass; && m.loSrce.cHierarchy
        to ('m.thisForm.cObject' + Iif(m.llEventSurface, 'Client', 'Server'))
    thisForm.cObjectEvent = m.lcEvent

    nParms = PCOUNT()
    cEvent = m.lcEvent + Textmerge(ICase(;
        Empty(m.nParms) and !IsNull(m.luValue),;
          '(<<cL(m.luValue, .T.)>>)',;
        m.nParms = 1,;
          '(<<cL(m.p1, .T.)>>)',;
        m.nParms = 2,;
          '(<<cL(m.p1, .T.)>>,<<cL(m.p2, .T.)>>)',;
        m.nParms = 3,;
          '(<<cL(m.p1, .T.)>>,<<cL(m.p2, .T.)>>,<<cL(m.p3, .T.)>>)',;
        m.nParms = 4,;
          '(<<cL(m.p1, .T.)>>,<<cL(m.p2, .T.)>>,<<cL(m.p3, .T.)>>,<<cL(m.p4, .T.)>>)',;
          '';
        ))

    * Log into file
    IF !m.llEventSurface
      StrToFile('';
       + Ttoc(Datetime());
       + ' - ' + PROPER(JUSTFNAME(SYS(1271, m.thisForm))) + '.' + m.loSrce.cHierarchy + '.' + m.lcEvent + '()';
       + ' - ' + c2Words(JustFname(m.loSrce.ClassLibrary), '!', m.loSrce.Class) + ' (' + m.loSrce.BaseClass + ')' + CRLF;
      , 'ficEvent' + IIF(thisForm.wlWeb,'Web','Lan') + '.log';
      , 1;
      )
    ENDIF

    * Log into table
    do case
    case .F.;
     or m.llEventSurface;
     or m.thisForm.wlHTMLgen; && 2015-12-07 - thn - only log user events, not during HTML generation && and !lCallingModule('.getHTML'); && Grid qui reconstruit ses événements
     or m.lcEvent == 'Deactivate' and (!m.lAJAX or Empty(m.oAJAX.cUserID)); && cas particulier: démarrage du serveur
     or .F.

    case m.lObjectSame and m.lEventSame
      replace in ficEvent EVENT with cRefAppend(Trim(ficEvent.Event), m.thisForm.iCounterEvent, .T.)

    otherwise

      thisForm.ficEventAdd(m.loSrce, m.cEvent)

    endcase

    cEvent = m.lcBaseClass + m.loSrce.cHierarchy + '.' + m.cEvent

    DO CASE

    CASE m.thisForm.wlHTMLgen

      llEvent = this.oSupport.lEvent(;
         m.loSrce.Baseclass; && Base Class
        , ; && (m.tcBaseClass == 'Olecontrol') Ole class
        , m.lcEvent; && Event
        , ; && @ [.NULL.] User Event
        , @m.llEventClient; && @ [.NULL.] Supported by client browser
        , @m.llEventServer; && @ [.NULL.] Supported by Server
        )
      iBindEventFlag = iBindEventFlag(m.loSrce, m.lcEvent, m.thisForm, 'eventHandler')

      DO CASE

      CASE IsNull(m.iBindEventFlag) or !(m.llEvent and Bittest(m.iBindEventFlag, 0))
    *    ASSERT .F.

      CASE m.llEventServer and !Proper(m.lcEvent) == 'Keypress'
        lBindEvent = UnBindEvents(m.loSrce, m.lcEvent, m.thisForm, 'eventHandler') > 0
        luEvent = m.loSrce.&lcEvent() && exceptions
        if m.lBindEvent
          BindEvent(m.loSrce, m.lcEvent, m.thisForm, 'eventHandler', m.iBindEventFlag)
        endif

        RETURN ICase(; && if Empty(m.iBindEventFlag), discarded in favor of value returned by event method code
          Vartype(m.luEvent) == 'C' and !Empty(m.luEvent),;
            m.luEvent,;
            .T.;
          )

      case m.llEventClient
        RETURN TEXTMERGE([InsertEventCount(event, <<cLitteralJS(m.cEvent)>>, '<<m.loSrce.cHierarchy>>')])

      otherwise
        RETURN TEXTMERGE([InsertEventCount(event, <<cLitteralJS(m.cEvent + ": not supported")>>, '<<m.loSrce.cHierarchy>>')])

      ENDCASE

    CASE TYPE('m.thisForm.tutoInfoBox' + Iif(m.llEventSurface, 'Client', 'Server')) == 'O'

      cEvent = m.cEvent;
        + Iif(m.this.wlWeb and lDevMode() and wlRequest(@m.oRequest);
          , ' - ' + Iif(Lower(m.oRequest.Form('sync')) == 'true', '', 'a') + 'sync';
          , '';
          )

      with Iif(m.llEventSurface, thisForm.TutoInfoBoxClient, thisForm.TutoInfoBoxServer) as EditBox

        .Value = IIF(m.thisForm.iCounterEvent > 1;
          , '';
            + cRefAppend(m.cEvent, m.thisForm.iCounterEvent);
            + SUBSTR(.Value, ATC(CRLF, .Value));
          , '';
            + m.cEvent + Iif(m.lObjectSame, CRLF, CRLF2);
            + .Value;
          )

        .SelStart = 1
      endwith

      RETURN Iif(InList(Proper(m.lcEvent), Proper('RangeHigh'), Proper('RangeLow'));
        , .null.; && if the value returned is less/greater than the value entered in the control, the control retains the focus - comparison to .null. is always .null., casted to .F.
        , .T.;
        )

    ENDCASE
  ENDPROC

  *-- a Control is adapted
  PROCEDURE ladapted
    LPARAMETERS toControl AS awTxt OF aw.vcx

    LOCAL lResult AS Boolean

    lResult = !lInList('original', m.toControl.wCSSclassAdd)

    IF m.lResult
      m.toControl.wCSSclassAdd = cListEdit(m.toControl.wCSSclassAdd, 'adapted') && for CSS
    ENDIF

    RETURN m.lResult
  ENDPROC

  PROCEDURE srcecodedisplay
    lparameters nButton, nShift, nXcoord, nYcoord && *.MouseEnter() delegate
    && nButton: - either control holding source code - or regular button #
    && nShift : - either editbox where source code should be displayed - or regular nShift

    LOCAL success as Boolean;
    , laEvent[1];
    , oSrce AS ficLst OF ficSample.vcx;
    , oTrgt AS ficEbx OF ficSample.vcx;
    , cSrceCode as String;

    success = .T.;
     and (.F.;
       or .T.;
         and Vartype(m.nButton) == 'O'; && direct call
         and varSet(@m.oSrce, m.nButton);
       or .T.;
         and AEvents(m.laEvent, 0) > 0; && *.MouseEnter() delegate through BindEvent()
       and varSet(@m.oSrce, m.laEvent[1]);
       );
     and lProperty(m.oSrce, 'cSrceCode');
     and varSet(@m.cSrceCode, m.oSrce.cSrceCode); && Empty(m.cSrceCode) plus bas
     and varSet(@m.oTrgt, m.oSrce.oSrceCode);
     and !IsNull(m.oTrgt);
     and .T.

    *setStepOn(Lower(m.oSrce.Name) == Lower('cmdMethod'))

    do case
    case !m.success;
     or Empty(m.cSrceCode);
     or Vartype(m.nShift) == 'N' and Bittest(m.nShift, 0) && Shift key depressed
    
      return .F.

    case m.thisForm.wlHTMLgen

      && Change the HTML code of destination object by the source object code
      &&

      cSrceCode = Strtran(m.cSrceCode, TABUL, '&#160;&#160;')
      return Textmerge([srceCodeDisplay(event, '<<wcID(m.oTrgt)>>', '<<wcID(m.oSrce)>>', <<cLitteralJS(m.cSrceCode)>>);]) && srceCodeDisplay(): modify file tuto.js

    otherwise

      m.oTrgt.Value = m.cSrceCode

    endcase

    return m.success
  ENDPROC

  PROCEDURE init_srcecode
    LPARAMETERS ;
     oSrce as Control; && Control the code of which should be displayed
    , cProcs as String; && [all] procedures to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
    , cProps as String; && [all] properties to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
    , oTrgt as EditBox; && [*.tutoInfoBoxFIC] target control where source code should be displayed
    , lMembers as Boolean; && [.F.] recurse on m.oSrce.Controls members
    , cCodeAdd as String; && [''] additional code - file or plain code
    , oXMLDOM as MSXML.DOMdocument; && [CreateObject('MSXML.DOMdocument')] && internal && keep as last parameter

    if thisForm.wlLAN
     return ''
    endif

    external procedure cSrceCodeOfObject

    && cProcs, cProps:
    && - .null. or .F.: all
    && - not String: none
    && - String: list
    && - Left(String, 1) == '-': exception list

    && oTrgt: [thisForm||this.Parent||this.Parent.Parent||.tutoInfoBoxFIC] edit box where source code is to be displayed

    LOCAL result AS String;
    , success as Boolean;
    , aa[1];

    cProps = Iif(ga_Type_IsChar(m.cProps) and Left(Ltrim(m.cProps), 1) # '-';
      , cListEdit(cListEdit(m.cProps;
        , 'Comment, Tag, wcPropSave, wcPropSaveNot');
        , 'Class, ClassLibrary', .T.);
      , m.cProps;
      )

    result = cSrceCodeOfObject(; && modify command awTxt (source code with Full License only)
       m.oSrce; && Object to get the source code of
      , Evl(m.cProcs, '-wReadMe'); && [all] procedures to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
      , m.cProps; && [all] properties to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
      , ; && [.F.] add object's class source code if available
      , ; && [.F.] recurse on m.oSrce.Controls members
      , m.cCodeAdd; && [''] additional code - file or text
      , ; && [''] properties to never output
      , @m.oXMLDOM; && [CreateObject('MSXML.DOMdocument')] && internal && keep as last parameter
      )

    success = .T.;
     and AddProperty(m.oSrce, 'cSrceCode', m.result);
     and AddProperty(m.oSrce, 'oSrceCode', ICase(;
       .F.;
        or loClass(m.oTrgt, 'Editbox');
        or Vartype(m.oTrgt) == 'C' and Type('thisForm.' + m.oTrgt) == 'O' and varSet(@m.oTrgt, Evaluate('m.thisForm.' + m.oTrgt)) and loClass(m.oTrgt, 'Editbox'),;
         m.oTrgt,;
       Type('m.oSrce.Parent.tutoInfoBoxFIC') == 'O',;
         m.oSrce.Parent.tutoInfoBoxFIC,;
       Type('m.oSrce.Parent.Parent.tutoInfoBoxFIC') == 'O',;
         m.oSrce.Parent.Parent.tutoInfoBoxFIC,;
       Type('m.thisForm.tutoInfoBoxFIC') == 'O',;
         m.thisForm.tutoInfoBoxFIC,;
         .null.;
       ));
     and wcPropSaveNotEdit(m.oSrce, 'cSrceCode, oSrceCode');
     and .T.

    do case
    case !m.success;
     or m.oSrce.BaseClass == 'Olecontrol'; && 2017-09-27 thn -- {FiC V 2.25.0-beta.9} bindevent() does not work properly with activeX events
     or Lower('Hover') $ Lower(m.oSrce.class)
    case lMethod(m.oSrce, 'MouseEnter')
      BindEvent(m.oSrce, 'MouseEnter', m.this, 'srceCodeDisplay', 1) && execute after event method overrides the value returned by event method
    case lMethod(m.oSrce, 'MouseMove') && form
      BindEvent(m.oSrce, 'MouseMove', m.this, 'srceCodeDisplay', 1) && execute after event method overrides the value returned by event method
    otherwise
      this.srceCodeDisplay(m.oSrce)
    endcase

    if lTrue(m.lMembers) and aoClassCont(@m.aa, m.oSrce, '-ficEbxSrceCode,-ficEbxEvent') > 0

      for each oSrce in m.aa foxobject
        result = c2Words(m.result, CRLF2, this.Init_SrceCode(; && /!\ récursion
           m.oSrce; && Object to get the source code of
          , m.cProcs; && [all] procedures to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': except list)
          , m.cProps; && [all] properties to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': except list)
          , m.oTrgt; && [*.tutoInfoBoxFIC] target control where source code should be displayed
          , m.lMembers; && [.F.] recurse on m.oSrce.Controls members
          , m.cCodeAdd; && [''] additional code - file or text
          , m.oXMLDOM; && [CreateObject('MSXML.DOMdocument')]
          ))
      endfor
    endif

    assert m.success
    return Iif(m.success, m.result, '')
  ENDPROC

  PROCEDURE init_eventhandler
    LPARAMETERS ;
     loCnt as Container; && [thisForm] container where object events are to be binded to this.eventHandler()
    , iDelegate as Integer; && [0] - see below
    , cEvents as String; && [all] Events to bind

    && iDelegate:
    && - 0: Call event code after delegate code - value is returned by event code (overrides value returned by delegate code)
    && - 1: Call event code before delegate code - value is returned by delegate code (overrides value returned by event code)

    LOCAL laObject[1];
    , loObject AS awTxt OF aw.vcx; && for example
    , laMember[1];
    , liMember AS Integer;
    , lcEvent AS String;
    , lcPEMtype AS String;
    , lEventAll as Boolean;
    , laEvent[1] as String;
    , lRowColChange as Boolean;

    loCnt = Iif(Vartype(m.loCnt) == 'O', m.loCnt, m.thisForm)
    IF aoClassCont(@m.laObject, m.loCnt) > 0 && recurses in contained containers

      && add root container to the list
      dimension laObject[Alen(m.laObject) + 1]
      Ains(m.laObject, 1)
      laObject[1] = m.loCnt

      lEventAll = !ga_Type_IsChar(m.cEvents, .T.)
      = Iif(m.lEventAll, 0, ALines(m.laEvent, m.cEvents, 5, ','))

      iDelegate = Cast(m.iDelegate as Integer)

      FOR EACH loObject IN m.laObject FOXOBJECT

        IF UPPER(LEFT(m.loObject.NAME, 4)) <> "TUTO" && control object

    *      UnBindEvents(m.loObject)

          FOR liMember = 1 TO AMEMBERS(m.laMember, m.loObject, 1) && 1: array contains the names of the properties, methods and member objects of the object or class

            lcEvent = Proper(m.laMember[m.liMember, 1])
            lcPEMtype = Upper(Left(m.laMember[m.liMember, 2], 1))
            lRowColChange = InList(Proper(Right(m.lcEvent, Len('ColChange'))), Proper('ColChange'), Proper('RowChange')) && no confusion with Interactive|ProgrammaticChange()

            IF .T.;
             and (.F.;
             or m.lcPEMtype == 'E'; && event
               and !m.lRowColChange;
               and !InList(m.lcEvent;
                 , "Programmaticchange"; && , Proper("UIenable"); && only 3 projects out of 2,500+ implement .UIenable() - In Web mode .UIenable() fires even upon initial form activation ("The UIEnable event does not occur for pages when the form is initially activated")
                 , "Load"; && , "Init"
                 , "Unload";
                 , "Paint";
                 , "Destroy"; && BindEvent() does not work because form no longer exists
                 );
               and !(.F. and thisForm.wBSlHTMLgen and m.lcEvent # 'Valid' and Upper(m.loObject.NAME) == Upper('txtDate')); && 2021-09-02 thn -- {FiC V 3.0.0-beta.1} added and InList(m.lcEvent, 'Click', 'When', 'Gotfocus')
             or m.lcPEMtype == 'M'; && Method
             and (.F.;
             or m.lRowColChange; && no confusion with Interactive|ProgrammaticChange()
               or .T.;
                 and Left(m.lcEvent, Len('wFormCallBack')) == Proper('wFormCallBack');
                 and !m.lcEvent == Proper('wFormCallbackExecLAN');
                 and !Lower(m.loObject.Name) == Lower('cmdMethExec'); && 2015-08-05 thn - array parameter requires passing by reference, not supported with bindEvent() && !Lower(m.loObject.Name) == Lower('cmdMethExec')
               );
             );
             and (.F.;
             or m.lEventAll;
             or Ascan(m.laEvent, m.lcEvent, 1, -1, 1, 7) > 0;
             );
             and .T.

              BindEvent(;
                 m.loObject;
                , m.lcEvent;
                , m.this;
                , 'eventHandler';
                , Iif(Left(m.lcEvent, Len('wAfter')) == Proper('wAfter'), 1, m.iDelegate);
                )
            ENDIF
          ENDFOR
        ENDIF
      ENDFOR
    ENDIF
  ENDPROC

  PROCEDURE init_tooltip
    * for each member object, sets object's address in form as default tooltip

    LOCAL laObject[1];
    , loObject AS awCbo of aw.vcx;
    , lcObject AS String;
    , lcTooltip AS String;
    , lAnchorResize as Boolean;

    IF aoClassCont(@m.laObject, m.this, , .T.) > 0

      dimension laObject[Alen(laObject) + 1]
      Ains(laObject, 1)
      laObject[1] = m.this

      lAnchorResize = m.this.BorderStyle = 3 and !Empty(m.this.ScaleMode)

      FOR EACH loObject IN m.laObject FOXOBJECT

        IF LEFT(UPPER(m.loObject.NAME),4) <> "TUTO"

          lcObject = Sys1272(m.loObject) && modify command abOOP

          do case
          case .F.;
           or !lProperty(m.loObject, '
ToolTipText');
           or m.loObject.BaseClass == '
Grid' and !thisForm.wlWeb;
           or Type('
m.loObject.Parent.Baseclass') == 'C' and m.loObject.Parent.Baseclass == 'Column' and !Empty(m.loObject.Parent.ToolTipText) and !m.loObject.BaseClass == 'Header'; && Column ToolTipText has priority
           or .F.
          case Empty(m.loObject.ToolTipText)
            lcTooltip = m.lcObject + Iif(m.lAnchorResize and lProperty(m.loObject, '
Anchor') and !thisForm.wBSlHTMLgen;
              , '
.Anchor = ' + Cast(m.loObject.Anchor as M) + ': ' + cAnchor(m.loObject.Anchor); && modify command abOOP
              , '
';
              )
            loObject.ToolTipText = Iif(m.loObject.Baseclass == '
Form' and PemStatus(m.loObject, 'Comment', 4);
              , Evl(m.loObject.Comment, m.lcTooltip);
              , m.lcTooltip;
              )
          otherwise
            wcPropSaveEdit(m.loObject, '
ToolTipText')
          endcase

          AddProperty(m.loObject, '
cHierarchy', Iif('.' $ m.lcObject; && removes form name
            , Substr(m.lcObject, at_c('
.', m.lcObject) + 1);
            , '
';
            ))
          wcPropSaveNotEdit(m.loObject, '
cHierarchy')
        endif
      endfor
    endif
  ENDPROC

  *-- adds an event to the FoxInCloud Live Tutorial event log
  PROCEDURE ficeventadd
    lparameters loSrce as awTxt of aw.vcx, cEvent

    local oAJAX as awAJAX of awServer.prg, oGrd as awGrd of aw.vcx

    INSERT INTO ficEvent;
      ( MODE;
      , USERID;
      , FORM;
      , NAME;
      , EVENT;
      , BASECLASS;
      , CLASS;
      , lBufDirty;
      , TIMESTAMP;
      );
      VALUES;
      ( ICase(m.thisForm.wlHTMLgen, '
H', m.this.wlWeb, 'W', 'D');
      , Iif(wlAJAX(@m.oAJAX), Evl(m.oAJAX.cUserID, .null.), .null.);
      , Proper(m.this.Name);
      , m.loSrce.cHierarchy;
      , m.cEvent;
      , m.loSrce.BaseClass;
      , m.loSrce.Class;
      , Iif(lContIn(m.loSrce, '
Grid', @m.oGrd), lBufferDirty(m.oGrd.RecordSource), .null.); && lBufferDirty
      , Datetime();
      )
  ENDPROC

  PROCEDURE wformcallback9
    LPARAMETERS tuUserChoice && @ User'
s choice

    this.wMessageBox(Textmerge("Testing call-back from a message box called by thisForm.Init();" + CRLF + "user choice is: <<m.tuUserChoice>>"))
  ENDPROC

  PROCEDURE Destroy
    lparameters fake_parameter_reminder_Return_Dodefault_At_The_End_Of_Your_Code

    if this.wlLAN and _screen.FormCount <= 1 && thisform
      clear events
    endif

    return DoDefault()
  ENDPROC

  PROCEDURE wreadme
    lparameters cLangUser
    cLangUser = Evl(Evl(m.cLangUser, m.this.wcLangUser), cLangUser())

    local result as String

    * remove '.F. && ' whenever a translation is available

    do case
    case .F. && m.cLangUser = 'fr' && copy-paste this block to support another language
      text to result noshow flags 1 && pretext 3
      endtext

    case .F. && m.cLangUser = 'de' && copy-paste this block to support another language
      text to result noshow flags 1 && pretext 3
      endtext

    case .F. && m.cLangUser = 'es' && copy-paste this block to support another language
      text to result noshow flags 1 && pretext 3
      endtext

    case .F. && m.cLangUser = 'it' && copy-paste this block to support another language
      text to result noshow flags 1 && pretext 3
      endtext

    case .F. && m.cLangUser = 'pt' && copy-paste this block to support another language
      text to result noshow flags 1 && pretext 3
      endtext

    otherwise && default: English
      text to result noshow flags 1 && pretext 3
      endtext

    endcase

    return m.result
  ENDPROC

  PROCEDURE Load
    lparameters void_reminder_to_call_DoDefault_in_your_subclass_when_all_views_and_cursorAdapters_are_open

    set safety off
    set exact on
    set ansi on
    set date american
    set century on

    if wlLAN()
      store .T. to ;
       this.MinButton;
      , this.MaxButton;
      , this.Closable;
      , this.ControlBox;
      , this.HalfHeightCaption
    else
      local lcSupport && cheat project manager
      lcSupport = 'awSupport'
      this.AddProperty('oSupport', NewObject(m.lcSupport, m.lcSupport + '.prg')) && see this.eventHandler()
      wcPropSaveNotEdit(m.this, 'oSupport')
    endif

    && 2018-09-19 thn -- {FiC V 2.28.0-beta.5} this.TitleBar = nEvl(this.TitleBar, Cast(m.this.MaxButton as I)) && 0 off, 1 on
    this.Icon = 'aw.ico'

    wcPropSaveEdit(m.this, 'cObjectClient, cObjectServer, cObjectEvent, iCounterEvent') && see this.eventHandler()

    CREATE CURSOR myGridCursor (column1 C(20), column2 C(20), column3 C(20))
    local liRow, lcRow
    for liRow = 1 to 20
      lcRow = Padl(m.liRow, 2, '0')
      INSERT INTO myGridCursor VALUES (;
       'Row ' + m.lcRow + ' - Column 1';
      , 'Row ' + m.lcRow + ' - Column 2';
      , 'Row ' + m.lcRow + ' - Column 3';
      )
    endfor
    GO TOP

    if !Used('ficEvent') && this.DataEnvironment may have opened it
      use (Iif(File('ficEvent.dbf');
        , 'ficEvent.dbf';
        , Addbs(JustPath(this.ClassLibrary)) + '..\ficTuto\ficEvent.dbf';
        )) in 0
    endif

    * this.BorderColor = Rgb(224,224,224) && this.BackColor

    return DoDefault()
  ENDPROC

  PROCEDURE Init
    local success as Boolean;
    , lcName as String;
    , laObj[1] as Object;
    , loObj as Object;

    lcName = Lower(Iif(File(Evl(Sys(1271, m.thisForm), '')); && does not work in this.Load()
      , Chrtran(JustFname(Sys(1271, m.thisForm)), '.', '_'); && JustFname, JustStem
      , this.Name;
      ))

    success = !thisForm.wlInitFirst or DoDefault()

    if (!m.this.wlWeb or m.this.wlInitFirst); && First time this.Init() executes - FiC property
     and !m.lcName == Lower(m.this.Class) && class instantiated

      * =====================
      && EVENT TRACE
      * =====================

      if !InList(m.lcName;
        , Lower('Index_scx');
        , Lower('EventLog_scx');
        , Lower('foxel_scx');
        , Lower('TreeView_scx');
        , Lower('EventClient_scx');
        , Lower('AutoComp_scx');
        , Lower('DragDrop_scx');
        )
        this.Init_EventHandler(;
           Iif(m.lcName == Lower('Event_scx'), m.this.pgf, m.this); && container where object events are to be binded to this.eventHandler()
          , Iif(m.lcName == Lower('Event_scx'), 1, 0); && iDelegate - returned value having precedence: 0 original method, 1 delegate method
          , Iif(m.lcName == Lower('KeyPress_scx'); && Events to bind
            , 'Click, KeyPress, wFormCallBack';
            , ''; && all events
            );
          )
      endif

      * =====================
      && SOURCE CODE DISPLAY
      * =====================

      DO CASE

      CASE m.lcName == Lower('Event_scx') && no source code displayed && 2016-10-06 thn -- {FiC V 2.22.0-beta.8} saves 90% startup time

      CASE m.lcName == Lower('RowSourceType_scx')
        this.Init_SrceCode(m.this)
        IF aoClassCont(@m.laObj, m.this, 'Listbox', .T.) > 0
          FOR EACH loObj IN m.laObj FOXOBJECT
            this.Init_SrceCode(;
               m.loObj;
              , 'Init, Refresh_, Requery, InteractiveChange'; && .null.: all event methods && InteractiveChange
              , 'RowSourceType, RowSource, BoundColumn'; && [none] properties to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
              , ; && oTrgt as EditBox [*.tutoInfoBoxFiC] target control where source code should be displayed
              , ; && lMembers as Boolean [.F.] recurse on m.oSrce.Controls members
              , Iif(m.loObj.rowSourceType == 4; && cCodeAdd as String ['']: additional code - file or plain code
                , m.loObj.RowSource;
                , '';
                );
              )
          ENDFOR
        ENDIF

      CASE m.lcName == Lower('dataUpdate_scx')
        this.Init_SrceCode(m.this,,,, .T.) && && .T.: recurse on m.oSrce.Controls members

        local cCode as CursorAdapter
        cCode = GetCursorAdapter('Customer_LCAD')
        text to cCode noshow textmerge flags 1 pretext 3
          * CursorGetProp("SQL", 'Customer_View')
          <<CursorGetProp("SQL", 'Customer_LView')>>

          * CursorAdapter.SelectCmd
          <<m.cCode.SelectCmd>>
        endtext
        this.Init_SrceCode(m.this.opgSourceType,,,, m.cCode)

      CASE m.lcName == Lower('RowColChange_scx')
        this.tutoInfoBoxVFP.Value = this.Init_SrceCode(m.thisform.myGrid, "AfterRowColChange")
        this.tutoInfoBoxFiC.Value = this.Init_SrceCode(m.THISFORM.myGrid, "wAfterRowChange")

      CASE m.lcName == Lower('Modal_scx')
        thisForm.Init_SrceCode(m.thisForm.cntOrig.cmdForm, 'Click',, 'tutoInfoBoxVFP')
        thisForm.Init_SrceCode(m.thisForm.cntOrig.cmdMessageBox, 'Click',, 'tutoInfoBoxVFP')
        thisForm.Init_SrceCode(m.thisForm.cntAdap.cmdForm, 'Click,wFormCallBack',, 'tutoInfoBoxFiC')
        thisForm.Init_SrceCode(m.thisForm.cntAdap.cmdMessageBox, 'Click,wFormCallBack',, 'tutoInfoBoxFiC')

      CASE m.lcName == Lower('UserChoice_scx')
        this.Init_SrceCode(;
           m.this;
          , ; && all
          , 'ControlSource, wuValue, WindowType';
          , ; && [*.tutoInfoBoxFiC] target control where source code should be displayed
          , .T.; && && .T.: recurse on m.oSrce.Controls members
          )

      CASE m.lcName == Lower('foxel_scx')
        this.Init_SrceCode(;
         m.this; && Control the code of which should be displayed
        , ; && cProcs as String [all] procedures to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
        , 'ScaleMode, Anchor, Style, Border, BorderWidth, BorderStyle, Left, Top, Width, Height'; && cProps as String [all] properties to output (.null. or .F.: all, not String: none, String: list, Left(String, 1) == '-': exception list)
        , ; && oTrgt as EditBox [*.tutoInfoBoxFIC] target control where source code should be displayed
        , .T.; && lMembers as Boolean [.F.] recurse on m.oSrce.Controls members
        )

      otherwise
        this.Init_SrceCode(m.this,,,, .T.) && && .T.: recurse on m.oSrce.Controls containers

      endcase

      this.Name = m.lcName

      this.Init_ToolTip
    endif

    && 2016-02-10 thn -- Support for intantiating a child form in Form.Init() code
    if !this.wlInitFirst and lDevMode() and .F. && .F. to ignore
      this.wMessageBox(;
         'wFormCallBack9';
        , Textmerge("Testing message box called from thisForm.Init()" + CRLF + "thisForm.Name = '<<thisForm.Name>>'");
        , 3;
        )
    endif

    return m.success
  ENDPROC

  PROCEDURE useficevent
  ENDPROC

  PROCEDURE usemygridcursor
  ENDPROC

  PROCEDURE imgsrce.wchtmlgen
    LPARAMETERS toHTMLgen AS awHTMLgen OF awHTML.prg, tlInnerHTML && doc in Parent Code

    this.wcHTML = '';
      + '<div';
      + m.toHTMLgen.cAttribs(;
         .T.; && [.F.] events; .T.: all || .F.:none || "event1,event2, ..": specified
        , ; && [''] additional CSS classes
        , ; && [''] HTML id suffix
        , '-dimensions'; && [''] styles to be rendered (see this.cStyle())
        , 'width: auto; height: auto;'; && [''] Forced Style Directive(s)
        , ; && [.F.] do not render tabindex=""
        );
      + '>';
      + Trim(wcIconFA(; && modify command awPublic
         'code';
        , 'muted';
        , Iif(thisForm.wBSlHTMLgen, 3, 2);
        , ;
        , ;
        , Iif(thisForm.wBSlHTMLgen, '', 'font-size:1.5em;');
        ));
      + '</div>'
  ENDPROC

  PROCEDURE opgstyle.wchtmlgen
    LPARAMETERS toHTMLgen AS awHTMLgen OF awHTML.prg, tlInnerHTML && doc in Parent Code

    if thisForm.wBSlHTMLgen
      local cJS
      text to cJS textmerge noshow flags 1 pretext 15
        function(){
         if (jQuery(window).width() > 1199) jQuery('#<<this.wcID>>').addClass('btn-group-vertical').removeClass('btn-group');
         else jQuery('#<<this.wcID>>').removeClass('btn-group-vertical').addClass('btn-group');
         }
      endtext

      m.toHTMLgen.cScriptJSadd(Textmerge([jQuery(document).ready(<<m.cJS>>);jQuery(window).on('resize', <<m.cJS>>);]))
    endif
  ENDPROC

  PROCEDURE opgstyle.refresh_
    lparameters void_parameter_reminder_implement_your_Refresh_code_in_this_method

    store Iif(thisForm.wBSlHTMLgen, 2, 1) to this.Value, this.Value_

    this.Visible = ! thisForm.wlSubForm
  ENDPROC

  PROCEDURE opgstyle.Init
    store 0 to this.Value, this.Value_
    return Type('thisForm.wlWeb') == 'L' and thisForm.wlWeb and (!lDevMode() or File('az.h')) and DoDefault()
  ENDPROC

  PROCEDURE opgstyle.InteractiveChange
    if thisForm.wlHTMLgen
      return
    endif

    local oRequest as wwRequest of wwRequest.prg;
    , cURL as String

    if wlRequest(@m.oRequest) and this.Value # this.Value_
      cURL = m.oRequest.getPreviousURL() && referrer
      cURL = Leftc(m.cURL, ratc('/', m.cURL, Iif(this.Value = 1, 2, 1))) + Iif(this.Value = 2, 'bs/', '') + Substr(m.cURL, ratc('/', m.cURL) + 1)
      thisForm.wNavigate(m.cURL)
    endif
  ENDPROC

  PROCEDURE imghelp.Init
    return Vartype(thisForm.wReadMe()) == 'C' and !Empty(thisForm.wReadMe()) and DoDefault()
  ENDPROC

  PROCEDURE imghelp.Click
    if m.thisForm.wlHTMLgen
      return
    endif

    local result as String
    external procedure cPar

    result = m.thisForm.wReadMe(m.thisForm.wcLangUser)

    thisForm.wForm('ficFrmHelp';
      , ''; && modeless
      , Iif(m.thisForm.wlWeb; && text to be displayed
        , cPAR(m.result);
        , cTagStripped(m.result);
        );
      , thisForm.Name; && name of current form
      )
  ENDPROC

  PROCEDURE lblfic.refresh_
    local oAppHost as awAppHost of awAppHot.fxp, iVersion, cVersion

    iVersion = Int(Version(5) / 100)
    cVersion = Iif(m.iVersion = 10, 'A' + Iif(_WIN64, '64', '32') + 'bit', '9')

    this.Caption = Iif(wlAppHost(@m.oAppHost);
      , Textmerge('VFP' + m.cVersion + '::' + ICase(;
        thisForm.wcLangUser = 'fr',  [FAS version <<m.oAppHost.cVersion>> du <<m.oAppHost.tVersion>>],; && copy-paste this line to add another language support
                                    [FAS version <<m.oAppHost.cVersion>> of <<m.oAppHost.tVersion>>]; && default: English
        )); && <a href="FoxInCloud-status.tuto" target="_blank"></a>
      , 'desktop mode';
      )
  ENDPROC

  PROCEDURE lblfic.Init
    this.MousePointer = Iif(m.thisForm.wlWeb, 15, 0)

    this.Top = thisForm.Height - this.Height - 2
    this.Left = 5
    this.Width = Int(this.Parent.Width * .4) - 5 - 1

    * this.Width = this.Width / Iif(thisForm.wBSlHTMLgen, 2, 1) && scrambles Bootstrap layout -- deal with each individual form

    this.ZOrder

    return DoDefault()
  ENDPROC

  PROCEDURE lblfic.Click
    do case
    case m.thisform.wlHTMLgen
      return

    case thisform.wlWeb
      return thisForm.wNavigate(, "FoxInCloud-status.tuto")

    endcase
  ENDPROC

  PROCEDURE lbltime.Init
    lparameters fake_parameter_reminder_call_dodefault_after_your_code_you_can_remove_it

    * locate in bottom right corner
    this.Top = thisForm.Height - this.Height - 2
    this.Width = Int(thisForm.Width * .6) - 5
    this.Left = thisForm.Width - this.Width - 5 && Max(, thisForm.lblFiC.Left + thisForm.lblFiC.Width + 5)
    this.Visible = thisForm.wlWeb

    return DoDefault()
  ENDPROC

ENDDEFINE
*-- EndDefine: ficfrm
**************************************************

**************************************************
*-- Class: ficfrmhelp (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficfrm (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: form
*-- Time Stamp: 07/05/18 12:37:07 PM

#INCLUDE "ab\ab.h"
DEFINE CLASS ficfrmhelp AS ficfrm

  DoCreate = .T.
  AutoCenter = .T.
  WindowType = 1
  Name = "ficfrmhelp"
  cntOK.opgStyle.optClassic.Value = 1
  cntOK.opgStyle.optClassic.Left = 0
  cntOK.opgStyle.optClassic.Top = 0
  cntOK.opgStyle.optClassic.Name = "optClassic"
  cntOK.opgStyle.optBS.Left = 0
  cntOK.opgStyle.optBS.Top = 30
  cntOK.opgStyle.optBS.Name = "optBS"
  cntOK.opgStyle.Name = "opgStyle"
  cntOK.cmdOK.Name = "cmdOK"
  cntOK.imgSrce.Name = "imgSrce"
  cntOK.imgHelp.Name = "imgHelp"
  cntOK.Top = 2
  cntOK.Left = 735
  cntOK.Width = 62
  cntOK.Height = 99
  cntOK.ZOrderSet = 0
  cntOK.Name = "cntOK"
  waitpic.ZOrderSet = 2
  waitpic.Name = "waitpic"
  lblFiC.Left = 12
  lblFiC.Top = 404
  lblFiC.ZOrderSet = 3
  lblFiC.Name = "lblFiC"
  lblTime.Left = 395
  lblTime.Top = 405
  lblTime.ZOrderSet = 4
  lblTime.Name = "lblTime"

  ADD OBJECT ebx AS ficebx WITH ;
    Anchor = 15, ;
    Height = 402, ;
    Left = 0, ;
    Top = 0, ;
    Width = 745, ;
    ZOrderSet = 1, ;
    Name = "ebx"

  PROCEDURE Init
    lparameters cHelp, cForm

    DoDefault()

    if Pcount() > 0 && !thisForm.wlInitFirst

      local tutoAppConfig as tutoAppConfig of tutoServer.prg

      cHelp = Cast(m.cHelp as M)
      this.ebx.Value = Strtran(cCRLFfix(cTagStripped(m.cHelp)), CRLF, CRLF2)

      if wlWeb(, @m.tutoAppConfig)
        cForm = 'tutoLAN.' + GetWordNum(JustStem(Alltrim(Cast(m.cForm as M))), 1, '_') + '.png' && screenshot name convention
        cHelp = cPAR(m.cHelp);
          + Iif(File(m.tutoAppConfig.cImagePathPhysical + m.cForm);
            , '';
            + '<p><strong>' + ICase(;
              thisForm.wcLangUser = 'fr',;
                'Ce formulaire en version Desktop/LAN ',;
              thisForm.wcLangUser = 'de',;
                'Dieses Formular in der Desktop/LAN Version',;
              thisForm.wcLangUser = 'es',;
                'Este formulario en versión de Escritorio/LAN',;
              thisForm.wcLangUser = 'it',;
                'Questo modulo nella versione Desktop/LAN',;
              thisForm.wcLangUser = 'pt',;
                'Este formulário na versão Desktop/LAN',;
                'This Form in Desktop/LAN version';
                ) + ':</strong><p>' + CRLF;
            + '<img class="img-responsive" src="' + m.tutoAppConfig.cImagePathVirtual + m.cForm + '">';
            , '';
          )
        thisForm.wcScriptJSadd(Textmerge([jQuery('#<<m.this.ebx.wcID>>').html(<<cLitteralJS(m.cHelp)>>);]))
      endif

      this.Caption = ICase(;
        m.thisForm.wcLangUser = 'fr',  [Aide d'un formulaire],; && copy-paste the line to add another language support
                                      [Help on Form]; && default: English
        )
    endif
  ENDPROC

  PROCEDURE ebx.wchtmlgen
    lparameters toHTMLgen AS awHTMLgen OF awHTML.prg, tlInnerHTML && awHTMLgen instance render container's inner HTML

    this.wcHTML = m.toHTMLgen.cAttribs(,,,,,,.T.)
    this.wcHTML = Textmerge('<div id="<<m.this.wcID>>"<<this.wcHTML>>></div>')
  ENDPROC

  PROCEDURE ebx.Init
    this.Left = 0
    this.Width = Iif(thisForm.wBSlHTMLgen, thisForm.Width *.85, this.Width)
    return DoDefault()
  ENDPROC

ENDDEFINE
*-- EndDefine: ficfrmhelp
**************************************************

**************************************************
*-- Class: ficfrmib (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awfrmib (ab\aw\aw.vcx)
*-- BaseClass: form
*-- Time Stamp: 09/10/13 12:05:13 PM

DEFINE CLASS ficfrmib AS awfrmib

  DoCreate = .T.
  Name = "ficfrmib"
  waitpic.Height = 20
  waitpic.Width = 20
  waitpic.Name = "waitpic"
  atxt.Name = "atxt"
  acmdok.Name = "acmdok"
  acmdannul.Name = "acmdannul"
  albl.Name = "albl"

ENDDEFINE
*-- EndDefine: ficfrmib
**************************************************

**************************************************
*-- Class: ficfrmlogerror (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awfrmlogerror (ab\aw\aw.vcx)
*-- BaseClass: form
*-- Time Stamp: 07/04/18 04:46:00 PM

DEFINE CLASS ficfrmlogerror AS awfrmlogerror

  DoCreate = .T.
  Name = "ficfrmlogerror"
  waitpic.Height = 20
  waitpic.Width = 20
  waitpic.Name = "waitpic"
  cmdOK.Name = "cmdOK"
  grd.lbl1.Name = "lbl1"
  grd.lbl2.Name = "lbl2"
  grd.grd.Name = "grd"
  grd.cntSearch.txtSearch.Name = "txtSearch"
  grd.cntSearch.LBL.Name = "LBL"
  grd.cntSearch.Name = "cntSearch"
  grd.cmdNext.Name = "cmdNext"
  grd.cmdPrev.Name = "cmdPrev"
  grd.chkError.Alignment = 0
  grd.chkError.Name = "chkError"
  grd.cntNav.IMGREFRESH.Name = "IMGREFRESH"
  grd.cntNav.cboLines.Name = "cboLines"
  grd.cntNav.imgTop.Height = 11
  grd.cntNav.imgTop.Width = 10
  grd.cntNav.imgTop.Name = "imgTop"
  grd.cntNav.imgPrev.Height = 11
  grd.cntNav.imgPrev.Width = 6
  grd.cntNav.imgPrev.Name = "imgPrev"
  grd.cntNav.spnPage.Name = "spnPage"
  grd.cntNav.imgNext.Height = 11
  grd.cntNav.imgNext.Width = 6
  grd.cntNav.imgNext.Name = "imgNext"
  grd.cntNav.imgBot.Height = 11
  grd.cntNav.imgBot.Width = 10
  grd.cntNav.imgBot.Name = "imgBot"
  grd.cntNav.Name = "cntNav"
  grd.Name = "grd"
  ebxError.Name = "ebxError"
  cmdXL.Name = "cmdXL"
  cntReplay.cmdReplay.Name = "cmdReplay"
  cntReplay.cboIDform.Name = "cboIDform"
  cntReplay.spnServers.Name = "spnServers"
  cntReplay.lblIDform.Name = "lblIDform"
  cntReplay.lblServers.Name = "lblServers"
  cntReplay.Name = "cntReplay"

  PROCEDURE grd.Init
    && 2018-07-03 thn -- {FiC V 2.27.0-beta.6} added
    this.wlCntGrcCSpageCursor = .F.

    return DoDefault()
  ENDPROC

ENDDEFINE
*-- EndDefine: ficfrmlogerror
**************************************************

**************************************************
*-- Class: ficfrmmb (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awfrmmb (ab\aw\aw.vcx)
*-- BaseClass: form
*-- Time Stamp: 08/02/17 01:32:03 PM

DEFINE CLASS ficfrmmb AS awfrmmb

  DoCreate = .T.
  Caption = "FoxInCloud Tutorial MessageBox()"
  wbslhtmlgen = .T.
  Name = "ficfrmmb"
  waitpic.Height = 20
  waitpic.Width = 20
  waitpic.Name = "waitpic"
  albl.FontName = "Consolas"
  albl.FontSize = 10
  albl.Name = "albl"
  acmd1.FontName = "Consolas"
  acmd1.Name = "acmd1"
  acmd2.FontName = "Consolas"
  acmd2.Name = "acmd2"
  acmd3.FontName = "Consolas"
  acmd3.Name = "acmd3"
  aimg.Height = 64
  aimg.Width = 64
  aimg.Name = "aimg"

ENDDEFINE
*-- EndDefine: ficfrmmb
**************************************************

**************************************************
*-- Class: ficfrs (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awfrs (ab\aw\aw.vcx)
*-- BaseClass: formset
*-- Time Stamp: 09/10/13 12:06:01 PM

DEFINE CLASS ficfrs AS awfrs

  Name = "ficfrs"
  Form1.waitpic.Height = 20
  Form1.waitpic.Width = 20
  Form1.waitpic.Name = "waitpic"
  Form1.DoCreate = .T.
  Form1.Name = "Form1"

ENDDEFINE
*-- EndDefine: ficfrs
**************************************************

**************************************************
*-- Class: ficgrd (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awgrd (ab\aw\aw.vcx)
*-- BaseClass: grid
*-- Time Stamp: 04/05/19 10:46:13 AM

DEFINE CLASS ficgrd AS awgrd

  MemberClassLibrary = ..\fictuto\progs\tutosets.prg
  MemberClass = "ficGrc"
  RecordSource = ".NULL."
  Name = "ficgrd"

  PROCEDURE Init
    local iGrc, lcAlias, lcField, llDBC, lcCaption
    if !Empty(Set("Database"))
      with this as grid
        FOR iGrc = 1 TO .ColumnCount
          with .Columns(m.iGrc) as Column

            if Type(.ControlSource) # 'U'
              lcField = JustField(.ControlSource, @m.lcAlias)
              llDBC = CursorGetProp("Database", m.lcAlias) == Dbc()
              lcCaption = Iif(m.llDBC;
                , Evl(DBGetProp(.ControlSource, 'Field', 'Caption'), m.lcField);
                , m.lcField;
                )
              .SetAll('Caption', Chrtran(m.lcCaption, '_', ' '), .HeaderClass)
              .ToolTipText = Iif(m.llDBC, Evl(DBGetProp(.ControlSource, 'Field', 'Comment'), .ControlSource), .ControlSource)
            endif
          endwith
        endfor
      endwith
    endif
  ENDPROC

ENDDEFINE
*-- EndDefine: ficgrd
**************************************************

**************************************************
*-- Class: fichpl (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awhpl (ab\aw\aw.vcx)
*-- BaseClass: hyperlink
*-- Time Stamp: 09/10/13 12:06:01 PM

DEFINE CLASS fichpl AS awhpl

  Name = "fichpl"

ENDDEFINE
*-- EndDefine: fichpl
**************************************************

**************************************************
*-- Class: ficimg (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awimg (ab\aw\aw.vcx)
*-- BaseClass: image
*-- Time Stamp: 09/10/13 12:06:01 PM

DEFINE CLASS ficimg AS awimg

  Name = "ficimg"

ENDDEFINE
*-- EndDefine: ficimg
**************************************************

**************************************************
*-- Class: ficimgsrce (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficimg (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: image
*-- Time Stamp: 07/05/18 05:23:14 PM
*-- In Web mode, displays form's full source code

#INCLUDE "ab\ab.h"
DEFINE CLASS ficimgsrce AS ficimg

  Picture = "..\..\..\..\graphics\source-code.png"
  Stretch = 1
  Height = 30
  MousePointer = 15
  Width = 30
  ToolTipText = "Display form's full source code"
  wcssclassadd = "ficImgSrce, text-muted"
  Name = "ficimgsrce"

  PROCEDURE refresh_
    local cToolTipText

    do case

    case thisForm.wcLangUser = 'fr' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Code source complet du formulaire :
        <b>Dans un écran enfant</b> : clic<br>
        <b>Dans une nouvelle page</b> : control+click<br>
        <i>Copiez le code comme vous voulez !</i>
      endtext

    case thisForm.wcLangUser = 'de' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Formular Quellcode :
        - <b>Zu einem Kind Form vergrößern </b>: Klicken Sie auf<br>
        - <b>Zu eine neue Seite vergröß
ßern </b>: control+Klicke<br>
        <i>Code kopieren, wie Sie möchten!</i>
      endtext

    case thisForm.wcLangUser = 'es' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Código fuente del formulario :
        - <b>Ampliar a un formulario secundario </b>: clic<br>
        - <b>Ampliar a una nueva página </b>: control+clic<br>
        <i>Copie el código que quieras!</i>
      endtext

    case thisForm.wcLangUser = 'it' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Codice sorgente dello form:
        - <b>Ad un form figlio </b>: clic<br>
        - <b>Ad una pagina nuova </b>: control+clic<br>
        <i>Copia il codice come ti piace!</i>
      endtext

    case thisForm.wcLangUser = 'pt' && copy-paste this block to add another language support
      text to m.cToolTipText noshow flags 1 pretext 3 && The maximum number of characters you can specify for cExpr is 4,095
        Código fonte form :
        - <b>A um formulário filho </b>: Clique<br>
        - <b>A uma nova página</b>: control+Clique<br>
        <i>Copie o código como você gosta!</i>
      endtext

    otherwise && default: English
      text to m.cToolTipText noshow flags 1 pretext 3
        Form's complete source code:
        - <b>In a child form</b>: Click
        - <b>In a new page</b>: control+Click
        <i>Enjoy and copy code as you like!</i>
      endtext
    endcase

    this.ToolTipText = cTagStripped(m.cToolTipText) && never keep tags, even in web mode
  ENDPROC

  PROCEDURE Init
    if Type('
thisForm') == 'O' && standalone instantiation needed
      this.AddProperty('
srceFile', Lower(JustFname(Evl(Sys(1271, thisForm), thisForm.ClassLibrary))) + ".src")
      return thisForm.wlWeb and File(this.srceFile) and DoDefault()
    endif
  ENDPROC

  PROCEDURE Click
    lparameters nButton, nShift, nXcoord, nYcoord && doc in Parent Code
    if thisForm.wlHTMLgen
      return Textmerge([srceCodeWindow(]; && modify file tuto.js
      + [event];
      + [, <<cLitteralJS(cSrceCodeColoredHTML(FileToStr(m.this.srceFile)))>>]; && cTagStripped()
      + [, <<cLitteralJS(JustStem(m.this.srceFile))>>]; && see this.Init()
      + [);])
    endif
  ENDPROC

  PROCEDURE wchtmlgen
    LPARAMETERS toHTMLgen AS awHTMLgen OF awHTML.prg, tlInnerHTML && doc in Parent Code

    this.wcHTML = '
<div' + m.toHTMLgen.cAttribs(.T.) + '>' + Trim(wcIconFA('code', 2)) + '</div>'
  ENDPROC

ENDDEFINE
*-- EndDefine: ficimgsrce
**************************************************

**************************************************
*-- Class: ficimggetfile (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awimggetfile (ab\aw\aw.vcx)
*-- BaseClass: image
*-- Time Stamp: 09/10/13 12:06:05 PM
DEFINE CLASS ficimggetfile AS awimggetfile

  Height = 16
  Width = 16
  Name = "ficimggetfile"

ENDDEFINE
*-- EndDefine: ficimggetfile
**************************************************

**************************************************
*-- Class: ficimggetpict (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awimggetpict (ab\aw\aw.vcx)
*-- BaseClass: image
*-- Time Stamp: 09/10/13 12:06:04 PM
DEFINE CLASS ficimggetpict AS awimggetpict

  Height = 16
  Width = 16
  Name = "ficimggetpict"

ENDDEFINE
*-- EndDefine: ficimggetpict
**************************************************

**************************************************
*-- Class: ficlbl (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awlbl (ab\aw\aw.vcx)
*-- BaseClass: label
*-- Time Stamp: 03/22/18 04:05:11 PM
DEFINE CLASS ficlbl AS awlbl

  FontName = "Consolas"
  BackStyle = 0
  caption_en = ""
  caption_fr = ""
  caption_es = ""
  caption_de = ""
  caption_it = ""
  caption_pt = ""
  wcpropsave = "Caption"
  _memberdata = [<VFPData><memberdata name="caption_en" display="Caption_EN" favorites="True"/><memberdata name="caption_fr" display="Caption_FR" favorites="True"/><memberdata name="caption_es" display="Caption_ES" favorites="True"/><memberdata name="caption_de" display="Caption_DE" favorites="True"/><memberdata name="caption_it" display="Caption_IT" favorites="True"/><memberdata name="caption_pt" display="Caption_PT" favorites="True"/></VFPData>]
  wcpropsavenot = "Caption_de, Caption_en, Caption_fr, Caption_es, Caption_it, Caption_pt"
  Name = "ficlbl"

  PROCEDURE refresh_
    lparameters void_parameter_reminder_call_dodefault_in_your_sub_class_code

    if Type('
thisForm.wcLangUser') == 'C' and !empty(thisForm.wcLangUser)

      local lcCaptionEN
      lcCaptionEN = Evl(this.Caption_EN, this.Caption)
      this.Caption = Iif(lProperty(m.this, '
Caption_' + thisForm.wcLangUser);
        , Evl(Evaluate('
m.this.Caption_' + thisForm.wcLangUser), m.lcCaptionEN);
        , m.lcCaptionEN;
        )

    endif
  ENDPROC

ENDDEFINE
*-- EndDefine: ficlbl
**************************************************

**************************************************
*-- Class: ficlin (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awlin (ab\aw\aw.vcx)
*-- BaseClass: line
*-- Time Stamp: 09/10/13 12:06:02 PM
DEFINE CLASS ficlin AS awlin

  Name = "ficlin"

ENDDEFINE
*-- EndDefine: ficlin
**************************************************

**************************************************
*-- Class: ficlst (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awlst (ab\aw\aw.vcx)
*-- BaseClass: listbox
*-- Time Stamp: 09/10/13 12:06:05 PM
DEFINE CLASS ficlst AS awlst

  Name = "ficlst"

ENDDEFINE
*-- EndDefine: ficlst
**************************************************

**************************************************
*-- Class: ficoledtp6 (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awoledtp6 (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:13 PM
*-- OLEObject = C:\windows\SysWow64\MSCOMCT2.OCX
DEFINE CLASS ficoledtp6 AS awoledtp6

  Name = "ficoledtp6"

ENDDEFINE
*-- EndDefine: ficoledtp6
**************************************************

**************************************************
*-- Class: ficoleie (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awoleie (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:13 PM
*-- OLEObject = C:\Windows\SysWOW64\ieframe.dll
DEFINE CLASS ficoleie AS awoleie

  Height = 100
  Width = 100
  Name = "ficoleie"

ENDDEFINE
*-- EndDefine: ficoleie
**************************************************

**************************************************
*-- Class: ficoleiml6 (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awoleiml6 (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 11/17/17 02:41:09 PM
*-- OLEObject = C:\Windows\system32\mscomctl.OCX
DEFINE CLASS ficoleiml6 AS awoleiml6

  Height = 40
  Name = "ficoleiml6"

ENDDEFINE
*-- EndDefine: ficoleiml6
**************************************************

**************************************************
*-- Class: ficolelv6 (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolelv6 (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:13 PM
*-- OLEObject = C:\windows\SysWOW64\MSCOMCTL.OCX
DEFINE CLASS ficolelv6 AS awolelv6

  Height = 100
  Width = 100
  Name = "ficolelv6"

ENDDEFINE
*-- EndDefine: ficolelv6
**************************************************

**************************************************
*-- Class: ficolemv6 (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolemv6 (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:13 PM
*-- OLEObject = C:\windows\SysWow64\MSCOMCT2.OCX
DEFINE CLASS ficolemv6 AS awolemv6

  Height = 188
  Width = 224
  Name = "ficolemv6"

ENDDEFINE
*-- EndDefine: ficolemv6
**************************************************

**************************************************
*-- Class: ficolepdfacro (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolepdfacro (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:13 PM
*-- OLEObject = C:\Program Files (x86)\Common Files\Adobe\Acrobat\ActiveX\AcroPDF.dll
DEFINE CLASS ficolepdfacro AS awolepdfacro

  Height = 100
  Width = 100
  Name = "ficolepdfacro"

ENDDEFINE
*-- EndDefine: ficolepdfacro
**************************************************

**************************************************
*-- Class: ficolepdfoxit (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolepdfoxit (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:14 PM
*-- OLEObject = C:\PROGRA~2\FOXITS~1\FOXITR~1\plugins\FOXITR~1.OCX
DEFINE CLASS ficolepdfoxit AS awolepdfoxit

  Height = 100
  Width = 100
  Name = "ficolepdfoxit"

ENDDEFINE
*-- EndDefine: ficolepdfoxit
**************************************************

**************************************************
*-- Class: ficolepdfxc (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolepdfxc (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:14 PM
*-- OLEObject = C:\Program Files\Tracker Software\PDF Viewer\Win32\PDFXCviewAx.dll
DEFINE CLASS ficolepdfxc AS awolepdfxc

  Height = 100
  Width = 100
  Name = "ficolepdfxc"

ENDDEFINE
*-- EndDefine: ficolepdfxc
**************************************************

**************************************************
*-- Class: ficolepdfxcp (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolepdfxcp (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:14 PM
*-- OLEObject = C:\Program Files\Tracker Software\PDF Viewer\Win32\PDFXCviewAx.dll
DEFINE CLASS ficolepdfxcp AS awolepdfxcp

  Height = 100
  Width = 100
  Name = "ficolepdfxcp"

ENDDEFINE
*-- EndDefine: ficolepdfxcp
**************************************************

**************************************************
*-- Class: ficolertf6 (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awolertf6 (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:14 PM
*-- OLEObject = C:\windows\SysWOW64\richtx32.ocx
DEFINE CLASS ficolertf6 AS awolertf6

  Height = 100
  Width = 100
  Name = "ficolertf6"

ENDDEFINE
*-- EndDefine: ficolertf6
**************************************************

**************************************************
*-- Class: ficoletv6 (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awoletv6 (ab\aw\aw.vcx)
*-- BaseClass: olecontrol
*-- Time Stamp: 09/10/13 12:05:14 PM
*-- OLEObject = C:\windows\SysWOW64\MSCOMCTL.OCX
DEFINE CLASS ficoletv6 AS awoletv6

  Width = 100
  Name = "ficoletv6"

ENDDEFINE
*-- EndDefine: ficoletv6
**************************************************

**************************************************
*-- Class: ficopg (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awopg (ab\aw\aw.vcx)
*-- BaseClass: optiongroup
*-- Time Stamp: 09/10/13 12:06:02 PM
DEFINE CLASS ficopg AS awopg

  MemberClassLibrary = "ficsample.vcx"
  MemberClass = "ficopt"
  Name = "ficopg"

ENDDEFINE
*-- EndDefine: ficopg
**************************************************

**************************************************
*-- Class: ficopt (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awopt (ab\aw\aw.vcx)
*-- BaseClass: optionbutton
*-- Time Stamp: 01/13/15 01:55:14 PM
DEFINE CLASS ficopt AS awopt

  BackStyle = 0
  Name = "ficopt"

ENDDEFINE
*-- EndDefine: ficopt
**************************************************

**************************************************
*-- Class: ficpag (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awpag (ab\aw\aw.vcx)
*-- BaseClass: page
*-- Time Stamp: 09/10/13 12:06:02 PM
DEFINE CLASS ficpag AS awpag

  Name = "ficpag"

ENDDEFINE
*-- EndDefine: ficpag
**************************************************

**************************************************
*-- Class: myficpag (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficpag (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: page
*-- Time Stamp: 11/25/16 11:41:14 AM
DEFINE CLASS myficpag AS ficpag

  FontName = "Consolas"
  Name = "myficpag"

  PROCEDURE Activate
    IF (TYPE('
m.THISFORM.wlHTMLgen') == 'L' AND m.THISFORM.wlHTMLgen)
      RETURN .T. && Execute this VFP event code (on FoxInCloud server)
    ENDIF

    this.parent.PageActivate(m.THIS)
  ENDPROC

ENDDEFINE
*-- EndDefine: myficpag
**************************************************

**************************************************
*-- Class: ficpgf (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awpgf (ab\aw\aw.vcx)
*-- BaseClass: pageframe
*-- Time Stamp: 09/10/13 12:06:02 PM
DEFINE CLASS ficpgf AS awpgf

  ErasePage = .T.
  MemberClassLibrary = "ficsample.vcx"
  MemberClass = "ficpag"
  Name = "ficpgf"

ENDDEFINE
*-- EndDefine: ficpgf
**************************************************

**************************************************
*-- Class: myficpgf (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: ficpgf (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: pageframe
*-- Time Stamp: 11/25/16 06:46:03 PM
DEFINE CLASS myficpgf AS ficpgf

  ErasePage = .T.
  MemberClassLibrary = "ficsample.vcx"
  MemberClass = "myficpag"
  _memberdata = [<VFPData><memberdata name="pageactivate" display="PageActivate"/></VFPData>]
  Name = "myficpgf"

  PROCEDURE pageactivate
    lparameters toPage as myFicPag of ficSample.vcx

    local loPage as myFicPag of ficSample.vcx;
    , lPage as Boolean

    if Vartype(m.toPage)== '
O'
      for each loPage in m.this.Pages foxobject
        with m.loPage as myFicPag of ficSample.vcx

          lPage = .PageOrder = m.toPage.PageOrder

          .BackColor = Iif(m.lPage;
            , Rgb(255,255,255); && white
            , Rgb(255,255,210); && light green && Rgb(220,220,220) light grey
            )

          .ForeColor = Iif(m.lPage;
            , 0; && black
            , Rgb(128,128,128); && gray
            )

          .FontBold = m.lPage
        endwith
      endfor
    endif
  ENDPROC

ENDDEFINE
*-- EndDefine: myficpgf
**************************************************

**************************************************
*-- Class: ficprj (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awprj (ab\aw\aw.vcx)
*-- BaseClass: projecthook
*-- Time Stamp: 11/07/18 10:41:09 AM
DEFINE CLASS ficprj AS awprj

  Name = "ficprj"

  PROCEDURE Init
    lparameters cPathClass

    return DoDefault(Addbs(JustPath(this.ClassLibrary)) + '
..\ficTuto\progs\')
  ENDPROC

ENDDEFINE
*-- EndDefine: ficprj
**************************************************

**************************************************
*-- Class: ficrel (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awrel (ab\aw\aw.vcx)
*-- BaseClass: relation
*-- Time Stamp: 09/10/13 12:06:03 PM
DEFINE CLASS ficrel AS awrel

  Height = 23
  Width = 23
  Name = "ficrel"

ENDDEFINE
*-- EndDefine: ficrel
**************************************************

**************************************************
*-- Class: ficsep (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awsep (ab\aw\aw.vcx)
*-- BaseClass: separator
*-- Time Stamp: 09/10/13 12:06:03 PM
DEFINE CLASS ficsep AS awsep

  Height = 0
  Width = 0
  Name = "ficsep"

ENDDEFINE
*-- EndDefine: ficsep
**************************************************

**************************************************
*-- Class: ficshp (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awshp (ab\aw\aw.vcx)
*-- BaseClass: shape
*-- Time Stamp: 09/10/13 12:06:03 PM
DEFINE CLASS ficshp AS awshp

  Name = "ficshp"

ENDDEFINE
*-- EndDefine: ficshp
**************************************************

**************************************************
*-- Class: ficspn (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awspn (ab\aw\aw.vcx)
*-- BaseClass: spinner
*-- Time Stamp: 09/10/13 12:06:06 PM
DEFINE CLASS ficspn AS awspn

  Name = "ficspn"

ENDDEFINE
*-- EndDefine: ficspn
**************************************************

**************************************************
*-- Class: fictbr (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awtbr (ab\aw\aw.vcx)
*-- BaseClass: toolbar
*-- Time Stamp: 09/10/13 12:06:04 PM
DEFINE CLASS fictbr AS awtbr

  Height = 15
  Left = 0
  Top = 0
  Width = 33
  Name = "fictbr"

ENDDEFINE
*-- EndDefine: fictbr
**************************************************

**************************************************
*-- Class: fictmr (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awtmr (ab\aw\aw.vcx)
*-- BaseClass: timer
*-- Time Stamp: 09/10/13 12:06:03 PM
DEFINE CLASS fictmr AS awtmr

  Name = "fictmr"

ENDDEFINE
*-- EndDefine: fictmr
**************************************************

**************************************************
*-- Class: fictxt (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awtxt (ab\aw\aw.vcx)
*-- BaseClass: textbox
*-- Time Stamp: 06/16/22 09:53:03 PM
DEFINE CLASS fictxt AS awtxt

  _memberdata = [<VFPData><memberdata name="selstart" display="SelStart"/><memberdata name="selstart_assign" display="SelStart_Assign"/><memberdata name="selstart_access" display="SelStart_Access"/><memberdata name="selstart_" display="SelStart_"/></VFPData>]
  selstart_ = 0
  Name = "fictxt"

  PROCEDURE selstart_access
    return Iif(thisForm.wlWeb, This.SelStart_, This.SelStart)
  ENDPROC

ENDDEFINE
*-- EndDefine: fictxt
**************************************************

**************************************************
*-- Class: fictxtgrc (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: fictxt (ab\aw\samples\fic\classe\ficsample.vcx)
*-- BaseClass: textbox
*-- Time Stamp: 02/19/15 05:51:08 PM
DEFINE CLASS fictxtgrc AS fictxt

  Name = "fictxtgrc"

  PROCEDURE refresh_
    this.Parent.ReadOnly = thisForm.sourceType() == '
Table'
  ENDPROC

ENDDEFINE
*-- EndDefine: fictxtgrc
**************************************************

**************************************************
*-- Class: ficxad (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awxad (ab\aw\aw.vcx)
*-- BaseClass: xmladapter
*-- Time Stamp: 09/10/13 12:06:03 PM
DEFINE CLASS ficxad AS awxad

  Name = "ficxad"
  Tables.Name = "Tables"

ENDDEFINE
*-- EndDefine: ficxad
**************************************************

**************************************************
*-- Class: ficxfd (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awxfd (ab\aw\aw.vcx)
*-- BaseClass: xmlfield
*-- Time Stamp: 09/10/13 12:06:03 PM
DEFINE CLASS ficxfd AS awxfd

  Name = "ficxfd"

ENDDEFINE
*-- EndDefine: ficxfd
**************************************************

**************************************************
*-- Class: ficxtb (ab\aw\samples\fic\classe\ficsample.vcx)
*-- ParentClass: awxtb (ab\aw\aw.vcx)
*-- BaseClass: xmltable
*-- Time Stamp: 09/10/13 12:06:04 PM
DEFINE CLASS ficxtb AS awxtb

  Name = "ficxtb"
  Fields.Name = "Fields"

ENDDEFINE
*-- EndDefine: ficxtb
**************************************************