summaryrefslogtreecommitdiffstats
path: root/python/pyqt/examples2/menu.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyqt/examples2/menu.py')
-rwxr-xr-xpython/pyqt/examples2/menu.py301
1 files changed, 301 insertions, 0 deletions
diff --git a/python/pyqt/examples2/menu.py b/python/pyqt/examples2/menu.py
new file mode 100755
index 00000000..36efffa8
--- /dev/null
+++ b/python/pyqt/examples2/menu.py
@@ -0,0 +1,301 @@
+#!/usr/bin/env python
+
+#****************************************************************************
+#** $Id$
+#**
+#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved.
+#**
+#** This file is part of an example program for PyQt. This example
+#** program may be used, distributed and modified without limitation.
+#**
+#*****************************************************************************/
+
+import sys, string
+from qt import *
+
+TRUE = 1
+FALSE = 0
+
+# XPM
+p1_xpm = [
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFFFFFF0000",
+" ",
+" ",
+" .... ",
+" .XXXX. ",
+" .............. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .............. ",
+" "
+]
+
+# XPM
+p2_xpm = [
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFFFFFFFFFF",
+" ",
+" ...... ",
+" .XXX.X. ",
+" .XXX.XX. ",
+" .XXX.XXX. ",
+" .XXX..... ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" ......... ",
+" ",
+" "
+]
+
+# XPM
+p3_xpm = [
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFFFFFFFFFF",
+" ",
+" ",
+" ......... ",
+" ........... ",
+" ........ .. ",
+" ........... ",
+" ........... ",
+" ........... ",
+" ........... ",
+" ...XXXXX... ",
+" ...XXXXX... ",
+" ...XXXXX... ",
+" ...XXXXX... ",
+" ......... ",
+" ",
+" "
+]
+
+p4_xpm = [
+' 16 14 5 1',
+'. c #000000',
+'# c #848284',
+'a c #c6c3c6',
+'b c #ffff00',
+'c c #ffffff',
+'aaaaa.........aa',
+'aaaa.cccccccc.aa',
+'aaaa.c.....c.aaa',
+'aaa.cccccccc.aaa',
+'aaa.c.....c....a',
+'aa.cccccccc.a.a.',
+'a..........a.a..',
+'.aaaaaaaaaa.a.a.',
+'.............aa.',
+'.aaaaaa###aa.a.a',
+'.aaaaaabbbaa...a',
+'.............a.a',
+'a.aaaaaaaaa.a.aa',
+'aa...........aaa'
+]
+
+# Auxiliary class to provide fancy menu items with different fonts.
+# Used for the "bold" and "underline" menu items in the options menu.
+
+#class MyMenuItem( QCustomMenuItem ):
+# def __init__( self, s=None, f=None ):
+# apply( QCustomMenuItem.__init__,( self, s, f ) )
+# string = QString( s )
+# font = QFont( f )
+
+# def paint( self, p, TRUE, FALSE, x, y, w, h ) :
+# p.setFont ( font )
+# p.drawText( x, y, w, h, Qt.AlignLeft | Qt.AlignVCenter | Qt.ShowPrefix | Qt.DontClip, string )
+# def sizeHint( self ):
+# return QFontMetrics( font ).size( Qt.AlignLeft | Qt.AlignVCenter | Qt.ShowPrefix | Qt.DontClip, string )
+
+
+#
+### Implementation of MenuExample class
+#
+
+class MenuExample( QWidget ):
+ def __init__( self, parent=None, name=None ):
+ apply( QWidget.__init__,(self, parent, name) )
+ self.p1 = QIconSet( QPixmap ( p1_xpm ) )
+ self.p2 = QIconSet( QPixmap ( p2_xpm ) )
+ self.p3 = QIconSet( QPixmap ( p3_xpm ) )
+ self.p4 = QIconSet( QPixmap ( p4_xpm ) )
+ #openIcon = QPixmap()
+ #saveIcon = QPixmap()
+ #printIcon = QPixmap()
+
+ self.printer = QPopupMenu( self )
+ #CHECK_PTR( self.printer )
+ self.printer.insertTearOffHandle()
+ self.printer.insertItem( "&Print to printer", self.printDoc )
+ self.printer.insertItem( "Print to &file", self.file )
+ self.printer.insertItem( "Print to fa&x", self.fax )
+ self.printer.insertSeparator()
+ self.printer.insertItem( "Printer &Setup", self.printerSetup )
+
+ self.file = QPopupMenu( self )
+ #CHECK_PTR( self.file );
+ self.file.insertItem( self.p1, "&Open", self.open, Qt.CTRL+Qt.Key_O )
+ self.file.insertItem( self.p2, "&New", self.news, Qt.CTRL+Qt.Key_N )
+ self.file.insertItem( self.p3, "&Save", self.save, Qt.CTRL+Qt.Key_S )
+ self.file.insertItem( "&Close", self.closeDoc, Qt.CTRL+Qt.Key_W )
+ self.file.insertSeparator()
+ self.file.insertItem( self.p4, "&Print", self.printer, Qt.CTRL+Qt.Key_P )
+ self.file.insertSeparator()
+ self.file.insertItem( "E&xit", qApp, SLOT( "quit()" ), Qt.CTRL+Qt.Key_Q )
+
+ self.edit = QPopupMenu( self )
+ #CHECK_PTR( self.edit )
+ undoID = self.edit.insertItem( "&Undo", self.undo )
+ redoID = self.edit.insertItem( "&Redo", self.redo )
+ self.edit.setItemEnabled( undoID, TRUE )
+ self.edit.setItemEnabled( redoID, FALSE )
+
+ self.options = QPopupMenu( self )
+ #CHECK_PTR( self.options )
+ self.options.insertTearOffHandle()
+ self.options.setCaption( 'Options' )
+ self.options.insertItem( "&Normal Font", self.normal )
+ self.options.insertSeparator()
+
+ self.options.polish() # adjust system settings
+ self.f = QFont( self.options.font() )
+ self.f.setBold( TRUE )
+ self.boldID = self.options.insertItem( "&Bold" )
+ self.options.setAccel( Qt.CTRL+Qt.Key_B, self.boldID )
+ self.options.connectItem( self.boldID, self.bold )
+
+ self.f = QFont( self.options.font() )
+ self.f.setUnderline( TRUE )
+ self.underlineID = self.options.insertItem( "&Underline" )
+ self.options.setAccel( Qt.CTRL+Qt.Key_U, self.underlineID )
+ self.options.connectItem( self.underlineID, self.underline )
+
+ self.isBold = FALSE
+ self.isUnderline = FALSE
+ self.options.setCheckable( TRUE )
+
+ self.options = QPopupMenu()
+ #CHECK_PTR( self.options )
+ self.options.insertItem( "&Normal Font", self.normal )
+ self.options.insertSeparator()
+ self.boldID = self.options.insertItem( "&Bold", self.bold )
+ self.underlineID = self.options.insertItem( "&Underline", self.underline )
+
+ self.isBold = FALSE
+ self.isUnderline = FALSE
+ self.options.setCheckable( TRUE )
+
+ self.help = QPopupMenu( self )
+ #CHECK_PTR( self.help )
+ self.help.insertItem( "&About", self.about, Qt.CTRL+Qt.Key_H )
+ self.help.insertItem( "About &Qt", self.aboutQt )
+
+ self.menu = QMenuBar( self )
+ #CHECK_PTR( self.menu );
+ self.menu.insertItem( "&File", self.file )
+ self.menu.insertItem( "&Edit", self.edit )
+ self.menu.insertItem( "&Options", self.options )
+ self.menu.insertSeparator()
+ self.menu.insertItem( "&Help", self.help )
+ self.menu.setSeparator( QMenuBar.InWindowsStyle )
+
+ self.label = QLabel( self )
+ #CHECK_PTR( self.label )
+ self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 )
+ self.label.setFrameStyle( QFrame.Box | QFrame.Raised )
+ self.label.setLineWidth( 1 )
+ self.label.setAlignment( Qt.AlignCenter )
+
+ self.label.setFont( QFont( "times", 12, QFont.Bold ) )
+ self.connect( self, PYSIGNAL( "explain" ), self.label.setText )
+ #self.connect( self, PYSIGNAL( "explain(const char *)" ),
+ # self.label, SLOT( "setText(const char *)" ) )
+
+ self.setMinimumSize( 100, 80 )
+
+ def open( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Open selected", ) )
+
+ def news( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/New selected", ) )
+
+ def save( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Save selected", ) )
+
+ def closeDoc( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Close selected", ) )
+
+ def undo( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "Edit/Undo selected", ) )
+
+ def redo( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "Edit/Redo selected", ) )
+
+ def normal( self ):
+ self.isBold = FALSE
+ self.isUnderline = FALSE
+ self.options.setItemChecked( self.boldID, self.isBold )
+ self.options.setItemChecked( self.underlineID, self.isUnderline )
+ self.emit(PYSIGNAL("explain"), ("Options/Normal selected",))
+
+ def bold( self ):
+ self.isBold = not self.isBold
+ self.options.setItemChecked( self.boldID, self.isBold )
+ self.emit ( PYSIGNAL( "explain" ), ( "Options/Bold selected", ) )
+
+ def underline( self ):
+ self.isUnderline = not self.isUnderline
+ self.options.setItemChecked( self.underlineID, self.isUnderline )
+ self.emit(PYSIGNAL("explain"), ("Options/Underline selected",))
+
+ def about( self ):
+ QMessageBox.about( self, "Qt Menu Example",
+ "This example demonstrates simple use of Qt menus.\n"
+ "You can cut and paste lines from it to your own\n"
+ "programs." )
+
+ def aboutQt( self ):
+ QMessageBox.aboutQt( self, "Qt Menu Example" )
+
+ def printDoc( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Print selected", ) )
+
+ def file( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Print To File selected", ) )
+
+ def fax( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Print To Fax selected", ) )
+
+ def printerSetup( self ):
+ self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Printer Setup selected", ) )
+
+ def resizeEvent( self, ev ):
+ self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 )
+
+a = QApplication( sys.argv )
+m = MenuExample()
+
+a.setMainWidget( m )
+m.setCaption( 'MenuExample' )
+m.show()
+#a.connect( a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()') )
+a.exec_loop()