mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-03 17:34:12 +02:00
Script buttons: stored scripts become commands with an icon
Every .js file in the "scripts" folder of the user's data folder that starts with a // ==QETScript== header becomes a command: in Projet > Scripts, as a button on a new Scripts toolbar, and, because it is registered with ShortcutManager as diagrameditor.script.<file name>, in the shortcut settings, the shortcut bar (S) and command search. The header gives its name, icon (a file next to the script or a theme icon; a tile with its initials otherwise), tooltip, default shortcut and when it is enabled (always, with a selection, with a conductor selected). The folder is watched, so a script added, edited or deleted while QET is open appears, changes or goes without a restart. A file with a header that cannot be used gets no button; the Scripts menu lists it with the reason. The menu also opens the folder, and holds "Exécuter un script…". A click runs the script on the current project as one undo step named after it, and asks to switch scripting on first, like "Exécuter un script…" does: scripting stays off by default. ShortcutManager::unregisterAction() takes a command out of the lists when its script is deleted, and lets it come back under a new name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
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 SCRIPTLIBRARY_H
|
||||
#define SCRIPTLIBRARY_H
|
||||
|
||||
#include "scriptheader.h"
|
||||
|
||||
#include <QFileSystemWatcher>
|
||||
#include <QIcon>
|
||||
#include <QList>
|
||||
#include <QObject>
|
||||
#include <QTimer>
|
||||
|
||||
/**
|
||||
@brief The ScriptLibrary class
|
||||
The user's stored scripts: every .js file with a ScriptHeader in
|
||||
folder(). The folder is the whole interface. A script written by hand
|
||||
in any editor, one saved by the script manager and one installed by an
|
||||
assistant through the qet MCP server all arrive the same way, as a file,
|
||||
and the library notices it with a QFileSystemWatcher and emits changed().
|
||||
|
||||
One instance for the application, shared by every editor window.
|
||||
*/
|
||||
class ScriptLibrary : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
struct Script
|
||||
{
|
||||
ScriptHeader header;
|
||||
QString path;
|
||||
};
|
||||
|
||||
static ScriptLibrary &instance();
|
||||
static QString folder();
|
||||
static QString actionId(const QString &script_id);
|
||||
static QIcon icon(const Script &script);
|
||||
|
||||
QList<Script> scripts() const;
|
||||
QStringList errors() const;
|
||||
|
||||
signals:
|
||||
void changed();
|
||||
|
||||
private:
|
||||
ScriptLibrary();
|
||||
void rescan();
|
||||
void watch();
|
||||
|
||||
QFileSystemWatcher m_watcher;
|
||||
QTimer m_rescan_timer;
|
||||
QList<Script> m_scripts;
|
||||
QStringList m_errors;
|
||||
};
|
||||
|
||||
#endif // SCRIPTLIBRARY_H
|
||||
Reference in New Issue
Block a user