diff options
Diffstat (limited to 'examples/mdi.py')
| -rwxr-xr-x | examples/mdi.py | 360 | 
1 files changed, 360 insertions, 0 deletions
| diff --git a/examples/mdi.py b/examples/mdi.py new file mode 100755 index 0000000..ca3d33b --- /dev/null +++ b/examples/mdi.py @@ -0,0 +1,360 @@ +#!/usr/bin/env python + +# A simple application. + + +import sys, string +from python_tqt.qt import * + + +fileopen = [ +    '16 13 5 1', +    '. c #040404', +    '# c #808304', +    'a c None', +    'b c #f3f704', +    'c c #f3f7f3', +    'aaaaaaaaa...aaaa', +    'aaaaaaaa.aaa.a.a', +    'aaaaaaaaaaaaa..a', +    'a...aaaaaaaa...a', +    '.bcb.......aaaaa', +    '.cbcbcbcbc.aaaaa', +    '.bcbcbcbcb.aaaaa', +    '.cbcb...........', +    '.bcb.#########.a', +    '.cb.#########.aa', +    '.b.#########.aaa', +    '..#########.aaaa', +    '...........aaaaa' +] + +filesave = [ +    '14 14 4 1', +    '. c #040404', +    '# c #808304', +    'a c #bfc2bf', +    'b c None', +    '..............', +    '.#.aaaaaaaa.a.', +    '.#.aaaaaaaa...', +    '.#.aaaaaaaa.#.', +    '.#.aaaaaaaa.#.', +    '.#.aaaaaaaa.#.', +    '.#.aaaaaaaa.#.', +    '.##........##.', +    '.############.', +    '.##.........#.', +    '.##......aa.#.', +    '.##......aa.#.', +    '.##......aa.#.', +    'b.............' +] + +fileprint = [ +    '16 14 6 1', +    '. c #000000', +    '# c #848284', +    'a c #c6c3c6', +    'b c #ffff00', +    'c c #ffffff', +    'd c None', +    'ddddd.........dd', +    'dddd.cccccccc.dd', +    'dddd.c.....c.ddd', +    'ddd.cccccccc.ddd', +    'ddd.c.....c....d', +    'dd.cccccccc.a.a.', +    'd..........a.a..', +    '.aaaaaaaaaa.a.a.', +    '.............aa.', +    '.aaaaaa###aa.a.d', +    '.aaaaaabbbaa...d', +    '.............a.d', +    'd.aaaaaaaaa.a.dd', +    'dd...........ddd' +] + +document = [ +"12 16 6 1", +"       c #040404", +".      c None", +"X      c white", +"o      c #808304", +"O      c black", +"+      c #f3f7f3", +"       .....", +" XXXXX  ....", +" XXXXX X ...", +" XXXXX XX ..", +" XooXX    O.", +" X+XXX+XXXO.", +" XXXXXXXXXO.", +" XoooXooXXO.", +" XXXXXXXXXO.", +" XXXXXXXXXO.", +" XoXXoooXXO.", +" XXXXXXXXXO.", +"OXXXXXXXXXO.", +"OXXXXXXXXXO.", +"OOOOOOOOOOO.", +"............" +] + +fileOpenText = \ +'''<img source="fileopen"> +Click this button to open a <em>new file</em>.<br><br> +You can also select the <b>Open</b> command from the <b>File</b> menu.''' + +fileSaveText = \ +'''Click this button to save the file you are editing.<br><br> +You will be prompted for a filename.<br><br> +You can also select the <b>Save</b> command from the <b>File</b> menu.''' + +filePrintText = \ +'''Click this button to print the file you are editing.<br><br> +You can also select the <b>Print</b> command from the <b>File</b> menu.''' + +#True=1 +#False=0 + +class ApplicationWindow(TQMainWindow): +    def __init__(self): +        TQMainWindow.__init__(self,None,'example application main window',TQt.WDestructiveClose) + +        self.filename = TQString.null +        self.printer = TQPrinter() + +        self.fileTools = TQToolBar(self,'file operations') + +        openIcon = TQPixmap(fileopen) +        self.fileOpen = TQToolButton(TQIconSet(openIcon),'Open File',TQString.null,self.load,self.fileTools,'open file') + +        saveIcon = TQPixmap(filesave) +        self.fileSave = TQToolButton(TQIconSet(saveIcon),'Save File',TQString.null,self.save,self.fileTools,'save file') +        printIcon = TQPixmap(fileprint) +        self.filePrint = TQToolButton(TQIconSet(printIcon),'Print File',TQString.null,self.printDoc,self.fileTools,'print file') + +        TQWhatsThis.whatsThisButton(self.fileTools) + +        TQWhatsThis.add(self.fileOpen,fileOpenText) +        TQMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon) +        TQWhatsThis.add(self.fileSave,fileSaveText) +        TQWhatsThis.add(self.filePrint,filePrintText) + +        self.file = TQPopupMenu(self) +        self.menuBar().insertItem('&File',self.file) + +        self.file.insertItem('&New',self.newDoc,TQt.CTRL + TQt.Key_N) + +        id = self.file.insertItem(TQIconSet(openIcon),'&Open',self.load,TQt.CTRL + TQt.Key_O) +        self.file.setWhatsThis(id,fileOpenText) + +        id = self.file.insertItem(TQIconSet(saveIcon),'&Save',self.save,TQt.CTRL + TQt.Key_S) +        self.file.setWhatsThis(id,fileSaveText) + +        id = self.file.insertItem('Save &as',self.saveAs) +        self.file.setWhatsThis(id,fileSaveText) + +        self.file.insertSeparator() + +        id = self.file.insertItem(TQIconSet(printIcon),'&Print',self.printDoc,TQt.CTRL + TQt.Key_P) +        self.file.setWhatsThis(id,filePrintText) + +        self.file.insertSeparator() + +        self.file.insertItem('&Close',self,SLOT('close()'),TQt.CTRL + TQt.Key_W) +        self.file.insertItem('&Quit',tqApp,SLOT('closeAllWindows()'),TQt.CTRL + TQt.Key_Q) + +        self.menuBar().insertSeparator() +        self.windows = TQPopupMenu( self ) +        self.windows.setCheckable( True ) +        self.connect( self.windows, SIGNAL( "aboutToShow()" ), +        self.windowsMenuAboutToShow ) +        self.menuBar().insertItem( "&Windows", self.windows ) + +        self.help = TQPopupMenu(self) +        self.menuBar().insertSeparator() +        self.menuBar().insertItem('&Help',self.help) + +        self.help.insertItem('&About',self.about,TQt.Key_F1) +        self.help.insertItem('About &TQt',self.aboutTQt) +        self.help.insertSeparator() +        self.help.insertItem( "What's &This", self, SLOT("whatsThis()"), TQt.SHIFT+TQt.Key_F1) + +        self.menuBar().insertSeparator() + +        self.vb = TQVBox( self ) +        self.vb.setFrameStyle( TQFrame.StyledPanel | TQFrame.Sunken ) +        self.ws = TQWorkspace( self.vb ) +        self.ws.setScrollBarsEnabled( True ) +        self.setCentralWidget( self.vb ) + +        self.statusBar().message('Ready',2000) +        #self.resize(450,600) + +    def newDoc(self): +        w = MDIWindow( self.ws, "", TQt.WDestructiveClose ) +        self.connect( w, PYSIGNAL( "message" ), self.statusBar(), SLOT( "message(const TQString&, int )") ) +        w.setCaption("unnamed document") +        w.setIcon( TQPixmap(document) ) +        # show the very first window in maximized mode +        if len(self.ws.windowList())==0: +            w.showMaximized() +        else: +            w.show() +        return w + +    def load(self): +        fn = TQFileDialog.getOpenFileName( TQString.null, TQString.null, self ) +        if not fn.isEmpty(): +            w = self.newDoc() +            w.load( fn ) +        else: +            self.statusBar().message( "Loading aborted", 2000 ) + +    def save(self): +        m = self.ws.activeWindow() +        if m: +            m.save() + +    def saveAs(self): +        m = self.ws.activeWindow() +        if m: +            m.saveAs() + +    def printDoc(self): +        m = self.ws.activeWindow() +        if m: +            m.printDoc( self.printer ) + +    def closeWindow(self): +        m = self.ws.activeWindow() +        if m: +            m.close() + +    def about(self): +        TQMessageBox.about( self, "TQt Application Example", +            "This example demonstrates simple use of\n " +            "TQt's Multiple Document Interface (MDI).") + +    def aboutTQt(self): +        TQMessageBox.aboutTQt( self, "TQt Application Example" ) + +    def windowsMenuAboutToShow(self): +        self.windows.clear() +        cascadeId = self.windows.insertItem("&Cascade", self.ws, SLOT("cascade() ") ) +        tileId = self.windows.insertItem("&Tile", self.ws, SLOT("tile()" ) ) +        if len(self.ws.windowList())==0 : +            self.windows.setItemEnabled( cascadeId, False ) +            self.windows.setItemEnabled( tileId, False ) +        self.windows.insertSeparator() +        windows = self.ws.windowList() +        cnt=0 +        for i in windows: +            id =self.windows.insertItem(i.caption(),self.windowsMenuActivated ) +            self.windows.setItemParameter( id, cnt ); +            self.windows.setItemChecked( id, self.ws.activeWindow() == i ) +            cnt=cnt+1 + +    def windowsMenuActivated(self,sid ): +        w = self.ws.windowList().at( id ) +        if w: +            w.showNormal() +            w.setFocus() + + +class MDIWindow( TQMainWindow): +        def __init__(self,parent, name, wflags ): +                TQMainWindow.__init__(self,parent, name, wflags ) +                self.mmovie = 0 +                self.medit = TQMultiLineEdit( self ) +                self.setFocusProxy( self.medit ) +                self.setCentralWidget( self.medit ); + + +        def load(self, fn ): +                self.filename  = fn +                self.f=TQFile( self.filename ) +                if not self.f.open( IO_ReadOnly ): +                        return + +                if fn.contains(".gif"): +                        tmp=TQWidget(self) +                        self.setFocusProxy(tmp) +                        self.setCentralWidget(tmp) +                        self.medit.hide() +                        del self.medit +                        qm=TQMovie(fn) +                        #ifdef Q_WS_QWS // temporary speed-test hack +                        #qm->setDisplayWidget(tmp); +                        #endif +                        tmp.setBackgroundMode(TQWidget.NoBackground) +                        tmp.show() +                        self.mmovie=qm +                else : +                        self.mmovie = 0 +                        t=TQTextStream(self.f) +                        s = t.read() +                        self.medit.setText( s ) +                        self.f.close() +                self.setCaption( self.filename ) +                self.emit(PYSIGNAL( "message"),(TQString("Loaded document %1").arg(self.filename),2000 )) + +        def save(self): +                if self.filename.isEmpty(): +                        self.saveAs() +                        return +                text = self.medit.text() +                output=open(str(self.filename),'w') +                output.write(str(text)) +                #emit message( TQString("Could not write to %1").arg(filename), 2000 ); +                #return +                output.close() +                self.setCaption(self.filename) +                self.emit(PYSIGNAL( "message"),(TQString("File %1 saved").arg(self.filename),2000 )) + +        def saveAs(self): +                fn = TQFileDialog.getSaveFileName( self.filename, TQString.null, self ) +                if not fn.isEmpty(): +                        self.filename = fn +                        self.save() +                else : +                        self.emit(PYSIGNAL( "message"),(TQString("Saving aborted"),2000 )) + +        def printDoc(self,printer): +                Margin = 10 +                pageNo = 1 + +                if printer.setup(self): +                        self.emit(PYSIGNAL( "message"),(TQString("Printing..."),2000 )) +                        p = TQPainter() +                        p.begin(printer) +                        p.setFont(self.medit.font()) +                        yPos = 0 +                        fm = p.fontMetrics() +                        metrics = TQPaintDeviceMetrics(printer) + +                        for i in range(self.medit.numLines()): +                                if Margin + yPos > metrics.height() - Margin: +                                        pageNo = pageNo + 1 +                                        self.emit(PYSIGNAL( "message"),(TQString("Printing (page %1) ...").arg(pageNo),2000 )) +                                        printer.newPage() +                                        yPos = 0 + +                                p.drawText(Margin,Margin + yPos,metrics.width(),fm.lineSpacing(),TQt.ExpandTabs | TQt.DontClip,self.medit.textLine(i)) +                                yPos = yPos + fm.lineSpacing() + +                        p.end() +                        self.emit(PYSIGNAL( "message"),(TQString("Printing completed"),2000 )) +                else: +                        self.emit(PYSIGNAL( "message"),(TQString("Printing aborted"),2000 )) + + +if __name__=='__main__': +    a = TQApplication(sys.argv) +    mw = ApplicationWindow() +    mw.setCaption("PyTQt Example - Multiple Documents Interface (MDI)") +    mw.show() +    a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()')) +    a.exec_loop() | 
