I want to create a class that will let me
create an object of that class, call some
methods to set options, and then call an
editor method to that displays a GUI, lets
the user edit a table using the grid, and then
returns the edited data. In all my attempts
so far, the editor returns right away and
doesn't wait for the user to exit the GUI
with the Ok or Cancel button. SO far I have
this (I don't now how it will wrap in this email
system):
NB.
----------------------------------------------------------------------------
NB. Test program - Edit a simple table
NB.
----------------------------------------------------------------------------
require 'jzgrid'
coclass 'testform2'
WINDOW=: 0 : 0
pc window;
xywh 160 5 45 12;cc add button leftmove rightmove;cn
"Add Entry";
xywh 160 25 45 12;cc ok button leftmove rightmove;cn
"OK";
xywh 160 40 45 12;cc cancel button leftmove rightmove;cn
"Cancel";
xywh 5 5 150 160;cc grid isigraph rightmove bottommove;
pas 5 5;pcenter;
rem form end;
)
NB.
----------------------------------------------------------------------------
NB. create - Create the object and initialize fields
NB.
NB. y = Table to be edited
NB.
----------------------------------------------------------------------------
create =: 3 : 0
original_data =: current_data =: y
display_cols =: i. {: $ y
HDRCOL =: (8!:0) display_cols
)
NB.
----------------------------------------------------------------------------
NB. edit - Display the table, let the user edit it, and
return the results
NB.
----------------------------------------------------------------------------
edit =: 3 : 0
editing =: 1
wd WINDOW
grid =: '' conew 'jzgrid'
show_data ''
NB. ... next line doesn't wait until the GUI is exited
...
wd 'pshow; wait;'
NB. ... this loop doesn't work; it locks up the GUI ...
while. editing do.
(6!:3) 1
wd 'msgs ;'
end.
current_data
)
NB.
----------------------------------------------------------------------------
NB. destroy - Destroy the object
NB.
----------------------------------------------------------------------------
destroy =: 3 : 0
destroy__grid ''
codestroy ''
)
NB.
----------------------------------------------------------------------------
NB. select_columns - Choose which columns to display
NB.
NB. y = List of column indices
NB.
----------------------------------------------------------------------------
select_columns =: 3 : 0
display_cols =: y
)
NB.
----------------------------------------------------------------------------
NB. set_headers - Set the column headers
NB.
NB. y = List of boxed header strings, one for each column
to be displayed
NB.
----------------------------------------------------------------------------
set_headers =: 3 : 0
HDRCOL =: y
)
NB.
----------------------------------------------------------------------------
NB. show_data - Display the table
NB.
----------------------------------------------------------------------------
show_data =: 3 : 0
CELLDATA =: display_cols {"1 current_data
HDRROW =: (# CELLDATA) # <'Delete'
show__grid 'CELLDATA HDRCOL HDRROW'
)
NB.
----------------------------------------------------------------------------
NB. grid_gridhandler - Handle Delete key clicks
NB.
----------------------------------------------------------------------------
grid_gridhandler =: 3 : 0
NB. --- A click on a row header ("Delete" button)
deletes that row
if. (y -: 'click') *. (Col__grid < 0) *. Row__grid >: 0
do.
current_data =: (Row__grid ~: i. # current_data) #
current_data
show_data ''
0
else.
1
end.
)
window_close =: 3 : 0
editing =: 0
wd 'pclose'
destroy__grid ''
)
window_add_button =: 3 : 0
wd 'mb "Incomplete" "Apply <enter new table row> GUI
here" mb_iconinformation;'
)
window_cancel_button =: 3 : 0
current_data =: original_data
window_close ''
)
window_ok_button =: 3 : 0
NB. ... update current_data with edited CELLDATA cells
...
window_close ''
)
NB.
============================================================================
test_base_ =: 3 : 0
testdata =: 4 3 $ 'Asteroid';'1
Ceres';2.77;'Comet';'P/Halley';17.8;'Planet';'Mars';1.33;'Star';'Antares';600
gui =. testdata conew 'testform2'
set_headers__gui 'Category';'Name';'Distance'
data_base_ =: edit__gui ''
gui__destroy ''
)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm