Skip to content

Commit

Permalink
Added gui and imalcolm
Browse files Browse the repository at this point in the history
  • Loading branch information
coretl committed Aug 3, 2016
1 parent 8b93a1a commit ba32798
Show file tree
Hide file tree
Showing 19 changed files with 1,064 additions and 6 deletions.
21 changes: 15 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,29 @@ python:
- "3.4"
- "3.5"

addons:
apt:
packages:
- qt4-qmake
- libqt4-dev

cache:
directories:
- $HOME/.cache/pip
- $HOME/virtualenv/python$TRAVIS_PYTHON_VERSION/lib/python$TRAVIS_PYTHON_VERSION/site-packages
- $HOME/virtualenv/python$TRAVIS_PYTHON_VERSION/bin
- ${VIRTUAL_ENV}/lib/python${TRAVIS_PYTHON_VERSION}/site-packages
- ${VIRTUAL_ENV}/bin

install:
- env
- ls -al $HOME/virtualenv/python$TRAVIS_PYTHON_VERSION/lib/python$TRAVIS_PYTHON_VERSION/site-packages
- ls -al $HOME/virtualenv/python$TRAVIS_PYTHON_VERSION/bin
- ls -al ${VIRTUAL_ENV}/lib/python${TRAVIS_PYTHON_VERSION}/site-packages
- ls -al ${VIRTUAL_ENV}/bin
- ci/install_pyqt.sh
- python -c "import PyQt4;print(PyQt4)"
- pip install -r requirements/test.txt
- pip install coveralls
- ls -al $HOME/virtualenv/python$TRAVIS_PYTHON_VERSION/lib/python$TRAVIS_PYTHON_VERSION/site-packages
- ls -al $HOME/virtualenv/python$TRAVIS_PYTHON_VERSION/bin
- ls -al ${VIRTUAL_ENV}/lib/python${TRAVIS_PYTHON_VERSION}/site-packages
- ldd ${VIRTUAL_ENV}/lib/python${TRAVIS_PYTHON_VERSION}/site-packages/PyQt4/*.so
- ls -al ${VIRTUAL_ENV}/bin
- python setup.py bdist_egg

# command to run tests
Expand Down
39 changes: 39 additions & 0 deletions ci/install_pyqt.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/sh
# sip
SIP_VER=4.13.3
SIP_DIR=sip-${SIP_VER}
SIP_TAR=${SIP_DIR}.tar.gz
# pyqt
PYQT_VER=4.9.4
PYQT_DIR=PyQt-x11-gpl-${PYQT_VER}
PYQT_TAR=${PYQT_DIR}.tar.gz
SITE_PACKAGES=${VIRTUAL_ENV}/lib/python${TRAVIS_PYTHON_VERSION}/site-packages
set -ex
if [ ! -e ${SITE_PACKAGES}/PyQt4 ]; then
# Install sip
wget http://sourceforge.net/projects/pyqt/files/sip/${SIP_DIR}/${SIP_TAR}
tar -xzf ${SIP_TAR}
cd ${SIP_DIR}
python ./configure.py \
--bindir=$(pwd)/prefix/bin \
--sipdir=$(pwd)/prefix/share/sip \
--incdir=$(pwd)/prefix/include \
--destdir=${SITE_PACKAGES}
make -j 2
make install
cd ..
# Install pyqt
export PATH=$PATH:$(pwd)/${SIP_DIR}/prefix/bin
wget http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-${PYQT_VER}/${PYQT_TAR}
tar -xzf ${PYQT_TAR}
rm ${PYQT_TAR}
cd ${PYQT_DIR}
mkdir prefix
python ./configure.py \
--confirm-license \
--bindir=$(pwd)/prefix/bin \
--destdir=${SITE_PACKAGES}
make -j 2
make install
cd ..
fi
Empty file added malcolm/gui/__init__.py
Empty file.
24 changes: 24 additions & 0 deletions malcolm/gui/attributeitem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from malcolm.core.response import Error, Return
from malcolm.gui.baseitem import BaseItem


class AttributeItem(BaseItem):

def get_value(self):
return str(self.ref.value)

# def get_writeable(self):
#return self.ref.meta.writeable

# def set_value(self, value):
# self._state = self.RUNNING
# request = Request.Put(None, None, self.endpoint, value)
# return request

def handle_response(self, response):
if isinstance(response, Error):
self._state = self.ERROR
elif isinstance(response, Return):
self._state = self.IDLE
else:
raise TypeError(type(response))
72 changes: 72 additions & 0 deletions malcolm/gui/baseitem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from PyQt4.Qt import QStyle, QApplication


class BaseItem(object):
IDLE = "Idle"
RUNNING = "Running"
ERROR = "Error"
CHANGED = "Changed"
icons = {
IDLE: QStyle.SP_FileDialogInfoView,
RUNNING: QStyle.SP_BrowserReload,
ERROR: QStyle.SP_MessageBoxCritical,
CHANGED: QStyle.SP_FileDialogStart,
}
# map endpoint -> BlockItem
items = {}

def __init__(self, endpoint, ref):
# The Block or Method or Attribute or AttributeMeta ref
self.ref = ref
# parent BlockItem
self.parent_item = None
# any BlockItem children
self.children = []
# endpoint list for this node
self.endpoint = tuple(endpoint)
# add to items
self.items[self.endpoint] = self
# current state
self._state = self.IDLE

def get_icon(self):
icon = self.icons[self.get_state()]
return QApplication.style().standardIcon(icon)

def get_label(self):
return self.endpoint[-1]

def get_value(self):
return None

def get_writeable(self):
return False

def get_state(self):
return self._state

def parent_row(self):
if self.parent_item:
assert self in self.parent_item.children, \
"%s is not in %s" % (self, self.parent_item.children)
return self.parent_item.children.index(self)
return 0

def add_child(self, item):
item.parent_item = self
self.children.append(item)
self.items[item.endpoint] = item

def remove_child(self, item):
self.children.remove(item)
self.items.pop(item.endpoint)

def ref_children(self):
return 0

def create_children(self):
return

def set_value(self, value):
raise NotImplementedError()

20 changes: 20 additions & 0 deletions malcolm/gui/blockgui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from PyQt4.Qt import QTreeView, QSize

from malcolm.gui.blockmodel import BlockModel
from malcolm.gui.delegate import Delegate


class BlockGui(QTreeView):

def __init__(self, process, block_name):
QTreeView.__init__(self)
model = BlockModel(process, block_name)
self.setModel(model)
self.setColumnWidth(0, 160)
self.setColumnWidth(1, 180)
self.setColumnWidth(2, 25)
self.resize(QSize(370, 800))
self.setItemDelegateForColumn(1, Delegate())
self.setEditTriggers(self.AllEditTriggers)
self.show()

39 changes: 39 additions & 0 deletions malcolm/gui/blockitem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from malcolm.gui.baseitem import BaseItem
from malcolm.gui.methoditem import MethodItem
from malcolm.gui.attributeitem import AttributeItem


class BlockItem(BaseItem):

def _get_group_name(self, attr):
tags = getattr(attr, "tags", [])
groups = [x for x in tags if x.startswith("group:")]
if groups:
group_name = groups[0][len("group:"):]
return group_name

def ref_children(self):
"""Number of child objects our ref has"""
nchildren = 0
for attr in self.ref.attributes.values():
# check for group, otherwise put it in place
if self._get_group_name(attr) is None:
nchildren += 1
nchildren += len(self.ref.methods)
return nchildren

def create_children(self):
for name, attr in self.ref.attributes.items():
item = AttributeItem(self.endpoint + (name,), attr)
group_name = self._get_group_name(attr)
if group_name is None:
parent_item = self
else:
parent_endpoint = self.endpoint + (group_name,)
parent_item = self.items[parent_endpoint]
parent_item.add_child(item)
item.create_children()
for name, method in self.ref.methods.items():
item = MethodItem(self.endpoint + (name,), method)
self.add_child(item)
item.create_children()
Loading

0 comments on commit ba32798

Please sign in to comment.