mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-03 09:14:12 +02:00
e03e523069
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>
73 lines
1.9 KiB
C++
73 lines
1.9 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 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
|