# ----------------------------------------------------------------------------
# This file is part of qarbon (http://qarbon.rtfd.org/)
#
# Copyright (c) 2013 European Synchrotron Radiation Facility, Grenoble, France
#
# Distributed under the terms of the GNU Lesser General Public License,
# either version 3 of the License, or (at your option) any later version.
# See LICENSE.txt for more info.
# ----------------------------------------------------------------------------
"""A X11 widget that may run any command and an XTermWidget runs a xterm.
.. note:: this widget only works on X11 systems.
Example::
from qarbon.external.qt import QtGui
from qarbon.qt.gui.application import Application
from qarbon.qt.gui.x11terminal import XTermWindow
app = Application()
term = XTermWindow()
term.start()
term.show()
app.exec_()"""
__all__ = ["XCommandWidget", "XTermWidget",
"XCommandWindow", "XTermWindow"]
import weakref
from qarbon import log
from qarbon.external.qt import QtCore, QtGui
from qarbon.qt.gui.application import Application
from qarbon.qt.gui.action import Action
from qarbon.qt.gui.icon import Icon
[docs]class XCommandWindow(QtGui.QMainWindow):
"""The QMainWindow version of :class:`XCommandWidget`.
Example::
from qarbon.external.qt import QtGui
from qarbon.qt.gui.application import Application
from qarbon.qt.gui.x11 import XCommandWindow
app = Application()
w = XCommandWindow()
w.command = 'xterm'
w.winIdParam = '-into'
w.start()
w.show()
app.exec_()"""
Widget = XCommandWidget
def __init__(self, **kwargs):
parent = kwargs.pop('parent', None)
flags = kwargs.pop('flags', QtCore.Qt.WindowFlags())
super(XCommandWindow, self).__init__(parent=parent, flags=flags)
x11 = self.Widget(parent=self, **kwargs)
self.setCentralWidget(x11)
toolBar = self.addToolBar("Actions")
self.__actionsToolBar = weakref.ref(toolBar)
self.__restartAction = Action("Restart", parent=self,
icon=Icon("view-refresh"),
tooltip="restart the current command",
triggered=self.restart)
toolBar.addAction(self.__restartAction)
[docs] def start(self, wait=0):
self.XWidget().start(wait=wait)
[docs] def restart(self, wait=0):
self.XWidget().restart(wait=wait)
[docs] def terminate(self, wait=0):
self.XWidget().terminate(wait=wait)
[docs] def getCommand(self):
return self.XWidget().command
[docs] def setCommand(self, command):
self.XWidget().command = command
[docs] def resetCommand(self):
self.XWidget().resetCommand()
[docs] def getWinIdParam(self):
return self.XWidget().winIdParam
[docs] def setWinIdParam(self, winIdParam):
self.XWidget().winIdParam = winIdParam
[docs] def resetWinIdParam(self):
self.XWidget().resetWinIdParam()
[docs] def setExtraParams(self, params):
self.XWidget().extraParams = params
[docs] def getExtraParams(self):
return self.XWidget().extraParams
[docs] def resetExtraParams(self):
self.XWidget().resetExtraParams()
[docs] def setAutoRestart(self, yesno):
self.XWidget().autoRestart = yesno
[docs] def getAutoRestart(self):
return self.XWidget().autoRestart
[docs] def resetAutoRestart(self):
self.XWidget().resetAutoRestart()
[docs] def setWorkingDirectory(self, wd):
self.XWidget().workingDirectory = wd
[docs] def getWorkingDirectory(self):
return self.XWidget().workingDirectory
command = QtCore.Property(str, getCommand, setCommand, resetCommand)
winIdParam = QtCore.Property(str, getWinIdParam, setWinIdParam,
resetWinIdParam)
extraParams = QtCore.Property("QStringList", getExtraParams,
setExtraParams, resetExtraParams)
autoRestart = QtCore.Property(bool, getAutoRestart, setAutoRestart,
resetAutoRestart)
workingDirectory = QtCore.Property(str, getWorkingDirectory,
setWorkingDirectory)
[docs]class XTermWindow(XCommandWindow):
"""The QMainWindow version of :class:`XTermWidget`
from qarbon.external.qt import QtGui
from qarbon.qt.gui.application import Application
from qarbon.qt.gui.x11 import XTermWidget
app = Application()
term = XTermWindow()
term.start()
term.show()
app.exec_()"""
Widget = XTermWidget
def main():
log.initialize(log_level='debug')
app = Application()
w = XTermWindow()
w.extraParams = ["-e", "ipython"]
w.start()
w.show()
app.exec_()
if __name__ == "__main__":
main()