Skip to content

Commit 91ead6b

Browse files
author
Stephanie Reeder
authored
Merge pull request #300 from ODM2/Beta_1.2.8
Beta 1.2.8
2 parents d18d441 + ce2851f commit 91ead6b

26 files changed

+1352
-173
lines changed

ODMTools.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
import pyodbc
2222
import pymysql
23-
import psycopg2
23+
#import psycopg2
24+
2425

2526
tool = LoggerTool()
2627
logger = tool.setupLogger('main', 'odmtools.log', 'a', logging.INFO)

README.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,44 @@ If you want to try ODM Tools, we have created a couple of [testing databases](ht
1111

1212
##ODM Compatibility
1313

14-
ODM Tools Python is currenlty fully compatible with ODM Version 1.1.1. We are working on ODM2 compatibility, and should have it worked out this summer.
14+
ODM Tools Python is currenlty fully compatible with ODM Version 1.1.1. We are working on ODM2 compatibility, and should have it worked out this winter.
1515

1616
##Releases
1717

1818
To make running ODMTools easier we have included installers. Please select the one that is appropriate for your operating system
1919

2020
####Windows
2121
Recommended Release:
22-
+ [Window v1.2.5-beta](https://github.com/ODM2/ODMToolsPython/releases/download/v1.2.5_beta/ODMTools_1.2.5_Beta_Win_Installer.exe)
22+
+ [Window v1.2.8-beta](https://github.com/ODM2/ODMToolsPython/releases/download/v1.2.8_beta/ODMTools_1.2.8_Beta_Win_Installer.exe)
2323

2424
####Mac
25-
+ [Mac v1.2.5-beta](https://github.com/ODM2/ODMToolsPython/releases/download/v1.2.5_beta/ODMTools_v1.2.5-beta_Mac_installer.pkg.zip)
25+
+ [Mac v1.2.8-beta](https://github.com/ODM2/ODMToolsPython/releases/download/v1.2.8_beta/ODMTools_v1.2.8-beta_Mac_installer.pkg.zip)
2626

2727
####Linux
2828
+ *Please run from source*
2929

3030
Running From Source
3131
-------------------
3232

33-
+ [Matplotlib-1.4.3](https://github.com/matplotlib/matplotlib/releases/tag/v1.4.3)
34-
+ [Pandas-0.16.0](https://github.com/pydata/pandas/releases)
33+
+ [Matplotlib](https://github.com/matplotlib/matplotlib/releases/)
34+
+ [Pandas](https://github.com/pydata/pandas/releases)
3535
+ [Pip](http://docs.python-guide.org/en/latest/starting/install/win.html)
3636
+ [PyMySQL](https://github.com/petehunt/PyMySQL/)
37-
+ [Pyodbc-3.0.7](https://code.google.com/p/pyodbc/downloads/detail?name=pyodbc-3.0.7.win-amd64-py2.7.exe)
37+
+ [Pyodbc](https://code.google.com/p/pyodbc/downloads/)
3838
+ [Python-2.7.9 x64/x32](http://www.python.org/download/releases/2.7.9/) (Python 3 version isn't available)
39-
+ [Psycopg2-2.4.6](http://initd.org/psycopg/docs/install.html)
40-
+ [Sqlalchemy-1.0.0] (http://pypi.python.org/pypi/SQLAlchemy/1.0.0)
41-
+ [wxpython-3.0.0](http://www.wxpython.org/download.php)
39+
+ [Psycopg2](http://initd.org/psycopg/docs/install.html)
40+
+ [Sqlalchemy] (http://pypi.python.org/pypi/SQLAlchemy/)
41+
+ [wxpython](http://www.wxpython.org/download.php)
42+
+ [Numpy](http://www.scipy.org/scipylib/download.html)
43+
+ [Scipy](https://www.scipy.org/scipylib/download.html)
4244

4345
Install the following software/libraries.
4446
It is recommended to create an environment using 'Conda'.
4547
'Conda' comes prepackaged in the Python Scientific Package Suite [Anaconda](http://continuum.io/downloads) (Available for Windows, OSX, Linux)
4648

4749
Example environment creation:
4850

49-
+ conda create -n odmtools python=2.7.8 wxpython matplotlib pandas pyodbc sqlalchemy pip psycopg2
51+
+ conda create -n odmtools python=2.7.8 wxpython matplotlib pandas numpy scipy pyodbc sqlalchemy pip psycopg2
5052

5153
+ pip install pymysql
5254

doc/developer_docs/source/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@
5555
# built documents.
5656
#
5757
# The short X.Y version.
58-
version = 'beta-v1.2.0'
58+
version = '1.2.8'
5959
# The full version, including alpha/beta/rc tags.
60-
release = 'beta-v1.2.0'
60+
release = 'beta-v1.2.8'
6161

6262
# The language for content autogenerated by Sphinx. Refer to documentation
6363
# for a list of supported languages.

doc/wxFormBuilder/frmFillGaps.fbp

Lines changed: 756 additions & 0 deletions
Large diffs are not rendered by default.

odmtools/common/icons/icons.py

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44
from wx.lib.embeddedimage import PyEmbeddedImage
55

6+
67
_3d_graph = PyEmbeddedImage(
78
"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGw0lEQVR42sXXe1BU1xkA8O8+"
89
"dveyPHZl7/JYApEQBDEaJQ9nSBEEY1JHbR5a09ExaceQ1kg61aZD9A8ztpnptJPQaGKIcaJt"
@@ -1719,3 +1720,154 @@
17191720
"hNvlcPw3vJ+CK10wus5FVgFzXZAG+AOAKNxEU+FoqQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAx"
17201721
"MC0wMi0xMVQxNTowMTo0MC0wNjowMD+ZiIwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMDQtMDEt"
17211722
"MThUMTQ6MjU6MTQtMDY6MDDHhSvaAAAAAElFTkSuQmCC")
1723+
1724+
magicwand =PyEmbeddedImage(
1725+
"iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAAEgBckRAAAAGXRFWHRTb2Z0d2FyZQBBZG9i"
1726+
"ZSBJbWFnZVJlYWR5ccllPAAADZBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tl"
1727+
"dCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1l"
1728+
"dGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQu"
1729+
"Mi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjA1OjQxICAgICAgICAiPgogPHJk"
1730+
"ZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50"
1731+
"YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9"
1732+
"Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wUmlnaHRz"
1733+
"PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIKICAgIHhtbG5zOnBob3Rv"
1734+
"c2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOklw"
1735+
"dGM0eG1wQ29yZT0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcENvcmUvMS4wL3htbG5z"
1736+
"LyIKICAgeG1wUmlnaHRzOldlYlN0YXRlbWVudD0iaHR0cDovL2Jsb2cuYWRkaWN0ZWR0b2Nv"
1737+
"ZmZlZS5kZSIKICAgcGhvdG9zaG9wOkF1dGhvcnNQb3NpdGlvbj0iIj4KICAgPGRjOnJpZ2h0"
1738+
"cz4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+wqkg"
1739+
"ICAgICAgICAgICYjeEE7IDIwMDkgYnkgT2xpdmVyIFR3YXJkb3dza2k8L3JkZjpsaT4KICAg"
1740+
"IDwvcmRmOkFsdD4KICAgPC9kYzpyaWdodHM+CiAgIDxkYzpjcmVhdG9yPgogICAgPHJkZjpT"
1741+
"ZXE+CiAgICAgPHJkZjpsaT5PbGl2ZXIgVHdhcmRvd3NraTwvcmRmOmxpPgogICAgPC9yZGY6"
1742+
"U2VxPgogICA8L2RjOmNyZWF0b3I+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAg"
1743+
"IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCIvPgogICAgPC9yZGY6QWx0PgogICA8L2Rj"
1744+
"OnRpdGxlPgogICA8eG1wUmlnaHRzOlVzYWdlVGVybXM+CiAgICA8cmRmOkFsdD4KICAgICA8"
1745+
"cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiLz4KICAgIDwvcmRmOkFsdD4KICAgPC94bXBS"
1746+
"aWdodHM6VXNhZ2VUZXJtcz4KICAgPElwdGM0eG1wQ29yZTpDcmVhdG9yQ29udGFjdEluZm8K"
1747+
"ICAgIElwdGM0eG1wQ29yZTpDaUFkckV4dGFkcj0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRy"
1748+
"Q2l0eT0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyUmVnaW9uPSIiCiAgICBJcHRjNHhtcENv"
1749+
"cmU6Q2lBZHJQY29kZT0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyQ3RyeT0iIgogICAgSXB0"
1750+
"YzR4bXBDb3JlOkNpVGVsV29yaz0iIgogICAgSXB0YzR4bXBDb3JlOkNpRW1haWxXb3JrPSIi"
1751+
"CiAgICBJcHRjNHhtcENvcmU6Q2lVcmxXb3JrPSIiLz4KICA8L3JkZjpEZXNjcmlwdGlvbj4K"
1752+
"IDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1753+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1754+
"ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1755+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1756+
"ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1757+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1758+
"ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1759+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg"
1760+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1761+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg"
1762+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1763+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg"
1764+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1765+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg"
1766+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1767+
"ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1768+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1769+
"ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1770+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1771+
"ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1772+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1773+
"IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1774+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg"
1775+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1776+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg"
1777+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1778+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg"
1779+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1780+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg"
1781+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1782+
"ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1783+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1784+
"ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1785+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1786+
"ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1787+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK"
1788+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"
1789+
"ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg"
1790+
"ICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PgiL5zQAABEdSURBVHja"
1791+
"Yvj//z8DCt7PwPr/LwMjCwMUPGaUZhB2fifHvCSor+is/g+4ykcMUkwvRFSqv3z58v/35Xtv"
1792+
"UIyZ2D/hP8Ms772lKT5CcMGGhob/IJphgjkjEDOABbOzs/+jOwIggFBd9J+B8f9NoKuQJYCW"
1793+
"s/w/VVT8/vu199ZHCxWY9PX1YS4Wvc6R0PP/u4TA1N0PWRj09PTAOoyMjP7b29n/7TmxYuEj"
1794+
"hkpGsISlufl/G2ubZyAF5hbmYIVMTAxMQJLlwOEjh6UYkABAADGgOxPoCAj7ywOJ/zcYBP6/"
1795+
"ZtB69srfcfMlebmDLxlYwWEIctjFixdhZjABw1OSTeBPuviT95U//rz+L/TnDcOLpzvuLnr1"
1796+
"MZqFAQ3I/n/6D6jhpaeidO3uH38Z3r1jYHhVtOSo11OeHRGiT+9gaDA1Mfkf1JbDwLt1+2eR"
1797+
"Jd7SQCEJBheGt0D6/f/8ExB3g3xuYWn5v6io6L+lteVFdH/BQgIe4vGJiQxycnLTgaZoArEO"
1798+
"ECsBsSDIP+YWFigaAAIII5RQ4vEtA/P/L8C4PMHAAuYDLWBC9wMoxTEwfBFjuMHAzvCVQfrL"
1799+
"n1iXYxKehjOvWPIBJRgZwdagamBk5frDLbEo1pVB75TZK0Fth08sKYruF9bl839j3oARSkDA"
1800+
"/u8Xkw0Ds2EXw09pbgGuILG3N7f8tPvCrPdS8vVmbBpAlv56U5h//v+p66EcfzkYVK/q/Wt/"
1801+
"e+Pf2wun/mDT8ItV6N/xKXE5e1N+/mRYPafimtsa/jsCAn+3q9u9/oMROsA4YZsxY/r/qKio"
1802+
"/wwTTCaffnXzuUa5o+miqAA2YHJlQPE0ULFUR2fH0yWLFzIsN3/IChQSB2IQ/RyIfwJjmgHZ"
1803+
"ZN1t27b9Dw0NgWc0aA6E5MIJ5oiI09XV9Zo3b97/wKDg/7gjEimm6+rq/gcF+BNU/B8S3UCC"
1804+
"kdES6EZQTD4D4j9A/BGUOq0sLL7/YfzPcPLYCbg/AQLQVi2hTURR9Kbzy8c0JFNNAmoSEcFo"
1805+
"q01VUksQQXQjLhJ06SJuRBCXlbiViOBGd4IgEgRB2ipUUMlCTMGpUoytLkpJJoshaTKmTTVj"
1806+
"mnmZjG8mJkaljSBeuAzvzuWdOW/OPe+PP71JmHEirA5tQwPU8WEgoEHBTxWImqIjNaoEyG4r"
1807+
"yEB8NGAdy2SvXVta1KOmD6T41gNIcEE5XAYH+NZJ8K7C2A6Wnb4kyWv5R/z9O4Vq7Z1EXc/t"
1808+
"sR9RejL4AUDgtFBGxW057BsyDlkC1KmRQRj0eBQbYZMptr9Sr5Dzlc/KM1HKpL4Zn/LE+pOL"
1809+
"kvDTAX7zme7QJozG6VCQ4aA0xx9j9p88AXUnWyBPO/ppFgiCAJskNg/NJr84Cjn1KF2Sq9tW"
1810+
"Gmv2qtphsAmAxkJjwOBkkVX1fn01/XqrywUmkwkQQlBHMpivTS5vcW8nmcvHafnhy7g4N5Vw"
1811+
"7l0q/RVAe8zPBJzNc+EIWG02vRdbGPjf38y9GLlgFj8tfkD3ko/9RVPabka5nf5ihbmbbPQE"
1812+
"wPUBiiLF8fGrwPM8pNNpEAShlorIAfx6Hzi8u2E1WwK1bxELOQOCfUW99Ry1PioGGwLg9S6G"
1813+
"ZjLxG3HgOA7mFxagkM+XU6nUgOF2sO18hC7ZVmChQlOzG91zrnC/3jztywyP6ejoaFCdmJhU"
1814+
"Y7GYejYSwffY2FKvCew26u7smgP1fCgUehCNRiGbzUIikYCCWJrlZmaC8A/ROaLhA8M6itfn"
1815+
"gVKxNIW5hjXyBr2p1dzE7Ptwpdmpq/q5YC3qPdwbbmOA/xXfBWC9WmOaOsPwey7QA7RQiwUK"
1816+
"kyElU1AGG4JIZps5NsCIDsTNbAlmy7If/PKXv9mSuUWzxG2aLS5xi2yOGTHGyXQzmYk4mkxj"
1817+
"dIIgdgK9YWHQe0/P6bns/UpxOId2uq/5mqbn9HnPe/me52mqAQgPRRf9jEq08zI2eRkmU5T4"
1818+
"jAyO3xoSV2Ch2f8lAyPumQS4jL0TkeREPOHYx5gEtEKDLFAQn0XBKjPglfkAakpkh44D5sHj"
1819+
"1fikw5CDwDRo8aWLcxaTT7mpBqWmNE9E9jlDdg9PdSmV+rfnSKPoVB+fnGTp/fQhqLjTBD7M"
1820+
"hoGVKgN1EfFirVZ3al9p3uHTXur5tnjWu9ZvR89y3X80pqeUASkjyYIziRr/F7la7Vipndvz"
1821+
"1U4I9rNqun8Fqyk286KzQKIKsXL5Lfvdo6JMlbmsXm+kc7xLTCUAqSUXn2FzGE4xM4Y3N6qn"
1822+
"T5RQ7dvraCaQyaXpl0lqLOPPwCU6EBwrMkNG1U0pfssr6+68kDbB3LOEZC1BduQeTlFQ0gWq"
1823+
"IjJwea3+wsAOmL4alWgTK7HPZuqoCEizV6VnQlqNJ8xnaeg4Q2UAM2eSgE2xBYRzMjCX5XJY"
1824+
"Nqo9hwKe6gpDpvEVlqM5iFMG0N6dEM3XXTFF8AXM2rloWv6MVJh5TaVTLBFhx5CqUm7ZF7o9"
1825+
"zGZrxaJalgiNLMsgiiLQQ4pSXNWis1h2Va67zocbRkLipuVuJZUMyMGJqQp9l2aVa4FTfV+m"
1826+
"5xk1OXo9COi1SICo0wO55+zhnEqzhsnSgPEWHRRofRzMoKRaIuIkQm2rcndmv9et+fTAJ4mn"
1827+
"5nkexl1jqv/rY7+V+43Ruc7PbmfoqF84mvJmeyWSNfXIAHjIEicS6fzjp4uLd2/v6ICDBw/B"
1828+
"Sy83gk+vKjNafmbjnq7C/gOHe9ZIoq0kyow8ZYj50te6pAVBf+RC8COrVq/e3dm5C2y2QZhw"
1829+
"OeC1Y/t+fmfoo74Qw8xpc43y/vLo0Mm6qeHzDZ4pRh+LTXU3KfNEi1z0sDFF8JPramra2l5t"
1830+
"hx/6z4Db5QSn4P/gxlblJ+Cy1oAQYkGhnXjrKIQ5F+hiUfL/g8jlCvXDh48pgp9/0WptbN22"
1831+
"DY4f/x612A0+v6/rxuvqEbysg1gESYpmkHMiCfuoiwl/l3Yvvu9dukQIfmVzy+bG9o4d0Nvb"
1832+
"C5OTDgj4/G/YBm2fJ8fWh5uw4CTu6aTzkxZoerGp+jfwkS1bW2ssVgv0fHMUXA4nBIOh1l9t"
1833+
"g98lBV3BTcRMTAaT1/fe04EHaOCf4OOtW1pLnquqhr6+PnAgeDgS3oTNvfDACST/9XDVb6iH"
1834+
"+5zEUgGw2d7m5uY8c1kpnDn7I7idDgTna22Dg1ceVzLZRVwTtlotXIHJBAMXL4ETwaM8X47g"
1835+
"o0+iyYkANE1nGY15HG74HUfV4ZgEgReKsSzOJxX9RACWZYMFBQW5drt9NgEuCPkUUNMbGhru"
1836+
"ozwyEUrCw6AWqmhiVLyLTi0AGq2jIrrlt8h8I8cQn5CXtIVKclJiyVEkW6ivXx//P23LY6+/"
1837+
"BGjWWmOjuK7wuTOzM7Ozsw97je3FdnGCMQJMKOFhaESJTQWxkh9t8ydUaqtGTYXSH2mlSlXU"
1838+
"SvnX/+mPPtT0oURJFam0ipRUSiE1SfE6mGAgBVO1rh8sXht7d7w7O7M7s3PvTM8MY3As05ri"
1839+
"PO7q6u6MV5pz7jnnu993xh/HA1I4S6s8ioR1R4JSrGBizeM1xWv11tTqQHgD8csEj/LglZBj"
1840+
"5QRgGAl4NB3spOuz6Tt8++PbIXTCTmPUNPxaum14FY02MOw+b+ORtwn4Qd7mcRnVZLM+KGB+"
1841+
"oW8uuBhfiicOJS7UEeycGxGg3emfks8pUXTiGXvdHFgmcpf4351hTreC3PgAPn4GJrYX0WQx"
1842+
"mALE0KUYrnHExihS3qgn/WgbI5saHGhSXJKSyrRamCydv3qx+MFEZ7LPbZZb6mfm/piTVaPW"
1843+
"k3qXfjlTd2/VzDo6EBbN7VRJ7DUE+fO6KJ345WZo6d4Ji38rAB1kIA7KmDJNTEw317mOtEPk"
1844+
"eI20pSTlRE8sevBBnoh80c4X3p0/837OLE1+oJfHNEv7d5qvzklRaxFpRGXeidlvpX9B19MB"
1845+
"EgKmIChMFGQWi3ZvSfHtShMtZCORRislP/GNHbB9VxeINyOgWoobdVVXkhKOEFORuMXqpEE2"
1846+
"GOOqTORKVHQvlqa1vy4Wp2fq8vg51x1DTPrXjogx/YDlFPdUi4YardCVR8E9O/DmnV0Xwm5D"
1847+
"1LVJwnH4JnZpIsONs9b4oUPbpYEjO6GreyNERRnrwvWrgJNViRMTEuFFIYLOS67LSYifvDXn"
1848+
"VfQJmjKN9MNM8GRK7QSLlIsobSTgFqSoXVpQCOdF2d35xH9rKKyUJGHK8KEDCga1EbGk3aXQ"
1849+
"CRbXaV682ikdOrSJZLa0QlzhIG/amkFkSHxRFDkFOER7giBFvJonWVM0Uai5oDmeqAssVTOc"
1850+
"5rrlzPF2vRax6l7Uduuc7U0LMa+RW1wzb7+X4YVa2qcbzKsTJ9LUBuVXfpOPnH6tOv/U01vI"
1851+
"/scTUjwFCi/5x2gwA3rNyYQqXRElb1BhxmVKRaQZMQ3dlu7WRZvc1D40WNqy4qBTYrte76On"
1852+
"XGHdDL5FtuyAh6I9LkV5I7gGPmGea0jVp772nWfJrt1xORYDVY2DokSDk8Fn50v9DL/nRCbn"
1853+
"XWFwri63pUnsq4fS0BJvbimZG+y3zk4kB0crrIVWjVbJoekag63A7tuBJVYfFrN/XDtovC2I"
1854+
"rLIgCNoPO1NH9x/o/cGBlo3kISQrUUUJjF3SLJTSYNVnb3j8yVMT6j+o7RQEom7JENmsUT4h"
1855+
"FojMTbIr1/8u5yKaK9VrjVelOt+MEf7uGmTHPTjihvXgO8SObd3wY4EXnm9tySB4EMjn85Cf"
1856+
"zcP2bdugtTUTOOEbf21u3Htt+s2pBx3JbG8Tqy2cqyWvm4XoWG5GvTA6F2NwQ9mg3sT6nVUJ"
1857+
"aBHHqYn9k1R4YdRdlfHebzSQMf9MEMUTmzs64PDhw9DU1AyaVoCRkREwTRPe+NMbkEgmvP3H"
1858+
"B5znJn81AokNyVcOnGh9rGPvRsR0552xs8O/+/PvzyfV8vjWsjSbMUStmRmGxHvWrnjNCft1"
1859+
"GPHnvf+patY6EH6TuKM/FyPicb/fd/ToUcxxxe9Iwtn3ziArN1ENlUA3jPqNOH15au/8O69O"
1860+
"vNiBdjQDTTV8fXww8ZW5MWiTVH2kkLsyktYvQ0TLgx0pC4W4/r1/pihWmdv+hx1o9E8CSbYq"
1861+
"lVh+DqwFRtHYVlxeEkXx8X379sLAYwMgiBG4fOly0FbVdQN0NNwwK0aV0BcuPOm9FDbMEoGs"
1862+
"UxsboFrgwrTz68dAiyrAuUj1WA0s2QqQ7JaAguUk7q6iaY1KeRMur0qi9Iiv3I4dGwBRFGBo"
1863+
"aAgmpyahUqlAGQ2vmtUSc9zvZ4+zl5epwFrIVgUwNGGZMPTC9MCq5hk4kaW2rktePBDUlvec"
1864+
"d38OYIS6MWInEQJ7+vv6oa//CGI4gexQFqZz06CXdSjrOpiGOc8YfXZ4ePjk7VCjEbiTNDSG"
1865+
"hpJ0NUgGlKjeuaeALNPA3pr0wN1SCHd8D2L264oS23ykvx96D/Yizntw4eIo5GdmoFQuQ8VP"
1866+
"FcvKAWXfRv38l/8nskvy1x+rdY3XpLtXpMqX8LT5bSwWa+/r64OenofARX5w9r0hWCgWcMdL"
1867+
"gfHVmjVGmPsMGp6FT3is6gBG5UmMxq9TqWRy375e6OrajDH04Pz5c7C4iGhSKWOO61CrVUfx"
1868+
"509ns9nL8CkNYYXhGZ7weSUWhd17Hob29vbg/rVr17AwMb9xt8uY53bVzjLifhM3fBw+5fER"
1869+
"B2RZnk0kkpuKC4XphlSKFrSiUJhfgFKpjOlSBsuuve155FvDw9lZ+IyMjzjgs8LTp09d371r"
1870+
"N5nK5TquXPrwun8/GpNfJx5B5hH8fwE8cvALwSubJWT2YYDzILgXrCFwcCFu3+6VLP0eOb//"
1871+
"Nxbe9kmdT1/JenUlkJuruOwMX5erIT5rYZvPWvEqzlvGSFkIkUvTWXFNg4PJ9+Az3Fb5RMd/"
1872+
"AOxm99VU2O0FAAAAAElFTkSuQmCC")
1873+

odmtools/controller/frmGapFill.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""Subclass of dlgFill, which is generated by wxFormBuilder."""
2+
3+
from odmtools.view import clsGapFill
4+
5+
6+
# Implementing dlgFill
7+
class frmGapFill(clsGapFill.dlgFill):
8+
def __init__(self, parent, record_service):
9+
self.record_service = record_service
10+
clsGapFill.dlgFill.__init__(self, parent)
11+
12+
# Handlers for dlgFill events.
13+
def onOKBtn(self, event):
14+
#TODO add validation
15+
gapvalue= self.txtGap.Value
16+
gaptime = self.cbGap.Value
17+
fillvalue = self.txtFill.Value
18+
filltime= self.cbFill.Value
19+
20+
self.record_service.fill_gap(gap=[gapvalue, gaptime], fill=[fillvalue, filltime])
21+
self.Close()
22+
23+
def OnCancelBtn(self, event):
24+
25+
self.Close()
26+
self.Destroy()

odmtools/controller/frmLinearDrift.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ def OnBtnOKButton(self, event):
1313
Perform Drift Correction based on given input. Catch errors if the user enters something invalid
1414
"""
1515
try:
16-
self._record_service.drift_correction(float(self.txtFinalGapValue.GetValue()))
16+
result = self._record_service.drift_correction(float(self.txtFinalGapValue.GetValue()))
17+
if not result:
18+
dial = wx.MessageDialog( None, "Linear drift can only be performed on one continuous data selection. \nPlease modify your selection and try again.", "Bad Input", wx.OK)
19+
dial.ShowModal()
1720
except Exception as e:
1821
dial = wx.MessageDialog(None, "Unable to convert value to float %s" % e, "Bad Input",
1922
wx.OK | wx.ICON_ERROR)

odmtools/controller/frmSeriesSelector.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -459,13 +459,13 @@ def setFilter(self, site_code='', var_code='', advfilter=''):
459459
:return:
460460
"""
461461
if site_code and var_code:
462-
self.siteFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[3:4],text=site_code)
463-
self.variableFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[6:7],text=var_code)
462+
self.siteFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[2:6],text=site_code)
463+
self.variableFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[3:8],text=var_code)
464464
self.tblSeries.SetFilter(Chain(self.siteFilter, self.variableFilter))
465465
elif site_code:
466-
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[3:4], text=site_code))
466+
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[2:6], text=site_code))
467467
elif var_code:
468-
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[6:7], text=var_code))
468+
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[3:8], text=var_code))
469469
elif advfilter:
470470
self.tblSeries.SetFilter(advfilter)
471471
else:
@@ -490,6 +490,14 @@ def onReadyToPlot(self, event):
490490
except Exception as e :
491491
object = self.tblSeries.GetSelectedObject()
492492

493+
self.drawPlot(object)
494+
logger.debug("refreshing...")
495+
self.Refresh()
496+
497+
logger.debug("Finish Plotting")
498+
499+
def drawPlot(self, object):
500+
493501
if not self.tblSeries.IsChecked(object):
494502
Publisher.sendMessage("removePlot", seriesID=object.id)
495503
Publisher.sendMessage("updateCursor", deselectedObject=object)
@@ -499,12 +507,6 @@ def onReadyToPlot(self, event):
499507
self.pnlPlot.addPlot(self.memDB, object.id)
500508
Publisher.sendMessage("updateCursor", selectedObject=object)
501509

502-
logger.debug("refreshing...")
503-
self.Refresh()
504-
505-
logger.debug("Finish Plotting")
506-
507-
508510
#from meliae import scanner
509511
#scanner.dump_all_objects("plot_plotting.dat")
510512

@@ -527,6 +529,17 @@ def getSelectedObject(self, event):
527529
#print "Updating Cursor", editingObject.id
528530
Publisher.sendMessage("updateCursor", selectedObject=editingObject)
529531

532+
def onBtnClear(self, event):
533+
logger.debug("Clearing all selected objects from Series Catalog")
534+
chcklist = self.tblSeries.GetCheckedObjects()
535+
536+
self.tblSeries.RefreshObject(self.tblSeries.editingObject)
537+
for c in chcklist:
538+
self.tblSeries.SetCheckState(c, False)
539+
Publisher.sendMessage("removeMultPlot", seriesIDs= chcklist)
540+
Publisher.sendMessage("updateCursor", deselectedObject=object)
541+
#self.drawPlot(c)
542+
self.Refresh()
530543

531544
def onReadyToEdit(self):
532545
"""Choose a series to edit from the series selector

0 commit comments

Comments
 (0)