Skip to content

Commit

Permalink
refactor: Change back the run dialog widget to a dialog
Browse files Browse the repository at this point in the history
The widget is not needed anymore now that we have interactive scripts.
Note: need update of the photon scripts (later).

Revert "Move RunScript widget as part of the main window"
This reverts commit b2793ab.

New features:
- use a combobox to list the scripts (easier to find)
- save/restore latest run script (useful particularly with IDE integration)
  • Loading branch information
narnaud authored and LeonMatthesKDAB committed Dec 13, 2024
1 parent e0aa6a3 commit 3257c14
Show file tree
Hide file tree
Showing 10 changed files with 204 additions and 218 deletions.
6 changes: 3 additions & 3 deletions src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ set(PROJECT_SOURCES
rctouidialog.h
rctouidialog.cpp
rctouidialog.ui
runscriptwidget.h
runscriptwidget.cpp
runscriptwidget.ui
runscriptdialog.h
runscriptdialog.cpp
runscriptdialog.ui
scriptpanel.h
scriptpanel.cpp
scriptlistpanel.cpp
Expand Down
4 changes: 2 additions & 2 deletions src/gui/knutmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include "knutmain.h"
#include "mainwindow.h"
#include "optionsdialog.h"
#include "runscriptwidget.h"
#include "runscriptdialog.h"

namespace Gui {

Expand All @@ -33,7 +33,7 @@ void KnutMain::doParse(const QCommandLineParser &parser) const
{
const bool runDialog = parser.isSet("gui-run");
if (runDialog) {
auto dialog = new RunScriptWidget;
auto dialog = new RunScriptDialog;
dialog->show();
return;
}
Expand Down
22 changes: 10 additions & 12 deletions src/gui/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#include "rctoqrcdialog.h"
#include "rctouidialog.h"
#include "rcui/rcfileview.h"
#include "runscriptwidget.h"
#include "runscriptdialog.h"
#include "scriptlistpanel.h"
#include "scriptpanel.h"
#include "shortcutmanager.h"
Expand Down Expand Up @@ -181,11 +181,9 @@ MainWindow::MainWindow(QWidget *parent)
connect(ui->actionCloseDocument, &QAction::triggered, this, &MainWindow::closeDocument);

// Script
ui->runScriptWidget->hide();
ui->runScriptWidget->installEventFilter(this);
ui->apiExecutorWidget->hide();
ui->apiExecutorWidget->installEventFilter(this);
connect(ui->actionRunScript, &QAction::triggered, ui->runScriptWidget, &RunScriptWidget::open);
connect(ui->actionRunScript, &QAction::triggered, this, &MainWindow::runScript);
connect(ui->actionStartRecordingScript, &QAction::triggered, m_historyPanel, &HistoryPanel::startRecording);
connect(ui->actionStopRecordingScript, &QAction::triggered, m_historyPanel, &HistoryPanel::stopRecording);
connect(ui->actionPlayLastScript, &QAction::triggered, m_scriptPanel, &ScriptPanel::runScript);
Expand Down Expand Up @@ -312,16 +310,10 @@ ShortcutManager *MainWindow::shortcutManager() const
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::Show) {
if (qobject_cast<FindWidget *>(watched)) {
if (qobject_cast<FindWidget *>(watched))
ui->apiExecutorWidget->hide();
ui->runScriptWidget->hide();
} else if (qobject_cast<APIExecutorWidget *>(watched)) {
else if (qobject_cast<APIExecutorWidget *>(watched))
ui->findWidget->hide();
ui->runScriptWidget->hide();
} else if (qobject_cast<RunScriptWidget *>(watched)) {
ui->apiExecutorWidget->hide();
ui->findWidget->hide();
}
}
return QMainWindow::eventFilter(watched, event);
}
Expand Down Expand Up @@ -562,6 +554,12 @@ See Wikipedia article: <a href="https://en.wikipedia.org/wiki/Saint_Knut%27s_Day
dialog.exec();
}

void MainWindow::runScript()
{
RunScriptDialog dialog(this);
dialog.exec();
}

void MainWindow::openOptions()
{
OptionsDialog dialog(this);
Expand Down
3 changes: 3 additions & 0 deletions src/gui/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ class MainWindow : public QMainWindow
void openOptions();
void returnToEditor();

// Script
void runScript();

// Edit
void selectAll();
void toggleMark();
Expand Down
9 changes: 0 additions & 9 deletions src/gui/mainwindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@
</property>
</widget>
</item>
<item>
<widget class="Gui::RunScriptWidget" name="runScriptWidget" native="true"/>
</item>
<item>
<widget class="Gui::FindWidget" name="findWidget" native="true"/>
</item>
Expand Down Expand Up @@ -535,12 +532,6 @@
<header>apiexecutorwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>Gui::RunScriptWidget</class>
<extends>QWidget</extends>
<header>runscriptwidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
Expand Down
91 changes: 91 additions & 0 deletions src/gui/runscriptdialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/*
This file is part of Knut.
SPDX-FileCopyrightText: 2024 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
SPDX-License-Identifier: GPL-3.0-only
Contact KDAB at <[email protected]> for commercial licensing options.
*/

#include "runscriptdialog.h"
#include "core/scriptmanager.h"
#include "ui_runscriptdialog.h"

#include <QApplication>
#include <QFileDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QSettings>
#include <kdalgorithms.h>

namespace Gui {

constexpr char LastScript[] = "lastScriptRun";

RunScriptDialog::RunScriptDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::RunScriptDialog)
{
ui->setupUi(this);
ui->comboBox->lineEdit()->setPlaceholderText("Name or path of a script");
setWindowTitle(QApplication::applicationName() + ' ' + QApplication::applicationVersion() + " - " + windowTitle());

connect(ui->toolButton, &QToolButton::clicked, this, &RunScriptDialog::chooseScript);
auto okButton = ui->buttonBox->button(QDialogButtonBox::Ok);
okButton->setEnabled(false);
connect(ui->comboBox, &QComboBox::currentTextChanged, this, [okButton](const QString &str) {
okButton->setEnabled(!str.trimmed().isEmpty());
});

const auto &list = Core::ScriptManager::instance()->scriptList();
QStringList scriptNames;
scriptNames.reserve(static_cast<int>(list.size()));
for (const auto &item : list)
scriptNames.push_back(item.name);
ui->comboBox->addItems(scriptNames);

// Load the latest script name from the settings
QSettings settings;
const auto &lastScript = settings.value(LastScript).toString();
if (!lastScript.isEmpty())
ui->comboBox->setCurrentText(lastScript);
}

RunScriptDialog::~RunScriptDialog() = default;

void RunScriptDialog::accept()
{
if (ui->comboBox->currentText().isEmpty())
return;

QString scriptName = ui->comboBox->currentText();
// Store the latest script run from the dialog
QSettings settings;
settings.setValue(LastScript, scriptName);

QFileInfo fi(scriptName);
if (!fi.exists()) {
const auto &list = Core::ScriptManager::instance()->scriptList();
auto result = kdalgorithms::find_if(list, [&scriptName](const auto &item) {
return item.name == scriptName;
});
if (!result)
return;
scriptName = result->fileName;
}

Core::ScriptManager::instance()->runScript(scriptName);
QDialog::accept();
}

void RunScriptDialog::chooseScript()
{
const QString fileName =
QFileDialog::getOpenFileName(this, QString(), ui->comboBox->currentText(), tr("Scripts (*.js *.qml)"));
if (fileName.isEmpty())
return;
ui->comboBox->setCurrentText(fileName);
}

} // namespace Gui
15 changes: 8 additions & 7 deletions src/gui/runscriptwidget.h → src/gui/runscriptdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,31 @@
#pragma once

#include <QDialog>

#include <memory>

namespace Gui {

namespace Ui {
class RunScriptWidget;
class RunScriptDialog;
}

class RunScriptWidget : public QWidget
class RunScriptDialog : public QDialog
{
Q_OBJECT

public:
explicit RunScriptWidget(QWidget *parent = nullptr);
~RunScriptWidget() override;
explicit RunScriptDialog(QWidget *parent = nullptr);
~RunScriptDialog() override;

void open();
public slots:
void accept() override;

private:
void chooseScript();
void run();

private:
std::unique_ptr<Ui::RunScriptWidget> ui;
std::unique_ptr<Ui::RunScriptDialog> ui;
};

} // namespace Gui
87 changes: 87 additions & 0 deletions src/gui/runscriptdialog.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Gui::RunScriptDialog</class>
<widget class="QDialog" name="Gui::RunScriptDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>390</width>
<height>70</height>
</rect>
</property>
<property name="windowTitle">
<string>Run Script Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QComboBox" name="comboBox">
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
<property name="placeholderText">
<string>Name or path of a script</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QToolButton" name="toolButton">
<property name="toolTip">
<string>Select Script</string>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Gui::RunScriptDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Gui::RunScriptDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
Loading

0 comments on commit 3257c14

Please sign in to comment.