added "auto-fold first comment"-option to the editor

Convenient when you don't want to see all the big license headers.
This commit is contained in:
mae
2009-12-01 18:08:02 +01:00
parent 491527ab06
commit dc713d0684
7 changed files with 57 additions and 8 deletions

View File

@@ -611,12 +611,44 @@ bool BaseTextEditor::open(const QString &fileName)
{ {
if (d->m_document->open(fileName)) { if (d->m_document->open(fileName)) {
moveCursor(QTextCursor::Start); moveCursor(QTextCursor::Start);
if (d->m_displaySettings.m_autoFoldFirstComment)
d->collapseLicenseHeader();
setReadOnly(d->m_document->hasDecodingError()); setReadOnly(d->m_document->hasDecodingError());
return true; return true;
} }
return false; return false;
} }
/*
Collapses the first comment in a file, if there is only whitespace above
*/
void BaseTextEditorPrivate::collapseLicenseHeader()
{
QTextDocument *doc = q->document();
TextEditDocumentLayout *documentLayout = qobject_cast<TextEditDocumentLayout*>(doc->documentLayout());
QTC_ASSERT(documentLayout, return);
QTextBlock block = doc->firstBlock();
const TabSettings &ts = m_document->tabSettings();
while (block.isValid()) {
TextBlockUserData *data = TextBlockUserData::canCollapse(block);
if (data && block.next().isVisible()) {
QChar character;
static_cast<TextBlockUserData*>(data)->collapseAtPos(&character);
if (character != QLatin1Char('+'))
break; // not a comment
TextBlockUserData::doCollapse(block, false);
moveCursorVisible();
documentLayout->requestUpdate();
documentLayout->emitDocumentSizeChanged();
break;
}
QString text = block.text();
if (ts.firstNonSpace(text) < text.size())
break;
block = block.next();
}
}
const Utils::ChangeSet &BaseTextEditor::changeSet() const const Utils::ChangeSet &BaseTextEditor::changeSet() const
{ {
return d->m_changeSet; return d->m_changeSet;
@@ -1618,9 +1650,9 @@ int Parenthesis::collapseAtPos(const Parentheses &parentheses, QChar *character)
} }
int TextBlockUserData::collapseAtPos() const int TextBlockUserData::collapseAtPos(QChar *character) const
{ {
return Parenthesis::collapseAtPos(m_parentheses); return Parenthesis::collapseAtPos(m_parentheses, character);
} }
int TextBlockUserData::braceDepthDelta() const int TextBlockUserData::braceDepthDelta() const

View File

@@ -173,7 +173,7 @@ public:
static QTextBlock testCollapse(const QTextBlock& block); static QTextBlock testCollapse(const QTextBlock& block);
static void doCollapse(const QTextBlock& block, bool visible); static void doCollapse(const QTextBlock& block, bool visible);
int collapseAtPos() const; int collapseAtPos(QChar *character = 0) const;
enum MatchType { NoMatch, Match, Mismatch }; enum MatchType { NoMatch, Match, Mismatch };
static MatchType checkOpenParenthesis(QTextCursor *cursor, QChar c); static MatchType checkOpenParenthesis(QTextCursor *cursor, QChar c);

View File

@@ -196,6 +196,7 @@ public:
int suggestedVisibleCollapsedBlockNumber; int suggestedVisibleCollapsedBlockNumber;
void clearVisibleCollapsedBlock(); void clearVisibleCollapsedBlock();
bool m_mouseOnCollapsedMarker; bool m_mouseOnCollapsedMarker;
void collapseLicenseHeader();
QBasicTimer autoScrollTimer; QBasicTimer autoScrollTimer;
void updateMarksLineNumber(); void updateMarksLineNumber();

View File

@@ -45,6 +45,7 @@ static const char * const highlightBlocksKey = "HighlightBlocksKey";
static const char * const animateMatchingParenthesesKey= "AnimateMatchingParenthesesKey"; static const char * const animateMatchingParenthesesKey= "AnimateMatchingParenthesesKey";
static const char * const mouseNavigationKey = "MouseNavigation"; static const char * const mouseNavigationKey = "MouseNavigation";
static const char * const markTextChangesKey = "MarkTextChanges"; static const char * const markTextChangesKey = "MarkTextChanges";
static const char * const autoFoldFirstCommentKey= "AutoFoldFirstComment";
static const char * const groupPostfix = "DisplaySettings"; static const char * const groupPostfix = "DisplaySettings";
namespace TextEditor { namespace TextEditor {
@@ -60,7 +61,8 @@ DisplaySettings::DisplaySettings() :
m_highlightBlocks(false), m_highlightBlocks(false),
m_animateMatchingParentheses(true), m_animateMatchingParentheses(true),
m_mouseNavigation(true), m_mouseNavigation(true),
m_markTextChanges(true) m_markTextChanges(true),
m_autoFoldFirstComment(true)
{ {
} }
@@ -81,6 +83,7 @@ void DisplaySettings::toSettings(const QString &category, QSettings *s) const
s->setValue(QLatin1String(animateMatchingParenthesesKey), m_animateMatchingParentheses); s->setValue(QLatin1String(animateMatchingParenthesesKey), m_animateMatchingParentheses);
s->setValue(QLatin1String(mouseNavigationKey), m_mouseNavigation); s->setValue(QLatin1String(mouseNavigationKey), m_mouseNavigation);
s->setValue(QLatin1String(markTextChangesKey), m_markTextChanges); s->setValue(QLatin1String(markTextChangesKey), m_markTextChanges);
s->setValue(QLatin1String(autoFoldFirstCommentKey), m_autoFoldFirstComment);
s->endGroup(); s->endGroup();
} }
@@ -104,6 +107,7 @@ void DisplaySettings::fromSettings(const QString &category, const QSettings *s)
m_animateMatchingParentheses = s->value(group + QLatin1String(animateMatchingParenthesesKey), m_animateMatchingParentheses).toBool(); m_animateMatchingParentheses = s->value(group + QLatin1String(animateMatchingParenthesesKey), m_animateMatchingParentheses).toBool();
m_mouseNavigation = s->value(group + QLatin1String(mouseNavigationKey), m_mouseNavigation).toBool(); m_mouseNavigation = s->value(group + QLatin1String(mouseNavigationKey), m_mouseNavigation).toBool();
m_markTextChanges = s->value(group + QLatin1String(markTextChangesKey), m_markTextChanges).toBool(); m_markTextChanges = s->value(group + QLatin1String(markTextChangesKey), m_markTextChanges).toBool();
m_autoFoldFirstComment = s->value(group + QLatin1String(autoFoldFirstCommentKey), m_autoFoldFirstComment).toBool();
} }
bool DisplaySettings::equals(const DisplaySettings &ds) const bool DisplaySettings::equals(const DisplaySettings &ds) const
@@ -119,6 +123,7 @@ bool DisplaySettings::equals(const DisplaySettings &ds) const
&& m_animateMatchingParentheses == ds.m_animateMatchingParentheses && m_animateMatchingParentheses == ds.m_animateMatchingParentheses
&& m_mouseNavigation == ds.m_mouseNavigation && m_mouseNavigation == ds.m_mouseNavigation
&& m_markTextChanges == ds.m_markTextChanges && m_markTextChanges == ds.m_markTextChanges
&& m_autoFoldFirstComment== ds.m_autoFoldFirstComment
; ;
} }

View File

@@ -56,6 +56,7 @@ struct TEXTEDITOR_EXPORT DisplaySettings
bool m_animateMatchingParentheses; bool m_animateMatchingParentheses;
bool m_mouseNavigation; bool m_mouseNavigation;
bool m_markTextChanges; bool m_markTextChanges;
bool m_autoFoldFirstComment;
bool equals(const DisplaySettings &ds) const; bool equals(const DisplaySettings &ds) const;
}; };

View File

@@ -102,7 +102,8 @@ QWidget *DisplaySettingsPage::createPage(QWidget *parent)
<< ' ' << m_d->m_page.visualizeWhitespace->text() << ' ' << m_d->m_page.visualizeWhitespace->text()
<< ' ' << m_d->m_page.animateMatchingParentheses->text() << ' ' << m_d->m_page.animateMatchingParentheses->text()
<< ' ' << m_d->m_page.enableTextWrapping->text() << ' ' << m_d->m_page.enableTextWrapping->text()
<< ' ' << m_d->m_page.mouseNavigation->text(); << ' ' << m_d->m_page.mouseNavigation->text()
<< ' ' << m_d->m_page.autoFoldFirstComment->text();
m_d->m_searchKeywords.remove(QLatin1Char('&')); m_d->m_searchKeywords.remove(QLatin1Char('&'));
} }
return w; return w;
@@ -139,6 +140,7 @@ void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const
displaySettings.m_animateMatchingParentheses = m_d->m_page.animateMatchingParentheses->isChecked(); displaySettings.m_animateMatchingParentheses = m_d->m_page.animateMatchingParentheses->isChecked();
displaySettings.m_mouseNavigation = m_d->m_page.mouseNavigation->isChecked(); displaySettings.m_mouseNavigation = m_d->m_page.mouseNavigation->isChecked();
displaySettings.m_markTextChanges = m_d->m_page.markTextChanges->isChecked(); displaySettings.m_markTextChanges = m_d->m_page.markTextChanges->isChecked();
displaySettings.m_autoFoldFirstComment = m_d->m_page.autoFoldFirstComment->isChecked();
} }
void DisplaySettingsPage::settingsToUI() void DisplaySettingsPage::settingsToUI()
@@ -155,6 +157,7 @@ void DisplaySettingsPage::settingsToUI()
m_d->m_page.animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses); m_d->m_page.animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses);
m_d->m_page.mouseNavigation->setChecked(displaySettings.m_mouseNavigation); m_d->m_page.mouseNavigation->setChecked(displaySettings.m_mouseNavigation);
m_d->m_page.markTextChanges->setChecked(displaySettings.m_markTextChanges); m_d->m_page.markTextChanges->setChecked(displaySettings.m_markTextChanges);
m_d->m_page.autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment);
} }
DisplaySettings DisplaySettingsPage::displaySettings() const DisplaySettings DisplaySettingsPage::displaySettings() const

View File

@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>448</width> <width>450</width>
<height>330</height> <height>330</height>
</rect> </rect>
</property> </property>
@@ -61,7 +61,7 @@
<item row="2" column="0"> <item row="2" column="0">
<widget class="QCheckBox" name="markTextChanges"> <widget class="QCheckBox" name="markTextChanges">
<property name="text"> <property name="text">
<string>Mark text changes</string> <string>Mark &amp;text changes</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -78,7 +78,14 @@
<item row="2" column="1"> <item row="2" column="1">
<widget class="QCheckBox" name="animateMatchingParentheses"> <widget class="QCheckBox" name="animateMatchingParentheses">
<property name="text"> <property name="text">
<string>Animate matching parentheses</string> <string>&amp;Animate matching parentheses</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="autoFoldFirstComment">
<property name="text">
<string>Auto-fold first &amp;comment</string>
</property> </property>
</widget> </widget>
</item> </item>