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