mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-27 20:44:13 +02:00
6d42556d9f
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)
103 lines
3.3 KiB
C++
103 lines
3.3 KiB
C++
/*
|
|
Copyright 2006-2026 The QElectroTech Team
|
|
This file is part of QElectroTech.
|
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef ELEMENTPICKERPOPUP_H
|
|
#define ELEMENTPICKERPOPUP_H
|
|
|
|
#include "elementslocation.h"
|
|
#include "../shortcutbarsettings.h"
|
|
|
|
#include <QFrame>
|
|
|
|
class ElementsCollectionWidget;
|
|
class QLineEdit;
|
|
class QListView;
|
|
class QStandardItemModel;
|
|
class QLabel;
|
|
class QAction;
|
|
class QHBoxLayout;
|
|
class QListWidget;
|
|
class QListWidgetItem;
|
|
|
|
/**
|
|
@brief A cursor-anchored element picker.
|
|
|
|
Opens where the mouse is, focused on its search field: type to filter,
|
|
Enter to place, Esc to close. It is a recall tool, as opposed to the
|
|
Collections dock, which is a browsing tool.
|
|
|
|
It deliberately does not build its own ElementsCollectionModel. Loading the
|
|
collection is already the slow part of startup and a second copy would
|
|
double it, so the picker asks the dock's widget to run the query -- see
|
|
ElementsCollectionWidget::rankedSearch(). That also means the two always
|
|
agree on results and ranking.
|
|
*/
|
|
class ElementPickerPopup : public QFrame
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit ElementPickerPopup(ElementsCollectionWidget *source,
|
|
QWidget *parent = nullptr);
|
|
|
|
void popUpAt(const QPoint &global_pos);
|
|
void popUpShortcutBar(const QPoint &global_pos,
|
|
ShortcutBarSettings::Context context);
|
|
|
|
signals:
|
|
/// Emitted when the user picks an element; the popup has closed
|
|
void elementChosen(const ElementsLocation &location);
|
|
|
|
protected:
|
|
void keyPressEvent(QKeyEvent *event) override;
|
|
void closeEvent(QCloseEvent *event) override;
|
|
|
|
private:
|
|
void runSearch();
|
|
void chooseCurrent();
|
|
void showPalette();
|
|
void show(const QPoint &global_pos);
|
|
void setCommands(const QList<QAction *> &commands);
|
|
QAction *commandAction(const QString &id) const;
|
|
QListWidgetItem *commandItem(const QString &id, bool icon_only) const;
|
|
void startCustomising();
|
|
void fillCustomising(const QStringList &ids);
|
|
void finishCustomising(bool save);
|
|
void setPickerVisible(bool visible);
|
|
int loadPaletteDir(const QString &dir_path, const QString &prefix,
|
|
int depth);
|
|
|
|
ElementsCollectionWidget *m_source = nullptr;
|
|
QLineEdit *m_search = nullptr;
|
|
QListView *m_view = nullptr;
|
|
QStandardItemModel *m_model = nullptr;
|
|
QLabel *m_hint = nullptr;
|
|
QWidget *m_commands = nullptr;
|
|
QHBoxLayout *m_commands_layout = nullptr;
|
|
/// Opened as the shortcut bar, as opposed to the plain picker
|
|
bool m_bar_mode = false;
|
|
ShortcutBarSettings::Context m_context = ShortcutBarSettings::Canvas;
|
|
/// Customising the bar in place
|
|
bool m_customising = false;
|
|
QWidget *m_editor = nullptr;
|
|
QListWidget *m_edit_row = nullptr;
|
|
QListWidget *m_edit_available = nullptr;
|
|
bool m_palette_mode = true;
|
|
};
|
|
|
|
#endif // ELEMENTPICKERPOPUP_H
|