1 &ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12 GUI
3 &Scoped-define WINDOW-NAME CURRENT-WINDOW
4 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS V-table-Win
5 /*------------------------------------------------------------------------
9 Description
: from VIEWER.W
- Template for SmartViewer Objects
17 ------------------------------------------------------------------------*/
18 /* This .W file was created with the Progress UIB.
*/
19 /*----------------------------------------------------------------------*/
21 /* Create an unnamed pool to store all the widgets created
22 by this procedure. This is a good default which assures
23 that this procedure's triggers and internal procedures
24 will execute in this procedure's storage
, and that proper
25 cleanup will occur on deletion of the procedure.
*/
29 /* *************************** Definitions
************************** */
31 /* Parameters Definitions
--- */
33 /* Local Variable Definitions
--- */
35 DEF VAR last-id
AS ROWID NO-UNDO.
36 DEF VAR this-win
AS HANDLE NO-UNDO.
38 /* _UIB-CODE-BLOCK-END
*/
42 &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
44 /* ******************** Preprocessor Definitions
******************** */
46 &Scoped-define PROCEDURE-TYPE SmartViewer
48 &Scoped-define ADM-SUPPORTED-LINKS Record-Source,Record-Target,TableIO-Target
50 /* Name of first Frame and
/or Browse and
/or first Query
*/
51 &Scoped-define FRAME-NAME F-Main
53 /* Standard List Definitions
*/
54 &Scoped-Define ENABLED-OBJECTS tgl_topmost sel_gavail btn_add sel_gcurr ~
56 &Scoped-Define DISPLAYED-OBJECTS tgl_topmost sel_gavail sel_gcurr
58 /* Custom List Definitions
*/
59 /* ADM-CREATE-FIELDS
,ADM-ASSIGN-FIELDS
,List-3
,List-4
,List-5
,List-6
*/
61 /* _UIB-PREPROCESSOR-BLOCK-END
*/
65 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _XFTR "Foreign Keys" V-table-Win _INLINE
66 /* Actions
: ? adm
/support
/keyedit.w ? ? ?
*/
72 UserName|y|y|TTPL.Usr.UserName
75 **************************
76 * Set attributes related to FOREIGN
KEYS
78 RUN set-attribute-list
(
79 'Keys-Accepted
= "UserName",
80 Keys-Supplied
= "UserName"'
:U
).
81 /**************************
83 /* _UIB-CODE-BLOCK-END
*/
87 /* *********************** Control Definitions
********************** */
90 /* Definitions of the field level widgets
*/
96 DEFINE BUTTON btn_remove
101 DEFINE VARIABLE sel_gavail
AS CHARACTER
102 VIEW-AS SELECTION-LIST MULTIPLE SCROLLBAR-VERTICAL
106 DEFINE VARIABLE sel_gcurr
AS CHARACTER
107 VIEW-AS SELECTION-LIST MULTIPLE SCROLLBAR-VERTICAL
111 DEFINE VARIABLE tgl_topmost
AS LOGICAL INITIAL no
118 /* ************************ Frame Definitions
*********************** */
121 tgl_topmost
AT ROW 1 COL 54
122 sel_gavail
AT ROW 2 COL 2 NO-LABEL
123 btn_add
AT ROW 2 COL 28
124 sel_gcurr
AT ROW 2 COL 39 NO-LABEL
125 btn_remove
AT ROW 3.5 COL 28
126 "Available Groups" VIEW-AS TEXT
127 SIZE 12 BY 1 AT ROW 1 COL 2
129 "Current Groups" VIEW-AS TEXT
130 SIZE 11 BY 1 AT ROW 1 COL 39
132 WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
133 SIDE-LABELS NO-UNDERLINE THREE-D
134 AT COL 1 ROW 1 SCROLLABLE .
137 /* *********************** Procedure Settings
************************ */
139 &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
140 /* Settings for
THIS-PROCEDURE
142 Allow
: Basic
,DB-Fields
144 Add Fields to
: EXTERNAL-TABLES
145 Other Settings
: PERSISTENT-ONLY
COMPILE
148 /* This procedure should always be
RUN PERSISTENT. Report the error
, */
149 /* then cleanup and return.
*/
150 IF NOT THIS-PROCEDURE:PERSISTENT THEN DO:
151 MESSAGE "{&FILE-NAME} should only be RUN PERSISTENT."
152 VIEW-AS ALERT-BOX ERROR BUTTONS OK.
156 &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
158 /* ************************* Create Window
************************** */
160 &ANALYZE-SUSPEND _CREATE-WINDOW
161 /* DESIGN Window definition
(used by the UIB
)
162 CREATE WINDOW V-table-Win
ASSIGN
165 /* END WINDOW DEFINITION
*/
170 /* *************** Runtime Attributes and UIB Settings
************** */
172 &ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES
173 /* SETTINGS
FOR WINDOW V-table-Win
174 VISIBLE,,RUN-PERSISTENT
*/
175 /* SETTINGS
FOR FRAME F-Main
176 NOT-VISIBLE Size-to-Fit
*/
178 FRAME F-Main
:SCROLLABLE = FALSE
179 FRAME F-Main
:HIDDEN = TRUE.
181 /* _RUN-TIME-ATTRIBUTES-END
*/
185 /* Setting information for Queries and Browse Widgets fields
*/
187 &ANALYZE-SUSPEND _QUERY-BLOCK FRAME F-Main
188 /* Query rebuild information for
FRAME F-Main
191 */ /* FRAME F-Main
*/
197 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB V-table-Win
198 /* ************************* Included-Libraries
*********************** */
200 {src
/adm
/method
/viewer.i
}
201 {inc
/method
/m-mntvwr.i
}
203 /* _UIB-CODE-BLOCK-END
*/
209 /* ************************ Control Triggers
************************ */
211 &Scoped-define SELF-NAME btn_add
212 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btn_add V-table-Win
213 ON CHOOSE OF btn_add
IN FRAME F-Main
/* Add
*/
218 /* _UIB-CODE-BLOCK-END
*/
222 &Scoped-define SELF-NAME btn_remove
223 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btn_remove V-table-Win
224 ON CHOOSE OF btn_remove
IN FRAME F-Main
/* Remove
*/
229 /* _UIB-CODE-BLOCK-END
*/
233 &Scoped-define SELF-NAME sel_gavail
234 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL sel_gavail V-table-Win
235 ON MOUSE-SELECT-DBLCLICK
OF sel_gavail
IN FRAME F-Main
237 APPLY '
CHOOSE'
:U
TO btn_add .
240 /* _UIB-CODE-BLOCK-END
*/
244 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL sel_gavail V-table-Win
245 ON VALUE-CHANGED
OF sel_gavail
IN FRAME F-Main
250 /* _UIB-CODE-BLOCK-END
*/
254 &Scoped-define SELF-NAME sel_gcurr
255 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL sel_gcurr V-table-Win
256 ON MOUSE-SELECT-DBLCLICK
OF sel_gcurr
IN FRAME F-Main
258 APPLY '
CHOOSE'
:U
TO btn_remove .
261 /* _UIB-CODE-BLOCK-END
*/
265 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL sel_gcurr V-table-Win
266 ON VALUE-CHANGED
OF sel_gcurr
IN FRAME F-Main
271 /* _UIB-CODE-BLOCK-END
*/
275 &Scoped-define SELF-NAME tgl_topmost
276 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL tgl_topmost V-table-Win
277 ON VALUE-CHANGED
OF tgl_topmost
IN FRAME F-Main
/* On Top ?
*/
279 RUN top-most-changed.
282 /* _UIB-CODE-BLOCK-END
*/
288 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK V-table-Win
291 /* *************************** Main Block
*************************** */
293 &IF DEFINED(UIB_IS_RUNNING) <> 0 &THEN
294 RUN dispatch
IN THIS-PROCEDURE ('initialize'
:U
).
297 /************************ INTERNAL PROCEDURES
********************/
299 /* _UIB-CODE-BLOCK-END
*/
303 /* ********************** Internal Procedures
*********************** */
305 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE add-groups V-table-Win
306 PROCEDURE add-groups
:
307 /*------------------------------------------------------------------------------
311 ------------------------------------------------------------------------------*/
313 DO WITH FRAME {&FRAME-NAME}:
315 IF NOT AVAILABLE Usr
THEN RETURN.
317 RUN notify
( 'set-busy
, CONTAINER-SOURCE'
:U
).
319 DEF VAR i
AS INT NO-UNDO.
320 DEF VAR sv
AS CHAR NO-UNDO.
321 DEF VAR delim
AS CHAR NO-UNDO.
323 sv
= INPUT sel_gavail.
324 delim
= sel_gavail
:DELIMITER.
326 DO i
= 1 TO NUM-ENTRIES( sv
, delim
):
327 CREATE UsrGroupMember.
329 UsrGroupMember.UserName
= Usr.UserName
330 UsrGroupMember.GroupName
= ENTRY( i
, sv
, delim
).
334 RUN notify
( 'set-idle
, CONTAINER-SOURCE'
:U
).
340 /* _UIB-CODE-BLOCK-END
*/
344 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-find-using-key V-table-Win adm/support/_key-fnd.p
345 PROCEDURE adm-find-using-key
:
346 /*------------------------------------------------------------------------------
347 Purpose
: Finds the current record using the contents of
348 the 'Key-Name' and 'Key-Value' attributes.
350 ------------------------------------------------------------------------------*/
351 DEF VAR key-value
AS CHAR NO-UNDO.
352 DEF VAR row-avail-enabled
AS LOGICAL NO-UNDO.
354 /* LOCK status on the find depends on FIELDS-ENABLED.
*/
355 RUN get-attribute
('FIELDS-ENABLED'
:U
).
356 row-avail-enabled
= (RETURN-VALUE eq 'yes'
:U
).
357 /* Look up the current key-value.
*/
358 RUN get-attribute
('Key-Value'
:U
).
359 key-value
= RETURN-VALUE.
361 /* Find the current record using the current Key-Name.
*/
362 RUN get-attribute
('Key-Name'
:U
).
364 WHEN 'UserName'
:U
THEN
365 {src
/adm
/template
/find-tbl.i
367 &WHERE = "WHERE Usr.UserName eq key-value"
373 /* _UIB-CODE-BLOCK-END
*/
377 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-row-available V-table-Win _ADM-ROW-AVAILABLE
378 PROCEDURE adm-row-available
:
379 /*------------------------------------------------------------------------------
380 Purpose
: Dispatched to this procedure when the Record-
381 Source has a new row available. This procedure
382 tries to get the new row
(or foriegn keys
) from
383 the Record-Source and process it.
385 ------------------------------------------------------------------------------*/
387 /* Define variables needed by this internal procedure.
*/
388 {src
/adm
/template
/row-head.i
}
390 /* Process the newly available records
(i.e. display fields
,
391 open queries
, and
/or pass records on to any RECORD-TARGETS
).
*/
392 {src
/adm
/template
/row-end.i
}
396 /* _UIB-CODE-BLOCK-END
*/
400 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI V-table-Win _DEFAULT-DISABLE
401 PROCEDURE disable_UI
:
402 /*------------------------------------------------------------------------------
403 Purpose
: DISABLE the User Interface
405 Notes
: Here we clean-up the user-interface by deleting
406 dynamic widgets we have created and
/or hide
407 frames. This procedure is usually called when
408 we are ready to
"clean-up" after running.
409 ------------------------------------------------------------------------------*/
410 /* Hide all frames.
*/
412 IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
415 /* _UIB-CODE-BLOCK-END
*/
419 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE inst-initialize V-table-Win
420 PROCEDURE inst-initialize
:
421 /*------------------------------------------------------------------------------
425 ------------------------------------------------------------------------------*/
427 /* tgl_topmost
:SCREEN-VALUE IN FRAME {&FRAME-NAME} = "Yes". */
428 this-win
= CURRENT-WINDOW.
429 RUN top-most-changed.
433 /* _UIB-CODE-BLOCK-END
*/
437 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE inst-row-available V-table-Win
438 PROCEDURE inst-row-available
:
439 /*------------------------------------------------------------------------------
441 ------------------------------------------------------------------------------*/
443 RUN dispatch
( 'find-using-key'
:U
).
444 IF NOT AVAILABLE Usr
THEN RETURN.
446 IF VALID-HANDLE( this-win
) THEN this-win
:TITLE = "Groups - " + Usr.UserName.
447 IF ROWID( Usr
) <> last-id
THEN RUN refresh-groups.
448 last-id
= ROWID( Usr
).
449 RUN update-node
IN sys-mgr
( THIS-PROCEDURE ).
453 /* _UIB-CODE-BLOCK-END
*/
457 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE pre-row-available V-table-Win
458 PROCEDURE pre-row-available
:
459 /*------------------------------------------------------------------------------
463 ------------------------------------------------------------------------------*/
469 /* _UIB-CODE-BLOCK-END
*/
473 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE refresh-groups V-table-Win
474 PROCEDURE refresh-groups
:
475 /*------------------------------------------------------------------------------
479 ------------------------------------------------------------------------------*/
481 DO WITH FRAME {&FRAME-NAME}:
483 RUN notify
( 'set-busy
, CONTAINER-SOURCE'
:U
).
485 sel_gavail
:LIST-ITEMS = "".
486 sel_gcurr
:LIST-ITEMS = "".
488 IF NOT AVAILABLE Usr
THEN RETURN.
490 FOR EACH UsrGroup
NO-LOCK WHERE
491 NOT CAN-FIND( UsrGroupMember
OF Usr
WHERE
492 UsrGroupMember.Groupname
= UsrGroup.GroupName
):
493 IF sel_gavail
:ADD-LAST( UsrGroup.GroupName
) THEN.
496 FOR EACH UsrGroupMember
OF Usr
NO-LOCK:
497 IF sel_gcurr
:ADD-LAST( UsrGroupMember.GroupName
) THEN.
501 RUN notify
( 'set-idle
, CONTAINER-SOURCE'
:U
).
507 /* _UIB-CODE-BLOCK-END
*/
511 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE remove-groups V-table-Win
512 PROCEDURE remove-groups
:
513 /*------------------------------------------------------------------------------
517 ------------------------------------------------------------------------------*/
519 DO WITH FRAME {&FRAME-NAME}:
521 IF NOT AVAILABLE Usr
THEN RETURN.
523 RUN notify
( 'set-busy
, CONTAINER-SOURCE'
:U
).
525 DEF VAR i
AS INT NO-UNDO.
526 DEF VAR sv
AS CHAR NO-UNDO.
527 DEF VAR delim
AS CHAR NO-UNDO.
529 sv
= INPUT sel_gcurr.
530 delim
= sel_gcurr
:DELIMITER.
532 DO i
= 1 TO NUM-ENTRIES( sv
, delim
):
533 FIND UsrGroupMember
OF Usr
WHERE UsrGroupMember.GroupName
= ENTRY( i
, sv
, delim
)
534 EXCLUSIVE-LOCK NO-ERROR.
535 IF AVAILABLE UsrGroupMember
THEN DELETE UsrGroupMember.
539 RUN notify
( 'set-idle
, CONTAINER-SOURCE'
:U
).
545 /* _UIB-CODE-BLOCK-END
*/
549 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE send-key V-table-Win adm/support/_key-snd.p
551 /*------------------------------------------------------------------------------
552 Purpose
: Sends a requested
KEY value back to the calling
554 Parameters
: <see adm
/template
/sndkytop.i
>
555 ------------------------------------------------------------------------------*/
557 /* Define variables needed by this internal procedure.
*/
558 {src
/adm
/template
/sndkytop.i
}
560 /* Return the key value associated with each key case.
*/
561 {src
/adm
/template
/sndkycas.i
"UserName" "Usr" "UserName"}
563 /* Close the
CASE statement and end the procedure.
*/
564 {src
/adm
/template
/sndkyend.i
}
568 /* _UIB-CODE-BLOCK-END
*/
572 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE send-records V-table-Win _ADM-SEND-RECORDS
573 PROCEDURE send-records
:
574 /*------------------------------------------------------------------------------
575 Purpose
: Send record
ROWID's for all tables used by
577 Parameters
: see template
/snd-head.i
578 ------------------------------------------------------------------------------*/
580 /* SEND-RECORDS does nothing because there are no External
581 Tables specified for this SmartViewer
, and there are no
582 tables specified in any contained Browse
, Query
, or Frame.
*/
586 /* _UIB-CODE-BLOCK-END
*/
590 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE state-changed V-table-Win
591 PROCEDURE state-changed
:
592 /* -----------------------------------------------------------
596 -------------------------------------------------------------*/
597 DEFINE INPUT PARAMETER p-issuer-hdl
AS HANDLE NO-UNDO.
598 DEFINE INPUT PARAMETER p-state
AS CHARACTER NO-UNDO.
601 /* Object instance CASEs can go here to replace standard behavior
603 {src
/adm
/template
/vstates.i
}
607 /* _UIB-CODE-BLOCK-END
*/
611 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE top-most-changed V-table-Win
612 PROCEDURE top-most-changed
:
613 /*------------------------------------------------------------------------------
615 ------------------------------------------------------------------------------*/
617 IF INPUT FRAME {&FRAME-NAME} tgl_topmost THEN
618 RUN notify
( 'set-topmost
,container-source'
:U
).
620 RUN notify
( 'reset-topmost
,container-source'
:U
).
624 /* _UIB-CODE-BLOCK-END
*/
628 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE update-buttons V-table-Win
629 PROCEDURE update-buttons
:
630 /*------------------------------------------------------------------------------
634 ------------------------------------------------------------------------------*/
636 DO WITH FRAME {&FRAME-NAME}:
637 btn_add
:SENSITIVE = INPUT sel_gavail
<> "" AND INPUT sel_gavail
<> ?.
638 btn_remove
:SENSITIVE = INPUT sel_gcurr
<> "" AND INPUT sel_gcurr
<> ?.
643 /* _UIB-CODE-BLOCK-END
*/