summaryrefslogtreecommitdiffstats
path: root/python/pykde/examples/uikmdi.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pykde/examples/uikmdi.py')
-rw-r--r--python/pykde/examples/uikmdi.py203
1 files changed, 0 insertions, 203 deletions
diff --git a/python/pykde/examples/uikmdi.py b/python/pykde/examples/uikmdi.py
deleted file mode 100644
index 3a213bc8..00000000
--- a/python/pykde/examples/uikmdi.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/env python
-"""
-This is a rough Python translation of the ideas presented in this KMDI tutorial:
-
- http://web.tiscali.it/andreabergia/kmditutorial.html
-
-What does work:
-
- IDEAlMode - yay!
-
- Adding and closing child views
-
- Two-way syncing between a tool widget and a matching child view
-
-All is not rosy, however:
-
- Instances of the KmdiExample maintain a dictionary of child views. Values
- cannot be deleted from this dictionary during a window close (causes an
- immediate segfault).
-
- Child views created after initialization aren't numbered correctly; given
- the first problem, it's harder to do this than it's really worth.
-
- The example segfaults at shutdown if the tool (on the left) is is open but
- is not in overlap-mode.
-
-"""
-import os
-import sys
-
-from qt import SIGNAL, QVBoxLayout, QLabel
-from kdecore import i18n, KAboutData, KApplication, KGlobal, KIcon, KCmdLineArgs
-from kdeui import KDockWidget, KListBox, KStdAction
-
-try:
- from kmdi import KMdi, KMdiMainFrm, KMdiChildView
-except (ImportError, ):
- print 'Exception importing KMDI; check your PyKDE installation'
- sys.exit(1)
-
-
-sigChildCloseRequest = SIGNAL('childWindowCloseRequest(KMdiChildView *)')
-sigChildViewActivated = SIGNAL('viewActivated(KMdiChildView *)')
-sigBoxSelectionChanged = SIGNAL('selectionChanged(QListBoxItem *)')
-
-
-def getIcon(name, group=KIcon.NoGroup, size=KIcon.SizeSmall):
- """ returns a kde icon by name
-
- """
- return KGlobal.instance().iconLoader().loadIcon(name, group, size)
-
-
-class KmdiExample(KMdiMainFrm):
- """ KmdiExample(parent=None) -> an example KMdiMainFrm window
-
- """
- uifilebase = 'uikmdi.rc'
- viewIcons = ('network', 'email', 'stop', 'back', 'forward', )
- toolIcons = ('view_icon', 'configure')
-
- def __init__(self, parent=None):
- KMdiMainFrm.__init__(self, parent, 'KmdiExample', KMdi.IDEAlMode)
-
- xmlfile = os.path.join('.', self.uifilebase)
- self.setXMLFile(os.path.abspath(xmlfile))
- actions = self.actionCollection()
- self.openNewAction = KStdAction.openNew(self.newView, actions)
- self.quitAction = KStdAction.quit(self.close, actions)
- self.closeAction = KStdAction.close(self.closeActiveChild, actions)
- self.createGUI(None)
- self.statusBar()
- self.resize(400, 300)
-
- self.tools = {}
- for idx, ico in enumerate(self.toolIcons):
- wid = KListBox(self, 'list%s' % idx)
- self.makeTool(wid, 'Tool %s' % idx, ico)
- ## smells
- self.mainToolWidget = maintool = self.tools['Tool 0'][0]
-
- self.childs = {}
- for idx, ico in enumerate(self.viewIcons):
- self.makeView('View %s' % idx, ico, ico)
-
-
- self.connect(self, sigChildViewActivated, self.activatedMessage)
- self.connect(self, sigChildViewActivated, self.syncFromChildView)
- self.connect(maintool, sigBoxSelectionChanged, self.syncFromMainTool)
- self.syncFromChildView(self.activeWindow())
-
-
- def syncFromMainTool(self, item):
- """ activate the view that matches the item text
-
- """
- try:
- self.activateView(self.findWindow(item.text()))
- except (RuntimeError, ):
- pass
-
- def syncFromChildView(self, child):
- """ sync the main tool to the indicated child
-
- """
- maintool = self.mainToolWidget
- item = maintool.findItem(child.tabCaption())
- if item:
- maintool.setSelected(item, True)
-
- def makeTool(self, widget, caption, icon, percent=50):
- """ makes a tool from the widget
-
- """
- tip = i18n('%s Tool Tip' % caption)
- dock = KDockWidget.DockLeft
- maindock = self.getMainDockWidget()
- widget.setIcon(getIcon(icon))
- tool = self.addToolWindow(widget, dock, maindock, percent, tip, caption)
- self.tools[caption] = (widget, tool)
-
- def makeView(self, label, icon, text):
- """ makes a child view with a text label and a pixmap label
-
- """
- view = KMdiChildView(label, self)
- self.childs[label] = view
- view.setIcon(getIcon(icon))
- layout = QVBoxLayout(view)
- layout.setAutoAdd(True)
-
- lbl = i18n('Label for a view with an icon named %s' % text)
- lbl = QLabel(lbl, view)
- pxm = QLabel('', view)
- pxm.setPixmap(getIcon(icon, size=KIcon.SizeLarge))
-
- self.addWindow(view)
- self.mainToolWidget.insertItem(label)
- self.connect(view, sigChildCloseRequest, self.closeChild)
-
- def removeMainToolItem(self, view):
- """ remove item from the main list tool that corresponds to the view
-
- """
- maintool = self.mainToolWidget
- maintool.takeItem(maintool.findItem(view.tabCaption(), 0))
-
- def newView(self):
- """ make a view when the user invokes the new action
-
- """
- self.makeView('View %s' % len(self.childs), 'network', 'A Fresh View')
- self.syncFromChildView(self.activeWindow())
-
- def closeActiveChild(self):
- """ close the current view
-
- """
- self.removeMainToolItem(self.activeWindow())
- self.closeActiveView()
- self.syncFromChildView(self.activeWindow())
-
- def closeChild(self, which):
- """ called to close a view from its tab close button
-
- """
- try:
- caption = which.tabCaption()
- except (AttributeError, ):
- ## probably None; bug in kmdi?
- return
- self.removeMainToolItem(which)
- which.close()
- self.statusBar().message(i18n('%s closed' % caption))
- self.syncFromChildView(self.activeWindow())
-
- def activatedMessage(self, view):
- """ updates the status bar with the caption of the current view
-
- """
- try:
- self.statusBar().message(i18n('%s activated' % view.tabCaption()))
- except (RuntimeError, ):
- ## sometimes the status bar or the current object is already gone...
- pass
-
-
-if __name__ == '__main__':
- aname = 'PyKDE KMDI Sample'
- desc = 'A Simple PyKDE KMDI Sample'
- ver = '1.0'
- lic = KAboutData.License_GPL
- author = 'Troy Melhase'
- authormail = 'troy@gci.net'
-
- about = KAboutData(aname, aname, ver, desc, lic, '%s (c) 2004' % authormail)
- about.addAuthor(author, 'hi, mom!', authormail)
- about.addAuthor ('Jim Bublitz', 'For PyKDE', 'jbublitz@nwinternet.com')
- KCmdLineArgs.init(sys.argv, about)
- app = KApplication()
- mainWindow = KmdiExample()
- mainWindow.show()
- app.exec_loop()