summaryrefslogtreecommitdiffstats
path: root/build_tools/larch7/larch0/gui/dirview.py
diff options
context:
space:
mode:
Diffstat (limited to 'build_tools/larch7/larch0/gui/dirview.py')
-rwxr-xr-xbuild_tools/larch7/larch0/gui/dirview.py172
1 files changed, 172 insertions, 0 deletions
diff --git a/build_tools/larch7/larch0/gui/dirview.py b/build_tools/larch7/larch0/gui/dirview.py
new file mode 100755
index 0000000..303f9b6
--- /dev/null
+++ b/build_tools/larch7/larch0/gui/dirview.py
@@ -0,0 +1,172 @@
+#!/usr/bin/python
+
+
+# Next look at switching to a selected directory from the path (DONE),
+# switching to a directory in the list, and removing/changing toolbar
+# buttons (and their actions).
+# Have a checkbutton for hidden files / directories somewhere.
+
+
+import os
+from PyQt4 import QtGui, QtCore
+
+def clicked(r, c):
+ print r, c
+
+def iclicked(item):
+ print item
+
+
+class DirListing(QtGui.QTreeWidget): #qt
+ # Only using top-level items of the tree
+ def __init__(self):
+ QtGui.QTreeWidget.__init__(self) #qt
+ self._hcompact = False # used for scheduling header-compaction
+ self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
+ self.headers(['Name']) #qt
+ self.setRootIsDecorated(False) #qt
+
+ self.connect(self, QtCore.SIGNAL('itemSelectionChanged()'),
+ self.s_select)
+ self.connect(self, QtCore.SIGNAL('itemClicked(QTreeWidgetItem *,int)'),
+ self.s_clicked)
+
+
+ def s_select(self):
+ # Signal a selection change, passing the new selection list (indexes)
+ s = [self.indexOfTopLevelItem(i) for i in self.selectedItems()] #qt
+ print "Sel", s
+
+
+ def s_clicked(self, item, col): #qt
+ # I guess I should use this for selection if using single
+ # click actions, because setting a list up might cause the
+ # first item to be selected (it doesn't, actually, so select
+ # could be used), and it should
+ # only change directory if actually clicked.
+
+
+ """This is intended for activating a user-defined editing function.
+ Tests showed that this is called after the selection is changed, so
+ if using this signal, use it only in 'Single' selection mode and
+ use this, not 'select' to record selection changes. Clicking on the
+ selected row should start editing the cell, otherwise just change
+ the selection.
+ """
+ ix = self.indexOfTopLevelItem(item) #qt
+ print ix, col
+
+
+
+ def headers(self, headers): #qt
+ self.setHeaderLabels(headers) #qt
+ if self._hcompact:
+ self._compact()
+
+ def set(self, items, index=-1): #qt
+ # Note that each item must be a tuple/list containing
+ # entries for each column.
+ self.clear() #qt
+ c = 0
+ for i in items:
+ item = QtGui.QTreeWidgetItem(self, i) #qt
+ self.addTopLevelItem(item) #qt
+ if c == index:
+ self.setCurrentItem(item)
+ c += 1
+ if self._hcompact:
+ self._compact()
+
+ def x__compact(self, on=True):
+ self._hcompact = on
+ if on:
+ self._compact()
+
+ def _compact(self):
+ for i in range(self.columnCount()): #qt
+ self.resizeColumnToContents(i) #qt
+
+
+
+def dirsel(action):
+ print action.xtag
+ i = 0
+ if action.xindex == 0:
+ print '/'
+ else:
+ path = ''
+ while i < action.xindex:
+ i += 1
+ path += '/' + dirs[i]
+ print path
+ setlisting(path)
+# the toolbuttons should stay the same until a different lower directory
+# is chosen (one not in the old list?)
+
+
+def setlisting(path):
+ dlist = os.listdir(path)
+ dldir = []
+ dlfile = []
+ for f in dlist:
+ if os.path.isdir(path + '/' + f):
+ dldir.append('d:' + f)
+ else:
+ dlfile.append('f:' + f)
+ dldir.sort()
+ dlfile.sort()
+ listing.set([d] for d in (dldir + dlfile))
+
+
+if __name__ == '__main__':
+
+ import sys
+
+ app = QtGui.QApplication(sys.argv)
+ app.setStyleSheet("""
+ QToolButton {
+ border: 2px solid #8f8f91;
+ border-radius: 6px;
+ background-color: yellow;
+ }
+
+ QToolButton:checked {
+ background-color: #f0c080;
+ }
+""")
+
+ window = QtGui.QWidget()
+ listing = DirListing()
+ bar = QtGui.QToolBar()
+ bar.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly)
+ actg = QtGui.QActionGroup(bar)
+ QtCore.QObject.connect(actg, QtCore.SIGNAL('triggered (QAction *)'), dirsel)
+ actg.setExclusive(True)
+
+ layout = QtGui.QVBoxLayout()
+ layout.addWidget(bar)
+ layout.addWidget(listing)
+ window.setLayout(layout)
+ window.resize(600, 480)
+
+
+
+ path = '/home/mt/DATA/pyjamas'
+
+
+ dirs = path.split('/')
+# dirs = ['', 'home', 'mt', 'DATA', 'software-verylong', 'DOCS', 'python_qt']
+ butix = 0
+ for but in dirs:
+ bw = bar.addAction(but+'/')
+ bw.setCheckable(True)
+ actw = actg.addAction(bw)
+ actw.xtag = but
+ actw.xindex = butix
+ butix += 1
+
+ setlisting(path)
+
+ window.show()
+
+ sys.exit(app.exec_())