|
/*=============================================================================
5 y: {! @# X0 z5 H8 e WARNING!! This file is overwritten by the UIStyler each time the Styler
' m% J3 r: f+ m4 S8 B file is saved./ D- ^3 r0 }' S% D
' f2 J4 K6 j9 @- ]8 d( z, l
8 L$ K9 }" v$ R# n& R Filename: ZGEAR_template.c
/ V& u- g6 c7 {& k
: S; e+ o7 r4 s# M* e5 \# D This file was generated by the NX User Interface Styler* k- q' H* }8 }& v5 n
Created by: Administrator
8 M" T6 P. _$ k" m Version: NX 4" b! g5 ?) r* o+ [8 |9 g+ c
Date: 03-19-10
2 G6 Q" U) ^( {( b! t8 b Time: 14:149 c! }# V& B# x
2 I( K2 u8 n! Q/ J; w
This template file is overwritten each time the UIStyler dialog is0 r) ?- x; o o3 I- ~% v
saved. Any modifications to this file will be lost.
1 N* N! I2 v6 ~==============================================================================*/4 B$ q9 I, b, g* O
; E3 r0 s( R3 O$ S) H% l$ p: m% B
( e1 Q! k; T' G. x. D7 L8 k
: p& r; D* U3 R3 A0 e. F/*==============================================================================
+ P, x% }1 X; a$ T6 \ q& K Purpose: This TEMPLATE file contains C source and static structures to * P/ v, T5 b3 L% q$ Z9 Y" U* k7 F! F
guide you in the construction of your NX Open application dialog. 5 z, t/ B; {+ t Q
The generation of your dialog file (.dlg extension) is the first step towards
% B) i e; |: z4 o9 e2 A l6 y dialog construction within Unigraphics. You must now create a ugOpen 3 j- J' _& U% C w. g" s5 b' I
application that utilizes this file (.dlg). : C- ?* y, q3 D$ q- M8 `, G
@: S! `/ \' J" M. ? The information in this file provides you with the following: ! q0 `" A/ \1 N
4 f3 T8 n3 R6 l6 p
1. Help on the use of the functions, UF_MB_add_styler_actions and * E: c* W* h7 Y. t8 x3 q" E' }. C
UF_STYLER_create_dialog in your NX Open application. These functions
" Z6 d" ^3 s1 K& H# J will load and display your UIStyler dialog in Unigraphics. ) C; t" x9 B- h0 c
. B8 i3 @7 l6 ` An example of the function, UF_MB_add_styler_actions to associate your
# y2 r* _: R% {9 _+ j) E; p* s0 [ dialog to the menubar is shown below (Search on Example 1).
; u, t) @1 O% ~ ! \- q' L p' m* J9 q( k
An example of a invoking a dialog from a callback utilizing
5 `* n3 V/ b" v! ? UF_STYLER_create_dialog is also shown below (Search for Example 2). ( G! Y# `5 ]' O ]
; i, s1 m* r! {0 P
An example of a user exit utilizing UF_STYLER_create_dialog is also
4 \% X0 {0 `* E+ d7 k3 s0 @ shown below (Search for Example 3). 3 ^6 f8 v6 q, h+ \$ }/ X
+ F# N8 K" k9 [ c 2. The callback structure: --- ZGEAR_cbs --- 0 _+ |5 i' @5 q( @* B4 t
This structure is VERY important if you have callbacks associated with
k3 X$ I D Z% ^1 c2 B$ o, u your dialog. It correlates the dialog items in your dialog with the + q; |$ O; s' Y! h6 h- n
callback functions you must supply. You should not modify this 6 W5 h& `0 w* I4 A9 D
structure since it MUST match up to the information stored in your . \( ]5 K$ \* f
dialog file (.dlg). Any attempt to do so will cause an error while 4 M/ v) B' f( o9 N5 P
constructing your dialog. If you wish to modify the association of
/ x) @0 H6 C6 Z! A9 ]8 l6 X your callbacks to your dialog, please reload your dialog file (.dlg) into5 R( h2 z" ~) N5 n# z) g
the UIStyler and regenerate your files.
% t8 s/ L7 q8 Y9 |. l" O0 A9 c You do not need to be concerned about this structure, simply pass it as " J8 s# ]. c2 f7 J/ ~! x$ H
an argument to the function, UF_STYLER_create_dialog along with your ' a6 s* ]; E1 i W& S1 J2 E* t
dialog file (.dlg).
% h) ~# }/ E, O+ F1 M- B 6 ]: n9 d1 U( e5 `; `5 c" z6 f
Example 1 displays the actual call you may make for this particular ) g( j* y# V) Y4 W6 T4 x% T" _
dialog.
. g! i) ]. U/ d
5 e, |+ [0 _/ q/ r5 D% }# d 3. The empty callback functions (stubs) associated with your dialog items
; r: a7 C* i* z* O8 n/ r have also been placed in this file. These empty functions have been
. i% g, T) r' [+ V' `0 J created simply to start you along with your coding requirements. , Z) H3 c( j# z( R, _" a( P
The function name, argument list and possible return values have already
3 h7 f1 E9 K; q" j3 U% p- Z been provided for you. / j* K* k, i8 O* C& ?- C! u
; w" p2 i- `* c' W- B5 @2 WNOTE: Each callback must be wrappered with the functions UF_initialize() : u S8 u/ f! |- k0 O d
and UF_terminate(). * ~2 ]$ d- C9 g" O2 K4 P5 A5 Z
% s7 T) }* r# Y' S8 h% {==============================================================================*/
1 @2 c8 v# _1 d* a" B5 J9 ]1 S6 d, `2 [9 }7 _7 N! u
8 w& Q3 ^% v3 [0 K( b
- |4 K" h: K% j! v# ?/* These include files are needed for the following template code. */) n |1 M% o# O
#include <stdio.h> # J7 _5 H9 B2 l' G
#include <uf.h>: z' F; `% E: T. |5 W% M
#include <uf_defs.h>
1 M4 [9 K" j' A J( [$ z#include <uf_exit.h>
) g% o2 @8 a7 H#include <uf_ui.h>% s1 r' d0 t6 _( N3 j7 A/ Q
#include <uf_styler.h>' Q3 v8 H( X/ u3 d5 Y1 g: _/ L
#include <uf_mb.h>
' b Q5 d3 c& ~#include <stdlib.h>- b0 K# b: G" K# P& b5 ^6 w) l+ J
#include <uf_modl_expressions.h>
. I$ I1 Q8 k$ E3 Z/ Q* S, z% o#include <uf_part.h>7 a1 e# _* N) g& ~6 Q9 C. i \9 W
#include <uf_modl.h>. r% ~2 A. z7 W$ x
#include "ZGEAR.h"
6 f# ^+ l! q) U, Z$ U; l7 |#define ZGEAR_CB_COUNT ( 3 + 1 ) /* Add 1 for the terminator */+ R. h P. \# ?0 d7 f
8 j1 @( }" a9 b; |/ n# A
/*--------------------------------------------------------------------------
* _( M( d( n# FThe following structure defines the callback entries used by the
' t0 \+ D+ q; i- Q# r5 wstyler file. This structure MUST be passed into the user function, / A5 X# K E- l) o8 x" x
UF_STYLER_create_dialog along with SPLINE_CB_COUNT.
% U& V! A6 h. h2 P7 B--------------------------------------------------------------------------*/
: |% P! |2 V$ q9 g3 F6 B) Tstatic UF_STYLER_callback_info_t ZGEAR_cbs[ZGEAR_CB_COUNT] = : W' W3 T0 {3 c8 c! j; ~, j3 M
{
9 a$ [' ~6 H+ d! @: @( p" B: Q/ `- Z' x {UF_STYLER_DIALOG_INDEX, UF_STYLER_CONSTRUCTOR_CB , 0, ZGEAR_constructor},: `- `: p8 U* e" ^) M8 b) q8 w3 S5 ~; {
{UF_STYLER_DIALOG_INDEX, UF_STYLER_DESTRUCTOR_CB , 0, ZGEAR_destructor},) W, ], b( W4 c1 g; ? W
{UF_STYLER_DIALOG_INDEX, UF_STYLER_OK_CB , 0, ZGEAR_ok},0 V4 E- w) O4 I( _9 j Q6 ^
{UF_STYLER_DIALOG_INDEX, UF_STYLER_CANCEL_CB , 0, ZGEAR_cancel},; R5 U) E- l! E3 ]
{UF_STYLER_NULL_OBJECT, UF_STYLER_NO_CB, 0, 0 }
% n4 k, ?( W! b: K& _};
$ f& c, T: p; j& k% L+ _" P. ?4 y( ^static UF_MB_styler_actions_t actions[] = {
9 H" N1 [- m! u/ V { "ZGEAR.dlg", NULL, ZGEAR_cbs , UF_MB_STYLER_IS_NOT_TOP },6 K Q& M7 F' l* o
{ NULL, NULL, NULL, 0 } /* This is a NULL terminated list */
5 v; z5 m+ z) x% h};. f) b! Q0 C" q0 q4 \5 N5 p5 X
P3 U1 a; a& V+ a) N' f4 C
9 r& k8 ~; e( b) k: Q" ~ i; m6 B, Y- n/ F
- @* q5 |9 p( h# m8 q6 \3 U' h7 G
" w* Z" z K' P; q! V9 \% w6 f# H- D9 Y
m0 w/ Z& i3 K) J% h
& _2 Q; |8 T5 C' U7 G1 P9 X4 i" ?6 \5 ^, a
/*---------------- MENUBAR HOOKUP HELP Example -------------------
6 {7 J# y' w' M5 }% X" F! r( `To launch this dialog from a Unigraphics menubar, you must follow 2 v% [; ?$ B4 |6 \# s4 k
the steps below.* B+ Z& e. }9 }0 ~" E( B$ ]
1) Add the following lines to your MenuScript file in order to ( E9 m. e/ ?0 E3 h: ]( I2 b3 Z# k
associate a menu bar button with your dialog. In this
# b O( [/ @7 |7 m5 _ example, a cascade menu will be created and will be
5 Y2 x* H5 G& Z& O, ~ located just before the Help button on the main menubar. 5 f2 v1 M6 v8 {) z# K+ `
The button, ZGEAR_BTN is set up to launch your dialog and : h+ J8 \6 Z/ z" ^( N7 {* F" y, \
will be positioned as the first button on your pulldown menu./ ~* a: g/ R- ^6 K$ F: R
If you wish to add the button to an existing cascade, simply 8 D( z6 x' b* X
add the 3 lines between MENU LAUNCH_CASCADE and END_OF_MENU
' N* G. q; v, D+ F to your menuscript file. 1 \4 d9 _, _8 c: O7 x6 I" G
) d5 t. y, o) W+ a& Z* I m: ^" D% m) ]
The MenuScript file requires an extension of ".men".& B9 y, D$ b' [# d' C' [
Make sure that you add the extension to the file and place * }% X" d8 ?, a$ Y ]2 m) M
the file in your startup directory:% ^! d B1 i% q4 b g7 o/ g. X
$UGII_USER_DIR/startup or
* l4 F+ F" t* g9 p: q) n $UGII_SITE_DIR/startup or - g& P( G5 p% M
$UGII_VENDOR_DIR/startup directory
9 u+ a9 x( H( y- H
& p' ^! H. \1 ~& R- L
0 m6 d* s$ t f! q2 [2 R7 B5 u Move the contents between the dashed lines to your Menuscript file.
8 D, r. k) S2 Q; j" q( n4 j0 D! ----------------------------------------------------------------
1 A, A& ?0 |( V VERSION 120
$ m0 h+ x! A" w0 y& B# S, D
?' w/ ~# g' a5 R. e! a& b- A EDIT UG_GATEWAY_MAIN_MENUBAR( A6 w A0 }8 L- Z3 o
6 {/ c. J# ?* N. j( C0 M' f! U2 ~ BEFORE UG_HELP' {; {# E. B9 t
CASCADE_BUTTON UISTYLER_DLG_CASCADE_BTN
) |" N! W5 v9 H5 b7 m LABEL Dialog Launcher* C: X0 e" C# r
END_OF_BEFORE
, C3 x- C7 Z4 I8 O% V/ I2 ^9 n" o* N
5 Q" D( V" r2 g' H MENU UISTYLER_DLG_CASCADE_BTN; E: p Y# _9 N L Q/ r/ G' e1 g
BUTTON ZGEAR_BTN
. f' K) J- P1 M" L' M LABEL Display ZGEAR dialog
& [, E7 ~4 V" ^0 n$ N" m/ | ACTIONS ZGEAR.dlg. p. p* ~+ ~' j* O* V( L
END_OF_MENU
' V+ ~; z- g1 Y% r: K' e+ f! ---------------------------------------------------------------
& U" l. E" x# J/ Z9 ]; ]
, Y' s0 R7 {$ ]7 l) u, d9 `& v% G# X/ ~1 ^0 a+ j
2) Issue a call to the function, UF_MB_add_styler_actions from the ufsta
' F1 h& D3 e4 j/ t& @, M% c user exit as shown below. To use this call, remove the conditional ) w. L; q+ B4 h& g! }9 i& t
definitions: #ifdef MENUBAR_COMMENTED_OUT ) o p: ?- `; J/ A s5 w B
#endif MENUBAR_COMMENTED_OUT 1 a: W9 E$ C% x% f' `
! R' K; \6 Y( }9 S$ v The static structure, actions, will allow you to associate ALL of your% w4 t) i0 d) e' o4 y
dialogs and callback functions to the menubar at once. For example, if you % C# | ?% L( k+ a6 H
wish to have 10 dialogs associated to 10 different buttons on the menubar,
6 k6 R4 `6 l% o2 e) P9 z' Y' N( Z9 y% X you may enter each dialog and callback list into the actions structure. Make
' J0 j# L% A- z6 T" j, s sure that you have created a corresponding button in your MenuScript file., @/ N1 R% A `+ A& a
; }2 \5 q, Z0 n3 F" N You may also have separate shared libraries, each with a ufsta user exit
' A2 e! z5 w& ]6 @& ?6 Y) p for each individual dialog., k6 S3 x" d) C5 M* k
6 V/ W) r; p; p6 X
# \, W4 Z# A c2 Y5 B9 ?4 D3) Place your compiled and linked ufsta user function in % W1 u, z/ O. z# L0 E5 G
$UGII_USER_DIR/startup or s+ v# L* I1 h3 `( Z
$UGII_SITE_DIR/startup or
5 f6 d3 {* L/ q- J" n& ]1 { $UGII_VENDOR_DIR/startup directory. 6 t' D! U8 u$ } l( h7 v
3 N; G8 R( k0 F* P NOTE: The user function must contain the proper extension .so, .sl or .dll 2 e2 _% b3 ?8 z
to make ensure that it is recognized by the MenuScript. If it does not' o$ e4 @5 J$ U% a
have the proper extension, it will NOT be recognized by MenuScript.
; k, s F$ X2 I) r3 H, s6 ` K3 P& J0 [
# M% m$ W! L& L2 l$ d! U V3 p
The action name you have provided in your MenuScript must correspond to- s! B: c' i. O/ O* E
to the dialog name provided in the action structure. This MUST match inorder2 P' e- s( h) ]$ D
to bind your dlg file to your MenuScript button.
- }: X% x: y, x& Y$ A
8 M) j# s) W% y0 }3 a) X3 B* Z9 |) a0 Q9 ]. W" f5 l
4) Copy your UIStyler dialog file to the proper directory.
4 f7 K; F6 H* Y, r# I2 _/ F1 V$ U All dialog files (.dlg) must be located in * w8 \% Q5 r/ C) A$ B
$UGII_USER_DIR/application or
8 s" v9 d( m: Q; }6 q" w0 Y4 N8 N $UGII_SITE_DIR/application or 1 x8 Y8 D x$ B7 t* U& f3 i4 h
$UGII_VENDOR_DIR/application directory% @& O9 ?$ r' W: ~9 A' w8 h# b
, K& v: |: y3 J$ |; U* d7 G \( Z/ E( I P2 `) l7 {$ P G
+ f `. F$ V+ Z% ]4 k
7 }; W# Z# ^6 ^( M; T------------------------------------------------------------*/7 U/ U) J8 K' p D3 T3 }
//#ifdef MENUBAR_COMMENTED_OUT" R v# s+ ~) {7 g3 Y4 _( U9 @, W
extern void ufsta (char *param, int *retcode, int rlen)
" |/ Y6 @, P+ f{
6 V5 b" t6 v: q8 a, q int error_code;9 ^6 R" T% K6 I* D8 t4 F8 |
3 k+ O4 j1 R3 K8 W: w) ~ if ( (UF_initialize()) != 0) M4 O" \6 O) V$ ^( G* m4 s
return;
2 R9 u$ S8 u8 A7 x" ] 5 J% [8 C# i; n. l
if ( (error_code = UF_MB_add_styler_actions ( actions ) ) != 0 )
3 n( K" `; z. M( W' D2 B: K {
8 m0 Z( \, H( N6 p$ M5 j. x- Y1 } char fail_message[133];( o6 I+ |+ Y( O. i6 `% `
E# C9 `" x! V8 ~
UF_get_fail_message(error_code, fail_message);
6 Y3 G. |2 G; {+ Y, c* p0 s+ @; h printf ( "%s\n", fail_message );
; N7 G# y A: M& h( S3 k& A3 u }: s6 Q- z' z+ F. F$ [6 D
' `1 X# \. h1 m. r; g8 x, j
UF_terminate(); # T1 H5 r0 E/ q" F
return;3 r4 X& N! G- X, X
}4 R0 ?4 F! Y# M1 L* ]& \! M B: r
//#endif /*MENUBAR_COMMENTED_OUT*/3 Z* }8 c8 J3 F" w) c
+ o$ t$ N3 E' K3 k! g' J' y% Y4 P- ~7 t, y0 e# w
- [/ I9 J) Y4 `5 U6 c. D! J0 \5 X3 R5 H( h6 z
0 c y- \) |! G! ^/*-------DIALOG CREATION FROM A CALLBACK HELP Example ----------* }/ F9 e" l- D: e" v7 ]/ e9 c
If you wish to have this dialog displayed from the callback of $ y4 E0 Z/ s$ Y
another UIStyler dialog, you should:
4 k! J, k, v/ u; P' V6 T8 l
3 O9 P6 Q: K8 d5 N1) Make sure that the callback of your UIStyler dialog is
, {, S& W' [% X2 y% m2 o* g designated as a dialog building callback. 4 ~% Y/ S3 ], ?
2) Remove the conditional definitions:
+ l! _6 ^) F0 B% w' o9 Q4 W4 D8 q) S #ifdef DISPLAY_FROM_CALLBACK
* _& H; ^' x& e9 e #endif DISPLAY_FROM_CALLBACK& M# q9 D) r7 o9 G3 Y! T
3) Your callback should issue a call to this function.. R4 y# L8 Z& \7 U e, [
4) You should also add the funcitonal prototype to your header file 5 W& g1 A: Q/ F: e. x: n
(ZGEAR.h) and ensure that the file is properly included.
+ [) M4 N$ a5 z( U, l9 t" w3 i1 N) D
All dialog files must be located in
0 M4 J5 z7 U; [$ q6 P2 I; Y6 \ $UGII_USER_DIR/application or ; z. j6 U2 W5 L4 o
$UGII_SITE_DIR/application or & ]6 p+ d* j" l- l- ~) v
$UGII_VENDOR_DIR/application directory
8 |- O+ C2 ]( @& \! G' ]--------------------------------------------------------------*/
& J) g% o) Q/ ]; U* g: T6 x* |# I
5 N, @$ t; k/ \ _% z9 Q- |
, F, @8 r- l0 i: y8 j5 ]#ifdef DISPLAY_FROM_CALLBACK, }, P! _9 y; |5 S8 r& ~% A0 r6 o
extern int <enter the name of your function> ( int *response )
9 o: D, i+ k0 F9 A{1 K8 U8 g t2 }/ y4 o. P, {
int error_code = 0;8 |2 o% s$ F5 _0 m. v, v$ i2 N
& q& |/ T- R) r! V if ( ( error_code = UF_initialize() ) != 0 )
& J3 R! D) Q* j- [0 G- B return (0) ;, ~& u% E1 g9 Y2 X) F
1 v- M& n+ N+ S& e1 { if ( ( error_code = UF_STYLER_create_dialog ( "ZGEAR.dlg",6 O* e0 j7 _8 [2 [$ R3 ^1 {
ZGEAR_cbs, /* Callbacks from dialog */; m! H8 n& t# K x) C, c+ [
ZGEAR_CB_COUNT, /* number of callbacks*/
8 }/ v; u4 F i# ~3 ~) u9 B NULL, /* This is your client data */
3 L9 F7 L! I/ d7 z8 N response ) ) != 0 ) ; J8 h/ s3 g. y8 f
{0 f: }& p' Z! `
char fail_message[133];9 }0 }5 Z O& M$ T: N
/ x$ K5 E$ I6 W
/* Get the user function fail message based on the fail code.*/
( e) _& T M8 z8 _, L( E1 r9 b UF_get_fail_message(error_code, fail_message);$ d! _+ A! \$ `' r' |) I% [
UF_UI_set_status (fail_message);9 c4 @3 ]0 M& D" G; ^- [" z
printf ( "%s\n", fail_message ); , w" T( b0 R) ^6 y+ r: x3 b+ p! j8 _
}
3 S8 Q9 c' |+ X8 D: Z7 G' x
3 E" h6 l# s" ^# p, F" O+ ^1 j" d) L2 s( N6 O3 h
UF_terminate(); - F6 Y/ W- n: C Q+ p
return (error_code);6 c) K# ] m4 X' x7 E/ ?3 i* x) z
}* `. Q% g% F: a2 [# Z
#endif /* DISPLAY_FROM_CALLBACK */ . V: g, m* ^0 [8 ^
* e5 ^+ ]4 Q! O! ]. i) `" y* Z% {9 u6 P# f) c+ [% c# J( S
+ y. b0 u) d" r. x1 Z& y Y' {
, E/ p- G7 j( `! k/*-------DIALOG CREATION FROM A USER EXIT HELP Example --------
/ [% \+ l8 p- T- t. mTo create this dialog from a user exit, you must invoke a * q$ t* r* A( I5 {: {
call to the NX Open API, UF_STYLER_create_dialog. An example 7 p; a- p+ c8 G2 X: I* _
is shown below. 8 T" ^ ]9 z" M; W2 ^' O; Q3 `8 e. T
% k ]. y4 s9 z/ ]% w5 }! B QAll dialog files must be located in / F# `, B/ J. t1 k# d* f
$UGII_USER_DIR/application or 1 I8 K* J; y$ O% ~2 c7 r' k, ]
$UGII_SITE_DIR/application or
, [- H7 \0 l' I! e: ^/ X $UGII_VENDOR_DIR/application directory5 B9 j- C) g/ E# a
4 f( n9 m) B0 P% S( i) r1 \) W1) Remove the conditional definitions:
7 w I" h# \- @ #ifdef DISPLAY_FROM_USER_EXIT 2 a# a6 J. a& f' j$ r
#endif DISPLAY_FROM_USER_EXIT 2 R8 `- G6 i" D
2) Add a user exit to the function name below, for example, ufusr.
% c% I7 G/ ], T1 @' Y7 ^! V& D3) Consider how your shared library will be unloaded. Take a look
# v! |' X2 a+ j3 n3 C' q) A2 G at the generated function ufusr_ask_unload.
9 i) c' i7 m( T, R$ ?$ Y( r q--------------------------------------------------------------*/
# e6 \9 a0 c& k4 h7 T# |8 P& v0 V$ S, F ~: m" f+ ~; i& b
#ifdef DISPLAY_FROM_USER_EXIT
5 f1 B) u# l" r! x- Xextern void <enter a valid user exit here> (char *param, int *retcode, int rlen)
8 n! l t5 }5 J6 G0 k* A{" v n! H0 @8 b; q4 a2 v+ l$ U2 @- w; b
int response = 0;% W$ W9 H$ X$ A# z6 v
int error_code = 0;# a. n f5 b# f
3 x3 F/ `/ t) A$ @2 u; ]6 V
if ( ( UF_initialize() ) != 0 ) ( R/ B+ c# O! {4 s0 H& |
return;
" E8 M# v$ R/ }9 O1 W3 m4 T
, {* g9 x8 ~/ T1 h- S/ f if ( ( error_code = UF_STYLER_create_dialog ( "ZGEAR.dlg",
- a4 G5 { t: T& _: k ZGEAR_cbs, /* Callbacks from dialog */
& h* h' H! s0 b7 o- D) {9 | K: H ZGEAR_CB_COUNT, /* number of callbacks*/% u8 l# o9 R# n+ }9 B' d
NULL, /* This is your client data */+ s& W; T; ~. H7 N' Q9 @
&response ) ) != 0 ) 9 {) u) q0 s0 j
{
. F7 l, U" s- U# A. e+ }( v6 L char fail_message[133];
- m# O# t2 H5 ^
5 }% D7 ]0 c5 ^( A% I4 z /* Get the user function fail message based on the fail code.*/9 n' @8 v$ M& Z3 e( t
UF_get_fail_message(error_code, fail_message);
) b) A6 q7 y8 [1 D UF_UI_set_status (fail_message);( N9 S1 E, ~% I; N, r5 S4 }
printf ( "%s\n", fail_message );
- b7 c7 j- R" l, \$ Q }
* W5 E* h ^2 `8 }) p' i& g0 P+ W f1 ]6 ]
( V' @& T) {* Y4 F
UF_terminate();
4 q" [# p5 I3 w8 b# Y return;
8 {2 B0 i' g; M6 U" p5 p8 I}5 a! m. ~ q0 L* M/ M
+ r1 y O( k/ x( `$ @6 R# A8 ~$ [8 b+ T" b3 m$ h2 l" h! b2 V
0 `8 N3 c7 S: P% q4 y2 U( H
) y! ^& U/ `6 r% k5 T/*--------------------------------------------------------------------------3 O1 z( \2 G% _# y; j. j' S
This function specifies how a shared image is unloaded from memory
: ?' A% r& H( awithin Unigraphics. This function gives you the capability to unload an ' E2 y# p% H- l! K! A3 F& [
internal NX Open application or user exit from Unigraphics. You can / J. w2 F0 T2 W5 v
specify any one of the three constants as a return value to determine
% j; D7 {. u6 ~* ?# T7 K$ D+ g6 I8 zthe type of unload to perform: immediately after user function
% `( n( ^( T. @execution, via an unload selection dialog, or when Unigraphics terminates
4 \. `7 C5 k: r) K0 B' nterminates. If you choose UF_UNLOAD_SEL_DIALOG, then you have the * W" d* h" S& `3 d& {, R
option to unload your image by selecting File->Utilities->Unload Shared 1 B& |( Y& s4 n
Image.
% ]$ o/ `$ z0 V7 V# ~3 E
7 i8 a# j$ j, _" {0 rNOTE: A program which associates NX Open applications with the menubar
6 f( m4 O+ E+ v# e F+ yMUST NOT use this option since it will UNLOAD your NX Open application image' E1 v8 i7 N' t# b4 o' I. y4 d4 X
--------# b+ I; g# K) l$ x& ]: Q
from the menubar.
5 k5 v- X3 {' A+ z--------------------------------------------------------------------------*/
- C5 G1 f! u( _7 L( n) B ^: f* Z9 _/ [1 x: d, k
extern int ufusr_ask_unload (void)
7 G L4 g$ ~, T; p7 b# t3 Z. H2 D# y{2 X6 z/ B% g) {$ }1 X
/* unload immediately after application exits*/% v6 m! V/ n1 s
return ( UF_UNLOAD_IMMEDIATELY );
+ P1 h$ i) c0 S) Y- D
. n0 a& `: w+ t3 M& d /*via the unload selection dialog... */6 f# n8 g+ w& c9 n1 P% A A( B* I
/*return ( UF_UNLOAD_SEL_DIALOG ); */8 t( I6 l$ [8 _ K2 |
/*when UG terminates... */6 s& B9 g4 C. K1 T5 p
/*return ( UF_UNLOAD_UG_TERMINATE ); */
1 M# A8 Y# b8 V6 {}
! A; H5 @7 \( {* v, o) A+ [0 l5 T! \& T! {
* R0 Q2 q, F9 y7 X
" c, S* V3 }# C2 ?. W# F) Z# b$ E
/*--------------------------------------------------------------------------
; M+ @) Q5 W1 o8 a# cYou have the option of coding the cleanup routine to perform any housekeeping
: m' y6 s* a' f+ O7 n8 T6 ychores that may need to be performed. If you code the cleanup routine, it is
. U% N! \4 N2 ^# t/ R# `automatically called by Unigraphics.
9 t6 S0 A4 s1 N& I" ?; E--------------------------------------------------------------------------*/
. e& ?/ \7 @: c y/ xextern void ufusr_cleanup (void)1 x3 Y+ Z0 k% s* g
{. I/ k# K' {, V
return;6 s6 |% z* f) V/ C
}7 n5 n8 N' m5 r$ x8 y% @; K, a% R
#endif /* DISPLAY_FROM_USER_EXIT */ - ]5 n: G$ I ?2 X& C+ Z% a$ A2 \3 C
2 t& j, \0 b. y$ s: |0 K+ R8 N- O( C- G9 S
4 _0 U+ K8 E' r. D6 ]3 U. [8 b) Z
9 f5 Q$ j' \% i* L3 ^
4 R" G8 h. l B) o
3 ]# f) X6 r# X- S* v) ~/*-------------------------------------------------------------------------*/4 [3 r- ]0 E5 m
/*---------------------- UIStyler Callback Functions ----------------------*/
4 t6 g) p1 W( J" K+ Z( J+ u/*-------------------------------------------------------------------------*/
- K! P1 F# J; q: O: A( ^/ C
- i: y8 p) g( Y( o6 B0 _int ZGEAR_constructor ( int dialog_id,7 D: Q E- p, {) N: Q# R
void * client_data,
q+ B6 H8 v. T UF_STYLER_item_value_type_p_t callback_data)# W8 t, P8 {4 k. F2 F
{
. B. ]. a. ^6 B6 {$ _ /* Make sure User Function is available. */
% H* }4 _ R8 `5 Z if ( UF_initialize() != 0)
J) U; q& W3 X0 m* v' I return ( UF_UI_CB_CONTINUE_DIALOG );8 {, @. w( s( N& O
6 e; U S, ^! m; R3 g1 V( }; h /* ---- Enter your callback code here ----- *// E1 N+ c, g# `/ e* b" w, H
char dir[100];
8 a$ Q c. c5 w4 U! s: f const char env[255]="UGII_USER_DIR";
) P9 l% N% L' p7 ~2 `" _' ^ char *basedir=NULL;6 r' I7 Y+ `1 X3 h4 k# A
tag_t part;
) c- y2 x& s% X7 _ L- y UF_PART_load_status_t error_status;
' H2 A1 ^5 j( s) l3 Z1 I basedir=getenv(env);& r) g3 S6 f5 y/ b
6 h5 m) o+ L- R) d% o* e
strcpy(dir,basedir);+ \# u/ z9 G8 ?
strcat(dir,"\\part\\ZGEAR_part.prt");: D* n; u# K( A* r, k( C- W3 n- t4 ~
9 x5 w# i* S6 D: x( J if(UF_PART_open(dir,&part,&error_status)!=0)) N5 G" a1 [5 V
{* g" Q2 @! u% P5 D. F. @. N
UF_free_string_array(error_status.n_parts,error_status.file_names);
' g$ V4 l( N7 C/ X# S2 ` UF_free(error_status.statuses);% S3 v: n- x# R0 B5 c6 _
return(UF_UI_CB_CONTINUE_DIALOG);
% i0 }) m6 A7 A }8 ? b1 G- H- f2 G( @
UF_free_string_array(error_status.n_parts,error_status.file_names);$ x/ I0 x& X) C' ]
UF_free(error_status.statuses);
# X+ K# x) R9 Z7 J8 c! M& |# K3 W$ [/ q
double arExpValue[5];
2 H$ w- z. n1 A" U" C6 E$ N
6 c4 T" x' S+ v; q UF_MODL_eval_exp("Z",&arExpValue[0]);
" H) K! ^ b7 i! a4 X4 ~, ?; Q UF_MODL_eval_exp("MN",&arExpValue[1]);
& [# ]0 j. U4 m UF_MODL_eval_exp("YLJ",&arExpValue[2]);9 _# J, t1 I& _0 d
UF_MODL_eval_exp("B",&arExpValue[3]);
( Y) u0 }4 d& u& r5 E
- r( Q. y$ T; f" v) Q+ C; K
6 N% E3 j: D2 m( {- S7 p( v UF_STYLER_item_value_type_t data_set;
8 F; b8 V% n+ X9 Z/ U& G9 }/ O3 F8 n3 s- o5 ]0 B' V d8 e$ [
data_set.item_attr=UF_STYLER_VALUE;3 L9 K/ Q' P6 |6 X4 e
data_set.item_id=ZGEAR_Z;
" W; S3 j4 C. x% d2 R8 h data_set.value.real=arExpValue[0]*2;" k5 J# S- T2 ]# ~. [ r& I6 U1 I" e
UF_STYLER_set_value(dialog_id,&data_set);$ k& i$ B7 I6 D- a
UF_STYLER_free_value(&data_set);
; _6 B r1 i2 V% X/ d$ r! t3 M" [9 ]+ ~
data_set.item_attr=UF_STYLER_VALUE;
- Q5 c: l: {9 P3 U data_set.item_id=ZGEAR_MN;
9 @/ k6 G* S. i data_set.value.real=arExpValue[1];
4 S7 s5 ?& m0 n! d* o& u UF_STYLER_set_value(dialog_id,&data_set);
$ a3 c* R M4 v6 F UF_STYLER_free_value(&data_set);
5 j1 ~8 V! M0 ~, e5 N9 T7 j$ o1 k* C: ^4 Y9 T
data_set.item_attr=UF_STYLER_VALUE;2 {) ~1 i+ w$ i# }* `8 _: b
data_set.item_id=ZGEAR_YLJ;' D% {5 x, w2 _( x
data_set.value.real=arExpValue[2];1 C7 J7 \! i$ o" r s
UF_STYLER_set_value(dialog_id,&data_set);
6 Z% d" o0 b4 b UF_STYLER_free_value(&data_set);
$ C* }# i3 `0 V3 N
) O& X% |' v; Z. G data_set.item_attr=UF_STYLER_VALUE;3 M1 n( _# x3 y, A4 F1 D6 U, k5 |, N
data_set.item_id=ZGEAR_B;
$ q% U& [1 D2 X# ?( W3 k data_set.value.integer=arExpValue[3];
+ A" U% S0 _6 `7 Q UF_STYLER_set_value(dialog_id,&data_set);
' X4 L7 B6 g% i+ q UF_STYLER_free_value(&data_set);
+ \1 _# l8 Z3 a5 ]% m5 i9 s7 T
! a5 `, \9 k1 y+ Y6 V: o UF_terminate ();
+ L* a' d$ V- A+ @ q) U/ B4 y
) ?. x0 a3 Q, b1 d /* Callback acknowledged, do not terminate dialog */1 _. j9 u: \: g& p
return (UF_UI_CB_CONTINUE_DIALOG);
7 X. m* ^* w+ ^$ N: f d2 a7 U /* A return value of UF_UI_CB_EXIT_DIALOG will not be accepted */. j) S1 l4 G' d# L2 W6 d6 [
/* for this callback type. You must continue dialog construction.*/, k9 o! Y* c# `% Y
5 V5 @+ u: R4 r$ {: }% G2 ~; |7 o U
}
* V' X0 m% k, M
! ^1 K+ g, T \8 W3 Z' X( T, P" a! l0 M7 F7 m9 ~
/* -------------------------------------------------------------------------
9 D; u3 X( ~! i- O8 L6 |4 ` * Callback Name: SPLINE_destructor
7 ?& U' }8 _2 X6 r. k3 }% u * This is a callback function associated with an action taken from a) l6 m7 z" ?, E, g
* UIStyler object. . [- ]0 Y" ?5 A4 {" H& o9 g! X
*
. L% n% Y( F9 l0 i. H7 J * Input: dialog_id - The dialog id indicate which dialog this callback6 w! A6 j* N _, E& M
* is associated with. The dialog id is a dynamic,
% i: ~/ o. `# J! \2 o6 g * unique id and should not be stored. It is* [5 h3 \: s6 c R5 W7 t. ~# F
* strictly for the use in the NX Open API:& X# X8 `& V. S: ^" s
* UF_STYLER_ask_value(s)
3 x2 S' U* E C# [$ p8 t6 G * UF_STYLER_set_value . A0 x+ p3 E' P K. c# q) _
* client_data - Client data is user defined data associated6 Q0 J- B. `$ m6 P. g. R) r
* with your dialog. Client data may be bound9 l6 i7 _8 j7 p, d5 \" i$ A
* to your dialog with UF_MB_add_styler_actions
: _4 `) c6 D% g3 k' \ * or UF_STYLER_create_dialog. . ^. V0 Q* d2 j, S
* callback_data - This structure pointer contains information
0 U2 H, U/ `8 r' y& O9 t0 O7 s * specific to the UIStyler Object type that
/ z! x4 g5 E" B. @" O * invoked this callback and the callback type.* H/ ^$ S) W' K$ n2 F: B; x
* -----------------------------------------------------------------------*/$ P* g9 a+ K; f" R5 {2 ]
int ZGEAR_destructor ( int dialog_id,
1 t, n0 ?# k: ~$ U. A void * client_data,0 C3 z( _# I! G( s2 C
UF_STYLER_item_value_type_p_t callback_data)+ A( ?" d+ L* e
{0 r6 u) y+ \6 P/ t
/* Make sure User Function is available. */ ' {" k+ A& T5 Q9 Z) C
if ( UF_initialize() != 0)
( W% O. o8 e! s8 I0 d/ t return ( UF_UI_CB_CONTINUE_DIALOG );
+ x9 r5 ^# ?8 V6 v! x
; T. y) ]' _% @, t0 n# r /* ---- Enter your callback code here ----- */, X% }/ \( u+ X8 F
8 P! A! U% Z# r. q; p1 e: `1 |. E UF_terminate ();
5 F1 h8 v# \% q( y, V% A2 |3 H- i- O6 {) _+ A; j. A
/* Callback acknowledged, do not terminate dialog. */# o9 E! m2 ?% f* z, I
/* A return value of UF_UI_CB_EXIT_DIALOG will not be accepted */! e# M& u9 ?! A9 ]' z- L% o5 P" V0 A
/* for this callback type. You must continue dialog destruction*/: b+ \' f0 u3 S! @/ N n
return (UF_UI_CB_CONTINUE_DIALOG);
, u z, g" p5 j2 p
+ j& a% n0 m' ~* t% Z. X9 x}
+ t- ]7 I1 V& s/ z6 ~
0 [% g: H- `) l: a3 R% n& r; q9 D* u" c
/* -------------------------------------------------------------------------
" l, `$ I$ `8 ^ * Callback Name: SPLINE_ok0 a9 Q$ w$ T9 h; v3 y- Q
* This is a callback function associated with an action taken from a. `! G6 o' ?+ j9 |) [- }3 U) e8 @0 y
* UIStyler object.
v+ V( M' H; r* W *4 D2 D, U/ L" @- Z* O9 U
* Input: dialog_id - The dialog id indicate which dialog this callback
4 @' [- x! d1 m0 m: c" B * is associated with. The dialog id is a dynamic,
, K! y+ {( O* U$ a5 [ * unique id and should not be stored. It is: j/ U0 ?4 R6 A! R+ E
* strictly for the use in the NX Open API:
- ^* D; K1 E7 N; [1 m+ s+ V * UF_STYLER_ask_value(s) 1 L' a! M5 t0 H: p" e
* UF_STYLER_set_value ' A/ u4 j8 L0 F# U
* client_data - Client data is user defined data associated. F8 |# ^, { {) T! N$ r* I- z
* with your dialog. Client data may be bound
0 l4 ?9 s& [2 Y2 n+ ~/ j: w# y& k * to your dialog with UF_MB_add_styler_actions( q; ^6 q# `+ z w
* or UF_STYLER_create_dialog.
/ H( ^! z2 `( T/ A * callback_data - This structure pointer contains information
, a$ l* ~% ?" | * specific to the UIStyler Object type that
. @. v+ n( L) J- L, m * invoked this callback and the callback type.
& X& l5 I7 Q1 ]: J * -----------------------------------------------------------------------*/. l3 P8 P4 Q7 i$ n8 h4 Y
int ZGEAR_ok ( int dialog_id,, Z" u- R. j8 @+ |
void * client_data,' m% l- Q( w7 N/ J9 {
UF_STYLER_item_value_type_p_t callback_data)$ g: W1 s% L6 H/ Z+ ^
{
* C C# M7 b! }: d. K. Y% T /* Make sure User Function is available. */
9 j* Q% X0 M- h7 Z8 V1 g6 ?) V if ( UF_initialize() != 0)
% T8 I% j! j9 B1 R+ N: J return ( UF_UI_CB_CONTINUE_DIALOG );
8 h4 a# v% S6 l3 Y; d' d3 f" @$ g9 ]% T/ A
/* ---- Enter your callback code here ----- */1 m, h x, p0 @) q, D
int Z;0 p' `& m% Y" V) ^, m& Y
double MN;( X; N1 s% m8 z5 u5 P2 {
double YLJ;1 t! w3 d8 K- h/ [( ?7 d
double B;+ n1 @ u- g" \4 C# I) \) u
* B: U2 v- @0 f* J
9 _5 e4 e0 _; w' O
char exps_string[5][20];
9 l2 s0 M$ `+ \; Q) b( {; v6 I9 a9 q+ u
UF_STYLER_item_value_type_t data[5];
! p5 I4 |1 L5 G4 i& { w/ b o* `. K; V% C ? z" W- V* g
data[0].item_attr=UF_STYLER_VALUE;
$ i+ ?- ?4 m {9 \, Y. @# l: K: U, z" O data[0].item_id=ZGEAR_Z;
! [0 V2 I* Y/ W5 F UF_STYLER_ask_value(dialog_id,&data[0]);9 K# S- K& \4 o0 F, N3 ^; W/ D/ Z
5 K) T& P; I% U' M
data[1].item_attr=UF_STYLER_VALUE;9 J5 l V! e9 C) k/ L% l- M
data[1].item_id=ZGEAR_MN;
2 z( E; e, B; E B4 i UF_STYLER_ask_value(dialog_id,&data[1]);6 A. P$ Y& j5 m1 H4 R
; T+ o+ k3 t: F8 O+ w4 P data[2].item_attr=UF_STYLER_VALUE;4 G# j# q, P5 r/ A' Q
data[2].item_id=ZGEAR_YLJ;& Y/ [# q! Y, f# { P, [8 X
UF_STYLER_ask_value(dialog_id,&data[2]);
& P4 _( e6 ]8 z/ y, J/ ?9 b/ a9 W' C& F" T& B# z7 {
data[3].item_attr=UF_STYLER_VALUE;6 h1 V6 k- R/ E- J: r& J
data[3].item_id=ZGEAR_B;
2 s3 L( X% r/ ^. c8 a! c. R# O UF_STYLER_ask_value(dialog_id,&data[3]);
. B6 H; M8 J' l5 c, w
. y0 J8 {/ g. ]6 h% p* L! ~
2 A1 K( w4 F W! Q s E4 H1 F9 b, U& O
Z=data[0].value.real;' j. W8 M6 R1 ~9 }4 p8 L0 [) m; `3 ?
MN=data[1].value.real;
# e6 h* _. \4 i1 d# v1 G YLJ=data[2].value.real;
2 X- D7 I/ o9 r, k a+ |1 W1 w B=data[3].value.integer;
8 X: S5 o6 O1 w* p
0 \9 _( h4 {1 P3 t# q$ t8 c $ M5 G4 [5 N2 S( J0 w# d
for(int i=0;i<5;i++)
1 k: N) t+ U9 {* `& i) e( Q {
6 {4 P7 Q- k: p# Q+ j& B# f$ L UF_STYLER_free_value(&data[i]);: g0 H, ]% O6 U- g- ^3 v' Q% B
}
/ a' Z3 j+ }) u9 M- @
1 y; z7 o# X; X2 R. D if(Z==0||MN==0||YLJ==0||B==0)2 {) ?1 Y: T, P e8 x
{$ u! X# m7 c3 l# Z
uc1601("对话框中的数值不能为零!",1);$ z* k, E4 c: }( F3 p- S
return (UF_UI_CB_CONTINUE_DIALOG);
8 J2 ]; E0 [1 M0 |# Y) m$ ] }
" j0 J8 D$ C6 I" ]! d ! \9 T3 V7 O& L
/ ^& g1 t1 P4 U! S4 e* t
//修改表达式的值/ |6 V9 ~6 {8 \4 q) u) g" [: Q
sprintf(exps_string[0],"Z=%D",Z);! s: ]4 ^9 G5 r, u
sprintf(exps_string[1],"MN=%f",MN);
5 D. A& H/ G0 p. h7 ~( M; S9 V' r/ \ sprintf(exps_string[2],"YLJ=%f",YLJ);
( @. i, ?8 k7 \0 e9 U& k: { sprintf(exps_string[3],"B=%F",B);' L1 }. L5 k7 \/ C: `+ `% i2 Q" M
/ h7 W5 }% `$ A$ Y0 o$ Z
5 n% b" H; c$ [- j4 _( r& O$ L //更新模型! x2 F; W+ l% T' y4 ^- {, q
for(int j=0;j<4;j++)
[+ v2 }% T3 b v7 V1 A: ]( ~ {
; o5 O. P/ ~% o: X- C UF_MODL_edit_exp(exps_string[j]);
* h) q; m9 q1 Y/ J2 N UF_MODL_update();6 B+ g5 }& t; H
}
2 }) G7 P* p) c$ v `( v
: p+ Y3 J7 x8 v: t, \7 P# u UF_terminate ();! `) p1 y& r5 M$ r3 T0 ?$ e( b( F# M
" ~/ ?6 x- d# ~' {% i
/* Callback acknowledged, terminate dialog */
7 P3 `, q# @* {0 I9 S% f4 t1 t0 z /* It is STRONGLY recommended that you exit your */
6 |$ `, u5 Q) n /* callback with UF_UI_CB_EXIT_DIALOG in a ok callback.*/9 M. g% y$ a! M9 a$ e3 _+ m
/* return ( UF_UI_CB_EXIT_DIALOG ); */+ W }. ?( M O% ~
return (UF_UI_CB_CONTINUE_DIALOG); 7 Y! X- @% e# |% ]% u, p8 \
: d S0 `2 R7 H: u' J; J4 o
}
8 v# \' B! G, b+ {8 w6 x
; t. o% q* x, x& C4 O$ A8 m2 [" m7 y1 K$ ~3 j2 r+ i7 }
/* -------------------------------------------------------------------------
/ m2 ~0 J. E4 {: R * Callback Name: SPLINE_cancel
$ R4 ]- h5 |8 c* [- {& B3 s1 b * This is a callback function associated with an action taken from a4 R1 S* K$ Z( U" t; K
* UIStyler object. / G) i* I/ \" f, j0 B; L
*5 n7 F+ o9 K% Y" f/ u4 n/ c% I
* Input: dialog_id - The dialog id indicate which dialog this callback/ X* F( B( S2 U6 c! V& X
* is associated with. The dialog id is a dynamic,
1 m% G/ J2 N* S$ z0 [& B) J+ L * unique id and should not be stored. It is! n* l; V8 C) Y3 X' p
* strictly for the use in the NX Open API:
' h& P3 D/ C% S8 d3 G" _+ Y * UF_STYLER_ask_value(s)
& c* A6 j! }) Z3 j! L: k * UF_STYLER_set_value 7 g% Y! h% ~, o( E
* client_data - Client data is user defined data associated
7 K* u4 Q. h! H R( ?" B * with your dialog. Client data may be bound
& ]0 Y; _7 S/ _5 Z! E( T * to your dialog with UF_MB_add_styler_actions
! D; W% [+ u. ]! L/ v * or UF_STYLER_create_dialog. 9 F3 `1 d9 S4 N# A9 b
* callback_data - This structure pointer contains information
7 O% C! j P- l! H" e4 k * specific to the UIStyler Object type that
0 D! ~: Y6 [8 D, j* P * invoked this callback and the callback type.
9 y& r7 y% c# n& V * -----------------------------------------------------------------------*/
7 E7 K& o# L4 U8 _0 P0 T& bint SPLINE_cancel ( int dialog_id,
8 o i* h X. F4 ? void * client_data,$ g: ? t9 m6 {* H2 l2 R) l* D
UF_STYLER_item_value_type_p_t callback_data), }8 M5 b% e; l& T; j$ [8 C
{
- S: O! j8 J/ _. d /* Make sure User Function is available. */
) K4 Y# I+ Q r3 _: z if ( UF_initialize() != 0)
% T% i, z# Z! l! B. |4 s* C return ( UF_UI_CB_CONTINUE_DIALOG );
3 l9 k. }/ I) z1 `0 g) B8 k) y' q/ f4 q2 F% d: z
/* ---- Enter your callback code here ----- */
' O" }0 M6 f Z# C& ^5 W
! ]; m$ G; f5 e6 D UF_terminate ();# Z, p8 n% W; z
6 s" a2 u" z1 w( H
/* Callback acknowledged, terminate dialog */
" B: q5 n- U% n8 V( s, {7 ?/ I, _3 d /* It is STRONGLY recommended that you exit your */9 ]5 I$ [0 r D
/* callback with UF_UI_CB_EXIT_DIALOG in a cancel call */
: A8 x- L& J g, F /* back rather than UF_UI_CB_CONTINUE_DIALOG. */
* w z. c5 L. ]7 L( s) g return ( UF_UI_CB_EXIT_DIALOG ); ) U( E8 J0 c& I: j \
5 o. p1 b5 F; S, ~! t} |
|