q-lang-cvs Mailing List for Q - Equational Programming Language (Page 15)
Brought to you by:
agraef
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(106) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(219) |
Feb
(152) |
Mar
|
Apr
(92) |
May
(45) |
Jun
(3) |
Jul
|
Aug
(3) |
Sep
(111) |
Oct
(52) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
(2) |
May
(23) |
Jun
(46) |
Jul
(158) |
Aug
(22) |
Sep
|
Oct
(26) |
Nov
(11) |
Dec
(49) |
2006 |
Jan
(57) |
Feb
(196) |
Mar
(10) |
Apr
(41) |
May
(149) |
Jun
(308) |
Jul
(11) |
Aug
(25) |
Sep
(15) |
Oct
|
Nov
|
Dec
(15) |
2007 |
Jan
|
Feb
|
Mar
|
Apr
(15) |
May
(204) |
Jun
(112) |
Jul
(7) |
Aug
(16) |
Sep
(134) |
Oct
(313) |
Nov
(262) |
Dec
(83) |
2008 |
Jan
(81) |
Feb
(83) |
Mar
(21) |
Apr
|
May
|
Jun
(1) |
Jul
(2) |
Aug
(6) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Albert G. <ag...@us...> - 2007-11-18 03:55:07
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25256 Modified Files: calclib.q qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.165 retrieving revision 1.166 diff -C2 -d -r1.165 -r1.166 *** qcalc.q 17 Nov 2007 18:24:57 -0000 1.165 --- qcalc.q 18 Nov 2007 03:55:03 -0000 1.166 *************** *** 572,580 **** clearmsg = qt STATUS "clear" (); statusmsg S = qt STATUS "message" S; ! // like statusmsg, but must be processed immediately: waitmsg S = statusmsg S || GLOBAL := false || qt APP "processEvents" () || GLOBAL := G where G = get GLOBAL; /* Application cursor. */ --- 572,590 ---- clearmsg = qt STATUS "clear" (); statusmsg S = qt STATUS "message" S; ! ! /* This is like statusmsg, but must be processed immediately. */ ! waitmsg S = statusmsg S || GLOBAL := false || qt APP "processEvents" () || GLOBAL := G where G = get GLOBAL; + /* Status updates of task buttons. Process events so that the arrow indicator + on the task button is updated immediately. Currently we don't do anything + else with the information provided here, but in the future we might want to + have a status LED somewhere which is lit when some tasks are executing. */ + + procmsg (I,J) F = GLOBAL := false || qt APP "processEvents" () || GLOBAL := G + where G = get GLOBAL; + /* Application cursor. */ *************** *** 795,800 **** (reg 1,reg 2), (I,J) = val K; ! = qt X "setIconSet" ICONSET || ! waitmsg (if Y=0 then "" else "Processing...") where [(K,S)] = regex "" "^\\+\\+\\+ Taskstate: (\\([0-9]+,[0-9]+\\)) ([0-9]+)$" S --- 805,809 ---- (reg 1,reg 2), (I,J) = val K; ! = qt X "setIconSet" ICONSET || procmsg (I,J) (Y<>0) where [(K,S)] = regex "" "^\\+\\+\\+ Taskstate: (\\([0-9]+,[0-9]+\\)) ([0-9]+)$" S Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** calclib.q 17 Nov 2007 16:24:39 -0000 1.38 --- calclib.q 18 Nov 2007 03:55:03 -0000 1.39 *************** *** 340,344 **** where (I,J,SEM) = get YYSEM!thread_no this_thread; ! private begin_task ARGS, end_task; taskbutton S:String X --- 340,345 ---- where (I,J,SEM) = get YYSEM!thread_no this_thread; ! private begin_task ARGS, end_task ARGS, fini_task X ARGS; ! special do_task X ~ARGS; taskbutton S:String X *************** *** 356,360 **** printf "\f+++ Taskbutton: %s %s\n" (str (I,J),str (S,INIT)) || ! thread (begin_task (I,J,SEM) || catch id X || end_task); if active H where (I,J,_) = get YYSEM!thread_no this_thread, (H:Thread,SEM,'_) = get YYTASKS!(I,J): --- 357,362 ---- printf "\f+++ Taskbutton: %s %s\n" (str (I,J),str (S,INIT)) || ! thread (begin_task (I,J,SEM) || do_task X (I,J,SEM) || ! end_task (I,J,SEM)); if active H where (I,J,_) = get YYSEM!thread_no this_thread, (H:Thread,SEM,'_) = get YYTASKS!(I,J): *************** *** 374,380 **** printf "\f+++ Taskstate: %s 1\n" (str (I,J)) || flush; ! end_task = setval (I,J) false || ! printf "\f+++ Taskstate: %s 0\n" (str (I,J)) || flush ! where (I,J) = task_index; /* Internals. */ --- 376,396 ---- printf "\f+++ Taskstate: %s 1\n" (str (I,J)) || flush; ! end_task (I,J,SEM) ! = setval (I,J) false || ! printf "\f+++ Taskstate: %s 0\n" (str (I,J)) || flush; ! ! /* Handle unprocessed messages by the task. X denotes a taskbutton expression ! we still have to process after an update. We walk the entire queue to get ! the last such message and reexecute the task if we find one. */ ! ! do_task X ARGS = fini_task (catch id X || sleep 0.1) ARGS; ! ! fini_task X (I,J,SEM) ! where Y = get SEM if N>0 where N:Int = #SEM: ! = fini_task 'Y (I,J,SEM) where 'Y = Y; ! = fini_task X (I,J,SEM) otherwise; ! otherwise: ! = do_task X (I,J,SEM) where 'X = X; ! = () otherwise; /* Internals. */ *************** *** 443,447 **** where SEM:Semaphore = semaphore, H:Thread = ! thread (begin_task (I,J,SEM) || catch id X || end_task) if B; // thread has terminated and is deactivated, put it in limbo --- 459,464 ---- where SEM:Semaphore = semaphore, H:Thread = ! thread (begin_task (I,J,SEM) || do_task X (I,J,SEM) || ! end_task (I,J,SEM)) if B; // thread has terminated and is deactivated, put it in limbo |
From: Albert G. <ag...@us...> - 2007-11-17 18:26:12
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv5413/examples Modified Files: guiexamples.qcalc Log Message: bugfixes Index: guiexamples.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/guiexamples.qcalc,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** guiexamples.qcalc 17 Nov 2007 13:52:39 -0000 1.11 --- guiexamples.qcalc 17 Nov 2007 18:26:09 -0000 1.12 *************** *** 1,4 **** ! // qcalc 1.0, created Sat Nov 17 14:50:23 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),""),((38,0),""),((38,1),""),((38,2),""),((38,3),""),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((39,2),""),((39,3),""),((40,0),"The file you chose:"),((40,1),("",1,3)),((40,2),""),((40,3),""),((41,0),""),((41,1),""),((41,2),""),((41,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] --- 1,4 ---- ! // qcalc 1.0, created Sat Nov 17 19:27:00 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((40,0),"The file you chose:"),((40,1),("",1,3))] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] |
From: Albert G. <ag...@us...> - 2007-11-17 18:25:01
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4589/examples Modified Files: calendar.qcalc Log Message: bugfixes Index: calendar.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/calendar.qcalc,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** calendar.qcalc 17 Nov 2007 17:55:58 -0000 1.5 --- calendar.qcalc 17 Nov 2007 18:24:57 -0000 1.6 *************** *** 1,4 **** ! // qcalc 1.0, created Sat Nov 17 18:59:13 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,0),""),((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3"),((4,0),""),((4,1),""),((4,2),""),((4,3),""),((4,4),""),((4,5),""),((4,6),""),((4,7),""),((4,8),""),((4,9),""),((4,10),""),((4,11),""),((4,12),""),((4,13),""),((4,14),""),((4,15),""),((4,16),""),((4,17),""),((4,18),""),((4,19),""),((4,20),""),((4,21),""),((4,22),""),((4,23),""),((4,24),""),((5,0),""),((5,1),""),((5,2),""),((5,3),""),((5,4),""),((5,5),""),((5,6),""),((5,7),""),((5,8),""),((5,9),""),((5,10),""),((5,11),""),((5,12),""),((5,13),""),((5,14),""),((5,15),""),((5,16),""),((5,17),""),((5,18),""),((5,19),""),((5,20),""),((5,21),""),((5,22),""),((5,23),""),((5,24),""),((6,0),""),((6,1),""),((6,2),""),((6,3),""),((6,4),""),((6,5),""),((6,6),""),((6,7),""),((6,8),""),((6,9),""),((6,10),""),((6,11),""),((6,12),""),((6,13),""),((6,14),""),((6,15),""),((6,16),""),((6,17),""),((6,18),""),((6,19),""),((6,20),""),((6,21),""),((6,22),""),((6,23),""),((6,24),""),((7,0),""),((7,1),""),((7,2),""),((7,3),""),((7,4),""),((7,5),""),((7,6),""),((7,7),""),((7,8),""),((7,9),""),((7,10),""),((7,11),""),((7,12),""),((7,13),""),((7,14),""),((7,15),""),((7,16),""),((7,17),""),((7,18),""),((7,19),""),((7,20),""),((7,21),""),((7,22),""),((7,23),""),((7,24),""),((8,0),""),((8,1),""),((8,2),""),((8,3),""),((8,4),""),((8,5),""),((8,6),""),((8,7),""),((8,8),""),((8,9),""),((8,10),""),((8,11),""),((8,12),""),((8,13),""),((8,14),""),((8,15),""),((8,16),""),((8,17),""),((8,18),""),((8,19),""),((8,20),""),((8,21),""),((8,22),""),((8,23),""),((8,24),""),((9,0),""),((9,1),""),((9,2),""),((9,3),""),((9,4),""),((9,5),""),((9,6),""),((9,7),""),((9,8),""),((9,9),""),((9,10),""),((9,11),""),((9,12),""),((9,13),""),((9,14),""),((9,15),""),((9,16),""),((9,17),""),((9,18),""),((9,19),""),((9,20),""),((9,21),""),((9,22),""),((9,23),""),((9,24),""),((10,0),""),((10,1),""),((10,2),""),((10,3),""),((10,4),""),((10,5),""),((10,6),""),((10,7),""),((10,8),""),((10,9),""),((10,10),""),((10,11),""),((10,12),""),((10,13),""),((10,14),""),((10,15),""),((10,16),""),((10,17),""),((10,18),""),((10,19),""),((10,20),""),((10,21),""),((10,22),""),((10,23),""),((10,24),""),((11,0),""),((11,1),""),((11,2),""),((11,3),""),((11,4),""),((11,5),""),((11,6),""),((11,7),""),((11,8),""),((11,9),""),((11,10),""),((11,11),""),((11,12),""),((11,13),""),((11,14),""),((11,15),""),((11,16),""),((11,17),""),((11,18),""),((11,19),""),((11,20),""),((11,21),""),((11,22),""),((11,23),""),((11,24),""),((12,0),""),((12,1),""),((12,2),""),((12,3),""),((12,4),""),((12,5),""),((12,6),""),((12,7),""),((12,8),""),((12,9),""),((12,10),""),((12,11),""),((12,12),""),((12,13),""),((12,14),""),((12,15),""),((12,16),""),((12,17),""),((12,18),""),((12,19),""),((12,20),""),((12,21),""),((12,22),""),((12,23),""),((12,24),""),((13,0),""),((13,1),""),((13,2),""),((13,3),""),((13,4),""),((13,5),""),((13,6),""),((13,7),""),((13,8),""),((13,9),""),((13,10),""),((13,11),""),((13,12),""),((13,13),""),((13,14),""),((13,15),""),((13,16),""),((13,17),""),((13,18),""),((13,19),""),((13,20),""),((13,21),""),((13,22),""),((13,23),""),((13,24),""),((14,0),""),((14,1),""),((14,2),""),((14,3),""),((14,4),""),((14,5),""),((14,6),""),((14,7),""),((14,8),""),((14,9),""),((14,10),""),((14,11),""),((14,12),""),((14,13),""),((14,14),""),((14,15),""),((14,16),""),((14,17),""),((14,18),""),((14,19),""),((14,20),""),((14,21),""),((14,22),""),((14,23),""),((14,24),""),((15,0),""),((15,1),""),((15,2),""),((15,3),""),((15,4),""),((15,5),""),((15,6),""),((15,7),""),((15,8),""),((15,9),""),((15,10),""),((15,11),""),((15,12),""),((15,13),""),((15,14),""),((15,15),""),((15,16),""),((15,17),""),((15,18),""),((15,19),""),((15,20),""),((15,21),""),((15,22),""),((15,23),""),((15,24),""),((16,0),""),((16,1),""),((16,2),""),((16,3),""),((16,4),""),((16,5),""),((16,6),""),((16,7),""),((16,8),""),((16,9),""),((16,10),""),((16,11),""),((16,12),""),((16,13),""),((16,14),""),((16,15),""),((16,16),""),((16,17),""),((16,18),""),((16,19),""),((16,20),""),((16,21),""),((16,22),""),((16,23),""),((16,24),""),((17,0),""),((17,1),""),((17,2),""),((17,3),""),((17,4),""),((17,5),""),((17,6),""),((17,7),""),((17,8),""),((17,9),""),((17,10),""),((17,11),""),((17,12),""),((17,13),""),((17,14),""),((17,15),""),((17,16),""),((17,17),""),((17,18),""),((17,19),""),((17,20),""),((17,21),""),((17,22),""),((17,23),""),((17,24),""),((18,0),""),((18,1),""),((18,2),""),((18,3),""),((18,4),""),((18,5),""),((18,6),""),((18,7),""),((18,8),""),((18,9),""),((18,10),""),((18,11),""),((18,12),""),((18,13),""),((18,14),""),((18,15),""),((18,16),""),((18,17),""),((18,18),""),((18,19),""),((18,20),""),((18,21),""),((18,22),""),((18,23),""),((18,24),""),((19,0),""),((19,1),""),((19,2),""),((19,3),""),((19,4),""),((19,5),""),((19,6),""),((19,7),""),((19,8),""),((19,9),""),((19,10),""),((19,11),""),((19,12),""),((19,13),""),((19,14),""),((19,15),""),((19,16),""),((19,17),""),((19,18),""),((19,19),""),((19,20),""),((19,21),""),((19,22),""),((19,23),""),((19,24),""),((20,0),""),((20,1),""),((20,2),""),((20,3),""),((20,4),""),((20,5),""),((20,6),""),((20,7),""),((20,8),""),((20,9),""),((20,10),""),((20,11),""),((20,12),""),((20,13),""),((20,14),""),((20,15),""),((20,16),""),((20,17),""),((20,18),""),((20,19),""),((20,20),""),((20,21),""),((20,22),""),((20,23),""),((20,24),""),((21,0),""),((21,1),""),((21,2),""),((21,3),""),((21,4),""),((21,5),""),((21,6),""),((21,7),""),((21,8),""),((21,9),""),((21,10),""),((21,11),""),((21,12),""),((21,13),""),((21,14),""),((21,15),""),((21,16),""),((21,17),""),((21,18),""),((21,19),""),((21,20),""),((21,21),""),((21,22),""),((21,23),""),((21,24),""),((22,0),""),((22,1),""),((22,2),""),((22,3),""),((22,4),""),((22,5),""),((22,6),""),((22,7),""),((22,8),""),((22,9),""),((22,10),""),((22,11),""),((22,12),""),((22,13),""),((22,14),""),((22,15),""),((22,16),""),((22,17),""),((22,18),""),((22,19),""),((22,20),""),((22,21),""),((22,22),""),((22,23),""),((22,24),""),((23,0),""),((23,1),""),((23,2),""),((23,3),""),((23,4),""),((23,5),""),((23,6),""),((23,7),""),((23,8),""),((23,9),""),((23,10),""),((23,11),""),((23,12),""),((23,13),""),((23,14),""),((23,15),""),((23,16),""),((23,17),""),((23,18),""),((23,19),""),((23,20),""),((23,21),""),((23,22),""),((23,23),""),((23,24),""),((24,0),""),((24,1),""),((24,2),""),((24,3),""),((24,4),""),((24,5),""),((24,6),""),((24,7),""),((24,8),""),((24,9),""),((24,10),""),((24,11),""),((24,12),""),((24,13),""),((24,14),""),((24,15),""),((24,16),""),((24,17),""),((24,18),""),((24,19),""),((24,20),""),((24,21),""),((24,22),""),((24,23),""),((24,24),""),((25,0),""),((25,1),""),((25,2),""),((25,3),""),((25,4),""),((25,5),""),((25,6),""),((25,7),""),((25,8),""),((25,9),""),((25,10),""),((25,11),""),((25,12),""),((25,13),""),((25,14),""),((25,15),""),((25,16),""),((25,17),""),((25,18),""),((25,19),""),((25,20),""),((25,21),""),((25,22),""),((25,23),""),((25,24),""),((26,0),""),((26,1),""),((26,2),""),((26,3),""),((26,4),""),((26,5),""),((26,6),""),((26,7),""),((26,8),""),((26,9),""),((26,10),""),((26,11),""),((26,12),""),((26,13),""),((26,14),""),((26,15),""),((26,16),""),((26,17),""),((26,18),""),((26,19),""),((26,20),""),((26,21),""),((26,22),""),((26,23),""),((26,24),""),((27,0),""),((27,1),""),((27,2),""),((27,3),""),((27,4),""),((27,5),""),((27,6),""),((27,7),""),((27,8),""),((27,9),""),((27,10),""),((27,11),""),((27,12),""),((27,13),""),((27,14),""),((27,15),""),((27,16),""),((27,17),""),((27,18),""),((27,19),""),((27,20),""),((27,21),""),((27,22),""),((27,23),""),((27,24),""),((28,0),""),((28,1),""),((28,2),""),((28,3),""),((28,4),""),((28,5),""),((28,6),""),((28,7),""),((28,8),""),((28,9),""),((28,10),""),((28,11),""),((28,12),""),((28,13),""),((28,14),""),((28,15),""),((28,16),""),((28,17),""),((28,18),""),((28,19),""),((28,20),""),((28,21),""),((28,22),""),((28,23),""),((28,24),""),((29,0),""),((29,1),""),((29,2),""),((29,3),""),((29,4),""),((29,5),""),((29,6),""),((29,7),""),((29,8),""),((29,9),""),((29,10),""),((29,11),""),((29,12),""),((29,13),""),((29,14),""),((29,15),""),((29,16),""),((29,17),""),((29,18),""),((29,19),""),((29,20),""),((29,21),""),((29,22),""),((29,23),""),((29,24),""),((30,0),""),((30,1),""),((30,2),""),((30,3),""),((30,4),""),((30,5),""),((30,6),""),((30,7),""),((30,8),""),((30,9),""),((30,10),""),((30,11),""),((30,12),""),((30,13),""),((30,14),""),((30,15),""),((30,16),""),((30,17),""),((30,18),""),((30,19),""),((30,20),""),((30,21),""),((30,22),""),((30,23),""),((30,24),""),((31,0),""),((31,1),""),((31,2),""),((31,3),""),((31,4),""),((31,5),""),((31,6),""),((31,7),""),((31,8),""),((31,9),""),((31,10),""),((31,11),""),((31,12),""),((31,13),""),((31,14),""),((31,15),""),((31,16),""),((31,17),""),((31,18),""),((31,19),""),((31,20),""),((31,21),""),((31,22),""),((31,23),""),((31,24),""),((32,0),""),((32,1),""),((32,2),""),((32,3),""),((32,4),""),((32,5),""),((32,6),""),((32,7),""),((32,8),""),((32,9),""),((32,10),""),((32,11),""),((32,12),""),((32,13),""),((32,14),""),((32,15),""),((32,16),""),((32,17),""),((32,18),""),((32,19),""),((32,20),""),((32,21),""),((32,22),""),((32,23),""),((32,24),"")] // [] // [(0,86),(1,26),(2,28),(3,26),(4,30),(5,25),(6,27),(7,26),(8,74),(9,26),(10,28),(11,25),(12,30),(13,26),(14,27),(15,26),(16,77),(17,26),(18,28),(19,25),(20,30),(21,25),(22,29),(23,26)] --- 1,4 ---- ! // qcalc 1.0, created Sat Nov 17 19:24:44 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3")] // [] // [(0,86),(1,26),(2,28),(3,26),(4,30),(5,25),(6,27),(7,26),(8,74),(9,26),(10,28),(11,25),(12,30),(13,26),(14,27),(15,26),(16,77),(17,26),(18,28),(19,25),(20,30),(21,25),(22,29),(23,26)] |
From: Albert G. <ag...@us...> - 2007-11-17 18:25:01
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4589 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.164 retrieving revision 1.165 diff -C2 -d -r1.164 -r1.165 *** qcalc.q 17 Nov 2007 17:48:58 -0000 1.164 --- qcalc.q 17 Nov 2007 18:24:57 -0000 1.165 *************** *** 1950,1954 **** add_recent_file $ get FILENAME || statusmsg "Done" ! where KEYS = keys (get CELLS), SPANS = filter is_spanned KEYS, SPANS = zip SPANS $ map cell_span SPANS, --- 1950,1954 ---- add_recent_file $ get FILENAME || statusmsg "Done" ! where KEYS = filter must_save $ keys $ get CELLS, SPANS = filter is_spanned KEYS, SPANS = zip SPANS $ map cell_span SPANS, *************** *** 1973,1976 **** --- 1973,1978 ---- htmlquote $ get FILENAME; + must_save (I,J) = not is_empty (I,J) or else is_spanned (I,J); + indexcmp (I1,J1) (I2,J2) = (I1<I2) or else (I1=I2) and then (J1<J2); |
From: Albert G. <ag...@us...> - 2007-11-17 17:56:03
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23601 Modified Files: calendar.qcalc Log Message: bugfixes Index: calendar.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/calendar.qcalc,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** calendar.qcalc 17 Nov 2007 16:23:06 -0000 1.4 --- calendar.qcalc 17 Nov 2007 17:55:58 -0000 1.5 *************** *** 1,4 **** ! // qcalc 1.0, created Sat Nov 17 17:24:13 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,0),""),((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3"),((4,0),""),((4,1),""),((4,2),""),((4,3),""),((4,4),""),((4,5),""),((4,6),""),((4,7),""),((4,8),""),((4,9),""),((4,10),""),((4,11),""),((4,12),""),((4,13),""),((4,14),""),((4,15),""),((4,16),""),((4,17),""),((4,18),""),((4,19),""),((4,20),""),((4,21),""),((4,22),""),((4,23),""),((5,0),"January"),((5,1),"Su"),((5,2),"Mo"),((5,3),"Tu"),((5,4),"We"),((5,5),"Th"),((5,6),"Fr"),((5,7),"Sa"),((5,8),"February"),((5,9),"Su"),((5,10),"Mo"),((5,11),"Tu"),((5,12),"We"),((5,13),"Th"),((5,14),"Fr"),((5,15),"Sa"),((5,16),"March"),((5,17),"Su"),((5,18),"Mo"),((5,19),"Tu"),((5,20),"We"),((5,21),"Th"),((5,22),"Fr"),((5,23),"Sa"),((6,0),""),((6,1),""),((6,2),"1"),((6,3),"2"),((6,4),"3"),((6,5),"4"),((6,6),"5"),((6,7),"6"),((6,8),""),((6,9),""),((6,10),""),((6,11),""),((6,12),""),((6,13),"1"),((6,14),"2"),((6,15),"3"),((6,16),""),((6,17),""),((6,18),""),((6,19),""),((6,20),""),((6,21),"1"),((6,22),"2"),((6,23),"3"),((7,0),""),((7,1),"7"),((7,2),"8"),((7,3),"9"),((7,4),"10"),((7,5),"11"),((7,6),"12"),((7,7),"13"),((7,8),""),((7,9),"4"),((7,10),"5"),((7,11),"6"),((7,12),"7"),((7,13),"8"),((7,14),"9"),((7,15),"10"),((7,16),""),((7,17),"4"),((7,18),"5"),((7,19),"6"),((7,20),"7"),((7,21),"8"),((7,22),"9"),((7,23),"10"),((8,0),""),((8,1),"14"),((8,2),"15"),((8,3),"16"),((8,4),"17"),((8,5),"18"),((8,6),"19"),((8,7),"20"),((8,8),""),((8,9),"11"),((8,10),"12"),((8,11),"13"),((8,12),"14"),((8,13),"15"),((8,14),"16"),((8,15),"17"),((8,16),""),((8,17),"11"),((8,18),"12"),((8,19),"13"),((8,20),"14"),((8,21),"15"),((8,22),"16"),((8,23),"17"),((9,0),""),((9,1),"21"),((9,2),"22"),((9,3),"23"),((9,4),"24"),((9,5),"25"),((9,6),"26"),((9,7),"27"),((9,8),""),((9,9),"18"),((9,10),"19"),((9,11),"20"),((9,12),"21"),((9,13),"22"),((9,14),"23"),((9,15),"24"),((9,16),""),((9,17),"18"),((9,18),"19"),((9,19),"20"),((9,20),"21"),((9,21),"22"),((9,22),"23"),((9,23),"24"),((10,0),""),((10,1),"28"),((10,2),"29"),((10,3),"30"),((10,4),"31"),((10,5),""),((10,6),""),((10,7),""),((10,8),""),((10,9),"25"),((10,10),"26"),((10,11),"27"),((10,12),"28"),((10,13),""),((10,14),""),((10,15),""),((10,16),""),((10,17),"25"),((10,18),"26"),((10,19),"27"),((10,20),"28"),((10,21),"29"),((10,22),"30"),((10,23),"31"),((11,0),""),((11,1),""),((11,2),""),((11,3),""),((11,4),""),((11,5),""),((11,6),""),((11,7),""),((11,8),""),((11,9),""),((11,10),""),((11,11),""),((11,12),""),((11,13),""),((11,14),""),((11,15),""),((11,16),""),((11,17),""),((11,18),""),((11,19),""),((11,20),""),((11,21),""),((11,22),""),((11,23),""),((12,0),"April"),((12,1),"Su"),((12,2),"Mo"),((12,3),"Tu"),((12,4),"We"),((12,5),"Th"),((12,6),"Fr"),((12,7),"Sa"),((12,8),"May"),((12,9),"Su"),((12,10),"Mo"),((12,11),"Tu"),((12,12),"We"),((12,13),"Th"),((12,14),"Fr"),((12,15),"Sa"),((12,16),"June"),((12,17),"Su"),((12,18),"Mo"),((12,19),"Tu"),((12,20),"We"),((12,21),"Th"),((12,22),"Fr"),((12,23),"Sa"),((13,0),""),((13,1),"1"),((13,2),"2"),((13,3),"3"),((13,4),"4"),((13,5),"5"),((13,6),"6"),((13,7),"7"),((13,8),""),((13,9),""),((13,10),""),((13,11),"1"),((13,12),"2"),((13,13),"3"),((13,14),"4"),((13,15),"5"),((13,16),""),((13,17),""),((13,18),""),((13,19),""),((13,20),""),((13,21),""),((13,22),"1"),((13,23),"2"),((14,0),""),((14,1),"8"),((14,2),"9"),((14,3),"10"),((14,4),"11"),((14,5),"12"),((14,6),"13"),((14,7),"14"),((14,8),""),((14,9),"6"),((14,10),"7"),((14,11),"8"),((14,12),"9"),((14,13),"10"),((14,14),"11"),((14,15),"12"),((14,16),""),((14,17),"3"),((14,18),"4"),((14,19),"5"),((14,20),"6"),((14,21),"7"),((14,22),"8"),((14,23),"9"),((15,0),""),((15,1),"15"),((15,2),"16"),((15,3),"17"),((15,4),"18"),((15,5),"19"),((15,6),"20"),((15,7),"21"),((15,8),""),((15,9),"13"),((15,10),"14"),((15,11),"15"),((15,12),"16"),((15,13),"17"),((15,14),"18"),((15,15),"19"),((15,16),""),((15,17),"10"),((15,18),"11"),((15,19),"12"),((15,20),"13"),((15,21),"14"),((15,22),"15"),((15,23),"16"),((16,0),""),((16,1),"22"),((16,2),"23"),((16,3),"24"),((16,4),"25"),((16,5),"26"),((16,6),"27"),((16,7),"28"),((16,8),""),((16,9),"20"),((16,10),"21"),((16,11),"22"),((16,12),"23"),((16,13),"24"),((16,14),"25"),((16,15),"26"),((16,16),""),((16,17),"17"),((16,18),"18"),((16,19),"19"),((16,20),"20"),((16,21),"21"),((16,22),"22"),((16,23),"23"),((17,0),""),((17,1),"29"),((17,2),"30"),((17,3),""),((17,4),""),((17,5),""),((17,6),""),((17,7),""),((17,8),""),((17,9),"27"),((17,10),"28"),((17,11),"29"),((17,12),"30"),((17,13),"31"),((17,14),""),((17,15),""),((17,16),""),((17,17),"24"),((17,18),"25"),((17,19),"26"),((17,20),"27"),((17,21),"28"),((17,22),"29"),((17,23),"30"),((18,0),""),((18,1),""),((18,2),""),((18,3),""),((18,4),""),((18,5),""),((18,6),""),((18,7),""),((18,8),""),((18,9),""),((18,10),""),((18,11),""),((18,12),""),((18,13),""),((18,14),""),((18,15),""),((18,16),""),((18,17),""),((18,18),""),((18,19),""),((18,20),""),((18,21),""),((18,22),""),((18,23),""),((19,0),"July"),((19,1),"Su"),((19,2),"Mo"),((19,3),"Tu"),((19,4),"We"),((19,5),"Th"),((19,6),"Fr"),((19,7),"Sa"),((19,8),"August"),((19,9),"Su"),((19,10),"Mo"),((19,11),"Tu"),((19,12),"We"),((19,13),"Th"),((19,14),"Fr"),((19,15),"Sa"),((19,16),"September"),((19,17),"Su"),((19,18),"Mo"),((19,19),"Tu"),((19,20),"We"),((19,21),"Th"),((19,22),"Fr"),((19,23),"Sa"),((20,0),""),((20,1),"1"),((20,2),"2"),((20,3),"3"),((20,4),"4"),((20,5),"5"),((20,6),"6"),((20,7),"7"),((20,8),""),((20,9),""),((20,10),""),((20,11),""),((20,12),"1"),((20,13),"2"),((20,14),"3"),((20,15),"4"),((20,16),""),((20,17),""),((20,18),""),((20,19),""),((20,20),""),((20,21),""),((20,22),""),((20,23),"1"),((21,0),""),((21,1),"8"),((21,2),"9"),((21,3),"10"),((21,4),"11"),((21,5),"12"),((21,6),"13"),((21,7),"14"),((21,8),""),((21,9),"5"),((21,10),"6"),((21,11),"7"),((21,12),"8"),((21,13),"9"),((21,14),"10"),((21,15),"11"),((21,16),""),((21,17),"2"),((21,18),"3"),((21,19),"4"),((21,20),"5"),((21,21),"6"),((21,22),"7"),((21,23),"8"),((22,0),""),((22,1),"15"),((22,2),"16"),((22,3),"17"),((22,4),"18"),((22,5),"19"),((22,6),"20"),((22,7),"21"),((22,8),""),((22,9),"12"),((22,10),"13"),((22,11),"14"),((22,12),"15"),((22,13),"16"),((22,14),"17"),((22,15),"18"),((22,16),""),((22,17),"9"),((22,18),"10"),((22,19),"11"),((22,20),"12"),((22,21),"13"),((22,22),"14"),((22,23),"15"),((23,0),""),((23,1),"22"),((23,2),"23"),((23,3),"24"),((23,4),"25"),((23,5),"26"),((23,6),"27"),((23,7),"28"),((23,8),""),((23,9),"19"),((23,10),"20"),((23,11),"21"),((23,12),"22"),((23,13),"23"),((23,14),"24"),((23,15),"25"),((23,16),""),((23,17),"16"),((23,18),"17"),((23,19),"18"),((23,20),"19"),((23,21),"20"),((23,22),"21"),((23,23),"22"),((24,0),""),((24,1),"29"),((24,2),"30"),((24,3),"31"),((24,4),""),((24,5),""),((24,6),""),((24,7),""),((24,8),""),((24,9),"26"),((24,10),"27"),((24,11),"28"),((24,12),"29"),((24,13),"30"),((24,14),"31"),((24,15),""),((24,16),""),((24,17),"23"),((24,18),"24"),((24,19),"25"),((24,20),"26"),((24,21),"27"),((24,22),"28"),((24,23),"29"),((25,0),""),((25,1),""),((25,2),""),((25,3),""),((25,4),""),((25,5),""),((25,6),""),((25,7),""),((25,8),""),((25,9),""),((25,10),""),((25,11),""),((25,12),""),((25,13),""),((25,14),""),((25,15),""),((25,16),""),((25,17),""),((25,18),""),((25,19),""),((25,20),""),((25,21),""),((25,22),""),((25,23),""),((26,0),"October"),((26,1),"Su"),((26,2),"Mo"),((26,3),"Tu"),((26,4),"We"),((26,5),"Th"),((26,6),"Fr"),((26,7),"Sa"),((26,8),"November"),((26,9),"Su"),((26,10),"Mo"),((26,11),"Tu"),((26,12),"We"),((26,13),"Th"),((26,14),"Fr"),((26,15),"Sa"),((26,16),"December"),((26,17),"Su"),((26,18),"Mo"),((26,19),"Tu"),((26,20),"We"),((26,21),"Th"),((26,22),"Fr"),((26,23),"Sa"),((27,0),""),((27,1),""),((27,2),"1"),((27,3),"2"),((27,4),"3"),((27,5),"4"),((27,6),"5"),((27,7),"6"),((27,8),""),((27,9),""),((27,10),""),((27,11),""),((27,12),""),((27,13),"1"),((27,14),"2"),((27,15),"3"),((27,16),""),((27,17),""),((27,18),""),((27,19),""),((27,20),""),((27,21),""),((27,22),""),((27,23),"1"),((28,0),""),((28,1),"7"),((28,2),"8"),((28,3),"9"),((28,4),"10"),((28,5),"11"),((28,6),"12"),((28,7),"13"),((28,8),""),((28,9),"4"),((28,10),"5"),((28,11),"6"),((28,12),"7"),((28,13),"8"),((28,14),"9"),((28,15),"10"),((28,16),""),((28,17),"2"),((28,18),"3"),((28,19),"4"),((28,20),"5"),((28,21),"6"),((28,22),"7"),((28,23),"8"),((29,0),""),((29,1),"14"),((29,2),"15"),((29,3),"16"),((29,4),"17"),((29,5),"18"),((29,6),"19"),((29,7),"20"),((29,8),""),((29,9),"11"),((29,10),"12"),((29,11),"13"),((29,12),"14"),((29,13),"15"),((29,14),"16"),((29,15),"17"),((29,16),""),((29,17),"9"),((29,18),"10"),((29,19),"11"),((29,20),"12"),((29,21),"13"),((29,22),"14"),((29,23),"15"),((30,0),""),((30,1),"21"),((30,2),"22"),((30,3),"23"),((30,4),"24"),((30,5),"25"),((30,6),"26"),((30,7),"27"),((30,8),""),((30,9),"18"),((30,10),"19"),((30,11),"20"),((30,12),"21"),((30,13),"22"),((30,14),"23"),((30,15),"24"),((30,16),""),((30,17),"16"),((30,18),"17"),((30,19),"18"),((30,20),"19"),((30,21),"20"),((30,22),"21"),((30,23),"22"),((31,0),""),((31,1),"28"),((31,2),"29"),((31,3),"30"),((31,4),"31"),((31,5),""),((31,6),""),((31,7),""),((31,8),""),((31,9),"25"),((31,10),"26"),((31,11),"27"),((31,12),"28"),((31,13),"29"),((31,14),"30"),((31,15),""),((31,16),""),((31,17),"23"),((31,18),"24"),((31,19),"25"),((31,20),"26"),((31,21),"27"),((31,22),"28"),((31,23),"29")] // [] // [(0,86),(1,26),(2,28),(3,26),(4,30),(5,25),(6,27),(7,26),(8,74),(9,26),(10,28),(11,25),(12,30),(13,26),(14,27),(15,26),(16,77),(17,26),(18,28),(19,25),(20,30),(21,25),(22,29),(23,26)] --- 1,4 ---- ! // qcalc 1.0, created Sat Nov 17 18:59:13 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,0),""),((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3"),((4,0),""),((4,1),""),((4,2),""),((4,3),""),((4,4),""),((4,5),""),((4,6),""),((4,7),""),((4,8),""),((4,9),""),((4,10),""),((4,11),""),((4,12),""),((4,13),""),((4,14),""),((4,15),""),((4,16),""),((4,17),""),((4,18),""),((4,19),""),((4,20),""),((4,21),""),((4,22),""),((4,23),""),((4,24),""),((5,0),""),((5,1),""),((5,2),""),((5,3),""),((5,4),""),((5,5),""),((5,6),""),((5,7),""),((5,8),""),((5,9),""),((5,10),""),((5,11),""),((5,12),""),((5,13),""),((5,14),""),((5,15),""),((5,16),""),((5,17),""),((5,18),""),((5,19),""),((5,20),""),((5,21),""),((5,22),""),((5,23),""),((5,24),""),((6,0),""),((6,1),""),((6,2),""),((6,3),""),((6,4),""),((6,5),""),((6,6),""),((6,7),""),((6,8),""),((6,9),""),((6,10),""),((6,11),""),((6,12),""),((6,13),""),((6,14),""),((6,15),""),((6,16),""),((6,17),""),((6,18),""),((6,19),""),((6,20),""),((6,21),""),((6,22),""),((6,23),""),((6,24),""),((7,0),""),((7,1),""),((7,2),""),((7,3),""),((7,4),""),((7,5),""),((7,6),""),((7,7),""),((7,8),""),((7,9),""),((7,10),""),((7,11),""),((7,12),""),((7,13),""),((7,14),""),((7,15),""),((7,16),""),((7,17),""),((7,18),""),((7,19),""),((7,20),""),((7,21),""),((7,22),""),((7,23),""),((7,24),""),((8,0),""),((8,1),""),((8,2),""),((8,3),""),((8,4),""),((8,5),""),((8,6),""),((8,7),""),((8,8),""),((8,9),""),((8,10),""),((8,11),""),((8,12),""),((8,13),""),((8,14),""),((8,15),""),((8,16),""),((8,17),""),((8,18),""),((8,19),""),((8,20),""),((8,21),""),((8,22),""),((8,23),""),((8,24),""),((9,0),""),((9,1),""),((9,2),""),((9,3),""),((9,4),""),((9,5),""),((9,6),""),((9,7),""),((9,8),""),((9,9),""),((9,10),""),((9,11),""),((9,12),""),((9,13),""),((9,14),""),((9,15),""),((9,16),""),((9,17),""),((9,18),""),((9,19),""),((9,20),""),((9,21),""),((9,22),""),((9,23),""),((9,24),""),((10,0),""),((10,1),""),((10,2),""),((10,3),""),((10,4),""),((10,5),""),((10,6),""),((10,7),""),((10,8),""),((10,9),""),((10,10),""),((10,11),""),((10,12),""),((10,13),""),((10,14),""),((10,15),""),((10,16),""),((10,17),""),((10,18),""),((10,19),""),((10,20),""),((10,21),""),((10,22),""),((10,23),""),((10,24),""),((11,0),""),((11,1),""),((11,2),""),((11,3),""),((11,4),""),((11,5),""),((11,6),""),((11,7),""),((11,8),""),((11,9),""),((11,10),""),((11,11),""),((11,12),""),((11,13),""),((11,14),""),((11,15),""),((11,16),""),((11,17),""),((11,18),""),((11,19),""),((11,20),""),((11,21),""),((11,22),""),((11,23),""),((11,24),""),((12,0),""),((12,1),""),((12,2),""),((12,3),""),((12,4),""),((12,5),""),((12,6),""),((12,7),""),((12,8),""),((12,9),""),((12,10),""),((12,11),""),((12,12),""),((12,13),""),((12,14),""),((12,15),""),((12,16),""),((12,17),""),((12,18),""),((12,19),""),((12,20),""),((12,21),""),((12,22),""),((12,23),""),((12,24),""),((13,0),""),((13,1),""),((13,2),""),((13,3),""),((13,4),""),((13,5),""),((13,6),""),((13,7),""),((13,8),""),((13,9),""),((13,10),""),((13,11),""),((13,12),""),((13,13),""),((13,14),""),((13,15),""),((13,16),""),((13,17),""),((13,18),""),((13,19),""),((13,20),""),((13,21),""),((13,22),""),((13,23),""),((13,24),""),((14,0),""),((14,1),""),((14,2),""),((14,3),""),((14,4),""),((14,5),""),((14,6),""),((14,7),""),((14,8),""),((14,9),""),((14,10),""),((14,11),""),((14,12),""),((14,13),""),((14,14),""),((14,15),""),((14,16),""),((14,17),""),((14,18),""),((14,19),""),((14,20),""),((14,21),""),((14,22),""),((14,23),""),((14,24),""),((15,0),""),((15,1),""),((15,2),""),((15,3),""),((15,4),""),((15,5),""),((15,6),""),((15,7),""),((15,8),""),((15,9),""),((15,10),""),((15,11),""),((15,12),""),((15,13),""),((15,14),""),((15,15),""),((15,16),""),((15,17),""),((15,18),""),((15,19),""),((15,20),""),((15,21),""),((15,22),""),((15,23),""),((15,24),""),((16,0),""),((16,1),""),((16,2),""),((16,3),""),((16,4),""),((16,5),""),((16,6),""),((16,7),""),((16,8),""),((16,9),""),((16,10),""),((16,11),""),((16,12),""),((16,13),""),((16,14),""),((16,15),""),((16,16),""),((16,17),""),((16,18),""),((16,19),""),((16,20),""),((16,21),""),((16,22),""),((16,23),""),((16,24),""),((17,0),""),((17,1),""),((17,2),""),((17,3),""),((17,4),""),((17,5),""),((17,6),""),((17,7),""),((17,8),""),((17,9),""),((17,10),""),((17,11),""),((17,12),""),((17,13),""),((17,14),""),((17,15),""),((17,16),""),((17,17),""),((17,18),""),((17,19),""),((17,20),""),((17,21),""),((17,22),""),((17,23),""),((17,24),""),((18,0),""),((18,1),""),((18,2),""),((18,3),""),((18,4),""),((18,5),""),((18,6),""),((18,7),""),((18,8),""),((18,9),""),((18,10),""),((18,11),""),((18,12),""),((18,13),""),((18,14),""),((18,15),""),((18,16),""),((18,17),""),((18,18),""),((18,19),""),((18,20),""),((18,21),""),((18,22),""),((18,23),""),((18,24),""),((19,0),""),((19,1),""),((19,2),""),((19,3),""),((19,4),""),((19,5),""),((19,6),""),((19,7),""),((19,8),""),((19,9),""),((19,10),""),((19,11),""),((19,12),""),((19,13),""),((19,14),""),((19,15),""),((19,16),""),((19,17),""),((19,18),""),((19,19),""),((19,20),""),((19,21),""),((19,22),""),((19,23),""),((19,24),""),((20,0),""),((20,1),""),((20,2),""),((20,3),""),((20,4),""),((20,5),""),((20,6),""),((20,7),""),((20,8),""),((20,9),""),((20,10),""),((20,11),""),((20,12),""),((20,13),""),((20,14),""),((20,15),""),((20,16),""),((20,17),""),((20,18),""),((20,19),""),((20,20),""),((20,21),""),((20,22),""),((20,23),""),((20,24),""),((21,0),""),((21,1),""),((21,2),""),((21,3),""),((21,4),""),((21,5),""),((21,6),""),((21,7),""),((21,8),""),((21,9),""),((21,10),""),((21,11),""),((21,12),""),((21,13),""),((21,14),""),((21,15),""),((21,16),""),((21,17),""),((21,18),""),((21,19),""),((21,20),""),((21,21),""),((21,22),""),((21,23),""),((21,24),""),((22,0),""),((22,1),""),((22,2),""),((22,3),""),((22,4),""),((22,5),""),((22,6),""),((22,7),""),((22,8),""),((22,9),""),((22,10),""),((22,11),""),((22,12),""),((22,13),""),((22,14),""),((22,15),""),((22,16),""),((22,17),""),((22,18),""),((22,19),""),((22,20),""),((22,21),""),((22,22),""),((22,23),""),((22,24),""),((23,0),""),((23,1),""),((23,2),""),((23,3),""),((23,4),""),((23,5),""),((23,6),""),((23,7),""),((23,8),""),((23,9),""),((23,10),""),((23,11),""),((23,12),""),((23,13),""),((23,14),""),((23,15),""),((23,16),""),((23,17),""),((23,18),""),((23,19),""),((23,20),""),((23,21),""),((23,22),""),((23,23),""),((23,24),""),((24,0),""),((24,1),""),((24,2),""),((24,3),""),((24,4),""),((24,5),""),((24,6),""),((24,7),""),((24,8),""),((24,9),""),((24,10),""),((24,11),""),((24,12),""),((24,13),""),((24,14),""),((24,15),""),((24,16),""),((24,17),""),((24,18),""),((24,19),""),((24,20),""),((24,21),""),((24,22),""),((24,23),""),((24,24),""),((25,0),""),((25,1),""),((25,2),""),((25,3),""),((25,4),""),((25,5),""),((25,6),""),((25,7),""),((25,8),""),((25,9),""),((25,10),""),((25,11),""),((25,12),""),((25,13),""),((25,14),""),((25,15),""),((25,16),""),((25,17),""),((25,18),""),((25,19),""),((25,20),""),((25,21),""),((25,22),""),((25,23),""),((25,24),""),((26,0),""),((26,1),""),((26,2),""),((26,3),""),((26,4),""),((26,5),""),((26,6),""),((26,7),""),((26,8),""),((26,9),""),((26,10),""),((26,11),""),((26,12),""),((26,13),""),((26,14),""),((26,15),""),((26,16),""),((26,17),""),((26,18),""),((26,19),""),((26,20),""),((26,21),""),((26,22),""),((26,23),""),((26,24),""),((27,0),""),((27,1),""),((27,2),""),((27,3),""),((27,4),""),((27,5),""),((27,6),""),((27,7),""),((27,8),""),((27,9),""),((27,10),""),((27,11),""),((27,12),""),((27,13),""),((27,14),""),((27,15),""),((27,16),""),((27,17),""),((27,18),""),((27,19),""),((27,20),""),((27,21),""),((27,22),""),((27,23),""),((27,24),""),((28,0),""),((28,1),""),((28,2),""),((28,3),""),((28,4),""),((28,5),""),((28,6),""),((28,7),""),((28,8),""),((28,9),""),((28,10),""),((28,11),""),((28,12),""),((28,13),""),((28,14),""),((28,15),""),((28,16),""),((28,17),""),((28,18),""),((28,19),""),((28,20),""),((28,21),""),((28,22),""),((28,23),""),((28,24),""),((29,0),""),((29,1),""),((29,2),""),((29,3),""),((29,4),""),((29,5),""),((29,6),""),((29,7),""),((29,8),""),((29,9),""),((29,10),""),((29,11),""),((29,12),""),((29,13),""),((29,14),""),((29,15),""),((29,16),""),((29,17),""),((29,18),""),((29,19),""),((29,20),""),((29,21),""),((29,22),""),((29,23),""),((29,24),""),((30,0),""),((30,1),""),((30,2),""),((30,3),""),((30,4),""),((30,5),""),((30,6),""),((30,7),""),((30,8),""),((30,9),""),((30,10),""),((30,11),""),((30,12),""),((30,13),""),((30,14),""),((30,15),""),((30,16),""),((30,17),""),((30,18),""),((30,19),""),((30,20),""),((30,21),""),((30,22),""),((30,23),""),((30,24),""),((31,0),""),((31,1),""),((31,2),""),((31,3),""),((31,4),""),((31,5),""),((31,6),""),((31,7),""),((31,8),""),((31,9),""),((31,10),""),((31,11),""),((31,12),""),((31,13),""),((31,14),""),((31,15),""),((31,16),""),((31,17),""),((31,18),""),((31,19),""),((31,20),""),((31,21),""),((31,22),""),((31,23),""),((31,24),""),((32,0),""),((32,1),""),((32,2),""),((32,3),""),((32,4),""),((32,5),""),((32,6),""),((32,7),""),((32,8),""),((32,9),""),((32,10),""),((32,11),""),((32,12),""),((32,13),""),((32,14),""),((32,15),""),((32,16),""),((32,17),""),((32,18),""),((32,19),""),((32,20),""),((32,21),""),((32,22),""),((32,23),""),((32,24),"")] // [] // [(0,86),(1,26),(2,28),(3,26),(4,30),(5,25),(6,27),(7,26),(8,74),(9,26),(10,28),(11,25),(12,30),(13,26),(14,27),(15,26),(16,77),(17,26),(18,28),(19,25),(20,30),(21,25),(22,29),(23,26)] |
From: Albert G. <ag...@us...> - 2007-11-17 17:49:11
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv20451 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.163 retrieving revision 1.164 diff -C2 -d -r1.163 -r1.164 *** qcalc.q 17 Nov 2007 16:24:39 -0000 1.163 --- qcalc.q 17 Nov 2007 17:48:58 -0000 1.164 *************** *** 765,768 **** --- 765,773 ---- digest "+++ Exiting." = STATE := 0; + // preformatted text + digest (formatted S:String) + = qt LOG "append" S || qt LOG "scrollToBottom" () + otherwise; + digest 'X = X; // background task digest W:List = process_sel2 W || merge_undo $ map (flip (flip sub 0) 1) W *************** *** 770,774 **** digest S:String = /* The program generated output before we got the "Ready" message, assume that we're up and running anyway. */ ! STATE := 4 || fail; = waitmsg $ val S where [S] = regex "" "^\\+\\+\\+ Message: (.*)$" S (reg 1); --- 775,779 ---- digest S:String = /* The program generated output before we got the "Ready" message, assume that we're up and running anyway. */ ! STATE := 4 || statusmsg "Ready" || fail if get STATE < 4; = waitmsg $ val S where [S] = regex "" "^\\+\\+\\+ Message: (.*)$" S (reg 1); *************** *** 3448,3453 **** simple calculations which execute almost instantaneously. */ ! try2 SEM = get SEM if #SEM>0; ! = sleep 0.1 || try SEM; /* Update a cell value with a computed result. */ --- 3453,3463 ---- simple calculations which execute almost instantaneously. */ ! try2 SEM = check2 SEM (get SEM) if #SEM>0; ! = sleep 0.1 || check2 SEM (try SEM); ! ! check2 SEM (formatted S:String) ! // preformatted string, pass that directly to the digest function ! = local (digest (formatted S)) || try2 SEM; ! check2 SEM S = S otherwise; /* Update a cell value with a computed result. */ *************** *** 3625,3633 **** format S if eq () (sscanf S "! File"): ! = sprintf "<font color=red4>%s</font>" $ format_script S; if eq () (sscanf S "Error"): ! = sprintf "<font color=red4>%s</font>" $ format_script S; if eq () (sscanf S "Warning"): ! = sprintf "<font color=blue4>%s</font>" $ format_script S; otherwise: = S; --- 3635,3646 ---- format S if eq () (sscanf S "! File"): ! = formatted $ ! sprintf "<font color=red4>%s</font>" $ format_script S; if eq () (sscanf S "Error"): ! = formatted $ ! sprintf "<font color=red4>%s</font>" $ format_script S; if eq () (sscanf S "Warning"): ! = formatted $ ! sprintf "<font color=blue4>%s</font>" $ format_script S; otherwise: = S; *************** *** 3637,3645 **** def TMPNAME = ref ""; ! format_script S = if FNAME<>get TMPNAME then S else if N <= qt EDIT "paragraphs" ()+1 then sprintf "%s <i>anonymous</i>, line %d:%s" (TYPE,min N (qt EDIT "paragraphs" ()), ! munge_compiler_msg N MSG) else throw "ignore" --- 3650,3658 ---- def TMPNAME = ref ""; ! format_script S = if FNAME<>get TMPNAME then htmlquote S else if N <= qt EDIT "paragraphs" ()+1 then sprintf "%s <i>anonymous</i>, line %d:%s" (TYPE,min N (qt EDIT "paragraphs" ()), ! htmlquote $ munge_compiler_msg N MSG) else throw "ignore" *************** *** 3648,3654 **** (reg 1,reg 2,reg 3,reg 4), N:Int = val LINE; ! = if FNAME<>last (split "/" (get TMPNAME)) then S else if N <= qt EDIT "paragraphs" () then ! sprintf "! File <i>anonymous</i>, line %s:%s" (LINE,MSG) else throw "ignore" --- 3661,3668 ---- (reg 1,reg 2,reg 3,reg 4), N:Int = val LINE; ! = if FNAME<>last (split "/" (get TMPNAME)) then htmlquote S else if N <= qt EDIT "paragraphs" () then ! sprintf "! File <i>anonymous</i>, line %s:%s" ! (LINE,htmlquote MSG) else throw "ignore" *************** *** 3657,3661 **** (reg 1,reg 2,reg 3), N:Int = val LINE; ! = S otherwise; /* KLUDGE: This does some cleanup of compiler messages referring to lines not --- 3671,3675 ---- (reg 1,reg 2,reg 3), N:Int = val LINE; ! = htmlquote S otherwise; /* KLUDGE: This does some cleanup of compiler messages referring to lines not *************** *** 3674,3680 **** process. */ ! post_msg S = do post_msg $ dropwhile null $ split "\f" S ! if pos "\f" S >= 0; ! post_msg S = catch () (post MSGS (format S)); def BUF = ref ""; --- 3688,3698 ---- process. */ ! post_msg S = post_msgs $ split "\f" S if pos "\f" S >= 0; ! = post_msg1 S otherwise; ! post_msg1 S = catch () (post MSGS (format S)); ! ! post_msgs [S|L] = do (post MSGS) $ filter (neg null) L if null S; ! = post_msg1 S || do (post MSGS) $ filter (neg null) L ! otherwise; def BUF = ref ""; |
From: Albert G. <ag...@us...> - 2007-11-17 16:24:43
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv12933 Modified Files: calclib.q qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.162 retrieving revision 1.163 diff -C2 -d -r1.162 -r1.163 *** qcalc.q 17 Nov 2007 13:52:39 -0000 1.162 --- qcalc.q 17 Nov 2007 16:24:39 -0000 1.163 *************** *** 790,794 **** (reg 1,reg 2), (I,J) = val K; ! = qt X "setIconSet" ICONSET where [(K,S)] = regex "" "^\\+\\+\\+ Taskstate: (\\([0-9]+,[0-9]+\\)) ([0-9]+)$" S --- 790,795 ---- (reg 1,reg 2), (I,J) = val K; ! = qt X "setIconSet" ICONSET || ! waitmsg (if Y=0 then "" else "Processing...") where [(K,S)] = regex "" "^\\+\\+\\+ Taskstate: (\\([0-9]+,[0-9]+\\)) ([0-9]+)$" S *************** *** 796,800 **** (I,J) = val K, Y = val S, X = gui_elem (I,J), ICONSET = qt_new "QIconSet" (TASKPM!Y); ! = qt LOG "append" S || qt LOG "scrollToBottom" () otherwise; --- 797,801 ---- (I,J) = val K, Y = val S, X = gui_elem (I,J), ICONSET = qt_new "QIconSet" (TASKPM!Y); ! = qt LOG "append" $ htmlquote S || qt LOG "scrollToBottom" () otherwise; Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** calclib.q 17 Nov 2007 10:39:55 -0000 1.37 --- calclib.q 17 Nov 2007 16:24:39 -0000 1.38 *************** *** 372,379 **** = YYSEM := insert (get YYSEM) (thread_no this_thread,(I,J,SEM)) || ! printf "\f+++ Taskstate: %s 1\n" (str (I,J)); end_task = setval (I,J) false || ! printf "\f+++ Taskstate: %s 0\n" (str (I,J)) where (I,J) = task_index; --- 372,379 ---- = YYSEM := insert (get YYSEM) (thread_no this_thread,(I,J,SEM)) || ! printf "\f+++ Taskstate: %s 1\n" (str (I,J)) || flush; end_task = setval (I,J) false || ! printf "\f+++ Taskstate: %s 0\n" (str (I,J)) || flush where (I,J) = task_index; |
From: Albert G. <ag...@us...> - 2007-11-17 16:23:15
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11470 Modified Files: calendar.qcalc Log Message: make the computation of the calendar a background task Index: calendar.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/calendar.qcalc,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** calendar.qcalc 8 Nov 2007 22:35:49 -0000 1.3 --- calendar.qcalc 17 Nov 2007 16:23:06 -0000 1.4 *************** *** 1,14 **** ! // qcalc 1.0, created Thu Nov 8 23:31:40 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= matrix 'A5 (mycal A3) || A3")] // [] ! // [(0,77),(1,26),(2,28),(3,26),(4,30),(5,25),(6,27),(7,26),(8,74),(9,26),(10,28),(11,25),(12,30),(13,26),(14,27),(15,26),(16,77),(17,26),(18,28),(19,25),(20,30),(21,25),(22,29),(23,26)] // Start of script. Please do not remove this line. ! /* cal.qcalc: Print a calendar. */ import date, calclib; ! show (I,J) A = matrix (I,J) A || A; /* Format the calendar nicely in three columns, one for each quarter. */ --- 1,15 ---- ! // qcalc 1.0, created Sat Nov 17 17:24:13 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,0),""),((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3"),((4,0),""),((4,1),""),((4,2),""),((4,3),""),((4,4),""),((4,5),""),((4,6),""),((4,7),""),((4,8),""),((4,9),""),((4,10),""),((4,11),""),((4,12),""),((4,13),""),((4,14),""),((4,15),""),((4,16),""),((4,17),""),((4,18),""),((4,19),""),((4,20),""),((4,21),""),((4,22),""),((4,23),""),((5,0),"January"),((5,1),"Su"),((5,2),"Mo"),((5,3),"Tu"),((5,4),"We"),((5,5),"Th"),((5,6),"Fr"),((5,7),"Sa"),((5,8),"February"),((5,9),"Su"),((5,10),"Mo"),((5,11),"Tu"),((5,12),"We"),((5,13),"Th"),((5,14),"Fr"),((5,15),"Sa"),((5,16),"March"),((5,17),"Su"),((5,18),"Mo"),((5,19),"Tu"),((5,20),"We"),((5,21),"Th"),((5,22),"Fr"),((5,23),"Sa"),((6,0),""),((6,1),""),((6,2),"1"),((6,3),"2"),((6,4),"3"),((6,5),"4"),((6,6),"5"),((6,7),"6"),((6,8),""),((6,9),""),((6,10),""),((6,11),""),((6,12),""),((6,13),"1"),((6,14),"2"),((6,15),"3"),((6,16),""),((6,17),""),((6,18),""),((6,19),""),((6,20),""),((6,21),"1"),((6,22),"2"),((6,23),"3"),((7,0),""),((7,1),"7"),((7,2),"8"),((7,3),"9"),((7,4),"10"),((7,5),"11"),((7,6),"12"),((7,7),"13"),((7,8),""),((7,9),"4"),((7,10),"5"),((7,11),"6"),((7,12),"7"),((7,13),"8"),((7,14),"9"),((7,15),"10"),((7,16),""),((7,17),"4"),((7,18),"5"),((7,19),"6"),((7,20),"7"),((7,21),"8"),((7,22),"9"),((7,23),"10"),((8,0),""),((8,1),"14"),((8,2),"15"),((8,3),"16"),((8,4),"17"),((8,5),"18"),((8,6),"19"),((8,7),"20"),((8,8),""),((8,9),"11"),((8,10),"12"),((8,11),"13"),((8,12),"14"),((8,13),"15"),((8,14),"16"),((8,15),"17"),((8,16),""),((8,17),"11"),((8,18),"12"),((8,19),"13"),((8,20),"14"),((8,21),"15"),((8,22),"16"),((8,23),"17"),((9,0),""),((9,1),"21"),((9,2),"22"),((9,3),"23"),((9,4),"24"),((9,5),"25"),((9,6),"26"),((9,7),"27"),((9,8),""),((9,9),"18"),((9,10),"19"),((9,11),"20"),((9,12),"21"),((9,13),"22"),((9,14),"23"),((9,15),"24"),((9,16),""),((9,17),"18"),((9,18),"19"),((9,19),"20"),((9,20),"21"),((9,21),"22"),((9,22),"23"),((9,23),"24"),((10,0),""),((10,1),"28"),((10,2),"29"),((10,3),"30"),((10,4),"31"),((10,5),""),((10,6),""),((10,7),""),((10,8),""),((10,9),"25"),((10,10),"26"),((10,11),"27"),((10,12),"28"),((10,13),""),((10,14),""),((10,15),""),((10,16),""),((10,17),"25"),((10,18),"26"),((10,19),"27"),((10,20),"28"),((10,21),"29"),((10,22),"30"),((10,23),"31"),((11,0),""),((11,1),""),((11,2),""),((11,3),""),((11,4),""),((11,5),""),((11,6),""),((11,7),""),((11,8),""),((11,9),""),((11,10),""),((11,11),""),((11,12),""),((11,13),""),((11,14),""),((11,15),""),((11,16),""),((11,17),""),((11,18),""),((11,19),""),((11,20),""),((11,21),""),((11,22),""),((11,23),""),((12,0),"April"),((12,1),"Su"),((12,2),"Mo"),((12,3),"Tu"),((12,4),"We"),((12,5),"Th"),((12,6),"Fr"),((12,7),"Sa"),((12,8),"May"),((12,9),"Su"),((12,10),"Mo"),((12,11),"Tu"),((12,12),"We"),((12,13),"Th"),((12,14),"Fr"),((12,15),"Sa"),((12,16),"June"),((12,17),"Su"),((12,18),"Mo"),((12,19),"Tu"),((12,20),"We"),((12,21),"Th"),((12,22),"Fr"),((12,23),"Sa"),((13,0),""),((13,1),"1"),((13,2),"2"),((13,3),"3"),((13,4),"4"),((13,5),"5"),((13,6),"6"),((13,7),"7"),((13,8),""),((13,9),""),((13,10),""),((13,11),"1"),((13,12),"2"),((13,13),"3"),((13,14),"4"),((13,15),"5"),((13,16),""),((13,17),""),((13,18),""),((13,19),""),((13,20),""),((13,21),""),((13,22),"1"),((13,23),"2"),((14,0),""),((14,1),"8"),((14,2),"9"),((14,3),"10"),((14,4),"11"),((14,5),"12"),((14,6),"13"),((14,7),"14"),((14,8),""),((14,9),"6"),((14,10),"7"),((14,11),"8"),((14,12),"9"),((14,13),"10"),((14,14),"11"),((14,15),"12"),((14,16),""),((14,17),"3"),((14,18),"4"),((14,19),"5"),((14,20),"6"),((14,21),"7"),((14,22),"8"),((14,23),"9"),((15,0),""),((15,1),"15"),((15,2),"16"),((15,3),"17"),((15,4),"18"),((15,5),"19"),((15,6),"20"),((15,7),"21"),((15,8),""),((15,9),"13"),((15,10),"14"),((15,11),"15"),((15,12),"16"),((15,13),"17"),((15,14),"18"),((15,15),"19"),((15,16),""),((15,17),"10"),((15,18),"11"),((15,19),"12"),((15,20),"13"),((15,21),"14"),((15,22),"15"),((15,23),"16"),((16,0),""),((16,1),"22"),((16,2),"23"),((16,3),"24"),((16,4),"25"),((16,5),"26"),((16,6),"27"),((16,7),"28"),((16,8),""),((16,9),"20"),((16,10),"21"),((16,11),"22"),((16,12),"23"),((16,13),"24"),((16,14),"25"),((16,15),"26"),((16,16),""),((16,17),"17"),((16,18),"18"),((16,19),"19"),((16,20),"20"),((16,21),"21"),((16,22),"22"),((16,23),"23"),((17,0),""),((17,1),"29"),((17,2),"30"),((17,3),""),((17,4),""),((17,5),""),((17,6),""),((17,7),""),((17,8),""),((17,9),"27"),((17,10),"28"),((17,11),"29"),((17,12),"30"),((17,13),"31"),((17,14),""),((17,15),""),((17,16),""),((17,17),"24"),((17,18),"25"),((17,19),"26"),((17,20),"27"),((17,21),"28"),((17,22),"29"),((17,23),"30"),((18,0),""),((18,1),""),((18,2),""),((18,3),""),((18,4),""),((18,5),""),((18,6),""),((18,7),""),((18,8),""),((18,9),""),((18,10),""),((18,11),""),((18,12),""),((18,13),""),((18,14),""),((18,15),""),((18,16),""),((18,17),""),((18,18),""),((18,19),""),((18,20),""),((18,21),""),((18,22),""),((18,23),""),((19,0),"July"),((19,1),"Su"),((19,2),"Mo"),((19,3),"Tu"),((19,4),"We"),((19,5),"Th"),((19,6),"Fr"),((19,7),"Sa"),((19,8),"August"),((19,9),"Su"),((19,10),"Mo"),((19,11),"Tu"),((19,12),"We"),((19,13),"Th"),((19,14),"Fr"),((19,15),"Sa"),((19,16),"September"),((19,17),"Su"),((19,18),"Mo"),((19,19),"Tu"),((19,20),"We"),((19,21),"Th"),((19,22),"Fr"),((19,23),"Sa"),((20,0),""),((20,1),"1"),((20,2),"2"),((20,3),"3"),((20,4),"4"),((20,5),"5"),((20,6),"6"),((20,7),"7"),((20,8),""),((20,9),""),((20,10),""),((20,11),""),((20,12),"1"),((20,13),"2"),((20,14),"3"),((20,15),"4"),((20,16),""),((20,17),""),((20,18),""),((20,19),""),((20,20),""),((20,21),""),((20,22),""),((20,23),"1"),((21,0),""),((21,1),"8"),((21,2),"9"),((21,3),"10"),((21,4),"11"),((21,5),"12"),((21,6),"13"),((21,7),"14"),((21,8),""),((21,9),"5"),((21,10),"6"),((21,11),"7"),((21,12),"8"),((21,13),"9"),((21,14),"10"),((21,15),"11"),((21,16),""),((21,17),"2"),((21,18),"3"),((21,19),"4"),((21,20),"5"),((21,21),"6"),((21,22),"7"),((21,23),"8"),((22,0),""),((22,1),"15"),((22,2),"16"),((22,3),"17"),((22,4),"18"),((22,5),"19"),((22,6),"20"),((22,7),"21"),((22,8),""),((22,9),"12"),((22,10),"13"),((22,11),"14"),((22,12),"15"),((22,13),"16"),((22,14),"17"),((22,15),"18"),((22,16),""),((22,17),"9"),((22,18),"10"),((22,19),"11"),((22,20),"12"),((22,21),"13"),((22,22),"14"),((22,23),"15"),((23,0),""),((23,1),"22"),((23,2),"23"),((23,3),"24"),((23,4),"25"),((23,5),"26"),((23,6),"27"),((23,7),"28"),((23,8),""),((23,9),"19"),((23,10),"20"),((23,11),"21"),((23,12),"22"),((23,13),"23"),((23,14),"24"),((23,15),"25"),((23,16),""),((23,17),"16"),((23,18),"17"),((23,19),"18"),((23,20),"19"),((23,21),"20"),((23,22),"21"),((23,23),"22"),((24,0),""),((24,1),"29"),((24,2),"30"),((24,3),"31"),((24,4),""),((24,5),""),((24,6),""),((24,7),""),((24,8),""),((24,9),"26"),((24,10),"27"),((24,11),"28"),((24,12),"29"),((24,13),"30"),((24,14),"31"),((24,15),""),((24,16),""),((24,17),"23"),((24,18),"24"),((24,19),"25"),((24,20),"26"),((24,21),"27"),((24,22),"28"),((24,23),"29"),((25,0),""),((25,1),""),((25,2),""),((25,3),""),((25,4),""),((25,5),""),((25,6),""),((25,7),""),((25,8),""),((25,9),""),((25,10),""),((25,11),""),((25,12),""),((25,13),""),((25,14),""),((25,15),""),((25,16),""),((25,17),""),((25,18),""),((25,19),""),((25,20),""),((25,21),""),((25,22),""),((25,23),""),((26,0),"October"),((26,1),"Su"),((26,2),"Mo"),((26,3),"Tu"),((26,4),"We"),((26,5),"Th"),((26,6),"Fr"),((26,7),"Sa"),((26,8),"November"),((26,9),"Su"),((26,10),"Mo"),((26,11),"Tu"),((26,12),"We"),((26,13),"Th"),((26,14),"Fr"),((26,15),"Sa"),((26,16),"December"),((26,17),"Su"),((26,18),"Mo"),((26,19),"Tu"),((26,20),"We"),((26,21),"Th"),((26,22),"Fr"),((26,23),"Sa"),((27,0),""),((27,1),""),((27,2),"1"),((27,3),"2"),((27,4),"3"),((27,5),"4"),((27,6),"5"),((27,7),"6"),((27,8),""),((27,9),""),((27,10),""),((27,11),""),((27,12),""),((27,13),"1"),((27,14),"2"),((27,15),"3"),((27,16),""),((27,17),""),((27,18),""),((27,19),""),((27,20),""),((27,21),""),((27,22),""),((27,23),"1"),((28,0),""),((28,1),"7"),((28,2),"8"),((28,3),"9"),((28,4),"10"),((28,5),"11"),((28,6),"12"),((28,7),"13"),((28,8),""),((28,9),"4"),((28,10),"5"),((28,11),"6"),((28,12),"7"),((28,13),"8"),((28,14),"9"),((28,15),"10"),((28,16),""),((28,17),"2"),((28,18),"3"),((28,19),"4"),((28,20),"5"),((28,21),"6"),((28,22),"7"),((28,23),"8"),((29,0),""),((29,1),"14"),((29,2),"15"),((29,3),"16"),((29,4),"17"),((29,5),"18"),((29,6),"19"),((29,7),"20"),((29,8),""),((29,9),"11"),((29,10),"12"),((29,11),"13"),((29,12),"14"),((29,13),"15"),((29,14),"16"),((29,15),"17"),((29,16),""),((29,17),"9"),((29,18),"10"),((29,19),"11"),((29,20),"12"),((29,21),"13"),((29,22),"14"),((29,23),"15"),((30,0),""),((30,1),"21"),((30,2),"22"),((30,3),"23"),((30,4),"24"),((30,5),"25"),((30,6),"26"),((30,7),"27"),((30,8),""),((30,9),"18"),((30,10),"19"),((30,11),"20"),((30,12),"21"),((30,13),"22"),((30,14),"23"),((30,15),"24"),((30,16),""),((30,17),"16"),((30,18),"17"),((30,19),"18"),((30,20),"19"),((30,21),"20"),((30,22),"21"),((30,23),"22"),((31,0),""),((31,1),"28"),((31,2),"29"),((31,3),"30"),((31,4),"31"),((31,5),""),((31,6),""),((31,7),""),((31,8),""),((31,9),"25"),((31,10),"26"),((31,11),"27"),((31,12),"28"),((31,13),"29"),((31,14),"30"),((31,15),""),((31,16),""),((31,17),"23"),((31,18),"24"),((31,19),"25"),((31,20),"26"),((31,21),"27"),((31,22),"28"),((31,23),"29")] // [] ! // [(0,86),(1,26),(2,28),(3,26),(4,30),(5,25),(6,27),(7,26),(8,74),(9,26),(10,28),(11,25),(12,30),(13,26),(14,27),(15,26),(16,77),(17,26),(18,28),(19,25),(20,30),(21,25),(22,29),(23,26)] // Start of script. Please do not remove this line. ! /* calendar.qcalc: Print a calendar. */ import date, calclib; ! /* Set up a little task to compute the calendar in the background. */ + calendar KEY Y = taskbutton "&Compute" (matrix KEY $ mycal Y); /* Format the calendar nicely in three columns, one for each quarter. */ |
From: Albert G. <ag...@us...> - 2007-11-17 15:29:33
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26201/doc Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** qcalc.xml 17 Nov 2007 12:53:05 -0000 1.16 --- qcalc.xml 17 Nov 2007 13:23:54 -0000 1.17 *************** *** 263,267 **** <para> ! These functions are used inside formulas to access the row and column indices of the cell currently being computed. The index function returns both indices as a pair <literal>(I,J)</literal> where <literal>I</literal> and <literal>J</literal> are the zero-based row and column indices, respectively. Thus <literal>A1</literal> will be returned as <literal>(0,0)</literal>, <literal>A2</literal> as <literal>(1,0)</literal>, <literal>B1</literal> as <literal>(0,1)</literal>, etc. The <literal>row</literal> and <literal>column</literal> functions return only the row and column number, respectively. </para> --- 263,267 ---- <para> ! These functions are used inside formulas to access the row and column indices of the cell currently being computed. The <literal>index</literal> function returns both indices as a pair <literal>(I,J)</literal> where <literal>I</literal> and <literal>J</literal> are the zero-based row and column indices, respectively. Thus <literal>A1</literal> will be returned as <literal>(0,0)</literal>, <literal>A2</literal> as <literal>(1,0)</literal>, <literal>B1</literal> as <literal>(0,1)</literal>, etc. The <literal>row</literal> and <literal>column</literal> functions return only the row and column number, respectively. </para> |
From: Albert G. <ag...@us...> - 2007-11-17 13:52:43
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4914/examples Modified Files: guiexamples.qcalc Log Message: bugfixes Index: guiexamples.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/guiexamples.qcalc,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** guiexamples.qcalc 17 Nov 2007 08:26:40 -0000 1.10 --- guiexamples.qcalc 17 Nov 2007 13:52:39 -0000 1.11 *************** *** 1,4 **** ! // qcalc 1.0, created Sat Nov 17 09:26:50 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),""),((38,0),""),((38,1),""),((38,2),""),((38,3),""),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((39,2),""),((39,3),""),((40,0),"The file you chose:"),((40,1),("",1,5)),((40,2),("",1,5)),((40,3),("",1,5)),((41,0),""),((41,1),""),((41,2),""),((41,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] --- 1,4 ---- ! // qcalc 1.0, created Sat Nov 17 14:50:23 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),""),((38,0),""),((38,1),""),((38,2),""),((38,3),""),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((39,2),""),((39,3),""),((40,0),"The file you chose:"),((40,1),("",1,3)),((40,2),""),((40,3),""),((41,0),""),((41,1),""),((41,2),""),((41,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] |
From: Albert G. <ag...@us...> - 2007-11-17 13:52:42
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4914 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.161 retrieving revision 1.162 diff -C2 -d -r1.161 -r1.162 *** qcalc.q 17 Nov 2007 12:54:58 -0000 1.161 --- qcalc.q 17 Nov 2007 13:52:39 -0000 1.162 *************** *** 1040,1044 **** is_spanned (I,J) ! = (N>1) or else (M>1) where (N,M) = cell_span (I,J); is_empty (I,J) = false if member (get EVAL) (I,J); --- 1040,1047 ---- is_spanned (I,J) ! = (N>1) or else (M>1) ! where (N,M) = cell_span (I,J) ! if (I,J) = real_index (I,J); ! = false otherwise; is_empty (I,J) = false if member (get EVAL) (I,J); *************** *** 1431,1436 **** get_spans SEL = sort indexcmp SEL where (I,J,V) = unzip3 SEL, K = zip I J, ! K = map real_index K, ! SEL = filter is_spanned $ keys $ hdict $ zip K V; move_spans (DI,DJ) SEL --- 1434,1438 ---- get_spans SEL = sort indexcmp SEL where (I,J,V) = unzip3 SEL, K = zip I J, ! SEL = filter is_spanned K; move_spans (DI,DJ) SEL |
From: Albert G. <ag...@us...> - 2007-11-17 12:55:03
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14702 Modified Files: qcalc.q qcalc.ui Log Message: new manual section Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** qcalc.ui 12 Nov 2007 09:57:37 -0000 1.21 --- qcalc.ui 17 Nov 2007 12:54:58 -0000 1.22 *************** *** 340,343 **** --- 340,344 ---- <action name="helpViewAction"/> <action name="helpPrintingAction"/> + <action name="helpProgramming_QCalcAction"/> <action name="helpCreditsAction"/> <separator/> *************** *** 1209,1321 **** </property> </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="1635">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af40000062a494441545885ad975f68dbd71dc58ff267282363da48378d3e541b5d36b342a73246150a9b87b719e1074da0c1047e88581a30e4c1983d14938111e92822b00c0726901f02d24b1066359a3026d283a8343093282a3fad68f06b118d1efca0b67af8656883cf1eee95233992e395fde0c7e17b65eb7bceb9e77e7ded03e4f3f934efa1a080f6f5172deb27ad7de9b525498f242d49ad47b6de97b42c35f6a56bcbb65e921a8fa46b133f7f5cefeb732de9beefa6b67ccf23d05cd5fbaff9f5eaa72f4b5fbb2c3d91744967c0ff48972eccc14fa4eac7d2cf9ee8f702e6ab5fd5af2808b2020630e2fff31c2cc08120a14fcecded6e9e70e73d496f46a47fff4bba2875fed19024753e988d8dbffdf5d4cf3ffa6743fa79474f3e9224bd78aa03f5df284d59d0d930cc478e41d740a55c9faa71cf588f0016a824c4f3b620eddc92f925af629b56200be93b15d25bd03c34ebfdaec1e6617eaa3e896ea7f8741b9e4be0d8813400f91da00ba53df31d99778c3aa791330b169fd6dba6de5b33aaabe67b181681ca1908dc4efda9743f0305c83f68c208528535228508c1ad200c61ed56c93a54b74a8d03f432c01ab45253d82f0481109403f30970c07546bc5fdc75c0835cb9c860302053cb18e5bd0cc17e90cc410e6f17288f4958ec6e021eb4d79ec56108ca8291a8c42608340ffb0160bd52753f06a8d75c3223481652c646cf61934d02b50042a82a425b21b6ef37e11630b47b5f4b1ac59dd44cecef06018d8fa121d06cf147e0536a46c07635c76030a0d4358af24779ead45155a6f9a10812c47fc70f4032918721d0da002f02b5a809472d6e71a2f682509321317600c0e90c0088642326cdc326006bee1a61c2a826fcf809b6838408b1900d1bc547b0b10ee9b7724661236a14bba999d83fb00e1c4e12a8b1075077eb389e43ee28878747a41d314a5b7e1658207410c21938e40f4b36dd2678c53de8ef00ed0da3b467f77c2686a06dda1e678021bf2895cdb4083f0813268cffd04f8000a17688051658ab9a61343046e1dc3347acbe6a32925c2dc29d34cd721888e23616676335601ce84c3820e9021e3d1ae6cb43b510152a2c56174db3be591f4fb4e6c30a74804412fc7e9a0febd083d46a0e468bd08a02ce1c0c827b2203927cb99dfa4d0ad0ef1b89a58e995c83a1eded7a007843200bfd60102e0770030143aae5914c403e9b02a2f45b518b8b53b5dbb00ef4a60988062fe4769a9f992ed38ae95a3c32907b00f4a1f4d3281c003db3beb9553773a16315cfc4201c9dc8807dce718f3fe4ee9bf4f76db3b103a53dc3c6e97af000dcded819e358bd6558c7137918c46936c240e419745b7ee3c0f0840392b479bb789536d46bd3ca9dae75c5d6cdd609878eecdb056f17d25b19a3d88dcec0208c9ecdc0b10be9ad5281bb4fd35e3a708d62dbcced0e2c898175c0ace70b8e459764029c56dcecbd6b33e0da0cb8260383f66c02e2805f6ebe65950da695360fa7d7f30f2dc9b259abdbcf93ab4568039d1050b2b860d186b0254a2b7a3ceb8fd179d6f920f38e1932e3bd1e5fc7ea87d681b60703bb3d40bf674fcf9e0b7721753d0703e116f42cde16a515917e5debb308f85237f237bddda77b7eec44d52adec3cc7e3b379aed892c5867fa3bb01d5b8498493b31c18ac1d28a3ee475ad4bba3aef3e703175bdf819f726d30e14cc7907703a9e75c883917504a854cdd44add28128ff1a1a457252d48ba3af17e57d24b92aecc23e0ebeff0766ab5389581f11e1fa7df3a93cb4e38d3858ddf1907a22bdbefda6657247d65e2bd2c737bbf30f746147963e31bc904e4b2ce946246e63d76a20b640db9f41d330792091e877fb4f65b49df97f44d495f9ad944d26957b273f158aee0ed723ce9b043a958b68acb662d73b7c9a000f1447ee82c9191f40349dfb6ca2f499a7ffd3f8580e22bfc386e2f1b4ec7badf33d6373ba679ea46916402a2cb99423018be26e96549416bf30549f3ffed7a1e0149e7fb59de1bcf85ba4d7d6ec79c8878228f1be3efe11f267f2de97b925e94f45519cb4f6f7c4602be782cf7663201959a495ce66e936402e2b1dce3c53736d66512fe92a4af4bf2eb34bbbf000149ba184fe47b9421b55aa49f65185dcefc59d22b92be23e905495f96745e6755fd3f12f0c563bc1d4fe489aff06ee0cac23599a3f52d992375f10b35b6cf7f01a60e35d27edff9490000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="700">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000028349444154388da594d14b53511cc73fc6042f246c6f2d0814129c44844fd653bb6ff9540f1234e821a1075ffb138a5eec517b080da26910d3a26288e015065330b681b205119b90b830d964caaea9f4ed61bb73baa99b7de1f0e5fcb8f7cbe79cf33b07493823343da7e2b2149a9672cbd259f32fb3b12bd5ff578f23935c5c2a165557c542c9d369494529ba94542e2e8566635d670687a6eb8756540e575a524e52aa427efddcc48e72b99247979292a4585c0e79df29c47367203be9e5b121a9282952220f7e8a05ce4dec28ba9494368e7a2e2e05df04bbeb1037165a514152417f63f1d20a46c6b5b91e59bf2b890b54c9ec00dba621d9db800b5233532dbd2b19526be007ac8c057034d85ab5308c06523360fc02d6a0a76f177ccfe8b90a89ad17ae007400b448aa7c9f4f203aec7d8fc7683d8dd4f83c0877bcf0c38dbd9bc0b8e12633d34be74086ec4b2beb1d5ab87c8c183c1ea395ed72c171677bf260b4035d4fc0e583ee5d8c6bfdb0069d033e58c9d346e0d509c4e0f194c9da0f3d9f2fd5b3f35378dd8b64bf66f03ebe04fb3dd0ea87cc6b78bb70906237d2b39a7957bf8ff7caa75e3ce60549a911696f5852acec694963929252a15c7fdf6fd710b775533ac07da0f5d06dbb54cfffcce27179c97e18c43be405db0d8609f9300c870fa6763ccf7b13e160737decac2412941495be0f49eb63d2f223692324e59e4ae337279bef63a757da2cecc428b847b1572de86823bfe983ad6fcaee700b38e75b51add49834fb409234321a543a9cbc5f87d86cf8e639b2dd26dc9e00c08fc9c2efc41fa8b9793476f3aa64783b2b5b348f85d9695213dccc5b514f7eccff7c2b4e5035714d1f4f2e4ee0c7244c987efa99c76a6a9eb868dd0b3c0c7cfc07200abc03b775bdc40000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="1005">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b449444154388db59551685b7514c67f1957c8851613f0a1811472a163363868f364830f6b862055c1290a7df041eb8bd581522b8888cab607b756994c44b0eec55490d94ed665e068261b69a1a36969d71858488b2b4d696773694bee65463e1f6eba35d8f920f683cbb9e770f9cec777eef9ff7d92d80f1cd817d6ff82f1a4227d1f4d5fcb2455eeeb57e0ff213da577ce9c5d284b52b158516fbf461ffab1a4873e3b38714a6d99a466c6afcbc39a17be1d922e9cd50b7bf1fa22af1575ee8845aa5a0682b8d53254830c5fcad9ce9568f0e4e9ec273de1d8c7744228044e19cc20944a5efed6fb13b6bb1db7befbda67d731777e234d576a4a36bc30b6221557a40f3f7b5093246dd62bd68af7ded99d19a54d913ae28efea22429b3b98b744efafec7a2ea70afd6bbd66865e5417e6250eaec1eafb3c4e88a58e040bc112ecf43d4062b02d6cb56bd698f005b100c02eb351b4e43e2202cbab0584e7c415ba60de250055ffbbb45653fb798d8026b154aae43ecb0f9cf69fce991ef786cbd92a3eb489450b34357c4249577701d73cbad3af6e019b3d1f0472cb235c5c96528dd3049cd43c282d4ed5afc0dba6a796733bcfd438ea1e351d2dbe0374cdebb012fb59a0c8cd2b874d55c83f4afbef6e34565bff4140f9e878051e2dcf32126b72111819ff2100f43ea16744460e49683ff711377096616a15c05d380f2b2c3cc15f32fd79e0023fe86af6f501a781330c13c96c3198dc21da079970d2558f4437216da03303c03ed4118be09890618ba04f62a366ef60e0db143c02123955f64c0b43879d521d11ec501cc66b83ceff0ec6193e43c58060c4d826d436ad5c1b64dd2eb25dced1083cb59a8c6603bbb861133209da37074e9002d9ec7fe7593173bc00426b620d66232700d5a033092874433b82e103629bb60db216c1b688801393062601080c4cf00079c7c8e98098363397a9e86f43ab436c24801628fc1c82c10f606e854a1345bc62e814b09bf1fa8e6802854b360f028d5f445005fefa752b01d2c177a9e011a3d4f0941f226c403902a78de0e4d42ac015279e8ac0d341186917928dfe58fa5e5f4164b47bd05687a75411d1f486353957fddb462b122dd9316e636a40d2933b122fd2e8dff52542527bdde3f2d223a7f7fe04dfd5253f782f6c44eaf9db3a1a81a79ad76ddab8da5a4dee724c2bb4fba2733eafd6a6f5e49dad8dca5b8224d4fed285d50654eba3032ad8d298996f1ba3bcec75352eb41083c0114bca54815c01f01b79023118e922a7803746e4f4035eefd1d80eba6f193c0de06f72e1759f61dbb4fac7dba4cff06b652c1f8e8556f6f0000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="941">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000037449444154388dd59431685b4718c77f2d0d48d0c106176478023db0a111eae037550f0ad5d1e9992eeed63153ba74c9543aa625437021d040172d056bf27b1dea7709849c4a87e752d7b2c1b2246a61651096a88d255a111dcdc175901dc5d8a9e77ccbdd71f0ddfffbfd8f3fbc69f5d6f9c6fe696fd3e51e0ea86e8de29c876c817040751384e3239be0bb209b31a5ac403625c2153cac56f0de5dfa39dc8abeacfeb23abcf0c253b53db0d6daa3a3536badb5771f6cd88d6f4fedd7abebf6ba7a7e68edddd5755bfc70e3c7f37e6f9f6f84e34107e6e76701480d5d2afd089115d78e1dd521580cd0467e7aa971d84ac081c6410f809d932a37173ea7f3a2796d639181ca5604465fbe3cadd9816d586b9f4fc63baa596b7f9d9effafbe2f6fd8f50787f666e1d6e09262d954e040d2ea4c502c8ce12318e8310083c164ed1d5f5c1b7b1d7a7d8fa81e82990a9d32ce0a9216f819173661769826ae36489da4091f01dd346b3f25d04d53aec0a09ee69bef42fa3b297a2711c2118c5f41f1b271d48cf11d08eb350633b0b69be0cde4a9ec267803a86c297ac73ee56a88fbacc7c327653a5d8ff26f117a5424aa47572b2e6505b421c87924fd062b059fe404560a3eea4642b028c0c4048b01ea1dc5678580d99462a510a08da2f442a0af32effeeafae0f9a1b51b6aff8231a77f4ddc3b3a3cb5f65f6bf71b87d6fe6dedf6effbd61e59fb546ddb5b5fdcb7c54feed84c66e5b279222b90ad1a22979fbe760cb3efa527ffdb99a5d182bce3420b3c278f6ad5108e87d680295d503c65bc27118e47544f0048363ba0413d698081f8710dd740f838a17700e5470af7c0636d53a1b58fd6d1050253c539816c813fe74307fc820b7d10853c49bfc172c143f52178df27b991b0f2812049815814682311465c6d5e58972c8d21dc8b610e923f1a3007f16e8da5993ce16e823f07d18ec2ffc727da8a591a8d897662c6634da8e56b143b45e4289e64431bfc853caadd6039e7a1da20723ef22041b80269402c2e53358ac015680320d0667c05e3ba446b9f684f8203aadd40e4f2c4ed1a2207b299208c8f3c5008cea2d308c2a6043d468f5ec73823189e4414673c54bd8670f2c4ad49eac9a622707da48911d9225287945c1f692244c667381a82295d60fc32e84b1fdfb9ad75e99ed611f3cefc595295181b09260d8cc1046873c6d2682085369aceb33ec3d18014a9afb4a9fec01b59ff0133582f19ec2fb80f0000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1101">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041449444154388dd5934f881b6518c67f4db36516ff9040561298850cb6b01bbad20c7ac840a9f9a808533d981e84dd8350f1d2f5220bb652040ff5507a52dc8387ada75d41cc9c9ae9419c3d8889609994269b0deed2041b9ad0ae4d68d3cea74efb79d8ae75ff5c7af4bd7c97e7fbf1f03cef0bcf30ea0b0e285ffb5a79e71e2bef727be553fb63759c979e85b137788129759d15a54e2975fb67a56edf0d563ec99f57c719dda98daa1bea8cd7f6cf0add840e0409709a656cddc2eb80d0c159f5b00d01374f4499729fe3d74b90f0a092d1324939f93e050d9c601bf9476f4529a5d4ad5b7795524acd5df85ecd7d7e575d9cbfacb6cd5f0f95ba9756ea064afdae29f55d52a90b5975f1a3732afbeae92f773a8e083d032d48a5e200c40606dd9e83352eb62b477a30684322064d0d9271bca181383a07216fef02979a3ee8d0687501a86e54983d384d2bac6e57ae7d08e3c94da89ea25f01e3f91c4b550719ca5d7d4444dac46f42464f01f0d507b3c86c8b99b7aca7aaee221c4ac36a1cd229a8c688e72fb2488a5c22077b819d9a87a983df6c01a04d0488a319fac3cd2efa77fa9070a15b81640cea1ac838fe5a9bac1438759720dcc525220c01eb60260cbc4a83f86094d232681ba314aff8c43706d0e9426a1ada1aa467a0030369e36c38085dc05e60b756021d8a759f6c2cc3e2351f33064bd7ca987d9356e73c182958ab403a4570d5c3efa559b85a44ca00a7eefc079c05b251c8ee8b08e304a566033b6d52ee41e1b04979c3a73061d11899c7784340578374019a3146a382a55886c2e193c810f27f8b27e5cd8d002f0231e085fdfa91a9cfde7ded18955e83378f8d311287cccb2964a4cf2b471270ef0a8c8dc26f2dd06cfcde80f7de99a5b7bf45edba41a5b7c8a037bc3f7c585d020e00fb81031161d8b8eb20d299a701dd81f8581cdaf3109f869b1a1c9c81aa8b39310b4dc8254c064307118a1deb26b63276104f320628575a20a1fc4319f414dca9c078019a65e8c4995f2ed1a8055c5a2e12041267e8eca8cd03781cb1d202a759c64a9ad002ebb081df036bc282f6248ccd42b70b439385e824f621c172d4c53e6423e5a64319065b4e1f010f8041c4adbbe4ee5b38550f12e05d6d6026a0fccb22e827a1eb43cf60e1a755721428d65c82a1a05873210c08a40ba0c0bb07fc01dc87ea9f91bc2e708625f2e339fcadacd7c14a0a4adf9c876bb0706599dce429dcd0451802f9ef2bb79c3e86ea03a83e82aadabcbc7a11212d9c9a8ba983b7de803494565dac4e8b85d52ab9d829dc351710b86b2e76d4c66b790048e9ee7d205652e00c1cac9805f54dc7a5661931358d7bd0c6ce4e5389ba9c9cb421ea5298b4f1a22e42b7908301c8604ff0befceb7367a40cce4a2949e93310ba000412208f0c5d34403ef92c438986860c25ad768fc1b08f86765a86cbdfeec6ff9fe61f907efb04495f04840000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="959">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038649444154388d959551485b571cc67fda3812e640a13253dc3090ae2a3eccd03212d6072f1d94b8c19697313af6e0f6b0873deed13d946e0f9d754fba51708382b560531fda18a154071553b63689a8b98ab87b45ddbd41b3a4d8910463f7dfc3bd11edbc8e7e2fdff95fcef79deffcefb9e78203441333332f65294a596c7eb18e8e4d3d74d23b22a31acfe538ec8a88261b40cd51fa5a27e30ebfd779d50a5007ac3a4f71345697f5239f976cd352056871367684ecc87f5bb16b73d1a2d8dd29c756382299ca1c322edaa6f99d2a17a59872eef191085f08b7c9d681c42f24952d8ba23763f9aeceae578ff2d85f2d7c31dcc31ec1f0479148eff9cfdf4aff9d3a110a062855c053078567d0f81a98db25bc4d1e0adb25dc9b1ec697ee9497e6d24f128f13f73d2ecf9df883b80ac0e0fb8327ae7cd7ff878888acdb8912f6d8deb6e46d366c5eb168f8e7a81cd465e645a25763a3d5a45f8a881886a5368cbc145591ccbab56fcd389a33eb4591bc48f2f7a4c5a98cc88ec8ecc3a404cf064324c732e96acfaa3c38367ba89eb593c6342bfcc88a487e5764785e44342ba9b6222229eb3d74bfdbfd83cb74ebad347550d82ed1d8e441d74dd44a88a10508b6c2d0af906d06e6c0dd0a3f4e02ad30fac0aacd99047d9f84d0d74ce8f4a2af99787dbe332ea5a5e7159e4163930736c0e7f3b2360369e0ab5b800f9871e6aea61064c177da6be94f7bf19e6c7cbdf69b5b7d15362195d6e10d286c173073f0e83690b54d8ee1d1054ba7eb26b860e25e023357785e33757df6cf9297533dfe1013abd0e387444e25d4d6c1c432045ae0e622f8eae1d106f49e8374162eb5016b565b269e24a8ea153f7c71e5d27d577c79fcaf6bef5d3b35bd96a2a733c0d73f7d8bdb05f17be3282e8581bd69dc2e48ef41d8a5f0cba255f74d82e25288ef4dd37c3282a7ded24fafa6785a786ad4069b839be440e90c90d85469780c664e27120c936a48d01b8cd0d0e076acdbf1b2b43880d219209503c51fa0542e6d10f930f2a96c89645443242fd27fb55f242fa2699a756eff87637763a25d3724a36a224591e878ec9f767ffbdb8c5c1ea91bb9112def7f59d533fd1248a6ec8121327b23b902b86a00bace76bda99c572e47ea2367dc1f34bc1338d7e1784fefa37ad957a0304779e076df6f66ce9c8f4fc6bfcf66b39b87e60e0f452fbe54d4ea6da78a745f18ec38e8752859b83efc99ae9b807d2e8f6175c9fac3a80b3a34034c7f7cd0eb5f3d456ef41bb110460000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1134">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000043549444154388d9d954f681c6518c67f9b7e89331a650712d8c1b464b40177a0228b3d64a142062acd042f693d34bd28a5070dedc12e52fa47c4a4a7b682a278b155286d4fb648c954884e0fe25668d91452679504a7d0d2296d7006b274bec68fc6c38cbb6d4041dfcbc3f7bdef33efc3330f33851f60c0174c4df695267ce8718486af24ff073d2557ca4bc9594fc9238543f0d5f436f7ad48a698ad8440812d58831a01125b6884802534422496d08814980222c0ecd58915cc7def7f5db8532a3d345f2af7303a09c5042c0742bf83432e841e94c7335cffd8fd82d7e90fb970e104cc9b9cbc36bd52f8b2545add3d6012bc3981ddbb9d100f0b37c3ad93c42ac028dbfc5de9fd18bdd720fc6e066bb9428c8f8193a1aa129fdb8dbcd1a470676070d5ec3360ef6704777dec4117ee5e81772641e7dfeb6a0312a3a3bce9c1a59433d74fb0aefcb4f661a5f7591a4fc5bcacba099226fd070f4077c60d2efbf45f4cf1bffd04eba73a8ddf16303754e019e07993f439e8aef712dff3d0a522fefd32ebef4574b94003a85c352089b0f74eb705cd7c308d7d25869ba7704ac39024549405c76a301bc232e8fd066c91187d5568251862040fe8f294a402ccdc3e09bde3d09f3df49bf76b8cdd0c09163d68c5c443c09e29c2eb67a095125d380ea7c36c784b95c6521de430b1f270802e5768a0604cd3606b2ef5e20cdbe74b04cb09765f15062d8cd13128eb58afee82568259aac2b5e92c674065670dee9ec5102ebeca1523c007181dcbdefc258f46721ebb2509e6ce8070dbf6f8377d58964473e7a12549cf1dcf38441045c4ea72a6d841a30138c55d6df2f9f926155985a508bb25417aed9e33e0402bc694c31027e82d13007dbd0942c71023f8c88ec7753ae47101013e088d4049509d84f98bd95c9c2f8b173b3c608dc7405502b7b2a6bea98c2d3410606be34f109d8d992d8696e3b6fded5e43a56b3c061a4890f9c49ee304f921541ee0ac51ac132b0f046026d9dcac4f45d31f534c9e63e1c217b58cbd49c7de3905022c4d83b9a3d9fd2d70e61a9952e1c2e66118c9965a0b80d03084fb648e037cf8b14e74690680f4ed2a6c3e44a424c89468c4810987580002d2cd123e3a9c2d6c4278611a44e6fd0850f8a5585cb5072dc83da5380ea76a60d226716e1a84058b1ebcb11ffa2a30f298f1a363a0b9800fad613efff9288563bdda6a6d639940d0f9de160da27def62e6b9fec76aa6d4dfdb4155cb02403744f763e26b7374b9798e6d6dbce3a94c313f6ec2c1c310d24e4bbb667df87406f6eda09aa783a10c4d011e92c2314d7b581bb47ac26231fb2388ac192b30844e4c8a21744201968250a5589a0ee4d6e54af913e8d6682c34f17f6daeac3b8078b1d1c52b550a048f142f2807e43cfa0a04326183724036311e489012e3d1ebd09a8715050f1278f01ab4e66045d1b8739bf252ccec1f4ba70bfb61c085a9ba6042135a0f796abd4c13fff1bc924879d681237f0155d7ea55f552a97d0000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="663">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025e49444154388ded95316853511486bfc417b8190279a09080c8bb50a4190a2f22a20e92ae372db4954e0a26ea56a10e828be0a063440ac926a48bddf210c13826e060c1421f568883f8220a0958ec838a79982b75485a6bd3d22c1d04eff20de79c9f9fc3f9b9a1adad2d8ee2858f44f59f14364a9325aa5451a81dde4bcfe5c428e5e03d8b0f574bf9bdf5611852130a8120204020a89ea8e4807261d2a3f44ae2f9e4d5d7cb8bdbf5611956280202140ac7ac64b02817a6616e5af2601612a3941db392dbdd370c8f711a048247b1824d989777cfb4c4b50b319ebf854ba740fceaf0e66364ca099dfb34f6d3711b3410080e6358a17062151b8bdaf5b3c4552a49691992024acb703111e5c6791023949dd8f0ce43ccfeb031a2b5b4453c958000100cb2f51d6aef00ddc9cf74ae1ebaf33056b48626de10e0ac40d58756001792e007d0306069055eebfe1d59d1b213add8873b9efa9621624277833e1fa753a62d44cfa9e743f30b3edd8d3c11d3a7bbc18cbe593fc8a9633cb18998b570512fd555275bdf2698aeb70e581068b86203823898f7e9e216f552fd20a78e51b90de62a5dea0377ec50cc104dd6521608e34f92569b40071fed2d60c845a5b3cd5e7fc1c29053686f1e435a68cfc79032549c280e24e7167335c6c8a43430027c0035024f5d68c781b5ddd90522fdbe357c0cc695ceba038e0302aabc8883e7119371eb787f58efcf2080b60f6c7a3ec87145d61d48de3615591f649a4ddce66768ae4370b22782d5a39f80661bda2d60936720a522ebee5cc57e8effde792107721e3c1b43021ba04dc06b82ac83b730c31d77ef5ce8ff0f72e4c2bf0141155cdbbf8347900000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="683">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027249444154388ded95316813511c87bf2b11ee20853b68218116eea083850a29e85071483a956b8598d2a53af4aa5b0b524827bb088e0e0a898b623248b7c629874b4da7a6e0901b840c2ddc81420a0ddc41c41cf4200e67624c94ead041f02ddff0defbbd8fffff3d9ed0e974b88c317229a9ff6470247f3b8f89898edee3cef44682ab3ce43349710af53e101f879d2a885358bec5f327f57c71705f3f057d494744c4c7e7fd7859060a9a4c7a7dce269bd6707d5046c16d85dcab342855e3944eb0803bf3678b4e777f3f4774f43074b69c20c0de3748e70cc8a635704011e1f03824c7b07c2bcec60aec1b2408a899b365d9c7a79bd3a5a02fe998a3e50450599d41069bdaa946bd09444016dbacce4868932e77af2b980ee82a980e1c56e1b5c541a6b59c1a3236af9565a0828abcfb1167f78bb6556fa2e55a79417717056f4cd25e1cf178fb83e23d78099a08f9a390ca04c466489646f79243c6ac7c7d4b444a13b4b732ed7bcf064feeb224bd9189481575ac9db83925e10322503f859a43516f2d1afdeb05b63b2e0ea95c3b6ffdaecb9bd2461215709051294c83bc7e032a36b863507d8785ca160e7c5ff7f3adf8a569e455822b4a0dda204a10801a83b81c1afb40ed04fc20ec09be0b28dec8606d06990b762dce315025a663f06801e2d1d0cc0f605e855915e616201605ce158f7352171af7ccc9ad118917d44950a2f46adc1d7613bc333c82462ac3a675a171cf9c529100c3f9040d0f5213a1b13f1136d06be01190ca51b27af7f84f8c7f983f5d23a215e47190a3e0340117c04e65c81e0cbdbc3f37378b0418de1938a7dd508c1ce6c1d0cbfb1be33ef302686b601b19b2c5c179e1ff0f72e9c1df0087265f8578a8ffba0000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="915">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035a49444154388d9d945f485b6718c61f87175fa0852fd0c297bb936161e976117b67d8a0710c46dd58dae285c8209b65d06d65f36217d2ba55a6572222b417658624d4e8c59c4ab1b9d89f58baa163c524cc99160a9eb37698832be6d006cf77213cbbb089ff59e27bf71ddef7779ef7f91e3e900449d452b3e945c935e6387ff84095570f98054e932457ff1ffc4a4dc44a95110180cc5fd9837e1a6586e67ee9b5285e23497223bb7b6035c9e86276852fab7e2b7ec92c9224c792db03cb53eb51dedf222effb90daecb8a961367e0965c84ca2e00e06acf4ad496661c6f01ee0b17de1c12dbebd5a1782cb5a5ecdb81314e0e2c469979b9fc2ab992dec88dde9c9547521c2abb301f17a1cb21e0948e230c14964cf47f57cca71e8c872f7df69e53e9ad0b9c2ea7216c1f024d055c8c8430bf508039e7e69d6753e1de6f2e393b7b1b0f02b0c788cc37ea60480814a0add7afda0900302d133127866b57ba70f7e7798c4f64f2d844787ca2d7d9cbd8059ebcac8c8b41310d9f0e86debf00fc3b87d3f080c7c417f06324f514e8ece8c2b5c118fc08e475c9094fcd0eed83024043e5e2521ffb64a7828977b4841428e6005f8b002480460f5c1bf034b6a07fe20c1c2b8b8725af377d00b4c2ab828b5ffbe3be263b0a8f041ee0a386413bc121e32cda3107e1014e0aa0a8013b0c2ca581e3e82e3cd6cee95362a6e182e5ec0557e3367b459249c1d10e355c6dea33e4fa1d45d2200b069934c8b500f93cb0757e1ee0ca2da3c40123b813bc2b6e6daf01b0816657fc5dddabac87bd6f0058d0400e7978019c04507601e31cf00cf07fe2910581e9433dce7cea616b5023f59b748a2f44c2e745b0f34d9c854f03bfca7c6653875bdb450952030bc2311ddded87f800cd3a82130299b83efff6a03db3cf8ae5889a631fc81f41264166053924b93162c4272f2b09008c29f28941f61a5f5657bf6398bcafc811e3fa4e5e356ee3659c170b6ab8d9d291b66390a97bc88736c5c8abb7adc4b63580fbbb0338325ff974f7276db57da58d1f6e1f108f9a9fcd1e65f20fc9d10f551c00463b94644c9598125ced3b44712d655ae29e7fc98e7635c968f15d255b81a0ab6de9f94722fd48cf1c59f18d7665ac0fa8126f82cc80bc05724af0464455537124c59f7f6f5b2557853b3d6abaf8c831425aa0bf2812e780eebdbdff01161435099978b4140000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="484">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001ab49444154388d9d95316bc24018865f8b0e0e1d1c3a742874e8e43fe89ad18e1d85feb74a43978a4b8d9b639742859664a860c141a185042cdc1515de0eb924773197a81f84cb25fae5f1b937274882014941fa6acccf1fdc6792c421477c22b853425d0b431137bf7f3aa83948c20f761bc75de3c10f48ae0f23af9104248826ccda0068005124f13702c6db313a7507ded643f7eeb686aa4a1d1755a2e85b91bf91e18bd88bfa04007069796a1390bf123803828f2fb4af006f3aae844d89ad8e85e6b8202d2c498d3515c9b5c53c64d9fd2c3566f362c76bd3ad750d42ed7e2e35bb8e551a12b7d18f2c5e830d80569c9a6822e13ef6e1c081db1bd2ee589844556b90fe322d353b8e857ae5c42a1e1387b64a3ee7bfcfc855f6869a8e13b749a395e6b08cf833feae1f94129b243662a1a786e46cb62099a5c3742c72a3cd713e350b35ce33e21300684d24dcde10d140c2edf5b11ca8f9289eb74b531301e7c0721901178037f5b4bda2eaa8488d4e6e105796462c25b23d44e558274ff7927d88fdaad41c4b9c3a6ee4884f8b888f716c494d11717d1fe26822e1bd7a70ea1de39fc436ef5edfe01f9ff22413e6a481470000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="872">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000032f49444154388d85953f681b6718c67f362ae8a0021fd4e02b32e8a086586090ddc9860e3ae890d3544a0bcdd6786ba6ce89e9107730769ba51d0a91bd24e9d26a28e8965265699c5235b18965c7d4c1324ef041043e61077f1fb5e0ed706759a73fed0b1f3f9ee3eee3f99e7bdfbb21fad4f2d2bd3bce8493abec5570275cbc3d0fc77636dffff4dd2fbbef15917e5bf4d6cd85bb6bfb3f9c49777df7fd4f727b617fad7bd3416b48bce911f6f4574cb8b962558dcc4e2de6b21f99e1930a302eb9f2ed7d3e7e27b969bf596862bb9b5c5de93941bb9e2c4d6ec8eb2fe4ec7059b6979ec8a3f56d1111393a3ceee591c8f2d7b74564598ed7af8b2c4d6e0c723c3c337d2dc7a88d31ee526a79cc65b2f018ac84c9fae31dac8479a90f7670320e00e6ec0d9ebe3d921b6438b1be5761eec31550256e7d0e8b6b8bb83878544802154a31ed7c00e0425062a6951cfcb2e497bcc8c94d11793490dbcf44e444442276ebbbc5dfa4278af2868614d02841ca8918d7d90ce1b5a990d929508950075a31ff894371b51cebbbe1b9b4037e00a379f07f8ed8a50f7a4f6a184000e6a8010730ff5981e26aa5bdf970a9e68105aa5e1acc4c9f0ccf01138286c2af42f1c7322e1dcef7bf9915f9fb9a88dc1bc8ed673df312d649c42311f94744fe1439aa888808c3de0b0d6950cf4b21ab0f20d9443d7c008926ead7629871bf4a411028b0e069ad0eef81572f8751b819077635c69803bffb1823b35053186905bb0a23e3f4cd180005a669c07398b962b3f30a5cbb106eecbdf020ad09feb80f639aa016e95a33a2d73763158db9ff328049a8bf0ac85e89394ec25f01e6d81cec6acc8c8ee8b4f54eb7631575850fd6b8092fc19e3021ee5843d024d8f2e05c136ce988973a96f179e8f422dba0a1603c726e773a4ee7412b4c5b0d66a7e3b780d328db8b3eee701ecfb8a5f1b734b422c7ddbac3b13aede886a88fb1c0f70318ef703c7d6ac01b8d65035a63da1a745cb7335660a4fa386e8065c51d0f8908b7ae66c54a29f20978d8a287378af5f05b11393652a00285611a040d85396ae0fb0acb3228ae9699bf5e18facfdf4b7b5d4cde59d7c41d477c1df1f072f212035a3f567e15bc6a1997021effcff97c817f014026c20ee4cfd5c70000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="1108">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041b49444154388d95945f485b571cc7bf7515928123e92624a583085b6704c1840e16f1c1481f8af541da97b56534b6e4a14261457c186e30e7f6202245880f8ea81312592586fd097928c44a596291dd98eaf2875612c1912b5aee0d36dc5c6ce1bb875cffa4bad07e5f7e9c73b9dff33d9fdf390738a2c05cc4a2c4391d08529656c9403044254506825c51e2fc1a55243c269d6e1f8f7df0cd045c79bf220782112a59321213c86dade6c9503842695959f14e065a4e3276babdb45e1a22004467585ec033ee73e51f4b0c3d249927a3cb497297649ca444465793a44232464acb92ec19f759aaa577ba7dc4d04f5e4b72222f07c251729b14569324c964364b928cc693a474381f8909cc4ee41fbd69d63716e5ad41e51085e0cfdef7cd85c83c29acb2aced721152da3845728f4c3e2b0f03c110057ff60049ef30e99d50e874fb38d09f2400d404d7e7bbaf5cb88c858d38eccd80b82303f540a95482dd0288a20c5881dc9688a64f819c28e2eac5cb0866fc37f78dd56209febf6701b515e1e76100404de7279d96a57fe3e868b40339c05c6f044a805eaf07b600b3d9088840c3c766600768309b0115e838d7719038bd3e8556830305791e6aa1b53c3934ec29374c63195d4d6adb2e3396761592645e922a6adfddbea39c2db6ae115adba3878c239302192b77ff80a9c692bb5a95de18ef9281e1d0b1061e558dffc9ec062c406c2305bb0188a77380c61275802ccb80b1cc1c755a3d0d0413c144356378ba02f7bd3381c373ab90c96ce5e9a0c20a8d8c7ae8e93af9a21c249e2f86071716970a0bffc4814620be9e42538396b85e4bac074aafca3fa4d239a41329a4cce94255e3478b53057153ee29ada9886552b037370139adfb3b80d168045e02fa5a209506d27fa6d0d068c7d50b57aa267e0f0036b22b19b188a7b96ce6d2ebd7af744d8ef3c86d8a309aeb20eec8a833eae19f9dc7ecaf53387d468f9b676f63ad38f3e5bcedf9f79fdb7496d9e5e2ef271a03c0c6c64ac6f08175a2fea95937fe70c264daad37fcfc6012ba2d3deefdf0ede2478986c1dacf8c83ad671c0ffe7836d67efb7dd1507bf605ce9b5eb4347f68b0cc258e9b636892747ce525005db5eded2b7bcd244bcb03e45e92d29c83fcc640ef35d374056300587ae24741b402801a0a92b6ae91e3efea11854bb8675c0b03852518bb3d80cd8adb6daa6ba4abd2fca8ce397bbc9537e87f3470d1e492fa6de4b697dc1328f96de45d0307da35732146f68d45e9db7f9cdf417d6d26577ed4466efbc83d81f43bc861037bbf304da37738c2ebfd129d6e2f1ddde5276f688674babd6fb5d0ad16832b7b47335704e6276dec6db3b0a6d5d48142210c983aa0a27cfd97fef2636bd3f656a9a712855f7e5c127b72d3a3c0d60a72994ee89b6fe094b3c74b5575407d19865a54915efceed4bb220180eb2d8669834ee782f506b6769cbffd076506ee49f93702a80000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="931">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036a49444154388dc5955f485b771cc53f3a2d0958484665065a889087d976a0321f2c65441963880cc7e8c33ab6bac160eca952f6b48715f6342e4584e42150b18e64834ddb215d6001eb283382dd3520dc4bd19148658928dc2b4c626885b3871bff44d3ad2f63e7e5fcbefc7ee77038bf1ff73648e27f851137a3464285171674a535faafa60933505c54418b929951f4457c1b2babee506f5ca346dcbc6e269e27eafeca17214c0f3c585dba7674c7f7e17c7dcd8db46e7e9991cc8c64244cd7cc287c74dfcc28aa451da228c5c6d5696534d13562bae15b92efcac9408de955f74ee10c2c6cdb40776061ddbe77588102b92d7b829e4341a96997abbde4429d0c5fbdd81df8a0dd05b876dc18808e314d14bd2452513212e668d5785475303553e5b494b7a5b68f4df9061538697c4bd1cf67cab2c6a5e45d4b9264c4cd513d39695a2e4b2a4bd68a233d958cb8a94fc625de9cbd5e3775d78c0ac96ad772a472dee31a3cdd7797ca2b1ee7b3522c2d05866a9f62e3fec2cd95c60a676161dd861da89c01768e9c7c0634c3ee5f801f16364ae0870225fab6a0a3c30e73b93c742271785281be3129bf28c5c6ad9a2e0f7ba8f26695b31e190953f3cb12afdfbf77c21820fc85268cb4236b5cb26caf877d2e574d9d4d6fe13892b3eccd8e2dc5668a6abb2271712a5c53054065cf1e0bb6044903c14a1080104178067e3fe042b0d50f25080621fd873707f7a0d71762200ad03f5c3ff58895cbdbde6d4bd2fc52f120a124158b5ee2a94cbe668e4d5a3296253aa7ea7f4fdabed1f08dbb92f5d07ba79234fbf058b77949c5237351d213c99894fae21291e4d04bc78d9bcebdb3b6b119faac3554f2bdf6e7694aa75c2e9df553dad9e5f42bcdb82e54b6a1d2b28bbfb519776b17ffa966528b05ded8095209b9ccfd72aeada15e6adffb8af60e32f75e330cb4417b0b10012ac05e95db21fb0842c0740efadbe1c1bacd40df792e7cf473ede51d5ce2f70dbfcefd981dc96e79874bc0f46f36b44276ad044d10ffd6269b83e9474b0cf4c078a1c477bf9fe7c25ba99fd8b8f46edd9e0ff0b62666b3d2ed1f2c39cb5ee7ceb2743b65299f958c94144b495cbeef12716e124986ffd9f0d038e01b9ccd194bd254a6a8f28a944ce7f5754aeafa745ebceacc11490ed793d6edb8065185030172a12e02ed3e585a607be3f1f41de81fe3f1cb6bcf9335e83ffa99fe0d6e5ac6c9fdb29ce20000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="3791">89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000e96494441546881b59a6f6c535796c07fb4616aaf92ad5d85519e14b47eb36137f6a6abda5324e2696716b7d5b649bb62cc645685cdae86743f0ca9569a4958890146db01a6db16a4ed9654d336a1aa0a74a79074a6c4a602f2a80a3815100795899d26969f87a4710a6c6c914cec2d2e673fdc1712024948d55ee9e9f8bc7bdf7be7ff39f75c2f1111962c59c25719a7ebf1fa5ddc478225b8c04841c00524800a301210a898039fb93e350b1f0456803108de027fbcaf9324701d90d9342c592c03a79fc6eb2fe2bfa2f07d1f10057c4004f003d102f88a205200ff5c70c6fa5be0edd75f0de578fdc94e9e0372c0975f8901a9c74b0527a209eef555025794e46229f0b8b821e958023c150be02e6e48fec6f3b3714b539173e0af80f60bbcffa34e1a802c50f82a0ca4a2f017be4af562567043dddf289c80e839f06561579a5f6d3ac57f0319e03a22b798d5ed89dfc64f7aea116943e45d4406bc22937df28d8f2f7ad4f78e22a7eb10d9c4e74015f0670077dd11f54024c16adf1452e582f276b07b942032103d6b7c233037e18435a7e132f8cbc148f16db783ef4c31b0180d9c947a44ce20927cc9928e025d470fa91f494b6ac99eb9f1e4d8fcf333f1e894164424e612d986c826644315bf009603772d4603ca510601bd19aec56029702d4ac0e5276d46a01c8c131128f814ae63c169dc48846fc267cfdf84bb72a44d437d67c20f452ad4027703f700772f4603a77aea1119d82832694966f2b482efb78a0c88ec79f9b4f4bc2bb2fd3911191091812e353f60ad1fe8121948de8ccf9e9f81f79d39242293ea7b5f744d6ba0925f027f057c6b311ac007903a0176603c04763fc6b108e65003bb0e47c8e5fdc4afc50814a0e548085cd5a40743e0c282d54a0333f0d9f333718fcb4f7ab0437d6f3402a8e446d1345d77cc80bfc2fa51019821b8524bdbeba017fc184469aef3d35c0febd7798814477017d512fadd5eb48286717c175a4183e32d543bdc37e15a41c3e86c461b1d85b79f414bc531de5e8f363a4ae8c80e349717c6db61790080c00aac0cb048062209a03c88d1dd44fa642d6dc7a2d41443a6344df5531a9ec33e96bcb184c683cd34d7fb092742f8738de0ca1378a2195c7978a29978213a035f0f8503041ecd417104ea1c501a2750e780e208b52b4749bff93730b113ba9b950f2c56031213476787fcdcfb33b9bfddbb1dafde40b4041aea7cb43877d09defa07b344c6c639497ea5fe2d5cc6e98809aca5ab67edc0e76bf4afe763fe40c7c1501cbfc800b3bc055ad327045cdad70388fe606cef582a37b711ae80cf7e912935f8512b154a082dde154eccfd7aef2102f8ee1ac8c50fb5e2d3b9ed84a70559086950d340c36d0626b810930f211d2b618f94200e3703bd87316d1d544fb3bc066870b6dca1c53e179a08db40954a298ba130dc845d1bb0c79abb6d29324c5b680cb736f3c0f6beb3c349c6cc0ccf74231843684200361c2d84fdad96bdb4baa3f054fc1da776a59ffcf1e2818e4cc008c87a1c40fe3617c0e0724daa1d292f402507303c31613b7d1c00d5e7a22c9d53e97fe1f9184f9fd804bc74899041ed5e94e18846d61761f48b37fdd7ecc9c896ed7d96a6e6577d16ef2e7f3aa2e4a0155601bb6912fcdd372623f0daef5ec3eb51fbfc3c45c6ee02bcf123a6150fbb046f46037be15360b727b7c224f7a19680fa20abbdb68001141a2f2a18c899c8e88c825111951d92fd81694d303a745ae5a1977ac4b9292948dc98dc24504036104e10ce2b8ea1057cc254d934d62db69139914e932445a378fc94b3bf7a9349bdc2872668b82726861f8518dc827884410194164f7ad7940f1e2e207917e137fb50e40c3d906f21fe769dfd04e2c172367cfb137bd17533389c7e3441c1125114be265556538134e32f90cd177e2e47e96233d0181d5d0f88e4136112073a105e7fd103d17c6b7b21acc30e8b6f961858df4794b0329257063f06693bf0b20729e237e970e697573ef89bdecf8e10eda33ed608766b3194a21dc1b26521a213b9cc5f18003f71537de4a2f7c00c12bebd85364626c08c10468cb80cbb0b57e2d790cf2c34118025fa50d8600bd6661380c5ac50c1f28b27c603603ee34af1afde60ddb7215bb68e86ec0701a3c1b7f96b0234cf3f9664c9709a3e0ae72a32774721339f40fdc984f9a343ed04cad1722bfde05c77244f786601964cac14680adeff4c27288a6f2aa0c4b87178615909e227e3e0ddcb77ec9b140b9fe59e89cbad9b8b211b3c8a4a3b783eeb26e4653a338aa1ce8a33a8d658dd88edbd852bc9d50b9c9fe1fb6c104389d10f9f7adf87fd10c6e3bbe120de3e73bf0e8e07d50c35f1ea4fdd53cbee20c1ce9866c9ce8916ec86a73e291e371b429e2a734c06d1800aeb59d345e0c9443f46c9ae695cd38e34eb2ae2c8e61879278bf8e8e8e96d0893e1525505a8b4783d8600e9c90be0cfe51135e6f838306b95ffe13813777630e41f3d3104e84e9ee6fc24803ab34d213367cab34d213bd73e2fe071ca453807b8606e660e0ba9e771c0cf733aea3410ef63dd14ee07c80a6b226bca7aa095576112a0bd158dd00e34ae25c00cf0a3b0c82063094868319787b3df684091359f4e5ea031b1e5a4f7ab4177789aee2fb549caf5c3d373e8cd2c0106a7b398f0678a4f1bb977ce3fc361c8f421e345b19a1d5210285b5b4ad6ec156b083133219a00462f10cdc0fb99c7a79dbe118787790f970134ce4a1bc0cca5c9843c072c86b2610a0addba76c3b75c282e105702c9f500ccca501802fdbfa5b5e0ee83eda8f80b3c40e39f0693a64c05e04b10be02c0083e07139d57d3b108786d51e22757e9c3bbbc0e120e77012dd1b521a1882b5753ad822686c817e1b5a852569abf6b91d1e4be595062e63a9f8560dccded02cddf372d7d1648b484f744ced59aeced8d659f8c87e91be989aefb3361f5dc688c888487244a6ef5f14e9fac85a9714e97b592458b74ffa5ed8285defbb4462eef9e199321989a95c2b6388bc85743d39ff86a6e075785f091722e805278c83bd046283a86d5d06ec36882e034fa9138e81a7142267a12cab44a46b80099e72a5fac0c34edadf038f0e9e6aa8a9a8a125e123f0782314e9f3c382ae6aa171c06969a008f2739810807cef5fee3b9a2bf83f6b3b61400964c61531e6907a492c05b555104965e03188a632f82bc0be4aa9d91c024ab99153d297a1a60ada0fa7e101308b7ac9666b087d10871596cdafb06c7e365e81aa464b50257911840a609b8701806bd92bed2f06ca03b41f8ce12c01b2a063497605b41d01ff4a275c069fd70929d08b217a167407aacc580aa44173a8d2dfefd088a5604b5d0030b0a79bc0046d458d0557df82c786f368ba45955d81daa29b89bd1d03d7cd84f36047bf31de7bc1433a6d4916c8e5a1fda049431deafe3288c573e05552f2ad84f60fd3aa1d7836a79e1b05cac01832f1b8205e040e479096e3bd506a233d7442752386c2169cc63d1536f59da9d1af34600c6332d5ec9da32b717757cbe41b5b368b4c7e22226396235f52a027aa1c54a296734f7529926aeda10eb5b633ac3a0cadaff5a98a36a6d6b7b6a92a75fb731b4446cae474c42132522662c11bf8470ee5c082c824224f22238fd30f3c09940377cdd9565957b7bdaa6b93c8966daad53162113f157da6c6a18ebe1b51464424795164e4ade9e8d437a0984a0e8c895cb5a2d5988a461b7e9294c9abb66922e7ba9248d7d388ac418215fc1a7818b80fe66fee2eddf8d343a19a8a9ac76aefb7c363a878bc0c6b8f0bd138d852e029e2c67c2661058c6a15bd3c2e54175bb39e03da0e82bb0876ff6e3fbb5c26fae0364025a99971de28a8a843012882adc3fccfce731c003e052e02f9f936f5856cd6fd4a477f98c859154d94cd67c0ae88f35540f7e5183c06ed874d3229884c64a052f980c705d17ee50be9cb16d30945646659061b0176a46cd3c45a1094ad07aca893ced3bbf60f3c6f11ff47e073e00b60c1dee83dfb9e1b1b5e577f48f9c188885c9d360f1911491e95193d4dcb5f2c73eb0c2bbce79319f322b2c7f289a64dca17dc95352f003f06fe0165dfb3afc781efa12aa27b51ad4560e1b6cab58ede032f5208b0eb8d888a2a57402f40e8b049fa18a41d39d0216602659021a7f601e350bb0ada0e9bf81c609ccc800ea12326ebaa3db47f982197cd114e84292bf3fe25aa64fb04e8b9cdd50bf4a1cc669c1927340b3170dd7bc575904278dc9975131b045d077b31d43ea593a9067fb91d4eaa64174d80d36987cbe02c81e828d4e83a4c40a0c2c9fe83e02fd3d9f93664bb6134db4120e7fd34de1f3e8e3a75f91c55b6cdbe3eb7e6ff0f153ea7c70226047077704df28d60dd3e49b6a9287323ea4c854f11e90c2745ae8af444276f8a4a7b5afad406ff8c485f8b8a3eebea4624b8a6f58abb32f89f4010a846b9f9d28588b965dc0103ac7e684b55ebe631d9f8d34e45d5458bf82f66e4874b22fbde557ed165a8f9d636b5b6f52d917dcf8dc9baba7dd2ba69e44fd50f35fd1ef847e011d476a514f816b0e8e3d23b3d235b1a5cd31ab22dad79aca62ecffa3a9d686f069fd78939047a99aa91b43c9845e02b03e37c06afc3c9ce770cd229b7dad867dc11e3e3da37f313a39f316d2e195444b93e1f01738d3b6dee16aaf3de57f21868191d4cf05539899c45d5fba32ade872fa8d04a0a6c6927cf3cbf1f7791976caee3d3783cfb7cf8f8775fca4f8cfe0188a18e4a2ea18acbaf443c70e7474cc03dc1ba91e160dd3e91112b945e12e97c5f1d58ec79ad47e4aab2f90df56312acdb27c1ba913f791fdcd00afc08f801f0d7a80c5a34ef97be2106eeaa797ccfbfb56e1e93ed2f58273303ca0f7a6222639f886cf8d74e69ddac88dffe775dbf77149735007f0ffc2df06d54257cc72dfd3b198b3a27ae5eb551d396fb3fb5112869daa6e1ab04e35c8ef07b76ccd47e6c04c88eefff347afec06ba3a3bd83c0a875655085c4573795af8301e0ee3d6b92bf892c8d3cb3a57e3de1c128ce2b3a46228cff9aff7f5bfa9f6d8df787cfa06c3b8daa9e26b9a99ffcf58e45ff57a2faa1a62a5d6bba90c7c04680fcb5f064e68a7efcc4a9470ea0cab61114e157816bdce60f1a5feb58840f4c8da5c135ad475b378f49cda3db4f391cae6780275067801adf809dcf3716ad0154b2b917f80e2aa25c45c5f43194b97c39f7a35ffff87f875f99cd7185fb7a0000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1279">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004c649444154388d8d935d6cd35518c67fed5a388521ffeaa62deba4c54d996ec14e508a81b82911ba10cd884124de6c7c18617a414c34844882443121620013154c86c805ea50481695d84e3eb665906db0652514daba95b5c916fa474a7bb6753b5eac9bcb0ce27375cec9797f799ef73dc7c0341dbba666354658e35e4885ff2a496f2e077c6152952e2a1b8304bc2e82db5618d2d3eba6cb30b1a8f1298113b3bc9a9e1b735a7eecc8f0acddc188ab29f1ab485ba3e1fcf4eb382c31ed5cec2b92f683feed86ccfde0d4f89438dcabbef09e55d1832175c4dda006454a297a95d286d598ad4d65b49452a24729779b0ab93fb8b062f72965f7ec5585ffe9b826a4967544391358ca2cad1be442d023a049102d3104763025c06345c6d358072c61914cdc20631d25def37ec7eea73aa78373004aaa76bdd295c4ab47c8492e06d90dce1058fdb0366f0ef10858f22c58da605dbe99400ed6be972d0b74c582b522ff517d76b17ff04a43722ad80880838c080003c055d082600d86c7348d9bbe787b87d0b8811e1e161af8c2616c03e03a9f4638303676b79b13c166cb74c7c6c33d6a958cb0a5763526cd0ec20122c968a5cd752c7c66ebc6c4b9f0e658e747eb2b4d62038226e17149acf086d382eb3aa457963f2f96d756bdfdb9b297d429d324b9e254ea535b4829ce2a45bf52f894b27da9e2b617b6af02664e75e1ded99f577122b4c31b5277bdbe5baa3aa494b35129ad5e29db9efe8873935a31e9d89b6729909d8003e8069c80e041ebca1df9c0d05470c7ee79839579aecf18e49077a9758c246c2805bd1064857dbe14ed6f0126006343203d4c00f816088ec3f532cc0859e7ae4b154cefddce4a434a5bc2019fce055106be28081b487f22835e9e01ac00c6ea624bd49e0b5a11a0033690114878ec4f6b45969d1527d443d3e10c70d36ba7891819e11c37a3e55aafc9aead27803b00467f3076d49664ab3bde535fa27197aef1b6c4c398c3796c91771247abdbd433d50d2931c13dfeb061ccd7479fc865247009e408e8c9c493c273688bf6eaef1afcf3a5677aea955b26f9215046810c03c5e3adb115a35c5142b5a53437c739eb5dc8a02f8a6359116bf7b5b23ca0912383800bc41986c4c5f466fd9759c7279ec7904c2616c772adf364307b12181f43bc0b836ee2b16d2d2cb009d6b50c32967692f3cd494c120cf401eeec7c246332be4707728c13f1bc25d697f47c0c2cc9ced503d8c78b640664218688ce8c8086885cc42c0b3120b3c974108520e25c22defc27309a3301ce94bf2b78c2f2a22e99a9cd67445c4e0cf19cc59c49018f005dd98b292017b895ddf782d6ce58e67cf31f998bbb3e969193570039092e5cffc90d7327a3d5f92c1a3cc9e939929f44b7d9ca22f2e5758cd8b3b035d924cb81eb40217085a408dcd99fecdcf41b707beaf00070bfa76627a247caf496ef52ba1e0e95bc162e4d94c6eae3abed8f730e4412848c25b1d94dba07411ef07d5a89264babf457bd43bcf13230f2afe7395dce3ae5b09d521df42a259452da5e95b0adeaff507bf3c27ed1ac32a2418d6afbd465515453053c30b5d6740fe68486f0876f6b03aeb42461149dd69fe397aa1ab4a5ed69beee2920e11ad0bb379e26ea6b07fe9a5a68b8077052c2b64388226d99c8ad9d1f6f2d6f458f448034300398cb784f87ef1bff1e3200e62cec7fe96f9ec418e7ca3ccbd60000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="535">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001de49444154388dedd5bf6b935114c6f14f34c845145eb77728f866ccd66c3a08e63fb00547a1e2e024e858a4884807850e19441c4a1a44840e511174922a4807871ab414d14111711293412448f138d8a82d5a23b59bcf72eeb93fbe3cdc7beebda588b01ddab12dd4ed04ff53654b8aacad993fd595162d6819dd12b1a5b0a8a925d2a26eba6eb4e4aaae3256d59dd4f92be05505cea53d69a2ffb14fd96b8c39a1b343c5ad7c6f9ea958707948e70d85bb9aa99c5ed58fd627aafbaa5474acaa39313037e348be94476da5161aba663681cf28cc68a6cb29aa8bd5188ff1c85a596858d090ad9fdc96b9286a518b7c250ff3baa637c0a715e6353544fe2e8feae76ad4a216693685b6e6af3c94d6162e1873385593fe933e77f450470fe724130e920e257d7d49d2bfd467d59cb38eff7ecfa69cb6247c1242782cccea3a2fbc103eacf50fc6a78559137f38094c2a4cad2d1a405636e41f8437c29430390c74a0865796d620ef7e115f08a7743586ab9c9ddf5b15855d0ed88dfd78f953bc8fb69e2fea2e0c57eb3fde8a110f2d6304cf7e8acb78a46344c595e12f50695d764cd73199513cc73dbcd541dd35bd61a1eb1d7fd3036574f0046fcd29fe1e0ae50df96d371d01efcdb9b1598d6eae8d8e6fc9d073662b5028fdff9a06fa0a8a1cc5d78847dfc10000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="739">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002aa49444154388db595b14fd4501cc73f350c357178973074a849493441a6820c7081c41a060716d91c1c8ca393838bab23f13f90bf8084c10107133b7132c895018e4b1c4a62a24cb48917edf092afc3eb71771c200b2f699b367d9f7cdeeff77bbfe749e246c679f0e90a462b44d79d7f181229c29c67de1af9b08269408a25d312f17fa522e29909b28e2555300a3f33ae4db33f1b6bd2c69a7e2e5068fe72f86148ac88e2f479203d8fb43749a6490797e46eaaa1da58934e4fa5d607e9e3ba1453281e872b7250bd88a48d77d2eb596935d09e2193c10c87c2fcaaeab876b7205c041f789698dc926a7a003f0c8981b4580e0ce1141c6c41054555310751db3a6b4f129ee7a125622c296fd70d3e1036a1bb0dbfbfc0bbaf25906001484922c3d24b070d81cf39ec962596c4ebb12f690006d03c716e49a79e2586fb4d677eb40507199dcdac9c018ae5c034a207d02b9de9f79cc6b7b26c5b92873df6fb311e010328aecddf2c1a9885bb4d38da86ea08ba052c5c6e3a5c106360004d13772ce9ccd35917470b5405545c693a0c1ea9e3fef0baeccf40c266566273070d1e3b6808fc70502e80f6c78560804ee59e7fbbb5699d7d0edc7bdb5e36f30a70bda35292c8dc5e783930ad0a0800df67ee9e6fda9654fec59b682cc687a1838e653fcf695860823ad6159c54b44e289b9078763479a3bd62c8b4f1e8d5c034cf69ec9625bb65c949e5a01560a1e9635a906a62d4fcccf852d3a1eccf012d4bda9cc460815e7d012d6a73dc0671bd22221adbfbef67a527463214ba33b0914f2c9f427770d387ae1d2804d17028ca4ec5317690fde2932bfef6b9e2f72af6b124ad1ee5f0d20ba009c72deaeffdb6a900a3804cabc185a6639533412c67d837cec4b9b679f6f324a66e7dc5de15d0b3ff21ae979fed3068f4636000198cccf58f264124c68f26efa60ed37f559cd8ff1c74f1f60000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="852">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000031b49444154388d9d954f685c5514c67f9366e40ed6f29e54c9c0145e600ace40c00417a6e0c2800bb36c56ad1bf1cfaa2b292e445c48ea421a2c956661a18bd614176236965988265070146b4648cd9ba179e40d21cc0b933033a46166c8503e17ef65d2e8cc881eb87c5cee3ddffd387ce75cd494e44a6a4a6b111eee570a92aa92f2921e49fadc919616a4f7c7fd8ac3db92e8b7585bddd0a068ee85b8b67855da4372cf4b926a3fdc50ed6573ad1ff150363d4adfe840e239e03164d30dd8051a8b702781ddf6b14f62f54b1d2a787e7fe238b43ac030b0ff598845601b826fe609b6dab7fb124f0c520c24e2c08f333009fc0a9c35b06b48be3a49e1e6ca725f62779062801d1f5e5984078063e00f601fe6bd09468b49e6bebcab5e69c3036b0cb09b8793265ca5365816f9c070e9ce1c78b0fd20d35bf1c01a03adf27b70da80073cb6a004e7deb844a1ec431a72e55cef443507782d3f2bc991ee8f488f46a47947fac4093d7d10fafea7af56d4d36e036b6cdd021f48192819c0266f66e02cf85b01d9ccff51dcac489be3d2deb8743f23fdf6b1f441263cab4477368f2b06cb80159734a0c6bfcfc0190bfe041c0bd6f3602609765a908420a8c319c879396231fbd958cc7e11b081e763313bdedbc70fbf83d7cec37a025eba08251bf61b70e132c91712b003c9a48d5b84d7535300a7801361b219024e756bdcea70842903f5228c18f096c119c1dd9f84b16ca8d482c2439f6c2a547c3cda00cf746745224e381be2805704fb2dd83290be08dffb64df9c8375489eb6714b30911e85324c39d311a1799afdc9518d3b1ccd86d4340416646e80174009dce10638e07a3ed9748838b0d475451be000a84bf5ea71571c4498bb1aa27b4ffa74565a8dce22ff76e7f7aa74effacf02cb02eb444f1fb722c57420f8c5e7ee1757e0db1cfe8577610cdc72d0558c036ed9273b06cb5b4b48f586547fd2dfc791e2850fdf51737e413afc03369e521cf9579254eddf79ac443f48337aa0d994b45a53ad5a0b7ba112e2c66688b55a78b1520df1f247b3bd897b76dec1dff0f04ef44da9f6ef8a87dd72c0f6d7013972180c6dda4c33fd9ff6534cfca3c7fe022c02396eb294de450000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="643">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024a49444154388dad934f48937118c73f33cd6922b3ac1651bd4210eb0f2574c85ba388f0145207d73f8a3a24d56518857590d161a807432f6187e0152fc3932c08340aec204c62b0400fcb964d1af826235f4ac56f075f21456dce3df0e5e1f77b1e3ebf8787ef0f49aca914edeae6c8baf5ff68fde287db53b2da66d31d9cfbf7de8e725219daac4e8cfcc0d9c89824498979f5bb9b95f6dc54a661541a5e54d2f3dd3ccd0160c7e6c1a3fef792243b29c992ec88245b52488af304d807146f0edccd5ea9ed8be696665ecab6245352cba4af9a434065eeabe8c6a394af5d8afdd65cc2810e3bd994e49715e70de0058a72038f704149cf0fad193d925a24db69ef27046ccb0d1cc6a3116ea4877821d57e54b6212b25a5b98024b794755a5348368bc9573cda08bef2002ea00428b7c21c539a05092983943234d0c194c619d25b3e29ce78cb298eaeb7928d8d6ef15949a40cdf86870666038d01b92bdc97803d4025e001dc9b070fd1278bc5d8736e45c2915625a5dae3b531c76a25b9bb62b57a7960bde6a5032a554a3f83cd4179bdde6bc0cebcc189a59d972d7bb6e95ed31d49f29ff58f398f6dcf6fe23534181dccc4c23119878dfbc0ae8281cd56f3b25292f9cc9c04f603a505014bc28edba9aece2ed59da97b0a54170c1cb812382f5b0a3607a78183405941c092307bcdf1446742f517eb3b80ddabeb45e419337d3357a30b5185ae87ee02152e97ab7c4543be134bc2308cbe506b4881c6408ff31b5d5b9e18606262e231ef98af316a1a01b723008ab70296f4b5aaaaeaa1ef97ef04300dfc59aefd05fc8c7767e2e9d7fc0000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="1086">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000040549444154388d85955f685b6518c67fa929e40c2a3dc3418e74d840075d6168a237ed859808c212141415ec507105850e045d14a4db8564bb18e918427721ae8e41bbabd18bd91ec4b114d466d2b2546dd2cead24a39b89b4d29475eb39b4c5c78ba4ffd6565ff8f87dcfc579bff73cdffbf279d8219267face450e449e4bdd49113d10c5be631309447e7dfeeda73f01508a6e56f9c6f30a7f48da29c5f6e83a79e162feeb253d1e3de7af2871327f1140339d258d261fe92c2f4b627d4df2ac4649ea3c8dc80ed6ebab83e7641f1fbef065e7786e607e23dbd25626cff6297fe9cab846db1f49928a3d2bcaf83ed38fbef7a59e8c9613ff48fe3f8fbec07e6e9e3938aed94e2dcd24953b735323e95ce59b99f9ed2c4ac9d30969a95d5a2e564e7b70a572f2f2a0a411e5aff20560a11f12929292724a9c4e484549694945550e794ce7faaf4bf96825e9f2cd2a0725cd4bb3c1fbc7fd3c033ce919391f565b673738362cc0a98b1025824d0a1fe052d1296ce26f4d81bf15eae2b09281da10ac0c416d1b1003e7c6f79e3d7c00cca2ab61e94197a491dd99ee93d4b9e92a73550e4aca4b0a56ee6f1629430278c23b34ee127b15981b807dd12a7d5b7573374e018c86219cbf2e63ec07680332e0bc09860b73c03ee06fba748945cf7c6f97ccc365b0a250b277e6440c0e012b402d50022c03ca2e98c0b0bfe2d9aa05cde3bf91c5a919c8da60815318d89d8dd526afadd2022602608233e6c779aa44f7c42926ef5da77778f0595e572bf9b3add2ed76497dbb32f7fbb67991962e48a348c5bc745bd2b2a451a998922451634fbbd000ced440856397c1b780337c19bc0b38d77a6959ab7873dc75c17f9412f5700032d90234815d1802a026da18815b2e863f023f9730ea5b21eb60343870cbc1688cc0dd6ab21250a8ee0f1e035f2f9665c214849a034cde87682056496c4fdbd0e052fea51ffc2ee56c556717aab4d73d2e7c57c07ad18239080543c49327887f1cc7d3e2c1b3c7434bf346c59efce9a002411ff8db603a054dc034d01459d793de0c2d8736d9e000c65a7700f780fd95bf29dd052b8ca7e2717981f2840d2b2ee509b7ca0dbdeeb103e99fd26040b9ec800ba96b697021fe691c029b3d6e0883eb60069cdd59f5f8c8471df47fd80f8bb077ef1e42af85b03f1f20f44688705314ee6d78ece979a751c75e7229ad82e585f22a985eb6ea774b50572d7a118cba4ac5a669509e7330f719944a652ccba4f7db213a8ec63c35c145031eba5801c07531032eb85bf5e45a578c81b10094c1740db801e64303e6a874c7e68a2571e2708bac3a87b0178657d9c663bd05a88323ed1da4c76e50484f127b2f46bd59cff8c43853d9290024ad57bcf1acfcd75a9bbcb517e541956b8fcd6c95331b93e7dd61a6b645690cecb121a2c4b0f97f768463fc0b17004c72597c91c00000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1229">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000049449444154388d8595414c145718c77f8c0f7d23607613304cab28a99ab0f6c06e370d43d5e89eca1a6d00f520491bb5f40069d304b569ead1a6a1b69736d234166f7ab08817dd36a18cc696c5d6b068a88bb5843591742918665a5766d491d7c3a25085f67ff9cf9bc9f79bff7c79f3be02fe4337a26661885819be6520589ef23d2222eee25be348395170e5e2c3c56a0b16855687cd90907bd2be571d12b222ed7b45212149f9de7444c83b29dfbb1e11b2eb40b8aaefe489938fff17aca2e64b69783f446c2fc5c9006693466e18ea5a219b042ae152274c4666b87bca05fa9282a3d9fab6fe5d1fecf2174ca9a2e69a1bd5e1848a9a6a6adf7ea552d36afad6a8524a29f5f7f4bf7cdaea53eac35e355a632a1535d3bd35e68e96e616b110f4a51b5133a1b61e7bacda8f2935ad94fa23cf5ad46f29a52e4f29f57a7c4645cddf7a6bcc4d5ded5d1a80f6049cf6bd4321a873b7791aef1e04270b39707b2c2805f7f74cde87f36ef75800b8a559d8fd4d4146ca0d319f77122389a296e6967c8b07aa4d53453fb2d5be16a54667138d2aa51ece26eb3eafd49452ea1795f7eef3eaa9469552c93ea5beee552a6a3aaa66db1bfb9bf72fd306aac38511c19e4c717205d183d8231618c02aa070f673eab7635f3a0b01f25ebf7dae8795c07025599181d26049d2771aaa269d801611f1327caa2b038d1a8114c15213ce5d9883023c82607d23fc7a21efcfeaa723183701c7d56a896f341cbb62c9ce95b90d86106fdb6bfca0fec25bd863dde8d35bc80e9ca1e49508b82e2c9b7d4bd586e798eede260a3377e0f61008487943bc2a83492d22e4f2b44f51f0e50670ba099699e07563ac8ec117c741d717dc9a00d435a24f86f3d7220e3e4484d42ddc122de57b8404d8d7ba61bc8a6cff69c8b9d8574fc15815eefe030b4337c72067839798bd91000169df2326744dcbfffb4c07272370bb13834ab836483067c0e0e7e8273b1706ff68cd259de72111f712f0a060a03abc2a22e42957b0452f0ece150ae0bb0b8bb7617e72a1032e7890f29cebc172a34d8bc8c044caf7aeebc4671012641c845c18ba3996f747cf2497128a1b016f2622e5adce9240562bb872f16144c8aeb49ff80b096e30059bcdfc6e9827f7cd03b0be32ef853c271b0b7cee9f15b2c70e04a63480d670b82f04dfe2d8e8d106701c38373c5775f808faa6262835d06b9ae0f091b967a753b0be9260ce2409163b5a93c0bda7c7665fd40cd5c297e972636b28dca665651203c8fa1e868893f51318423ebff63c8ca1c199e45866c028353e3dbabafc92444e3d3d84b2bbdb6e22782f349ebd9cbefa3146200252c7083780ec9ff567d68e8331182435961d30ca0f7cf2d9eab53fc7d7c59d8e131d334b9e80cffc70464dd6ed9ce2eef8e06b396f79fa66726dd97d6f692677bb20b86227b673117d699cec440f258e4de672f74cf0c6702e79b7fffbb295655f1d7df1de55819838d47ee8112c3041badabb346bc42a3a3e341c4bfa5e432db18d6019041af4949f20e2d57a78d604925b6785ec61476bd21ab1fe8cad8b39f327c88233afa5b9a5c0c35b5a35e9040cc7ae88a35758b82531a16b0978502b18ef2c91593b503ee5e1dd9348b7e344c7cc7cc63f675f55910e311a510000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="798">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002e549444154388d95944f68545714c67fadd7e47be1a5bd239330a3530d5d199a85435aace0260b296455e2a234b67461eda2a2e0a2a41294a2d2ad5010376e5ae842a415178a50ba29a894161271618bd80c359d79ea101f6688c7f439cfc54c5a9dcc84cc0797b3b9f777cf1fbe03dde90de053e0268e1478027c05045d725ed24ee01760a9094d9bf137a0d07ad9ad03d88be3809ca680020e4840129618c0634becdf6ec10ef8c4cb7f8da35fae095313ee548f6bf16d60b11bf0abc0782e9b3b26a91f079618de79481a2fe338ae089d376ca91bf0a00ffd944215023566131034a08247b54798d9054bec46a7acdae915602bf05626cc208989700249c80ba08e71cd123b4de3ab55dad001fc0e3068cb76cbeab6333f980fe67ae6087b422c311e961fce44d5e873eafcd1a9dc5519cbe975853aecbdff06c73f56b393711c2feff3fb30ec5965be321bc5d14160b61374a5e497e4bd1fc967f3bfcaabcf6a569e9b9ffb524e9b7cd61f88a2e892d5ec0cb0000c01bdc0fde6495fe4ac1a5e3e97773eebfbf6efdacf95d295cd924eccccce7c6435fbd912fb0b2802a7e5b4dd12db88e336098780f25a1580a3501c295e9d787fe2efb1dd6337146a1a780dd8067c0f3c69715e0aec581bfa7f7bb602bb69ec06078ccae92a90ca29c5b5c475825b352aa924a9ee439f2a54ba12152ac5f17b338196c2d75641d22985da2627008456ec8c993d052e1a167503ee95d367defb3185facfc62f46abd94d4bec5b60d512eae43c807ec3de93d49b51868ccf102860afdf4ba00033bb1f5b7c1c986ff7b893f30680b7a973cbcc8a039b0632ea13ea1177b8c3626db15a7d503d952c2717807a3b40bb8c3748fac07bff9da4014b6caa1255cae31a6fece0d8caa552e9a8999d6dd782b5941d2a0c5d2eee28a6c3db871714ea88a48f7385dcdd5c21f793a43dc0c66e802b7a737864f8cf735f9c4b273f9c4ca7df9d366012d842c3c2eb52bb1e2f877de1967b4bf746ab71f5e9f507d77f8817e21f81bbc0b3f5829f03c8f119a61012a9ae0000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="932">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036b49444154388d8d934168db7614c6bf840e9443413e04ec9b0319b485411c3a582087daec543a08cba9ebc54de9a185c236d343316314b343c8b2307007017b5ec0ee21a8666c9e070339a5ccca08c80949258f6dc8661b72518764d221876cf0ed605999b722e7c1e3d3137fdeffa7ef3d812406296dca51b7c18254a663ef9352b9425727a53277dd06dffdf7d951e93f1437a4a459721da92cd33548595149cb5393ac5465da3bee6e2e2fcd9cba71f64131693eb159f98ea449d67734f2906483a44dd6f735d225a990f68eed641f14a3231b673eca45b575d391aa75d222d57d8d24a9190649b2ded048fbe4bdaca834d6cdad918dd592b156dcac9026a9eeb31f565f54ddab7592c7a4f653bf94ca15aa2523d012a4efafb47c4f499a964d92745d977449d3ecd7c6af665f4d933c24d31f64d6021bd74b1ae5272a6993343c42d7d3416d0e7f092d525eaf07da315efb7d0b89e959286d1d1001e54007ce00facf2d600a705ef48008d0711c60f244ab4fcb080c39af924a7ffabea79e973cf4d4fe4f7d484acb9560e2d20f0fdb88024a5bc7ac08349a2de055a0d5e9006701c7718010d0ebf580b39e9e01ca7be5bd40e2ec15692db7219decad4b6a036f079e0e3cf7626535cbec95e01f65fcd19fd5fbb5c7dbdddad306700e68fca2e3c294473ce9114f00bdbffa207ab385e69e0e3dd2ec06018fd7b6f2ddce6fcef5dec111941f75ccbe76016801539108f01c088542c00b60e215406f02cdaf754c9d9bc5e2c5b76702ad18a0c72f2d2d2cdd4c3952b932b4b783bd2e96242edd4c7165394773832c7eba42de8bb272275c7899156324fd4b12f11be26521f1e1eea4b2f0cec5c5e856bb86f874029f7d9b7f1cfffbf246f7f5a3bd44784e54da0f0ba9b0139d10b701b4f0e87be18bc5cf3bd75f4a2c28a060818202060d85248cab61c7de4993c71aedcd39f29ec8dcd561f271ff8669e01b6420fc11e81c00a0dac37ba1832ad0dd4668210bc4cee3c6fc51f2e3b72205ffd0306986c22afc0ca24ebf194eda7763a495238f55daa518794764fa529f1c8205ca5686649df454b63214bf1a6d496a3e9c345763a455248f55b234472e8bbcfd46b8009f5001c9faa98907b93423268d5b5e7357a5998ff1f67cf4e4c080fc34a4ff6f1e4e1acb31d2c8b17e37cdd4ad34fd759bf864ccdfbbdefb1c1b3dc2e1b8160b15444148e2fc353c7b1efff21f322c8d7ac249c7660000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="902">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034d49444154388dad934168db7618c55f42070eb4201f02f6cd8616da42a10e1dccb0436d7a2a3984851dd25edc64bd6c14c6cc0ec51d23643d0413c2c05909d8f30276074115a533190ce49432ab232027a4953cb6219b6dc8430529a4452e59e1ed20395eb64ed9ca3ef878fa84f8fd9f9e3e8124fa2daeca31b7c9b228d1b1b74951aad1d54951e2a6dbe4fb7f7ef6b0debfa8ac8819b3ea3aa224d33548595149cb5793acadc9b437dccd62493cfbafc185a54ac67c60b3f60d49936c6c68e42ec926499b6c6c6ba44b5221ed0ddb292c55628782e76e1663dab2e9886b0dd222d56d8d24a9190649b2d1d4487b705f56541acbe6faa160b56a2c56566ba449aadbf4caf244d5fd5927b9476a3f78a328d5a8568dc048909bcdb7f73325695a3649d2755dd2254dd39b8d9f4d4f4d93dc25731fcd2d06821b558df20395b4491abe43d7d7fe6c1e7c135aa4bcdc088c63b8feeb3ad2c7c7a07474400094473a7004d07f6c0371c079da03a240d77180d181ae3d96105872492515efebef67ea67c95d5fedbfccbba4385f0b765cfdee76073140e9e818138066ab0d9c00dadd2e700c701c070803bd5e0f38e6eb1140da92b6021d17c6c5c5e28a38d85b97d4fad9f633ed67ee577ea1c0c278f08f327ce7d9da6cfdfec39dfae326701268fea4e374dc773cea3b1e017abf7b46f4561bad2d1d7ab4b5136478b8be5edae9fee25ce93d7a0ee57b1d63674e036d201e8d024f8070380c3c05465e03f416d0fa4a47fce41826cfbd7536308abef5d4f9e989e9ab5947946a07f6b6bfd795aac8e9ab59e6e78b3457c8caa779f27a8cb56b91f2cba21822b97f483a35235c0ca53fde1c55262e9d9b8cad77ea481d4fe3b3af4bf7532f2eaeecbcfe7c2b1d490a4ae776391b716223c243006ddcf936f4c5e4e7dd2b2f75fc5fda988a38f6468edcd368af26c9eb028b53079dbf12b83011c9b09420ad22b9a792ab497249607e7c004748014316f8375d0083e0b90b918cfde1006e5713e43581b9f31e1c210b94ad39920dd257d99aa3702f184c12d93723197321415a15cf793549ce0b7cf78d487928b400e21faaf7018702570ac04c229cb9918c97e3b359e0e82974bf7c079f949d835bf1aa359388666e4c45cbf1b7df8372ab0de919fe1f30005c4e84cb422894c1a9cbf8ed49eaee1f6117605e4c4c36ec0000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="238">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000b549444154388ded523112c22010bc3829aeb0484999529fe053c24ff217de76851f592b104f2e88410bc79d611886bb65d95ba23f0c4044d0da0360b3071020db5b48ebe40d8a355995bc3b1057f632f4523f028dc5be7b415803204058c343d1749c92e77ef170cea559f8c5a73add9788b592786666cbcb92c2a7199983d08aa9313da697ccacefe8d5887d56f11e8f71c560f0bca7784f2aea392ee7bf1f66a24377d20b51f498703a0f5bb53f06977dfdebb801e6d1352f2e1e8ff70000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="747">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002b249444154388da5924f68930718c67f9f7fd8578892b2accd46185f640a1fcc43c58a517a680a4e5a955894a2c20e9b78a8a042e740c60ea5ecb0b5bd6d63427b286b7a51736a151523384c25b531c636e946684a650974610da924df58ecb343a673e84e7b2e0f2fefcb8fe785c790c4ff913119822e600a083a6c899a1cebda6e1f8cbaedd6a0e5df926b30f1ff56781ecd4eff7cfd6ee6d6689289528ddc4b822ec2e421508883ea0fc455aee84e5a75e5f56fa5258507973b7d7cfa123079082ac7399d8ff4aebfb8eb4e4981a864c7a5fb897929fe85141b9152b35279518af7ae07bc9cab2708b15fc3ed4e656c303b70dcfe49f7c68b236969bc229d8cfd4d1cb6a5688bd4efadcf6549e176c76bb29fd94bd64d8d9d946572c40d6ff57ec865695eca5fadffb03c2e95ef4bf10169b94f4a8dd4218941f5ede5aaa1c4c81a1ec7c58d5c7a2a19feb5eba8bd0babf36dac206423e00bc252b4ee0bd7c07a04a60df8993a3f5c30f2a381cabb9f841b2884c1d302d9bbe0adc242092c60c1f9c77d4029016d36cc64e047676d63fb4a71eb8e0db1bdec3cb081e52878f7c0dc0cbcd70a73d3f53935034d45785c80e61e7890834d25620f9ffd610046c0c381960f38f1dd51bb8756bf8905ccad82cf81cc2a3c73a0e60026b1f621f6d9a7287cdf8879a394375e6d95ed2294eef7fe80ed6fc61b844c04fc6e28ee038f9ba1275f31716600d6a6197a709dd8e7cecdd7aa69bb38ac2fbd7f2a624b972dcd0f8f4bbf4b8b6379e96bb7ba172d75cbd6b717518b9b0bc66b04a06f376343df581f9373a0580060b5068dc54668732003d12b4ea2234968e39b00b932c9c6a7a58f7635d7dea9d6226c7ebf0da7d843836b816ab6c693dbb55f3a929cafad937a630200f726b6755a9cedf3d1f1c8a4a9dbc49828516589db9f2d31eac02cf0fc3f01afc803b8000358075680ea8be55f7fb17bef1b300b4d0000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="876">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033349444154388da59351685b5518c77f297db8850d6e6483153ab89508665ab8151f5c41c8bd6fdb7c4ae983dd4bd507c12228750fa388953d954e46b079105ac3209b60673a669a87cee50ee7a6544cc24a9b514a12dc48608cdccb28b91716f87cb8edda251d6dddffe50fdff9f89dfff9ce39d0225993bc2c898888acdc1791aa882c4a42d6446bed3d90d237ee26e4a9b4e9d6e23fd2b82f23af04bff6f3ad84d4dbe1b228525f92c82bc19397d309a9b6b39397d3e57d01aad94662e687b4bedbdacc6c7abe6d2c259197f5ef5447b69c1d3131ade958f285e6e958528f2a67222eae5f78e65bce2973b23910d933717d4944fe152965eaf6d4a40f9f9a4cead5dfc57e3ee7c60e6f884c4d2627f64c9c5a5e80e340c8534d4cebc2b7332383ea698b90ad1204db76a16bdb176edfc36b9a953d13afa4eab63cde7eb7d56c43a4b499f071bb97161b327e7e66cf5174fc78e7ea759e40eda1cd893e20e4412fd41ed6e0a85fe72894cb35006a87ca989de6a5523cfc85c4c3ea4bc9e9ef56b4b12fa76d792adb495b7dcdbf07c9fa3f71e5ca6722b9319158382f37fa5f808b880ad0f1c1d85b1577c33546c72f3aae03abcb653806abc51d7e04728f564187dccd514e7816b59bb3704ad17345cf92c9ede48140c001086c15925fdfd53395cca5e1778723f98d3cd1bed3a4f229cc1e9381be5e1f3af715ef74bbb07c15de00ca80f109cc670a688a11389b779e6fd03a9ae8d0b8a6606a1ed98802b73d503f3e369c08ea7175a0696177d6082a0ae0010a6ed3a3abbf9bec1c05138cc085a2b32b78375d3bd73f316898dfe05d813715a878a029500134e081075a14e6ac021a46e0d3a2b32fb09c0fab0b4dac3343e8782e84ba601d08010f5c1fbe0ea85d2c6c25df0f18a0110fab9975acc10f0d1de54f1f5af0e0880b7ffb4f140750a2fcf2ab757ddf6080fae76135d3c43afb1e3aef2bd0b47d78cd81430a781e1c5771ef04e93808f8b5ef8b8ea961ccfe41814727fde3eb9bc0eecda61ec8e2eeeff25a55fac84f3efab6add3e3c1a95ef8ad0c2ed084da5fddce81126fe9f544d131348c782158c053e0a722a8c08687fb4425b541ec7f25ded2d45058e519f3838789dcebb4e9f7824ea649ecdc5c71e23fadaa1d5f21a9a95c0000000049454e44ae426082</data> </image> <image name="image28"> ! <data format="PNG" length="399">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000015649444154388db595b14a03411445cf8816292c02092441453f61ed62677e43f00302967e80167e809da560abe574b1f50752d85b4414e2428233e8c2b5d86c8c6bdc6422fbe0c1e3be37973b77dfb0461265c45a29ac0092a6199dbe2babe78dce64212ee95b71e7fcbec893ac6726a905784a7c74893abb1de081bd8b37558e6fff6f7c76f5c3b39e0aacc85ba0225cd2d21eaf46bcccc542898bd66df690c9616601cefa327273244be17315df5cdfe4958647194f5a52901500f4ae7ab27d4b548bb08f96c845d8b1c57b8f1f7b221f019860c5dd93ae8aa2b1d5d0a2ad981bfbb583b4f8049ec01803af93e608f069194c6cfb77000c9e07b03d01ebe0460e3621f63110b66e00b45d1b80d64e6b8a19932e8f244856551c5b00862fc3e9f791843ed2da7bbf1a7176b05aaf829b696cfc9c0b268ec7a987ce39a8fcfd0ec23d4eda349b4d7c92ee2d09f8c4ff9a3365fd4cbf00db6bf5f2e8c45df40000000049454e44ae426082</data> </image> <image name="image29"> ! <data format="PNG" length="434">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000017949444154388db593bf4ac35014c67f57ead0a143a1851614b483d0e2928e197d07bb3bf800d2a77170d3d14db235ab830fd082d00a4a0b161a68a5b9d0c07148223589cd1fec07879c7b2fe7bbdffdce891211f68183bdb00288c89fd1b87a92308f966d4522e76ec52513d57b8816876b1544227929ba61bf2077cf3029b9686c38ba40f51e2520c98e9d565c2f84cb7b895811b520ee9348218f3311ab6863944a7df1b6c7e1fa57517af39255aac85ea29258f33222f559a98ac7f634aa34dbcd053c4e8588e4b762703b106b6461d40cec914db7d1c51eda18dac0d216a63601546cc4d2d0bfe9cb2eb4cfdb92672a7e60d40c3fd900afc1f73d389c03da4f73135b230b80c9db044e60f631836370e60ed4c1d10e5060dccc9a0940ebac153b93a5805754f1d0573c1d4f1111169f0b4484f5720d15d05fba18b1ebb900344f9b30876abd0a2b2857cab0014d41e25051e8a9b... [truncated message content] |
From: Albert G. <ag...@us...> - 2007-11-17 12:53:08
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14611 Modified Files: qcalc.xml Added Files: guiexamples.png Log Message: update documentation --- NEW FILE: guiexamples.png --- (This appears to be a binary file; contents omitted.) Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** qcalc.xml 17 Nov 2007 12:23:45 -0000 1.15 --- qcalc.xml 17 Nov 2007 12:53:05 -0000 1.16 *************** *** 409,412 **** --- 409,419 ---- <para> + The following screenshot shows some of the GUI elements in action: + <screenshot> + <graphic fileref="guiexamples.png" align="center"/> + </screenshot> + </para> + + <para> NOTE: These functions will <emphasis>not</emphasis> work if they are run asynchronously (i.e., in a secondary Q thread of the user script). They <emphasis>must</emphasis> be executed, either directly or indirectly, from a formula in a spreadsheet cell. </para> |
From: Albert G. <ag...@us...> - 2007-11-17 12:23:50
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv12988 Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** qcalc.xml 17 Nov 2007 10:36:06 -0000 1.14 --- qcalc.xml 17 Nov 2007 12:23:45 -0000 1.15 *************** *** 102,107 **** </para> <para> ! When you enter a new or edit an existing cell value, the evaluation algorithm used by QCalc will only reevaluate the cells affected by this change. Cyclic computations (e.g., if cell A1 is computed using A1 itself, or if there is a ! cyclic chain of cell dependencies, such as A1=A2+1 and A2=2*A1) are permitted, but are executed in a "depth-first" order which breaks cycles in an apparently random way. The only thing that you can count on in such cases is that if you edit a given cell, then the change will propagate to other cells from there and each dependent cell will be recomputed at most once using the most recent values of all its requisite cells. </para> <para> --- 102,106 ---- </para> <para> ! When you enter a new or edit an existing cell value, the evaluation algorithm used by QCalc will only reevaluate the cells affected by this change. Cyclic computations (e.g., if cell A1 is computed using A1 itself, or if there is a cyclic chain of cell dependencies, such as A1=A2+1 and A2=2*A1) are permitted, but are executed in a "depth-first" order which breaks cycles in an apparently random way. The only thing that you can count on in such cases is that if you edit a given cell, then the change will propagate to other cells from there and each dependent cell will be recomputed at most once using the most recent values of all its requisite cells. </para> <para> *************** *** 111,114 **** --- 110,116 ---- Note that QCalc doesn't limit your spreadsheet to operations which always terminate. If a computation (indicated by the wait cursor) takes longer than expected, or just loops indefinitely, you can abort it with <keycap>Ctrl-G</keycap> (this is the only operation active while an evaluation is in progress), and correct the offending spreadsheet cells and/or definitions in the script. In the latter case you can then force a reevaluation of the entire spreadsheet by recompiling the script with <keycap>F9</keycap> (see <xref linkend="script"/> below). </para> + <para> + Also note that all computations are actually executed in a secondary process running your script in a separate instance of the Q interpreter, so it shouldn't be possible to mess up QCalc no matter how badly your script behaves. In the worst case, if your script just "hangs" or "dies", so that QCalc cannot perform further calculations, you should still be able to correct your script in the editor and then just restart it with <keycap>F9</keycap>. + </para> </section> *************** *** 234,269 **** </chapter> ! <chapter id="credits"><title>Credits and License</title> ! <para> ! QCalc is Copyright (c) 2007 Albert Graef and is distributed under the <ulink url="gplv2.html">GNU General Public License</ulink>. This document is Copyright (c) 2007 Albert Graef. The documentation is licensed under the terms of the <ulink url="fdl.html">GNU Free Documentation License</ulink>. ! </para> ! <para> ! Special thanks are due to Eddie Rucker from the Blue Montain College for testing, reporting bugs and providing examples. ! </para> ! </chapter> ! ! <appendix id="installation"><title>Installation</title> ! ! <sect1 id="getting"><title>How to obtain QCalc</title> ! <para> ! QCalc is available together with the other Qt/Q applications as a source tarball, as well as source and binary RPM packages, from the Q website at <ulink url="http://q-lang.sourceforge.net">http://q-lang.sourceforge.net</ulink>. ! </para> ! </sect1> ! ! <sect1 id="requirements"><title>Requirements</title> ! <para> ! You'll need the Q programming system, including the Qt/Q module, available from the Q website at <ulink url="http://q-lang.sourceforge.net">http://q-lang.sourceforge.net</ulink>. Currently this script needs Qt3 (<ulink url="http://trolltech.com">http://trolltech.com</ulink>), but we're planning to port it to Qt4 asap. ! </para> ! </sect1> ! ! <sect1 id="installing"><title>Installation Process</title> ! <para> ! As with other plain Q scripts, there's no compilation, so just run <command>make install</command> when installing from the sources. You may have to specify the proper installation prefix with <command>prefix=/some/path</command>; this should match Q's installation prefix, usually <filename>/usr/local</filename> or <filename>/usr</filename>. There are also some icons and desktop files included in the package, which are useful for the KDE and Gnome desktop environments, but these will have to be installed manually. (If you're installing from an RPM, hopefully these files will be copied the appropriate locations automatically, so that your application menu will show an entry for QCalc after installation.) ! </para> ! </sect1> ! ! </appendix> ! ! <appendix id="programming"><title>Programming QCalc</title> <para> --- 236,240 ---- </chapter> ! <chapter id="programming"><title>Programming QCalc</title> <para> *************** *** 272,276 **** <para> ! Note that to use any of these functions in your spreadsheet script, you have to add an import declaration to your script: <programlisting><![CDATA[import calclib; ]]></programlisting> --- 243,247 ---- <para> ! To use any of these functions in your spreadsheet script, an appropriate import declaration is needed: <programlisting><![CDATA[import calclib; ]]></programlisting> *************** *** 278,282 **** <para> ! (No explicit import is needed if you just want to use the operations in formulas.) </para> --- 249,253 ---- <para> ! Place this somewhere near the beginning of your script. (No explicit import is needed if you just want to use the operations in formulas.) </para> *************** *** 284,306 **** <para> ! <programlisting><![CDATA[public index, row, column; ! ]]></programlisting> </para> <para> ! These functions are used inside formulas to access the row and column indices of the cell currently being computed. The index function returns both indices as a pair <literal>(I,J)</literal> where <literal>I</literal> and <literal>J</literal> are the zero-based row and column indices, respectively. Thus <literal>A1</literal> will be returned as <literal>(0,0)</literal>, <literal>A2</literal> as <literal>(1,0)</literal>, <literal>B1</literal> as <literal>(0,1)</literal>, etc. The row and column functions return only the row and column number, respectively. </para> <para> ! <programlisting><![CDATA[public cellindex X, cellstr KEY, cellname KEY; ! ]]></programlisting> </para> <para> ! These functions can be used to convert between numeric cell indices like <literal>(0,0)</literal> and symbolic ones, either in string form (<literal>"A1"</literal>) or as a quoted symbol (<literal>'A1</literal>). The <literal>cellindex</literal> function converts from a string or a quoted symbol to the numeric index of the form <literal>(I,J)</literal>, whereas <literal>cellstr</literal> and <literal>cellname</literal> convert a numeric index back to a string or a quoted symbol, respectively. </para> <para> ! In the string and quoted symbol form, the <literal>$</literal> symbol is permitted as well. Note that constructions like <literal>'(A$4)</literal> aren't really symbols in Q, but applications of the built-in <literal>$</literal> operator, so they have to be surrounded with parentheses, as indicated. Also note that, when converting from a numeric index back to its symbolic form, the <literal>$</literal> indicators are lost since they aren't included in the numeric representation. </para> --- 255,275 ---- <para> ! The following functions allow you to retrieve information about the spreadsheet cell currently being worked on, and provide feedback about ongoing operations in the QCalc status line. </para> <para> ! <literal>public index, row, column;</literal> </para> <para> ! These functions are used inside formulas to access the row and column indices of the cell currently being computed. The index function returns both indices as a pair <literal>(I,J)</literal> where <literal>I</literal> and <literal>J</literal> are the zero-based row and column indices, respectively. Thus <literal>A1</literal> will be returned as <literal>(0,0)</literal>, <literal>A2</literal> as <literal>(1,0)</literal>, <literal>B1</literal> as <literal>(0,1)</literal>, etc. The <literal>row</literal> and <literal>column</literal> functions return only the row and column number, respectively. </para> <para> ! <literal>public cellindex X, cellstr KEY, cellname KEY;</literal> </para> <para> ! These functions can be used to convert between numeric cell indices like <literal>(0,0)</literal> and symbolic ones, either in string form (<literal>"A1"</literal>) or as a quoted symbol (<literal>'A1</literal>). The <literal>cellindex</literal> function converts from a string or a quoted symbol to the numeric index of the form <literal>(I,J)</literal>, whereas <literal>cellstr</literal> and <literal>cellname</literal> convert a numeric index back to a string or a quoted symbol, respectively. In the string and quoted symbol form, the <literal>$</literal> symbol is permitted as well. Note that constructs like <literal>'(A$4)</literal> aren't really symbols in Q, but applications of the built-in <literal>$</literal> operator, so they have to be surrounded with parentheses, as indicated. Also note that, when converting from a numeric index back to its symbolic form, the <literal>$</literal> indicators are lost since they aren't included in the numeric representation. </para> *************** *** 310,315 **** <para> ! <programlisting><![CDATA[public message S; ! ]]></programlisting> </para> --- 279,283 ---- <para> ! <literal>public message S;</literal> </para> *************** *** 323,341 **** <para> ! <programlisting><![CDATA[public setval KEY X; ! ]]></programlisting> </para> <para> ! This operation changes a cell value. It also returns that value, so that it can be applied to several cells in sequence. The given cell index <literal>KEY</literal> can be either in the numeric format as returned by the <literal>index</literal> function or in any of the symbolic formats supported by the <literal>cellindex</literal> routine (see <xref linkend="basicops"/>), and <literal>X</literal> may be any Q expression. If the given cell is an ordinary cell (no GUI element), then the current cell value is overwritten, so you should make sure that you do not have important data there. For GUI elements (see <xref linkend="basicguiops"/>), the value of the element is changed accordingly, instead of overwriting the cell. In both cases, after changing the cell value QCalc will update its display and trigger updates in dependent cells as usual. Note, however, that the triggered changes will <emphasis>not</emphasis> take effect immediately, rather they are processed by QCalc when the current computation is finished. </para> <para> ! <programlisting><![CDATA[public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs; ! ]]></programlisting> </para> <para> ! These are convenience functions implemented in terms of <literal>setval</literal> to store a list in a matrix or row/column vector of table cells. They return the given list value. For the <literal>matrix</literal> function, <literal>Xs</literal> must be a list of lists which are all of the same size; the component lists become the rows of the matrix. The <literal>rowvect</literal> and <literal>colvect</literal> routines create matrices with just one row or column for a given list of values, respectively. In any case the matrix or vector is inserted into the table starting at the given index <literal>KEY</literal> (given in any of the formats supported by <literal>setval</literal>). </para> --- 291,319 ---- <para> ! The following functions are provided to change spreadsheet cells programmatically. They also work when executed asynchronously, i.e., from a Q thread executing in the background. </para> <para> ! <literal>public setval KEY X;</literal> </para> <para> ! This operation changes a cell value. It also returns that value, so that it can be applied to several cells in sequence. The given cell index <literal>KEY</literal> can be a pair of numbers as returned by the <literal>index</literal> function, or it may be specified in any of the symbolic formats supported by the <literal>cellindex</literal> routine (see <xref linkend="basicops"/>). The <literal>X</literal> parameter may be any Q expression. If the given cell is an ordinary cell (no GUI element), then the current cell value is overwritten, so you should make sure that you do not have important data there. For GUI elements (see <xref linkend="basicguiops"/>), the value of the element is changed accordingly, instead of overwriting the cell. In both cases, after changing the cell value QCalc will update its display and trigger updates in dependent cells as usual. Note, however, that the triggered changes will <emphasis>not</emphasis> take effect immediately, rather they are processed by QCalc when the current computation is finished. </para> <para> ! <literal>public clearval KEY X;</literal> ! </para> ! ! <para> ! This function works like <literal>setval</literal>, but clears the cell before setting the new value. This is useful if you want to overwrite a cell already populated with a GUI element. ! </para> ! ! <para> ! <literal>public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs;</literal> ! </para> ! ! <para> ! These are convenience functions implemented in terms of <literal>setval</literal> to store a list in a matrix or a row or column vector of table cells. They return the given list value. For the <literal>matrix</literal> function, <literal>Xs</literal> must be a list of lists which are all of the same size; the component lists become the rows of the matrix. The <literal>rowvect</literal> and <literal>colvect</literal> routines create matrices with just one row or column for a given list of values, respectively. In any case the matrix or vector is inserted into the table starting at the given index <literal>KEY</literal> (given in any of the formats supported by <literal>setval</literal>). </para> *************** *** 345,359 **** <para> ! <programlisting><![CDATA[public checkbox ARGS, combobox ARGS, comboedit ARGS, spinbox ARGS, ! hslider ARGS, vslider ARGS, pushbutton ARGS, togglebutton ARGS; ! ]]></programlisting> </para> <para> ! These operations serve to define basic GUI elements in table cells. Currently supported are checkboxes, comboboxes (both non-editable and editable), spinboxes, horizontal and vertical sliders, push buttons and toggle buttons. </para> <para> ! The argument tuple <literal>ARGS</literal> depends on the specific kind of widget: </para> --- 323,335 ---- <para> ! These functions allow you to populate spreadsheet cells with basic GUI elements. </para> <para> ! <literal>public checkbox ARGS, combobox ARGS, comboedit ARGS, spinbox ARGS, hslider ARGS, vslider ARGS, pushbutton ARGS, togglebutton ARGS;</literal> </para> <para> ! Currently supported widget types are checkboxes, comboboxes (both non-editable and editable), spinboxes, horizontal and vertical sliders, push buttons and toggle buttons. The argument tuple <literal>ARGS</literal> depends on the specific kind of widget: </para> *************** *** 371,375 **** <listitem> <para> ! <literal>pushbutton S</literal> or <literal>pushbutton (S,ICON)</literal>, where <literal>S</literal> is the text of the button and <literal>ICON</literal> is the name of a pixmap file. Both arguments are strings. </para> <para> --- 347,351 ---- <listitem> <para> ! <literal>pushbutton S</literal> or <literal>pushbutton (S,ICON)</literal>, where <literal>S</literal> is the text of the button and <literal>ICON</literal> is the filename of a pixmap to be shown on the button. Both arguments are strings. </para> <para> *************** *** 404,411 **** <listitem> <para> ! <literal>spinbox (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF)</literal>, where <literal>MIN</literal> and <literal>MAX</literal> are the minimum and maximum value, <literal>STEP</literal> is the stepsize, <literal>INIT</literal> the initial value, <literal>SPECIAL</literal> a special string used to display the minimum value (commonly used for defaults) and <literal>PREF</literal> and <literal>SUFF</literal> are strings used as prefixes and suffixes in the value display (commonly used for currency symbols and units), respectively. See the QSpinBox page in the Qt manual for details. ! </para> ! <para> ! All arguments except <literal>MIN</literal> and <literal>MAX</literal> are optional. The numeric arguments <literal>MIN</literal>, <literal>MAX</literal>, <literal>STEP</literal> and <literal>INIT</literal> may be integers or floating point values; other Q <literal>Real</literal> values are coerced to <literal>Float</literal> if possible. </para> <para> --- 380,384 ---- <listitem> <para> ! <literal>spinbox (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF)</literal>, where <literal>MIN</literal> and <literal>MAX</literal> are the minimum and maximum value, <literal>STEP</literal> is the stepsize, <literal>INIT</literal> the initial value, <literal>SPECIAL</literal> a special string used to display the minimum value (commonly used for defaults) and <literal>PREF</literal> and <literal>SUFF</literal> are strings used as prefixes and suffixes in the value display (commonly used for currency symbols and units), respectively. See the QSpinBox page in the Qt manual for details. All arguments except <literal>MIN</literal> and <literal>MAX</literal> are optional. The numeric arguments <literal>MIN</literal>, <literal>MAX</literal>, <literal>STEP</literal> and <literal>INIT</literal> may be integers or floating point values; other Q <literal>Real</literal> values are coerced to <literal>Float</literal> if possible. </para> <para> *************** *** 416,423 **** <listitem> <para> ! <literal>hslider (MIN,MAX,STEP,INIT)</literal>, where <literal>MIN</literal> and <literal>MAX</literal> are the minimum and maximum value, <literal>STEP</literal> is the page stepsize and <literal>INIT</literal> the initial value (which is "clamped "to the given bounds). This creates a horizontal slider. See the QSlider page in the Qt manual for details. ! </para> ! <para> ! All arguments must be integer. The <literal>STEP</literal> and <literal>INIT</literal> parameters are optional. </para> <para> --- 389,393 ---- <listitem> <para> ! <literal>hslider (MIN,MAX,STEP,INIT)</literal>, where <literal>MIN</literal> and <literal>MAX</literal> are the minimum and maximum value, <literal>STEP</literal> is the page stepsize and <literal>INIT</literal> the initial value (which is "clamped" to the given bounds). This creates a horizontal slider. See the QSlider page in the Qt manual for details. All arguments must be integer. The <literal>STEP</literal> and <literal>INIT</literal> parameters are optional. </para> <para> *************** *** 463,511 **** <para> ! <programlisting><![CDATA[public special actionbutton ~ARGS X; ! ]]></programlisting> </para> <para> ! The action button is a special push button with a slightly different visual appearance, which has an associated Q expression (special argument) to be evaluated in the inferior Q process whenever the button is clicked. The <literal>ARGS</literal> parameter has the same format as for toggle buttons (the <literal>INIT</literal> parameter specifies the initial value of the button, 0 by default). The result returned by the action expression (which can be any Q value) becomes the value of the button when it is clicked. </para> <para> ! <programlisting><![CDATA[public special taskbutton ~ARGS X; ! ]]></programlisting> </para> <para> ! The task button works in a similar fashion, but instead of a direct action it has an associated <emphasis>background task</emphasis> (a Q thread) to be executed in the inferior Q process, and the button is operated as a <emphasis>toggle</emphasis> button which enables the user to "start" and "stop" the task. The <literal>ARGS</literal> parameter is the same as for <literal>togglebutton</literal>, without the <literal>ICON</literal> parameter (instead, the icon on the button is set and animated automatically in response to the current activation status of the thread). The special <literal>X</literal> parameter is the Q expression to be evaluated by the task. </para> <para> ! <programlisting><![CDATA[public task_input, task_index, task_row, task_column; ! ]]></programlisting> </para> <para> ! Inside the background task, the <literal>task_input</literal>, <literal>task_index</literal>, <literal>task_row</literal> and <literal>task_column</literal> functions are available to provide the input semaphore and the cell index of the task, respectively. (Note that the <literal>index</literal>, <literal>row</literal> and <literal>column</literal> functions don't work in background tasks, they can only be used inside formulas, so you have to use <literal>task_index</literal>, <literal>task_row</literal> and <literal>task_column</literal> instead. Also note that these values are only available in the original background task started by the <literal>taskbutton</literal> function; if your task in turn creates other threads which need to access these values, you have to pass them on to the secondary threads.) </para> <para> ! The <literal>task_input</literal> semaphore is a Q semaphore queue used to communicate values to the executing task in response to GUI actions inside QCalc. Usually these are either <literal>true</literal> or <literal>false</literal>, and are sent when the button state changes (<literal>true</literal> = button is switched on, i.e. the task was "started" by the user; <literal>false</literal> = button is off, the task was "stopped" or paused"). The background task can respond to these by taking some appropriate action, e.g., pause operation (or terminate altogether) if the <literal>false</literal> value is sent, or resume operation (if still active) when <literal>true</literal> is sent. Note that it is completely up to the task how it actually responds to these messages, if at all. However, it is a good idea to have the task at least empty the semaphore in regular time intervals to prevent the semaphore from being flooded with useless messages. In any case the semaphore queue will initially contain just the "startup" message (<literal>true</literal> if the task is initially started, <literal>false</literal> otherwise) when the tread is kicked off. </para> <para> ! The task_input semaphore may also yield a quoted taskbutton call of the form <literal>'(taskbutton (S,INIT) X)</literal> to indicate that the task button itself was updated while the task is still running. This happens when a triggered update of the button is caused by some requisite cells of the task button formula changing values. In such a case, rather than reexecuting the <literal>taskbutton</literal> function and restarting the task from scratch, the <literal>taskbutton</literal> expression with the new parameters are sent via the semaphore. Again, it is completely up to the task how it handles such a message; it may completely ignore it, or it may just evaluate the (unquoted) <literal>taskbutton</literal> call to replace itself with the new task (to support this, the <literal>taskbutton</literal> function, unlike the other GUI elements, may also be executed asynchronously). Alternatively, the task may also extract the needed data from the quoted taskbutton call and update its own internal state accordingly. To help with this, we provide the <literal>task_params</literal> special form which, when applied to the quoted expression <literal>'(taskbutton (S,INIT) (F X1 ... Xn))</literal>, where <literal>F X1 ... Xn</literal> is the new task expression, returns the parameter tuple <literal>(S,INIT,X1,...,Xn)</literal>: </para> <para> ! <programlisting><![CDATA[public special task_params X; ! ]]></programlisting> </para> <para> ! At any time, the background task can also send values back to the hosting QCalc process, using the <literal>setval</literal> function (see <xref linkend="changeops"/>) with <literal>task_index</literal> as the <literal>KEY</literal> argument. For instance, you can invoke <literal>setval task_index false</literal> to indicate that processing has finished and the task is stopped (this is also done automatically when the thread terminates). Currently, the recognized values to be sent back are <literal>false</literal> (the task is stopped), <literal>true</literal> (the task has been started, maybe in response to an asynchronous event), and arbitrary string values (which change the text label shown on the task button). QCalc will update the button in response to these messages and also change the cell value of the task button accordingly, which may trigger updates in other, dependent cells, see the description of the setval function below for further details. </para> <para> ! Note that, no matter what the purported "start/stopped" status of the button is, the user can always check whether the task associated with the button is currently up and running by taking a look at the arrow symbol shown on the button. If the task is currently executing (even if it hasn't been "started" by pushing down the button yet), the arrow symbol will be "lit" in green, otherwise it will be greyed out. Also note that in the latter case, if the thread has exited when the user starts it by pressing the button, the task will be restarted automatically. </para> --- 433,477 ---- <para> ! <literal>public special actionbutton ~ARGS X;</literal> </para> <para> ! The action button is a special push button with a slightly different visual appearance, which has an associated Q expression (special argument) to be evaluated whenever the button is clicked. The <literal>ARGS</literal> parameter has the same format as for toggle buttons (the <literal>INIT</literal> parameter specifies the initial value of the button, 0 by default). The result returned by the action expression (which can be any Q value) becomes the value of the button when it is clicked. </para> <para> ! <literal>public special taskbutton ~ARGS X;</literal> </para> <para> ! The task button works in a similar fashion, but instead of a direct action it has an associated <emphasis>background task</emphasis> (a Q thread) to be executed, and the button is operated as a <emphasis>toggle</emphasis> button which enables the user to "start" and "stop" the task. The <literal>ARGS</literal> parameter is the same as for <literal>togglebutton</literal>, without the <literal>ICON</literal> parameter (instead, the icon on the button is set and animated automatically in response to the current activation status of the thread). The special <literal>X</literal> parameter is the Q expression to be evaluated by the task. </para> <para> ! Inside the background task, the <literal>index</literal>, <literal>row</literal> and <literal>column</literal> functions work as usual and provide you with the cell index of the task. (Note that these values are in fact only available in the original background task started by the <literal>taskbutton</literal> function; if your task in turn creates other threads which need to access these values, you have to pass them on to the secondary threads.) </para> <para> ! <literal>public task_input;</literal> </para> <para> ! The <literal>task_input</literal> function equips you with a Q semaphore queue used to communicate values to the executing task in response to GUI actions inside QCalc. Usually these are either <literal>true</literal> or <literal>false</literal>, and are sent when the button state changes (<literal>true</literal> = button is switched on, i.e. the task was "started" by the user; <literal>false</literal> = button is off, the task was "stopped" or paused"). The background task can respond to these by taking some appropriate action, e.g., pause operation (or terminate altogether) if the <literal>false</literal> value is sent, or resume operation (if still active) when <literal>true</literal> is sent. Note that it is completely up to the task how it actually responds to these messages, if at all. However, it is a good idea to have the task at least empty the semaphore in regular time intervals to prevent the semaphore from being flooded with useless messages. In any case the semaphore queue will initially contain just the "startup" message (<literal>true</literal> if the task is initially started, <literal>false</literal> otherwise) when the tread is kicked off. </para> <para> ! The <literal>task_input</literal> semaphore may also yield a quoted <literal>taskbutton</literal> call of the form <literal>'(taskbutton (S,INIT) X)</literal> to indicate that the task button itself was updated while the task is still running. This happens when a triggered update of the button is caused by some requisite cells of the task button formula changing values. In such a case, rather than reexecuting the <literal>taskbutton</literal> function and restarting the task from scratch, the <literal>taskbutton</literal> expression with the new parameters is sent via the semaphore. Again, it is completely up to the task how it handles such a message; it may completely ignore it, or it may just evaluate the (unquoted) <literal>taskbutton</literal> call to replace itself with the new task (to support this, the <literal>taskbutton</literal> function, unlike the other GUI elements, may also be executed asynchronously). Alternatively, the task may also extract the needed data from the quoted <literal>taskbutton</literal> call and update its own internal state accordingly. To help with this, the following <literal>task_params</literal> special form is provided, which, when applied to a quoted expression of the form <literal>'(taskbutton (S,INIT) (F X1 ... Xn))</literal>, where <literal>F X1 ... Xn</literal> is the new task expression, returns the parameter tuple <literal>(S,INIT,X1,...,Xn)</literal>: </para> <para> ! <literal>public special task_params X;</literal> </para> <para> ! At any time, the background task can also send values back to the hosting QCalc process, using the <literal>setval</literal> function (see <xref linkend="changeops"/>) with <literal>index</literal> as the <literal>KEY</literal> argument. For instance, you can invoke <literal>setval index false</literal> to indicate that processing has finished and the task is stopped (this is also done automatically when the thread terminates). Currently, the recognized values to be sent back are <literal>false</literal> (the task is stopped), <literal>true</literal> (the task has been started, maybe in response to an asynchronous event), and arbitrary string values (which change the text label shown on the task button). QCalc will update the button in response to these messages and also change the cell value of the task button accordingly, which may trigger updates in other, dependent cells, see the description of the <literal>setval</literal> function for further details. </para> <para> ! Note that, no matter what the purported "start/stopped" status of the button is, the user can always check whether the task associated with the button is currently up and running by taking a look at the arrow symbol shown on the button. If the task is currently executing (even if it hasn't been "started" by pushing down the button yet), the arrow symbol will be "lit" in green, otherwise it will be greyed out. Also note that in the latter case, if the thread has exited when the user starts it by pressing the button, the task will be restarted automatically and will initially be fed with the message <literal>true</literal> to indicate that it should now go ahead with its business. </para> *************** *** 516,519 **** --- 482,516 ---- </sect1> + </chapter> + + <chapter id="credits"><title>Credits and License</title> + <para> + QCalc is Copyright (c) 2007 Albert Graef and is distributed under the <ulink url="gplv2.html">GNU General Public License</ulink>. This document is Copyright (c) 2007 Albert Graef. The documentation is licensed under the terms of the <ulink url="fdl.html">GNU Free Documentation License</ulink>. + </para> + <para> + Special thanks are due to Eddie Rucker from the Blue Montain College for testing, reporting bugs and providing examples. + </para> + </chapter> + + <appendix id="installation"><title>Installation</title> + + <sect1 id="getting"><title>How to obtain QCalc</title> + <para> + QCalc is available together with the other Qt/Q applications as a source tarball, as well as source and binary RPM packages, from the Q website at <ulink url="http://q-lang.sourceforge.net">http://q-lang.sourceforge.net</ulink>. + </para> + </sect1> + + <sect1 id="requirements"><title>Requirements</title> + <para> + You'll need the Q programming system, including the Qt/Q module, available from the Q website at <ulink url="http://q-lang.sourceforge.net">http://q-lang.sourceforge.net</ulink>. Currently this script needs Qt3 (<ulink url="http://trolltech.com">http://trolltech.com</ulink>), but we're planning to port it to Qt4 asap. + </para> + </sect1> + + <sect1 id="installing"><title>Installation Process</title> + <para> + As with other plain Q scripts, there's no compilation, so just run <command>make install</command> when installing from the sources. You may have to specify the proper installation prefix with <command>prefix=/some/path</command>; this should match Q's installation prefix, usually <filename>/usr/local</filename> or <filename>/usr</filename>. There are also some icons and desktop files included in the package, which are useful for the KDE and Gnome desktop environments, but these will have to be installed manually. (If you're installing from an RPM, hopefully these files will be copied the appropriate locations automatically, so that your application menu will show an entry for QCalc after installation.) + </para> + </sect1> + </appendix> |
From: Albert G. <ag...@us...> - 2007-11-17 10:39:59
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28706 Modified Files: calclib.q qcalc.q Log Message: add clearval operation Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.159 retrieving revision 1.160 diff -C2 -d -r1.159 -r1.160 *** qcalc.q 17 Nov 2007 04:21:56 -0000 1.159 --- qcalc.q 17 Nov 2007 10:39:55 -0000 1.160 *************** *** 782,785 **** --- 782,792 ---- (reg 1,reg 2), (I,J) = val K; + = process_sel2 [(I,J,X)] || merge_undo (I,J) + where X = recursive (process_clear (I,J) S) + if get STATE = 4 + where [(K,S)] = regex "" + "^\\+\\+\\+ Clear: (\\([0-9]+,[0-9]+\\)) (.*)$" S + (reg 1,reg 2), + (I,J) = val K; = qt X "setIconSet" ICONSET where [(K,S)] = regex "" *************** *** 812,815 **** --- 819,832 ---- S = if isstr S0 then S else S1; + // variation of the above, which also forcibly clears a GUI cell before + // setting the new value + + process_clear (I,J) S + = if null S1 then delete_cells (I,J) || + cell_setval (I,J) S0 || + clear_cell (I,J) || set_cell (I,J) S1 || S + where (S0,S1) = unquote S, + S = if isstr S0 then S else S1; + def TEMPL = "%s\nimport calclib;\n/* Main program generated by QCalc. */\n", CMD = "pwd='%s'; filename='%s'; cd \"$pwd\"; echo '+++ Compile:'; \ *************** *** 3337,3341 **** if (S = "+++ Syntax error.") or else not null (regex "" "^\\+\\+\\+ Exception: (.*)$" S ()); ! /* Message to change a cell (calclib::setval). */ = results_loop (insert U ((I1,J1),X)) [(I,J)|V] where X = process_update2 (I1,J1) S1 --- 3354,3358 ---- if (S = "+++ Syntax error.") or else not null (regex "" "^\\+\\+\\+ Exception: (.*)$" S ()); ! /* Messages to change a cell (calclib::setval and clearval). */ = results_loop (insert U ((I1,J1),X)) [(I,J)|V] where X = process_update2 (I1,J1) S1 *************** *** 3344,3347 **** --- 3361,3370 ---- (reg 1,reg 2), (I1,J1) = val K1; + = results_loop (insert U ((I1,J1),X)) [(I,J)|V] + where X = process_clear (I1,J1) S1 + where [(K1,S1)] = regex "" + "^\\+\\+\\+ Clear: (\\([0-9]+,[0-9]+\\)) (.*)$" S + (reg 1,reg 2), + (I1,J1) = val K1; /* Messages to create GUI elements in cells (calclib::combobox et al). */ = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** calclib.q 17 Nov 2007 07:39:57 -0000 1.36 --- calclib.q 17 Nov 2007 10:39:55 -0000 1.37 *************** *** 28,34 **** /* Set a cell value. The given cell index KEY can either be in the numeric format as returned by the index function or in any of the symbolic formats ! supported by the cellindex routine (see above). */ ! public setval KEY X; /* Convenience functions to store a list in a matrix or row/column vector of --- 28,36 ---- /* Set a cell value. The given cell index KEY can either be in the numeric format as returned by the index function or in any of the symbolic formats ! supported by the cellindex routine (see above). clearval works like setval, ! but clears an existing GUI element in the cell instead of setting its ! value. */ ! public setval KEY X, clearval KEY X; /* Convenience functions to store a list in a matrix or row/column vector of *************** *** 137,140 **** --- 139,146 ---- where (I:Int,J:Int) = indexarg KEY; + clearval KEY X = printf "\f+++ Clear: %s %s\n" (str (I,J),str X) || + if member (get YYDATA) (I,J) then yyset (I,J) X else X + where (I:Int,J:Int) = indexarg KEY; + matrix KEY Xs:List = dowith setval Ks (cat Xs) || Xs |
From: Albert G. <ag...@us...> - 2007-11-17 10:36:10
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28488 Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** qcalc.xml 12 Nov 2007 20:58:42 -0000 1.13 --- qcalc.xml 17 Nov 2007 10:36:06 -0000 1.14 *************** *** 163,167 **** </para> <para> ! Some special support operations for use in QCalc scripts can be found in the <filename>calclib.q</filename> module which is to be installed on the Q path. These operations allow you to show messages in the QCalc status line while a computation is in progress, and to change spreadsheet cells programmatically. Convenience functions to insert a vector or matrix given as a Q list into a corresponding range of table cells are also provided. It is even possible to perform asynchronous updates of the spreadsheet, using Q threads. Last but not least, there are a number of operations to populate cells with GUI elements like buttons, comboboxes, spinboxes and sliders, which provide a convenient means to enter values into your spreadsheet. See the <filename>calclib.q</filename> file for a description of these operations, and please have a look at the sample spreadsheets in the examples subdirectory of the QCalc distribution which show how these operations are used. </para> <para> --- 163,167 ---- </para> <para> ! Some special support operations for use in QCalc scripts can be found in the <filename>calclib.q</filename> module which is to be installed on the Q path. These are described in some detail in <xref linkend="programming"/>. </para> <para> *************** *** 265,267 **** --- 265,520 ---- </appendix> + <appendix id="programming"><title>Programming QCalc</title> + + <para> + QCalc comes with a little library of support functions to be used in spreadsheets. You can find these in the <filename>calclib.q</filename> script which must be installed somewhere on the Q library path. These operations allow you to show messages in the QCalc status line while a computation is in progress, and to change spreadsheet cells programmatically. Convenience functions to insert a vector or matrix given as a Q list into a corresponding range of table cells are also provided. It is even possible to perform asynchronous updates of the spreadsheet, using Q threads. Last but not least, there are a number of operations to populate cells with GUI elements like buttons, comboboxes, spinboxes and sliders, which provide a convenient means to enter values into your spreadsheet. Examples for most of these can be found in the sample spreadsheets in the examples subdirectory of the QCalc distribution. + </para> + + <para> + Note that to use any of these functions in your spreadsheet script, you have to add an import declaration to your script: + <programlisting><![CDATA[import calclib; + ]]></programlisting> + </para> + + <para> + (No explicit import is needed if you just want to use the operations in formulas.) + </para> + + <sect1 id="basicops"><title>Basic Operations</title> + + <para> + <programlisting><![CDATA[public index, row, column; + ]]></programlisting> + </para> + + <para> + These functions are used inside formulas to access the row and column indices of the cell currently being computed. The index function returns both indices as a pair <literal>(I,J)</literal> where <literal>I</literal> and <literal>J</literal> are the zero-based row and column indices, respectively. Thus <literal>A1</literal> will be returned as <literal>(0,0)</literal>, <literal>A2</literal> as <literal>(1,0)</literal>, <literal>B1</literal> as <literal>(0,1)</literal>, etc. The row and column functions return only the row and column number, respectively. + </para> + + <para> + <programlisting><![CDATA[public cellindex X, cellstr KEY, cellname KEY; + ]]></programlisting> + </para> + + <para> + These functions can be used to convert between numeric cell indices like <literal>(0,0)</literal> and symbolic ones, either in string form (<literal>"A1"</literal>) or as a quoted symbol (<literal>'A1</literal>). The <literal>cellindex</literal> function converts from a string or a quoted symbol to the numeric index of the form <literal>(I,J)</literal>, whereas <literal>cellstr</literal> and <literal>cellname</literal> convert a numeric index back to a string or a quoted symbol, respectively. + </para> + + <para> + In the string and quoted symbol form, the <literal>$</literal> symbol is permitted as well. Note that constructions like <literal>'(A$4)</literal> aren't really symbols in Q, but applications of the built-in <literal>$</literal> operator, so they have to be surrounded with parentheses, as indicated. Also note that, when converting from a numeric index back to its symbolic form, the <literal>$</literal> indicators are lost since they aren't included in the numeric representation. + </para> + + <para> + The most useful routine among these probably is the <literal>cellindex</literal> function which can be used with a quoted cell symbol to embed symbolic cell names into formulas, where they are adjusted automatically when copied or filled (this conversion is already built into <literal>setval</literal> et al, see <xref linkend="changeops"/>, so you do not have to use <literal>cellindex</literal> explicitly for these). + </para> + + <para> + <programlisting><![CDATA[public message S; + ]]></programlisting> + </para> + + <para> + This function sends a status message. The message will be shown in the QCalc status line. This can be used to provide some feedback during longer computations. + </para> + + </sect1> + + <sect1 id="changeops"><title>Changing Cell Values</title> + + <para> + <programlisting><![CDATA[public setval KEY X; + ]]></programlisting> + </para> + + <para> + This operation changes a cell value. It also returns that value, so that it can be applied to several cells in sequence. The given cell index <literal>KEY</literal> can be either in the numeric format as returned by the <literal>index</literal> function or in any of the symbolic formats supported by the <literal>cellindex</literal> routine (see <xref linkend="basicops"/>), and <literal>X</literal> may be any Q expression. If the given cell is an ordinary cell (no GUI element), then the current cell value is overwritten, so you should make sure that you do not have important data there. For GUI elements (see <xref linkend="basicguiops"/>), the value of the element is changed accordingly, instead of overwriting the cell. In both cases, after changing the cell value QCalc will update its display and trigger updates in dependent cells as usual. Note, however, that the triggered changes will <emphasis>not</emphasis> take effect immediately, rather they are processed by QCalc when the current computation is finished. + </para> + + <para> + <programlisting><![CDATA[public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs; + ]]></programlisting> + </para> + + <para> + These are convenience functions implemented in terms of <literal>setval</literal> to store a list in a matrix or row/column vector of table cells. They return the given list value. For the <literal>matrix</literal> function, <literal>Xs</literal> must be a list of lists which are all of the same size; the component lists become the rows of the matrix. The <literal>rowvect</literal> and <literal>colvect</literal> routines create matrices with just one row or column for a given list of values, respectively. In any case the matrix or vector is inserted into the table starting at the given index <literal>KEY</literal> (given in any of the formats supported by <literal>setval</literal>). + </para> + + </sect1> + + <sect1 id="basicguiops"><title>Basic GUI Elements</title> + + <para> + <programlisting><![CDATA[public checkbox ARGS, combobox ARGS, comboedit ARGS, spinbox ARGS, + hslider ARGS, vslider ARGS, pushbutton ARGS, togglebutton ARGS; + ]]></programlisting> + </para> + + <para> + These operations serve to define basic GUI elements in table cells. Currently supported are checkboxes, comboboxes (both non-editable and editable), spinboxes, horizontal and vertical sliders, push buttons and toggle buttons. + </para> + + <para> + The argument tuple <literal>ARGS</literal> depends on the specific kind of widget: + </para> + + <itemizedlist> + + <listitem> + <para> + <literal>checkbox S</literal> or <literal>checkbox (S,INIT)</literal>, where <literal>S</literal> is the label (a string) to be shown, and <literal>INIT</literal> (optionally) is the initial value (<literal>true</literal> or <literal>false</literal>, default is <literal>false</literal>). + </para> + <para> + The value of a checkbox is the current status of the checkbox, a Q boolean: <literal>true</literal> if checked, <literal>false</literal> otherwise. + </para> + </listitem> + + <listitem> + <para> + <literal>pushbutton S</literal> or <literal>pushbutton (S,ICON)</literal>, where <literal>S</literal> is the text of the button and <literal>ICON</literal> is the name of a pixmap file. Both arguments are strings. + </para> + <para> + The value of a push button is <literal>true</literal> as long as the button is pressed and <literal>false</literal> otherwise. + </para> + </listitem> + + <listitem> + <para> + <literal>togglebutton S</literal>, <literal>togglebutton (S,ICON)</literal> or <literal>togglebutton (S,ICON,INIT)</literal>: Analogous to push buttons, but toggle buttons are switched on and off by clicking them, and have an optional <literal>INIT</literal> argument which indicates the initial state (<literal>true</literal> or <literal>false</literal>, the default is <literal>false</literal>). + </para> + <para> + The value of a toggle button is <literal>true</literal> if it is currently on and <literal>false</literal> otherwise. (Note that a toggle button changes its state after being clicked, whereas a push button changes its state when it is pressed or released. Also note that a toggle button provides essentially the same functionality as a checkbox, using a different visual appearance.) + </para> + </listitem> + + <listitem> + <para> + <literal>combobox L</literal> or <literal>combobox (L,INIT)</literal>, where <literal>L</literal> denotes the list of items (strings) to choose, and <literal>INIT</literal> (optionally) is the initial item. + </para> + <para> + The value of a combobox is the currently selected item (a string). + </para> + </listitem> + + <listitem> + <para> + <literal>comboedit L</literal> or <literal>comboedit (L,INIT)</literal>: This works like <literal>combobox</literal>, except that the combobox is editable, i.e., the user can enter new items which become part of the combobox. + </para> + </listitem> + + <listitem> + <para> + <literal>spinbox (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF)</literal>, where <literal>MIN</literal> and <literal>MAX</literal> are the minimum and maximum value, <literal>STEP</literal> is the stepsize, <literal>INIT</literal> the initial value, <literal>SPECIAL</literal> a special string used to display the minimum value (commonly used for defaults) and <literal>PREF</literal> and <literal>SUFF</literal> are strings used as prefixes and suffixes in the value display (commonly used for currency symbols and units), respectively. See the QSpinBox page in the Qt manual for details. + </para> + <para> + All arguments except <literal>MIN</literal> and <literal>MAX</literal> are optional. The numeric arguments <literal>MIN</literal>, <literal>MAX</literal>, <literal>STEP</literal> and <literal>INIT</literal> may be integers or floating point values; other Q <literal>Real</literal> values are coerced to <literal>Float</literal> if possible. + </para> + <para> + The value of a spinbox is the numeric value (any prefixes and suffixes are stripped from the value). If a <literal>SPECIAL</literal> value has been set, the corresponding string is returned for the minimum value of the spinbox. + </para> + </listitem> + + <listitem> + <para> + <literal>hslider (MIN,MAX,STEP,INIT)</literal>, where <literal>MIN</literal> and <literal>MAX</literal> are the minimum and maximum value, <literal>STEP</literal> is the page stepsize and <literal>INIT</literal> the initial value (which is "clamped "to the given bounds). This creates a horizontal slider. See the QSlider page in the Qt manual for details. + </para> + <para> + All arguments must be integer. The <literal>STEP</literal> and <literal>INIT</literal> parameters are optional. + </para> + <para> + The value of a slider is the numeric value of the current slider position, an integer between <literal>MIN</literal> and <literal>MAX</literal>. + </para> + </listitem> + + <listitem> + <para> + <literal>vslider (MIN,MAX,STEP,INIT)</literal>: Like <literal>hslider</literal>, but creates a vertical slider instead. + </para> + </listitem> + + </itemizedlist> + + <para> + By placing a formula with a call to any of the widget functions into a cell, the cell becomes populated with the GUI element and the initial value of the GUI element becomes the new cell value. You can then change the value of the GUI element through GUI interactions, triggering reevaluations of dependent cells as if you typed the corresponding value directly into the cell. + </para> + + <para> + NOTE: These functions will <emphasis>not</emphasis> work if they are run asynchronously (i.e., in a secondary Q thread of the user script). They <emphasis>must</emphasis> be executed, either directly or indirectly, from a formula in a spreadsheet cell. + </para> + + <para> + The parameters of all GUI elements can be computed values which may also depend on other cell values (including other GUI elements). In this case the GUI element will be updated automatically whenever any of the requisite cells changes. In particular, you can also use GUI elements to <emphasis>display</emphasis> values from other cells by specifying the corresponding cell as the INIT parameter of the widget, or you can define "buddies" which always change values in concert, like a slider and an associated spinbox. + </para> + + <para> + Moreover, the values of all GUI elements except the push button (which is a read-only element) can also be set with <literal>setval</literal> (see <xref linkend="changeops"/>). This is useful, in particular, if the GUI element displays some value which is updated asynchronously. + </para> + + <para> + You can find examples for all types of widgets in the <filename>guiexamples.qcalc</filename> spreadsheet included in the QCalc distribution. + </para> + + </sect1> + + <sect1 id="advancedguiops"><title>Action and Task Buttons</title> + + <para> + QCalc also provides two advanced GUI elements to deal with custom actions to be executed in a spreadsheet. + </para> + + <para> + <programlisting><![CDATA[public special actionbutton ~ARGS X; + ]]></programlisting> + </para> + + <para> + The action button is a special push button with a slightly different visual appearance, which has an associated Q expression (special argument) to be evaluated in the inferior Q process whenever the button is clicked. The <literal>ARGS</literal> parameter has the same format as for toggle buttons (the <literal>INIT</literal> parameter specifies the initial value of the button, 0 by default). The result returned by the action expression (which can be any Q value) becomes the value of the button when it is clicked. + </para> + + <para> + <programlisting><![CDATA[public special taskbutton ~ARGS X; + ]]></programlisting> + </para> + + <para> + The task button works in a similar fashion, but instead of a direct action it has an associated <emphasis>background task</emphasis> (a Q thread) to be executed in the inferior Q process, and the button is operated as a <emphasis>toggle</emphasis> button which enables the user to "start" and "stop" the task. The <literal>ARGS</literal> parameter is the same as for <literal>togglebutton</literal>, without the <literal>ICON</literal> parameter (instead, the icon on the button is set and animated automatically in response to the current activation status of the thread). The special <literal>X</literal> parameter is the Q expression to be evaluated by the task. + </para> + + <para> + <programlisting><![CDATA[public task_input, task_index, task_row, task_column; + ]]></programlisting> + </para> + + <para> + Inside the background task, the <literal>task_input</literal>, <literal>task_index</literal>, <literal>task_row</literal> and <literal>task_column</literal> functions are available to provide the input semaphore and the cell index of the task, respectively. (Note that the <literal>index</literal>, <literal>row</literal> and <literal>column</literal> functions don't work in background tasks, they can only be used inside formulas, so you have to use <literal>task_index</literal>, <literal>task_row</literal> and <literal>task_column</literal> instead. Also note that these values are only available in the original background task started by the <literal>taskbutton</literal> function; if your task in turn creates other threads which need to access these values, you have to pass them on to the secondary threads.) + </para> + + <para> + The <literal>task_input</literal> semaphore is a Q semaphore queue used to communicate values to the executing task in response to GUI actions inside QCalc. Usually these are either <literal>true</literal> or <literal>false</literal>, and are sent when the button state changes (<literal>true</literal> = button is switched on, i.e. the task was "started" by the user; <literal>false</literal> = button is off, the task was "stopped" or paused"). The background task can respond to these by taking some appropriate action, e.g., pause operation (or terminate altogether) if the <literal>false</literal> value is sent, or resume operation (if still active) when <literal>true</literal> is sent. Note that it is completely up to the task how it actually responds to these messages, if at all. However, it is a good idea to have the task at least empty the semaphore in regular time intervals to prevent the semaphore from being flooded with useless messages. In any case the semaphore queue will initially contain just the "startup" message (<literal>true</literal> if the task is initially started, <literal>false</literal> otherwise) when the tread is kicked off. + </para> + + <para> + The task_input semaphore may also yield a quoted taskbutton call of the form <literal>'(taskbutton (S,INIT) X)</literal> to indicate that the task button itself was updated while the task is still running. This happens when a triggered update of the button is caused by some requisite cells of the task button formula changing values. In such a case, rather than reexecuting the <literal>taskbutton</literal> function and restarting the task from scratch, the <literal>taskbutton</literal> expression with the new parameters are sent via the semaphore. Again, it is completely up to the task how it handles such a message; it may completely ignore it, or it may just evaluate the (unquoted) <literal>taskbutton</literal> call to replace itself with the new task (to support this, the <literal>taskbutton</literal> function, unlike the other GUI elements, may also be executed asynchronously). Alternatively, the task may also extract the needed data from the quoted taskbutton call and update its own internal state accordingly. To help with this, we provide the <literal>task_params</literal> special form which, when applied to the quoted expression <literal>'(taskbutton (S,INIT) (F X1 ... Xn))</literal>, where <literal>F X1 ... Xn</literal> is the new task expression, returns the parameter tuple <literal>(S,INIT,X1,...,Xn)</literal>: + </para> + + <para> + <programlisting><![CDATA[public special task_params X; + ]]></programlisting> + </para> + + <para> + At any time, the background task can also send values back to the hosting QCalc process, using the <literal>setval</literal> function (see <xref linkend="changeops"/>) with <literal>task_index</literal> as the <literal>KEY</literal> argument. For instance, you can invoke <literal>setval task_index false</literal> to indicate that processing has finished and the task is stopped (this is also done automatically when the thread terminates). Currently, the recognized values to be sent back are <literal>false</literal> (the task is stopped), <literal>true</literal> (the task has been started, maybe in response to an asynchronous event), and arbitrary string values (which change the text label shown on the task button). QCalc will update the button in response to these messages and also change the cell value of the task button accordingly, which may trigger updates in other, dependent cells, see the description of the setval function below for further details. + </para> + + <para> + Note that, no matter what the purported "start/stopped" status of the button is, the user can always check whether the task associated with the button is currently up and running by taking a look at the arrow symbol shown on the button. If the task is currently executing (even if it hasn't been "started" by pushing down the button yet), the arrow symbol will be "lit" in green, otherwise it will be greyed out. Also note that in the latter case, if the thread has exited when the user starts it by pressing the button, the task will be restarted automatically. + </para> + + <para> + Examples for the use of action and task buttons can be found in the <filename>guiexamples.qcalc</filename> spreadsheet included in the QCalc distribution. + </para> + + </sect1> + + </appendix> + </book> |
From: Albert G. <ag...@us...> - 2007-11-17 08:26:44
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8384 Modified Files: guiexamples.qcalc Log Message: update task button example Index: guiexamples.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/guiexamples.qcalc,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** guiexamples.qcalc 16 Nov 2007 12:45:03 -0000 1.9 --- guiexamples.qcalc 17 Nov 2007 08:26:40 -0000 1.10 *************** *** 1,4 **** ! // qcalc 1.0, created Fri Nov 16 13:46:51 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),""),((38,0),""),((38,1),""),((38,2),""),((38,3),""),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((39,2),""),((39,3),""),((40,0),"The file you chose:"),((40,1),("",1,3)),((40,2),("",1,3)),((40,3),("",1,3)),((41,0),""),((41,1),""),((41,2),""),((41,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] --- 1,4 ---- ! // qcalc 1.0, created Sat Nov 17 09:26:50 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),""),((38,0),""),((38,1),""),((38,2),""),((38,3),""),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((39,2),""),((39,3),""),((40,0),"The file you chose:"),((40,1),("",1,5)),((40,2),("",1,5)),((40,3),("",1,5)),((41,0),""),((41,1),""),((41,2),""),((41,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] *************** *** 51,62 **** = countdown N N where 'Y = X, (_,_,N:Int) = task_params X; /* We're finally done processing messages from the user, count down now: */ ! = setval task_index $ sprintf "Counting... %d" I || // update the cell to the right with the current value ! setval (task_row,task_column+1) I || sleep 1 || countdown N (I-1) if I>0; /* Reaching zero. Sleep for another second so that the user has a chance to see our takeoff message on the button: */ ! = setval task_index "** Takeoff! **" || ! setval (task_row,task_column+1) I || sleep 1 || countdown N (I-1) if I=0; /* We're done, bail out: */ --- 51,62 ---- = countdown N N where 'Y = X, (_,_,N:Int) = task_params X; /* We're finally done processing messages from the user, count down now: */ ! = setval index $ sprintf "Counting... %d" I || // update the cell to the right with the current value ! setval (row,column+1) I || sleep 1 || countdown N (I-1) if I>0; /* Reaching zero. Sleep for another second so that the user has a chance to see our takeoff message on the button: */ ! = setval index "** Takeoff! **" || ! setval (row,column+1) I || sleep 1 || countdown N (I-1) if I=0; /* We're done, bail out: */ *************** *** 65,67 **** /* Clean up and exit. */ ! fini = setval task_index "&Run me!"; --- 65,67 ---- /* Clean up and exit. */ ! fini = setval index "&Run me!"; |
From: Albert G. <ag...@us...> - 2007-11-17 07:40:01
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1519 Modified Files: calclib.q Log Message: code cleanup, make index and friends work in tasks Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** calclib.q 17 Nov 2007 07:19:55 -0000 1.35 --- calclib.q 17 Nov 2007 07:39:57 -0000 1.36 *************** *** 4,14 **** /* This module provides some useful support functions for use in QCalc spreadsheets. You need to import this if you want to use any of the ! operations of this module in your spreadsheet script. ! ! Note that for QCalc to work properly, this script needs to be on the QPATH, ! therefore it is recommended that you install QCalc under the prefix where ! your Q installation lives. Otherwise you will have to set your QPATH ! accordingly. ! Please also refer the QCalc manual for a closer description of the functions provided by this module. */ --- 4,11 ---- /* This module provides some useful support functions for use in QCalc spreadsheets. You need to import this if you want to use any of the ! operations of this module in your spreadsheet script. Also note that for ! QCalc to work properly, this script needs to be on the QPATH, therefore it ! is recommended that you install QCalc under the prefix where your Q ! installation lives. Otherwise you will have to set your QPATH accordingly. Please also refer the QCalc manual for a closer description of the functions provided by this module. */ *************** *** 19,23 **** /* The following functions can be used to convert between numeric cell indices ! and symbolic ones, either in string form ("A1") or as a quoted symbol ('A1). */ --- 16,20 ---- /* The following functions can be used to convert between numeric cell indices ! (I,J) and symbolic ones, either in string form ("A1") or as a quoted symbol ('A1). */ *************** *** 29,41 **** public message S; ! /* Set a cell value (and return that value). The given cell index KEY can ! either be in the numeric format as returned by the index function or in any ! of the symbolic formats supported by the cellindex routine (see above), and ! X may be any Q expression. */ public setval KEY X; ! /* Convenience functions to convert a list to a matrix or row/column vector of ! table cells, and return the given list value. */ public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs; --- 26,37 ---- public message S; ! /* Set a cell value. The given cell index KEY can either be in the numeric ! format as returned by the index function or in any of the symbolic formats ! supported by the cellindex routine (see above). */ public setval KEY X; ! /* Convenience functions to store a list in a matrix or row/column vector of ! table cells. */ public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs; *************** *** 60,69 **** Inside the background task, the task_input function provides a Q semaphore queue used to communicate values to the executing task in response to GUI ! actions inside QCalc, and the task_params function can be used to extract ! arguments from a quoted taskbutton call (which is sent to the task when the ! button gets updated). */ public special taskbutton ~ARGS X, task_params X; ! public task_input, task_index, task_row, task_column; /* Implementation. *********************************************************/ --- 56,65 ---- Inside the background task, the task_input function provides a Q semaphore queue used to communicate values to the executing task in response to GUI ! actions on the button inside QCalc, and the task_params function can be ! used to extract arguments from a quoted taskbutton call (which is sent to ! the task when the button gets updated). */ public special taskbutton ~ARGS X, task_params X; ! public task_input; /* Implementation. *********************************************************/ *************** *** 81,87 **** private yyloop, yyout X, yyerror X; index = (I,J) where (I,J) = get YYKEY; ! row = I where (I,J) = get YYKEY; ! column = J where (I,J) = get YYKEY; /* Some helper routines. */ --- 77,88 ---- private yyloop, yyout X, yyerror X; + private task_index; + + /* index and friends. */ + index = (I,J) where (I,J) = get YYKEY; ! = (I,J) where (I,J) = task_index; ! row = I where (I,J) = index; ! column = J where (I,J) = index; /* Some helper routines. */ *************** *** 117,126 **** cellname (I,J) = valq S where S:String = cellstr (I,J); ! /* Message display */ message S:String = printf "\f+++ Message: %s\n" (str S); ! /* GUI elements. */ checkbox S:String --- 118,156 ---- cellname (I,J) = valq S where S:String = cellstr (I,J); ! /* Message display. */ message S:String = printf "\f+++ Message: %s\n" (str S); ! /* setval and friends. */ ! ! private indexarg KEY; ! ! indexarg (I:Int,J:Int) ! = (I,J) if (I>=0) and then (J>=0); ! indexarg S:String ! = (I,J) where (I,J) = cellindex S; ! indexarg 'X = (I,J) where (I,J) = cellindex 'X; ! ! setval KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || ! if member (get YYDATA) (I,J) then yyset (I,J) X else X ! where (I:Int,J:Int) = indexarg KEY; ! ! matrix KEY Xs:List ! = dowith setval Ks (cat Xs) || Xs ! where Ks = [(I0+I,J0+J) : I in [0..N-1], J in [0..M-1]] ! if all islist Xs and then all ((=M).(#)) Xs ! where Ys:List = hd Xs, N = #Xs, M = #Ys ! where (I0:Int,J0:Int) = indexarg KEY; ! ! rowvect KEY Xs:List ! = matrix (I0,J0) [Xs] || Xs ! where (I0:Int,J0:Int) = indexarg KEY; ! ! colvect KEY Xs:List ! = matrix (I0,J0) $ map (push []) Xs || Xs ! where (I0:Int,J0:Int) = indexarg KEY; ! ! /* Basic GUI elements. */ checkbox S:String *************** *** 303,308 **** task_index = (I,J) where (I,J,SEM) = get YYSEM!thread_no this_thread; - task_row = I where (I,J) = task_index; - task_column = J where (I,J) = task_index; private begin_task ARGS, end_task; --- 333,336 ---- *************** *** 344,376 **** where (I,J) = task_index; - /* setval and friends. */ - - private indexarg KEY; - - indexarg (I:Int,J:Int) - = (I,J) if (I>=0) and then (J>=0); - indexarg S:String - = (I,J) where (I,J) = cellindex S; - indexarg 'X = (I,J) where (I,J) = cellindex 'X; - - setval KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || - if member (get YYDATA) (I,J) then yyset (I,J) X else X - where (I:Int,J:Int) = indexarg KEY; - - matrix KEY Xs:List - = dowith setval Ks (cat Xs) || Xs - where Ks = [(I0+I,J0+J) : I in [0..N-1], J in [0..M-1]] - if all islist Xs and then all ((=M).(#)) Xs - where Ys:List = hd Xs, N = #Xs, M = #Ys - where (I0:Int,J0:Int) = indexarg KEY; - - rowvect KEY Xs:List - = matrix (I0,J0) [Xs] || Xs - where (I0:Int,J0:Int) = indexarg KEY; - - colvect KEY Xs:List - = matrix (I0,J0) $ map (push []) Xs || Xs - where (I0:Int,J0:Int) = indexarg KEY; - /* Internals. */ --- 372,375 ---- |
From: Albert G. <ag...@us...> - 2007-11-17 07:19:58
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv32260 Modified Files: calclib.q Log Message: comment changes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** calclib.q 16 Nov 2007 12:45:03 -0000 1.34 --- calclib.q 17 Nov 2007 07:19:55 -0000 1.35 *************** *** 3,7 **** /* This module provides some useful support functions for use in QCalc ! spreadsheets. You only need to import this if you want to use any of the operations of this module in your spreadsheet script. --- 3,7 ---- /* This module provides some useful support functions for use in QCalc ! spreadsheets. You need to import this if you want to use any of the operations of this module in your spreadsheet script. *************** *** 9,40 **** therefore it is recommended that you install QCalc under the prefix where your Q installation lives. Otherwise you will have to set your QPATH ! accordingly. */ ! /* Access the row and column indices of the cell currently being computed. ! The index function returns both indices as a pair (I,J) where I and J are ! the zero-based row and column indices, respectively. Thus A1 will be ! returned as (0,0), A2 as (1,0), B1 as (0,1), etc. The row and column ! functions return only the row and column number, respectively. */ public index, row, column; /* The following functions can be used to convert between numeric cell indices ! like (0,0) and symbolic ones, either in string form ("A1") or as a quoted ! symbol ('A1). The cellindex function converts from a string or a quoted ! symbol to the numeric index of the form (I,J), whereas cellstr and cellname ! convert a numeric index back to a string or a quoted symbol, respectively. ! ! In the string and quoted symbol form, the '$' symbol is permitted as well. ! Note that constructions like '(A$4) aren't really symbols in Q, but ! applications of the built-in $ operator, so they have to be surrounded with ! parentheses, as indicated. Also note that, when converting from a numeric ! index back to its symbolic form, the $ indicators are lost since they ! aren't included in the numeric representation. ! ! The most useful routine is the cellindex function which can be used with a ! quoted cell symbol to embed symbolic cell names into formulas, where they ! are adjusted automatically when copied or filled (this conversion is ! already built into setval et al, so you do not have to use cellindex ! explicitly for these). */ public cellindex X, cellstr KEY, cellname KEY; --- 9,24 ---- therefore it is recommended that you install QCalc under the prefix where your Q installation lives. Otherwise you will have to set your QPATH ! accordingly. ! Please also refer the QCalc manual for a closer description of the ! functions provided by this module. */ ! ! /* Access the row and column indices of the cell currently being computed. */ public index, row, column; /* The following functions can be used to convert between numeric cell indices ! and symbolic ones, either in string form ("A1") or as a quoted symbol ! ('A1). */ public cellindex X, cellstr KEY, cellname KEY; *************** *** 45,253 **** public message S; ! /* Definition of GUI elements in table cells. Currently supported are ! checkboxes, comboboxes (both non-editable and editable), spinboxes, ! horizontal and vertical sliders, push buttons and toggle buttons. ! ! The argument tuple ARGS depends on the specific kind of widget: ! ! - checkbox S or checkbox (S,INIT), where S is the label (a string) to be ! shown, and INIT (optionally) is the initial value (true or false, default ! is false). ! ! The value of a checkbox is the current status of the checkbox, a Q Bool: ! true if checked, false otherwise. ! ! - pushbutton S or pushbutton (S,ICON), where S is the text of the button ! and ICON is the name of a pixmap file. Both arguments are strings. ! ! The value of a push button is true as long as the button is pressed and ! false otherwise. ! ! - togglebutton S, togglebutton (S,ICON) or togglebutton (S,ICON,INIT): ! Analogous to push buttons, but toggle buttons are switched on and off by ! clicking them, and have an optional INIT argument which indicates the ! initial state (true or false, the default is false). ! ! The value of a toggle button is true if it is currently on and false ! otherwise. (Note that a toggle button changes its state after being ! clicked, whereas a push button changes its state when it is pressed or ! released. Also note that a toggle button provides essentially the same ! functionality as a checkbox, using a different visual appearance.) ! ! - combobox L or combobox (L,INIT), where L denotes the list of items ! (strings) to choose, and INIT (optionally) is the initial item. ! ! The value of a combobox is the currently selected item (a string). ! ! - comboedit L or comboedit (L,INIT): This works like combobox, except that ! the combobox is editable, i.e., the user can enter new items which become ! part of the combobox. ! ! - spinbox (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF), where MIN and MAX are the ! minimum and maximum value, STEP is the stepsize, INIT the initial value, ! SPECIAL a special string used to display the minimum value (commonly used ! for defaults) and PREF and SUFF are strings used as prefixes and suffixes ! in the value display (commonly used for currency symbols and units), ! respectively. See the QSpinBox page in the Qt manual for details. ! ! All arguments except MIN and MAX are optional. The numeric arguments MIN, ! MAX, STEP and INIT may be integers or floating point values; other Q Real ! values are coerced to Float if possible. ! ! The value of a spinbox is the numeric value (any prefixes and suffixes ! are stripped from the value). If a SPECIAL value has been set, the ! corresponding string is returned for the minimum value of the spinbox. ! ! - hslider (MIN,MAX,STEP,INIT), where MIN and MAX are the minimum and ! maximum value, STEP is the page stepsize and INIT the initial value ! (which is clamped to the given bounds). This creates a horizontal ! slider. See the QSlider page in the Qt manual for details. ! ! All arguments must be integer. The STEP and INIT parameters are optional. ! ! The value of a slider is the numeric value of the current slider ! position, an integer between MIN and MAX. ! ! - vslider (MIN,MAX,STEP,INIT): Like hslider, but creates a vertical slider ! instead. ! ! By placing a call to any of the widget functions into a cell, the cell ! becomes populated with the corresponding GUI element. You can then change ! the value of the GUI element, triggering reevaluations of dependent cells ! as if you typed the corresponding value directly into the cell. ! NOTE: These functions will *not* work if they are run asynchronously (i.e., ! in a secondary Q thread of the user script). They *must* be executed, ! either directly or indirectly, from a formula in a spreadsheet cell. ! The parameters of all GUI elements can be computed values which may also ! depend on other cell values (including other GUI elements). In this case ! the GUI element will be updated automatically whenever any of the requisite ! cells changes. In particular, you can also use GUI elements to *display* ! values from other cells by specifying the corresponding cell as the INIT ! parameter of the widget, or you can define "buddies" which always change ! values in concert, like a slider and an associated spinbox. ! Moreover, the values of all GUI elements except the push button (which is a ! read-only element) can also be set with setval (see below). This is useful, ! in particular, if the GUI element displays some value which is updated ! asynchronously. ! You can find examples for all types of widgets in the guiexamples.qcalc ! spreadsheet included in the QCalc distribution. */ public checkbox ARGS, combobox ARGS, comboedit ARGS, spinbox ARGS, hslider ARGS, vslider ARGS, pushbutton ARGS, togglebutton ARGS; ! /* The action button is a special push button with a slightly different visual ! appearance, which has an associated Q expression (special argument) to be ! evaluated in the inferior Q process whenever the button is clicked. The ! ARGS parameter has the same format as for toggle buttons (the INIT ! parameter specifies the initial value of the button, 0 by default). The ! result returned by the action expression (which can be any Q value) becomes ! the value of the button when it is clicked. */ public special actionbutton ~ARGS X; ! /* The task button is a special toggle button with a slightly different visual ! appearance and an associated background task (Q thread) to be executed in ! the inferior Q process. The ARGS parameter is the same as for togglebutton, ! without the ICON parameter (instead, the icon on the button is set and ! animated automatically in response to the current activation status of the ! thread). The special X parameter is the Q expression to be evaluated by the ! task. ! ! Inside the background task, the task_input, task_index, task_row and ! task_column functions are available to provide the input semaphore and the ! cell index of the task, respectively. (Note that the index, row and column ! functions don't work in background tasks, they can only be used inside ! formulas, so you have to use task_index, task_row and task_column instead. ! Also note that these values are only available in the original background ! task started by the taskbutton function; if your task in turn creates other ! threads which need to access these values, you have to pass them on to the ! secondary threads.) ! ! The task_input semaphore is a Q semaphore queue used to communicate values ! to the executing task in response to GUI actions inside QCalc. Usually ! these are either 'true' or 'false', and are sent when the button state ! changes (true = button is switched on, i.e. the task was "started" by the ! user; false = button is off, the task was "stopped" or "paused"). The ! background task can respond to these by taking some appropriate action, ! e.g., pause operation (or terminate altogether) if the 'false' value is ! sent, or resume operation (if still active) when 'true' is sent. Note that ! it is completely up to the task how it actually responds to these messages, ! if at all. However, it is a good idea to have the task at least empty the ! semaphore in regular time intervals to prevent the semaphore from being ! flooded with useless messages. In any case the semaphore queue will ! initially contain just the "startup" message (true if the task is initially ! started, false otherwise) when the tread is kicked off. ! ! The task_input semaphore may also yield a quoted taskbutton call of the ! form '(taskbutton (S,INIT) X) to indicate that the task button itself was ! updated while the task is still running. This happens when a triggered ! update of the button is caused by some requisite cells of the task button ! formula changing values. In such a case, rather than reexecuting the ! taskbutton function and restarting the task from scratch, the taskbutton ! expression with the new parameters are sent via the semaphore. Again, it is ! completely up to the task how it handles such a message; it may completely ! ignore it, or it may just evaluate the (unquoted) taskbutton call to ! replace itself with the new task (to support this, the taskbutton function, ! unlike the other GUI elements, may also be executed asynchronously). ! Alternatively, the task may also extract the needed data from the quoted ! taskbutton call and update its own internal state accordingly. To help with ! this, we provide the task_params special form which, when applied to the ! quoted expression '(taskbutton (S,INIT) (F X1 ... Xn)), where F X1 ... Xn ! is the new task expression, returns the parameter tuple (S,INIT,X1,...,Xn). ! ! At any time, the background task can also send values back to the hosting ! QCalc process, using the setval function (see below) with task_index as the ! KEY argument. For instance, you can do a 'setval task_index false' to ! indicate that processing has finished and the task is stopped (this is also ! done automatically when the thread terminates). Currently, the recognized ! values to be sent back are 'false' (the task is stopped), 'true' (the task ! has been started, maybe in response to an asynchronous event), and ! arbitrary string values (which change the text label shown on the task ! button). QCalc will update the button in response to these messages and ! also change the cell value of the task button accordingly, which may ! trigger updates in other, dependent cells, see the description of the ! setval function below for further details. ! ! Note that, no matter what the purported "start/stopped" status of the ! button is, the user can always check whether the task associated with the ! button is currently up and running by taking a look at the arrow symbol ! shown on the button. If the task is currently executing (even if it hasn't ! been "started" by pushing the button down yet), the arrow symbol will be ! "lit" in green, otherwise it will be greyed out. Also note that in the ! latter case, if the thread has exited when the user starts it by pressing ! the button, the task will be restarted automatically. */ public special taskbutton ~ARGS X, task_params X; public task_input, task_index, task_row, task_column; - /* Set a cell value (and return that value). The given cell index KEY can - either be in the numeric format as returned by the index function or in any - of the symbolic formats supported by the cellindex routine (see above), and - X may be any Q expression. If the given cell is an ordinary cell (no GUI - element), then the current cell value is overwritten, so you should make - sure that you do not have important data there. For GUI elements, the value - of the element is changed accordingly, instead of overwriting the cell. In - both cases, after changing the cell value QCalc will update its display and - trigger updates in dependent cells as usual. Note, however, that the - triggered changes will *not* take effect immediately, rather they are - processed by QCalc when the current computation is finished. */ - - public setval KEY X; - - /* Convert a list to a matrix or row/column vector of table cells, and return - the given list value. For the matrix function, Xs must be a list of lists - which are all of the same size; the component lists become the rows of the - matrix. The rowvect and colvect routines are convenience functions to - create matrices with just one row or column for a given list of values, - respectively. In any case the matrix or vector is inserted into the table - starting at the given index KEY (given in any of the formats supported by - setval). */ - - public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs; - /* Implementation. *********************************************************/ --- 29,70 ---- public message S; ! /* Set a cell value (and return that value). The given cell index KEY can ! either be in the numeric format as returned by the index function or in any ! of the symbolic formats supported by the cellindex routine (see above), and ! X may be any Q expression. */ ! public setval KEY X; ! /* Convenience functions to convert a list to a matrix or row/column vector of ! table cells, and return the given list value. */ ! public matrix KEY Xs, rowvect KEY Xs, colvect KEY Xs; ! /* Definition of GUI elements in table cells. Currently supported are ! checkboxes, comboboxes (both non-editable and editable), spinboxes, ! horizontal and vertical sliders, push buttons and toggle buttons. You can ! find examples for all of these in the guiexamples.qcalc spreadsheet ! included in the QCalc distribution. */ public checkbox ARGS, combobox ARGS, comboedit ARGS, spinbox ARGS, hslider ARGS, vslider ARGS, pushbutton ARGS, togglebutton ARGS; ! /* The action button is a special push button which has an associated Q ! expression (special argument) to be evaluated in the inferior Q process ! whenever the button is clicked. */ public special actionbutton ~ARGS X; ! /* Likewise, the task button is a special toggle button with an associated ! background task (a Q thread) to be executed in the inferior Q process. ! Inside the background task, the task_input function provides a Q semaphore ! queue used to communicate values to the executing task in response to GUI ! actions inside QCalc, and the task_params function can be used to extract ! arguments from a quoted taskbutton call (which is sent to the task when the ! button gets updated). */ public special taskbutton ~ARGS X, task_params X; public task_input, task_index, task_row, task_column; /* Implementation. *********************************************************/ |
From: Albert G. <ag...@us...> - 2007-11-17 04:22:00
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11835 Modified Files: qcalc.q Log Message: comment changes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.158 retrieving revision 1.159 diff -C2 -d -r1.158 -r1.159 *** qcalc.q 16 Nov 2007 13:11:18 -0000 1.158 --- qcalc.q 17 Nov 2007 04:21:56 -0000 1.159 *************** *** 26,33 **** - Configurable fonts and colors for the syntax highlighting. ! - Configurable table size, or maybe allow to add new rows and columns ! anywhere in the table. ! ! - Add configurable cell properties (floating point format, alignment, span, fonts, colors, frames, etc.). --- 26,30 ---- - Configurable fonts and colors for the syntax highlighting. ! - Add configurable cell properties (floating point format, alignment, fonts, colors, frames, etc.). |
From: Albert G. <ag...@us...> - 2007-11-16 13:11:22
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv19887 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.157 retrieving revision 1.158 diff -C2 -d -r1.157 -r1.158 *** qcalc.q 16 Nov 2007 11:44:15 -0000 1.157 --- qcalc.q 16 Nov 2007 13:11:18 -0000 1.158 *************** *** 2768,2772 **** = // make sure that the new value is set in the inferior // process (also check that the value is transferable) ! submit_val (I,J) Y || process_gui (I,J) X if checkval Y where Y = gui_getval X; --- 2768,2772 ---- = // make sure that the new value is set in the inferior // process (also check that the value is transferable) ! submit_val (I,J) Y if checkval Y where Y = gui_getval X; |
From: Albert G. <ag...@us...> - 2007-11-16 12:45:15
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4100/examples Modified Files: guiexamples.qcalc Log Message: add another action button example Index: guiexamples.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/guiexamples.qcalc,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** guiexamples.qcalc 16 Nov 2007 10:42:55 -0000 1.8 --- guiexamples.qcalc 16 Nov 2007 12:45:03 -0000 1.9 *************** *** 1,15 **** ! // qcalc 1.0, created Fri Nov 16 11:15:41 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] // Start of script. Please do not remove this line. ! /* Countdown task for the task button example. */ ! import calclib; /* Main entry point, invoke this with N = the number to count from. ! Note that we start out by reading the first message to see whether ! we're actually started or not. */ task N = if B then countdown N N where B:Bool = get task_input; --- 1,37 ---- ! // qcalc 1.0, created Fri Nov 16 13:46:51 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((33,0),""),((33,1),""),((33,2),""),((33,3),""),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((34,2),""),((34,3),""),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((35,3),""),((36,0),""),((36,1),""),((36,2),""),((36,3),""),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((37,3),""),((38,0),""),((38,1),""),((38,2),""),((38,3),""),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((39,2),""),((39,3),""),((40,0),"The file you chose:"),((40,1),("",1,3)),((40,2),("",1,3)),((40,3),("",1,3)),((41,0),""),((41,1),""),((41,2),""),((41,3),"")] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] // Start of script. Please do not remove this line. ! import calclib, smokeqt, system; ! /**********************************************************************/ ! ! /* "Open file" action button example. You invoke this simply as ! 'open_file' to create an action button which, when clicked, lets you ! select a file in Qt's standard open file dialog and writes the result ! to the cell below the button. ! ! Note that the action is actually performed asynchronously in the ! interpreter process, but it will still block qcalc from doing ! further computations while it runs. If this is a problem, you might ! consider to execute the job as a background task instead. */ ! ! // We need a dummy Qt application object for this. ! def (APP,ARGV) = qt_app ARGS; ! ! open_file ! = actionbutton ("&Open file ...","","") $ setval (row+1,column) $ ! qt "QFileDialog" "getOpenFileName" ! (getcwd, "All files (*.*)", nil, "Open which file?"); ! ! /**********************************************************************/ ! ! /* Countdown task example. */ /* Main entry point, invoke this with N = the number to count from. ! Note that we start out by reading the first message from the ! task_input queue to see whether we're actually started or not. */ task N = if B then countdown N N where B:Bool = get task_input; |
From: Albert G. <ag...@us...> - 2007-11-16 12:45:07
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4100 Modified Files: calclib.q Log Message: add another action button example Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** calclib.q 16 Nov 2007 10:14:50 -0000 1.33 --- calclib.q 16 Nov 2007 12:45:03 -0000 1.34 *************** *** 586,591 **** yyaction (I:Int,J:Int) ! = setval (I,J) Y ! where 'X = get YYACT!(I,J), Y = catch fail X; yyclearaction (I:Int,J:Int) --- 586,592 ---- yyaction (I:Int,J:Int) ! = YYKEY := () || setval (I,J) Y ! where 'X = get YYACT!(I,J), ! Y = YYKEY := (I,J) || catch fail X; yyclearaction (I:Int,J:Int) |
From: Albert G. <ag...@us...> - 2007-11-16 11:44:23
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6257 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.156 retrieving revision 1.157 diff -C2 -d -r1.156 -r1.157 *** qcalc.q 16 Nov 2007 10:57:14 -0000 1.156 --- qcalc.q 16 Nov 2007 11:44:15 -0000 1.157 *************** *** 759,764 **** "Compile finished with errors. Please check the log!" || show_editor; digest "+++ Done." = STATE := 3 || ! statusmsg "Compile finished, starting interpreter"; ! digest "+++ Ready." = STATE := 4 || statusmsg "Ready"; digest "+++ Exiting." = STATE := 0; --- 759,768 ---- "Compile finished with errors. Please check the log!" || show_editor; digest "+++ Done." = STATE := 3 || ! statusmsg "Compile finished, starting interpreter" ! if get STATE < 3; ! = () otherwise; ! digest "+++ Ready." = STATE := 4 || statusmsg "Ready" ! if get STATE < 4; ! = () otherwise; digest "+++ Exiting." = STATE := 0; |
From: Albert G. <ag...@us...> - 2007-11-16 10:57:18
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11058 Modified Files: qcalc.q Log Message: disable tab focus on special GUI elements Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.155 retrieving revision 1.156 diff -C2 -d -r1.155 -r1.156 *** qcalc.q 16 Nov 2007 10:41:36 -0000 1.155 --- qcalc.q 16 Nov 2007 10:57:14 -0000 1.156 *************** *** 2431,2435 **** pushbutton_gui (I,J) () (TEXT,ICON) ! = qt_connect X (SIGNAL "pressed()") X (SLOT "guiUpdate()") || qt_connect X (SIGNAL "released()") X (SLOT "guiUpdate()") || qt TABLE "setCellWidget" (I,J,X) || IT --- 2431,2436 ---- pushbutton_gui (I,J) () (TEXT,ICON) ! = qt X "setFocusPolicy" (qt_val "QWidget" "ClickFocus") || ! qt_connect X (SIGNAL "pressed()") X (SLOT "guiUpdate()") || qt_connect X (SIGNAL "released()") X (SLOT "guiUpdate()") || qt TABLE "setCellWidget" (I,J,X) || IT *************** *** 2455,2459 **** actionbutton_gui (I,J) () (TEXT,ICON,INIT) ! = qt X "setFlat" true || qt_connect X (SIGNAL "clicked()") X (SLOT "guiUpdate()") || qt TABLE "setCellWidget" (I,J,X) || IT --- 2456,2461 ---- actionbutton_gui (I,J) () (TEXT,ICON,INIT) ! = qt X "setFocusPolicy" (qt_val "QWidget" "ClickFocus") || ! qt X "setFlat" true || qt_connect X (SIGNAL "clicked()") X (SLOT "guiUpdate()") || qt TABLE "setCellWidget" (I,J,X) || IT *************** *** 2479,2483 **** togglebutton_gui (I,J) () (TEXT,ICON,INIT) ! = qt X "setToggleButton" true || qt X "setOn" INIT || qt_connect X (SIGNAL "toggled(bool)") --- 2481,2486 ---- togglebutton_gui (I,J) () (TEXT,ICON,INIT) ! = qt X "setFocusPolicy" (qt_val "QWidget" "ClickFocus") || ! qt X "setToggleButton" true || qt X "setOn" INIT || qt_connect X (SIGNAL "toggled(bool)") *************** *** 2506,2510 **** taskbutton_gui (I,J) () (TEXT,INIT) ! = qt X "setToggleButton" true || qt X "setFlat" true || qt X "setOn" INIT || --- 2509,2514 ---- taskbutton_gui (I,J) () (TEXT,INIT) ! = qt X "setFocusPolicy" (qt_val "QWidget" "ClickFocus") || ! qt X "setToggleButton" true || qt X "setFlat" true || qt X "setOn" INIT || *************** *** 2527,2531 **** spinbox_gui (I,J) () (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V) ! = // FIXME: implement more appropriate validation here // currently we just switch it off qt X "setValidator" nil || --- 2531,2536 ---- spinbox_gui (I,J) () (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V) ! = qt X "setFocusPolicy" (qt_val "QWidget" "ClickFocus") || ! // FIXME: implement more appropriate validation here // currently we just switch it off qt X "setValidator" nil || *************** *** 2559,2563 **** slider_gui (I,J) () (MIN,MAX,STEP,INIT,VERT) ! = qt X "setLineStep" STEP || qt_connect X (SIGNAL "valueChanged(int)") X (SLOT "guiUpdate()") || --- 2564,2569 ---- slider_gui (I,J) () (MIN,MAX,STEP,INIT,VERT) ! = qt X "setFocusPolicy" (qt_val "QWidget" "ClickFocus") || ! qt X "setLineStep" STEP || qt_connect X (SIGNAL "valueChanged(int)") X (SLOT "guiUpdate()") || |