Consultor Eletrônico



Kbase P18105: Widget-Pool Explained
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/14/2003
Status: Unverified

GOAL:

Widget-Pool Explained

FACT(s) (Environment):

Progress 9.1x

FIX:

Widget Pools.
Provide a means of treating the objects as a set. Delete the pool and all the object goes. Very useful for user interface work. AppBuilder automatically inserts a CREATE WIDGET-POOL in any new window you create.
Example:
r-widpl.p
DEFINE VARIABLE wh AS WIDGET-HANDLE.
DEFINE BUTTON b_create LABEL "Create Button".
DEFINE BUTTON b_del    LABEL "Delete Buttons".
DEFINE BUTTON b_quit LABEL "Quit"
 TRIGGERS:
   ON CHOOSE DO:
     IF VALID-HANDLE(wh) THEN DELETE WIDGET-POOL "new-buttons".
     QUIT.
   END.
 END.
DEFINE FRAME butt-frame
 b_create b_del b_quit WITH ROW SCREEN-LINES - 2.
DEFINE FRAME new-buttons WITH SIZE 76 BY 11 CENTERED ROW 2 TITLE "New Buttons".
ON CHOOSE OF b_create IN FRAME butt-frame DO:
 STATUS INPUT "Press RETURN to select a new button".
 IF wh = ? OR NOT VALID-HANDLE(wh) THEN
   CREATE WIDGET-POOL "new-buttons" PERSISTENT.
   CREATE BUTTON wh IN WIDGET-POOL "new-buttons"
   ASSIGN FRAME = FRAME new-buttons:HANDLE
     ROW = RANDOM(2, 9)
     COLUMN = RANDOM(2, 58)
     LABEL = "BUTTON " + STRING(etime)
     SENSITIVE = TRUE
     VISIBLE = TRUE
     TRIGGERS:
       ON CHOOSE PERSISTENT RUN dispmsg.
     END.
END.
ON CHOOSE OF b_del IN FRAME butt-frame DO:
 IF VALID-HANDLE(wh) THEN
   DELETE WIDGET-POOL "new-buttons".
 STATUS INPUT.
END.
ENABLE b_create b_del b_quit WITH FRAME butt-frame.
DO ON ENDKEY UNDO, LEAVE:
  WAIT-FOR CHOOSE OF b_quit IN FRAME butt-frame.
END.
IF VALID-HANDLE(wh)
THEN DELETE WIDGET-POOL "new-buttons".
PROCEDURE dispmsg:
 MESSAGE "You chose button " SELF:LABEL.
END.

Possible problems.
Unnamed Widget pools disappear when the program they were create is finished. It becomes easy to make handles invalid unintentionally.
Example:
RUN procedure.p PERSISTENT SET hProc.
RUN GetTable (OUTPUT hBuffer) IN hProc.
DELETE PROCEDURE hProc. /* hBuffer handle not anymore valid */

/* procedure.p */
CREATE WIDGET-POOL.
PROCEDURE GetTable:
CREATE BUFFER(....).
HBuffer = ....
END