summaryrefslogtreecommitdiffstats
path: root/python/pyqt/examples3/dirview.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyqt/examples3/dirview.py')
-rwxr-xr-xpython/pyqt/examples3/dirview.py452
1 files changed, 0 insertions, 452 deletions
diff --git a/python/pyqt/examples3/dirview.py b/python/pyqt/examples3/dirview.py
deleted file mode 100755
index 9a6f37b3..00000000
--- a/python/pyqt/examples3/dirview.py
+++ /dev/null
@@ -1,452 +0,0 @@
-#!/usr/bin/env python
-
-"""**************************************************************************
-** $Id$
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-** Some corrections by M. Biermaier (http://www.office-m.at)
-**
-** This file is part of an example program for Qt. This example
-** program may be used, distributed and modified without limitation.
-**
-***************************************************************************"""
-
-import sys
-from qt import *
-
-folder_closed_xpm = [
- "16 16 9 1",
- "g c #808080",
- "b c #c0c000",
- "e c #c0c0c0",
- "# c #000000",
- "c c #ffff00",
- ". c None",
- "a c #585858",
- "f c #a0a0a4",
- "d c #ffffff",
- "..###...........",
- ".#abc##.........",
- ".#daabc#####....",
- ".#ddeaabbccc#...",
- ".#dedeeabbbba...",
- ".#edeeeeaaaab#..",
- ".#deeeeeeefe#ba.",
- ".#eeeeeeefef#ba.",
- ".#eeeeeefeff#ba.",
- ".#eeeeefefff#ba.",
- ".##geefeffff#ba.",
- "...##gefffff#ba.",
- ".....##fffff#ba.",
- ".......##fff#b##",
- ".........##f#b##",
- "...........####."
-]
-
-folder_open_xpm = [
- "16 16 11 1",
- "# c #000000",
- "g c #c0c0c0",
- "e c #303030",
- "a c #ffa858",
- "b c #808080",
- "d c #a0a0a4",
- "f c #585858",
- "c c #ffdca8",
- "h c #dcdcdc",
- "i c #ffffff",
- ". c None",
- "....###.........",
- "....#ab##.......",
- "....#acab####...",
- "###.#acccccca#..",
- "#ddefaaaccccca#.",
- "#bdddbaaaacccab#",
- ".eddddbbaaaacab#",
- ".#bddggdbbaaaab#",
- "..edgdggggbbaab#",
- "..#bgggghghdaab#",
- "...ebhggghicfab#",
- "....#edhhiiidab#",
- "......#egiiicfb#",
- "........#egiibb#",
- "..........#egib#",
- "............#ee#"
-]
-
-folder_locked = [
- "16 16 10 1",
- "h c #808080",
- "b c #ffa858",
- "f c #c0c0c0",
- "e c #c05800",
- "# c #000000",
- "c c #ffdca8",
- ". c None",
- "a c #585858",
- "g c #a0a0a4",
- "d c #ffffff",
- "..#a#...........",
- ".#abc####.......",
- ".#daa#eee#......",
- ".#ddf#e##b#.....",
- ".#dfd#e#bcb##...",
- ".#fdccc#daaab#..",
- ".#dfbbbccgfg#ba.",
- ".#ffb#ebbfgg#ba.",
- ".#ffbbe#bggg#ba.",
- ".#fffbbebggg#ba.",
- ".##hf#ebbggg#ba.",
- "...###e#gggg#ba.",
- ".....#e#gggg#ba.",
- "......###ggg#b##",
- ".........##g#b##",
- "...........####."
-]
-
-pix_file = [
- "16 16 7 1",
- "# c #000000",
- "b c #ffffff",
- "e c #000000",
- "d c #404000",
- "c c #c0c000",
- "a c #ffffc0",
- ". c None",
- "................",
- ".........#......",
- "......#.#a##....",
- ".....#b#bbba##..",
- "....#b#bbbabbb#.",
- "...#b#bba##bb#..",
- "..#b#abb#bb##...",
- ".#a#aab#bbbab##.",
- "#a#aaa#bcbbbbbb#",
- "#ccdc#bcbbcbbb#.",
- ".##c#bcbbcabb#..",
- "...#acbacbbbe...",
- "..#aaaacaba#....",
- "...##aaaaa#.....",
- ".....##aa#......",
- ".......##......."
-]
-
-folderLocked = None
-folderClosed = None
-folderOpened = None
-fileNormal = None
-
-class FileItem( QListViewItem ) :
- def __init__( self, parent=None, s1=QString.null, s2=QString.null ):
- QListViewItem.__init__( self, parent, s1, s2 )
- self.pix = None
-
- def setPixmap( self, p ) :
- self.pix = p
- self.setup()
- self.widthChanged( 0 )
- self.invalidateHeight()
- self.repaint()
-
- def pixmap( self, i ) :
- if i : return None
- else : return self.pix;
-
-# Class Directory
-class Directory( QListViewItem ) :
- def __init__( self, parent=None, filename=QString.null, col2=QString.null ):
- QListViewItem.__init__( self, parent, filename, col2 )
- self.pix = None
- global folderLocked, folderClosed, folderOpened, fileNormal
- self.showDirsOnly = False
- if isinstance(parent, QListView):
- self.p = None
- self.showDirsOnly = parent.showDirsOnly()
- self.f = QFile( QString('/') )
- else:
- self.p = parent
- self.showDirsOnly = parent.showDirsOnly
- self.f = QFile( QString(filename) )
-
- self.readable = QDir( self.fullName() ).isReadable()
- if not self.readable : self.setPixmap( folderLocked )
- else : self.setPixmap( folderClosed )
-
- def setPixmap( self, px ) :
- self.pix = px
- self.setup()
- self.widthChanged( 0 )
- self.invalidateHeight()
- self.repaint()
-
- def pixmap( self, i ) :
- if i : return None
- else : return self.pix
-
- def setOpen( self, o ) :
- if o : self.setPixmap( folderOpened )
- else : self.setPixmap( folderClosed )
-
- if o and not self.childCount() :
- s = QString( self.fullName() )
- thisDir = QDir( s )
- if not thisDir.isReadable() :
- self.readable = False
- self.setExpandable( False )
- return
-
- self.listView().setUpdatesEnabled( False )
- files = thisDir.entryInfoList()
- if files :
- fi = QFileInfo()
- for it in files:
- fi = it
- if str(fi.fileName()) == "." or str(fi.fileName()) == ".." :
- continue # nothing
- elif fi.isSymLink() and not self.showDirsOnly :
- item = FileItem( self, fi.fileName(), "Symbolic Link" )
- item.setPixmap( fileNormal )
- elif fi.isDir() :
- Directory( self, fi.fileName() )
- elif not self.showDirsOnly :
- if fi.isFile() : item = FileItem( self, fi.fileName(), "File" )
- else : item = FileItem( self, fi.fileName(), "Special" )
- item.setPixmap( fileNormal )
-
- self.listView().setUpdatesEnabled( True )
- QListViewItem.setOpen( self, o )
-
- def setup( self ):
- self.setExpandable( True )
- QListViewItem.setup( self )
-
- def fullName( self ):
- s = QString()
- if self.p :
- s = self.p.fullName()
- s.append( self.f.name() )
- s.append( "/" )
- else :
- s = self.f.name()
- return s
-
- def text( self, column ) :
- if column == 0 : return self.f.name()
- elif self.readable : return "Directory"
- else : return "Unreadable Directory"
-
-# Class DirectoryView
-
-class DirectoryView( QListView ):
- def __init__( self, parent=None, name=None, sdo=False ):
- QListView.__init__( self, parent, name )
- self.dirsOnly = sdo
- self.oldCurrent = 0
- self.dropItem = 0
- self.presspos = QPoint(0,0)
- self.mousePressed = False
- global folderLocked, folderClosed, folderOpened, fileNormal #= QPixmap()
- self.autoopenTime = 750
-
- self.autoopen_timer = QTimer( self )
- if not folderLocked :
- folderLocked = QPixmap( folder_locked )
- folderClosed = QPixmap( folder_closed_xpm )
- folderOpened = QPixmap( folder_open_xpm )
- fileNormal = QPixmap( pix_file )
-
- self.connect( self, SIGNAL("doubleClicked(QListViewItem *)"),
- self.slotFolderSelected )
- self.connect( self, SIGNAL("returnPressed(QListViewItem *)"),
- self.slotFolderSelected )
-
- self.setAcceptDrops( True )
- self.viewport().setAcceptDrops( True )
-
- self.connect( self.autoopen_timer, SIGNAL("timeout()"), self.openFolder )
-
- def showDirsOnly( self ):
- return self.dirsOnly
-
- def slotFolderSelected( self, i ):
- if not i or not self.showDirsOnly():
- return
- dir = i
- self.emit( PYSIGNAL("folderSelected(const QString &)"), (dir.fullName(), ) )
-
- def openFolder( self ):
- self.autoopen_timer.stop()
- if self.dropItem and not self.dropItem.isOpen():
- self.dropItem.setOpen( True )
- self.dropItem.repaint()
-
- def contentsDragEnterEvent( self, e ):
- if not QUriDrag.canDecode(e) :
- e.ignore()
- return
- self.oldCurrent = self.currentItem()
- i = self.itemAt( self.contentsToViewport(e.pos()) )
- if i :
- self.dropItem = i
- self.autoopen_timer.start( self.autoopenTime )
-
- def contentsDragMoveEvent( self, e ) :
- if not QUriDrag.canDecode(e) :
- e.ignore()
- return
- vp = self.contentsToViewport( e.pos() )
- i = self.itemAt( vp )
- if i :
- self.setSelected( i, True )
- e.accept()
- if i != self.dropItem :
- self.autoopen_timer.stop()
- self.dropItem = i
- self.autoopen_timer.start( self.autoopenTime )
-
- if e.action() == QDropEvent.Copy:
- pass
- elif e.action() == QDropEvent.Move:
- e.acceptAction()
- elif e.action() == QDropEvent.Link:
- e.acceptAction()
- else:
- pass
- else :
- e.ignore()
- self.autoopen_timer.stop()
- self.dropItem = 0
-
- def contentsDragLeaveEvent( self, QDragLeaveEvent ) :
- self.autoopen_timer.stop()
- self.dropItem = 0
-
- self.setCurrentItem( self.oldCurrent )
- self.setSelected( self.oldCurrent, True )
-
- def contentsDropEvent( self, e ):
- self.autoopen_timer.stop()
- if not QUriDrag.canDecode(e) :
- e.ignore()
- return
- item = self.itemAt( self.contentsToViewport(e.pos()) )
- if item :
- lst = QStringList()
- QUriDrag.decodeLocalFiles( e, lst )
- if e.action() == QDropEvent.Copy:
- s = QString("Copy")
- elif e.action() == QDropEvent.Move:
- s = QString("Move")
- e.acceptAction()
- elif e.action() == QDropEvent.Link:
- s = QString("Link")
- e.acceptAction()
- else:
- s = QString("Unknown")
-
- s += "\n\n"
- e.accept()
-
- for filename in lst:
- s += filename
- s += "\n"
-
- s += "\nTo\n\n "
- s += self.fullPath(item)
- QMessageBox.information( self, "Drop target", s, "Not implemented" )
- else :
- e.ignore()
-
- def fullPath( self, item ):
- fullpath = QString( item.text(0) )
- item = item.parent()
- while item:
- newpath = item.text(0)
-
- if item.parent():
- newpath += "/"
-
- newpath += fullpath
- fullpath = newpath
- item = item.parent()
-
- return fullpath
-
- def contentsMousePressEvent( self, e ) :
- QListView.contentsMousePressEvent( self, e )
- p = QPoint( self.contentsToViewport( e.pos() ) )
- i = self.itemAt( p )
- if i :
- # if the user clicked into the root decoration of the item, don't try to start a drag!
- if self.rootIsDecorated(): isdecorated = 1
- else : isdecorated = 0
- if p.x() > self.header().sectionPos( self.header().mapToIndex( 0 )) + self.treeStepSize() * ( i.depth() + isdecorated + self.itemMargin() or
- p.x() < self.header().sectionPos( self.header().mapToIndex( 0 ) ) ) :
- self.presspos.setX(e.pos().x())
- self.presspos.setY(e.pos().y())
- self.mousePressed = True
-
- def contentsMouseMoveEvent( self, e ):
- offset = QPoint( self.presspos.x() - e.pos().x(),
- self.presspos.y() - e.pos().y() )
- if self.mousePressed and (offset).manhattanLength() > QApplication.startDragDistance() :
- self.mousePressed = False
- item = self.itemAt( self.contentsToViewport(self.presspos) )
- if item :
- source = self.fullPath(item)
- if QFile.exists(source) :
- ud = QUriDrag(self.viewport())
- ud.setFileNames( QStringList (source) )
- if ud.drag() :
- QMessageBox.information( self, "Drag source",
- QString("Delete ")+source, "Not implemented" )
-
- def contentsMouseReleaseEvent( self, QMouseEvent ):
- self.mousePressed = False
-
- def setDir( self, s ):
- it = QListViewItem( self )
- it.setOpen(False)
- thisDir = QDir( s )
- it = QListViewItem( self )
- it.setOpen(False)
- lst = QStringList( QStringList.split( "/", s ) )
- listview2 = []
- listview2.extend( lst )
-
- item = self.firstChild()
- for it2 in listview2 :
- while item :
- if item.text( 0 ) == it2 :
- item.setOpen( True )
- break
- item = item.itemBelow()
- if item:
- self.setCurrentItem( item )
-
-def main( args ):
- a = QApplication( args )
-
- mw = DirectoryView()
- mw.addColumn( "Name" )
- mw.addColumn( "Type" )
- mw.setTreeStepSize( 20 )
-
- roots = QDir.drives()
- if roots :
- for it in roots:
- fi = it
- root = Directory( mw, fi.filePath() )
- if roots.count(it) <= 1 :
- root.setOpen( True ) # be interesting
-
- mw.resize( 400, 400 )
- mw.setCaption( "Qt Example - Directory Browser" )
- mw.setAllColumnsShowFocus( True )
- a.setMainWidget( mw )
- mw.show()
-
- a.exec_loop()
-
-if __name__=="__main__":
- main(sys.argv)