mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-05 18:54:14 +02:00
Live mode: remember the start warning and "always" across restarts
Live mode asked at every start (the "Mode direct" warning) and forgot "always" for scripts when QElectroTech closed, so a user who works with an assistant every day re-enabled it every day. Both are now opt-in and remembered: the warning has a "Ne plus demander au démarrage" checkbox (scripting/live_skip_warning), and the ask-first choice is saved (scripting/live_ask_first; the Assistant panel's checkbox and "Toujours" in the script window). The status bar still shows live mode whenever it is open. Switching live mode off in the settings clears "don't ask again", so turning it back on warns again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -4086,7 +4086,7 @@ void QETDiagramEditor::setUpLiveIndicator()
|
||||
auto *dock_layout = new QVBoxLayout(content);
|
||||
auto *ask = new QCheckBox(tr("Demander avant d'exécuter un script écrit par l'assistant"), content);
|
||||
ask->setChecked(LiveServer::instance().askFirst());
|
||||
ask->setToolTip(tr("Pour cette session seulement : chaque démarrage redemande"));
|
||||
ask->setToolTip(tr("Retenu après un redémarrage"));
|
||||
auto *log = new QListWidget(content);
|
||||
log->setWordWrap(true);
|
||||
dock_layout->addWidget(ask);
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <QPixmap>
|
||||
#include <QPlainTextEdit>
|
||||
#include <QVBoxLayout>
|
||||
#include <QCheckBox>
|
||||
#include <QDialog>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QLabel>
|
||||
@@ -73,7 +74,8 @@ LiveServer &LiveServer::instance()
|
||||
return server;
|
||||
}
|
||||
|
||||
LiveServer::LiveServer()
|
||||
LiveServer::LiveServer() :
|
||||
m_ask_first(QetSettings::liveAskFirst())
|
||||
{
|
||||
connect(qApp, &QCoreApplication::aboutToQuit, this, &LiveServer::stop);
|
||||
}
|
||||
@@ -104,6 +106,10 @@ void LiveServer::askAndStart(QWidget *parent)
|
||||
return;
|
||||
}
|
||||
m_asked = true;
|
||||
if (QetSettings::liveSkipStartWarning()) {
|
||||
start();
|
||||
return;
|
||||
}
|
||||
|
||||
QMessageBox box(QMessageBox::Warning, tr("Mode direct"),
|
||||
tr("Le mode direct est activé : un assistant IA connecté "
|
||||
@@ -117,11 +123,17 @@ void LiveServer::askAndStart(QWidget *parent)
|
||||
box.addButton(tr("&Pas pour cette session"), QMessageBox::RejectRole);
|
||||
QPushButton *off = box.addButton(tr("&Désactiver"), QMessageBox::DestructiveRole);
|
||||
box.setDefaultButton(go);
|
||||
auto *remember = new QCheckBox(tr("Ne plus demander au démarrage"), &box);
|
||||
remember->setToolTip(tr("Le mode direct s'ouvrira à chaque démarrage. Pour être "
|
||||
"de nouveau averti, désactivez-le puis réactivez-le dans "
|
||||
"Configurer QElectroTech > Général > Projets."));
|
||||
box.setCheckBox(remember);
|
||||
box.exec();
|
||||
|
||||
if (box.clickedButton() == off) {
|
||||
QetSettings::setLiveAssistantEnabled(false);
|
||||
} else if (box.clickedButton() == go) {
|
||||
if (remember->isChecked()) QetSettings::setLiveSkipStartWarning(true);
|
||||
start();
|
||||
}
|
||||
}
|
||||
@@ -241,7 +253,7 @@ void LiveServer::handle(const QJsonObject &request)
|
||||
const QString name = request.value(QStringLiteral("name")).toString();
|
||||
const QString source = request.value(QStringLiteral("source")).toString();
|
||||
//A script the assistant just wrote: the user sees it first,
|
||||
//unless they said "always" this session. A stored script
|
||||
//unless they chose "always" (remembered). A stored script
|
||||
//is one the user already has, so it runs as a click would.
|
||||
if (m_ask_first && !confirm(name, source))
|
||||
answer = failure(QStringLiteral("refused by the user"));
|
||||
@@ -380,6 +392,7 @@ void LiveServer::setAskFirst(bool ask)
|
||||
{
|
||||
if (ask == m_ask_first) return;
|
||||
m_ask_first = ask;
|
||||
QetSettings::setLiveAskFirst(ask);
|
||||
emit askFirstChanged(ask);
|
||||
}
|
||||
|
||||
@@ -514,7 +527,7 @@ bool LiveServer::confirm(const QString &name, const QString &source)
|
||||
auto *buttons = new QDialogButtonBox(&dialog);
|
||||
QPushButton *run = buttons->addButton(tr("&Exécuter"), QDialogButtonBox::AcceptRole);
|
||||
buttons->addButton(tr("&Refuser"), QDialogButtonBox::RejectRole);
|
||||
QPushButton *always = buttons->addButton(tr("&Toujours pour cette session"),
|
||||
QPushButton *always = buttons->addButton(tr("&Toujours"),
|
||||
QDialogButtonBox::AcceptRole);
|
||||
layout->addWidget(buttons);
|
||||
QPushButton *clicked = nullptr;
|
||||
|
||||
@@ -34,7 +34,8 @@ class QWidget;
|
||||
|
||||
Three things must all be true before anything can connect: scripting is
|
||||
allowed, the "mode direct" setting is on (off by default), and the user
|
||||
accepted the warning shown at this start. With the setting off this
|
||||
accepted the warning shown at this start (or once ticked "don't ask
|
||||
again", which lasts until the setting is switched off). With the setting off this
|
||||
class opens nothing and QElectroTech behaves as if it did not exist.
|
||||
|
||||
The channel is a QLocalServer only the user's own account can open,
|
||||
@@ -96,7 +97,7 @@ class LiveServer : public QObject
|
||||
State m_state = Off;
|
||||
bool m_asked = false;
|
||||
bool m_busy = false;
|
||||
bool m_ask_first = true; ///< per session, never saved: every start asks again
|
||||
bool m_ask_first = true; ///< saved: QetSettings::liveAskFirst()
|
||||
};
|
||||
|
||||
#endif // LIVESERVER_H
|
||||
|
||||
@@ -171,6 +171,44 @@ namespace QetSettings
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue("scripting/live_assistant", enabled);
|
||||
//Turned off and on again: the start warning comes back, so
|
||||
//"don't ask again" never outlives the choice it was made for
|
||||
if (!enabled) settings.remove("scripting/live_skip_warning");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief liveSkipStartWarning
|
||||
* @return true when the user ticked "don't ask again" in live mode's
|
||||
* start warning: live mode then opens at every start without asking,
|
||||
* until it is switched off in the settings. False unless they did.
|
||||
*/
|
||||
bool liveSkipStartWarning()
|
||||
{
|
||||
QSettings settings;
|
||||
return settings.value("scripting/live_skip_warning", false).toBool();
|
||||
}
|
||||
|
||||
void setLiveSkipStartWarning(bool skip)
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue("scripting/live_skip_warning", skip);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief liveAskFirst
|
||||
* @return whether live mode shows each script the assistant wrote and
|
||||
* asks before running it. On unless the user chose "always".
|
||||
*/
|
||||
bool liveAskFirst()
|
||||
{
|
||||
QSettings settings;
|
||||
return settings.value("scripting/live_ask_first", true).toBool();
|
||||
}
|
||||
|
||||
void setLiveAskFirst(bool ask)
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue("scripting/live_ask_first", ask);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,6 +40,10 @@ namespace QetSettings
|
||||
bool scriptingForcedByEnvironment();
|
||||
bool liveAssistantEnabled();
|
||||
void setLiveAssistantEnabled(bool enabled);
|
||||
bool liveSkipStartWarning();
|
||||
void setLiveSkipStartWarning(bool skip);
|
||||
bool liveAskFirst();
|
||||
void setLiveAskFirst(bool ask);
|
||||
|
||||
/**
|
||||
@brief The sheet (folio) background the diagram editors draw.
|
||||
|
||||
Reference in New Issue
Block a user