=== modified file 'rules/annotations/ocx_conversion.rules'
--- rules/annotations/ocx_conversion.rules	2020-01-13 06:43:45 +0000
+++ rules/annotations/ocx_conversion.rules	2020-01-14 20:11:25 +0000
@@ -116,6 +116,7 @@
    <variable name="map3"           type="java.util.Map" />
    <variable name="map4"           type="java.util.Map" />
    <variable name="map5"           type="java.util.Map" />
+   <variable name="map6"           type="java.util.Map" />
 
    <variable name="ref"            type="com.goldencode.ast.AnnotatedAst" />
    <variable name="ref1"           type="com.goldencode.ast.Aast" />
@@ -224,6 +225,7 @@
          <action>widgetKwords.put("HTML-BROWSER", prog.kw_html_bws)</action>
          <action>widgetKwords.put("IMAGELIST", prog.kw_il_img)</action>
          <action>widgetKwords.put("PROGRESS-BAR", prog.kw_prog_bar)</action>
+         <action>widgetKwords.put("DATETIME-PICKER", prog.kw_dtpicker)</action>
 
          <action>widgetClasses = create("java.util.HashMap")</action>
          <action>widgetClasses.put("TREELIST", classForName("com.goldencode.p2j.ui.TreeList"))</action>
@@ -232,6 +234,7 @@
          <action>widgetClasses.put("HTML-BROWSER", classForName("com.goldencode.p2j.ui.HtmlBrowser"))</action>
          <action>widgetClasses.put("IMAGELIST", classForName("com.goldencode.p2j.ui.ImageList"))</action>
          <action>widgetClasses.put("PROGRESS-BAR", classForName("com.goldencode.p2j.ui.ProgressBar"))</action>
+         <action>widgetClasses.put("DATETIME-PICKER", classForName("com.goldencode.p2j.ui.DateTimePicker"))</action>
 
          <!-- fill the method aliases, where the key is the original com method/property name (in lower case),
               the rules will prepend is/get/set accordingly to the aliased values so for properties,
@@ -282,7 +285,11 @@
          <action>map5.put("mousepointer"          , "ProgBarMousePointer")</action>
          <action>map5.put("refresh"               , "progBarRefresh")</action>
          <action>aliasMap.put("PROGRESS-BAR"      , map5)</action>
-    
+         
+         <!-- DTPicker -->
+         <action>map6 = create("java.util.HashMap")</action>
+         <action>map6.put("value"             , "DTPValue")</action>
+         <action>aliasMap.put("DATETIME-PICKER"   , map6)</action>
       </rule>
    </init-rules>
 

=== modified file 'rules/convert/methods_attributes.rules'
--- rules/convert/methods_attributes.rules	2019-12-19 09:55:30 +0000
+++ rules/convert/methods_attributes.rules	2020-01-14 20:23:58 +0000
@@ -958,6 +958,7 @@
          <rule>list.put(prog.kw_dclk_exp, execLib("cr_descr", "TreeFace"                   , "isDblClickExpanding"    , "setDblClickExpanding"   , true       ))</rule>
          <rule>list.put(prog.kw_dd_otree, execLib("cr_descr", "TreeFace"                   , "isDragDropOtherTree"    , "setDragDropOtherTree"   , true       ))</rule>
          <rule>list.put(prog.kw_dec_sep,  execLib("cr_descr", "TreeList"                   , "getDecimalSeparator"    , "setDecimalSeparator"    , true       ))</rule>
+         <rule>list.put(prog.kw_dtpvalue, execLib("cr_descr", "DateTimePicker"             , "getDTPValue"            , "setDTPValue"            , true       ))</rule>
          <rule>list.put(prog.kw_dragdrop, execLib("cr_descr", "TreeFace"                   , "isDragDrop"             , "setDragDrop"            , true       ))</rule>
          <rule>list.put(prog.kw_eh_fl,    execLib("cr_descr", "BrowseElement"              , "isEnhancedFiltering"    , "setEnhancedFiltering"   , true       ))</rule>
          <rule>list.put(prog.kw_eh_sr,    execLib("cr_descr", "BrowseElement"              , "isEnhancedSorting"      , "setEnhancedSorting"     , true       ))</rule>

=== modified file 'rules/convert/ui_statements.rules'
--- rules/convert/ui_statements.rules	2019-11-19 14:11:39 +0000
+++ rules/convert/ui_statements.rules	2020-01-14 13:50:48 +0000
@@ -957,6 +957,10 @@
             <action>explicitw = "DialogBox"</action>
          </rule>
          <rule>explicitw == null and 
+               (downPath("KW_DTPICKER") or evalLib("match_widget_type", "datetime-picker"))
+            <action>explicitw = "DateTimePicker"</action>
+         </rule>
+         <rule>explicitw == null and 
                (downPath("KW_EDITOR") or evalLib("match_widget_type", "editor"))
             <action>explicitw = "Editor"</action>
          </rule>

=== modified file 'rules/gaps/expressions.rules'
--- rules/gaps/expressions.rules	2019-12-09 13:18:36 +0000
+++ rules/gaps/expressions.rules	2020-01-14 12:18:54 +0000
@@ -1732,6 +1732,7 @@
          
          <rule>widAndQual.put(prog.kw_as       , rw.cvt_lvl_full       | rw.rt_lvl_full)</rule>
          <rule>widAndQual.put(prog.kw_browse   , rw.cvt_lvl_full       | rw.rt_lvl_full)</rule>
+         <rule>widAndQual.put(prog.kw_dtpicker , rw.cvt_lvl_partial    | rw.rt_lvl_partial)</rule>
          <rule>widAndQual.put(prog.kw_tabset   , rw.cvt_lvl_partial    | rw.rt_lvl_partial)</rule>
          <rule>widAndQual.put(prog.kw_img_list , rw.cvt_lvl_partial    | rw.rt_lvl_partial)</rule>
          <rule>widAndQual.put(prog.kw_treelist , rw.cvt_lvl_full       | rw.rt_lvl_partial)</rule>

=== modified file 'src/com/goldencode/p2j/uast/progress.g'
--- src/com/goldencode/p2j/uast/progress.g	2019-12-19 09:55:30 +0000
+++ src/com/goldencode/p2j/uast/progress.g	2020-01-14 20:27:04 +0000
@@ -5162,7 +5162,7 @@
          KW_IL_OVER;
          KW_IL_UMASK;
          KW_ADD_IMG;    // end IMAGELIST
-         KW_MS_CLICK;   // begin PROGESS-BAR
+         KW_MS_CLICK;   // begin PROGRESS-BAR
          KW_MS_DOWN;
          KW_MS_MOVE;
          KW_MS_UP;
@@ -5197,7 +5197,9 @@
          KW_PB_SCROL;
          KW_PB_MSPNT;
          KW_PB_MSICO;
-         KW_COM_DATA;    // end PROGESS-BAR
+         KW_COM_DATA;    // end PROGRESS-BAR
+         KW_DTPICKER;    // DATETIME-PICKER
+         KW_DTPVALUE;    // DATETIME-PICKER
       END_FWD_EXTENSION;
    END_UNRESERVED;
    BEGIN_CALLGRAPH;
@@ -8224,6 +8226,7 @@
       attrsAndMethods.put( KW_DOMAIN_N, ATTR_CHAR    );
       attrsAndMethods.put( KW_DOMAIN_T, ATTR_CHAR    );
       attrsAndMethods.put( KW_DOWN    , ATTR_INT     );
+      attrsAndMethods.put( KW_DTPVALUE, ATTR_CHAR    ); // FWD DATETIME-PICKER extension, not real 4GL
       attrsAndMethods.put( KW_DRAG_EN , ATTR_LOGICAL );
       attrsAndMethods.put( KW_DRAGDROP, ATTR_LOGICAL ); // FWD extension, not real 4GL
       attrsAndMethods.put( KW_DROP_TAR, ATTR_LOGICAL );
@@ -24445,6 +24448,7 @@
          | KW_COMBO_BX   { is_widget = true; }
          | KW_CNTRL_FR   { is_widget = true; }
          | KW_DIALOG     { is_widget = true; }
+         | KW_DTPICKER   { is_widget = true; }
          | KW_EDITOR     { is_widget = true; }
          | KW_FILL_IN    { is_widget = true; }
          | KW_FRAME      { is_widget = true; }
@@ -33274,6 +33278,7 @@
          new Keyword("date"                           ,  0, KW_DATE    , false),
          new Keyword("datetime"                       ,  0, KW_DATETIME, false),  // missing from keyword index and UNTESTED at this time
          new Keyword("datetime-tz"                    ,  0, KW_DATE_TZ , false),  // missing from keyword index and UNTESTED at this time
+         new Keyword("datetime-picker"                ,  0, KW_DTPICKER, false),  // FWD DATETIME-PICKER extension, not a real 4GL keyword
          new Keyword("date-format"                    ,  6, KW_DATE_FMT, false),
          new Keyword("date-separator"                 ,  0, KW_DATE_SEP, false),  // FWD extension, not a real 4GL keyword
          new Keyword("day"                            ,  0, KW_DAY     , false),
@@ -33382,6 +33387,7 @@
          new Keyword("drop-file-notify"               ,  0, KW_DROP_FN , false),
          new Keyword("drop-target"                    ,  0, KW_DROP_TAR, false),
          new Keyword("dslog-manager"                  ,  0, KW_DSL_MGR , false),
+         new Keyword("dtp-value"                      ,  0, KW_DTPVALUE, false),  // FWD DATETIME-PICKER extension, not a real 4GL keyword
          new Keyword("dump"                           ,  0, KW_DUMP    , false),
          new Keyword("dump-logging-now"               ,  0, KW_DUMP_LGN, false),  // missing from keyword index and UNTESTED at this time
          new Keyword("dynamic-cast"                   ,  0, KW_DYN_CAST, false),  // missing from keyword index and UNTESTED at this time

=== modified file 'src/com/goldencode/p2j/util/LegacyResource.java'
--- src/com/goldencode/p2j/util/LegacyResource.java	2019-11-19 14:11:39 +0000
+++ src/com/goldencode/p2j/util/LegacyResource.java	2020-01-14 13:52:47 +0000
@@ -192,6 +192,9 @@
    /** Constant identifying the DIALOG-BOX resource. */
    public static String DIALOG_BOX = "DIALOG-BOX";
 
+   /** Constant identifying the DATETIME-PICKER resource. */
+   public static String DATETIME_PICKER = "DATETIME-PICKER";
+
    /** Constant identifying the  resource. */
    public static String EDITOR = "EDITOR";
 

=== modified file 'src/com/goldencode/p2j/util/handle.java'
--- src/com/goldencode/p2j/util/handle.java	2019-11-19 14:11:39 +0000
+++ src/com/goldencode/p2j/util/handle.java	2020-01-14 15:54:06 +0000
@@ -2729,6 +2729,11 @@
       return unwrapImpl(this, BlankInterface.class);
    }
 
+   public DateTimePicker unwrapDateTimePicker()
+   {
+      return unwrapImpl(this, DateTimePicker.class);
+   }
+
    /**
     * Unwrap this handle to a {@link DeblankInterface} instance. If the
     * handle is not a widget handle or is invalid, an 

