diff options
Diffstat (limited to 'languages/python/app_templates/pyqt/app.py')
-rw-r--r-- | languages/python/app_templates/pyqt/app.py | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/languages/python/app_templates/pyqt/app.py b/languages/python/app_templates/pyqt/app.py new file mode 100644 index 00000000..ede8dc54 --- /dev/null +++ b/languages/python/app_templates/pyqt/app.py @@ -0,0 +1,271 @@ +#!/usr/bin/env python + +############################################################################# +# %{APPNAME} - PyQT application template for KDevelop +# +# Translated from C++ qmakeapp.cpp +# (qmakeapp.cpp - Copyright (C) 1992-2002 Trolltech AS. All rights reserved.) +# +# This file is part of an example program for Qt. This example +# program may be used, distributed and modified without limitation. +# +############################################################################# + +import sys +import os.path +from qt import * + +import documentdetails + +false = 0 +true = 1 + +def load_QPixMap(fileName): + f = open(os.path.join(sys.path[0],fileName),"r") + result = QPixmap(f.readlines()) + f.close() + return result + +class %{APPNAME}(QMainWindow): + """An application called %{APPNAME}.""" + + def __init__(self): + QMainWindow.__init__(self, None, "%{APPNAME}") + self.initIcons() + self.setup() + self.initPrinter() + self.initToolBar() + self.initMenu() + self.initMainWidget() + self.setCaption(self.appTitle) + + def setup(self): + + self.appTitle = "%{APPNAME} - PyQT Application Example" + + self.menu = [ + ('&File', + [('&New', self.slotNewFile), + ('&Open...', self.slotOpenFile, self.openIcon), + ('&Save', self.slotSaveFile, self.saveIcon), + ('Save &as...', self.slotSaveAs), + ('&Print...', self.slotPrint, self.printIcon), + ('&Edit details...', self.slotEditDetails), + (None,)]), + ('&Help', + [('&About', self.slotAbout), + ('About &QT', self.slotAboutQT), + (None, ), + ('What\'s this', self.slotWhatsThis)]) + ] + + self.toolbar = [ + ("filetools", "file operations", "File Operations", + [("fileopen", + (self.openIcon, "open file", "Open File", self.slotOpenFile), + "<p>Click this button to open a <em>new file</em>. <br>" + \ + "You can also select the <b>Open</b> command " + \ + "from the <b>File</b> menu.</p>"), + ("filesave", + (self.saveIcon, "save file", "Save File", self.slotSaveFile), + "<p>Click this button to save the file you " + \ + "are editing. You will be prompted for a file name.\n" + \ + "You can also select the <b>Save</b> command " + \ + "from the <b>File</b> menu.</p>"), + ("fileprint", + (self.printIcon, "print file", "Print File", self.slotPrint), + "Click this button to print the file you " + \ + "are editing.\n You can also select the Print " + \ + "command from the File menu." + )])] + + self.fileName = "" + + + def initMainWidget(self): + self.editor = QTextEdit(self, "editor") + self.editor.setFocus() + self.setCentralWidget(self.editor) + self.statusBar().message("Ready", 2000) + self.resize(450,600) + + def initPrinter(self): + self.printer = QPrinter() + + def initIcons(self): + self.openIcon = QIconSet( load_QPixMap("fileopen.pyxpm")) + self.saveIcon = QIconSet( load_QPixMap("filesave.pyxpm")) + self.printIcon = QIconSet( load_QPixMap("fileprint.pyxpm")) + + def initToolBar(self): + + self.toolbars = {} + for (toolBarID, toolBarName, toolBarDescr, toolBarButtons) in self.toolbar: + self.toolbars[toolBarID] = QToolBar(self, toolBarName) + self.toolbars[toolBarID].setLabel(toolBarDescr) + for (buttonID, (buttonIcon, buttonName, buttonText, buttonSlot), whatsThisText) in toolBarButtons: + toolButton = QToolButton(buttonIcon, buttonText, "", buttonSlot, self.toolbars[toolBarID], buttonName) + QWhatsThis.add( toolButton, whatsThisText ) + self.whatsThisButton = QWhatsThis.whatsThisButton(self.toolbars[toolBarID]) + + + def initMenu(self): + + for (menuName, subMenu) in self.menu: + menu = QPopupMenu(self) + self.menuBar().insertItem( menuName, menu ) + for menuOption in subMenu: + if len(menuOption)==1: + menu.insertSeparator() + elif len(menuOption)==2: + menu.insertItem( menuOption[0], menuOption[1] ) + elif len(menuOption)==3: + menu.insertItem( menuOption[2], \ + menuOption[0], \ + menuOption[1] ) + + + + def slotNewFile(self): + ed = %{APPNAME}() + ed.setCaption(self.appTitle) + ed.show() + + def slotOpenFile(self): + fileName = str(QFileDialog.getOpenFileName("", "", self)) + print fileName + if not fileName=="": + self.load(fileName) + else: + self.statusBar().message("Loading aborted", 2000) + + def slotSaveFile(self): + if self.fileName=="": + self.saveAs() + return + self.save() + + + def slotSaveAs(self): + pass + + def slotPrint(self): + margin = 10 + pageno = 1 + if self.printer.setup(self): + self.statusBar().message("Printing..."); + p = QPainter() + if not p.begin(self.printer): return + + p.setFont( self.editor.font() ) + yPos = 0 + fontMetrics = p.fontMetrics() + metrics = QPaintDeviceMetrics(self.printer) + for i in range(self.editor.lines()): + if margin + yPos > metrics.height() - margin: + pageNo += 1 + self.statusBar().message("Printing (page " + pageNo + ")...") + self.printer.newPage() + yPos = 0 + p.drawText( margin, margin+yPos, \ + metrics.width(), \ + fontMetrics.lineSpacing(), \ + QPainter.ExpandTabs | QPainter.DontClip, \ + self.editor.text(i) ) + yPos += fontMetrics.lineSpacing() + p.end() + self.statusBar().message("Printing completed", 2000) + else: + self.statusBar().message("Printing aborted", 2000) + + def slotClose(self): + pass + + def slotQuit(self): + pass + + def slotEditDetails(self): + docDet = documentdetails.documentDetails(self) + docDet.show() + + def slotWhatsThis(self): + self.whatsThis() + + def slotAbout(self): + QMessageBox.about(self, self.appTitle, \ + "This example demonstrates the simple use of\n" + \ + "QMainWindow, QMenuBar and QToolBar using QT\n" + \ + "and Python.") + + def slotAboutQT(self): + QMessageBox.aboutQt(self, self.appTitle) + + def load(self,fileName): + f = open(fileName,"r") + if f: + self.editor.setText( f.read() ) + self.editor.setModified(false) + self.setCaption(fileName) + self.statusBar().message("Loaded document " + fileName, 2000) + self.fileName = fileName + else: + self.statusBar().message("Could not load " + fileName, 5000) + return + + def saveAs(self): + fileName = str(QFileDialog.getSaveFileName(None, None, self)) + if fileName!="": + self.fileName = fileName + self.save() + else: + self.statusBar().message("Saving aborted", 2000) + + def save(self): + if self.fileName=="": + self.saveAs() + return + text = str(self.editor.text()) + try: + f = open(self.fileName, "w") + f.write(text) + except: + self.statusBar().message("Could not write to " + self.fileName) + f.close() + return + f.close() + self.editor.setModified(false) + self.setCaption(self.fileName) + self.statusBar().message( "File " + self.fileName + " saved", 2000) + + def closeEvent(self, closeEvent): + if not self.editor.isModified(): + closeEvent.accept() + return + + yesNoCancel = QMessageBox.information(self, self.appTitle, + "Do you want to save the changes\n" + \ + "to the document?", \ + "Yes", "No", "Cancel", + 0, 1) + if yesNoCancel == 0: + self.save() + closeEvent.accept() + elif yesNoCancel == 1: + closeEvent.accept() + else: + closeEvent.ignore() + + + + +def main(args): + app=QApplication(args) + mainWindow = %{APPNAME}() + mainWindow.show() + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + app.exec_loop() + + + +if __name__ == "__main__": + main(sys.argv) |