summaryrefslogtreecommitdiffstats
path: root/python/pyqt/examples3/qdir.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyqt/examples3/qdir.py')
-rwxr-xr-xpython/pyqt/examples3/qdir.py323
1 files changed, 0 insertions, 323 deletions
diff --git a/python/pyqt/examples3/qdir.py b/python/pyqt/examples3/qdir.py
deleted file mode 100755
index 0da10ebe..00000000
--- a/python/pyqt/examples3/qdir.py
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/usr/bin/env python
-#
-# 2005-02-12 initial version hp
-
-import os
-import pickle
-from qt import *
-from dirview import Directory, DirectoryView
-
-bookmarks = [
- "22 14 8 1",
- "# c #000080",
- "a c #585858",
- "b c #000000",
- "c c #ffffff",
- "d c #ffffff",
- "e c #ffffff",
- "f c #000000",
- ". c None",
- "...bb.................",
- "..bacb....bbb.........",
- "..badcb.bbccbab.......",
- "..bacccbadccbab.......",
- "..baecdbcccdbab.......",
- "..bacccbacccbab.......",
- "..badcdbcecdfab.......",
- "..bacecbacccbab.......",
- "..baccdbcccdbab.......",
- "...badcbacdbbab.......",
- "....bacbcbbccab.......",
- ".....babbaaaaab.......",
- ".....bbabbbbbbb.......",
- "......bb.............."
-]
-
-home = [
- "16 15 4 1",
- "# c #000000",
- "a c #ffffff",
- "b c #c0c0c0",
- ". c None",
- ".......##.......",
- "..#...####......",
- "..#..#aabb#.....",
- "..#.#aaaabb#....",
- "..##aaaaaabb#...",
- "..#aaaaaaaabb#..",
- ".#aaaaaaaaabbb#.",
- "###aaaaaaaabb###",
- "..#aaaaaaaabb#..",
- "..#aaa###aabb#..",
- "..#aaa#.#aabb#..",
- "..#aaa#.#aabb#..",
- "..#aaa#.#aabb#..",
- "..#aaa#.#aabb#..",
- "..#####.######.."
-]
-
-
-class PixmapView(QScrollView):
- def __init__(self, parent):
- QScrollView.__init__(self, parent)
- self.pixmap = None
- self.viewport().setBackgroundMode(self.PaletteBase)
-
- def setPixmap(self, pix):
- self.pixmap = pix
- self.resizeContents(pix.size().width(), pix.size().height())
- self.viewport().repaint(False)
-
- def drawContents(self, p, cx, cy, cw, ch):
- p.fillRect(cx, cy, cw, ch, self.colorGroup().brush(QColorGroup.Base))
- p.drawPixmap(0, 0, self.pixmap)
-
-
-class Preview(QWidgetStack):
- def __init__(self, parent):
- QWidgetStack.__init__(self, parent)
- self.normalText = QMultiLineEdit(self)
- self.normalText.setReadOnly(True)
- self.html = QTextView(self)
- self.pixmap = PixmapView(self)
- self.raiseWidget(self.normalText)
-
- def showPreview(self, url, size):
- if url.isLocalFile():
- path = url.path()
- fi = QFileInfo(path)
- if fi.isFile() and fi.size() > size * 1000:
- self.normalText.setText(
- "The File\n%s\nis too large, so I don't show it!" % path)
- self.raiseWidget(self.normalText)
- return
- pix = QPixmap(path)
- if pix.isNull():
- if fi.isFile():
- err = False
- try:
- text = open(path.latin1(), "r").read()
- except IOError, msg:
- text = QString(str(msg))
- err = True
- if not err and fi.extension().lower().contains("htm"):
- url = self.html.mimeSourceFactory().makeAbsolute(
- path, self.html.context())
- self.html.setText(text, url)
- self.raiseWidget(self.html)
- return
- else:
- self.normalText.setText(text)
- self.raiseWidget(self.normalText)
- return
- else:
- self.normalText.setText("")
- self.raiseWidget(self.normalText)
- else:
- self.pixmap.setPixmap(pix)
- self.raiseWidget(self.pixmap)
- else:
- self.normalText.setText("I only show local files!")
- self.raiseWidget(self.normalText)
-
-
-# We can't instantiate QFilePreview directly because it is abstract. Note that
-# the previewUrl() abstract is patched in later to work around the fact that
-# you can't multiply inherit from more than one wrapped class.
-class FilePreview(QFilePreview):
- pass
-
-
-class PreviewWidget(QVBox):
- def __init__(self, parent):
- QVBox.__init__(self, parent)
- self.setSpacing( 5 )
- self.setMargin( 5 )
- row = QHBox(self)
- row.setSpacing(5)
- QLabel("Only show files smaller than: ", row)
- self.sizeSpinBox = QSpinBox(1, 10000, 1, row)
- self.sizeSpinBox.setSuffix(" KB")
- self.sizeSpinBox.setValue(128)
- row.setFixedHeight(10 + self.sizeSpinBox.sizeHint().height())
- self.__preview = Preview(self)
- # workaround sip inability of multiple inheritance
- # create a local QFilePreview instance and redirect
- # the method, which is called on preview, to us
- self.preview = FilePreview()
- self.preview.previewUrl = self.previewUrl
-
- def previewUrl(self, url):
- self.__preview.showPreview(url, self.sizeSpinBox.value())
-
-
-class CustomFileDialog(QFileDialog):
- def __init__(self, preview = False):
- QFileDialog.__init__(self, None, None, True)
- self.bookmarkFile = ".pybookmarks"
- self.bookmarkList = []
- if os.path.exists(self.bookmarkFile):
- try:
- self.bookmarkList = pickle.loads(open(self.bookmarkFile, "rb").read())
- except IOError, msg:
- print msg
- self.setDir("/")
- self.dirView = DirectoryView(self, None, True)
- self.dirView.addColumn("")
- self.dirView.header().hide()
- root = Directory(self.dirView, "/")
- root.setOpen(True)
- self.dirView.setFixedWidth(200)
- self.addLeftWidget(self.dirView)
- p = QPushButton(self)
- p.setPixmap(QPixmap(bookmarks))
- QToolTip.add(p, "Bookmarks")
- self.bookmarkMenu = QPopupMenu(self)
- self.connect(self.bookmarkMenu, SIGNAL("activated(int)"),
- self.bookmarkChosen)
- self.addId = self.bookmarkMenu.insertItem("Add bookmark")
- self.bookmarkMenu.insertSeparator()
- for l in self.bookmarkList:
- self.bookmarkMenu.insertItem(l)
- p.setPopup(self.bookmarkMenu)
- self.addToolButton(p, True)
- self.connect(self.dirView, PYSIGNAL("folderSelected(const QString &)"),
- self.setDir2)
- self.connect(self, SIGNAL("dirEntered(const QString &)"),
- self.dirView.setDir)
- b = QToolButton(self)
- QToolTip.add(b, "Go Home!")
- b.setPixmap(QPixmap(home))
- self.connect(b, SIGNAL("clicked()"), self.goHome)
- self.addToolButton(b)
-
- if preview:
- self.setContentsPreviewEnabled(True)
- pw = PreviewWidget(self)
- self.setContentsPreview(pw, pw.preview)
- self.setViewMode(QFileDialog.List)
- self.setPreviewMode(QFileDialog.Contents)
-
- w = self.width()
- h = self.height()
- if preview:
- self.resize(w + w / 2, h + h / 3)
- else:
- self.resize(w + w / 3, h + h / 4)
-
- def done(self, r):
- if self.bookmarkList:
- try:
- open(self.bookmarkFile, "wb").write(pickle.dumps(self.bookmarkList))
- except IOError, msg:
- print msg
- return QFileDialog.done(self, r)
-
- def showEvent(self, e):
- QFileDialog.showEvent(self, e)
- self.dirView.setDir(self.dirPath())
-
- def setDir2(self, path):
- self.blockSignals(True)
- self.setDir(path)
- self.blockSignals(False)
-
- def bookmarkChosen(self, i):
- if i == self.addId:
- # keep bookmarks pythonic
- dp = self.dirPath().latin1()
- if dp not in self.bookmarkList:
- self.bookmarkList.append(dp)
- self.bookmarkMenu.insertItem(dp)
- else:
- self.setDir(self.bookmarkMenu.text(i))
-
- def goHome(self):
- if os.getenv("HOME"):
- self.setDir(os.getenv("HOME"))
- else:
- self.setDir("/")
-
-
-if __name__ == '__main__':
- import sys
- import getopt
-
- def usage(msg = None):
- if msg:
- print >> sys.stderr, msg
- print >> sys.stderr, """\
-usage: qdir [--any | --dir | --custom] [--preview] [--default f] {--filter f} [caption ...]
- --any Get any filename, need not exist.
- --dir Return a directory rather than a file.
- --custom Opens a customized QFileDialog with
- dir browser, bookmark menu, etc.
- --preview Show a preview widget.
- --default f Start from directory/file f.
- --filter f eg. '*.gif' '*.bmp'
- caption ... Caption for dialog.
-"""
- sys.exit(1)
-
- def main():
- options = ["help", "any", "dir", "custom", "preview", "default=", "filter="]
- mode = QFileDialog.ExistingFile
- preview = False
- custom = False
- start = None
- filter = QString.null
- app = QApplication(sys.argv)
-
- try:
- optlist, args = getopt.getopt(sys.argv[1:], "h", options)
- except getopt.error, msg:
- usage(msg)
-
- for opt, par in optlist:
- if opt in ("-h", "--help"):
- usage()
- elif opt == "--any":
- mode = QFileDialog.AnyFile
- elif opt == "--dir":
- mode = QFileDialog.Directory
- elif opt == "--default":
- start = par
- elif opt == "--filter":
- filter = par
- elif opt == "--preview":
- preview = True
- elif opt == "--custom":
- custom = True
- if args:
- caption = " ".join(args)
- elif mode == QFileDialog.Directory:
- caption = "Choose directory..."
- else:
- caption = "Choose file..."
- if not start:
- start = QDir.currentDirPath()
- if not custom:
- fd = QFileDialog(QString.null, filter, None, None, True)
- fd.setMode(mode)
- if preview:
- fd.setContentsPreviewEnabled(True)
- pw = PreviewWidget(fd)
- fd.setContentsPreview(pw, pw.preview)
- fd.setViewMode(QFileDialog.List)
- fd.setPreviewMode(QFileDialog.Contents)
- w = fd.width()
- h = fd.height()
- fd.resize(w + w / 3, h + h / 4)
- fd.setCaption(caption)
- fd.setSelection(start)
- if fd.exec_loop() == QDialog.Accepted:
- print "%s\n" % fd.selectedFile().latin1()
- return 0
- else:
- return 1
- else:
- fd = CustomFileDialog(preview)
- fd.exec_loop()
- return 1
-
- sys.exit(main())