diff -r b2f4646161be -r cb97962a1ae9 qgpib_plotter.py
--- a/qgpib_plotter.py Fri Jan 11 18:50:46 2008 +0100
+++ b/qgpib_plotter.py Wed Jan 16 01:20:02 2008 +0100
@@ -1,34 +1,152 @@
#
-from PyQt4 import QtGui, QtCore
+import os, sys
+
+from PyQt4 import QtGui, QtCore, uic
from PyQt4.QtCore import SIGNAL, Qt
-from gppib_plotter import GPIBplotter
+from gpib_plotter import GPIBplotter
from hpgl_qt import QHPGLPlotterWidget
-ORGANISATION="Logilab"
-APPLICATION="qgpib_plotter"
-def variant(v):
- _cvrts = {1: lambda x:x.toInt(),
- 10: lambda x:unicode(x.toString()),
- }
- t = v.userType()
+form_class, base_class = uic.loadUiType(os.path.join(os.path.dirname(__file__), "qhpgl_plotter.ui"))
+
+from qpreferences import PreferenceItem, AbstractPreferences, PreferencesEditor
+
+class Preferences(AbstractPreferences):
+ ORGANISATION="Logilab"
+ APPLICATION="qgpib_plotter"
-class Preferences(object):
- _defaults = {'device': '/dev/ttyUSB0',
- 'address': 0,
- }
- def __init__(self):
- self._settings = qc.QSettings(qc.QSettings.UserScope,
- ORGANISATION, APPLICATION)
-
- def getPref(self, key):
- val = self._settings.value(key, QtCore.QVariant(self._defaults[key]))
-
-
-class QtHPGLPlotter(QtGui.QMainWindow):
+ device = PreferenceItem('/dev/ttyUSB0', name=u'device', description=u'GPIB device')
+ address = PreferenceItem(5, name=u'GPIB address')
+ _pos = PreferenceItem(basetype=QtCore.QPoint)
+ _size = PreferenceItem(basetype=QtCore.QSize)
+ _appState = PreferenceItem(basetype=QtCore.QByteArray)
+
+class QtHPGLPlotter(QtGui.QMainWindow, form_class):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
- self.gpib_plotter = GPIBplotter(
+ self._plots = {}
+ self._prefs = Preferences()
+ self.setupUi()
+ self.initializeGPIB()
+ if self._prefs._pos:
+ self.move(self._prefs._pos)
+ if self._prefs._size:
+ self.resize(self._prefs._size)
+ if self._prefs._appState:
+ self.restoreState(self._prefs._appState)
+
+ def setupUi(self):
+ form_class.setupUi(self, self) # call qtdesigner generated form creation
+ # actions defined in designer
+ self.connect(self.actionPreferences, SIGNAL('triggered(bool)'),
+ self.preferencesTriggered)
+ self.connect(self.actionQuit, SIGNAL('triggered(bool)'),
+ self.quitTriggered)
+ self.connect(self.actionOpen, SIGNAL('triggered(bool)'),
+ self.openTriggered)
+ self.connect(self.actionSave, SIGNAL('triggered(bool)'),
+ self.saveTriggered)
+ self.connect(self.actionSaveAs, SIGNAL('triggered(bool)'),
+ self.saveAsTriggered)
+
+ self.plotterWidget = QHPGLPlotterWidget(self)
+ self.setCentralWidget(self.plotterWidget)
+
+ self.connect(self.captureButton, SIGNAL("toggled(bool)"),
+ self.captureToggled)
+
+ self._plots_list = QtGui.QStringListModel()
+ self.plotsView.setModel(self._plots_list)
+ self.connect(self.plotsView, SIGNAL('activated(const QModelIndex&)'),
+ self.currentPlotChanged)
+ self.connect(self.plotsView.selectionModel(),
+ SIGNAL('currentChanged(const QModelIndex&, const QModelIndex&)'),
+ self.currentPlotChanged)
+
+ def currentPlotChanged(self, index, old_index=None):
+ if index.isValid():
+ value = unicode(self.plotsView.model().data(index, Qt.DisplayRole).toString())
+
+ #self.plotterWidget = QHPGLPlotterWidget(self)
+ #self.setCentralWidget(self.plotterWidget)
+ self.plotterWidget.clear()
+ self.plotterWidget.parse(self._plots[value])
+
+ def preferencesTriggered(self, checked=False):
+ PreferencesEditor(self._prefs, self).exec_()
+
+ def quitTriggered(self, checked=False):
+ self.close()
+ def closeEvent(self, event):
+ if 1:
+ #if self.promptForSave():
+ self._prefs._pos = self.pos()
+ self._prefs._size = self.size()
+ self._prefs._appState = self.saveState()
+ event.accept()
+ else:
+ event.ignore()
+ def openTriggered(self, checked=False):
+ filenames = QtGui.QFileDialog.getOpenFileNames(self, "Open a HPGL file to display", '.', 'HPGL files (*.plt)\nAll files (*)')
+ for filename in filenames:
+ filename = str(filename)
+ if os.path.exists(filename):
+ data = open(filename).read()
+ name = os.path.basename(filename)
+ name = os.path.splitext(name)[0]
+ lst = self.plotsView.model().stringList()
+ lst.append(name)
+ self._plots[name] = data
+ self.plotsView.model().setStringList(lst)
+ #self.plotsView.setCurrentIndex(self.plotsView.model().index(self.plotsView.model().stringList().count(), 0))
+
+
+
+ def saveTriggered(self, checked=False):
+ print "save"
+ def saveAsTriggered(self, checked=False):
+ print "saveAs"
+
+ def initializeGPIB(self):
+ try:
+ self.gpib_plotter = GPIBplotter(device=self._prefs.device,
+ address=self._prefs.address,
+ )
+ except:
+ self.gpib_plotter = None
+ self._online = False
+ self.setCaptureLed()
+
+ def captureToggled(self, state):
+ if state:
+ if self.gpib_plotter is None:
+ self.initializeGPIB()
+ if self.gpib_plotter is None:
+ QtGui.QMessageBox.critical(self, self.tr("GPIB error"),
+ self.tr("Unable to initialize GPIB connection.
Please check your GPIB dongle and settings."))
+ self._online = False
+ else:
+ # todo
+ self._online = True
+ else:
+ self._online = False
+ self.setCaptureLed()
+
+
+ def setCaptureLed(self):
+ if self._online:
+ icn = QtGui.QIcon(':/icons/led_green.png')
+ else:
+ icn = QtGui.QIcon(':/icons/led_green_off.png')
+ self.captureButton.setIcon(icn)
+ self.captureButton.setChecked(self._online)
+
+if __name__ == '__main__':
+ a = QtGui.QApplication([])
+ w = QtHPGLPlotter()
+ w.show()
+ a.exec_()
+