Customise the shortcut bar in place

Right-click the shortcut bar, or click the "…" button at its end, and it
turns into a small window holding two lists: the bar's commands, left
to right, and every other command. Drag a command onto the bar, off
it, or to another place on it; a double click moves it to the other
list. Terminé saves and shows the bar again where it was, with the
result; Annuler, Esc or closing the window leaves it as it was.
"Valeurs par défaut" puts back the defaults for this context.

A Qt::Popup closes on a press outside it and holds the mouse grab, so
the bar is re-shown as a Qt::Tool window for the time of the edit.
Only QSettings is written, through ShortcutBarSettings, never the
project's undo stack.

The popup now looks the commands up itself (popUpShortcutBar(pos,
context)) instead of being handed actions, since it has to rebuild
them after an edit. ShortcutBarSettings::availableIds() lists what can
go on the bar, shared with the configuration page. An empty bar still
shows its "…" button, so it can be filled again.

Discussion #1033.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G2d2Zi8BfrYRPX88zhaoFG
(cherry picked from commit 4145d4bec1d403126b2a6587105aea47092db8a2)
This commit is contained in:
ispyisail
2026-09-26 13:11:22 +12:00
parent 2da101ca90
commit 6d42556d9f
6 changed files with 323 additions and 28 deletions
+20
View File
@@ -17,6 +17,8 @@
*/
#include "shortcutbarsettings.h"
#include "shortcutmanager.h"
#include <QCoreApplication>
#include <QSettings>
@@ -120,3 +122,21 @@ void ShortcutBarSettings::setIds(Context context, const QStringList &ids)
settings.setValue(settingsKey(context), ids);
}
}
/**
@return every command that can go on the bar: those the diagram editor
registered with ShortcutManager, except the one that opens the bar.
*/
QStringList ShortcutBarSettings::availableIds()
{
QStringList ids;
for (const ShortcutManager::ShortcutInfo &info :
ShortcutManager::instance().allShortcuts())
{
if (info.id.startsWith(QLatin1String("diagrameditor."))
&& info.id != QLatin1String("diagrameditor.show_shortcut_bar")) {
ids << info.id;
}
}
return ids;
}