q-lang-cvs Mailing List for Q - Equational Programming Language (Page 11)
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-12-06 08:41:54
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30539 Modified Files: README Log Message: update README Index: README =================================================================== RCS file: /cvsroot/q-lang/qcalc/README,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** README 4 Dec 2007 18:46:27 -0000 1.20 --- README 6 Dec 2007 08:41:47 -0000 1.21 *************** *** 85,88 **** --- 85,90 ---- - CSV file import and export. + - LaTeX export. + - Special cell attributes like number format, alignment, color, font and frames, etc. Currently you'll have to help yourself with ASCII art or with a |
From: Albert G. <ag...@us...> - 2007-12-06 07:46:32
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv3782 Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** qcalc.xml 5 Dec 2007 00:03:43 -0000 1.27 --- qcalc.xml 6 Dec 2007 07:46:28 -0000 1.28 *************** *** 72,75 **** --- 72,78 ---- </para> <para> + In difference to other spreadsheets, a table cell in QCalc may contain arbitrary Q values and thus cell values may in fact be complex data structures, not just strings and numbers. It is also possible to populate cells with special GUI elements, including various types of widgets for numerical and symbolic data entry, as well as graphical plots of spreadsheet data using the gnuplot program, see <xref linkend="programming"/> for details. + </para> + <para> Each spreadsheet initially starts out with 128x26 cells, i.e. rows 1 thru 128 and columns A thru Z. (This is currently hardcoded in the program, but you can change the default size by editing the <filename>qcalc.ui</filename> file accordingly.) A spreadsheet grows and shrinks as necessary with certain editing operations (see <xref linkend="editing"/>), but QCalc always keeps it at a minimum size of 128x26. </para> *************** *** 241,249 **** <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> ! To use any of these functions in your spreadsheet script, an appropriate import declaration is needed: <programlisting><![CDATA[import calclib; ]]></programlisting> --- 244,252 ---- <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. 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. Some special GUI elements allow you to execute custom actions and background tasks in your spreadsheet. Using these facilities, QCalc also provides special support for the <ulink url="http://gnuplot.sourceforge.net">gnuplot</ulink> program which enables you to draw graphical plots of your data in table cells. </para> <para> ! Examples for the usage of most support functions can be found in the sample spreadsheets in the examples subdirectory of the QCalc distribution. To use any of these functions in your spreadsheet script, an appropriate import declaration is needed: <programlisting><![CDATA[import calclib; ]]></programlisting> |
From: Albert G. <ag...@us...> - 2007-12-06 02:19:45
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28155 Added Files: world.dat world.qcalc Log Message: add animated globe gnuplot example --- NEW FILE: world.dat --- # # World map data from the gnuplot distribution (http://www.gnuplot.info). # $Id: world.dat,v 1.1 2007/12/06 02:19:40 agraef Exp $ # -92.32 48.24 -88.13 48.92 -83.11 46.27 -81.66 44.76 -82.09 42.29 -77.10 44.00 -69.95 46.92 -65.92 45.32 -66.37 44.25 -61.22 45.43 -64.94 47.34 -64.12 48.52 -70.68 47.02 -67.24 49.33 -59.82 50.48 [...1285 lines suppressed...] -69.34 -70.13 -49.20 -77.83 -44.59 -78.79 -44.14 -80.13 -59.04 -79.95 -49.28 -77.84 -48.24 -77.81 -58.13 -80.12 -63.25 -80.20 -58.32 -80.12 -163.64 -78.74 -161.20 -79.93 -163.62 -78.74 66.82 66.82 66.82 66.82 --- NEW FILE: world.qcalc --- // qcalc 1.0, created Thu Dec 6 03:24:05 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((1,0),"= hslider (0,180,1,60)"),((1,1),"= hslider (0,360,1,136)"),((1,2),"= animate"),((2,0),("= globe A2 B2",1,3))] // [(2,238)] // [] // Start of script. Please do not remove this line. /* This was shamelessly pilfered from animate2.dem in the gnuplot distribution. */ import calclib; /* Render the globe (world map data is in world.dat). */ globe XR ZR = gnuplot (sprintf "\ unset title\n\ unset key\n\ unset xtics\n\ unset ytics\n\ unset ztics\n\ set border 0\n\ set hidden3d nooffset\n\ set parametric\n\ set angles degrees\n\ set samples 64,64\n\ set isosamples 13,13\n\ set mapping spherical\n\ set dummy u,v\n\ set urange [ -90.0000 : 90.0000 ] noreverse nowriteback\n\ set vrange [ 0.00000 : 360.000 ] noreverse nowriteback\n\ set style data line\n\ set view %d, %d, 2, 1\n\ set size square\n\ \n\ splot cos(u)*cos(v),cos(u)*sin(v),sin(u) notitle with lines lt 5, \ 'world.dat' notitle with lines lt 2 lw 3\n" (XR,ZR)) (); /* Taskbutton to do a little animation. */ animate = taskbutton "&Animate" (start (get task_input)); start true = running time 136 (try task_input); running T Z false = (); running T Z _ = setval 'B2 Z || sleep (T+0.1-time) || running time ((Z+355) mod 360) (try task_input); |
From: Albert G. <ag...@us...> - 2007-12-05 00:03:47
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv18263/doc Modified Files: qcalc.xml Log Message: typo Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** qcalc.xml 4 Dec 2007 22:38:42 -0000 1.26 --- qcalc.xml 5 Dec 2007 00:03:43 -0000 1.27 *************** *** 507,511 **** <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> --- 507,511 ---- <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> |
From: Albert G. <ag...@us...> - 2007-12-04 22:38:46
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8166/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.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** qcalc.xml 4 Dec 2007 21:33:19 -0000 1.25 --- qcalc.xml 4 Dec 2007 22:38:42 -0000 1.26 *************** *** 569,573 **** <para> ! The <literal>gnuplot</literal> function allows you to embed graphical plots of your data in a spreadaheet. <ulink url="http://gnuplot.sourceforge.net">Gnuplot</ulink> is a very comprehensive plotting software with which you can produce most common kinds of 2D and 3D diagrams quite easily. NOTE: Currently this feature only works under X11 and it also requires a fairly recent gnuplot version which supports the 'x11-external' option (any gnuplot version no older than 4.3, or CVS as of Dec 4 2007, should do). Also note that by default, the <literal>gnuplot</literal> function assumes that your installed gnuplot program is named <command>gnuplot</command>. If necessary, you can set the <literal>GNUPLOT</literal> string variable to a different name for the executable. </para> --- 569,573 ---- <para> ! The <literal>gnuplot</literal> function allows you to embed graphical plots of your data in a spreadsheet. <ulink url="http://gnuplot.sourceforge.net">Gnuplot</ulink> is a very comprehensive plotting software with which you can produce most common kinds of 2D and 3D diagrams quite easily. NOTE: Currently this feature only works under X11 and it also requires a fairly recent gnuplot version which supports the 'x11-external' option (at the time of this writing, this is only available with the CVS version of gnuplot as of Dec 4 2007 or later). Also note that by default, the <literal>gnuplot</literal> function assumes that your installed gnuplot program is named <command>gnuplot</command>. If necessary, you can set the <literal>GNUPLOT</literal> string variable to a different name for the executable. </para> *************** *** 617,621 **** </para> <para> ! To utilize the plotting functionality discussed in <xref linkend="gnuplot"/>, you'll also need X11 and a gnuplot version which supports the 'x11-external' option (gnuplot version 4.3 or later, or CVS as of Dec 4 2007), available from <ulink url="http://gnuplot.sourceforge.net">http://gnuplot.sourceforge.net</ulink>. (Make sure that you compile gnuplot with png support, since gnuplot's png terminal is needed to render plots when printing a spreadsheet.) </para> </sect1> --- 617,621 ---- </para> <para> ! To utilize the plotting functionality discussed in <xref linkend="gnuplot"/>, you'll also need X11 and a recent gnuplot version which supports the 'x11-external' option, available from <ulink url="http://gnuplot.sourceforge.net">http://gnuplot.sourceforge.net</ulink>. (Currently you'll need the CVS version of gnuplot as of Dec 4 2007 or later. Also make sure that you compile gnuplot with png support, since gnuplot's png terminal is needed to render plots when printing a spreadsheet.) </para> </sect1> |
From: Albert G. <ag...@us...> - 2007-12-04 21:33:24
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11240 Modified Files: qcalc.xml Added Files: gnuplot.png Log Message: update documentation --- NEW FILE: gnuplot.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.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** qcalc.xml 2 Dec 2007 10:33:37 -0000 1.24 --- qcalc.xml 4 Dec 2007 21:33:19 -0000 1.25 *************** *** 120,124 **** </para> <para> ! There are also many useful keyboard and mouse shortcuts. You can browse through your spreadsheet with the mouse or the cursor keys, including the <keycap>Tab</keycap> and <keycap>Backtab</keycap> keys which traverse to the next and previous table cell (in row-major order), respectively. <keycap>F3</keycap> edits a cell, <keycap>Esc</keycap> aborts the edit (reverting the cell to its previous value), and <keycap>F2</keycap> or <keycap>Return</keycap> stores the edited value (and does any necessary computations). You can force reevaluation of a cell by pressing <keycap>F2</keycap> while the cell is selected, and a double click opens a cell for editing. You can also just start typing when a cell is selected, to overwrite its current value. All editing is done in place, right there in the cell; there is no separate line edit control as in other spreadsheets. Cell indices and formulas are shown in the status line when you click on them. </para> <para> --- 120,124 ---- </para> <para> ! There are also many useful keyboard and mouse shortcuts. You can browse through your spreadsheet with the mouse or the cursor keys, including the <keycap>Tab</keycap> and <keycap>Backtab</keycap> keys which traverse to the next and previous table cell (in row-major order), respectively. <keycap>F3</keycap> or <keycap>Shift-F3</keycap> edits a cell (the former edits the cell "in-place", while the latter invokes a separate multiline editor which is often more convenient for complicated formulas), <keycap>Esc</keycap> aborts the edit (reverting the cell to its previous value), and <keycap>F2</keycap> or <keycap>Return</keycap> stores the edited value (and does any necessary computations). You can force reevaluation of a cell by pressing <keycap>F2</keycap> while the cell is selected, and a double click opens a cell for editing. You can also just start typing when a cell is selected, to overwrite its current value. Cell indices and formulas are shown in the status line when you click on them. </para> <para> *************** *** 217,221 **** <section id="printing"><title>Printing</title> <para> ! You can print a spreadsheet with the <guimenuitem>Print</guimenuitem> (<keycap>Ctrl-P</keycap>) command in the <guimenu>File</guimenu> menu. This isn't very sophisticated right now, and it isn't "WYSIWYG" either, but at least it does simple pagination and adds some formatting. After invoking this operation, QCalc shows Qt's standard printer setup dialog: </para> <screenshot> --- 217,221 ---- <section id="printing"><title>Printing</title> <para> ! You can print a spreadsheet with the <guimenuitem>Print</guimenuitem> (<keycap>Ctrl-P</keycap>) command in the <guimenu>File</guimenu> menu. This isn't very sophisticated right now, and it isn't "WYSIWYG" either, but at least it does simple pagination, adds some formatting, and renders plots created with gnuplot (cf. <xref linkend="gnuplot"/>). After invoking this operation, QCalc shows Qt's standard printer setup dialog: </para> <screenshot> *************** *** 232,236 **** </screenshot> <para> ! Here you can choose which parts of the document should be printed (spreadsheet, script, or both) and whether to print just the cell values, just the formulas, or both. There are also configurable headers and footers which can show the spreadsheet filename and running page numbers, and for the script printout you can enable or disable the line numbering. These options are remembered across invocations, whereas the printer setup only sticks for the duration of the QCalc session. </para> </section> --- 232,236 ---- </screenshot> <para> ! Here you can choose which parts of the document should be printed (spreadsheet, script, or both) and whether to print just the cell contents, just the formulas, or both. There are also configurable headers and footers which can show the spreadsheet filename and running page numbers, and for the script printout you can enable or disable the line numbering. These options are remembered across invocations, whereas the printer setup only sticks for the duration of the QCalc session. </para> </section> *************** *** 558,561 **** --- 558,596 ---- </sect1> + <sect1 id="gnuplot"><title>Gnuplot Support</title> + + <para> + The following convenience function is provided to set up a task window running gnuplot. + </para> + + <para> + <literal>public gnuplot CMD DATA;</literal> + </para> + + <para> + The <literal>gnuplot</literal> function allows you to embed graphical plots of your data in a spreadaheet. <ulink url="http://gnuplot.sourceforge.net">Gnuplot</ulink> is a very comprehensive plotting software with which you can produce most common kinds of 2D and 3D diagrams quite easily. NOTE: Currently this feature only works under X11 and it also requires a fairly recent gnuplot version which supports the 'x11-external' option (any gnuplot version no older than 4.3, or CVS as of Dec 4 2007, should do). Also note that by default, the <literal>gnuplot</literal> function assumes that your installed gnuplot program is named <command>gnuplot</command>. If necessary, you can set the <literal>GNUPLOT</literal> string variable to a different name for the executable. + </para> + + <para> + The <literal>CMD</literal> parameter of <literal>gnuplot</literal> is a string containing the gnuplot command used to produce the plot, and <literal>DATA</literal> is the data to be plotted, usually a range of cell values. <literal>DATA</literal> can also be <literal>()</literal> if no additional data is required, or a tuple of lists if multiple datasets are to be plotted. Each dataset must either be a list of integer or floating point values, or a list of lists of such values, which will be translated to inline data in ASCII format as described in Section 61 of the gnuplot manual. Each element of the dataset becomes one line in the ASCII format. Blank lines (which are required by some plotting commands) can be produced using an empty list inside your dataset. You then use <literal>'-'</literal> to specify each dataset inside the gnuplot command as usual. Alternatively, you can also specify the data yourself inside the gnuplot command string, employing any of gnuplot's supported data formats, and use <literal>()</literal> as the <literal>DATA</literal> argument. + </para> + + <para> + You can use pretty much any gnuplot command in the command string; multiple gnuplot commands are separated with a semicolon or a newline character. However, your command shouldn't specify any output terminal or file (as set with the <literal>set term</literal> and <literal>set output</literal> commands) since these will be set up by QCalc when rendering the plot for the display or a printout. Also note that plots in different cells are each produced with their own gnuplot instance, so all required setup information (axes, titles, plot styles etc.) must be included in each gnuplot command; there is no sharing of such information between different cells. + </para> + + <para> + See the <filename>plot.qcalc</filename> spreadsheet included in the QCalc distribution for an example. Here is a screenshot showing gnuplot in action: + <screenshot> + <graphic fileref="gnuplot.png" align="center"/> + </screenshot> + </para> + + <para> + Note that the plots are really full instances of gnuplot running inside the table cells, which can be operated with the mouse as usual. For instance it is possible to rotate the 3D plot shown on the right by just dragging around the mouse in the cell. + </para> + + </sect1> + </chapter> *************** *** 581,584 **** --- 616,622 ---- 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> + <para> + To utilize the plotting functionality discussed in <xref linkend="gnuplot"/>, you'll also need X11 and a gnuplot version which supports the 'x11-external' option (gnuplot version 4.3 or later, or CVS as of Dec 4 2007), available from <ulink url="http://gnuplot.sourceforge.net">http://gnuplot.sourceforge.net</ulink>. (Make sure that you compile gnuplot with png support, since gnuplot's png terminal is needed to render plots when printing a spreadsheet.) + </para> </sect1> |
From: Albert G. <ag...@us...> - 2007-12-04 21:11:07
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv27682 Added Files: plot.qcalc Log Message: add gnuplot example --- NEW FILE: plot.qcalc --- // qcalc 1.0, created Tue Dec 4 22:08:20 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((1,0),"= label \"<center><b>x</b></center>\""),((1,1),"= label \"<center><b>sin(x)</b></center>\""),((1,2),"= label \"<center><b>cos(x)</b></center>\""),((1,4),("= label \"<h1>Gnuplot Examples</h1> <p>This example shows how to render plots inside qcalc using gnuplot. Note that the plots are really active gnuplot instances, so gnuplot's \\\"mousing\\\" techniques work as usual. E.g., try rotating the 3D plot on the right by dragging the mouse in the cell.</p>\"",6,3)),((2,0),"-5"),((2,1),"= sin (2*A3)"),((2,2),"= cos (2*B3)"),((3,0),"-4"),((3,1),"= sin (2*A4)"),((3,2),"= cos (2*B4)"),((4,0),"-3"),((4,1),"= sin (2*A5)"),((4,2),"= cos (2*B5)"),((5,0),"-2"),((5,1),"= sin (2*A6)"),((5,2),"= cos (2*B6)"),((6,0),"-1"),((6,1),"= sin (2*A7)"),((6,2),"= cos (2*B7)"),((7,0),"0"),((7,1),"= sin (2*A8)"),((7,2),"= cos (2*B8)"),((8,0),"1"),((8,1),"= sin (2*A9)"),((8,2),"= cos (2*B9)"),((9,0),"2"),((9,1),"= sin (2*A10)"),((9,2),"= cos (2*B10)"),((10,0),"3"),((10,1),"= sin (2*A11)"),((10,2),"= cos (2*B11)"),((10,4),"X range:"),((10,5),"= spinbox (-100,100,1,-15)"),((10,6),"= spinbox (-100,100,1,15)"),((11,0),"4"),((11,1),"= sin (2*A12)"),((11,2),"= cos (2*B12)"),((11,4),"Y range:"),((11,5),"= spinbox (-100,100,1,-15)"),((11,6),"= spinbox (-100,100,1,15)"),((12,0),"5"),((12,1),"= sin (2*A13)"),((12,2),"= cos (2*B13)"),((12,4),"Samples/Iso:"),((12,5),"= spinbox (1,100,1,25)"),((12,6),"= spinbox (1,100,1,20)"),((14,0),("= gnuplot \"set yrange [-1.5:1.5]; plot '-' using 1:2 title 'sin(x)' smooth csplines, '-' using 1:3 title 'cos(x)' smooth csplines\" (A3:C13,A3:C13)",1,3)),((14,4),("= gnuplot (sprintf \"set samples %d; set isosamples %d; set xrange [%g:%g]; set yrange [%g:%g]; set zrange [-0.25:1]; set pm3d; splot sin(sqrt(x**2+y**2))/sqrt(x**2+y**2)\" (F13,G13,F11,G11,F12,G12)) ()",1,4)),((15,0),("= label \"<b>2D plot using data from the spreadsheet</b>\"",1,3)),((15,4),("= label \"<b>3D plot using gnuplot-generated data</b>\"",1,4))] // [(14,250)] // [(3,52)] // Start of script. Please do not remove this line. |
From: Albert G. <ag...@us...> - 2007-12-04 18:46:30
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv22653 Modified Files: README Log Message: update README Index: README =================================================================== RCS file: /cvsroot/q-lang/qcalc/README,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** README 4 Dec 2007 00:58:13 -0000 1.19 --- README 4 Dec 2007 18:46:27 -0000 1.20 *************** *** 89,95 **** 'label' GUI element. - - A multiline cell editor. Editing complicated formulas on a single line can - be awkward at times. - Enjoy! :) --- 89,92 ---- |
From: Albert G. <ag...@us...> - 2007-12-04 18:45:18
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21747 Modified Files: qcalc.q qcalc.ui Added Files: celleditor.ui Log Message: added cell editor popup --- NEW FILE: celleditor.ui --- <!DOCTYPE UI><UI version="3.3" stdsetdef="1"> <class>CellEditor</class> <widget class="QDialog"> <property name="name"> <cstring>CellEditor</cstring> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>511</width> <height>282</height> </rect> </property> <property name="caption"> <string>Cell Editor</string> </property> <property name="sizeGripEnabled"> <bool>true</bool> </property> <property name="modal"> <bool>true</bool> </property> <vbox> <property name="name"> <cstring>unnamed</cstring> </property> <widget class="QTextEdit"> <property name="name"> <cstring>textEdit</cstring> </property> <property name="textFormat"> <enum>PlainText</enum> </property> <property name="linkUnderline"> <bool>false</bool> </property> <property name="autoFormatting"> <set>AutoNone</set> </property> </widget> <widget class="QLayoutWidget"> <property name="name"> <cstring>layout2</cstring> </property> <hbox> <property name="name"> <cstring>unnamed</cstring> </property> <widget class="QPushButton"> <property name="name"> <cstring>buttonOk</cstring> </property> <property name="text"> <string>&OK</string> </property> <property name="accel"> <string>F2</string> </property> <property name="autoDefault"> <bool>true</bool> </property> <property name="default"> <bool>true</bool> </property> </widget> <spacer> <property name="name"> <cstring>Horizontal Spacing2</cstring> </property> <property name="orientation"> <enum>Horizontal</enum> </property> <property name="sizeType"> <enum>Expanding</enum> </property> <property name="sizeHint"> <size> <width>270</width> <height>20</height> </size> </property> </spacer> <widget class="QPushButton"> <property name="name"> <cstring>buttonCancel</cstring> </property> <property name="text"> <string>&Cancel</string> </property> <property name="accel"> <string></string> </property> <property name="autoDefault"> <bool>true</bool> </property> </widget> </hbox> </widget> </vbox> </widget> <connections> <connection> <sender>buttonOk</sender> <signal>clicked()</signal> <receiver>CellEditor</receiver> <slot>accept()</slot> </connection> <connection> <sender>buttonCancel</sender> <signal>clicked()</signal> <receiver>CellEditor</receiver> <slot>reject()</slot> </connection> </connections> <layoutdefaults spacing="6" margin="11"/> </UI> Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** qcalc.ui 23 Nov 2007 22:22:36 -0000 1.24 --- qcalc.ui 4 Dec 2007 18:45:14 -0000 1.25 *************** *** 307,313 **** <action name="editNextCellAction"/> <action name="editPreviousCellAction"/> - <action name="editEditAction"/> <action name="editAcceptAction"/> <action name="editCancelAction"/> <separator/> <action name="editMergeCellsAction"/> --- 307,314 ---- <action name="editNextCellAction"/> <action name="editPreviousCellAction"/> <action name="editAcceptAction"/> <action name="editCancelAction"/> + <action name="editEditAction"/> + <action name="editCellEditorAction"/> <separator/> <action name="editMergeCellsAction"/> *************** *** 387,391 **** <action name="editGotoAction"/> <separator/> ! <action name="editEditAction"/> <action name="editAcceptAction"/> <action name="editCancelAction"/> --- 388,392 ---- <action name="editGotoAction"/> <separator/> ! <action name="editCellEditorAction"/> <action name="editAcceptAction"/> <action name="editCancelAction"/> *************** *** 664,668 **** </property> <property name="iconSet"> ! <iconset>image0</iconset> </property> <property name="text"> --- 665,669 ---- </property> <property name="iconSet"> ! <iconset>image14</iconset> </property> <property name="text"> *************** *** 684,688 **** </property> <property name="iconSet"> ! <iconset>image14</iconset> </property> <property name="text"> --- 685,689 ---- </property> <property name="iconSet"> ! <iconset>image15</iconset> </property> <property name="text"> *************** *** 701,705 **** </property> <property name="iconSet"> ! <iconset>image15</iconset> </property> <property name="text"> --- 702,706 ---- </property> <property name="iconSet"> ! <iconset>image16</iconset> </property> <property name="text"> *************** *** 718,722 **** </property> <property name="iconSet"> ! <iconset>image16</iconset> </property> <property name="text"> --- 719,723 ---- </property> <property name="iconSet"> ! <iconset>image17</iconset> </property> <property name="text"> *************** *** 735,739 **** </property> <property name="iconSet"> ! <iconset>image17</iconset> </property> <property name="text"> --- 736,740 ---- </property> <property name="iconSet"> ! <iconset>image18</iconset> </property> <property name="text"> *************** *** 760,764 **** </property> <property name="iconSet"> ! <iconset>image18</iconset> </property> <property name="text"> --- 761,765 ---- </property> <property name="iconSet"> ! <iconset>image19</iconset> </property> <property name="text"> *************** *** 777,781 **** </property> <property name="iconSet"> ! <iconset>image19</iconset> </property> <property name="text"> --- 778,782 ---- </property> <property name="iconSet"> ! <iconset>image20</iconset> </property> <property name="text"> *************** *** 794,798 **** </property> <property name="iconSet"> ! <iconset>image20</iconset> </property> <property name="text"> --- 795,799 ---- </property> <property name="iconSet"> ! <iconset>image21</iconset> </property> <property name="text"> *************** *** 811,815 **** </property> <property name="iconSet"> ! <iconset>image21</iconset> </property> <property name="text"> --- 812,816 ---- </property> <property name="iconSet"> ! <iconset>image22</iconset> </property> <property name="text"> *************** *** 828,832 **** </property> <property name="iconSet"> ! <iconset>image22</iconset> </property> <property name="text"> --- 829,833 ---- </property> <property name="iconSet"> ! <iconset>image23</iconset> </property> <property name="text"> *************** *** 845,849 **** </property> <property name="iconSet"> ! <iconset>image23</iconset> </property> <property name="text"> --- 846,850 ---- </property> <property name="iconSet"> ! <iconset>image24</iconset> </property> <property name="text"> *************** *** 862,866 **** </property> <property name="iconSet"> ! <iconset>image24</iconset> </property> <property name="text"> --- 863,867 ---- </property> <property name="iconSet"> ! <iconset>image25</iconset> </property> <property name="text"> *************** *** 882,886 **** </property> <property name="iconSet"> ! <iconset>image25</iconset> </property> <property name="text"> --- 883,887 ---- </property> <property name="iconSet"> ! <iconset>image26</iconset> </property> <property name="text"> *************** *** 913,917 **** </property> <property name="iconSet"> ! <iconset>image26</iconset> </property> <property name="text"> --- 914,918 ---- </property> <property name="iconSet"> ! <iconset>image27</iconset> </property> <property name="text"> *************** *** 1015,1019 **** </property> <property name="iconSet"> ! <iconset>image27</iconset> </property> <property name="text"> --- 1016,1020 ---- </property> <property name="iconSet"> ! <iconset>image28</iconset> </property> <property name="text"> *************** *** 1032,1036 **** </property> <property name="iconSet"> ! <iconset>image28</iconset> </property> <property name="text"> --- 1033,1037 ---- </property> <property name="iconSet"> ! <iconset>image29</iconset> </property> <property name="text"> *************** *** 1049,1053 **** </property> <property name="iconSet"> ! <iconset>image29</iconset> </property> <property name="text"> --- 1050,1054 ---- </property> <property name="iconSet"> ! <iconset>image30</iconset> </property> <property name="text"> *************** *** 1066,1070 **** </property> <property name="iconSet"> ! <iconset>image30</iconset> </property> <property name="text"> --- 1067,1071 ---- </property> <property name="iconSet"> ! <iconset>image31</iconset> </property> <property name="text"> *************** *** 1083,1087 **** </property> <property name="iconSet"> ! <iconset>image31</iconset> </property> <property name="text"> --- 1084,1088 ---- </property> <property name="iconSet"> ! <iconset>image32</iconset> </property> <property name="text"> *************** *** 1100,1104 **** </property> <property name="iconSet"> ! <iconset>image32</iconset> </property> <property name="text"> --- 1101,1105 ---- </property> <property name="iconSet"> ! <iconset>image33</iconset> </property> <property name="text"> *************** *** 1117,1121 **** </property> <property name="iconSet"> ! <iconset>image33</iconset> </property> <property name="text"> --- 1118,1122 ---- </property> <property name="iconSet"> ! <iconset>image34</iconset> </property> <property name="text"> *************** *** 1187,1191 **** </property> <property name="iconSet"> ! <iconset>image34</iconset> </property> <property name="text"> --- 1188,1192 ---- </property> <property name="iconSet"> ! <iconset>image35</iconset> </property> <property name="text"> *************** *** 1204,1208 **** </property> <property name="iconSet"> ! <iconset>image35</iconset> </property> <property name="text"> --- 1205,1209 ---- </property> <property name="iconSet"> ! <iconset>image36</iconset> </property> <property name="text"> *************** *** 1232,1236 **** </property> <property name="iconSet"> ! <iconset>image36</iconset> </property> <property name="text"> --- 1233,1237 ---- </property> <property name="iconSet"> ! <iconset>image37</iconset> </property> <property name="text"> *************** *** 1249,1253 **** </property> <property name="iconSet"> ! <iconset>image37</iconset> </property> <property name="text"> --- 1250,1254 ---- </property> <property name="iconSet"> ! <iconset>image38</iconset> </property> <property name="text"> *************** *** 1266,1270 **** </property> <property name="iconSet"> ! <iconset>image38</iconset> </property> <property name="text"> --- 1267,1271 ---- </property> <property name="iconSet"> ! <iconset>image39</iconset> </property> <property name="text"> *************** *** 1278,1285 **** </property> </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="3569">89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000db8494441546881b59a7f8c5cd575c73f86b7ca7dd2b8792f5a57f3c4a2cc4b17c9b3b225cfca96d89149825bffc12648c1e03fc04d2562476a30ff44b62bb560354d415129964acd92b4b169ff00d3c86191a899226ccfa2daeca06066b6b5b36f2db6be9332f01e78d2779b1df1aeb20fbb7fdcd9d9d965d6f612f748a3ab33efce7de7c7f79e73eeb9b3e6ead5abac59b386cf436f7d9b02f0259db246001a10804e41584b472ca07bbc16cd037d668c537ef5c0092e015780abcba7ae59ad026f3d484158fc1df0d5eeef17845f10b297129db13d7f8196f0bd95fd4d9cf08fdf3cc15f0109f0e9e752e0dd6f53c06282942f0a0176c67c9f0076d7cb9314eceb8d5dbfeb1e17c8c6cc03504db36e38c7ab0f9c6037a016545bad0275e0cbfe7a707374dcfcff3d262d08ce81563019f2c30367f97b2006ae583724b911fe61e0cb5e0edc3b00a7005b5f007ba86b56c717378f7f6f0c7bea00c39b61f2140c7bfc2970bc3df9931b5640a7dc2d2cf0724026075b5f06db0162a66b013ad55d5817378df773f7636fd2f0ce419c01881afc7edee12b81225a9502c2c207602db07e2fd802e615f409a266487e7d1e520d96688f4e4f5ed6255ece5ff179371f3723b48eb173bb60f6286ea68e024606d810286ac02dabf1c01a6161b039300af3b179301f23d0902a4805415d410af9c1765c4a9599971a5ea71ad01d7ef9f3a57c82d698effb8b60d517a2d5adc017805b57e30143ebf2e6259d5027d05a13cc421068120d5a6b04023fa7ba2c6a84130bc2b7f9e5cf97f20646a40a1c1fd24ea85e03dc02acb965151ee8e640c7242d4df94d8d7cbf40f53c241abc010752a805319040daf6546a78e381457ef9f3a5bc466b65de278479f33cc6786d5abd072c88a384a0ee12bc273a59b5b8c5c71ff4701c183bac081b509d0a7033c9629203925811cc261d1e40eb0831179ab55285b61c8405310edec810a48bb3451f4b32f96af600e476500e4709dff70d4c3282fc1d2e155d66cff93d0413351ec9ef63d75dfb183f5e4527798adf144bd6a99e9b647873d1302d09510d6379d1868de8c0278e22f4c473b0b1604c607d0e0f9c2e5d72129d7c274ef5468d807970d682b7d1633c3aca785063343fca5b8f9ce6a83cca819f1e60f7a6bd0861537e3be6fe7b5dbacd6d301d43b306adb04b12f1d9d1d20639cd5a47d2e51e58710f9c28fdd23f5dbaf4c3244dea58f6218df83d2febe26d849a18e7606d0fdbd61779f6c167f1d7fbec7f6f3f63d118f4c3f8cc8be4d767d12994cf2e603bc144150551c558df02d0d718050b4168c1dcd7f5c05bff7ec9d7293f10883fd15a03365e5620b28243671e870876dfb99bdd7fb49ba015b0bfbe9ff1681c8d3696d908631387a87ef771ca6f06942660dbd775276a0955836cce6cca946b8f80b0db52aee0818e02ef4e5eba1bc40f74aabf6aaa438d3fe820d31ac7664b84ef853c76cf63d8c246a692b1c618871a8716a38a0564da59b45f53aabf889ff3a95d90bcfc8ac4bf3d44a40a29ab9086e879107d023daf117df4e4754be3af634975dad303ef563f7c13f89ad62084c01f70a8b56aec3fb39fc2ed05f67d7d1f5a68644b225b926aabca738de7da9632ab38c2c1b11c5c5c021d50c816d077b9043321b2e173ff7d1e34aba07c8636175642ee128a1b755041c703da5ad9035fd35a931fcce2aeb3d97d7c37dad23cbdf369122ba1aaabd49b75642a095a01936ad2fcaa6df1acc8e2a62ef1851867cee3f47d2fe0f70f413f3819a84d415c97b88ef1acb16877d9b0f2a8bbe143db032c53402bfd6f42887b4861faf234cfcbe739f2f011aa699548474cb7a689d288a01510a621ca52381907cff270700867429cd8e3af0bcf52cc15971c5a8a5bf38c9fa8513ae3b0ebde18d1c6f60ded01ab1db5ba3ea2af870261289f733dff1ed9500c6f192297c9f1e2ec8be4b379021d20b5244a23b38010e4ad3c420be299988235c2d31b8e90ef1f42ab84e0c74fe3e4f2680ddebddfa070d710a51335ca6fbbecba4f2e7aa01d65ae3d1ad8201661d3d3030fecfac393a7dfb8f441d8d4b72573b077cb5ec6ea63042240618a2b2763f0edb41c74a41911dbd8bb751f7ec6eb9419f2c74f52fcde5e5021c9c932951fd5c81f789cc2e63cb529c9cbaf685c11539daa201068f43547d552e407e8e0475b4b52ca923d302fdf974f65d7f9cf0433217b37ece558708c8000c772f084876809dcc865d4d9c18ead0f21b021051925b88e39848848c2c912d425bc320e5188fefee30c8ff854ce0554668619bdb38c97f54c5eb0dcaeb36f2fde59cc033dced2dd0a5c9133d5e3cedaec13b29eaccd6ff0d89ddf4b498d4306b2cd1ca3d9518a776ec3b16cb3480bc2668c9775512a265602de0fe1f838cc54b12353799a43898b3fe01136206cfae4c104f87451b89efc4226ee8a42cba9f3d5937f7be0e323478b3f1396d813ccc43cb4fe21ee6e6d4303f976290b8b2d9250c50c6d744912702c97f29969f2856dc4870fe2661c18309978015e23233ee3c74364340c56d0f5f6042c7b455e7749297a28d05d4a7c2a676acf80400621aeb0f11d9fbce3a335c8468cac87c8d9181525d808e218540b6404beefc3cebdd4befb1865c7e135c7c579feb50e6687eff4410882fa085a8b45d32d117e39dfe501f159f82cf180f1c2a3179f7de6f4496139dbab1762f2eb0d26954a181a74a10f923918ff5749a1e09028e37637437bb30bfc834f200e3e41dc0215c504f5183fe792a450dcec533e1b509ac892cf9710968d4e931547b4c6ed6711563d9a62cb9d92c62a3eec3a62bb9c0dc90fbaed3e8f26496d740bc22638eb1c740b5423c4e977504a13d442763c380c80d660a7314377b92473503a2519dee45318c933f9b6647a76981df7d57bd87329c5cd182122c37417745d739657a3570ffee5036f24291f48191135db184e05511354fbb8ea66cc22f94d1ea01196607441f814e256823f68f687d2203259aa17421cc7c61f74514a509dc97661bedb9c4bf9ee6a54b49b62dda1b457393daf9ae153a482eab96904e03a3661dd1cf5bc7e0802899f750d3fe0029aa4191336421285398cb42052102bf073363a36761bd962eaa04a65b82d95bdd4c2ddfc4214ea036ca38cbd0c33bd14b822676bc795d673b5f311aa65b2ba9773999e09299f928c6cc977ac143713f2832e431b5d86377904f5101004b3098936dd17f4a255bd4117c77108661de2d6c2e165254f88257089678c07ca0d24ed66ef4aadc55b1f3b70e22758f69e91119fe256d312223556081b31ba0522237033901db0d11a4265da7fb22ef107b2844d856d8194318591a14e5d533923299faa925f5f62747b69e58c9c6a0a1b14b60b4900953f8330e5e21fbfce7e600af870a523e5a7b25e7bc6cf15f754de9114b7fa9d022d6ec60c170c7ca44ca84e498a9921da08c1ed87e03c08c7c6ef3751cae97770454ca2218a34f9824fe9f54964bd487ec331ecb5bd026497e527a0f653a3fcf80ce3c0ff029f0057aed5dced7be47b3f7fcdb6c4f6d17b87296c6ed73c3ac1690b1634a032314dfe0e177fbd8710307952e2f959bcacdde92ebb9904cfb349129075a8bc23091b31b5a980518ee2cf4ff4967c59abbddce05f9e3cc731e022f0df80be565f28552a3a1c6bcde43bb29351e396462993bc84052203fea047754a32f9a644ac7310c2266c9a66b9d6a6611b5e6631aa01852d3e0298647451d8ae31e96ad5879adad8057ed416fe57c047c06fe1da5d89abc75e7af48def3cfcf30f8299f0b6b091e0656d742a885be02e64c8b6f78737f9e6a52ac61b482085c9a9102feb113613dc8c4d828962159de0657dbc9c47d8103c7a7ef4a960a6f46e7bb52b2bf8620ef8b8fd692dccbb5e676e5ec5d153a4503e5903c0cdd8c8d990ea94a47c729a7cc15fb498062f274c759ab1f1b21eb5f312a534b211e339509d92643d0f598f4994e9d465b3853f00de07fe1378b7c7a706fc12039b39ba6e68aed717ba1237e571cf739ea84d856b47ef33496c68836784d6a09a31b2a1c9665d93feb14d346a01c26c7ca7df45ab84d22989b01c2a959a8964a986445d0c664aa730b72e1fb1f4a2e6ba74dddee8c4d9431feb79fd339d6a2a67a63b184e52208d298eb86cdbec2267256023eb0971cb48e139a05aedbd60d9a8cb09c75e2a11d64374a27e1d9c1fff9bf1138ffe4514d5fe83ae6ba3d5d00d5d31ddbdf5b10ddeed85f38e23d8ffe7df300ab46068d03c0f95892e0bf15f6b4536eb50a948fc3b7ca48c987cb38a6e69804f64583b55397be818d0043e042e03bfc134ef3f7313f93b2b00f4edf8d691d7449fd83ebab348f14e9fb869aa4cd5325002086642fc410fad41ab985861e0520fd1808ec3c9f2db87fe49b7a20f30700931775dbfa5f7e6bd2edd687337d53a3e4c9fb73da8851437fb888c4b309be0f5dbed7201f45cfb9a0898ac486a5301c212a8445d94f5f2787061fc1740d416fc7f30c9e8d36bbcf7bab49a5bca2fecd8f9c27f01b7edfbfe0e9c7e1ba512e228c2168240868c8c0c5339334df5ed00a5db7091e5976ae79e7f1d03938845b8ac1aefbde886dbebc0bc9e534f396ef699f2991abb7616c1b1711c536664b560ecf06be89646a79af872f06aeddcd157552b6a602c1eb505ffdc70f95d15b812abe9e362adf344704eae8def29220444cd84d22b15643d44006a2ebc589d3af60f51547baf2d7484c1797233055fa0d5fed5e0d61ddf3af213d127f614b71648524ded9c8454a3e7f5af8399f123c14ce917986c1962e0f20937092ebd68d5ff9518d9ba6f83ef15ce77fed831af3f899bf2d4c4d9276f4a585c2dad5a011642aaed6c579783b726cf1dfd67a5ea372d2cae963e8f026b802f025f01be84b1f447dca4b0b85afa3f12058fc608865e5e0000000049454e44ae426082</data> </image> <image name="image1"> --- 1279,1303 ---- </property> </action> + <action> + <property name="name"> + <cstring>editCellEditorAction</cstring> + </property> + <property name="iconSet"> + <iconset>image40</iconset> + </property> + <property name="text"> + <string>Editor</string> + </property> + <property name="menuText"> + <string>&Editor</string> + </property> + <property name="accel"> + <string>Shift+F3</string> + </property> + </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="3753">89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000e70494441546881b59a7f8c5cd575c73f86b1729f342bee8b86ea5db1a8f35223795646f26c6cc9bb82042f580a432b0527fcc1af4a01f78f6052a93256d5e228496d1495da6a2998fe90592a2536418e8d84ed258ac92caacdec0adb336ebdec5bc4d66f520fbd0f3ce1bd669ffcaee2c1ee1f77d63f96f58f25ee914647677ebc7bcff99e73ee39e7cea2f3e7cfb368d122be08bdfb386529f8b24959240444063c012605918728052f6f65f290a420f3400a08480c48019839f20cd003c90cd0e1d7f7eee724700e383f770f8b16aac0bb0f535639fe2186afb9400cb88006141077c0cd81ee80ba12ef7e5f020973e40ec8dc1c0ebf0d33fef58ff7f32320033efb420a9c7c9c327946e3945b940491b396d30694e85a360f3a0595bf88c4bcb20063405cf27bd345229e95bb48852d8b5c709a37bfbd9f27bb7a77be8802cd18feb07f2950047ab800f7ff2b4fa17e144402239abfd978987fec827feeba1538f9677c27360c9796827307e09561c54fc1e9bb2ee5bf309d7a05c6d74106b5fd20049f7cf527dc0b9c04cee4aef7393a65b5ca81e3018522acd8038e0fc4e840a3d3089597e83441e5bd1b264b6f0867d54b70e869fc5e085afc4149f29520215a90022a8f8f016e058aebad266763582c085a0103cb072135c8828254230ba579e5384990c25cf1f34be5a4a57100bc47406d45e69b7802067a59162434809b6e5a0002d6cf6600ff51381bc2620367033c2148d2107230361112b4bab2a0cb2fca51aa2f93e77e7eb96cd049779dfc20e46caa066e06be04dc7cdd0aa8bc8d1a6e1f802c86c54016c262179344e89664f80d4d784232326a885b12d21029a4b5acb0b227c465f2dccf2f95e354a3f2c2aee795a163cf193a2c026e02162d04015c009380636026848ea07a50139e1aa27a242133125100b703a38df92d1ba5d17558decaae101601c7604f3b8866804b1c7f2131609f910742cd64e43376c2b1870d3195bbcbf8bd0e8e82adcfd7a0ada88e8fe117048109f0844b6c028481b189ea0519e11224a3789d8c7826811c041df07a2461060fac1eb4c6122e005e0fdd1360810ae81464712dd5b042f6613f91d178791775070468be7d641dc15b0d9e2a6d60fd9acd0cffa44a7f3640df2a439f23214bc091d40f8d307877c5ca9d189aa3f4f566901ac85bf7e9cb5b37eb4b12f45b8fa15696c1081b030b45e058f553a913f3043973676032dc9cb5c4d0ca12af34b7a19b2183c541269faab335dccac69f6ce499e5cfe249c59ef190a1877cc80c3802b2089577ad45d326b427ad654d06790526be9cb723940bb41a16f98520b07fe47d5f09f51d9dea3f77f3ea169dc4948a3e890809daa3bc3c36c2e6fb37a30a0a8de6c90f9fa49a56210f7b9abb50c5d5042d97eadb21437fa26026861e179d84a824862480bc80545f956b0dcac39629d783c0fbef7dea47293ff484f85393185ca1105230b8dc67d3c1a7717b5cd62e5fcb13ab9f208803b6445b186e0e6384b18bac84e7dedac4c9efc554df09a88db90cdda3a1c785198d3221a412a48234be3a6f2716810eb6d2bb1a02c76a2757bbc2fba14ea3af7942129988f2329f465a656f6b047d50b3f5c1ad180c712ee6b9f039b6b5b7615203b32571014447600a865d533be92f96a94e34a8be11226fd7a85c423da8d2df51e819503d023d63503dcc2b8bd4e0deda4d205743e064fdcc3b08beae1350d2c32f38988e66ddc16f3174c7109b576dc6f4181a71833817538daabcdc7ed93e545a8bc8824476247ede67cc8cb1ba38448464b219516fc1330f97a055a53fe9472d2ba2840b26be3a9f6e80092e206072574240f0759d440c2ef3a1079edcf724a663d8f1f80e7447d3a041433708732141145033b5cb2cee153cdcd4256ec670dae1d8c32771f30a7f05ec792da6715c124f8de17aa08d46e58bd7f4fd0b31905e4ce1822e0297d04d003a326f29e1410a7a46331c0cb3f6beb554d32a8d4e839dd14eea9d3a23ad116a9d1a4927417a9252ae445996e138f8274abcd47b80eac307f0f3caf607062a6b063124d48ef8604049619597eadabcd3ddfc6c0ccc227009e5008c0e5f0e71ef27e7e12b45315f64fbc4764ac51241121012da13346f2d5e2a941089206ec5943b03ec58b10795570803b5bfdf8a5f1c243031a5871ec05fa110bb257bdf8978e041d0c6742ddab5f45579b7f991dd189807811cc0bd8f7ef5e0b17ffff4a3c996b9cd5feab07ee57ab647db094440221230d6c75de3e2e3a3273415b99647566ca0afe05ce8716b3fdec4e05f3c0b51843a1450fdc11606bebf89f28a3ec229873dafd5f0654c383e8610c22a2314c6e879e5b09d30b8a49b206663e0f2fd335b0b9d6d7cd878decd41fdb8e69995cfe0c62e8948901d49a950c24f7cfcc8a792aee5ddfbea6c58b689bebcc3643323cb752d1585b06f17ecde43f64fdb90af6e234a6168b54f946ac6a6864800afa8202f281515e4af2cfb9e4477377f2106e628309b90cec5cd70b7ee296d710d3d64b0a1fc2cbba261644122a6258f161f65a03888d30d2807d04de82b3ac451b79f3da5617715a6aa385182c0e0e5417a505e5222980ec8521b0b522a4813a4945dfe79396985a802976521790504d8b879dd27ccc4afeb581336a152acb063f94fd950d8c22babb73350b09b8fbbee3219c5a83b21cb81db0bd5239364e56f11bfb3cbd635bd1ec62b1275bf5f2abb80a4d1ecb723169374b9beaaac670bc88e1d2224575200f8ac3135fa827414f586c6ed7150c2a55ff91043d286c9a98ca40571139ba763fbe0b009e5521fc943eb09bff777d4a5a4265d183e60eb770343f7f8b641892a984420f3d22291575dfe793936c606f02c027c1e81b94dfde2975ef8d5012fe7aff10724fd65976cc68e37dc02b018b219a8ee8bf1cbe04a97b89b251a131a4f2a1ccf361d611b48203231e5a52e3a85c6be90bd876bac5d51439546f0f20e519a5d914b0c6a49845a02a410ef83c66ed839cd0f86a7f819d09c5b0b7530bc1809bdc66d0958024e0f8411b80a8b440adceae274404f64b8bd0e411374601878d0ba8b49ec10cb5d097d675df6ec8f195ae5c2804fed78486dba9fad0f2760127c21afc8935688929135bd2d8291b9d9d6e6f32e0470fee9bfbcf79759477e540f02e214e2193b690b4fd981536cc02f803631a5550eb1895179187cd0eff6bc769ae6f6da07ea0454c1a57a54e37af6fd24f1a81e17d71f033d40666340776c36ba920200679376f0bc9bf3a81e9ec415765e9945d697fb7a61ac11522eba60a0b4c4729142309d218c859b0ec4dafec6f74018416ca072f710901034862e662383cd3e73e4b8d38d0100c75a5ecdf199f91438174e87bbc3249a699c30e83638d24e518266c69efd2195bb7d920eddb15f86bf0cd41dd0bfd2a136a5eda1369171b19385e46c822b40f482943e63139074c455b3919b171681d9674c5904aa2d42bac3de799bfa5dbb377e2211afd3817022b6562cc0e03287ca377c740a710ba2695079c766890c7408fd4b14f5a918251ceac733e266c6c8e824832b7de81666fdab4a7879c52baf494cbb4e63ba86690784d3b5cbe4380a2e221042dc003a7cd04c89bbb6f9ec4a1dd9678da9ea0be56265ddc8a10683770d5d18c886ad98feb28da85843757c92ca3d7d8409b802c88198814c40ff72873885a1421f1043ce2598d60c0c28467ea131cd0ade925df83de6b2c5fdb9bb1983ea8b368087a7d80bfc2f70866bcc46173ff5dd9f1f5079b5a6b2a64cff5d0e59b7a072f276a3f56908c634a5db25fe7207018c1d8ef13c1755ec8e62845dd8515d942218391463da09d5f11a8f88bdf8337bad8b70799e9f1db1d3b1ebed6df1b3e78eb20bf800f86fc05c6d2ed44912f3629868c68e84e8d951773b263330d9ec8ecc7331fe3287ea78c8d8784c96b73113b4325c013ac9ec08feb43dc5756a3759bc5322908c98818b9bed72b0be2ebb59471b1acf4df0e3eee67f0d7c0cfc0eae3e9538bfebb5c77eb9e1bbbffaa83615dc5669f7810427e712b6c19fedc4b0596868956fe7f90654017ccfe1c078465fd12168d91832064abd3036a6a914fb504545d676786cacf27c303572ccfe9a73f319133bd4fca4fb4a67bf77adc9dcd95007cfd371d9b3af6613700e925646753ca47a50a34ad25ab8eb5ec2cbe0568873b6d0ab1e09c140633a4679501d0f29f97dd4a762b2c410a51acf2bff11700af84fe0d83caf06f03ed66d66b8e486e65a73a173b4e3dd28bd259c523d61db5a522e7140f8e8c4da229cc6fa7c02fd9e4376dada2c063c47e2e641e45c76ee8f51799f918375b27642946a64c607b5a991b7b121f031f60ae9bae99ab3d1bd87bfff89392b5e8f524d70485fa82e756a4fe8be32f4df0df5891057407d2a23b17e4bc983e6697b2e441de0b461fbab3bd14d4d1487bf094eecfddbe1fd8ffd751435fe834bae8d1642d77543b3faae679795ee183a81c8d8f2a307c080e980eac51678a76dbdd4988a292f7189928c52d161645453be53d1086282f106baad91429e6984a36f8f1ddeb60b6803ff039c067e0b9c659e9bc8df5b0160f1da6fee3820167b6b2a0ff551b9c7b7e7c1521bd0025b2345cd0cd96bd36914c5605c4646abe8668621c1c4a6561ddff4aa49a38fb0eea2b19ef63be60fde6bd2f50e773bc2f0a2599cacd141062b6c81569bb059858e3de41aa70da5a50e711b824642757c042faf48b2e60761b3be3798187e0fdb156ae053ec61f4d9d516be162de496f24b6b1fdaff5f90dcb6f9af1eb55d9281b019a2a4c758105059ddcfc8c149eae391ad6d9067c270ef6b8da3c3bfc0ba49c4457759b0bfffbe0adc54f9c64b4f1755e905b554b0fef1c10bf7b83a85a4053b771f40741c7b8d745abf593dbaedcd248d5a588b47dd8d7f6177998faefb7e0038172793bb458fdc921c953de1fdb6130b5a19236f0484cd0081249aa97f503fbeeb5fa2a8f16177d311d6cfb31bb9f1595ae85f0d6e7ee29b3fff67b3d8acabdc37844e35e14442926ac459f19bb1a9e11dc1d4c87bd8d35263dde50c37c85de6a305ff5762e0ae0dcb7cb5fa842141203167a333713b7e7bf4f0c61b9216174a0b56806e4af55c7f4df354eddddad157fe2d499a372c2d2e94be88028b805b80af005fc65afa636e505a5c28fd1f08c321a71d6ea2f90000000049454e44ae426082</data> </image> <image name="image1"> *************** *** 1323,1400 **** </image> <image name="image14"> ! <data format="PNG" length="1182">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000046549444154388d8d935b6c145518c77fdbcee237759559d89a5d0b8145485a8c918231b4c607880f3ee025f8a031780946d1008909245e12620c216abc60447cf0c144e412011b8d06e562dbd0d8128b2c09d52114d835d4ccc4369983bbed7ca543ebc3eeb6a688f87f3933c939bff33fffeffb624cd3da2313750a0f1961051a96645077808c002b35525790feb667eac2e9e7a62b36096c9f1020ae1acef4b0bfcacde1de4cc458b6101c965006f2f53c4184e75c329f52d28f3b362d886e085edb3e216af181818725e270def088dbc86c4d80a34c88615c13d42ad0d417e4c9b9cf3ae9a67e55ac9e57665dfa2f706bcee2a89ba6ce29810a18c0391b229e41002c818ca002c941f252d20b445cc5f75ecd6dbdf3f474b005a0114bbd33c47511f8f38112ccef0ab04d051a8560d9e083380e66ae64f38b92594a8c678d899a9edafdbcfbc51aef1a301191283008a4c1e90f4946665c9cd053d53fc5925bd562ae58cc00437a5010c04bd8355a0ae2417fb77d4d144f1e9a7850e1ad20e2ee9c1053079c5c7035e3bb7bbc9e3dfb0486486662c974769e34b6ae97a4b31c546ccb21101bcf0b8739ebbe66479983443ae8ee2817d5f2a270a59bb097f856c57f098021afa36d9fdff94907300a5080dee62dbb3b25d9bace4ea55f07adcb60e365ec9b8dd5f4910e984d52f09e068e03d4d845bb410d104d4241645672514b7d155a556eeb9a218ade7612ec9474729c14641260e6dae8fccc3c1579b11a6f4da0e1155ca00be82fc3cd2d769cc6d68dcd1bbf6b989e5dc773f78d38697b070e3f49aa8c11052d0411462320095093b4ec814c021c8b728f292810a4334b9c854bb7ac78e7d7d9d3e1087f88452710096533ce9039a767f6ec078a003544deae74e9d4fa66f9edf32687618ae5587c88e75399759acaec5abd7f64d9eab611a972f7de161b47b924438cb943a0636052ce6269d9bcce79f44707a646faa696377f69d654f6a09b483668b51123485b4c64e35ccc26e816e1b8084358cc518bc7723ef7bb01b55a196e391f8c4a6ff70be687557bad0a785453d97bbc44f2f6ea26a232dc2f11331677e48a2c480b8fdb71c643a8f58b580a31aaa98e01aae3eaf718a0b60a46441e30f5958d01505f716d4003006205c38cea4b2657011c100fc4f74eaadffd3b70b566b22025fd3a5d0a8ba4c04932e604c1882480851547d597586510d6d4c5cef7de38c7ba3bb577e736f53b2e02d1a4638cf92a59628e1d382f733e7f04e3b9e1c0e2d5a6397b97b1a89d74d804a42bdfbde5554b3a2cfdb92fcdd9cf7e9eea8a8a7ade5850c404dbc3ceb655de81cd6fbb07366cb7cf7b2f89eb5d2051e9d7089c2eafe474050a954bac708252d0670a874e3235624c390672ef2e1b064e54ff43c90c808cd008d208b2cf33d2d1fea1d6679362356fc026267df93eedddb90dffd0b94a09af05ff8b462998cbce5142851a39ed7ee39f7cbfcd59fe5ec8b17c03417ed0f4edfd9681f653c05fff3c18bb0e7052926e1159b8ba5512d979fe89cd273085021002338099c065e0ca8d38d7530c885760ff4b7f0380bbfcdc8c47b7ea0000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="548">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001eb49444154388dedd53168144114c6f1dfc5555688b0565eb99607822e28c442c8b6a992c2f220c1c2564bb1b010911441828858c82584b46a4861217a11c4f60e0d225a443085689103030e61712d2eeaa98926c674bee60d336ffe7c3cbe795329cbd26e44dfae5077135cf997b0e48e1497e2c8705f3cab69dab11d11a7a566353a1f2d854f863b1fe515b7ac8850c89dd5de16f0d6bac2fe7834ac06226f30e28c761fee550f541334ddd8a2f249a91b1a71142fe527f2d1dac11ab4153267bae2faac9a13919dca1285a689dfc027a426bac05a561b1d3a3da4f5bca5f5bab520c89dd5e92d4e8c2bb3b5acacbea896c6adb8f213fc8ad4b8864965f569b5acadd5ca6c2d2be3db71694263230d95f58b4d2306e35a2cb402f33ac8d1c125b15127890762616f107f888546a030e5a2b18dc01108e6bc3418d2c0111412f39a228993388e7e42117847980904632e9bdaac6b5dc517a4224bcef79cbc4382b8676f110f5018737573e877309cb7a42e55dda47251b74591dcb53fdb72cfb75526b5cf8043f88cd0931fe2918ecf72d7b7e6f5efb3a2f0d8220aacf6e4793cd15638ece6d61fd08fb3a26e455d2259577a1fcbdac8cdf47a743b8abbb1e0adaec9ee62d9d4df40e9ed311cb55fc7b057786fcaac31cf84ed427f8dba445da9eedc4e5195ff5fd3d7f802c665aa0866646c810000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="685">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027449444154388db5d53f6bdb501487e1d7c183041daec1830c1e644821dae42643ff2483204309edd0400717fae93af63b544b433bd438d0aa2e04a240c0ed502c0da23ac385dbe14ab663d949961c3058831effeef13952cb18c383d43a3c3f46cd8ff1ef7b7fd2c74f7cd4bab9b38e02319ac9fc90f04ed427a4cd044d9c7837f1055ca3cee834ecbc3f55a2896707dbf1a44f08c4bd234f0d223f144d9c7497f8ce2ada199d86eef01d0427f446270a4d3c0b9b7895341e44beeaf8016eb743f0d4b3b8b2789d5889547d951cb44010a14691124d7cb9b7c45793bafd011439088808802fdac22d630cad568bf921a168e2dee84411441617a1fcfe893f1fbee440546a009b74816ac82e527e7fcd73d144fb05e7c698250c303bb0b8378a94fbf8b9c5cb8cf2c784f4e32407e81d79aae3078ba4d9454afa2dcfa950b053710306988515fef69972fde132f9af294886eb6d4f5a1b1b6180cb3dc252130fde0ced9135201908b726bd1306b8dcadf0d743e57a6a896a28d394f47333e92abcd310ab2aa5fab29694c25e8bde76a7ad8df0ea9caef6b4fe11d77108761d85261e3b9b97a8016f9bd3ec22a5bcce21cba110dc360cba28d1c4e37613bfd1e3c4b7e82d734ab0eb28b78d6dcb5f212b602ae40e44fb7ac3b8257d7bfcdbe614403471d045753450d84f064ca9705616e4e7a0e50393bb360aa0ea693c68a33ac5f2e82bf8f0893157758f73842b34cba4d39474c3f0ef0be768a269419eadf5d5812b819cba1f0089874a3c26ff5e7966fe529944918d1f6d7f6c8edb846790cdc1ccc18c6172867d00351624a9fe65c0dfb4510d1c4281b84a1abda8d21a639aafa644a1c6eafeafa631f875d2ba16891fa2fe03f967bd1671b5c4040000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="793">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002e049444154388d9d953168544918c77f2fcc1edfe022ef49905d4861c0c21c571c6271112c2e208865acc4da42ac2495c73582dd791c1c8a201c7845aef252a6b88358c64289a8c95a886b117c4117df431f371feec85c319b6c62f6ade0c0f0c10cdffffde737df372f59df781da819aa0a1ed43bb45266d6cec1e41cdd076bafbaffae5dbbd00d77eb72597ff232d48e8f21fcf73ecef5a55f427842081bf321bc7914defd7333dcfb5e7e0b21306a1a8cd47e14c00a3885b6598226b0ba047e99ac9c216b92d6e519f55aafda00d7073657c82657611350a007f9e30ef9a6fe59973a215f72dc005edc8229600b30023d415bb3a4771eddaf15669c6380b75dece4521445a00457c1b23fceab4e871bbf2f8ebcfc892f31e6e1759812e8a5608032652d4ff9f1e202b3a74e526ee5a31d8f65dc7738fe824ac0031fd2c8f8f465140523318e121ecbf8e1afd8132de8098840256c6c0aedd317c824450c08a3f3cd58c6e51f50015ea25332ca637358238062c739ae65dc5984ef32a8323016b44df785327d7e01111089cc773b4e924c92246bc038c6bd5b2069744c0a7da1905968a640742c4650af2449762049b2c340061c4a92ac6146327efa371cc9a004c4c6867896d33ebf80180b38d40b4559c64b8583c36499003db8c3d8f521a680f5abd06c415912f75b149347684f7d8b6a81564aa18a006edf8915e09b1dc676b06c01e75ba0edd865a645feb40b3367297b395a294e238681c3cf22009ff6317600de02f3d09c073f43e73970f478dcf7b17e87d5b4277e048a108a37fb185b202f1dd600a5b0727b99d6959bc31319d9231e4b0f077c08a1f8b4ad3364bc0bc7ca6a173acb4c5739d35717c180f3db9894edaab0cd58722114e567a087efb1ddbdaa4abad5a57de9fa9e9300d8ed8e6bb6c13bea3a77e73d761eecc0d9c95367497f9803629d0a507a489b0391c1ef2afa1edd073b8cedc0926dc0f49973d000fad1abf3d01a0802288ed45854dd98b702f8f9a71b288a205f15478dff0197897906e6ad5b200000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="727">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000029e49444154388dad955d48536118c77fa734a7694c939af4c15944511925789141d088220c22a21bad88565d38fa204410ea46a48b5a058575111144a920b18b1005c905c20afad0902c2a9866394b684ae85cbafa7731238b9d69e603ff8bf3becff37b5efeef39e7411209d5c6455d63b5e5fe149a8365b8f753e46defbf6c6c9bbc3ada6c6ce0a9e11dbc6a98d6b560ddb5d3f3468a48a19af1b0cf56a147f6431ad8db2e55ff50d0dee72e641930dfaa3ec5b263ecf527c6a3abb017a764ef745c0020dd0674d0fd72a8e6d63362c037abf2c4565c3716634f5f0e4390320a297913d021186ceadbe5a60e1891149b9e15d7b0ab77cd4545bc518d7549ea92c602d258ab347657924be14e9a01073027d9e5fd7e68608782f6cf52507175490a486a957453529114410aa3a08f6a606e32b021297ef40b867dd0c9ee682e8579664121b9ce7cb28ab318f7033e8846214a5cc3a8fb31952b8e7049d2f729ad000c2015c8b857c63a8588298c3480c26da61a2fd11f69c11f69e185eef3f6cc46d65a5992fc456fe79582484ff810f0378e949694ca9669db032c02160076c0f6ef603ff56ae7c7f3731cf69479aa42c1900af20b9e037940eaf42e2f916a3911becd8d09505aa02d30585e512e87c37100c89931b82bee793ab040129e32cfd1c8d7885c5b5d6f269acd9bd98913a8b5a975c07bde2b73a5791c58386b60f761f7be506f48ee83ee8fc012206d56c09268bcdfd85b73a546459b8ace02b9897292fc36ada3ee4e9ddbb5ddc5e62d9b4f03198661a4ff9d3323706d43ed838e8e8e77cea5ce9ce29dc5a780cc590103f8ea7dfb4763a3726d711d03320dc3c8f82361261eff92699af5d555d52a2d29bd49fc6b34fecbe35fd1d3d353e97fe81f779ace12c03621802413641a21e97d7676f6c9e870743df0854913e5271d3d451ee769dd7b0000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="1039">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003d649444154388d85954f685c451cc73f0b2f30af34b05b7ad808820b45b221d2dd4ac1043c242ad8786a7a6c4f56231844ea1f049ba0d88a680c3dd83d48d316a5ad97ba97da786a031e5269b45b9a9a572d74a5e2bed02efb1e76bbf3930c8c87d9661fcd067f307cdf8fe17dde777e33bf7929bac4cce7678ee151c080ef29b41180ebef7f70e01080bdcc97dce644ea0d7eb7d676436c8cc3d373a7e7befec13e1ec74be7ed91e9b9d300f6a737437b75e6616d9617acb53c1aad7976daabccb44a3c95ba532aa631f291f25461be3e9496ada385c977f6c11a60000fb4018ca674a24ca6b978fde09ef869769fdd425832d1cfef7d98d9ce3dfac7de265d2cb05a0a0f8eaf3ee7454d59c88d8c145436877c07c5a13c61188101e581b4e118181d2a7279a15a606b0c6b216c1ff3322f66bf4029b7dc9e0ad5ebabc74ffd82f1543a5bc8ecce013e91895040f5cf1005086c501f0115438fc05a04aa0f885c7ebffcf7be09ce010fbdd8d05e76c4d808cc2f94bb424118dd1d30f9d610f41e7750a40365165daf2c5756f917687a18406240b16b50d835b8115bbd992397fd1472e7814c1b8653568112e80afe765eae95997c629c8fbd2816b74926064f7555ad8a680ec3ed53a042fc34d03b0c5c037d0e8c380f027dfd1cae7dc3034f0c201178fee6ea65f073fb616d3f00babe822fcf82e74c4537b35402c83dd9474e556ea47bd9ebc54d37a92572cdd045d7a3c789df3700cb39d81aa0eb59169b67099a5582bfd2284fed3c38f14acac328b4c46d4877ed1a5e11ea01b139ca407f9e81fe22511c132c57ddb498b66313e3a3d0f12a48bb29006d3464bb9187d1a260c7380844718cf2148276600520d2ae5de8de4934055e07158511c1ad80e19161c84f22f7350a1f91908c5268030a3fe958907a8432aed3940722e21c48075cbe5066eac81417cb97786de200a32f8d8108b35fcd0270e78fc6bae3d4dceb453bbe57a1443ad0c7b4bae32203cff475bea05da9a4a9a16d02146284c5850afb5f1d4d39c75102aaddf24527f27654832a613da45818468c26b81520ee4a65fec732ef1e3a92a8b1c1bdedb952abb626f34731f5d9512a4b57f8f5ea0adbb66da13858ec5c507bc60049d658bb1a6f024dd6f8ecb727d10fdc73a3d1027c30cea1dbabc4a9881ef848334629e528ebd04efe28ae2dad2022e407f3546f050880407e30ef363a792aa62eaca4a6f60cd8be5eddbe1b9247cde523cf3bf0ecb1591697aef0fdb9f34c7f324d3a93a6b25c21b8190050bbdb5a774cf2d7b2d9f8ed46cd5a6b6dab65ad6d59dbfac78d46a3655b0d6b1bf75ab671af656b771bf6ccc94bd65a9b5ce8e651590ab8b274cd3503fa7f15e03f486b699350a58d390000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="1203">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000047a49444154388d85d55188545518c0f1ff8ce7da77d719bbb75c9dc1dc5ccd70b5851d5c82299410444c5456a1c2202809ca5e7aaa971e23217a2a1c3149e8a1b77a094a61610dcb5558cd6c5c56341cc1a57b9b9dbcb71c3d9fbbc7a987d161d3d5be97efe57cbf7bce3d1fdfc9f090181f2c7b40378e22862e758a18b1ea8855a4fefca963d30faacd3c101d289531f2124e0730d283d305be1112a737c5c855757a0e235fef2ff59d387ce8f0edff85c707cb2b81777dd82d3909826231eb2f2a6257f7a12284576ad82b35d2a9b49534220b9c480d1f7e552a9dac1ca8b839e1f1c1f293383d101ad922fd7d84db76629f59835f28b41718c001698afdad860e7f4f7a6c84c431911adeffa6bf74a472a88dcfbb67a7fbc385dd9b831d2f66f2afbf054fadc2eb1250072d0737ef640c5ea11bbf6f0d52e8e5f6e50b8ba4a9833d8df8e7dcb6ed9363a7c7fee9c0ef2ceede1766cd2bc1e68d197fe86508047bbe8a8b63bc2e1fab8a37add8a6e23925b93001690a7dbde41676676e9daf3eceb4f34e2e0987cbebca33f300ce0c94cb7963f6e5fa4b62b6edc07b6219f6c225fc0d1bf056f5921c1f25df95c3de6ce2b720b9788970eb66bc95bdb8f397a0186254d1cbb5e52b1acd736797e46bf3ce0c943c31e65d2f271b824d9b331ae6f11717f1563f0d5efb347edfd324a78e635a3ecd7a8d706847e75ebcde6534878fa38fe5c95cb9325f9b8d1935fe8f5931d2ad8e81421066350890a6253935da41019881706817da4c088776ddd79ae14f23148f8e50486d3640d616d3a427ab4e8b62e8d1300055742a86a994e8f32fda55d6763e120e6dbd0fb5bb5f854b35b81ae11b50a745c1efc98a912e1c0bc885edcb682a688a38483edd0fbe7f1fd6892dbbf0a7d23bade88383d0880f369f55a7f80648138823348ea069a111219311f68d3d73a3eb37423301b577f70e06ac53307ed688116b1d377ba752ac2ae1ece22485e1efe6867f1c69e3c60767676551855b59751a63b86ad3083f49db5892c2f587a0b3f1bb28161ca8d3ba1ae2ac4a5057a7e71469610444c0081c99035dbfb19d67eec145201712a12d15b958cb0751f6f953c7a631f275e4f42f2b60c380647db9dd0db3c2beb607bbaa17fbda9effb6e2ddbf06248e1b9191e12408aecd03305bb74f3e1bc7bdb75a6e9d59b902a61dfa4b157ffd73eda2f73ec005799ce471b93c3a3c82bfa9bdfbe4a34fd0473cd2c998c6b41efdb6d4ff252dea9de97662b0bc46e03329145f084ba52c22087067b83f38aba2d5b3ad68b276666251f1e3d165851f04b9d61942b263fb9f2beaf1e9dcdfcdb59a3696878f861084982e1fb2de9c59eb0db45a25f93d3a5d2d2cdbf7f3d227c68c318dcac1caed0e3c767aec9fdc96edd7ba1bf159bfa95d1a47cb6fdfd0f96ac8c8c27c7bd17c41a71dcd34417f3ddbba3e3ed16c34e2a3d5c5dd0746972e1a33987ae5606506e67841f6bebd378b63c1aeeac44671ba3380b50a4509425f9d45545595ba0a172323c323fd7da338fec0903ef005e9e06feecd283abf6f2a0d8a69d223f83d60f3183fab704b0d712d2f511214ae297a5d105b395469cd36fe05ecee262b2b8aba120000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="777">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002d049444154388d959441685c5514863fd3dbe49ff0526f641ae6b5639b804282597488d24d296421822be9c68d228875a128b84a8b5444ab2e0b0571dd820b112b2e0a8152176e46a990942ee2a626489c79354372d1a139495fe7753193d84c66d2cc0f97038f7b3fcef91fff81def42cf00e701b4706ac039f02b91e393b7412f805b8df8266ad7a0b28b65f76fb000ee0382ba719a08803529084a506f0afa5f6a057b003def2f25fe218926bc1d4823b35423d2c00fff502ee035e2de40b17240de1c052c33b0f69f36508a12af49d61f77b018ff8c8cf285231a7e6bfc9916b42056bf535ccec7b4baddc6dd44e7a0a3806bc301c0d83836d1b1c58dd1a18654bed52d394dd3ad005fc1230629b76c71a76321e8973f443d41f61a9b15259994b6ac97b34f8a3dbb87ded1fe4f4b4227de8bdbf8ce36fabdbe72184cdd8c718f6b0ba5c9d4f42f23e30df0dba35f20e79ef27e37cfc9bbc06ad6e95c5e5c573727ac6e7fdd924497eb2ba7d0dac02a3c00070af75b2c739bb3c8e0bb1f3793f38168f61d811499fcdcdcfbd6175bb69a9fd0994804b721ab7d40ee25820e503a0b2d704e02896264bb3675e3bf3d7f4a9e9b2227d0c1c028e03df02eb6dc9cb80137b43ffb7e718708ae66e70c0949c66814c4e19aeadee13dcae29494b921a3ef29922655b5591321cbfb71a681b7c6f15255d54a4e3720240682bce98d906f0a361492fe00139bdebbd9f56a4ed183f5ead6eb72db52b404f4b68c8b057240d0cab993e4b6d3b816bb5b57bc1c227c072a7c7bb02d2d261e045522e2749b208cd35e9230f0ed66dbd1642f882949fbb75d5097c40d2ebdefbab920e5b6a33d5a45a91d4dcc1c12a4b4b4be7cdec9b4e16eca5fc6871f47ae944299b189f5855a48f24bd592816ee168a851b925e060e3e09d2c9e343399f7b6ee2f909700c7befbf2aff5a7e3b594e4e033560633fdd75da6e9bd16074d4f5bba95aa86d54ffa9fe1056c335e02ef0703f508047bd5818fced1b50360000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="959">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038649444154388d8d944f681c551cc73fbb3ecbefc90a6f4a023bd0c22e5430076537e2c1a2607ad32244732a39b8694fb6a058bd889620012f6daaa8f1947513b1084ada42e8ea29e6a009246872ca821e366070165b32035d9877187d1e667713848cf9c130ccfbf379dff7fdfd7e9373ced18fa5ef564aa298b6308ec290c48868ac655b60f1fcabe73ee19891eb836f7db55443c9c7a2b51163d002a2049b5800e228c276e3ede8a19dba747162fb58e0b92f6ed54c411ac6f7f10a0614a9d2244e572910a5b15148b0d78e3af76df5cae5c9dd2cf023eac4e9922ea83bc63f2dc3270df218148c873a9120f238d65af80714098593c3fc9d57d27df0a032faccd38b59e0bcc05bc633c6338288c61bf2f10a826f8a586b29177d4434221e2496f2291f336c5ebcf151bd92098e9270dc0c790048411005a620881c2cf20a8216d0050105e53365221bbc9e0556a274492bc18800165106006b414490824037f5b91f7ed187844cc50a956eb200514cabdbc6884e959af41091745e102c16016c37cae2a26c37cdbc00884e952716cf1844049274d6f4148bf2b0494c9c6472c9079dce2ea48aa228c45a8b96b47eadb53d7bd25b69d1404cb0d7218ac2cc5ace47417cb7fd7b1b513a5508c449da1ce99dd28469a5e151d05ad3fcbe897d28d9e51676ed872babeb51d40d536f7b4dd1ef38fa9dd7dbb0d36ad3dadea1e8fb9926e7577eac47c11fe15473b9496463bc42aff438a4383980ce7d3647f9c951bc212fb32a06ff8a736397c6cb4f788d975f1a33239551b462608d88d05c6eb2b2bacec89911fc6219a25f2977e608bb76e1fca7c1d491e01edc6861da0ccbb83fe49552c5d06ab5574964b1faecd96dac3542d0a8dadba5d18a10eeb669edc9c2c497ff813be770ce216b38d9c0c91aae3f76d4337fa118ee6fbcefdc6f9fbbfd6f9f73bfbc67dcfc8562e3f09afce00405f74a33c866967369d898b7b7969b6004aff21ae5ea08d553b676e315bf31489e5ecf39bd997324200a6c02fa66cee99b397714f8ca9d6061653d985aba3e07c64be1953267cbb6f6c1580acfc906ee5e696600edbf27beb946f8a6cb65297ff705bf56adfa8dc96bef4014106ede66eba7164b5bb280cce26436f5f6e7fd1937f89efd7faf9d735cac98dafc1b55e7fefadab99debeecf7ad55d7ebee4f2f155978bafba1c87140fc68e11f5ad70616d3d98aa4fcf128b47fd07413f3579506e873d3d2ef4704c56bd8611a9313249e73e77ff058e86bce58a666e440000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="907">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035249444154388dad9441685c4518c77f59c7f28d3c615e49601fb4b00b15cc45b2110f090836e0418b10cda9e6e0c6bd1950b416112da5583cb5286a3c356e22b482925a08aeb734a01869d104842ee8610306de4243df4017de1c9e3e0fb39b46218f2a7ef098c37cf39bfffcbfef7b43799e338895afd62aa238eb601a85214b11d138c796c0f289e7a73ee43e636800befcf94a1d251f88d6468c410b88125ce60048adc5f5d22d7bd7cd355e9ed9ba2ff0c2a797eb2690a68922c2c080c22bcd529fa54094c6d98478a763bbb75d6dfe95d9ed22f003ead0d18a0ed4d7263a2a23870df2100426441dca107918e71cfc098a8ce0f0087f9494f47677c7c61f7f6cb9085c1278cd84c6844610d184c311612044a68c738e6a394244231242e6a81e893023e6a90bef2f8e15826d964c9be11000090451600241e45e5218085a4007020aaac7aa5817bf540456a274452bc188000e510600e740449040a0e77d1e44548e20a350b142f9430ec0a6b47b1d8c68afd4f84b44fcbe20381c02b89e2de2a25ccf575e00447be5992334061181ccef9abe6251212e4b49b3422ea5b8dbdd06afc8da04e71c5a7cff3ae7faf6f85769d1404abcd3c5daa4b0974b364eaf757eeb204a7b85409af9e1f06ff205d34ac383a0b5a6f56d0b77578adb2de9b9736beb1bd6f612ef6d7f280613c760f2fa076eb53bb4b76e518ea242934b6bd7176dfc7b32d75a6d615d4a18f45b8f7d8ab37bd0858f17a83e3a4e381c1676c5debf62ea7863bafa48d87cf699e366746c1cadd8b3464468adb6585bdf60f4d82851b90af667aadd05929e5b3af1513c7720b80f375a386b46643a1a0e2b5e31b4db9d753259ae3d31b9857346889b3577b5323e2624db1dda3bb234f3d93fe0799effebefd2c97272e7c63b79feeb27f99d2f27f29fde36f9a593e5e6fe9c52914f07854b797d73b5054608c75ea05a1ba576c4d52f3c1735f7ac901fc851f802ed5fbf83f48d7ce820f8bb4f47f55a2d6ace9c9e079b90dcbc42fbc70ead5f64e9fcf5786e486e907f53790f51e032f6d6992fce90bc7a3018e0cd273d7cf6cc29b031c9cdab6c7edf6665539686e422f941078b140fa2510beb9313d566e3dc29d88d8937ae70be99fcbd2bfe6b346a517d72226abe787a9e8b6f2d6287a7fe1f30c06c2d6c1a913aa3b3746f73ed2f4f3b857e2d620c6b0000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="301">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000f449444154388ded523b0ec2300c7d410c1918183ba24e700484c43de273b0711fb80712d7f098337440324b6d92f4c3471503e24956e4d6eff93931f0c7008499e55d4ee438ca51d177c455f465f14f9c3e159f1ca2917496328a8904f35edea3800209330b05ca8a968ba5895120a9aacade8202595dc933e1d289e6defba1bbec7368bc997ef1f05985e67eeed1a041e2ca723d13b8baae5dd6a98cd471f10fafac98398e1c01c0b591396666007014080064c47157b82c32f2adb126a7f3296fda9e72b9eaf8d3dcf1e17840e4286ebfd36deae80c6dc5f33deedfffe9b04aa69f0cdbf6c10140d61b3756fb63a892d1bf8e3bed0ce5a31c4cf5bd0000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="796">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002e349444154388da5935f685b6518c67f494e249d279a50a30db62399649ac2aa9b0e6d76d50a3aea60735abc521813069b3a04c18103f562c8502fbcd885b00a5e58b0b02a354c58497bd5541d6d6aa139fb13976a4313ba63f3919ee61ccbd7bc5eb4cc31d895cfcdc37bf1fce085e7f18908ff47beec1168035c008f30215e8fa7d2075524bdbf23910cb7b585706f57376ba5e9eb9727ad2b43730c2b4df90e213708d943903bc2c1994f7b7f6bce6725576ccac2aac8d4b24853b6b5b22c52ccc9d4b981bf063a397e07903d04d941de5e1e3dd91259151191a36322bd1322e91191a9d90591918f44f21745c63e1769dc92e59193adde0ede03081cefe640d781beefadcafa9f2317be2c76b9b30f1a7b7a76786694d803754e7454084e9f07a70037ae40aa9f70cf3edf5ecafd63f9c5c9c0e9571317c33bbb9f7ce3c3d16393f3f6c76ba542e2ec9ba9670f9b4bbc665a0451f07817b4a7a16b37f80d3053c46318b599f1878df8fe4c26fe5c86efdeb73eababea3bc967d2fbd02e3865d00af4f6af0660b8e00c0179a04c5f2a9231a8970374f49379f768378eea46b315f6d456d0f3fe730d44ca6084405b4423980156ec87f618d517c261c38f1ff01c706cd870c0a96edd0d1bd66d6854a119c32d437049b15472fe094c57742e9faffc3a3b5dd84cfa9da762ed41839606a70e1b1eacdf868682a6a2a8e166ef2778bb0ea38bc358bf3b7f07002a4dfeb85ae1c7c95fec857468ad2f990c996c00ae03c470db5f21e8876f7589f3cf3b8cee28a08a166a42e70377d7d2dee0dad5a273bdaf530fc6e23e3fcaa5b87a06dfd31f60d75e226a7f8df5c41a51bfa2275b6378820bc6bdddb61c7efae6e7daf01789d05b181eaa14a7a6a15e8a3360c2a51f6ae0c1d971660b8a4b817b0100e506735147bd9c7e4cc7e26681d84e4d529f216c5ec3b5355f8deb1be7e638ad5bccfbeeb7b288c1ae8104a7f676f26234c4a39110be9ac29d5864fcf222431ecc009bf705dca5470013f0012d6085edf102fc0b844b5ffa202a9bcf0000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="890">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034149444154388da5d341681c551cc7f16fea206f20813792400614b2d043d65e26160f59417653226455906211c44210bc78f114447ab0210729514a302042ca1ac8a9062b65cd219a8ea0898790eed2364628640396ae90e03c74c8fc691f8c874960b78d64adbfcb7f98f9f3797fdebcd7c5235959dea869ad02afd723890589134c2c5f0193675e39bdf3687fc7a95e5fad6cdeda4e5bb3ffe77ebab2bc9156afaf8e3f310cb07875a5b279b31d4fd3345d59de4817afae16ff17be305fad6cac6db64ffe579a2ecc571b9d0157aa95b92fabc151dfe6ae54af6ddebadf86afded84cffadbf35278071209c9d59686b9e9d5908b4728bb9019dbd789815a55dc44af15858f5b894c70a5a392a9cbe94e1d3971602adfd70646c58bbca2549000b49024a299258f4b1b0f93b416bc5c8684103e1d4e4dcb8a75538323aa49503519c804d8824ab8d9d0662d9391616234644d05a531e2be8dcb3fd95f268412b472122604184832afcf17b84c4722cfc54fed4cb833d6e77e03dd383dbadc8e59e83a71dec83188b837d60b158e2fd98e6fd5dbc3e8fbbdbf782f9b7eeba1fbcdaf7dbccd29e1c393196c9a5ef7f3191312d130ad8968963a1792fc2c48202de1ebc19685f5dc6126ecf0cb5ed779aa61aa00be0fdf7a6031461b954d0b9933eaea348105cb28a804882522e72fb533c1ba2f69aa8a11c8d9ad415944e7db8655a17e83a7c78f7fc5420c865bfd72fea5e8dd7ad888c010be5d787f1b447b4fe199e2ca1e3269e030920b90c07553a7da1661e830f73f6dc850105030245053f0ae85cbf5f391bfcaa7d1ba29d269e5280008ac40ae2f9d4d6a92b28bd34954dfe187c541627862ee607f838e737715bd0c32422081eb575ea40e9cc275ba62378e5a3bc4e2ce10b2f12f8fd09382e58c00124c99a2c44c665ed00ef0806a84ee4b558c2c230813fa832d408c409ec1e9c380f9a4d8fb53b7c7ba253f8b5e92d83a57423a4deac49b6137192e17b26bb450d83df17a11cdee8180678f3f32d0394967ea6defc293be36895a187d7c40224fc2718e09d2fb2c9bff9817ae3b6c0ae81d121e803ba154482316e673fefa8cc9ecf6b2c61e964143cdf6fc0516085efeef4b363dcc9278601a6cfe5350fb9e6f550544e8411cf24969989afb72efe0317aabd3ccfc3154a0000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="390">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000014d49444154388db5954d6ac3400c853f1717ececd2556c4aa047e811da6bf406862ebbeca2cd0d7a8342aed06572845ea1cb842ceca1988c08067531761af2e3640c160c1e9e34e2cd93340e54953eecaa97ac00aaba5df72f336df6c74277562baeaaff8c1fdfe76d9a34bea05e7a06270478faf8d6388c300877d9972e4b6982bb5b73f587b799b648b12f81b6e1aa7ab1c6dd125f7231dfc46dedb67b28d8c38233b82bde8576aa9847f1a38ca79fd37da6fed6c748abaa9714004c5e276a8cc18ac59406b14251168808520a22f50cf832ce9e336db3d1ed483b31768460f1b38010d2714abeca89c2c8b542edf77edd8c59ba4d884b06dba4711463c4346e4fb3ee938ed32d34b819007523541d1917a600205fe5ac7fd72ee146d18dab555dbc2e1abb83c368886d4e5f1fc6f96b5c3a0d6d6889e3d373e0af710549922095eb5b2a904a0ec282be7ea67f5487fad71c1379450000000049454e44ae426082</data> </image> <image name="image28"> ! <data format="PNG" length="394">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000015149444154388db594b14ec33014458f51909c3f60ee80d48adfa10b13031f803a33951f412a0b02b1f45fd8e880d4b225a251f3064b8fc149699db66e227a252bf18b7c7373fc62a3aa9c426727710550d5bde3e276aaf57db86c63ecf43c9c3801337c0e17d773538d9de64958787c9fe9c757c6ec3b4710c062866f5a991caf8328eea6caf5440314218226a7280a07fa72d32e6925136e8c31519f4dc6f57c6b513cf1b6d92ec3bdec1b9b77a4a29f154d3c797a0d931ef7e60e8ca352d5f628c60f63cd8b9c524aa410c409b21444844c32109fafd1bb318dee477a48fdabbe764a5c4a09c062b6409c60130b09eb6b95b8fde9961739c09f29c0867926992fb535ae13f52e7b8d47ab9f1538ba19e74b9f78fe39c7da6d0c6992228574332e9d67bc36b51e476a5380ea44ecc0b84eb44e8a4f0ac03988744c2c220cfa034ae7fb18e76b82efe59a71e3cffb2ffd0297c0f855731d76470000000049454e44ae426082</data> </image> <image name="image29"> ! <data format="PNG" length="491">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001b249444154388dd593bf4e1b4110c67f43ae38248a2b90b2915298d2a5a980365d1e2125519aa4cc23f00ea9502414a0a2a6a440c21491ed8ab8031751622424aeb0f01696be14777b3e2e7638fe15f9a4d18e6676be999dd9816782e5a71e10f34f4400523d5eb3296735a6ec0358a8c5f800fc7fc411fcdd9fa7c002c0e7c3b7fcba3947d24c39bfe9d0fae0ee5ff1a7b52dba57470c7c175804c6c42ce2199324afe80f7ac4afb300492fcdecb216b15b6af2c3f738bcfac2d8670e1f6efc044631bf2799c5cc2ec35733330136ebbb4600c3511fefaf7149c24ad28409b014c3042e7c9fe12825fd3e0dca6722a985594f36634811c0fb6f6f48d314a298534e8923f01e88629878f0703d286244b17deb40af6c87ca666a9ec4cb535d72eab433fd60cf49dad6c15e43803aedcc1f128437d5da6933437a076c000d6005b80006401bb37d246766c3bcdc9a0895efee384967b9f54cbb3b2e7fd16651c42336cf574e30fb3ad543c575a8b2566c024d6015488014e802fd406c65b6b9c32b8be474725c6ec776d18693e3dbc3ab8317253d90e40ffd1892143ea95197772e24b5ee55e11d6c8d0af97ac5ff2469e6e30fc5e91ea5a82856320000000049454e44ae426082</data> </image> <image name="image30"> ! <data format="PNG" length="441">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000018049444154388dd5932d4f034110869f838a6d8238c7354180ac0487a38e80e41f546210fc0c8220a9c4346951e83a104d0a825ceba8a37554d113846e48c98bb85efa05bd2da9e14d363793d97d6676e706feb3342b40e7b523bdbc85faf8fcd0cb5ba8c295afdff64ec23269d9ce0f4a347b353ab64ddfbe1245915395a9e05c7687eeb043ad7b49e0fb9031804d05af39a567c0c0c2ce46de09ba0418b289917ac7a5c059fa00c660dd0a767f0a8301c064cceac0be9fc362e9d836766831fe38e679dee4d675677067d0a4d56dc1bba1f71e81051b8da1d2fe24fc2b31525b7172768cd982d7a1257a827e7776471e784c9c6448a6ae2197256dab518fed4a399074ad4a3910a0463d8e3333853f2a3804499ba5e7530af771015251d285a43b49e1e87b21a9e8065d20dd56b74750490a755b9daed4794066658716487e3d33f2c7f2e64e2c2a53e079482a027bc48d0b801ed0061ef0bc1ba4e5b8315b81c25f9a17d6e3387f7ce7c983924ea7fcbf42e79248bbab81691ea194f86af50d17abfec59cfdd1660000000049454e44ae426082</data> </image> <image name="image31"> ! <data format="PNG" length="463">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000019649444154388dd593bd4a03411485bfab538c60b182c5da6dca94b1f2e74d52da692796d6be8528825a898fa0a024958955dcce088a0614dc42c814c2b598cd46d74d58ff0a0f0cb3b3cbfde6ccd93bf0479274d66fd48c9501502dc7151932f335efbf014c94227e43ff0f6ce0733ebfa10980c67a1dbdbf47558bc775878d85e8eb8e6bab9b3c5f9c90dcc6582ceed5618d9fc3b939ba719b8a7180ef86322734005361057713f3bcbb85032ce0a6c16279c0e19ca59f78b08864ad36d8a0a85d0d40bfd7852461c60404d51a0e0882291cc0dd15c9638fd858c0e58035442e0b4f60008eebcb244f09180be7a7deb1018ca5ef1c18e8be141d7811b81c1b898e1a76f6e3bad5f405470721aadb1c1d4400b49aa01a664049332a75a77dbe75812520022a4017b8019a881ca21a22d24bed9654ea9afdbd10d54eda8e1df6f7c294b39299f8c1cd73b919447686cf03c765503e8a15812a300f044002b4813803bfa78dfc79f9d138f3053e8eed2c86c6d9c79f574693f91703b8ea5ab649e650a32fc10ba55afb3964088b72ebc5dcfaf7f62ad41b6a81f232781a42500000000049454e44ae426082</data> </image> <image name="image32"> ! <data format="PNG" length="406">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000015d49444154388dd593bd4e02411485bf558a21b1a03071e9b0b4c4cad8d999f80696947426fa0856585ada988036bc82162458899d92d0ac1d24166e8cc15b608ec5ae5141dc21d07892c9cc64ee7cf7dcf981ff2c8d0b50fb605fc3debdf432d4b077affa56a869b1df61b9ac6cdb4727f46fafb1c72ef614d31f0cbc5c6682291621ead2bf3c264f817cce0196b96dc9377d3c82c246d90bea0db611381c8cc065d7e80f7680ad186e35cfb31fd7d331896383f48c17040e8b450cc3a23bdecc7085a9a1cbfee0e881a87b03e6b038869cc3e2a9d1ef9f83ccab38dcdf633d67bcc5c96b885e33ad4c48f3b6760ba4925fb6701724ad9d3e54d9b94e1da8825443ba42eaa47d0da9327b39e36a364a2954481d9a8d9f4efd7ede2fb251f20813b974fea56016980441405af226b00184c000e8023704c105d25f94a9f0904e2b19d7cf43a433eae721009d56b2be1049d5c58026c1e54581e65b9f5b1f895cc7763289e7f80000000049454e44ae426082</data> </image> <image name="image33"> ! <data format="PNG" length="704">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000028749444154388d9d944148145118c77fc62cbc070a3b0741a18b5087a0c3b2a7b24b1442491dd2a3a7824e46204407596f75333aa479d193585004512991b41e82f2602aa8bb1d24a362772171061a7c0f76e07578a3bbbae33af4c19b0f866f7ef39ffff7cdd7628ca1b0563638c44708bed60078be87042ef5645b8ea8ae8531868d42c91c15bbbbf6ececec9a8d42c9947eee98771fbe1a630ccdce89e35e2ca5cd42c8280bba3367c8cf2f9b66cf1d0b06907536092171db255da7ba986d024f04ae87cb369bbb4eba4d951fd5b2839102a560613ecfdc3c48040a8d0414502c6e99c1bbfd071a9a0c1c29be757300001d2aca151f1d4dcbb397330df589add893a14385d61a1d6a84230010888460cf8bbdad038558fd02bec66d4d8300b7358d8ea96d04ff29c36a1e1666a0cafe511ac4521e3991a3f3f11d087ca463bd6ed41b07feb60c7e05ca65783d0e81c20b1472711639fd10fefab0f6998ecd02c2015708748ce6c6e665bae1fd0fd8ae40a0e0d708eee9f330fdc842b73dd4d028feb96e4058af1379dce6c2c53e0881a0029b45781e417d0f8646d13d7dfb8d4b3b2281c755505520dd89ba31081ad8f6c0b34ab99dc3bbda078e4403c2b125893c967bf9f71654ca35a58186e92944a0018570a2dde110eb710358012ce6e149aea63414e0fbb0b482ecbd60e1a102408709e7582ee6612257533a3c867afa0a9c3404c07a11d97bd97e419d1dc782793b55537a7f0c75a51fce66512f3e423a6d6bd657e0d35c9de224e0914968ef80e131b8d65fdb6a992cea8d85abf149b83e50a738c11c2b4722a7f2a81064082ab4552a043259bcef255bb8ef71fc1c1f04a740a6228529a05ab7e423b870a49df1682109c78df5d8d9bbde1b7e80c0fe9eff930fc73f61b65f185d698fc60000000049454e44ae426082</data> </image> <image name="image34"> ! <data format="PNG" length="125">89504e470d0a1a0a0000000d49484452000000160000001... [truncated message content] |
From: Albert G. <ag...@us...> - 2007-12-04 13:01:49
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13714 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.214 retrieving revision 1.215 diff -C2 -d -r1.214 -r1.215 *** qcalc.q 4 Dec 2007 09:24:13 -0000 1.214 --- qcalc.q 4 Dec 2007 13:01:45 -0000 1.215 *************** *** 3290,3295 **** where [L0:List|UL] = get UNDO_LIST; = //printf "*** merge undo: %s ++ %s\n" (str (I,J,L0),str L) || ! UNDO_LIST := [(I,J,merge_lists L0 L)|UL] ! where [(I,J,L0:List)|UL] = get UNDO_LIST; // XXXFIXME: We should remove duplicates here. --- 3290,3295 ---- where [L0:List|UL] = get UNDO_LIST; = //printf "*** merge undo: %s ++ %s\n" (str (I,J,L0),str L) || ! UNDO_LIST := [(DI,DJ,merge_lists L0 L)|UL] ! where [(DI,DJ,L0:List)|UL] = get UNDO_LIST; // XXXFIXME: We should remove duplicates here. *************** *** 3358,3367 **** UNDO_LIST := UL || REDO_LIST := [(I,J;N,M)|get REDO_LIST] || EDITED := (#UL<>get LAST_SAVE) || update_title || ! if is_qt_object X then post CBQ '(check_last_gui (I1,J1,X)) where [(I,J;N,M)|UL] = get UNDO_LIST, SP = foldl insert (get SPANS) $ filter istuple $ reverse UL, (N1,M1) = undo_span SP (I,J), ! (I1,J1) = real_index (I,J), X = gui_elem (I1,J1); redo = //printf "*** redo: %s\n" (str W) || --- 3358,3367 ---- UNDO_LIST := UL || REDO_LIST := [(I,J;N,M)|get REDO_LIST] || EDITED := (#UL<>get LAST_SAVE) || update_title || ! if B then (doprocess (I1,J1) || digest_loop) where [(I,J;N,M)|UL] = get UNDO_LIST, SP = foldl insert (get SPANS) $ filter istuple $ reverse UL, (N1,M1) = undo_span SP (I,J), ! (I1,J1) = real_index (I,J), B = is_gui_elem (I1,J1); redo = //printf "*** redo: %s\n" (str W) || *************** *** 3401,3407 **** UNDO_LIST := [(I,J;N,M)|UL] || REDO_LIST := RL || EDITED := (#UL+1<>get LAST_SAVE) || update_title || ! if is_qt_object X then post CBQ '(check_last_gui (I1,J1,X)) where [(I,J;N,M)|RL] = get REDO_LIST, UL = get UNDO_LIST, ! (I1,J1) = real_index (I,J), X = gui_elem (I1,J1); /* Syntax highlighting. ****************************************************/ --- 3401,3407 ---- UNDO_LIST := [(I,J;N,M)|UL] || REDO_LIST := RL || EDITED := (#UL+1<>get LAST_SAVE) || update_title || ! if B then (doprocess (I1,J1) || digest_loop) where [(I,J;N,M)|RL] = get REDO_LIST, UL = get UNDO_LIST, ! (I1,J1) = real_index (I,J), B = is_gui_elem (I1,J1); /* Syntax highlighting. ****************************************************/ |
From: Albert G. <ag...@us...> - 2007-12-04 11:41:51
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv19148 Modified Files: calclib.q Log Message: bugfixes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** calclib.q 4 Dec 2007 09:49:24 -0000 1.57 --- calclib.q 4 Dec 2007 11:41:41 -0000 1.58 *************** *** 458,462 **** where ARGS:List = catch () (task_expr_params [] 'X); ! private init_task ARGS; taskwindow X --- 458,462 ---- where ARGS:List = catch () (task_expr_params [] 'X); ! private init_task X ARGS; taskwindow X *************** *** 473,477 **** H:Thread = printf "\f+++ Taskwindow: %s\n" $ str (I,J) || ! thread (init_task (I,J,SEM) || do_task X (I,J,SEM)); /* Our actual window id is sent by the parent process via the SEM semaphore --- 473,477 ---- H:Thread = printf "\f+++ Taskwindow: %s\n" $ str (I,J) || ! thread (init_task 'X (I,J,SEM)); /* Our actual window id is sent by the parent process via the SEM semaphore *************** *** 479,488 **** message. We make this value the initial value of the task's cell, and we also store it in the thread-local data so that the task can access it using ! task_winid. */ ! init_task (I,J,SEM) = setval (I,J) ID || YYTLD := insert (get YYTLD) ! (thread_no this_thread,(I,J,SEM,ID)) ! where ID = get SEM; /* Gnuplot support (experimental). */ --- 479,499 ---- message. We make this value the initial value of the task's cell, and we also store it in the thread-local data so that the task can access it using ! task_winid. NOTE: Sometimes we might receive other messages while we're ! waiting for the window id to arrive. We process these on the fly. */ ! private init_task_loop X M ARGS MSG; ! ! init_task 'X (I,J,SEM) ! = init_task_loop 'X () (I,J,SEM) (get SEM); ! ! init_task_loop 'X M (I,J,SEM) ID:Int = setval (I,J) ID || YYTLD := insert (get YYTLD) ! (thread_no this_thread,(I,J,SEM,ID)) || ! if neq () M then post SEM M || ! do_task X (I,J,SEM); ! init_task_loop 'X M (I,J,SEM) 'Y ! = init_task_loop 'Y M (I,J,SEM) (get SEM); ! init_task_loop 'X M (I,J,SEM) Y ! = init_task_loop 'X Y (I,J,SEM) (get SEM) otherwise; /* Gnuplot support (experimental). */ *************** *** 504,508 **** gnuplot_loop PLOT 'X ! = fprintf PLOT "\nset term x11; reset\n" || fputs PLOT CMD || setval index ("-*- gnuplot -*-\n"++CMD) || --- 515,519 ---- gnuplot_loop PLOT 'X ! = fputs PLOT "\nset term x11; reset\n" || fputs PLOT CMD || setval index ("-*- gnuplot -*-\n"++CMD) || |
From: Albert G. <ag...@us...> - 2007-12-04 09:49:30
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv10147 Modified Files: calclib.q Log Message: bugfixes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** calclib.q 4 Dec 2007 00:52:17 -0000 1.56 --- calclib.q 4 Dec 2007 09:49:24 -0000 1.57 *************** *** 225,229 **** checkbox (S:String,INIT:Bool) = printf "\f+++ Checkbox: %s %s\n" (str (I,J),str (S,INIT)) || ! flush || INIT where (I,J) = get YYKEY; --- 225,229 ---- checkbox (S:String,INIT:Bool) = printf "\f+++ Checkbox: %s %s\n" (str (I,J),str (S,INIT)) || ! flush || yyset (I,J) INIT where (I,J) = get YYKEY; *************** *** 231,235 **** combobox (L:List,INIT:String) = printf "\f+++ Combobox: %s %s\n" (str (I,J),str (L,INIT)) || ! flush || INIT if all isstr L where (I,J) = get YYKEY; --- 231,235 ---- combobox (L:List,INIT:String) = printf "\f+++ Combobox: %s %s\n" (str (I,J),str (L,INIT)) || ! flush || yyset (I,J) INIT if all isstr L where (I,J) = get YYKEY; *************** *** 239,243 **** comboedit (L:List,INIT:String) = printf "\f+++ Comboedit: %s %s\n" (str (I,J),str (L,INIT)) || ! flush || INIT if all isstr L where (I,J) = get YYKEY; --- 239,243 ---- comboedit (L:List,INIT:String) = printf "\f+++ Comboedit: %s %s\n" (str (I,J),str (L,INIT)) || ! flush || yyset (I,J) INIT if all isstr L where (I,J) = get YYKEY; *************** *** 247,251 **** pushbutton (S:String,ICON:String) = printf "\f+++ Pushbutton: %s %s\n" ! (str (I,J),str (S,ICON)) || false where (I,J) = get YYKEY; --- 247,251 ---- pushbutton (S:String,ICON:String) = printf "\f+++ Pushbutton: %s %s\n" ! (str (I,J),str (S,ICON)) || yyset (I,J) false where (I,J) = get YYKEY; *************** *** 256,260 **** togglebutton (S:String,ICON:String,INIT:Bool) = printf "\f+++ Togglebutton: %s %s\n" ! (str (I,J),str (S,ICON,INIT)) || INIT where (I,J) = get YYKEY; --- 256,260 ---- togglebutton (S:String,ICON:String,INIT:Bool) = printf "\f+++ Togglebutton: %s %s\n" ! (str (I,J),str (S,ICON,INIT)) || yyset (I,J) INIT where (I,J) = get YYKEY; *************** *** 278,282 **** = printf "\f+++ Slider: %s %s\n" (str (I,J),str (MIN,MAX,STEP,INIT,VERT)) || ! flush || INIT where (I,J) = get YYKEY; --- 278,282 ---- = printf "\f+++ Slider: %s %s\n" (str (I,J),str (MIN,MAX,STEP,INIT,VERT)) || ! flush || yyset (I,J) INIT where (I,J) = get YYKEY; *************** *** 362,366 **** (str (I,J), str (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V)) || ! flush || INIT where (I,J) = get YYKEY; --- 362,366 ---- (str (I,J), str (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V)) || ! flush || yyset (I,J) INIT where (I,J) = get YYKEY; |
From: Albert G. <ag...@us...> - 2007-12-04 09:24:16
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8546 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.213 retrieving revision 1.214 diff -C2 -d -r1.213 -r1.214 *** qcalc.q 4 Dec 2007 00:52:18 -0000 1.213 --- qcalc.q 4 Dec 2007 09:24:13 -0000 1.214 *************** *** 2328,2337 **** FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () where ALL = selection_all, SEL = selection: ! = doprint PRT OPT_CONTENTS (FROM,TO) $ ! format_as_text OPT_CELLS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = SEL if qt PRT "printRange" () = PRINT_SEL; ! = doprint PRT OPT_CONTENTS (FROM,TO) $ ! format_as_text OPT_CELLS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = ALL; = doprint PRT OPT_CONTENTS (FROM,TO) ""; --- 2328,2341 ---- FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () where ALL = selection_all, SEL = selection: ! = init_tmpfiles || ! doprint PRT OPT_CONTENTS (FROM,TO) $ ! format_as_text OPT_CELLS (I1,J1;I2,J2) || ! clear_tmpfiles where (_,_;I1,J1;I2,J2) = SEL if qt PRT "printRange" () = PRINT_SEL; ! = init_tmpfiles || ! doprint PRT OPT_CONTENTS (FROM,TO) $ ! format_as_text OPT_CELLS (I1,J1;I2,J2) || ! clear_tmpfiles where (_,_;I1,J1;I2,J2) = ALL; = doprint PRT OPT_CONTENTS (FROM,TO) ""; *************** *** 2356,2363 **** mktmpname EXT = TMPCTR := N+1 || sprintf "%s-%d.%s" (get TMPNAM,N,EXT) ! where S:String = init_tmpfiles || get TMPNAM, ! N:Int = get TMPCTR; ! init_tmpfiles = clear_tmpfiles || TMPNAM := tmpnam || TMPCTR := 0; clear_tmpfiles = do unlink (glob (S++"-[0-9]*.*")) || --- 2360,2366 ---- mktmpname EXT = TMPCTR := N+1 || sprintf "%s-%d.%s" (get TMPNAM,N,EXT) ! where S:String = get TMPNAM, N:Int = get TMPCTR; ! init_tmpfiles = TMPNAM := tmpnam || TMPCTR := 0; clear_tmpfiles = do unlink (glob (S++"-[0-9]*.*")) || *************** *** 2377,2381 **** CONTENTS (FROM,TO) 1 (1,1) || qt P "end" () || - clear_tmpfiles || statusmsg "Done" where M = qt_new "QPaintDeviceMetrics" $ qt P "device" (), --- 2380,2383 ---- *************** *** 2600,2604 **** format_text (I,J) S if not is_nil X where X:QtObject = gui_elem (I,J): ! = (S,true) if gui_hasrichtext (); = (make_gnuplot (W,H) S,true) where S:String = drop (P+1) S, --- 2602,2606 ---- format_text (I,J) S if not is_nil X where X:QtObject = gui_elem (I,J): ! = (S,true) if gui_hasrichtext X; = (make_gnuplot (W,H) S,true) where S:String = drop (P+1) S, *************** *** 2613,2617 **** = fprintf PLOT "set terminal png size %d, %d; \ set output '%s'\n" (W,H,TMP) || ! fprintf PLOT "%s\n" CMD || sprintf "<img src=\"%s\">" (htmlquote TMP) where PLOT:File = popen "gnuplot" "w", --- 2615,2619 ---- = fprintf PLOT "set terminal png size %d, %d; \ set output '%s'\n" (W,H,TMP) || ! fputs PLOT CMD || sprintf "<img src=\"%s\">" (htmlquote TMP) where PLOT:File = popen "gnuplot" "w", |
From: Albert G. <ag...@us...> - 2007-12-04 00:58:17
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv7223 Modified Files: README Log Message: update README Index: README =================================================================== RCS file: /cvsroot/q-lang/qcalc/README,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** README 13 Nov 2007 11:32:47 -0000 1.18 --- README 4 Dec 2007 00:58:13 -0000 1.19 *************** *** 86,99 **** - Special cell attributes like number format, alignment, color, font and ! frames, etc. Currently you'll have to help yourself with ASCII art. ! - Embedded graphics, maybe using Q's OpenDX and OpenGL interfaces. I'm ! thinking about scientific visualizations there, rather than bargraphs and ! piecharts (although these might be useful, too). Enjoy! :) ! Nov 2007 Albert Graef <Dr....@t-...> http://q-lang.sf.net --- 86,99 ---- - Special cell attributes like number format, alignment, color, font and ! frames, etc. Currently you'll have to help yourself with ASCII art or with a ! 'label' GUI element. ! - A multiline cell editor. Editing complicated formulas on a single line can ! be awkward at times. Enjoy! :) ! Dec 2007 Albert Graef <Dr....@t-...> http://q-lang.sf.net |
From: Albert G. <ag...@us...> - 2007-12-04 00:52:22
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4304 Modified Files: calclib.q qcalc.q Log Message: add gnuplot support Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.212 retrieving revision 1.213 diff -C2 -d -r1.212 -r1.213 *** qcalc.q 2 Dec 2007 20:33:47 -0000 1.212 --- qcalc.q 4 Dec 2007 00:52:18 -0000 1.213 *************** *** 20,24 **** - Improve the print output (configurable margins, alignment and html markup ! for headers and footers). - Maybe add a second interpreter running interactively in the log pane. --- 20,24 ---- - Improve the print output (configurable margins, alignment and html markup ! for headers and footers, prettier gnuplot graphics). - Maybe add a second interpreter running interactively in the log pane. *************** *** 2351,2354 **** --- 2351,2368 ---- chksel _ = false otherwise; + /* Temporary files for image data (gnuplot interface). */ + + def TMPNAM = ref (), TMPCTR = ref 0; + + mktmpname EXT = TMPCTR := N+1 || sprintf "%s-%d.%s" (get TMPNAM,N,EXT) + where S:String = init_tmpfiles || get TMPNAM, + N:Int = get TMPCTR; + + init_tmpfiles = clear_tmpfiles || TMPNAM := tmpnam || TMPCTR := 0; + + clear_tmpfiles = do unlink (glob (S++"-[0-9]*.*")) || + TMPNAM := () || TMPCTR := 0 + where S:String = get TMPNAM; + /* Print. This is based on the "application walkthrough" from the Qt3 docs. */ *************** *** 2363,2366 **** --- 2377,2381 ---- CONTENTS (FROM,TO) 1 (1,1) || qt P "end" () || + clear_tmpfiles || statusmsg "Done" where M = qt_new "QPaintDeviceMetrics" $ qt P "device" (), *************** *** 2555,2560 **** sel_cval (I,J) else "", ! B = is_gui_elem (I,J) and then gui_hasrichtext (gui_elem (I,J)), ! T = if B then S else htmlquote S, (N,M) = cell_span (I,J), SP = if (N>1) or else (M>1) then --- 2570,2574 ---- sel_cval (I,J) else "", ! (T,B) = format_text (I,J) S, (N,M) = cell_span (I,J), SP = if (N>1) or else (M>1) then *************** *** 2584,2587 **** --- 2598,2622 ---- where L = filter (neg null) [T,htmlquote F]; + format_text (I,J) S + if not is_nil X where X:QtObject = gui_elem (I,J): + = (S,true) if gui_hasrichtext (); + = (make_gnuplot (W,H) S,true) + where S:String = drop (P+1) S, + (W,H) = (qt X "width" (),qt X "height" ()) + if P>=0 where S:String = val S, P:Int = pos "\n" S + if take (#MAGIC) S = MAGIC + where MAGIC = "\"-*- gnuplot -*-\\n"; + otherwise: + = (htmlquote S,false); + + make_gnuplot (W,H) CMD + = fprintf PLOT "set terminal png size %d, %d; \ + set output '%s'\n" (W,H,TMP) || + fprintf PLOT "%s\n" CMD || + sprintf "<img src=\"%s\">" (htmlquote TMP) + where PLOT:File = popen "gnuplot" "w", + TMP:String = mktmpname "png"; + = "" otherwise; + /* Exit the application. */ *************** *** 3049,3053 **** gui_getc_pixmap X ! = sprintf "<img src=\"%s\"/>" (htmlquote S) where (I,J) = qt_data X, (R:Ref|_) = gui_data (I,J), S:String = get R; --- 3084,3088 ---- gui_getc_pixmap X ! = sprintf "<img src=\"%s\">" (htmlquote S) where (I,J) = qt_data X, (R:Ref|_) = gui_data (I,J), S:String = get R; Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** calclib.q 2 Dec 2007 01:52:18 -0000 1.55 --- calclib.q 4 Dec 2007 00:52:17 -0000 1.56 *************** *** 51,55 **** /* Advanced GUI elements. Currently supported are action buttons, task buttons ! and task windows. */ /* The action button is a special push button which has an associated Q --- 51,56 ---- /* Advanced GUI elements. Currently supported are action buttons, task buttons ! and task windows. We also provide a convenience function to embed gnuplot ! in a table cell. */ /* The action button is a special push button which has an associated Q *************** *** 81,84 **** --- 82,97 ---- public task_winid; + /* Convenience function to set up a task window running gnuplot. CMD is a + string containing the gnuplot command used to produce the plot, and DATA is + the data to be plotted, usually a range (list) of cell values. Use '-' to + specify the dataset inside the gnuplot command. DATA can also be () if no + additional data is required, or a tuple of lists if multiple datasets are + to be plotted. NOTE: Currently this only works under X11 and requires a + gnuplot version which supports the 'x11-external' option. If necessary, you + can set the GNUPLOT variable to the name of your gnuplot executable. */ + + public var GNUPLOT = "gnuplot"; + public gnuplot CMD DATA; + /* Implementation. *********************************************************/ *************** *** 473,476 **** --- 486,535 ---- where ID = get SEM; + /* Gnuplot support (experimental). */ + + private gnuplot_task KEY ID PLOT CMD, gnuplot_loop PLOT MSG, + gnuplot_data DATA, gnuplot_dataset DATA, gnuplot_datapoint DATA, + gnuplot_dataval X; + + gnuplot CMD:String DATA + = taskwindow (gnuplot_task CMD DATA); + + gnuplot_task CMD DATA + = fprintf PLOT "set terminal x11 window '%x'\n" task_winid || + fputs PLOT CMD || + setval index ("-*- gnuplot -*-\n"++CMD) || + gnuplot_loop PLOT (get task_input) + where DATA:String = gnuplot_data DATA, + PLOT:File = popen GNUPLOT "w", CMD = CMD++"\n"++DATA; + + gnuplot_loop PLOT 'X + = fprintf PLOT "\nset term x11; reset\n" || + fputs PLOT CMD || + setval index ("-*- gnuplot -*-\n"++CMD) || + gnuplot_loop PLOT (get task_input) + where (CMD,DATA) = task_params 'X, + DATA:String = gnuplot_data DATA, CMD = CMD++"\n"++DATA; + gnuplot_loop PLOT _ + = gnuplot_loop PLOT (get task_input); + + gnuplot_data () = ""; + gnuplot_data DATA:Tuple + = strcat $ map gnuplot_dataset $ list DATA; + gnuplot_data DATA:List + = gnuplot_dataset DATA; + + gnuplot_dataset DATA:List + = strcat (map gnuplot_datapoint DATA) ++ "e\n"; + + gnuplot_datapoint DATA:List + = join " " (map gnuplot_dataval DATA) ++ "\n"; + gnuplot_datapoint DATA + = gnuplot_dataval DATA ++ "\n" otherwise; + + gnuplot_dataval X + = str X if isint X or else isfloat X or else isstr X; + = str X where X:Float = float X if isreal X; + = str "" otherwise; + /* Internals. */ |
From: Albert G. <ag...@us...> - 2007-12-02 20:33:50
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21634 Modified Files: qcalc.q Log Message: bugfix: merge_undo Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.211 retrieving revision 1.212 diff -C2 -d -r1.211 -r1.212 *** qcalc.q 2 Dec 2007 01:55:08 -0000 1.211 --- qcalc.q 2 Dec 2007 20:33:47 -0000 1.212 *************** *** 3247,3262 **** merge_undo L:List = //printf "*** merge undo: %s ++ %s\n" (str L0,str L) || UNDO_LIST := [merge_lists L0 L|UL] ! where [L0|UL] = get UNDO_LIST ! if not null L ! where L = filter (neg is_gui_elem.fst) $ undo_cellvals L; ! ! merge_undo L:List ! = //printf "*** merge undo: %s ++ %s\n" (str (DI,DJ,L0),str L) || UNDO_LIST := [(I,J,merge_lists L0 L)|UL] ! where [(I,J,L0:List)|UL] = get UNDO_LIST ! if not null L ! where L = filter (neg is_gui_elem.fst) $ undo_cellvals L; // XXXFIXME: We should remove duplicates here. --- 3247,3258 ---- merge_undo L:List + if not null L + where L = filter (neg is_gui_elem.fst) $ undo_cellvals L: = //printf "*** merge undo: %s ++ %s\n" (str L0,str L) || UNDO_LIST := [merge_lists L0 L|UL] ! where [L0:List|UL] = get UNDO_LIST; ! = //printf "*** merge undo: %s ++ %s\n" (str (I,J,L0),str L) || UNDO_LIST := [(I,J,merge_lists L0 L)|UL] ! where [(I,J,L0:List)|UL] = get UNDO_LIST; // XXXFIXME: We should remove duplicates here. |
From: Albert G. <ag...@us...> - 2007-12-02 10:34:01
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25914 Modified Files: mplayer.qcalc Log Message: cosmetic changes Index: mplayer.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/mplayer.qcalc,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** mplayer.qcalc 2 Dec 2007 02:15:57 -0000 1.2 --- mplayer.qcalc 2 Dec 2007 10:33:55 -0000 1.3 *************** *** 1,6 **** ! // qcalc 1.0, created Sun Dec 2 03:20:50 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((0,0),("= label \"<h2>MPlayer \\\"in a bottle\\\"</h2><p>This program demonstrates the new taskwindow element which enables you to render graphics, animations, etc. directly into a table cell. To see this in action, please enter a video filename into cell A2 below or use the \\\"Browse\\\" button to select a video file. Then push the \\\"Play\\\" button to start playback. <b>NOTE:</b> You need the mplayer program to make this work.</p>\"",1,2)),((1,1),"= file_browser"),((2,0),("= taskwindow ()",1,2)),((3,0),("= taskbutton \"Play\" (player_task A2 A3)",1,2))] ! // [(0,135),(2,283)] ! // [(0,319),(1,98)] // Start of script. Please do not remove this line. --- 1,6 ---- ! // qcalc 1.0, created Sun Dec 2 11:22:04 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((0,0),("= label \"<h2>MPlayer \\\"in a bottle\\\"</h2><p>This program demonstrates the new taskwindow element which enables you to render graphics, animations, etc. directly into a table cell. To see this in action, please enter a video filename into cell A2 below or use the \\\"Browse\\\" button to select a video file. Then push the \\\"Play\\\" button to start playback. <b>NOTE:</b> You need the mplayer program to make this work.</p>\"",1,2)),((1,1),"= file_browser"),((2,0),("= taskwindow ()",1,2)),((3,0),("= taskbutton \"Play\" (player_task A2 A3)",1,2))] ! // [(0,135),(2,287)] ! // [(0,278),(1,98)] // Start of script. Please do not remove this line. |
From: Albert G. <ag...@us...> - 2007-12-02 10:33:42
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25882 Modified Files: qcalc.xml Added Files: guiexamples4.png Log Message: update documentation --- NEW FILE: guiexamples4.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.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** qcalc.xml 29 Nov 2007 00:36:49 -0000 1.23 --- qcalc.xml 2 Dec 2007 10:33:37 -0000 1.24 *************** *** 476,483 **** </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> --- 476,483 ---- </sect1> ! <sect1 id="advancedguiops"><title>Advanced GUI Elements</title> <para> ! QCalc also provides a number of advanced GUI elements to deal with custom actions to be executed in a spreadsheet. Currently supported are action buttons, task buttons and task windows. We will describe each of these in turn. </para> *************** *** 533,536 **** --- 533,559 ---- </para> + <para> + <literal>public special taskwindow X;</literal> + </para> + + <para> + The task window works pretty much like a task button, minus the toggle button functionality. Instead, it provides an empty parent window inside the task's cell which can be operated directly by the task in the inferior Q process. The id of the parent window is available inside the task with the <literal>task_winid</literal> function: + </para> + + <para> + <literal>public task_winid;</literal> + </para> + + <para> + Moreover, the <literal>index</literal>, <literal>row</literal>, <literal>column</literal> and <literal>task_input</literal> functions work in the same fashion as with task buttons. Messages of the form <literal>(W,H)</literal>, where <literal>W</literal> and <literal>H</literal> are integers denoting the width and height of the task window, are delivered via <literal>task_input</literal> at initialization time and whenever the size of the parent window changes, and quoted <literal>taskwindow</literal> calls are sent when the task window is to be updated due to changes in requisite cells while its task is still up and running. + </para> + + <para> + The initial value of the task window cell is the id of the parent window. It is up to the task to change this value using <literal>setval</literal> when appropriate. It is also up to the task to draw the contents of the window, using either some external program or Q's own GUI and graphics operations. In the simplest case, you can invoke <literal>taskwindow</literal> with a trivial task (e.g., <literal>taskwindow ()</literal>) and use the supplied window id to do the actual drawing elsewhere (e.g., using a task button), or you can provide an expression which takes care of drawing the contents of the cell in the window task itself. An example for the use of task windows can be found in the <filename>mplayer.qcalc</filename> spreadsheet included in the QCalc distribution; see the screenshot below. + <screenshot> + <graphic fileref="guiexamples4.png" align="center"/> + </screenshot> + </para> + </sect1> |
From: Albert G. <ag...@us...> - 2007-12-02 02:16:03
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv9576 Modified Files: mplayer.qcalc Log Message: cosmetic changes Index: mplayer.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/mplayer.qcalc,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mplayer.qcalc 2 Dec 2007 01:13:19 -0000 1.1 --- mplayer.qcalc 2 Dec 2007 02:15:57 -0000 1.2 *************** *** 1,4 **** ! // qcalc 1.0, created Sun Dec 2 02:12:57 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,0),("= label \"<h2>MPlayer \\\"in a bottle\\\"</h2><p>This program demonstrates the new taskwindow element which enables you to render graphics, animations, etc. directly into a table cell. To see this in action, please enter a video filename into cell A2 below or use the \\\"Browse\\\" button to select a video file. Then push the \\\"Play\\\" button to start playback. <b>NOTE:</b> You need the mplayer program to make this work.</p>\"",1,2)),((1,1),"= file_browser"),((2,0),("= taskwindow win_task",1,2)),((3,0),("= taskbutton \"Play\" (player_task A2 A3)",1,2))] // [(0,135),(2,283)] // [(0,319),(1,98)] --- 1,4 ---- ! // qcalc 1.0, created Sun Dec 2 03:20:50 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,0),("= label \"<h2>MPlayer \\\"in a bottle\\\"</h2><p>This program demonstrates the new taskwindow element which enables you to render graphics, animations, etc. directly into a table cell. To see this in action, please enter a video filename into cell A2 below or use the \\\"Browse\\\" button to select a video file. Then push the \\\"Play\\\" button to start playback. <b>NOTE:</b> You need the mplayer program to make this work.</p>\"",1,2)),((1,1),"= file_browser"),((2,0),("= taskwindow ()",1,2)),((3,0),("= taskbutton \"Play\" (player_task A2 A3)",1,2))] // [(0,135),(2,283)] // [(0,319),(1,98)] *************** *** 25,34 **** (getcwd, "All files (*.*)", nil, "Choose a video file"); ! /* The window task only sets the cell value to the window id, the ! actual playback is done by the player_task below. */ ! ! win_task = setval index task_winid; ! ! /* The player task. To be used with the taskbutton element. */ player_task NAME ID --- 25,33 ---- (getcwd, "All files (*.*)", nil, "Choose a video file"); ! /* See cells A3 and A4 for the taskwindow and taskbutton elements which ! are the real gist of this program. Note that the task of the taskwindow ! is trivial in this case, we just take the window id (which is always the ! initial value of a taskwindow cell) and pass it on to the following ! player task which does the actual playback. */ player_task NAME ID *************** *** 55,59 **** start NAME ID = spawn "mplayer" ! ["mplayer","-really-quiet","-wid",str ID,NAME]; stop PID = kill SIGTERM PID || waitpid PID 0 if PID>0; --- 54,58 ---- start NAME ID = spawn "mplayer" ! ["mplayer","-really-quiet","-wid",str ID,NAME] if ID>0; stop PID = kill SIGTERM PID || waitpid PID 0 if PID>0; |
From: Albert G. <ag...@us...> - 2007-12-02 01:55:11
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv31042 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.210 retrieving revision 1.211 diff -C2 -d -r1.210 -r1.211 *** qcalc.q 1 Dec 2007 23:39:38 -0000 1.210 --- qcalc.q 2 Dec 2007 01:55:08 -0000 1.211 *************** *** 2857,2861 **** label_gui (I,J) X:QtObject (S,A) ! = qt X "setAlignment" (alignment A) || qt X "setText" S; --- 2857,2862 ---- label_gui (I,J) X:QtObject (S,A) ! = qt X "setAlignment" ! (alignment A or qt_val "Qt" "WordBreak") || qt X "setText" S; |
From: Albert G. <ag...@us...> - 2007-12-02 01:52:23
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30165 Modified Files: calclib.q Log Message: bugfixes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** calclib.q 2 Dec 2007 01:34:56 -0000 1.54 --- calclib.q 2 Dec 2007 01:52:18 -0000 1.55 *************** *** 450,454 **** where (I,J|_) = get YYTLD!thread_no this_thread: // request by a task to replace itself with a new task ! = yyset (I,J) 0 || X; where (I,J) = get YYKEY: // update existing task --- 450,454 ---- where (I,J|_) = get YYTLD!thread_no this_thread: // request by a task to replace itself with a new task ! = X; where (I,J) = get YYKEY: // update existing task *************** *** 584,588 **** where (H,SEM) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = post SEM '(taskwindow X) || yyset (I,J) 0 where 'X = subst 'X if isthread H and then active H; --- 584,588 ---- where (H,SEM) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = post SEM '(taskwindow X) where 'X = subst 'X if isthread H and then active H; |
From: Albert G. <ag...@us...> - 2007-12-02 01:35:00
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv22719 Modified Files: calclib.q Log Message: make the window id the initial value of a task window element Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** calclib.q 2 Dec 2007 01:12:18 -0000 1.53 --- calclib.q 2 Dec 2007 01:34:56 -0000 1.54 *************** *** 450,454 **** where (I,J|_) = get YYTLD!thread_no this_thread: // request by a task to replace itself with a new task ! = yyset (I,J) () || X; where (I,J) = get YYKEY: // update existing task --- 450,454 ---- where (I,J|_) = get YYTLD!thread_no this_thread: // request by a task to replace itself with a new task ! = yyset (I,J) 0 || X; where (I,J) = get YYKEY: // update existing task *************** *** 456,460 **** // start up a new task = YYTASKS := insert (get YYTASKS) (I,J;H,SEM) || ! yyset (I,J) () where SEM:Semaphore = semaphore, H:Thread = --- 456,460 ---- // start up a new task = YYTASKS := insert (get YYTASKS) (I,J;H,SEM) || ! yyset (I,J) 0 where SEM:Semaphore = semaphore, H:Thread = *************** *** 464,473 **** /* Our actual window id is sent by the parent process via the SEM semaphore using a yywin call (see below) when it processes the "Taskwindow" ! message. We store this value in the thread-local data so that the task can ! access it using task_winid. */ init_task (I,J,SEM) ! = YYTLD := insert (get YYTLD) ! (thread_no this_thread,(I,J,SEM,get SEM)); /* Internals. */ --- 464,475 ---- /* Our actual window id is sent by the parent process via the SEM semaphore using a yywin call (see below) when it processes the "Taskwindow" ! message. We make this value the initial value of the task's cell, and we ! also store it in the thread-local data so that the task can access it using ! task_winid. */ init_task (I,J,SEM) ! = setval (I,J) ID || YYTLD := insert (get YYTLD) ! (thread_no this_thread,(I,J,SEM,ID)) ! where ID = get SEM; /* Internals. */ *************** *** 582,586 **** where (H,SEM) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = post SEM '(taskwindow X) || yyset (I,J) () where 'X = subst 'X if isthread H and then active H; --- 584,588 ---- where (H,SEM) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = post SEM '(taskwindow X) || yyset (I,J) 0 where 'X = subst 'X if isthread H and then active H; |
From: Albert G. <ag...@us...> - 2007-12-02 01:13:24
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14121/examples Added Files: mplayer.qcalc Log Message: add taskwindow example --- NEW FILE: mplayer.qcalc --- // qcalc 1.0, created Sun Dec 2 02:12:57 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((0,0),("= label \"<h2>MPlayer \\\"in a bottle\\\"</h2><p>This program demonstrates the new taskwindow element which enables you to render graphics, animations, etc. directly into a table cell. To see this in action, please enter a video filename into cell A2 below or use the \\\"Browse\\\" button to select a video file. Then push the \\\"Play\\\" button to start playback. <b>NOTE:</b> You need the mplayer program to make this work.</p>\"",1,2)),((1,1),"= file_browser"),((2,0),("= taskwindow win_task",1,2)),((3,0),("= taskbutton \"Play\" (player_task A2 A3)",1,2))] // [(0,135),(2,283)] // [(0,319),(1,98)] // Start of script. Please do not remove this line. /* mplayer.qcalc: render a movie into a table cell using mplayer */ /* This program demonstrates the use of the taskwindow element which lets you draw cell contents directly from a spreadsheet script. We use this here to play back a movie in a table cell using mplayer, but in the same fashion you could also draw any kind of graphics or animation, using either an external program or Q's own graphics capabilities. NOTE: To make this program work, you need to have mplayer installed, see http://www.mplayerhq.hu. */ import calclib, smokeqt, system; /* Browse for a video filename (standard Qt file selection dialog). */ def (APP,ARGV) = qt_app ARGS; file_browser = actionbutton ("Browse...","","") $ setval (row,column-1) $ qt "QFileDialog" "getOpenFileName" (getcwd, "All files (*.*)", nil, "Choose a video file"); /* The window task only sets the cell value to the window id, the actual playback is done by the player_task below. */ win_task = setval index task_winid; /* The player task. To be used with the taskbutton element. */ player_task NAME ID = player NAME ID 0 (get task_input); player NAME ID PID (try _) = // no GUI messages yet, check whether we're still playing sleep 0.1 || player NAME ID PID (try task_input) where () = waitpid PID WNOHANG; = () otherwise; player NAME ID PID 'X = // play a new file player NAME ID PID true where (_,_,NAME,ID) = task_params 'X; player NAME ID PID true = // start playing player NAME ID PID (try task_input) where PID = stop PID || start NAME ID; player NAME ID PID _ = // stop playing stop PID otherwise; /* MPlayer command. Adapt the options as needed. */ start NAME ID = spawn "mplayer" ["mplayer","-really-quiet","-wid",str ID,NAME]; stop PID = kill SIGTERM PID || waitpid PID 0 if PID>0; |
From: Albert G. <ag...@us...> - 2007-12-02 01:12:23
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13662 Modified Files: calclib.q Log Message: comment changes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** calclib.q 1 Dec 2007 23:23:50 -0000 1.52 --- calclib.q 2 Dec 2007 01:12:18 -0000 1.53 *************** *** 51,56 **** /* Advanced GUI elements. Currently supported are action buttons, task buttons ! and task windows. See guiexamples.qcalc for examples showing how to use ! these. */ /* The action button is a special push button which has an associated Q --- 51,55 ---- /* Advanced GUI elements. Currently supported are action buttons, task buttons ! and task windows. */ /* The action button is a special push button which has an associated Q |
From: Albert G. <ag...@us...> - 2007-12-01 23:39:43
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv7347 Modified Files: qcalc.q Log Message: bugfix: add missing word wrap flag for label elements Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.209 retrieving revision 1.210 diff -C2 -d -r1.209 -r1.210 *** qcalc.q 1 Dec 2007 09:31:52 -0000 1.209 --- qcalc.q 1 Dec 2007 23:39:38 -0000 1.210 *************** *** 2812,2816 **** label_gui (I,J) () (S,A) = qt X "setBackgroundMode" (qt_val "Qt" "PaletteBase") || ! qt X "setAlignment" (alignment A) || qt TABLE "setCellWidget" (I,J,X) || IT if not is_nil IT and then not is_nil X --- 2812,2817 ---- label_gui (I,J) () (S,A) = qt X "setBackgroundMode" (qt_val "Qt" "PaletteBase") || ! qt X "setAlignment" ! (alignment A or qt_val "Qt" "WordBreak") || qt TABLE "setCellWidget" (I,J,X) || IT if not is_nil IT and then not is_nil X |