Browse Source

Save as

master
Denis Tereshkin 7 years ago
parent
commit
85d7fa4528
  1. 3
      src/nailab/data/csvfolderdatasource.py
  2. 262
      src/nailab/nailab_rc.py
  3. 14
      src/nailab/ui/mainwindow.py
  4. 12
      src/nailab/ui/strategywidget.py
  5. 5
      src/nailab/ui_gen/mainwindow.py
  6. 2
      src/nailab/ui_gen/strategywidget.py
  7. 23
      ui/mainwindow.ui
  8. 2
      ui/strategywidget.ui

3
src/nailab/data/csvfolderdatasource.py

@ -27,6 +27,9 @@ class CsvFolderDataSource(DataSource): @@ -27,6 +27,9 @@ class CsvFolderDataSource(DataSource):
def available_feeds(self):
return [f[1] for f in self.feeds]
def refresh(self):
self._discover_feeds()
def get_feed(self, feed_id):
for path, f_id in self.feeds:
if f_id == feed_id:

262
src/nailab/nailab_rc.py

@ -9,122 +9,6 @@ @@ -9,122 +9,6 @@
from PyQt5 import QtCore
qt_resource_data = b"\
\x00\x00\x02\x0e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\
\x01\x5e\x1a\x91\x1c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x8b\x49\x44\
\x41\x54\x68\x81\xed\x99\x4f\x4a\xc3\x40\x14\x87\x7f\x49\x53\x94\
\x0a\x2a\xa2\xe2\x9f\x45\xf1\x04\x3d\x42\xc5\x9d\x1b\x71\x29\x81\
\x9e\xa0\x17\xe8\x11\x7a\x0f\x37\x5d\x8a\x07\x08\xba\xc9\xde\x13\
\x94\x2e\x6a\x4b\x5a\x28\xad\x34\x28\x49\xe6\x79\x82\x37\x24\x99\
\xc6\x17\x61\xbe\xed\x1b\xde\xfc\x3e\xe6\x31\x09\x8c\x43\x44\xf8\
\xcf\xb8\xd2\x01\x4c\xf1\x74\xc5\x20\x0c\xdb\x50\xee\x90\x40\x5d\
\x07\xce\xe5\x2e\x37\x9e\x2e\xa3\xf7\xde\xe3\xc3\xad\x69\x1f\xf6\
\x04\x82\x30\x6c\x83\xdc\x0f\x00\x4f\xbb\x0e\x0f\x00\x5f\xf1\xb6\
\xfb\xfc\xf2\xfa\x66\xda\x87\x1f\x21\xe5\x0e\x41\x38\x32\xdd\x40\
\xc7\x2e\x24\x58\x01\x02\xdd\x99\x34\xce\x8b\xa9\x04\x2b\xe0\xc0\
\x39\x2f\xdb\xb4\x28\x26\x12\xb5\xb9\x85\xca\x4a\xd4\x46\x00\x28\
\x27\x51\x2b\x01\xa0\xb8\x84\x98\x80\xd7\x68\xb0\xb5\x22\x12\x62\
\x02\xad\xbd\x7d\x6d\x3d\xaf\x84\x98\xc0\xd9\xf1\x09\x5c\x57\xbf\
\x7d\x1e\x09\x31\x81\xa6\xe7\xe1\xe6\xe2\x1a\x87\xad\x03\xa3\x71\
\xd2\xfe\x0b\x55\x4d\xd3\xf3\x70\x75\x9a\xeb\x73\xd3\xe5\x0a\xb5\
\xbb\x85\x8a\x62\x05\xa4\xb1\x02\xd2\x58\x01\x69\xac\x80\x34\x56\
\x40\x1a\x2b\x20\x8d\x15\x90\xc6\x0a\x48\x63\x05\xa4\xb1\x02\xd2\
\x58\x01\x69\xac\x80\x34\x56\x40\x1a\x56\x20\xcd\xb2\xbf\xcc\xa1\
\x45\x97\x85\x15\x88\x7f\xbe\x2b\x09\x53\x06\x5d\x16\x56\x60\xb1\
\x5e\x45\x4a\xa9\x4a\x02\x15\x41\x29\x85\xc5\x7a\x15\x71\x75\x7e\
\x84\x92\x24\x18\xcf\xa7\xd8\xc4\x5b\x91\x71\x4a\xb3\x0c\x9b\x78\
\x8b\xf1\x7c\x8a\x34\x49\x02\x6e\x1d\xfb\x3e\xa0\x40\x83\x24\x4d\
\xef\x3f\x97\x51\xa5\xaf\xf5\x39\x58\x13\x68\xc0\x15\xd9\x13\xe8\
\xfb\xfe\x84\x40\x1d\x07\x18\x01\x98\x55\x12\x4d\xcf\xcc\x01\x46\
\x04\xea\xf4\x7d\x7f\xc2\x2d\xfa\x05\x0e\x3c\xa3\x06\xde\xce\x5a\
\xc4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\x8f\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\
\x01\x5e\x1a\x91\x1c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x0c\x49\x44\
\x41\x54\x68\x81\xed\xda\x4f\x4b\x54\x51\x18\x06\xf0\xe7\x3d\xe7\
\x38\x73\x25\xea\x96\x21\x21\x08\x42\xd8\x66\x5a\x58\x44\x08\x16\
\x08\x41\x0b\x67\xe3\x4a\xc8\xcf\x20\xb4\x1e\x19\x08\x0c\xa4\xd9\
\xd6\x97\x50\x74\xe5\xc6\x40\x41\x08\xaa\x85\x2d\xc2\x85\xb3\x49\
\x82\x01\x41\x18\x65\x72\x46\x63\xfe\x9d\x7b\xde\x16\x76\x69\x82\
\x1a\x6a\xbc\x7a\xee\x85\xf3\xdb\xcd\x59\xbc\x3c\xcf\xe5\xbd\x67\
\x73\x87\x98\x19\x49\x26\x6c\x07\x38\x2f\xd5\xf9\x23\xb3\xb8\x3e\
\x02\xad\x0a\x00\x26\x01\x0c\xf5\x38\x73\xb5\x9d\x0a\xe6\xbe\xcc\
\x4f\x1d\x9e\x3b\xdd\x3f\xa0\x70\x85\x7e\x86\xdf\x01\xe0\x47\x30\
\xf7\x90\x88\xe6\x76\x5f\x3c\x5d\x8d\x60\x56\x57\xbf\x56\xe8\xec\
\xc9\x47\x11\x1e\x00\x06\x99\x79\x25\xb3\xb0\xb1\x72\xe7\xd5\xdb\
\xc1\x88\x66\xfe\x51\xe7\x3b\x30\x79\x01\xf3\x67\xfa\x5a\x72\xf7\
\xee\xcb\xcd\x99\x0b\x98\x0d\xa0\x73\x85\x16\x36\xe2\x7e\x1d\x1d\
\x00\x78\x07\xa5\x73\xc5\x7c\xb6\x14\x1e\x26\xe9\x16\x1a\x02\xf0\
\x0c\x5a\xed\x64\x16\xd7\x47\xc2\xc3\xdf\x6e\xa1\x01\x4f\x60\x7a\
\x34\x8d\xd1\xeb\x0a\x7e\x9a\x2e\x3d\x61\x37\xd5\x26\x63\xef\x58\
\x63\x6d\xaf\xe9\x57\x1a\xaa\x00\x60\x16\xe8\x28\x30\xe0\x09\xcc\
\x8f\x5f\x41\xbf\x8a\x57\xf0\x90\x9f\x26\x3c\xb8\xd5\x87\xcc\x4d\
\x85\xc2\xf6\xf7\x27\xe1\x39\x31\x33\xee\xbf\xf9\x34\x71\xfb\x9a\
\xf7\xe1\x5b\x90\xc6\x89\x8e\xf7\x56\x5d\x55\x06\x37\x64\x13\x5f\
\x6b\x8d\x47\x9f\x9f\x3f\xfc\x48\xf7\x5e\x6f\x4f\xc8\x94\xff\x9e\
\x48\xc4\xf3\xd1\xff\x05\xb3\xe1\xa0\x55\x7d\x2c\x88\xbc\xa5\xa4\
\x85\x07\x00\x22\x41\x44\xde\x92\x10\x32\x35\x6c\x3b\x4c\xaf\x84\
\x4c\x0d\x0b\x92\x32\xde\x4b\xdf\x05\x49\x29\x12\x1b\x3e\xe4\x0a\
\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\
\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\
\x0a\xd8\x26\xd8\x04\xb6\x33\xf4\x8c\x4d\x00\x11\xb4\xea\xb6\x73\
\xf4\x2c\x68\xd5\x21\xda\xb5\x4a\x99\xd9\xd8\xce\xf2\xdf\x98\x0d\
\xda\xb5\x4a\x59\x18\xa3\xb7\xea\x47\xfb\xd0\x8d\x53\x24\x61\x9d\
\xd8\x04\xd0\x8d\x53\xd4\x8f\xf6\x61\x8c\xde\x52\x50\x3a\xc7\x1a\
\x53\xcd\xe3\x72\x54\xdf\x88\x2f\x4b\x15\x4a\xe7\x44\x31\x9f\x2d\
\x41\xe9\x31\x00\xcb\x38\xfb\x94\x19\x77\x07\x00\x96\xa1\xf4\x58\
\x31\x9f\x2d\x91\xfb\xb7\x8a\x65\x3f\x00\xdf\xf9\xa7\x43\x02\xf4\
\x78\xd9\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\x33\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\
\x01\x5e\x1a\x91\x1c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xb0\x49\x44\
\x41\x54\x68\x81\xed\x9a\x31\x6a\x02\x41\x14\x86\xff\x59\x05\x25\
\x8d\x21\x10\xc1\xca\x23\xd8\x06\x1b\x21\x5d\xae\x13\x1b\xab\x14\
\xc1\xc2\x2a\xe7\xf0\x14\x42\x9a\x25\x6d\x4e\x10\x2c\x12\x83\x1b\
\x16\x5d\x31\xba\xee\xcc\xbc\x14\x21\x90\x80\x6f\xd0\xe8\xfa\x58\
\x98\xaf\xdc\x19\xd8\xef\x73\xc6\xb1\x18\x15\x11\xa1\xc8\x04\xd2\
\x02\x87\x52\x76\x0d\x8e\xc2\xb0\x09\x1b\x0c\x08\xd4\x51\x50\x8d\
\x53\x49\x01\x00\x81\x26\x0a\xea\x11\x81\xed\x5d\xb7\xdb\x63\x6e\
\x9e\xe2\xb6\xd0\x28\x0c\x9b\xa0\xe0\x19\x84\x5a\x6e\x96\xbb\xa0\
\x30\x87\xb2\x2d\x2e\x82\xdf\x42\x36\x18\x88\xcb\x03\x00\xa1\x06\
\x1b\x0c\xb8\x61\x36\x80\x40\x9d\x7c\x8c\xf6\xc7\xe5\xc2\x06\x9c\
\x7a\xcf\xbb\x70\xb9\x14\xfe\x14\xf2\x01\xd2\xf8\x00\x69\x7c\x80\
\x34\x3e\x40\x1a\x1f\x20\x8d\x0f\x90\xc6\x07\x48\xe3\x03\xa4\xf1\
\x01\xd2\xf8\x00\x69\x7c\x80\x34\x3e\x40\x1a\x1f\x20\x0d\x1b\xa0\
\x8d\x39\xa5\x87\x13\x97\x0b\x1b\xf0\x99\xae\x73\x91\xf9\x0f\x2e\
\x17\x36\x20\x9a\xc5\xb0\xd6\xe6\x22\xb4\x0f\xd6\x5a\x44\xb3\x98\
\x1d\x67\xaf\x98\x32\xad\xf1\xf2\xfe\x8a\xcb\xf3\x0b\x9c\x55\xaa\
\x28\x97\x4a\xb9\x08\x72\x6c\xb2\x0d\xe6\x49\x82\x24\x5d\x21\xd3\
\x9a\x9d\xe7\xbc\x23\xcb\xb4\xc6\xdb\xc7\xf4\xe8\x72\x00\x30\x9d\
\x4c\x76\x9a\x57\x6f\xb8\xaf\x29\x0a\x7f\x0a\xb1\x2b\x60\xad\x45\
\x10\xe4\xdf\x77\x7b\x75\xbf\xf5\xf9\xc3\xd3\xdd\x1f\x17\x0e\xd6\
\x70\x93\xa6\x07\x68\x1d\x17\x97\x0b\xbb\x02\xcb\xc5\x62\x5a\xa9\
\x56\xeb\x4a\xa9\x5c\xa4\x7e\xf8\xfd\x49\x6f\x83\x88\xb0\x5c\x2c\
\xd8\x2f\x22\xbb\x02\xc6\xe8\x51\x1c\x45\x58\xaf\x56\xa2\xc7\x69\
\x1c\x45\x30\x46\x8f\xb8\x71\x76\x05\x34\xd0\x53\xc6\xdc\x24\xb3\
\x99\xe8\x5d\xb1\x35\x66\xae\x81\x1e\x37\xce\xae\x40\xbf\xdb\x1d\
\x67\xa0\x16\x40\x43\x05\xec\x76\xe6\x1d\x91\xef\x77\xd2\x30\x03\
\xb5\xfa\xdd\xee\xfe\x7f\x35\x28\x0a\x85\xff\x1d\xf8\x02\xd1\xfa\
\xa2\xe7\x75\x3b\xf6\xd5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
\x60\x82\
\x00\x00\x03\x8f\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@ -184,6 +68,122 @@ qt_resource_data = b"\ @@ -184,6 +68,122 @@ qt_resource_data = b"\
\x09\xf1\x80\x43\x84\x88\xf8\xc7\x59\x11\x0f\x08\xbf\x13\x4f\x03\
\xd1\x77\xe2\x69\xf0\xdf\xc0\xb4\xf9\x0b\x47\x70\x6d\x4b\x01\x24\
\x0b\x02\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\x33\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\
\x01\x5e\x1a\x91\x1c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xb0\x49\x44\
\x41\x54\x68\x81\xed\x9a\x31\x6a\x02\x41\x14\x86\xff\x59\x05\x25\
\x8d\x21\x10\xc1\xca\x23\xd8\x06\x1b\x21\x5d\xae\x13\x1b\xab\x14\
\xc1\xc2\x2a\xe7\xf0\x14\x42\x9a\x25\x6d\x4e\x10\x2c\x12\x83\x1b\
\x16\x5d\x31\xba\xee\xcc\xbc\x14\x21\x90\x80\x6f\xd0\xe8\xfa\x58\
\x98\xaf\xdc\x19\xd8\xef\x73\xc6\xb1\x18\x15\x11\xa1\xc8\x04\xd2\
\x02\x87\x52\x76\x0d\x8e\xc2\xb0\x09\x1b\x0c\x08\xd4\x51\x50\x8d\
\x53\x49\x01\x00\x81\x26\x0a\xea\x11\x81\xed\x5d\xb7\xdb\x63\x6e\
\x9e\xe2\xb6\xd0\x28\x0c\x9b\xa0\xe0\x19\x84\x5a\x6e\x96\xbb\xa0\
\x30\x87\xb2\x2d\x2e\x82\xdf\x42\x36\x18\x88\xcb\x03\x00\xa1\x06\
\x1b\x0c\xb8\x61\x36\x80\x40\x9d\x7c\x8c\xf6\xc7\xe5\xc2\x06\x9c\
\x7a\xcf\xbb\x70\xb9\x14\xfe\x14\xf2\x01\xd2\xf8\x00\x69\x7c\x80\
\x34\x3e\x40\x1a\x1f\x20\x8d\x0f\x90\xc6\x07\x48\xe3\x03\xa4\xf1\
\x01\xd2\xf8\x00\x69\x7c\x80\x34\x3e\x40\x1a\x1f\x20\x0d\x1b\xa0\
\x8d\x39\xa5\x87\x13\x97\x0b\x1b\xf0\x99\xae\x73\x91\xf9\x0f\x2e\
\x17\x36\x20\x9a\xc5\xb0\xd6\xe6\x22\xb4\x0f\xd6\x5a\x44\xb3\x98\
\x1d\x67\xaf\x98\x32\xad\xf1\xf2\xfe\x8a\xcb\xf3\x0b\x9c\x55\xaa\
\x28\x97\x4a\xb9\x08\x72\x6c\xb2\x0d\xe6\x49\x82\x24\x5d\x21\xd3\
\x9a\x9d\xe7\xbc\x23\xcb\xb4\xc6\xdb\xc7\xf4\xe8\x72\x00\x30\x9d\
\x4c\x76\x9a\x57\x6f\xb8\xaf\x29\x0a\x7f\x0a\xb1\x2b\x60\xad\x45\
\x10\xe4\xdf\x77\x7b\x75\xbf\xf5\xf9\xc3\xd3\xdd\x1f\x17\x0e\xd6\
\x70\x93\xa6\x07\x68\x1d\x17\x97\x0b\xbb\x02\xcb\xc5\x62\x5a\xa9\
\x56\xeb\x4a\xa9\x5c\xa4\x7e\xf8\xfd\x49\x6f\x83\x88\xb0\x5c\x2c\
\xd8\x2f\x22\xbb\x02\xc6\xe8\x51\x1c\x45\x58\xaf\x56\xa2\xc7\x69\
\x1c\x45\x30\x46\x8f\xb8\x71\x76\x05\x34\xd0\x53\xc6\xdc\x24\xb3\
\x99\xe8\x5d\xb1\x35\x66\xae\x81\x1e\x37\xce\xae\x40\xbf\xdb\x1d\
\x67\xa0\x16\x40\x43\x05\xec\x76\xe6\x1d\x91\xef\x77\xd2\x30\x03\
\xb5\xfa\xdd\xee\xfe\x7f\x35\x28\x0a\x85\xff\x1d\xf8\x02\xd1\xfa\
\xa2\xe7\x75\x3b\xf6\xd5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
\x60\x82\
\x00\x00\x02\x8f\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\
\x01\x5e\x1a\x91\x1c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x0c\x49\x44\
\x41\x54\x68\x81\xed\xda\x4f\x4b\x54\x51\x18\x06\xf0\xe7\x3d\xe7\
\x38\x73\x25\xea\x96\x21\x21\x08\x42\xd8\x66\x5a\x58\x44\x08\x16\
\x08\x41\x0b\x67\xe3\x4a\xc8\xcf\x20\xb4\x1e\x19\x08\x0c\xa4\xd9\
\xd6\x97\x50\x74\xe5\xc6\x40\x41\x08\xaa\x85\x2d\xc2\x85\xb3\x49\
\x82\x01\x41\x18\x65\x72\x46\x63\xfe\x9d\x7b\xde\x16\x76\x69\x82\
\x1a\x6a\xbc\x7a\xee\x85\xf3\xdb\xcd\x59\xbc\x3c\xcf\xe5\xbd\x67\
\x73\x87\x98\x19\x49\x26\x6c\x07\x38\x2f\xd5\xf9\x23\xb3\xb8\x3e\
\x02\xad\x0a\x00\x26\x01\x0c\xf5\x38\x73\xb5\x9d\x0a\xe6\xbe\xcc\
\x4f\x1d\x9e\x3b\xdd\x3f\xa0\x70\x85\x7e\x86\xdf\x01\xe0\x47\x30\
\xf7\x90\x88\xe6\x76\x5f\x3c\x5d\x8d\x60\x56\x57\xbf\x56\xe8\xec\
\xc9\x47\x11\x1e\x00\x06\x99\x79\x25\xb3\xb0\xb1\x72\xe7\xd5\xdb\
\xc1\x88\x66\xfe\x51\xe7\x3b\x30\x79\x01\xf3\x67\xfa\x5a\x72\xf7\
\xee\xcb\xcd\x99\x0b\x98\x0d\xa0\x73\x85\x16\x36\xe2\x7e\x1d\x1d\
\x00\x78\x07\xa5\x73\xc5\x7c\xb6\x14\x1e\x26\xe9\x16\x1a\x02\xf0\
\x0c\x5a\xed\x64\x16\xd7\x47\xc2\xc3\xdf\x6e\xa1\x01\x4f\x60\x7a\
\x34\x8d\xd1\xeb\x0a\x7e\x9a\x2e\x3d\x61\x37\xd5\x26\x63\xef\x58\
\x63\x6d\xaf\xe9\x57\x1a\xaa\x00\x60\x16\xe8\x28\x30\xe0\x09\xcc\
\x8f\x5f\x41\xbf\x8a\x57\xf0\x90\x9f\x26\x3c\xb8\xd5\x87\xcc\x4d\
\x85\xc2\xf6\xf7\x27\xe1\x39\x31\x33\xee\xbf\xf9\x34\x71\xfb\x9a\
\xf7\xe1\x5b\x90\xc6\x89\x8e\xf7\x56\x5d\x55\x06\x37\x64\x13\x5f\
\x6b\x8d\x47\x9f\x9f\x3f\xfc\x48\xf7\x5e\x6f\x4f\xc8\x94\xff\x9e\
\x48\xc4\xf3\xd1\xff\x05\xb3\xe1\xa0\x55\x7d\x2c\x88\xbc\xa5\xa4\
\x85\x07\x00\x22\x41\x44\xde\x92\x10\x32\x35\x6c\x3b\x4c\xaf\x84\
\x4c\x0d\x0b\x92\x32\xde\x4b\xdf\x05\x49\x29\x12\x1b\x3e\xe4\x0a\
\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\
\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\x0a\xd8\xe6\
\x0a\xd8\x26\xd8\x04\xb6\x33\xf4\x8c\x4d\x00\x11\xb4\xea\xb6\x73\
\xf4\x2c\x68\xd5\x21\xda\xb5\x4a\x99\xd9\xd8\xce\xf2\xdf\x98\x0d\
\xda\xb5\x4a\x59\x18\xa3\xb7\xea\x47\xfb\xd0\x8d\x53\x24\x61\x9d\
\xd8\x04\xd0\x8d\x53\xd4\x8f\xf6\x61\x8c\xde\x52\x50\x3a\xc7\x1a\
\x53\xcd\xe3\x72\x54\xdf\x88\x2f\x4b\x15\x4a\xe7\x44\x31\x9f\x2d\
\x41\xe9\x31\x00\xcb\x38\xfb\x94\x19\x77\x07\x00\x96\xa1\xf4\x58\
\x31\x9f\x2d\x91\xfb\xb7\x8a\x65\x3f\x00\xdf\xf9\xa7\x43\x02\xf4\
\x78\xd9\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x02\x0e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\
\x01\x5e\x1a\x91\x1c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x8b\x49\x44\
\x41\x54\x68\x81\xed\x99\x4f\x4a\xc3\x40\x14\x87\x7f\x49\x53\x94\
\x0a\x2a\xa2\xe2\x9f\x45\xf1\x04\x3d\x42\xc5\x9d\x1b\x71\x29\x81\
\x9e\xa0\x17\xe8\x11\x7a\x0f\x37\x5d\x8a\x07\x08\xba\xc9\xde\x13\
\x94\x2e\x6a\x4b\x5a\x28\xad\x34\x28\x49\xe6\x79\x82\x37\x24\x99\
\xc6\x17\x61\xbe\xed\x1b\xde\xfc\x3e\xe6\x31\x09\x8c\x43\x44\xf8\
\xcf\xb8\xd2\x01\x4c\xf1\x74\xc5\x20\x0c\xdb\x50\xee\x90\x40\x5d\
\x07\xce\xe5\x2e\x37\x9e\x2e\xa3\xf7\xde\xe3\xc3\xad\x69\x1f\xf6\
\x04\x82\x30\x6c\x83\xdc\x0f\x00\x4f\xbb\x0e\x0f\x00\x5f\xf1\xb6\
\xfb\xfc\xf2\xfa\x66\xda\x87\x1f\x21\xe5\x0e\x41\x38\x32\xdd\x40\
\xc7\x2e\x24\x58\x01\x02\xdd\x99\x34\xce\x8b\xa9\x04\x2b\xe0\xc0\
\x39\x2f\xdb\xb4\x28\x26\x12\xb5\xb9\x85\xca\x4a\xd4\x46\x00\x28\
\x27\x51\x2b\x01\xa0\xb8\x84\x98\x80\xd7\x68\xb0\xb5\x22\x12\x62\
\x02\xad\xbd\x7d\x6d\x3d\xaf\x84\x98\xc0\xd9\xf1\x09\x5c\x57\xbf\
\x7d\x1e\x09\x31\x81\xa6\xe7\xe1\xe6\xe2\x1a\x87\xad\x03\xa3\x71\
\xd2\xfe\x0b\x55\x4d\xd3\xf3\x70\x75\x9a\xeb\x73\xd3\xe5\x0a\xb5\
\xbb\x85\x8a\x62\x05\xa4\xb1\x02\xd2\x58\x01\x69\xac\x80\x34\x56\
\x40\x1a\x2b\x20\x8d\x15\x90\xc6\x0a\x48\x63\x05\xa4\xb1\x02\xd2\
\x58\x01\x69\xac\x80\x34\x56\x40\x1a\x56\x20\xcd\xb2\xbf\xcc\xa1\
\x45\x97\x85\x15\x88\x7f\xbe\x2b\x09\x53\x06\x5d\x16\x56\x60\xb1\
\x5e\x45\x4a\xa9\x4a\x02\x15\x41\x29\x85\xc5\x7a\x15\x71\x75\x7e\
\x84\x92\x24\x18\xcf\xa7\xd8\xc4\x5b\x91\x71\x4a\xb3\x0c\x9b\x78\
\x8b\xf1\x7c\x8a\x34\x49\x02\x6e\x1d\xfb\x3e\xa0\x40\x83\x24\x4d\
\xef\x3f\x97\x51\xa5\xaf\xf5\x39\x58\x13\x68\xc0\x15\xd9\x13\xe8\
\xfb\xfe\x84\x40\x1d\x07\x18\x01\x98\x55\x12\x4d\xcf\xcc\x01\x46\
\x04\xea\xf4\x7d\x7f\xc2\x2d\xfa\x05\x0e\x3c\xa3\x06\xde\xce\x5a\
\xc4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"
qt_resource_name = b"\
@ -195,32 +195,32 @@ qt_resource_name = b"\ @@ -195,32 +195,32 @@ qt_resource_name = b"\
\x00\x6f\xa6\x53\
\x00\x69\
\x00\x63\x00\x6f\x00\x6e\x00\x73\
\x00\x07\
\x04\xca\x57\xa7\
\x00\x6e\
\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x08\
\x06\xc1\x59\x87\
\x00\x6f\
\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x08\
\x08\xc8\x58\x67\
\x00\x73\
\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0b\
\x0c\x81\x80\x07\
\x00\x65\
\x00\x78\x00\x65\x00\x63\x00\x75\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x08\
\x08\xc8\x58\x67\
\x00\x73\
\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x08\
\x06\xc1\x59\x87\
\x00\x6f\
\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x07\
\x04\xca\x57\xa7\
\x00\x6e\
\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
"
qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x0e\x00\x02\x00\x00\x00\x04\x00\x00\x00\x03\
\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x08\x5d\
\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x05\xca\
\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x93\
\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x02\x12\
\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x04\xa5\
\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x06\xdc\
"
def qInitResources():

14
src/nailab/ui/mainwindow.py

@ -58,11 +58,23 @@ class MainWindow(QtWidgets.QMainWindow): @@ -58,11 +58,23 @@ class MainWindow(QtWidgets.QMainWindow):
if currentWidget.source_file is None:
currentWidget.source_file = QtWidgets.QFileDialog.getSaveFileName(self, self.tr("Select a file..."), settings.value("save_strategy_path"), self.tr("Python (*.py);;All (*.*, *)"))[0]
if currentWidget.source_file != "":
if not currentWidget.source_file.endswith(".py"):
currentWidget.source_file += ".py"
settings.setValue("save_strategy_path", os.path.dirname(currentWidget.source_file))
self.ui.tabs.setTabText(self.ui.tabs.currentIndex(), os.path.basename(currentWidget.source_file))
if currentWidget.source_file != "":
currentWidget.save()
def saveStrategyAs(self):
settings = QtCore.QSettings()
currentWidget = self.ui.tabs.currentWidget()
new_source_file = QtWidgets.QFileDialog.getSaveFileName(self, self.tr("Select a file..."), settings.value("save_strategy_path"), self.tr("Python (*.py);;All (*.*, *)"))[0]
if new_source_file != "":
settings.setValue("save_strategy_path", os.path.dirname(currentWidget.source_file))
self.ui.tabs.setTabText(self.ui.tabs.currentIndex(), os.path.basename(currentWidget.source_file))
currentWidget.save_as(new_source_file)
def executeStrategy(self):
source_file = self.ui.tabs.currentWidget().source_file
executor = Executor()
@ -71,7 +83,7 @@ class MainWindow(QtWidgets.QMainWindow): @@ -71,7 +83,7 @@ class MainWindow(QtWidgets.QMainWindow):
for (source_id, feed_id) in selected_feed_ids:
try:
selected_feeds.append(self.datasourcemanager.get_source(source_id).get_feed(feed_id))
except e:
except Exception as e:
self.ui.tabs.currentWidget().setError(traceback.format_exc())
try:

12
src/nailab/ui/strategywidget.py

@ -141,6 +141,17 @@ class StrategyWidget(QtWidgets.QWidget): @@ -141,6 +141,17 @@ class StrategyWidget(QtWidgets.QWidget):
if not saved:
self.savedChanged.emit()
def save_as(self, source_file):
self.source_file = source_file
self.save_timestamp = datetime.datetime.now()
with open(self.source_file, "w") as f:
f.write(self.ui.editor.text())
saved = self.saved
self.saved = True
if not saved:
self.savedChanged.emit()
def get_time_window(self):
if self.ui.rb_allData.isChecked():
return None
@ -151,6 +162,7 @@ class StrategyWidget(QtWidgets.QWidget): @@ -151,6 +162,7 @@ class StrategyWidget(QtWidgets.QWidget):
self.ui.tw_feeds.clear()
sources = self.datasourcemanager.all_sources()
for source in sources:
source.refresh()
src_item = QtWidgets.QTreeWidgetItem(self.ui.tw_feeds)
src_item.setText(0, source.name)
src_item.setData(0, ROLE_FEED_ID, (source.name, ""))

5
src/nailab/ui_gen/mainwindow.py

@ -60,9 +60,12 @@ class Ui_MainWindow(object): @@ -60,9 +60,12 @@ class Ui_MainWindow(object):
self.actionSave_strategy.setObjectName("actionSave_strategy")
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.actionSave_as = QtWidgets.QAction(MainWindow)
self.actionSave_as.setObjectName("actionSave_as")
self.menuFile.addAction(self.actionNew_strategy)
self.menuFile.addAction(self.actionOpen_strategy)
self.menuFile.addAction(self.actionSave_strategy)
self.menuFile.addAction(self.actionSave_as)
self.menuFile.addAction(self.actionExit)
self.menuBacktest.addAction(self.actionExecute)
self.menubar.addAction(self.menuFile.menuAction())
@ -80,6 +83,7 @@ class Ui_MainWindow(object): @@ -80,6 +83,7 @@ class Ui_MainWindow(object):
self.actionNew_strategy.triggered.connect(MainWindow.newStrategy)
self.actionExecute.triggered.connect(MainWindow.executeStrategy)
self.actionSave_strategy.triggered.connect(MainWindow.saveStrategy)
self.actionSave_as.triggered.connect(MainWindow.saveStrategyAs)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
@ -97,5 +101,6 @@ class Ui_MainWindow(object): @@ -97,5 +101,6 @@ class Ui_MainWindow(object):
self.actionSave_strategy.setText(_translate("MainWindow", "Save strategy"))
self.actionSave_strategy.setShortcut(_translate("MainWindow", "Ctrl+S"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
self.actionSave_as.setText(_translate("MainWindow", "Save as..."))
import nailab_rc

2
src/nailab/ui_gen/strategywidget.py

@ -65,7 +65,7 @@ class Ui_StrategyWidget(object): @@ -65,7 +65,7 @@ class Ui_StrategyWidget(object):
sizePolicy.setHeightForWidth(self.tw_feeds.sizePolicy().hasHeightForWidth())
self.tw_feeds.setSizePolicy(sizePolicy)
self.tw_feeds.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.tw_feeds.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
self.tw_feeds.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
self.tw_feeds.setHeaderHidden(True)
self.tw_feeds.setObjectName("tw_feeds")
self.tw_feeds.headerItem().setText(0, "1")

23
ui/mainwindow.ui

@ -55,6 +55,7 @@ @@ -55,6 +55,7 @@
<addaction name="actionNew_strategy"/>
<addaction name="actionOpen_strategy"/>
<addaction name="actionSave_strategy"/>
<addaction name="actionSave_as"/>
<addaction name="actionExit"/>
</widget>
<widget class="QMenu" name="menuBacktest">
@ -138,6 +139,11 @@ @@ -138,6 +139,11 @@
<string>Exit</string>
</property>
</action>
<action name="actionSave_as">
<property name="text">
<string>Save as...</string>
</property>
</action>
</widget>
<resources>
<include location="../nailab.qrc"/>
@ -223,6 +229,22 @@ @@ -223,6 +229,22 @@
</hint>
</hints>
</connection>
<connection>
<sender>actionSave_as</sender>
<signal>triggered()</signal>
<receiver>MainWindow</receiver>
<slot>saveStrategyAs()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>529</x>
<y>293</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>openTrades()</slot>
@ -231,5 +253,6 @@ @@ -231,5 +253,6 @@
<slot>newStrategy()</slot>
<slot>executeStrategy()</slot>
<slot>saveStrategy()</slot>
<slot>saveStrategyAs()</slot>
</slots>
</ui>

2
ui/strategywidget.ui

@ -149,7 +149,7 @@ @@ -149,7 +149,7 @@
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::MultiSelection</enum>
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="headerHidden">
<bool>true</bool>

Loading…
Cancel
Save