You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pytde/examples/uiqxembed.py

120 lines
3.5 KiB

#!/usr/bin/env python
"""
"""
import sys
from python_tqt.qt import TQIconSet, TQProcess, TQTimer, SIGNAL, SLOT
from tdecore import TDEAboutData, TDEApplication, TDECmdLineArgs, TDEGlobal, TDEIcon
from tdecore import KWin, KWinModule
from tdeui import KComboBox, TDEMainWindow, KPushButton, QXEmbed
## add the missing items to the pyuic-generated module
import qxembedexample
qxembedexample.KComboBox = KComboBox
qxembedexample.KPushButton = KPushButton
from qxembedexample import QXEmbedExample
def getIcon(name, group=TDEIcon.NoGroup, size=TDEIcon.SizeSmall):
""" returns a kde icon by name
"""
return TDEGlobal.instance().iconLoader().loadIcon(name, group, size)
def getIconSet(name, group=TDEIcon.NoGroup, size=TDEIcon.SizeSmall):
""" returns a kde icon set by name
"""
return TDEGlobal.instance().iconLoader().loadIconSet(name, group, size)
def getWindow(pid):
""" return a window info object for the process id (or None)
"""
for winid in KWinModule().windows():
info = KWin.info(winid)
if pid == info.pid:
return info
class ExampleForm(QXEmbedExample):
""" wraps the pyuic generated form class with our behavior
"""
def __init__(self, parent):
QXEmbedExample.__init__(self, parent)
combo = self.appNameCombo
items = [(idx, '%s' % combo.text(idx)) for idx in range(combo.count())]
for idx, name in items:
combo.changeItem(getIcon(name), name, idx)
self.mainTabs.setTabIconSet(self.tab, getIconSet('help'))
self.launchButton.setIconSet(getIconSet('exec'))
self.launchButton.setText('Launch and Embed')
def launchApp(self):
""" launch the process selected in the combo
"""
name = self.appNameCombo.currentText()
self.proc = proc = TQProcess()
proc.addArgument(name)
code = proc.start()
if code:
pid = proc.processIdentifier()
self.launchPid = pid ## cheap
TQTimer.singleShot(2000, self.embedLaunchedWindow)
else:
print 'failed to start %s' % name
return
def embedLaunchedWindow(self):
""" embed the window of the last launched pid
"""
pid = self.launchPid
winobj = getWindow(pid)
if winobj:
tabs = self.mainTabs
embedded = QXEmbed(self)
caption = '%s (%s)' % (winobj.name, pid, )
tabs.insertTab(embedded, caption)
embedded.embed(winobj.win)
tabs.showPage(embedded)
pxm = KWin.icon(winobj.win)
tabs.setTabIconSet(embedded, TQIconSet(pxm))
class ExampleMain(TDEMainWindow):
""" an example main window
"""
def __init__ (self, *args):
TDEMainWindow.__init__(self, *args)
self.setGeometry(0, 0, 400, 400)
self.embed = embed = ExampleForm(self)
self.setCentralWidget(embed)
if __name__ == '__main__':
aname = 'PyKDE QXEmbed Sample'
desc = 'A Simple PyKDE QXEmbed Sample'
ver = '1.0'
lic = TDEAboutData.License_GPL
author = 'Troy Melhase'
authormail = 'troy@gci.net'
about = TDEAboutData(aname, aname, ver, desc, lic, '%s (c) 2004' % authormail)
about.addAuthor(author, 'hi, mom!', authormail)
about.addAuthor ('Jim Bublitz', 'For PyKDE', 'jbublitz@nwinternet.com')
TDECmdLineArgs.init(sys.argv, about)
app = TDEApplication()
mainWindow = ExampleMain()
mainWindow.show()
app.connect(app, SIGNAL('lastWindowClosed()'), app, SLOT('quit()'))
app.exec_loop()