Skip to content

Commit

Permalink
Add folding shortcuts
Browse files Browse the repository at this point in the history
Closes #526
  • Loading branch information
dail8859 committed Mar 30, 2024
1 parent b2a3cfb commit e30ed44
Show file tree
Hide file tree
Showing 4 changed files with 250 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/NotepadNext/ScintillaNext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,36 @@ void ScintillaNext::cutAllowLine()
}
}

void ScintillaNext::modifyFoldLevels(int level, int action)
{
const int totalLines = lineCount();

int line = 0;
while (line < totalLines) {
int foldFlags = foldLevel(line); // Even though its called fold level it contains several other flags
bool isHeader = foldFlags & SC_FOLDLEVELHEADERFLAG;
int actualLevel = (foldFlags & SC_FOLDLEVELNUMBERMASK) - SC_FOLDLEVELBASE;

if (isHeader && actualLevel == level) {
foldLine(line, action);
line = lastChild(line, -1) + 1;
}
else {
++line;
}
}
}

void ScintillaNext::foldAllLevels(int level)
{
modifyFoldLevels(level, SC_FOLDACTION_CONTRACT);
}

void ScintillaNext::unFoldAllLevels(int level)
{
modifyFoldLevels(level, SC_FOLDACTION_EXPAND);
}

void ScintillaNext::deleteLeadingEmptyLines()
{
while (lineCount() > 1 && lineIsEmpty(0)) {
Expand Down
4 changes: 4 additions & 0 deletions src/NotepadNext/ScintillaNext.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ class ScintillaNext : public ScintillaEdit

void cutAllowLine();

void modifyFoldLevels(int level, int action);
void foldAllLevels(int level);
void unFoldAllLevels(int level);

void deleteLeadingEmptyLines();
void deleteTrailingEmptyLines();

Expand Down
23 changes: 23 additions & 0 deletions src/NotepadNext/dialogs/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,29 @@ MainWindow::MainWindow(NotepadNextApplication *app) :
connect(zoomEventWatcher, &ZoomEventWatcher::zoomIn, ui->actionZoomIn, &QAction::trigger);
connect(zoomEventWatcher, &ZoomEventWatcher::zoomOut, ui->actionZoomOut, &QAction::trigger);

connect(ui->actionFoldAll, &QAction::triggered, this, [=]() { currentEditor()->foldAll(SC_FOLDACTION_CONTRACT | SC_FOLDACTION_CONTRACT_EVERY_LEVEL); });
connect(ui->actionUnfoldAll, &QAction::triggered, this, [=]() { currentEditor()->foldAll(SC_FOLDACTION_EXPAND | SC_FOLDACTION_CONTRACT_EVERY_LEVEL); });

connect(ui->actionFoldLevel1, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(0); });
connect(ui->actionFoldLevel2, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(1); });
connect(ui->actionFoldLevel3, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(2); });
connect(ui->actionFoldLevel4, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(3); });
connect(ui->actionFoldLevel5, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(4); });
connect(ui->actionFoldLevel6, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(5); });
connect(ui->actionFoldLevel7, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(6); });
connect(ui->actionFoldLevel8, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(7); });
connect(ui->actionFoldLevel9, &QAction::triggered, this, [=]() { currentEditor()->foldAllLevels(8); });

connect(ui->actionUnfoldLevel1, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(0); });
connect(ui->actionUnfoldLevel2, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(1); });
connect(ui->actionUnfoldLevel3, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(2); });
connect(ui->actionUnfoldLevel4, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(3); });
connect(ui->actionUnfoldLevel5, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(4); });
connect(ui->actionUnfoldLevel6, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(5); });
connect(ui->actionUnfoldLevel7, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(6); });
connect(ui->actionUnfoldLevel8, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(7); });
connect(ui->actionUnfoldLevel9, &QAction::triggered, this, [=]() { currentEditor()->unFoldAllLevels(8); });

languageActionGroup = new QActionGroup(this);
languageActionGroup->setExclusive(true);

Expand Down
193 changes: 193 additions & 0 deletions src/NotepadNext/dialogs/MainWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,45 @@
<addaction name="actionShowIndentGuide"/>
<addaction name="actionShowWrapSymbol"/>
</widget>
<widget class="QMenu" name="menuFold_Level">
<property name="title">
<string>Fold Level</string>
</property>
<addaction name="actionFoldLevel1"/>
<addaction name="actionFoldLevel2"/>
<addaction name="actionFoldLevel3"/>
<addaction name="actionFoldLevel4"/>
<addaction name="actionFoldLevel5"/>
<addaction name="actionFoldLevel6"/>
<addaction name="actionFoldLevel7"/>
<addaction name="actionFoldLevel8"/>
<addaction name="actionFoldLevel9"/>
</widget>
<widget class="QMenu" name="menuUnfold_Level">
<property name="title">
<string>Unfold Level</string>
</property>
<addaction name="actionUnfoldLevel1"/>
<addaction name="actionUnfoldLevel2"/>
<addaction name="actionUnfoldLevel3"/>
<addaction name="actionUnfoldLevel4"/>
<addaction name="actionUnfoldLevel5"/>
<addaction name="actionUnfoldLevel6"/>
<addaction name="actionUnfoldLevel7"/>
<addaction name="actionUnfoldLevel8"/>
<addaction name="actionUnfoldLevel9"/>
</widget>
<addaction name="actionFullScreen"/>
<addaction name="separator"/>
<addaction name="menuShowSymbol"/>
<addaction name="menuZoom"/>
<addaction name="actionWordWrap"/>
<addaction name="separator"/>
<addaction name="actionFoldAll"/>
<addaction name="actionUnfoldAll"/>
<addaction name="menuFold_Level"/>
<addaction name="menuUnfold_Level"/>
<addaction name="separator"/>
</widget>
<widget class="QMenu" name="menuLanguage">
<property name="title">
Expand Down Expand Up @@ -1164,6 +1197,166 @@
<enum>QAction::NoRole</enum>
</property>
</action>
<action name="actionFoldLevel1">
<property name="text">
<string>Fold Level 1</string>
</property>
<property name="shortcut">
<string>Alt+1</string>
</property>
</action>
<action name="actionFoldLevel2">
<property name="text">
<string>Fold Level 2</string>
</property>
<property name="shortcut">
<string>Alt+2</string>
</property>
</action>
<action name="actionFoldLevel3">
<property name="text">
<string>Fold Level 3</string>
</property>
<property name="shortcut">
<string>Alt+3</string>
</property>
</action>
<action name="actionFoldLevel4">
<property name="text">
<string>Fold Level 4</string>
</property>
<property name="shortcut">
<string>Alt+4</string>
</property>
</action>
<action name="actionUnfoldLevel1">
<property name="text">
<string>Unfold Level 1</string>
</property>
<property name="shortcut">
<string>Alt+Shift+1</string>
</property>
</action>
<action name="actionUnfoldLevel2">
<property name="text">
<string>Unfold Level 2</string>
</property>
<property name="shortcut">
<string>Alt+Shift+2</string>
</property>
</action>
<action name="actionUnfoldLevel3">
<property name="text">
<string>Unfold Level 3</string>
</property>
<property name="shortcut">
<string>Alt+Shift+3</string>
</property>
</action>
<action name="actionUnfoldLevel4">
<property name="text">
<string>Unfold Level 4</string>
</property>
<property name="shortcut">
<string>Alt+Shift+4</string>
</property>
</action>
<action name="actionFoldAll">
<property name="text">
<string>Fold All</string>
</property>
<property name="shortcut">
<string>Alt+0</string>
</property>
</action>
<action name="actionUnfoldAll">
<property name="text">
<string>Unfold All</string>
</property>
<property name="shortcut">
<string>Alt+Shift+0</string>
</property>
</action>
<action name="actionFoldLevel5">
<property name="text">
<string>Fold Level 5</string>
</property>
<property name="shortcut">
<string>Alt+5</string>
</property>
</action>
<action name="actionFoldLevel6">
<property name="text">
<string>Fold Level 6</string>
</property>
<property name="shortcut">
<string>Alt+6</string>
</property>
</action>
<action name="actionFoldLevel7">
<property name="text">
<string>Fold Level 7</string>
</property>
<property name="shortcut">
<string>Alt+7</string>
</property>
</action>
<action name="actionFoldLevel8">
<property name="text">
<string>Fold Level 8</string>
</property>
<property name="shortcut">
<string>Alt+8</string>
</property>
</action>
<action name="actionFoldLevel9">
<property name="text">
<string>Fold Level 9</string>
</property>
<property name="shortcut">
<string>Alt+9</string>
</property>
</action>
<action name="actionUnfoldLevel5">
<property name="text">
<string>Unfold Level 5</string>
</property>
<property name="shortcut">
<string>Alt+Shift+5</string>
</property>
</action>
<action name="actionUnfoldLevel6">
<property name="text">
<string>Unfold Level 6</string>
</property>
<property name="shortcut">
<string>Alt+Shift+6</string>
</property>
</action>
<action name="actionUnfoldLevel7">
<property name="text">
<string>Unfold Level 7</string>
</property>
<property name="shortcut">
<string>Alt+Shift+7</string>
</property>
</action>
<action name="actionUnfoldLevel8">
<property name="text">
<string>Unfold Level 8</string>
</property>
<property name="shortcut">
<string>Alt+Shift+8</string>
</property>
</action>
<action name="actionUnfoldLevel9">
<property name="text">
<string>Unfold Level 9</string>
</property>
<property name="shortcut">
<string>Alt+Shift+9</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
Expand Down

0 comments on commit e30ed44

Please sign in to comment.