coclass 'pnumberlink' require 'gl2' corequire 'jzgrid' PNUMBERLINK=: 0 : 0 pc pnumberlink;pn "NumberLink"; menupop "File"; menu new "&New" "" "" ""; menu open "&Open" "" "" ""; menusep ; menu exit "&Exit" "" "" ""; menupopz; xywh 350 130 34 12;cc cancel button;cn "Exit"; xywh 5 5 335 247;cc grid isigraph; xywh 350 7 34 11;cc Init button; xywh 350 150 34 11;cc Test0 button; xywh 350 27 34 11;cc Data button; xywh 350 47 34 11;cc Color button; xywh 350 71 34 11;cc Do button; xywh 350 91 34 11;cc Undo button; pas 6 6;pcenter; rem form end; ) create0=: 3 : 0 wd PNUMBERLINK formhwnd=: wd'qhwndp' NB. initialize form here wd 'pshow;' ) create =: 3 : 0 NB. import data from argument y. of 'conew' function in the base script n=: y.,('_'~:{:y.)#'_base_' if. 0~:4!:0 space celldata =: 3 : 0 ; (zero2sp_base_ each y.), each 0{a. ) NB. celldata =: 3 : ';(": each y.), each 0{a.' pnumberlink_Init_button=: 3 : 0 sel '' glclear '' glmapraw '' glmap MM_TEXT glnoerasebkgnd 1 glgrid '' glshow '' ) pnumberlink_Test0_button=: 3 : 0 sel '' glgridfill gridws, gridhs, 0, 0 glgridrc 6 4 NB. make row(6) x column(4) glgridh 6$gridhs glgridw 4$gridws NB. glgridfill 15 10 0 0 glgridtext celldata i.6 4 DR =: 11 0 0 0 border =: 0 0 6 4, 16$DR glgridborder border glpaintx '' ) pnumberlink_Data_button=: 3 : 0 sel '' glgridfill gridws, gridhs, 0, 0 glgridrc Row, Col NB. make row(6) x column(4) glgridh Row$gridhs glgridw Col$gridws NB. glgridfill 15 10 0 0 glgridtext celldata DAT DR =: 11 0 0 0 border =: 0, 0, Row, Col, 16$DR glgridborder border glpaintx '' ) NB. Coloring ============================== pnumberlink_Color_button=: 3 : 0 sel '' glgridfont0 'arial 18 bold' setinitcolor '' setborder '' ) WHITE =: 255 255 255 SILVER =: 192 192 192 BLACK =: 0 0 0 AQUA =: 0 255 255 RED =: 255 0 0 GREEN =: 0 255 0 BLUE =: 0 0 255 YELLOW =: 255 255 0 PINK =: 255 192 203 NB. PURPLE =: 128 0 128 PURPLE =: 128 0 238 VIOLET =: 238 130 238 NB. COLORTABLE is imported via base loading === NB. from 'system\Packeges\color\colortab.ijs' OLIVE =: ". 98 { COLORTABLE_base_ NB. AZURE =: 240 255 255 TAN =: ". 130 { COLORTABLE_base_ CORAL =: ". 16 { COLORTABLE_base_ CYAN =: ". 20 { COLORTABLE_base_ KHAKI =: ". 59 { COLORTABLE_base_ ORANGE =: ". 100 { COLORTABLE_base_ SKYBLUE =: ". 124 { COLORTABLE_base_ MAGENTA =: ". 80 { COLORTABLE_base_ attinit =: 3 : 0 j =. j ) atts =: 3 : 0 j =. j ) setinitcolor =: 3 : 0 glgridatt ,atts'' glgridrchw 0, 0, $DAT glgridtype 3 + , DAT glpaintx '' ) setborder =: 3 : 0 NB. bordered with double black lines DB =: 11 0 0 0 NB. double black line border =: 0, 0, ($DAT) ,16$DB NB. bordering region glgridborder border glpaintx '' ) setcolor=: 3 : 0 glgridatt ,atts'' glgridrchw P, Q glgridtype , (Q $ COLOR) glpaintx '' ) setcolor0=: 3 : 0 glgridatt ,atts'' glgridrchw ColStart, ColRegion glgridtype , (ColRegion $ COLOR) glpaintx '' ) pnumberlink_Do_button=: 3 : 0 smoutput 'Start: ', ":(R0), (C0) smoutput 'End: ', ":(RR), (CC) smoutput 'Value: ', ": Value nmouse2param '' setcolor0 '' glpaintx '' return. if. CC = C0 do. RX =. (R0) to_base_ (RR) AM =. (CC) makecol_base_ RX end. if. RR = R0 do. CX =. (C0) to_base_ (CC) AM =. (RR) makerow_base_ CX end. DAT =: Value AM } DAT NB. revised value NB. convert DAT to TXT and writes DAT on the grid - 2013/8/25 OK! TXT =: ; (0{a.),~ L:0 (": L:0 <"(0) DAT) glgridrchw 0, 0, Row, Col NB. rewrite all DAT on the grid glgridtext celldata DAT glpaintx '' NB. Coloring with Attribute ==================================== COLOR =: Value + 3 smoutput 'COLOR: ', (":COLOR) NB. AMM =. >:L:0 AM AMM =. AM smoutput 'AMM: ', ": AMM NB. in case of reverse mouse set, reverse AMM - 2013/8/26 if. (CC = C0) *. ( ({. > {. AMM) > ({. > {: AMM) ) do. AMM =. |. AMM end. if. (RR = R0) *. ( ({: > {. AMM) > ({: > {: AMM) ) do. AMM =. |. AMM end. AMs =. {. AMM AMe =. {: AMM P =: >AMs if. RR = R0 do. Q =: 1, 1 + ({: >AMe) - ({: >AMs) end. if. CC = C0 do. Q =: (1 + ({. >AMe) - ({. >AMs)), 1 end. smoutput 'P: ', (":P), ', Q: ', (":Q) setcolor '' ) NB. simple data_from_mouse routine by T.N 2013/9/1 ========= nmouse =: 3 : 0 NB. smoutput sysdata NB. extract x, y pixel position 'x y h' =. 0 1 3 { 0 ". sysdata y =. h - y NB. wd 'mb "x, y" ','*', (": x, y) NB. calc. column, row position, and Value C =. <. x % gridws R =. <. y % gridhs Value =. (:L:0 AM AMM =. AM smoutput 'AMM: ', ": AMM NB. in case of reverse mouse set, reverse AMM - 2013/8/26 if. (CC = C0) *. ( ({. > {. AMM) > ({. > {: AMM) ) do. AMM =. |. AMM end. if. (RR = R0) *. ( ({: > {. AMM) > ({: > {: AMM) ) do. AMM =. |. AMM end. AMs =. {. AMM AMe =. {: AMM P =: >AMs if. RR = R0 do. Q =: 1, 1 + ({: >AMe) - ({: >AMs) end. if. CC = C0 do. Q =: (1 + ({. >AMe) - ({. >AMs)), 1 end. smoutput 'P: ', (":P), ', Q: ', (":Q) ColStart =: P ColRegion =: Q NB. return DAT, ColStart, ColRegion ) NB. Mouse Right Down - Set Start Cell ====================== pnumberlink_grid_mbrdown =: 3 : 0 'R C Value' =: nmouse '' R0 =: R C0 =: C NB. border double line DR =. 11 0 0 0 Border =. R0, C0, 1, 1, 16$DR glgridborder Border glpaintx '' NB. wd 'mb "R, C, Value" ','*', '(', (": R, C),') = ', (": Value) return. NB. clear border line CL =. 1 0 0 0 Clear =. R0, C0, 1, 1, 16$CL glgridborder Clear glpaintx '' ) NB. Mouse Left Down - Set End Cell ========================== NB. editflag =: 0 pnumberlink_grid_mbldown =: 3 : 0 'R C Value' =. nmouse '' RR =: R CC =: C NB. glpaintx '' NB. wd 'mb "R, C, Value" ','*', '(', (": R, C),') = ', (": Value) NB. border double line DR =. 11 0 0 0 Border =. RR, CC, 1, 1, 16$DR glgridborder Border glpaintx '' return. if. editflag = 1 do. NB. doedit '' d =. glgridgetedit '' if. 0 = #d do. return. end. NB. wd 'mb "d: " ','*', (": d) glgridrchw mark, 1, 1 glgridtext d glgridedit 0 editflag =: 0 glpaintx '' return. else. mark =: R, C glgridmark mark, 1, 1 NB. glgriddrawmark '' glgridedit '' editflag =: 1 end. glpaintx '' ) pnumberlink_Edit_button=: 3 : 0 glgridrchw RR, CC, 1, 1 editflag =: 0 if. editflag = 1 do. NB. doedit '' d =. glgridgetedit '' if. 0 = #d do. return. end. NB. wd 'mb "d: " ','*', (": d) glgridrchw mark, 1, 1 glgridtext d glgridedit 0 editflag =: 0 glpaintx '' return. else. mark =: R, C glgridmark mark, 1, 1 NB. glgriddrawmark '' glgridedit '' editflag =: 1 end. glpaintx '' ) pnumberlink_Undo_button=: 3 : 0 smoutput '------------' smoutput 'Undo:' smoutput 'Start: ', ":(R0), (C0) smoutput 'End: ', ":(RR), (CC) R0Start =. R0 C0Start =. C0 RREnd =. RR CCEnd =. CC Value =. ( RR) do. RX =. R0 R0 =. RR RR =. RX end. if. (R0 = RR) *. (C0 > CC) do. CX =. C0 C0 =. CC CC =. CX end. NB. rewrite all DAT on the grid ================= smoutput 'Test:' smoutput R0, C0 smoutput RR, CC NB. undo coloring =============================== if. C0 = CC do. smoutput 'test column' DAT =: 0 (< ( (>:R0)+i.(RR-R0)); C0 ) } DAT end. if. R0 = RR do. smoutput 'test row' DAT =: 0 (< R0; (>:C0)+i.(CC-C0) ) } DAT end. smoutput DAT DAT =: Value (