<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><br><br>That's Cool!...Thanks Paul!<br><br><br><br>--- On <b>Tue, 4/19/11, Paul Du Bois <i><dubois@doublefine.com></i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Paul Du Bois <dubois@doublefine.com><br>Subject: RE: [PyQt] Question on QTreeView, interactive expanding/collapsing<br>To: "James Polk" <jpolk5001@yahoo.com>, pyqt@riverbankcomputing.com<br>Date: Tuesday, April 19, 2011, 3:25 PM<br><br><div id="yiv260810258"><style><!--
#yiv260810258  
 _filtered #yiv260810258 {font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;}
 _filtered #yiv260810258 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}
 _filtered #yiv260810258 {font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4;}
#yiv260810258  
#yiv260810258 p.yiv260810258MsoNormal, #yiv260810258 li.yiv260810258MsoNormal, #yiv260810258 div.yiv260810258MsoNormal
        {margin:0in;margin-bottom:.0001pt;font-size:12.0pt;font-family:"serif";}
#yiv260810258 a:link, #yiv260810258 span.yiv260810258MsoHyperlink
        {color:blue;text-decoration:underline;}
#yiv260810258 a:visited, #yiv260810258 span.yiv260810258MsoHyperlinkFollowed
        {color:purple;text-decoration:underline;}
#yiv260810258 span.yiv260810258EmailStyle17
        {font-family:"Courier New";color:black;}
#yiv260810258 .yiv260810258MsoChpDefault
        {}
 _filtered #yiv260810258 {margin:1.0in 1.0in 1.0in 1.0in;}
#yiv260810258 div.yiv260810258WordSection1
        {}
--></style><div class="yiv260810258WordSection1"><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">If you need hotkey+click then this is the best way I've found to do it</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">  </span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    # Implement shift-click to expand/contract</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">  </span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    @pyqtSlot(QModelIndex)</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier
 New"; color: black;">    def _on_expanded(self, index):</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        if self._in_shift_press:</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            self._in_shift_press = False</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            _recursive_set_expanded(self, index, True)</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">  </span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier
 New"; color: black;">    @pyqtSlot(QModelIndex)</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    def _on_collapsed(self, index):</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        if self._in_shift_press:</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            self._in_shift_press = False</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            _recursive_set_expanded(self, index, False)</span></p><p class="yiv260810258MsoNormal"><span style="font-size:
 10pt; font-family: "Courier New"; color: black;">  </span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    def mousePressEvent(self, evt):</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        # Make shift-click expand/collapse all</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        if int(evt.modifiers() & Qt.ShiftModifier) != 0:</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            self._in_shift_press = True</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt;
 font-family: "Courier New"; color: black;">        try:</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            QTreeView.mousePressEvent(self, evt)</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        finally:</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            self._in_shift_press = False</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">  </span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier
 New"; color: black;">def _recursive_set_expanded(view, root, desired):</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    from collections import deque</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    root = root.sibling(root.row(), 0)</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    q = deque([root])</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    model = view.model()</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">    while q:</span></p><p class="yiv260810258MsoNormal"><span
 style="font-size: 10pt; font-family: "Courier New"; color: black;">        idx = q.popleft()</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        view.setExpanded(idx, desired)</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">        for i in range(model.rowCount(idx)):</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">            q.append(model.index(i,0, idx))</span></p><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">  </span></p><div style="border-width: medium medium medium 1.5pt;
 border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color blue; padding: 0in 0in 0in 4pt;"><div><div style="border-right: medium none; border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) -moz-use-text-color -moz-use-text-color; padding: 3pt 0in 0in;"><p class="yiv260810258MsoNormal"><b><span style="font-size: 10pt; font-family: "sans-serif";">From:</span></b><span style="font-size: 10pt; font-family: "sans-serif";"> pyqt-bounces@riverbankcomputing.com [mailto:pyqt-bounces@riverbankcomputing.com] <b>On Behalf Of </b>James Polk<br><b>Sent:</b> Tuesday, April 19, 2011 2:28 PM<br><b>To:</b> pyqt@riverbankcomputing.com<br><b>Subject:</b> Re: [PyQt] Question on QTreeView, interactive expanding/collapsing</span></p></div></div><p class="yiv260810258MsoNormal">  </p><table class="yiv260810258MsoNormalTable" border="0" cellpadding="0"
 cellspacing="0"><tbody><tr><td style="padding: 0in;" valign="top"><p class="yiv260810258MsoNormal"><br>Whoops,...just found the *-hotkey,....nevermind, lol...<br><br><br><br>--- On <b>Tue, 4/19/11, James Polk <i><jpolk5001@yahoo.com></i></b> wrote:</p><p class="yiv260810258MsoNormal" style="margin-bottom: 12pt;"><br>From: James Polk <jpolk5001@yahoo.com><br>Subject: Question on QTreeView, interactive expanding/collapsing<br>To: pyqt@riverbankcomputing.com<br>Date: Tuesday, April 19, 2011, 2:09 PM</p><div id="yiv260810258"><table class="yiv260810258MsoNormalTable" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="padding: 0in;" valign="top"><p class="yiv260810258MsoNormal" style="margin-bottom: 12pt;"><br>Greetings All,<br><br>In a typical QTreeView,...the default behaviour of clicking on a "plus box",<br>i.e. the branch boxes of the tree, yields a "single box open", or in the case<br>of collapsing, a "single box closed"
 event.<br><br>Is there any way to use a keyboard modifier, like SHIFT, CTRL, and/or ALT,<br>to expand or collapse the *whole* tree?<br><br>Many other similiar tree structures in other software have this feature.<br>For example, holding down CTRL and ALT and clicking on any box will<br>unfold/expand (or collapse) all nodes/branches from that node and all below.<br>Is there something I'm overlooking? Is this (re-)implementable ?<br><br>Many Thanks,<br>-Jim</p></td></tr></tbody></table></div></td></tr></tbody></table><p class="yiv260810258MsoNormal"><span style="font-size: 10pt; font-family: "sans-serif";">  </span></p></div></div></div></blockquote></td></tr></table>