cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Sign-in to the JMP Community will be unavailable intermittently Dec. 6-7 due to a system update. Thank you for your understanding!
  • We’re retiring the File Exchange at the end of this year. The JMP Marketplace is now your destination for add-ins and extensions.
  • JMP 19 is here! Learn more about the new features.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
hogi
Level XIII

how to use JSL to edit a modal dialog window

What is the right approach to edit a modal dialog via JSL?

 

the idea:

- the function add update button adds a button to the data filter

- it works if it is executed AFTER the creation of the window

- in the actual use case, the return value of the window is used as input for the subsequent code.
   Therefore, <<Type( "Modal Dialog" )
-> the window will be closed before add update button() //post gets executed 

 

- I tried to add the add update button()  via << on open (
 
... without success 

 

 

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );

dt << Add Properties to Table(
	{New Script("reread", JSL Quote(caption("reread ...")),	As String( 1 ))});
	
add update button = function ({},
wait();
Current Report()["Local Data Filter",LineUpBox(1)] <<
append(
	b = Button Box( "update",
		b << close window();
		dt << run script( "reread" );
		ShowQueryWindow();				
	)
));

ShowQueryWindow = Function({},
	gui = New Window( "test", 
	//<<Type( "Modal Dialog" ),
	<< on open(add update button()), // doesn't work
		dt << data filter( local )
	)
);

ShowQueryWindow();

add update button() //post: works
1 ACCEPTED SOLUTION

Accepted Solutions

Re: how to use JSL to edit a modal dialog window

One approach for this in JMP 18 is to use a window handler.  The window handler is a function wrapper that allows you to access any window created during the execution of the function.  We are looking at making modal and non-modal behaviors more consistent in upcoming major releases, which should make this easier to do directly through the New Window() function in the future.

 

 

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );

dt << Add Properties to Table(
	{New Script("reread", JSL Quote(caption("reread ...")),	As String( 1 ))});
	
add update button = function ({win},
win["Local Data Filter",LineUpBox(1)] <<
append(
	b = Button Box( "update",
		b << close window();
		dt << run script( "reread" );
		ShowQueryWindow();				
	)
));

showFilter = Function({},
	With Window Handler(
		New Window( "test", 
			<<Type( "Modal Dialog" ),
			dt << data filter( local )
		),
		Function({win},
			add update button(win);
		);
	)
);

showFilter();

 

 

View solution in original post

3 REPLIES 3

Re: how to use JSL to edit a modal dialog window

One approach for this in JMP 18 is to use a window handler.  The window handler is a function wrapper that allows you to access any window created during the execution of the function.  We are looking at making modal and non-modal behaviors more consistent in upcoming major releases, which should make this easier to do directly through the New Window() function in the future.

 

 

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );

dt << Add Properties to Table(
	{New Script("reread", JSL Quote(caption("reread ...")),	As String( 1 ))});
	
add update button = function ({win},
win["Local Data Filter",LineUpBox(1)] <<
append(
	b = Button Box( "update",
		b << close window();
		dt << run script( "reread" );
		ShowQueryWindow();				
	)
));

showFilter = Function({},
	With Window Handler(
		New Window( "test", 
			<<Type( "Modal Dialog" ),
			dt << data filter( local )
		),
		Function({win},
			add update button(win);
		);
	)
);

showFilter();

 

 

hogi
Level XIII

Re: how to use JSL to edit a modal dialog window

hi @danschikore, thanks a lot
wonderful :)

jthi
Super User

Re: how to use JSL to edit a modal dialog window

Are you trying to add the update button to the modal window? If you are, I don't think modal window is a report window (it is modal or modal dialog) -> build the modal window in different way

Names Default To Here(1);

dt = Open("$SAMPLE_DATA/Big Class.jmp");

dt << New Script("reread", JSL Quote(caption("reread ...")), As String(1));


add update button = Function({ref},
	ref["Local Data Filter", Lineup Box(1)] << append(
		b = Button Box("update",
			b << close window();
			dt << run script("reread");
		)
	);
);

showFilter = Function({},
	collector = V List Box(
		dt << data filter(local)
	);
	add update button(collector);
	gui = New Window("test", <<Type("Modal Dialog"),
		collector,
		Button Box("Windows",
			Show(Get Window(Type("Reports")));
			Show(Current Report());
		);
	);
);

showFilter();

I would also suggest trying to add {Default Local} (or defined variable names) to your functions to avoid possible issues but it will require some additional scripting.

-Jarmo

Recommended Articles