#!/usr/bin/env python ############################################################################ # # Copyright (C) 2004-2005 Trolltech AS. All rights reserved. # # This file is part of the example classes of the Qt Toolkit. # # This file may be used under the terms of the GNU General Public # License version 2.0 as published by the Free Software Foundation # and appearing in the file LICENSE.GPL included in the packaging of # this file. Please review the following information to ensure GNU # General Public Licensing requirements will be met: # http://www.trolltech.com/products/qt/opensource.html # # If you are unsure which license is appropriate for your use, please # review the following information: # http://www.trolltech.com/products/qt/licensing.html or contact the # sales department at sales@trolltech.com. # # This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE # WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # ############################################################################ import sys from PyQt4 import QtCore, QtGui import dockwidgets_rc class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.textEdit = QtGui.QTextEdit() self.setCentralWidget(self.textEdit) self.createActions() self.createMenus() self.createToolBars() self.createStatusBar() self.createDockWindows() self.setWindowTitle(self.tr("Dock Widgets")) self.newLetter() def newLetter(self): self.textEdit.clear() cursor = self.textEdit.textCursor() cursor.movePosition(QtGui.QTextCursor.Start) topFrame = cursor.currentFrame() topFrameFormat = topFrame.frameFormat() topFrameFormat.setPadding(16) topFrame.setFrameFormat(topFrameFormat) textFormat = QtGui.QTextCharFormat() boldFormat = QtGui.QTextCharFormat() boldFormat.setFontWeight(QtGui.QFont.Bold) italicFormat = QtGui.QTextCharFormat() italicFormat.setFontItalic(True) tableFormat = QtGui.QTextTableFormat() tableFormat.setBorder(1) tableFormat.setCellPadding(16) tableFormat.setAlignment(QtCore.Qt.AlignRight) cursor.insertTable(1, 1, tableFormat) cursor.insertText("The Firm", boldFormat) cursor.insertBlock() cursor.insertText("321 City Street", textFormat) cursor.insertBlock() cursor.insertText("Industry Park") cursor.insertBlock() cursor.insertText("Some Country") cursor.setPosition(topFrame.lastPosition()) cursor.insertText(QtCore.QDate.currentDate().toString("d MMMM yyyy"), textFormat) cursor.insertBlock() cursor.insertBlock() cursor.insertText("Dear ", textFormat) cursor.insertText("NAME", italicFormat) cursor.insertText(",", textFormat) for i in range(3): cursor.insertBlock() cursor.insertText(self.tr("Yours sincerely,"), textFormat) for i in range(3): cursor.insertBlock() cursor.insertText("The Boss", textFormat) cursor.insertBlock() cursor.insertText("ADDRESS", italicFormat) def print_(self): document = self.textEdit.document() printer = QtGui.QPrinter() dlg = QtGui.QPrintDialog(printer, self) if dlg.exec_() != QtGui.QDialog.Accepted: return document.print_(printer) self.statusBar().showMessage(self.tr("Ready"), 2000) def save(self): filename = QtGui.QFileDialog.getSaveFileName(self, self.tr("Choose a file name"), ".", self.tr("HTML (*.html *.htm)")) if filename.isEmpty(): return file = QtCore.QFile(filename) if not file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): QtGui.QMessageBox.warning(self, self.tr("Dock Widgets"), self.tr("Cannot write file %1:\n%2.") .arg(filename) .arg(file.errorString())) return out = QtCore.QTextStream(file) QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) out << self.textEdit.toHtml() QtGui.QApplication.restoreOverrideCursor() self.statusBar().showMessage(self.tr("Saved '%1'").arg(filename), 2000) def undo(self): document = self.textEdit.document() document.undo() def insertCustomer(self, customer): if customer.isEmpty(): return customerList = customer.split(", ") document = self.textEdit.document() cursor = document.find("NAME") if not cursor.isNull(): cursor.beginEditBlock() cursor.insertText(customerList[0]) oldcursor = cursor cursor = document.find("ADDRESS") if not cursor.isNull(): for i in range(1, customerList.count()): cursor.insertBlock() cursor.insertText(customerList[i]) cursor.endEditBlock() else: oldcursor.endEditBlock() def addParagraph(self, paragraph): if paragraph.isEmpty(): return document = self.textEdit.document() cursor = document.find(self.tr("Yours sincerely,")) if cursor.isNull(): return cursor.beginEditBlock() cursor.movePosition(QtGui.QTextCursor.PreviousBlock, QtGui.QTextCursor.MoveAnchor, 2) cursor.insertBlock() cursor.insertText(paragraph) cursor.insertBlock() cursor.endEditBlock() def about(self): QtGui.QMessageBox.about(self, self.tr("About Dock Widgets"), self.tr("The Dock Widgets example demonstrates how to " "use Qt's dock widgets. You can enter your own text, " "click a customer to add a customer name and " "address, and click standard paragraphs to add them.")) def createActions(self): self.newLetterAct = QtGui.QAction(QtGui.QIcon(":/images/new.png"), self.tr("&New Letter"), self) self.newLetterAct.setShortcut(self.tr("Ctrl+N")) self.newLetterAct.setStatusTip(self.tr("Create a new form letter")) self.connect(self.newLetterAct, QtCore.SIGNAL("triggered()"), self.newLetter) self.saveAct = QtGui.QAction(QtGui.QIcon(":/images/save.png"), self.tr("&Save..."), self) self.saveAct.setShortcut(self.tr("Ctrl+S")) self.saveAct.setStatusTip(self.tr("Save the current form letter")) self.connect(self.saveAct, QtCore.SIGNAL("triggered()"), self.save) self.printAct = QtGui.QAction(QtGui.QIcon(":/images/print.png"), self.tr("&Print..."), self) self.printAct.setShortcut(self.tr("Ctrl+P")) self.printAct.setStatusTip(self.tr("Print the current form letter")) self.connect(self.printAct, QtCore.SIGNAL("triggered()"), self.print_) self.undoAct = QtGui.QAction(QtGui.QIcon(":/images/undo.png"), self.tr("&Undo"), self) self.undoAct.setShortcut(self.tr("Ctrl+Z")) self.undoAct.setStatusTip(self.tr("Undo the last editing action")) self.connect(self.undoAct, QtCore.SIGNAL("triggered()"), self.undo) self.quitAct = QtGui.QAction(self.tr("&Quit"), self) self.quitAct.setShortcut(self.tr("Ctrl+Q")) self.quitAct.setStatusTip(self.tr("Quit the application")) self.connect(self.quitAct, QtCore.SIGNAL("triggered()"), self.close) self.aboutAct = QtGui.QAction(self.tr("&About"), self) self.aboutAct.setStatusTip(self.tr("Show the application's About box")) self.connect(self.aboutAct, QtCore.SIGNAL("triggered()"), self.about) self.aboutQtAct = QtGui.QAction(self.tr("About &Qt"), self) self.aboutQtAct.setStatusTip(self.tr("Show the Qt library's About box")) self.connect(self.aboutQtAct, QtCore.SIGNAL("triggered()"), QtGui.qApp, QtCore.SLOT("aboutQt()")) def createMenus(self): self.fileMenu = self.menuBar().addMenu(self.tr("&File")) self.fileMenu.addAction(self.newLetterAct) self.fileMenu.addAction(self.saveAct) self.fileMenu.addAction(self.printAct) self.fileMenu.addSeparator() self.fileMenu.addAction(self.quitAct) self.editMenu = self.menuBar().addMenu(self.tr("&Edit")) self.editMenu.addAction(self.undoAct) self.menuBar().addSeparator() self.helpMenu = self.menuBar().addMenu(self.tr("&Help")) self.helpMenu.addAction(self.aboutAct) self.helpMenu.addAction(self.aboutQtAct) def createToolBars(self): self.fileToolBar = self.addToolBar(self.tr("File")) self.fileToolBar.addAction(self.newLetterAct) self.fileToolBar.addAction(self.saveAct) self.fileToolBar.addAction(self.printAct) self.editToolBar = self.addToolBar(self.tr("Edit")) self.editToolBar.addAction(self.undoAct) def createStatusBar(self): self.statusBar().showMessage(self.tr("Ready")) def createDockWindows(self): dock = QtGui.QDockWidget(self.tr("Customers"), self) dock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea) self.customerList = QtGui.QListWidget(dock) self.customerList.addItems(QtCore.QStringList() << "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton" << "Jane Doe, Memorabilia, 23 Watersedge, Beaton" << "Tammy Shea, Tiblanka, 38 Sea Views, Carlton" << "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal" << "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston" << "Sally Hobart, Tiroli Tea, 67 Long River, Fedula") dock.setWidget(self.customerList) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) dock = QtGui.QDockWidget(self.tr("Paragraphs"), self) self.paragraphsList = QtGui.QListWidget(dock) self.paragraphsList.addItems(QtCore.QStringList() << "Thank you for your payment which we have received today." << "Your order has been dispatched and should be with you " "within 28 days." << "We have dispatched those items that were in stock. The " "rest of your order will be dispatched once all the " "remaining items have arrived at our warehouse. No " "additional shipping charges will be made." << "You made a small overpayment (less than $5) which we " "will keep on account for you, or return at your request." << "You made a small underpayment (less than $1), but we have " "sent your order anyway. We'll add this underpayment to " "your next bill." << "Unfortunately you did not send enough money. Please remit " "an additional $. Your order will be dispatched as soon as " "the complete amount has been received." << "You made an overpayment (more than $5). Do you wish to " "buy more items, or should we return the excess to you?") dock.setWidget(self.paragraphsList) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self.connect(self.customerList, QtCore.SIGNAL("currentTextChanged(const QString&)"), self.insertCustomer) self.connect(self.paragraphsList, QtCore.SIGNAL("currentTextChanged(const QString&)"), self.addParagraph) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) mainwindow = MainWindow() mainwindow.show() sys.exit(app.exec_())