# HG changeset patch # User Michael Guravage # Date 2010-10-07 17:16:03 # Node ID b3943d0b8126f31b6a660a4e63704ac73eb99573 # Parent 4cb24b73768381a1632cceec91b5a9ef9e999016 Added a Q3FileDialog in canvas.cpp:Main::exportCellData() inquire where to write the exportCellData. -- user: Michael Guravage branch 'default' added doc/Makefile added doc/stylesheet.json added doc/v1.html added doc/v1.pdf added doc/v1.rst added src/leaficon.png changed src/ChangeLog changed src/canvas.cpp diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,18 @@ +.SUFFIXES : .rst .html .pdf + +.rst.pdf : + rst2pdf -s stylesheet.json $< -o $@ + +.rst.html : + rst2html.py $< $@ + +all: v1.pdf v1.html + +v1.pdf : v1.rst + +v1.html : v1.rst + +clean: + /bin/rm -f v1.pdf v1.html + +#finis \ No newline at end of file diff --git a/doc/stylesheet.json b/doc/stylesheet.json new file mode 100644 --- /dev/null +++ b/doc/stylesheet.json @@ -0,0 +1,557 @@ +{ + "embeddedFonts" : [ ], + "pageSetup" : { + "size": "A4", + "width": null, + "height": null, + "margin-top": "2cm", + "margin-bottom": "2cm", + "margin-left": "2cm", + "margin-right": "2cm", + "margin-gutter": "0cm", + "spacing-header": "5mm", + "spacing-footer": "5mm", + "firstTemplate": "oneColumn" + }, + "pageTemplates" : { + "coverPage": { + "frames": [ + ["0cm", "0cm", "100%", "100%"] + ], + "showHeader" : false, + "showFooter" : false + }, + "oneColumn": { + "frames": [ + ["0cm", "0cm", "100%", "100%"] + ], + "showHeader" : true, + "showFooter" : true + }, + "twoColumn": { + "frames": [ + ["0cm", "0cm", "49%", "100%"], + ["51%", "0cm", "49%", "100%"] + ], + "showHeader" : true, + "showFooter" : true + }, + "threeColumn": { + "frames": [ + ["2%", "0cm", "29.333%", "100%"], + ["35.333%", "0cm", "29.333%", "100%"], + ["68.666%", "0cm", "29.333%", "100%"] + ], + "showHeader" : true, + "showFooter" : true + }, + "cutePage": { + "frames": [ + ["0%", "0%", "100%", "100%"] + ], + "showHeader" : true, + "showFooter" : true, + "defaultFooter" : "###Page###", + "defaultHeader" : "###Section###" + } + }, + "fontsAlias" : { + "stdFont": "Helvetica", + "stdBold": "Helvetica-Bold", + "stdItalic": "Helvetica-Oblique", + "stdBoldItalic": "Helvetica-BoldOblique", + "stdSans": "Helvetica", + "stdSansBold": "Helvetica-Bold", + "stdSansItalic": "Helvetica-Oblique", + "stdSansBoldItalic": "Helvetica-BoldOblique", + "stdMono": "Courier", + "stdMonoItalic": "Courier-Oblique", + "stdMonoBold": "Courier-Bold", + "stdMonoBoldItalic": "Courier-BoldOblique", + "stdSerif": "Times-Roman" + }, + "linkColor" : "navy", + "styles" : [ + [ "base" , { + "parent": null, + "fontName": "stdFont", + "fontSize":10, + "leading":12, + "leftIndent":0, + "rightIndent":0, + "firstLineIndent":0, + "alignment":"TA_LEFT", + "spaceBefore":0, + "spaceAfter":0, + "bulletFontName":"stdFont", + "bulletFontSize":10, + "bulletIndent":0, + "textColor": "black", + "backColor": null, + "wordWrap": null, + "borderWidth": 0, + "borderPadding": 0, + "borderColor": null, + "borderRadius": null, + "allowWidows": false, + "allowOrphans": false, + "hyphenation": false, + "kerning": false + }] , + ["normal" , { + "parent": "base" + }], + ["title_reference" , { + "parent": "normal", + "fontName": "stdItalic" + }], + ["bodytext" , { + "parent": "normal", + "spaceBefore":6, + "alignment": "TA_JUSTIFY", + "hyphenation": true + }], + ["toc" , { + "parent": "normal" + }], + ["blockquote" , { + "parent": "bodytext", + "leftIndent": 20 + }], + ["lineblock" , { + "parent": "bodytext" + }], + ["toc1" , { + "parent": "toc", + "fontName": "stdBold" + }], + ["toc2" , { + "parent": "toc", + "leftIndent": 20 + }], + ["toc3" , { + "parent": "toc", + "leftIndent": 40 + }], + ["toc4" , { + "parent": "toc", + "leftIndent": 60 + }], + ["toc5" , { + "parent": "toc", + "leftIndent": 80 + }], + ["toc6" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc7" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc8" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc9" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc10" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc11" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc12" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc13" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc14" , { + "parent": "toc", + "leftIndent": 100 + }], + ["toc15" , { + "parent": "toc", + "leftIndent": 100 + }], + ["footer" , { + "parent": "normal", + "alignment": "TA_CENTER" + }], + ["header" , { + "parent": "normal", + "alignment": "TA_CENTER" + }], + ["attribution" , { + "parent": "bodytext", + "alignment": "TA_RIGHT" + }], + ["figure" , { + "parent": "bodytext", + "alignment": "TA_CENTER" + }], + ["figure-caption" , { + "parent": "bodytext", + "fontName": "stdItalic", + "alignment": "TA_CENTER" + }], + ["figure-legend" , { + "parent": "bodytext", + "alignment": "TA_CENTER" + }], + ["bullet_list_item" , { + "parent": "bodytext", + "spaceBefore":-3 + }], + ["item_list_item" , { + "parent": "bodytext", + "spaceBefore":-3 + }], + ["enumerated_list" , { + "parent": "bodytext", + "spaceBefore": 0 + }], + ["enumerated_list_item" , { + "parent": "bodytext" + }], + ["definition_list_term" , { + "parent": "normal", + "fontName": "stdBold", + "spaceBefore": 4, + "spaceAfter": 0, + "keepWithNext": true + }], + ["definition_list_classifier" , { + "parent": "normal", + "fontName": "stdItalic" + }], + ["definition" , { + "parent": "bodytext", + "firstLineIndent": 0, + "bulletIndent": 0, + "spaceBefore": 0 + }], + ["fieldname" , { + "parent": "bodytext", + "alignment": "TA_RIGHT", + "fontName": "stdBold" + }], + ["fieldvalue" , { + "parent": "bodytext" + }], + ["rubric" , { + "parent": "bodytext", + "textColor": "darkred", + "alignment": "TA_CENTER" + }], + ["italic" , { + "parent": "bodytext", + "fontName": "stdItalic" + }], + ["heading" , { + "parent": "normal", + "keepWithNext": true, + "spaceBefore": 12, + "spaceAfter": 6 + }], + ["title" , { + "parent": "heading", + "fontName": "stdBold", + "fontSize": "200%", + "alignment": "TA_LEFT", + "keepWithNext": false, + "spaceAfter": 10 + }], + ["subtitle" , { + "parent": "title", + "spaceBefore": 12, + "fontSize": "75%" + }], + ["heading1" , { + "parent": "heading", + "fontName": "stdBold", + "fontSize": "175%" + }], + ["heading2" , { + "parent": "heading", + "fontName": "stdBold", + "fontSize": "150%" + }], + ["heading3" , { + "parent": "heading", + "fontName": "stdBoldItalic", + "fontSize": "125%" + }], + ["heading4" , { + "parent": "heading", + "fontName": "stdBoldItalic" + }], + ["heading5" , { + "parent": "heading", + "fontName": "stdBoldItalic" + }], + ["heading6" , { + "parent": "heading", + "fontName": "stdBoldItalic" + }], + ["topic-title" , { + "parent": "heading3" + }], + ["sidebar-title" , { + "parent": "heading3" + }], + ["sidebar-subtitle" , { + "parent": "heading4" + }], + ["sidebar" , { + "float": "none", + "width": "100%", + "parent": "normal", + "backColor": "beige", + "borderColor": "darkgray", + "borderPadding": 8, + "borderWidth": 0.5 + }], + ["admonition" , { + "parent": "normal", + "spaceBefore": 12, + "spaceAfter": 6, + "borderPadding": [16,16,16,16], + "backColor": "beige", + "borderColor": "darkgray", + "borderWidth": 0.5, + "commands":[ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ] + ] + }], + ["attention" , { + "parent": "admonition" + }], + ["caution" , { + "parent": "admonition" + }], + ["danger" , { + "parent": "admonition" + }], + ["error" , { + "parent": "admonition" + }], + ["hint" , { + "parent": "admonition" + }], + ["important" , { + "parent": "admonition" + }], + ["note" , { + "parent": "admonition" + }], + ["tip" , { + "parent": "admonition" + }], + ["warning" , { + "parent": "admonition" + }], + ["admonition-title" , { + "parent": "heading3" + }], + ["admonition-heading" , { + "parent": "heading3" + }], + ["attention-heading" , { + "parent": "admonition-heading" + }], + ["caution-heading" , { + "parent": "admonition-heading" + }], + ["danger-heading" , { + "parent": "admonition-heading" + }], + ["error-heading" , { + "parent": "admonition-heading" + }], + ["hint-heading" , { + "parent": "admonition-heading" + }], + ["important-heading" , { + "parent": "admonition-heading" + }], + ["note-heading" , { + "parent": "admonition-heading" + }], + ["tip-heading" , { + "parent": "admonition-heading" + }], + ["warning-heading" , { + "parent": "admonition-heading" + }], + ["literal" , { + "parent": "normal", + "fontName": "stdMono", + "firstLineIndent": 0, + "hyphenation": false + }], + ["aafigure" , { + "parent": "literal" + }], + ["table" , { + "spaceBefore":6, + "spaceAfter":0, + "commands": [ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ], + [ "INNERGRID", [ 0, 0 ], [ -1, -1 ], 0.25, "black" ], + [ "ROWBACKGROUNDS", [0, 0], [-1, -1], ["white","#E0E0E0"]], + [ "BOX", [ 0, 0 ], [ -1, -1 ], 0.25, "black" ] + ] + }], + ["table-title" , { + "parent" : "heading4", + "alignment" : "TA_CENTER" + }], + ["table-heading" , { + "parent" : "heading", + "backColor" : "beige", + "alignment" : "TA_CENTER", + "valign" : "BOTTOM", + "borderPadding" : 0 + }], + ["dedication" , { + "parent" : "normal" + }], + ["abstract" , { + "parent" : "normal" + }], + ["contents" , { + "parent" : "normal" + }], + ["tableofcontents" , { + "parent" : "normal" + }], + ["code" , { + "parent": "literal", + "leftIndent": 0, + "spaceBefore": 8, + "spaceAfter": 8, + "backColor": "beige", + "borderColor": "darkgray", + "borderWidth": 0.5, + "borderPadding": 6 + }], + ["pygments-n" , {"parent": "code"}], + ["pygments-nx" , {"parent": "code"}], + ["pygments-p" , {"parent": "code"}], + ["pygments-hll", {"parent": "code", "backColor": "#ffffcc"}], + ["pygments-c", {"textColor": "#008800", "parent": "code"}], + ["pygments-err", {"parent": "code"}], + ["pygments-k", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-o", {"textColor": "#666666", "parent": "code"}], + ["pygments-cm", {"textColor": "#008800", "parent": "code"}], + ["pygments-cp", {"textColor": "#008800", "parent": "code"}], + ["pygments-c1", {"textColor": "#008800", "parent": "code"}], + ["pygments-cs", {"textColor": "#008800", "parent": "code"}], + ["pygments-gd", {"textColor": "#A00000", "parent": "code"}], + ["pygments-ge", {"parent": "code"}], + ["pygments-gr", {"textColor": "#FF0000", "parent": "code"}], + ["pygments-gh", {"textColor": "#000080", "parent": "code"}], + ["pygments-gi", {"textColor": "#00A000", "parent": "code"}], + ["pygments-go", {"textColor": "#808080", "parent": "code"}], + ["pygments-gp", {"textColor": "#000080", "parent": "code"}], + ["pygments-gs", {"parent": "code"}], + ["pygments-gu", {"textColor": "#800080", "parent": "code"}], + ["pygments-gt", {"textColor": "#0040D0", "parent": "code"}], + ["pygments-kc", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-kd", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-kn", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-kp", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-kr", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-kt", {"textColor": "#00BB00", "parent": "code"}], + ["pygments-m", {"textColor": "#666666", "parent": "code"}], + ["pygments-s", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-na", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-nb", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-nc", {"textColor": "#0000FF", "parent": "code"}], + ["pygments-no", {"textColor": "#880000", "parent": "code"}], + ["pygments-nd", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-ni", {"textColor": "#999999", "parent": "code"}], + ["pygments-ne", {"textColor": "#D2413A", "parent": "code"}], + ["pygments-nf", {"textColor": "#00A000", "parent": "code"}], + ["pygments-nl", {"textColor": "#A0A000", "parent": "code"}], + ["pygments-nn", {"textColor": "#0000FF", "parent": "code"}], + ["pygments-nt", {"textColor": "#008000", "parent": "code"}], + ["pygments-nv", {"textColor": "#B8860B", "parent": "code"}], + ["pygments-ow", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-w", {"textColor": "#bbbbbb", "parent": "code"}], + ["pygments-mf", {"textColor": "#666666", "parent": "code"}], + ["pygments-mh", {"textColor": "#666666", "parent": "code"}], + ["pygments-mi", {"textColor": "#666666", "parent": "code"}], + ["pygments-mo", {"textColor": "#666666", "parent": "code"}], + ["pygments-sb", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-sc", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-sd", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-s2", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-se", {"textColor": "#BB6622", "parent": "code"}], + ["pygments-sh", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-si", {"textColor": "#BB6688", "parent": "code"}], + ["pygments-sx", {"textColor": "#008000", "parent": "code"}], + ["pygments-sr", {"textColor": "#BB6688", "parent": "code"}], + ["pygments-s1", {"textColor": "#BB4444", "parent": "code"}], + ["pygments-ss", {"textColor": "#B8860B", "parent": "code"}], + ["pygments-bp", {"textColor": "#AA22FF", "parent": "code"}], + ["pygments-vc", {"textColor": "#B8860B", "parent": "code"}], + ["pygments-vg", {"textColor": "#B8860B", "parent": "code"}], + ["pygments-vi", {"textColor": "#B8860B", "parent": "code"}], + ["pygments-il", {"textColor": "#666666", "parent": "code"}], + + ["item_list", { + "parent": "bodytext", + "spaceBefore": 0, + "commands": [ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ], + [ "RIGHTPADDING", [ 0, 0 ], [ 1, -1 ], 0 ] + ], + "colWidths": ["20pt",null] + }], + ["bullet_list", { + "parent": "bodytext", + "spaceBefore": 0, + "commands": [ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ], + [ "RIGHTPADDING", [ 0, 0 ], [ 1, -1 ], 0 ] + ], + "colWidths": ["20",null] + }], + [ "endnote", { + "parent": "bodytext", + "commands": [ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ], + [ "TOPPADDING", [ 0, 0 ], [ -1, -1 ], 0 ], + [ "BOTTOMPADDING", [ 0, 0 ], [ -1, -1 ], 0 ], + [ "RIGHTPADDING", [ 0, 0 ], [ 1, -1 ], 0 ] + ], + "colWidths": ["3cm",null] + }], + [ "field_list", { + "parent": "bodytext", + "commands": [ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ], + [ "TOPPADDING", [ 0, 0 ], [ -1, -1 ], 0 ] + ], + "colWidths": ["3cm",null], + "spaceBefore": 6 + }], + [ "option_list", { + "commands": [ + [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ], + [ "TOPPADDING", [ 0, 0 ], [ -1, -1 ], 0 ] + ], + "colWidths": [null,null] + }] + ] +} + diff --git a/doc/v1.html b/doc/v1.html new file mode 100644 --- /dev/null +++ b/doc/v1.html @@ -0,0 +1,469 @@ + + + + + + +The Virtual Leaf + + + +
+###Title### +
+
+
+

The Virtual Leaf

+ +
+

Friday 11 June 2010

+

Issues:

+
+
    +
  1. Every class that has an association or composition eventually will +need its own custom view page template, e.g. sed_view. For the moment +I have set the default view for these classes to dev_view ( a copy of +base_view ).

    +
  2. +
  3. An association in UML is cast as a ReferenceField in the resulting +class schema. Open the association and add the widget:label tag to +the class that is being associated.

    +
  4. +
  5. The default description text for a class should be a informative +description of the class, not the instance, derived from the +SED-ML manual.

    +
  6. +
  7. Apply 'searchable' tags to the appropriate class attributes.

    +
  8. +
  9. I choose 'isTidyHtmlWithCleanup' as the MathML validator. Will +this work?

    +
  10. +
  11. What should be added to our implementation of SED-ML to make it +more than merely a mirror image of the SED-ML XML format?

    +
    +
      +
    1. The ability to attach files at various points, e.g. parameter files.
    2. +
    3. Additional output types, e.g. animations.
    4. +
    5. Custom page templates
    6. +
    7. Custom search form
    8. +
    9. Custom catalog indexes
    10. +
    11. Custom portlet(s)
    12. +
    13. Custom viewlet(s)
    14. +
    +
    +
  12. +
+
+
+
+

Friday 24 September 2010

+
+
To Do:
+
    +
  1. Publish our mercurial repositories (Chris/Martin). This may mesh with deploying Plone.
  2. +
  3. Create a vleaf mailing list (Henk).
  4. +
+
+
+

Found an article on SBRML - a markup language for associating systems +biology data with models. At a glance the schema seems bigger than +SED-ML's, but SBRML appears to be SBML specific.

+
+
+

Monday 27 September 2010

+

Spoke with Chris about publishing the Mercurial repositories and +deploying Plone. Both can be accomplished in their own project space +on a server in the DMZ. Chris said he would supply me with login +credentials for both accounts. I will install Plone and Chris (or +Maarten) will help me configure Apache/nginx and Varnish. Chris will +install the required Mercurial packages; after which I can clone the +repositories to their new home.

+
+
+

Tuesday 5 October 20010

+
+

tutorial0.pro

+

Added simplugin.h to list of header files. NB: this is the only +tutorial in which simplugin.h appears.

+
+
+

auxingrowthplugin.h

+

Declared, and defined, a virtual function named DefaultLeafML() +which merely returns a QString naming a LeafML filename sans path.

+
+
+

VirtualLeaf.cpp

+

Moved Cell::SetMagnification() and Cell::SetOffset() from +main() to MainBase::Init().

+
+
+

canvas.h

+

Declare exportCellData().

+
+
+

canvas.cpp

+

Add an 'Export cell areas' to the file dropdown menu which invokes - surprise - Main::exportCellData():

+
+void Main::exportCellData(void) {
+  QFile file("areas.csv");
+  if ( file.open( IO_WriteOnly ) ) {
+    QTextStream stream( &file );
+    mesh.CSVExportCellData(stream);
+    mesh.CSVExportMeshData(stream);
+    file.close();
+  }
+}
+
+
+
+

mesh.h

+

Include <QTextStream>

+

Set the boundary_poloygon pointer to zero in the class constructor, +and delete it, if it exists, in the class destructor.

+

Declare Compactness(), CSVExportCellData() and CSVExportMeshData():

+
+double Compactness(double *res_compactness=0, double *res_area=0, double *res_cell_area=0);
+void CSVExportCellData(QTextStream &csv_stream) const;
+void CSVExportMeshData(QTextStream &csv_stream);
+
+
+
+

mesh.cpp

+

In mesh::clear(), delete the boundary_polygon only if the pointer hasn't been assigned:

+
+if (boundary_polygon) {
+   delete boundary_polygon;
+   boundary_polygon=0;
+ }
+
+

Ditto for mesh::clean().

+

Define the code for Compactness(), CSVExportCellData() and CSVExportMeshData().

+
+
+

modelcatalogue.cpp

+

In InstallModel(), find and load the default LeafML file.

+
+
+

simplugin.h

+

Declare DefaultLeafML():

+
+// Default LeafML-file to be read after model startup
+virtual QString DefaultLeafML(void);
+
+
+
+

simplugin.cpp

+

Define DefaultLeafML(). Returns an empty QString:

+
+QString SimPluginInterface::DefaultLeafML(void) { return QString(); }
+
+
+
+

xmlwrite.cpp

+

In Mesh::XMLReadCells() - Delete the boundary_ploygon only if its +pointer has been assigned.

+
+
+
+ + + diff --git a/doc/v1.pdf b/doc/v1.pdf new file mode 100644 --- /dev/null +++ b/doc/v1.pdf @@ -0,0 +1,1229 @@ +%PDF-1.3 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +% 'BasicFonts': class PDFDictionary +1 0 obj +% The standard fonts dictionary +<< /F1 2 0 R + /F2 3 0 R + /F3 5 0 R >> +endobj +% 'F1': class PDFType1Font +2 0 obj +% Font Helvetica +<< /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font >> +endobj +% 'F2': class PDFType1Font +3 0 obj +% Font Helvetica-Bold +<< /BaseFont /Helvetica-Bold + /Encoding /WinAnsiEncoding + /Name /F2 + /Subtype /Type1 + /Type /Font >> +endobj +% 'Page1': class PDFPage +4 0 obj +% Page dictionary +<< /Contents 27 0 R + /MediaBox [ 0 + 0 + 595.2756 + 841.8898 ] + /Parent 26 0 R + /Resources << /Font 1 0 R + /ProcSet [ /PDF + /Text + /ImageB + /ImageC + /ImageI ] >> + /Rotate 0 + /Trans << >> + /Type /Page >> +endobj +% 'F3': class PDFType1Font +5 0 obj +% Font Courier +<< /BaseFont /Courier + /Encoding /WinAnsiEncoding + /Name /F3 + /Subtype /Type1 + /Type /Font >> +endobj +% 'Page2': class PDFPage +6 0 obj +% Page dictionary +<< /Contents 28 0 R + /MediaBox [ 0 + 0 + 595.2756 + 841.8898 ] + /Parent 26 0 R + /Resources << /Font 1 0 R + /ProcSet [ /PDF + /Text + /ImageB + /ImageC + /ImageI ] >> + /Rotate 0 + /Trans << >> + /Type /Page >> +endobj +% 'Page3': class PDFPage +7 0 obj +% Page dictionary +<< /Contents 29 0 R + /MediaBox [ 0 + 0 + 595.2756 + 841.8898 ] + /Parent 26 0 R + /Resources << /Font 1 0 R + /ProcSet [ /PDF + /Text + /ImageB + /ImageC + /ImageI ] >> + /Rotate 0 + /Trans << >> + /Type /Page >> +endobj +% 'R8': class PDFCatalog +8 0 obj +% Document Root +<< /Outlines 10 0 R + /PageLabels 30 0 R + /PageMode /UseNone + /Pages 26 0 R + /Type /Catalog >> +endobj +% 'R9': class PDFInfo +9 0 obj +<< /Author () + /CreationDate (D:20101005155533-01'00') + /Keywords () + /Producer (ReportLab http://www.reportlab.com) + /Subject (\(unspecified\)) + /Title (The Virtual Leaf) >> +endobj +% 'R10': class PDFOutlines +10 0 obj +<< /Count 16 + /First 11 0 R + /Last 14 0 R + /Type /Outlines >> +endobj +% 'Outline.0': class OutlineEntryObject +11 0 obj +<< /Dest [ 4 0 R + /XYZ + 62.69291 + 717.0236 + 0 ] + /Next 12 0 R + /Parent 10 0 R + /Title (Friday 11 June 2010) >> +endobj +% 'Outline.1': class OutlineEntryObject +12 0 obj +<< /Dest [ 4 0 R + /XYZ + 62.69291 + 393.0236 + 0 ] + /Next 13 0 R + /Parent 10 0 R + /Prev 11 0 R + /Title (Friday 24 September 2010) >> +endobj +% 'Outline.2': class OutlineEntryObject +13 0 obj +<< /Dest [ 4 0 R + /XYZ + 62.69291 + 273.0236 + 0 ] + /Next 14 0 R + /Parent 10 0 R + /Prev 12 0 R + /Title (Monday 27 September 2010) >> +endobj +% 'Outline.3': class OutlineEntryObject +14 0 obj +<< /Count 11 + /Dest [ 4 0 R + /XYZ + 62.69291 + 174.0236 + 0 ] + /First 15 0 R + /Last 25 0 R + /Parent 10 0 R + /Prev 13 0 R + /Title (Tuesday 5 October 20010) >> +endobj +% 'Outline.16.0': class OutlineEntryObject +15 0 obj +<< /Dest [ 4 0 R + /XYZ + 62.69291 + 141.0236 + 0 ] + /Next 16 0 R + /Parent 14 0 R + /Title (tutorial0.pro) >> +endobj +% 'Outline.16.1': class OutlineEntryObject +16 0 obj +<< /Dest [ 6 0 R + /XYZ + 62.69291 + 753.0236 + 0 ] + /Next 17 0 R + /Parent 14 0 R + /Prev 15 0 R + /Title (auxingrowthplugin.h) >> +endobj +% 'Outline.16.2': class OutlineEntryObject +17 0 obj +<< /Dest [ 6 0 R + /XYZ + 62.69291 + 693.0236 + 0 ] + /Next 18 0 R + /Parent 14 0 R + /Prev 16 0 R + /Title (VirtualLeaf.cpp) >> +endobj +% 'Outline.16.3': class OutlineEntryObject +18 0 obj +<< /Dest [ 6 0 R + /XYZ + 62.69291 + 633.0236 + 0 ] + /Next 19 0 R + /Parent 14 0 R + /Prev 17 0 R + /Title (canvas.h) >> +endobj +% 'Outline.16.4': class OutlineEntryObject +19 0 obj +<< /Dest [ 6 0 R + /XYZ + 62.69291 + 585.0236 + 0 ] + /Next 20 0 R + /Parent 14 0 R + /Prev 18 0 R + /Title (canvas.cpp) >> +endobj +% 'Outline.16.5': class OutlineEntryObject +20 0 obj +<< /Dest [ 6 0 R + /XYZ + 62.69291 + 395.8236 + 0 ] + /Next 21 0 R + /Parent 14 0 R + /Prev 19 0 R + /Title (mesh.h) >> +endobj +% 'Outline.16.6': class OutlineEntryObject +21 0 obj +<< /Dest [ 6 0 R + /XYZ + 62.69291 + 250.4814 + 0 ] + /Next 22 0 R + /Parent 14 0 R + /Prev 20 0 R + /Title (mesh.cpp) >> +endobj +% 'Outline.16.7': class OutlineEntryObject +22 0 obj +<< /Dest [ 7 0 R + /XYZ + 62.69291 + 753.0236 + 0 ] + /Next 23 0 R + /Parent 14 0 R + /Prev 21 0 R + /Title (modelcatalogue.cpp) >> +endobj +% 'Outline.16.8': class OutlineEntryObject +23 0 obj +<< /Dest [ 7 0 R + /XYZ + 62.69291 + 705.0236 + 0 ] + /Next 24 0 R + /Parent 14 0 R + /Prev 22 0 R + /Title (simplugin.h) >> +endobj +% 'Outline.16.9': class OutlineEntryObject +24 0 obj +<< /Dest [ 7 0 R + /XYZ + 62.69291 + 611.8236 + 0 ] + /Next 25 0 R + /Parent 14 0 R + /Prev 23 0 R + /Title (simplugin.cpp) >> +endobj +% 'Outline.16.10': class OutlineEntryObject +25 0 obj +<< /Dest [ 7 0 R + /XYZ + 62.69291 + 530.6236 + 0 ] + /Parent 14 0 R + /Prev 24 0 R + /Title (xmlwrite.cpp) >> +endobj +% 'R26': class PDFPages +26 0 obj +% page tree +<< /Count 3 + /Kids [ 4 0 R + 6 0 R + 7 0 R ] + /Type /Pages >> +endobj +% 'R27': class PDFStream +27 0 obj +% page stream +<< /Length 8892 >> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET +q +1 0 0 1 62.69291 729.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 9.64 Tm /F2 20 Tf 24 TL (The Virtual Leaf) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 696.0236 cm +q +BT 1 0 0 1 0 8.435 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Friday 11 June 2010) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 678.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Issues:) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 672.0236 cm +Q +q +1 0 0 1 62.69291 405.0236 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +BT 1 0 0 1 0 2 Tm T* ET +q +1 0 0 1 20 267 cm +Q +q +1 0 0 1 20 267 cm +Q +q +1 0 0 1 20 225 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 27 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 28.82 Tm /F1 10 Tf 12 TL 1.55284 Tw (Every class that has an association or composition eventually will need its own custom view) Tj T* 0 Tw .83436 Tw (page template, e.g. sed_view. For the moment I have set the default view for these classes to) Tj T* 0 Tw (dev_view \( a copy of base_view \).) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 225 cm +Q +q +1 0 0 1 20 228 cm +Q +q +1 0 0 1 20 198 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 15 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 16.82 Tm /F1 10 Tf 12 TL 1.744651 Tw (An association in UML is cast as a ReferenceField in the resulting class schema. Open the) Tj T* 0 Tw (association and add the widget:label tag to the class that is being associated.) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 198 cm +Q +q +1 0 0 1 20 201 cm +Q +q +1 0 0 1 20 171 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 15 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 16.82 Tm /F1 10 Tf 12 TL .73061 Tw (The default description text for a class should be a informative description of the class, not the) Tj T* 0 Tw (instance, derived from the SED-ML manual.) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 171 cm +Q +q +1 0 0 1 20 174 cm +Q +q +1 0 0 1 20 156 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Apply 'searchable' tags to the appropriate class attributes.) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 156 cm +Q +q +1 0 0 1 20 159 cm +Q +q +1 0 0 1 20 141 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (I choose 'isTidyHtmlWithCleanup' as the MathML validator. Will this work?) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 141 cm +Q +q +1 0 0 1 20 144 cm +Q +q +1 0 0 1 20 0 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 129 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (6.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 117 cm +q +0 0 0 rg +BT 1 0 0 1 0 16.82 Tm /F1 10 Tf 12 TL .76811 Tw (What should be added to our implementation of SED-ML to make it more than merely a mirror) Tj T* 0 Tw (image of the SED-ML XML format?) Tj T* ET +Q +Q +q +1 0 0 1 23 111 cm +Q +q +1 0 0 1 23 3 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +BT 1 0 0 1 0 2 Tm T* ET +q +1 0 0 1 20 108 cm +Q +q +1 0 0 1 20 108 cm +Q +q +1 0 0 1 20 90 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (a.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (The ability to attach files at various points, e.g. parameter files.) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 90 cm +Q +q +1 0 0 1 20 93 cm +Q +q +1 0 0 1 20 75 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (b.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Additional output types, e.g. animations.) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 75 cm +Q +q +1 0 0 1 20 78 cm +Q +q +1 0 0 1 20 60 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 6.22 0 Td (c.) Tj T* -6.22 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Custom page templates) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 60 cm +Q +q +1 0 0 1 20 63 cm +Q +q +1 0 0 1 20 45 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (d.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Custom search form) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 45 cm +Q +q +1 0 0 1 20 48 cm +Q +q +1 0 0 1 20 30 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (e.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Custom catalog indexes) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 30 cm +Q +q +1 0 0 1 20 33 cm +Q +q +1 0 0 1 20 15 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 8.44 0 Td (f.) Tj T* -8.44 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Custom portlet\(s\)) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 15 cm +Q +q +1 0 0 1 20 18 cm +Q +q +1 0 0 1 20 0 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (g.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Custom viewlet\(s\)) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 20 0 cm +Q +q +1 0 0 1 20 0 cm +Q +q +Q +Q +q +1 0 0 1 23 3 cm +Q +q +Q +Q +q +1 0 0 1 20 0 cm +Q +q +1 0 0 1 20 0 cm +Q +q +Q +Q +q +1 0 0 1 62.69291 405.0236 cm +Q +q +1 0 0 1 62.69291 372.0236 cm +q +BT 1 0 0 1 0 8.435 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Friday 24 September 2010) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 315.0236 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 0 36 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F2 10 Tf 12 TL (To Do:) Tj T* ET +Q +Q +BT 1 0 0 1 0 23 Tm T* ET +q +1 0 0 1 10 33 cm +Q +q +1 0 0 1 10 33 cm +Q +q +1 0 0 1 10 15 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Publish our mercurial repositories \(Chris/Martin\). This may mesh with deploying Plone.) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 10 15 cm +Q +q +1 0 0 1 10 18 cm +Q +q +1 0 0 1 10 0 cm +0 0 0 rg +BT /F1 10 Tf 12 TL ET +q +1 0 0 1 6 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET +Q +Q +q +1 0 0 1 23 3 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Create a vleaf mailing list \(Henk\).) Tj T* ET +Q +Q +q +Q +Q +q +1 0 0 1 10 0 cm +Q +q +1 0 0 1 10 0 cm +Q +q +Q +Q +q +1 0 0 1 62.69291 285.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 16.82 Tm /F1 10 Tf 12 TL .602927 Tw (Found an article on SBRML - a markup language for associating systems biology data with models. At a) Tj T* 0 Tw (glance the schema seems bigger than SED-ML's, but SBRML appears to be SBML specific.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 252.0236 cm +q +BT 1 0 0 1 0 8.435 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Monday 27 September 2010) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 186.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 52.82 Tm /F1 10 Tf 12 TL 3.993828 Tw (Spoke with Chris about publishing the Mercurial repositories and deploying Plone. Both can be) Tj T* 0 Tw .131567 Tw (accomplished in their own project space on a server in the DMZ. Chris said he would supply me with login) Tj T* 0 Tw 3.871984 Tw (credentials for both accounts. I will install Plone and Chris \(or Maarten\) will help me configure) Tj T* 0 Tw .795318 Tw (Apache/nginx and Varnish. Chris will install the required Mercurial packages; after which I can clone the) Tj T* 0 Tw (repositories to their new home.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 153.0236 cm +q +BT 1 0 0 1 0 8.435 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Tuesday 5 October 20010) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 123.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (tutorial0.pro) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 105.0236 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL (Added simplugin.h to list of header files. NB: this is the only tutorial in which simplugin.h appears.) Tj T* ET +Q +Q +q +1 0 0 1 56.69291 773.1969 cm +q +BT 1 0 0 1 0 4.82 Tm 205.6499 0 Td 12 TL /F1 10 Tf 0 0 0 rg (The Virtual Leaf) Tj T* -205.6499 0 Td ET +Q +Q +q +1 0 0 1 56.69291 56.69291 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 238.1649 0 Td (1) Tj T* -238.1649 0 Td ET +Q +Q + +endstream + +endobj +% 'R28': class PDFStream +28 0 obj +% page stream +<< /Length 4804 >> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET +q +1 0 0 1 62.69291 735.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (auxingrowthplugin.h) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 705.0236 cm +q +BT 1 0 0 1 0 16.82 Tm 2.02498 Tw 12 TL /F1 10 Tf 0 0 0 rg (Declared, and defined, a virtual function named ) Tj /F3 10 Tf (DefaultLeafML\(\) ) Tj /F1 10 Tf (which merely returns a QString) Tj T* 0 Tw (naming a LeafML filename sans path.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 675.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (VirtualLeaf.cpp) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 645.0236 cm +q +BT 1 0 0 1 0 16.82 Tm 14.41996 Tw 12 TL /F1 10 Tf 0 0 0 rg (Moved ) Tj /F3 10 Tf (Cell::SetMagnification\(\) ) Tj /F1 10 Tf (and ) Tj /F3 10 Tf (Cell::SetOffset\(\) ) Tj /F1 10 Tf (from ) Tj /F3 10 Tf (main\(\) ) Tj /F1 10 Tf (to) Tj T* 0 Tw /F3 10 Tf (MainBase::Init\(\)) Tj /F1 10 Tf (.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 615.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (canvas.h) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 597.0236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Declare ) Tj /F3 10 Tf (exportCellData\(\)) Tj /F1 10 Tf (.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 567.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (canvas.cpp) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 537.0236 cm +q +BT 1 0 0 1 0 16.82 Tm 8.836412 Tw 12 TL /F1 10 Tf 0 0 0 rg (Add an 'Export cell areas' to the file dropdown menu which invokes - surprise -) Tj T* 0 Tw /F3 10 Tf (Main::exportCellData\(\)) Tj /F1 10 Tf (:) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 407.8236 cm +q +q +1 0 0 1 0 0 cm +q +1 0 0 1 6.6 6.6 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .862745 rg +n -6 -6 468.6898 120 re B* +Q +q +BT 1 0 0 1 0 101.71 Tm 12 TL /F3 10 Tf 0 0 0 rg (void Main::exportCellData\(void\) {) Tj T* ( QFile file\("areas.csv"\);) Tj T* ( if \( file.open\( IO_WriteOnly \) \) {) Tj T* ( QTextStream stream\( ) Tj (&) Tj (file \);) Tj T* ( mesh.CSVExportCellData\(stream\);) Tj T* ( mesh.CSVExportMeshData\(stream\);) Tj T* ( file.close\(\);) Tj T* ( }) Tj T* (}) Tj T* ET +Q +Q +Q +Q +Q +q +1 0 0 1 62.69291 377.8236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (mesh.h) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 359.8236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Include ) Tj /F3 10 Tf (<) Tj (QTextStream) Tj (>) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 329.8236 cm +q +0 0 0 rg +BT 1 0 0 1 0 16.82 Tm /F1 10 Tf 12 TL .752765 Tw (Set the boundary_poloygon pointer to zero in the class constructor, and delete it, if it exists, in the class) Tj T* 0 Tw (destructor.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 311.8236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Declare ) Tj /F3 10 Tf (Compactness\(\)) Tj /F1 10 Tf (, ) Tj /F3 10 Tf (CSVExportCellData\(\) ) Tj /F1 10 Tf (and ) Tj /F3 10 Tf (CSVExportMeshData\(\)) Tj /F1 10 Tf (:) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 262.4814 cm +q +q +.840289 0 0 .840289 0 0 cm +q +1 0 0 1 6.6 7.854438 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .862745 rg +n -6 -6 558 48 re B* +Q +q +BT 1 0 0 1 0 29.71 Tm 12 TL /F3 10 Tf 0 0 0 rg (double Compactness\(double *res_compactness=0, double *res_area=0, double *res_cell_area=0\);) Tj T* (void CSVExportCellData\(QTextStream ) Tj (&) Tj (csv_stream\) const;) Tj T* (void CSVExportMeshData\(QTextStream ) Tj (&) Tj (csv_stream\);) Tj T* ET +Q +Q +Q +Q +Q +q +1 0 0 1 62.69291 232.4814 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (mesh.cpp) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 214.4814 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (In ) Tj /F3 10 Tf (mesh::clear\(\)) Tj /F1 10 Tf (, delete the boundary_polygon only if the pointer hasn't been assigned:) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 145.2814 cm +q +q +1 0 0 1 0 0 cm +q +1 0 0 1 6.6 6.6 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .862745 rg +n -6 -6 468.6898 60 re B* +Q +q +0 0 0 rg +BT 1 0 0 1 0 41.71 Tm /F3 10 Tf 12 TL (if \(boundary_polygon\) {) Tj T* ( delete boundary_polygon;) Tj T* ( boundary_polygon=0;) Tj T* ( }) Tj T* ET +Q +Q +Q +Q +Q +q +1 0 0 1 62.69291 125.2814 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Ditto for ) Tj /F3 10 Tf (mesh::clean\(\)) Tj /F1 10 Tf (.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 107.2814 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Define the code for ) Tj /F3 10 Tf (Compactness\(\)) Tj /F1 10 Tf (, ) Tj /F3 10 Tf (CSVExportCellData\(\) ) Tj /F1 10 Tf (and ) Tj /F3 10 Tf (CSVExportMeshData\(\)) Tj /F1 10 Tf (.) Tj T* ET +Q +Q +q +1 0 0 1 56.69291 773.1969 cm +q +BT 1 0 0 1 0 4.82 Tm 205.6499 0 Td 12 TL /F1 10 Tf 0 0 0 rg (The Virtual Leaf) Tj T* -205.6499 0 Td ET +Q +Q +q +1 0 0 1 56.69291 56.69291 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 238.1649 0 Td (2) Tj T* -238.1649 0 Td ET +Q +Q + +endstream + +endobj +% 'R29': class PDFStream +29 0 obj +% page stream +<< /Length 2249 >> +stream +1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET +q +1 0 0 1 62.69291 735.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (modelcatalogue.cpp) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 717.0236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (In ) Tj /F3 10 Tf (InstallModel\(\)) Tj /F1 10 Tf (, find and load the default LeafML file.) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 687.0236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (simplugin.h) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 669.0236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Declare ) Tj /F3 10 Tf (DefaultLeafML\(\)) Tj /F1 10 Tf (:) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 623.8236 cm +q +q +1 0 0 1 0 0 cm +q +1 0 0 1 6.6 6.6 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .862745 rg +n -6 -6 468.6898 36 re B* +Q +q +0 0 0 rg +BT 1 0 0 1 0 17.71 Tm /F3 10 Tf 12 TL (// Default LeafML-file to be read after model startup) Tj T* (virtual QString DefaultLeafML\(void\);) Tj T* ET +Q +Q +Q +Q +Q +q +1 0 0 1 62.69291 593.8236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (simplugin.cpp) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 575.8236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (Define ) Tj /F3 10 Tf (DefaultLeafML\(\)) Tj /F1 10 Tf (. Returns an empty ) Tj /F3 10 Tf (QString) Tj /F1 10 Tf (:) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 542.6236 cm +q +q +1 0 0 1 0 0 cm +q +1 0 0 1 6.6 6.6 cm +q +.662745 .662745 .662745 RG +.5 w +.960784 .960784 .862745 rg +n -6 -6 468.6898 24 re B* +Q +q +0 0 0 rg +BT 1 0 0 1 0 5.71 Tm /F3 10 Tf 12 TL (QString SimPluginInterface::DefaultLeafML\(void\) { return QString\(\); }) Tj T* ET +Q +Q +Q +Q +Q +q +1 0 0 1 62.69291 512.6236 cm +q +BT 1 0 0 1 0 7.23 Tm 18 TL /F2 15 Tf 0 0 0 rg (xmlwrite.cpp) Tj T* ET +Q +Q +q +1 0 0 1 62.69291 494.6236 cm +q +BT 1 0 0 1 0 4.82 Tm 12 TL /F1 10 Tf 0 0 0 rg (In ) Tj /F3 10 Tf (Mesh::XMLReadCells\(\) ) Tj /F1 10 Tf (- Delete the boundary_ploygon only if its pointer has been assigned.) Tj T* ET +Q +Q +q +1 0 0 1 56.69291 773.1969 cm +q +BT 1 0 0 1 0 4.82 Tm 205.6499 0 Td 12 TL /F1 10 Tf 0 0 0 rg (The Virtual Leaf) Tj T* -205.6499 0 Td ET +Q +Q +q +1 0 0 1 56.69291 56.69291 cm +q +0 0 0 rg +BT 1 0 0 1 0 4.82 Tm /F1 10 Tf 12 TL 238.1649 0 Td (3) Tj T* -238.1649 0 Td ET +Q +Q + +endstream + +endobj +% 'R30': class PDFPageLabels +30 0 obj +% Document Root +<< /Nums [ 0 + 31 0 R + 1 + 32 0 R + 2 + 33 0 R ] >> +endobj +% 'R31': class PDFPageLabel +31 0 obj +% None +<< /S /D + /St 1 >> +endobj +% 'R32': class PDFPageLabel +32 0 obj +% None +<< /S /D + /St 2 >> +endobj +% 'R33': class PDFPageLabel +33 0 obj +% None +<< /S /D + /St 3 >> +endobj +xref +0 34 +0000000000 65535 f +0000000113 00000 n +0000000233 00000 n +0000000398 00000 n +0000000571 00000 n +0000000852 00000 n +0000001011 00000 n +0000001290 00000 n +0000001569 00000 n +0000001726 00000 n +0000001953 00000 n +0000002079 00000 n +0000002258 00000 n +0000002457 00000 n +0000002656 00000 n +0000002885 00000 n +0000003061 00000 n +0000003258 00000 n +0000003451 00000 n +0000003637 00000 n +0000003825 00000 n +0000004009 00000 n +0000004195 00000 n +0000004391 00000 n +0000004580 00000 n +0000004772 00000 n +0000004928 00000 n +0000005051 00000 n +0000014044 00000 n +0000018949 00000 n +0000021303 00000 n +0000021422 00000 n +0000021499 00000 n +0000021576 00000 n +trailer +<< /ID + % ReportLab generated PDF document -- digest (http://www.reportlab.com) + [(\024,\377\262\237\332\204L\232\207%\364ho\271\264) (\024,\377\262\237\332\204L\232\207%\364ho\271\264)] + + /Info 9 0 R + /Root 8 0 R + /Size 34 >> +startxref +21623 +%%EOF diff --git a/doc/v1.rst b/doc/v1.rst new file mode 100644 --- /dev/null +++ b/doc/v1.rst @@ -0,0 +1,200 @@ +.. header:: + ###Title### + +.. footer:: + ###Page### + + +================ +The Virtual Leaf +================ + + +Friday 11 June 2010 +------------------- + +Issues: + + 1. Every class that has an association or composition eventually will + need its own custom view page template, e.g. sed_view. For the moment + I have set the default view for these classes to dev_view ( a copy of + base_view ). + + 2. An association in UML is cast as a ReferenceField in the resulting + class schema. Open the association and add the widget:label tag to + the class that is being associated. + + 3. The default description text for a class should be a informative + description of the class, not the instance, derived from the + SED-ML manual. + + 4. Apply 'searchable' tags to the appropriate class attributes. + + 5. I choose 'isTidyHtmlWithCleanup' as the MathML validator. Will + this work? + + 6. What should be added to our implementation of SED-ML to make it + more than merely a mirror image of the SED-ML XML format? + + a. The ability to attach files at various points, e.g. parameter files. + + b. Additional output types, e.g. animations. + + c. Custom page templates + + d. Custom search form + + e. Custom catalog indexes + + f. Custom portlet(s) + + g. Custom viewlet(s) + + +Friday 24 September 2010 +------------------------ + +To Do: + 1. Publish our mercurial repositories (Chris/Martin). This may mesh with deploying Plone. + + 2. Create a vleaf mailing list (Henk). + +Found an article on SBRML - a markup language for associating systems +biology data with models. At a glance the schema seems bigger than +SED-ML's, but SBRML appears to be SBML specific. + + + +Monday 27 September 2010 +------------------------ + +Spoke with Chris about publishing the Mercurial repositories and +deploying Plone. Both can be accomplished in their own project space +on a server in the DMZ. Chris said he would supply me with login +credentials for both accounts. I will install Plone and Chris (or +Maarten) will help me configure Apache/nginx and Varnish. Chris will +install the required Mercurial packages; after which I can clone the +repositories to their new home. + + + +Tuesday 5 October 20010 +----------------------- + + +tutorial0.pro ++++++++++++++ + +Added simplugin.h to list of header files. NB: this is the only +tutorial in which simplugin.h appears. + + +auxingrowthplugin.h ++++++++++++++++++++ + +Declared, and defined, a virtual function named ``DefaultLeafML()`` +which merely returns a QString naming a LeafML filename sans path. + + + +VirtualLeaf.cpp ++++++++++++++++ + +Moved ``Cell::SetMagnification()`` and ``Cell::SetOffset()`` from +``main()`` to ``MainBase::Init()``. + + +canvas.h +++++++++ + +Declare ``exportCellData()``. + + +canvas.cpp +++++++++++ + +Add an 'Export cell areas' to the file dropdown menu which invokes - surprise - ``Main::exportCellData()``:: + + void Main::exportCellData(void) { + QFile file("areas.csv"); + if ( file.open( IO_WriteOnly ) ) { + QTextStream stream( &file ); + mesh.CSVExportCellData(stream); + mesh.CSVExportMeshData(stream); + file.close(); + } + } + + +mesh.h +++++++ + +Include ```` + +Set the boundary_poloygon pointer to zero in the class constructor, +and delete it, if it exists, in the class destructor. + +Declare ``Compactness()``, ``CSVExportCellData()`` and ``CSVExportMeshData()``:: + + double Compactness(double *res_compactness=0, double *res_area=0, double *res_cell_area=0); + void CSVExportCellData(QTextStream &csv_stream) const; + void CSVExportMeshData(QTextStream &csv_stream); + + +mesh.cpp +++++++++ + +In ``mesh::clear()``, delete the boundary_polygon only if the pointer hasn't been assigned:: + + if (boundary_polygon) { + delete boundary_polygon; + boundary_polygon=0; + } + +Ditto for ``mesh::clean()``. + +Define the code for ``Compactness()``, ``CSVExportCellData()`` and ``CSVExportMeshData()``. + + + +modelcatalogue.cpp +++++++++++++++++++ + +In ``InstallModel()``, find and load the default LeafML file. + +simplugin.h ++++++++++++ + +Declare ``DefaultLeafML()``:: + + // Default LeafML-file to be read after model startup + virtual QString DefaultLeafML(void); + + +simplugin.cpp ++++++++++++++ + +Define ``DefaultLeafML()``. Returns an empty ``QString``:: + + QString SimPluginInterface::DefaultLeafML(void) { return QString(); } + + +xmlwrite.cpp +++++++++++++ + +In ``Mesh::XMLReadCells()`` - Delete the boundary_ploygon only if its +pointer has been assigned. + + + +Wednesday 6 October 2010 +------------------------ + +Wrote Simon van Mourik about his missing libiconv-2.dll. + + +Thursday 7 October 2010 +----------------------- + +Added a Q3FileDialog in ``canvas.cpp:Main::exportCellData(void)`` to +choose where to write the exported cell data. diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-10-07 + + * canvas.cpp (exportCellData): Added a Q3FileDialog to inquire + where to write the exportCellData. + 2010-06-28 diff --git a/src/canvas.cpp b/src/canvas.cpp --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1367,17 +1367,32 @@ xmlNode *Main::XMLSettingsTree(void) } void Main::exportCellData(void) { + Q3FileDialog *fd = new Q3FileDialog( this, "file dialog", TRUE ); + QString fileName; + + stopSimulation(); + fd->setMode( Q3FileDialog::AnyFile ); + + if ( fd->exec() == QDialog::Accepted ) { + fileName = fd->selectedFile(); + +#ifdef QDEBUG + qDebug() << "exportCellData filename: " << fileName << endl; +#endif // perhaps make this more general: a popup window were user selects data he wants to export // can go to "settings" section of XML file as well so this can also be measured off-line // mesh.CSVExport would take an QMap or so to record all options // first line gives legenda - QFile file("areas.csv"); - if ( file.open( IO_WriteOnly ) ) { - QTextStream stream( &file ); - mesh.CSVExportCellData(stream); - mesh.CSVExportMeshData(stream); - file.close(); + + QFile file(fileName); + if ( file.open( IO_WriteOnly ) ) { + QTextStream stream( &file ); + mesh.CSVExportCellData(stream); + mesh.CSVExportMeshData(stream); + file.close(); + } } } + /* finis */ diff --git a/src/leaficon.png b/src/leaficon.png new file mode 100644 index 0000000000000000000000000000000000000000..2888ad4b61a96a5360bc03aec6d22bd92a3fb7d0 GIT binary patch literal 30860 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 UFpD@3z5_s{#O1_*BKrRS1I?DOYybcN