Add keyboard shortcuts for bookmarks

Add keyboard shortcuts to move bookmarks up or down
Add keyboard shortcut to sort bookmarks by filenames and line numbers

Fixes: QTCREATORBUG-30286
Change-Id: Iaf40f389e51357cb7d9fdf214e3acd0765fd1201
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Xavier BESSON
2024-07-06 16:26:24 +02:00
committed by Xavier BESSON (Personal)
parent b2d08d4f09
commit f15f048ee9
3 changed files with 55 additions and 9 deletions

View File

@@ -214,6 +214,14 @@ BookmarkView::BookmarkView()
setDragDropMode(QAbstractItemView::DragDrop);
connect(this, &QAbstractItemView::activated, this, &BookmarkView::gotoBookmark);
connect(this->selectionModel(), &QItemSelectionModel::currentRowChanged,
this, [=](const QModelIndex &current, const QModelIndex &previous) {
Q_UNUSED(previous)
Command *moveUpCmd = ActionManager::command(TextEditor::Constants::BOOKMARKS_MOVEUP_ACTION);
Command *moveDownCmd = ActionManager::command(TextEditor::Constants::BOOKMARKS_MOVEDOWN_ACTION);
moveUpCmd->action()->setEnabled(current.isValid());
moveDownCmd->action()->setEnabled(current.isValid());
});
}
QList<QToolButton *> BookmarkView::createToolBarWidgets()
@@ -233,8 +241,14 @@ QList<QToolButton *> BookmarkView::createToolBarWidgets()
void BookmarkView::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu;
QAction *moveUp = menu.addAction(Tr::tr("Move Up"));
QAction *moveDown = menu.addAction(Tr::tr("Move Down"));
Command *moveUpCmd = ActionManager::command(TextEditor::Constants::BOOKMARKS_MOVEUP_ACTION);
Command *moveDownCmd = ActionManager::command(TextEditor::Constants::BOOKMARKS_MOVEDOWN_ACTION);
menu.addAction(moveUpCmd->action());
menu.addAction(moveDownCmd->action());
menu.addSeparator();
Command *sortByFilenamesCmd = ActionManager::command(TextEditor::Constants::BOOKMARKS_SORTBYFILENAMES_ACTION);
menu.addAction(sortByFilenamesCmd->action());
menu.addSeparator();
QAction *edit = menu.addAction(Tr::tr("&Edit"));
menu.addSeparator();
QAction *remove = menu.addAction(Tr::tr("&Remove"));
@@ -243,18 +257,17 @@ void BookmarkView::contextMenuEvent(QContextMenuEvent *event)
m_contextMenuIndex = indexAt(event->pos());
if (!m_contextMenuIndex.isValid()) {
moveUp->setEnabled(false);
moveDown->setEnabled(false);
moveUpCmd->action()->setEnabled(false);
moveDownCmd->action()->setEnabled(false);
remove->setEnabled(false);
edit->setEnabled(false);
}
if (model()->rowCount() == 0)
if (model()->rowCount() == 0) {
removeAll->setEnabled(false);
}
BookmarkManager *manager = &bookmarkManager();
connect(moveUp, &QAction::triggered, manager, &BookmarkManager::moveUp);
connect(moveDown, &QAction::triggered, manager, &BookmarkManager::moveDown);
connect(remove, &QAction::triggered, this, &BookmarkView::removeFromContextMenu);
connect(removeAll, &QAction::triggered, this, &BookmarkView::removeAll);
connect(edit, &QAction::triggered, manager, &BookmarkManager::edit);
@@ -327,6 +340,7 @@ BookmarkManager::BookmarkManager(QObject *parent)
const Id bookmarkMenuId = "Bookmarks.Menu";
const Context editorManagerContext(Core::Constants::C_EDITORMANAGER);
const Context bookmarksContext(BOOKMARKS_CONTEXT);
MenuBuilder bookmarkMenu(bookmarkMenuId);
bookmarkMenu.setTitle(Tr::tr("&Bookmarks"));
@@ -413,6 +427,24 @@ BookmarkManager::BookmarkManager(QObject *parent)
ActionContainer *touchBar = ActionManager::actionContainer(Core::Constants::TOUCH_BAR);
touchBar->addAction(toggleAction.command(), Core::Constants::G_TOUCHBAR_EDITOR);
ActionBuilder moveDownAction(this, Constants::BOOKMARKS_MOVEDOWN_ACTION);
moveDownAction.setContext(bookmarksContext);
moveDownAction.setText(Tr::tr("Move Down"));
moveDownAction.setDefaultKeySequence(Tr::tr("Ctrl+Alt+."));
moveDownAction.addOnTriggered(this, [this] { moveDown(); });
ActionBuilder moveUpAction(this, Constants::BOOKMARKS_MOVEUP_ACTION);
moveUpAction.setContext(bookmarksContext);
moveUpAction.setText(Tr::tr("Move Up"));
moveUpAction.setDefaultKeySequence(Tr::tr("Ctrl+Alt+,"));
moveUpAction.addOnTriggered(this, [this] { moveUp(); });
ActionBuilder sortByFilenamesAction(this, Constants::BOOKMARKS_SORTBYFILENAMES_ACTION);
sortByFilenamesAction.setContext(bookmarksContext);
sortByFilenamesAction.setText(Tr::tr("Sort by Filenames"));
sortByFilenamesAction.setDefaultKeySequence(Tr::tr("Ctrl+Alt+P"));
sortByFilenamesAction.addOnTriggered(this, [this] { sortByFilenames(); });
updateActionStatus();
}
@@ -889,6 +921,16 @@ void BookmarkManager::edit()
}
}
void BookmarkManager::sortByFilenames()
{
beginResetModel();
std::sort(m_bookmarksList.begin(), m_bookmarksList.end(), [](const Bookmark* a, const Bookmark* b){
return a->filePath().fileName() < b->filePath().fileName()
|| (a->filePath().fileName() == b->filePath().fileName() && a->lineNumber() < b->lineNumber());
});
endResetModel();
}
/* Returns the bookmark at the given file and line number, or 0 if no such bookmark exists. */
Bookmark *BookmarkManager::findBookmark(const FilePath &filePath, int lineNumber)
{

View File

@@ -75,6 +75,7 @@ public:
void moveDown();
void edit();
void editByFileAndLine(const Utils::FilePath &fileName, int lineNumber);
void sortByFilenames();
bool gotoBookmark(const Bookmark *bookmark) const;
void requestContextMenu(const Utils::FilePath &filePath, int lineNumber, QMenu *menu);

View File

@@ -245,6 +245,9 @@ const char GENERIC_PROPOSAL_ID[] = "TextEditor.GenericProposalId";
const char BOOKMARKS_PREV_ACTION[] = "Bookmarks.Previous";
const char BOOKMARKS_NEXT_ACTION[] = "Bookmarks.Next";
const char BOOKMARKS_MOVEUP_ACTION[] = "Bookmarks.MoveUp";
const char BOOKMARKS_MOVEDOWN_ACTION[] = "Bookmarks.MoveDown";
const char BOOKMARKS_SORTBYFILENAMES_ACTION[] = "Bookmarks.SortByFilenames";
/**
* Delay before tooltip will be shown near completion assistant proposal