(meant for this to be posted on the list)<div><br></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Having an unfoldAll() function seems like a reasonable solution.  Is there some way I can &quot;officially&quot; request such an addition?</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Jared<br>
</span></font><br><div class="gmail_quote">On Wed, Feb 17, 2010 at 7:22 AM, Phil Thompson <span dir="ltr">&lt;<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
On Tue, 16 Feb 2010 03:50:22 -0500, Jared Sutton &lt;<a href="mailto:jpsutton@gmail.com">jpsutton@gmail.com</a>&gt;<br>
wrote:<br>
<div><div></div><div class="h5">&gt; Hi All,<br>
&gt;<br>
&gt; For the last several years (spare time) I&#39;ve been constructing a simple<br>
&gt; cross-platform code editor called QSciTE using Qt4 version of<br>
Qscintilla2.<br>
&gt;  You can find it here, in case you&#39;re interested:<br>
&gt;<br>
&gt; <a href="http://qscite.googlecode.com/" target="_blank">http://qscite.googlecode.com/</a><br>
&gt;<br>
&gt; First off, thanks very much for making this library available to the<br>
public<br>
&gt; under the GPL.  It has some wonderful functionality built-in.<br>
&gt;<br>
&gt; I&#39;ve been having some issues with code folding recently, which I believe<br>
to<br>
&gt; have stemmed from at least one bug in Qscintilla.  I have a simple menu<br>
&gt; option to enable/disable code folding.  Whenever I turn folding off, I<br>
want<br>
&gt; any lines that are currently folded to be unfolded automatically, since<br>
it<br>
&gt; doesn&#39;t make a whole lot of sense to have folded code that can&#39;t easily<br>
be<br>
&gt; unfolded.  Here&#39;s my toggleFolding() function which is directly connected<br>
&gt; to<br>
&gt; the menu option:<br>
&gt;<br>
&gt; void MainWindow::toggleFolding() {<br>
&gt;   QsciteEditor * doc = getCurDoc();<br>
&gt;   QsciteEditor::FoldStyle state =<br>
&gt; static_cast&lt;QsciteEditor::FoldStyle&gt;((!doc-&gt;folding()) * 5);<br>
&gt;<br>
&gt;   if (!state) {<br>
&gt;     // unfold all code before turning off folding<br>
&gt;     doc-&gt;foldAll(false);<br>
&gt;   }<br>
&gt;<br>
&gt;   doc-&gt;setFolding(state);<br>
&gt; }<br>
&gt;<br>
&gt; The QsciteEditor class is a child-class of Qscintilla, because I needed<br>
to<br>
&gt; expose several functions for use with QtScript, and because I needed to<br>
&gt; catch some key-presses that I needed to process specially.  As you can<br>
see,<br>
&gt; foldAll() is only getting called just before the folding is about to be<br>
&gt; turned off.  The  documentation for foldAll() states &quot;If any lines are<br>
&gt; currently folded then they are all unfolded. Otherwise all lines are<br>
&gt; folded.&quot;  Now, my implementation does not take into account the<br>
possibility<br>
&gt; that no lines were folded between the time that the folding was enabled<br>
and<br>
&gt; disabled (which I&#39;ll expand on below), meaning that if foldAll() works as<br>
&gt; documented, I should expect to see all lines get folded before the<br>
folding<br>
&gt; is disabled.  However, even when I fold one or more lines and then turn<br>
off<br>
&gt; folding, I find that all lines are getting folded before folding gets<br>
&gt; disabled.  This seems like it&#39;s a problem with the foldAll()<br>
&gt; implementation.<br>
<br>
</div></div>It depends...<br>
<br>
foldAll() can only deal with what a particular lexer has set in the way of<br>
fold flags. I&#39;ve found that lexers don&#39;t always exhibit consistent<br>
behaviour - some are just wrong.<br>
<br>
Both Scite and QScintilla will call foldAll() (or the Scite equivalent)<br>
when you shift-control-click in the fold margin. I would compare the result<br>
of doing this in Scite with the same lexer set and the same file being<br>
edited. If the result is different then it&#39;s probably a QScintilla bug. If<br>
it&#39;s not then it&#39;s likely to be a Scintilla bug or feature (ie. in the<br>
particular lexer itself).<br>
<div class="im"><br>
&gt; This also brings up a few questions:<br>
&gt; 1. Shouldn&#39;t setFolding() automatically unfold all lines that are<br>
currently<br>
&gt; folded before the FoldStyle is set to NoFoldStyle?  Does anyone expect to<br>
&gt; have lines folded after they disable folding?<br>
&gt; 2. If the person using QsciScintilla is expected to unfold all lines that<br>
&gt; were folded before turning folding off, how can he know what lines are<br>
&gt; folded?  As far as I can tell, that information is private, as are the<br>
&gt; functions/signals/slots that are responsible for changing a line&#39;s fold<br>
&gt; state.<br>
&gt;<br>
&gt; So, I see these issues in the end:<br>
&gt; 1. There appears to be a bug in the QsciScintilla:foldAll(bool) function.<br>
&gt;  It doesn&#39;t appear to function as documented.<br>
&gt; 2. In my opinion, QsciScintilla::setFolding() should either unfold<br>
&gt; everything when folding is turned off, or the appropriate member<br>
&gt; variables/functions/signals/slots should be changed from private to<br>
&gt; protected so that developers can deal with the situation without<br>
resorting<br>
&gt; to hacking on Qscintilla directly.<br>
<br>
</div>How about an unfoldAll() method? (It&#39;s a shame that foldAll() was so badly<br>
named.) That would allow it to be used separately from setFolding(), and<br>
wouldn&#39;t change the behaviour of the latter for existing applications.<br>
<div><div></div><div class="h5"><br>
&gt; For what it&#39;s worth, here&#39;s my development environment:<br>
&gt; Arch Linux<br>
&gt; KDEmod 4.4.0<br>
&gt; Qscintilla 2.4.2<br>
&gt; Qt 4.6.1<br>
&gt;<br>
&gt; Thanks for any insight you may have.<br>
&gt;<br>
&gt; Jared Sutton<br>
<br>
</div></div><font color="#888888">Phil<br>
</font></blockquote></div><br></div>