/*------------------------------------------------------------------------
  combo_dialog.p  -  Branch 11343a verification: VALUE-CHANGED (fired while
  the DROP-DOWN-LIST is open, via arrow keys) opens a full modal DIALOG-BOX
  (a frame dialog with widgets + OK/Cancel), rather than an ALERT-BOX.

  A frame dialog-box runs its own nested WAIT-FOR loop (different from the
  alert-box modal loop), so this exercises a separate path of the fix.

  Expected (matching OpenEdge): the drop-down list closes when the dialog
  opens, the combo keeps the selected value (203), the dialog is modal, and
  after the dialog is dismissed the app returns cleanly with no freeze.
 ------------------------------------------------------------------------*/

DEFINE VARIABLE cb AS CHARACTER
   VIEW-AS COMBO-BOX
      INNER-LINES 8
      LIST-ITEMS "100","203","300","400","500"
      DROP-DOWN-LIST
   SIZE 24 BY 1.

DEFINE BUTTON btnQuit LABEL "Quit" SIZE 12 BY 1.

DEFINE FRAME f
   cb      AT ROW 2 COL 5 LABEL "Pick"
   btnQuit AT ROW 5 COL 5
   WITH SIDE-LABELS THREE-D SIZE 60 BY 8 TITLE "combo -> DIALOG-BOX (#11343a)".

DEFINE STREAM sout.
DEFINE VARIABLE seq AS INTEGER NO-UNDO.

PROCEDURE logline:
   DEFINE INPUT PARAMETER txt AS CHARACTER NO-UNDO.
   OUTPUT STREAM sout TO "combo_dialog.out" APPEND.
   PUT STREAM sout UNFORMATTED txt SKIP.
   OUTPUT STREAM sout CLOSE.
END PROCEDURE.

PROCEDURE showDialog:
   DEFINE VARIABLE note AS CHARACTER NO-UNDO VIEW-AS FILL-IN SIZE 28 BY 1.
   DEFINE BUTTON bOk     LABEL "OK"     AUTO-GO     SIZE 12 BY 1.
   DEFINE BUTTON bCancel LABEL "Cancel" AUTO-ENDKEY SIZE 12 BY 1.
   DEFINE FRAME dlg
      note    AT ROW 2 COL 3 LABEL "Note"
      bOk     AT ROW 4 COL 3
      bCancel AT ROW 4 COL 18
      WITH VIEW-AS DIALOG-BOX THREE-D SIZE 50 BY 7 TITLE "Details for 203".

   RUN logline("  >> DIALOG-BOX opening").
   ENABLE note bOk bCancel WITH FRAME dlg.
   WAIT-FOR GO OF FRAME dlg.
   RUN logline("  << DIALOG-BOX closed").
END PROCEDURE.

ON VALUE-CHANGED OF cb IN FRAME f
DO:
   seq = seq + 1.
   RUN logline(STRING(seq) + " VALUE-CHANGED screen=[" + cb:SCREEN-VALUE IN FRAME f + "]").
   IF cb:SCREEN-VALUE IN FRAME f = "203" THEN
      RUN showDialog.
END.

ON CHOOSE OF btnQuit IN FRAME f
DO:
   RUN logline("Quit chosen").
   APPLY "CLOSE" TO THIS-PROCEDURE.
END.

OUTPUT STREAM sout TO "combo_dialog.out".
PUT STREAM sout UNFORMATTED "=== run start ===" SKIP.
OUTPUT STREAM sout CLOSE.

ENABLE cb btnQuit WITH FRAME f.
cb:SCREEN-VALUE IN FRAME f = "100".

RUN logline("entering WAIT-FOR").
WAIT-FOR CLOSE OF THIS-PROCEDURE.
RUN logline("exited WAIT-FOR").

QUIT.
