// // RunningScriptsWidget.cpp // interface/src/ui // // Created by Mohammed Nafees on 03/28/2014. // Copyright 2014 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "ui_runningScriptsWidget.h" #include "RunningScriptsWidget.h" #include #include #include #include #include "Application.h" RunningScriptsWidget::RunningScriptsWidget(QWidget* parent) : FramelessDialog(parent, 0, POSITION_LEFT), ui(new Ui::RunningScriptsWidget) { ui->setupUi(this); setAllowResize(false); ui->hideWidgetButton->setIcon(QIcon(Application::resourcesPath() + "images/close.svg")); ui->reloadAllButton->setIcon(QIcon(Application::resourcesPath() + "images/reload.svg")); ui->stopAllButton->setIcon(QIcon(Application::resourcesPath() + "images/stop.svg")); ui->loadScriptButton->setIcon(QIcon(Application::resourcesPath() + "images/plus-white.svg")); _runningScriptsTable = new ScriptsTableWidget(ui->runningScriptsTableWidget); _runningScriptsTable->setColumnCount(2); _runningScriptsTable->setColumnWidth(0, 245); _runningScriptsTable->setColumnWidth(1, 22); connect(_runningScriptsTable, &QTableWidget::cellClicked, this, &RunningScriptsWidget::stopScript); _recentlyLoadedScriptsTable = new ScriptsTableWidget(ui->recentlyLoadedScriptsTableWidget); _recentlyLoadedScriptsTable->setColumnCount(1); _recentlyLoadedScriptsTable->setColumnWidth(0, 265); connect(_recentlyLoadedScriptsTable, &QTableWidget::cellClicked, this, &RunningScriptsWidget::loadScript); connect(ui->hideWidgetButton, &QPushButton::clicked, Application::getInstance(), &Application::toggleRunningScriptsWidget); connect(ui->reloadAllButton, &QPushButton::clicked, Application::getInstance(), &Application::reloadAllScripts); connect(ui->stopAllButton, &QPushButton::clicked, this, &RunningScriptsWidget::allScriptsStopped); connect(ui->loadScriptButton, &QPushButton::clicked, Application::getInstance(), &Application::loadDialog); } RunningScriptsWidget::~RunningScriptsWidget() { delete ui; } void RunningScriptsWidget::setBoundary(const QRect& rect) { _boundary = rect; } void RunningScriptsWidget::setRunningScripts(const QStringList& list) { _runningScriptsTable->setRowCount(list.size()); ui->noRunningScriptsLabel->setVisible(list.isEmpty()); ui->currentlyRunningLabel->setVisible(!list.isEmpty()); ui->runningScriptsTableWidget->setVisible(!list.isEmpty()); ui->reloadAllButton->setVisible(!list.isEmpty()); ui->stopAllButton->setVisible(!list.isEmpty()); for (int i = 0; i < list.size(); ++i) { QTableWidgetItem *scriptName = new QTableWidgetItem; scriptName->setText(QFileInfo(list.at(i)).fileName()); scriptName->setToolTip(list.at(i)); scriptName->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); QTableWidgetItem *closeIcon = new QTableWidgetItem; closeIcon->setIcon(QIcon(QPixmap(Application::resourcesPath() + "images/kill-script.svg").scaledToHeight(12))); _runningScriptsTable->setItem(i, 0, scriptName); _runningScriptsTable->setItem(i, 1, closeIcon); } int y = ui->runningScriptsTableWidget->y() + 12; for (int i = 0; i < _runningScriptsTable->rowCount(); ++i) { y += _runningScriptsTable->rowHeight(i); } ui->runningScriptsTableWidget->resize(ui->runningScriptsTableWidget->width(), y - 12); _runningScriptsTable->resize(_runningScriptsTable->width(), y - 12); ui->reloadAllButton->move(ui->reloadAllButton->x(), y); ui->stopAllButton->move(ui->stopAllButton->x(), y); ui->recentlyLoadedLabel->move(ui->recentlyLoadedLabel->x(), ui->stopAllButton->y() + ui->stopAllButton->height() + 61); ui->recentlyLoadedScriptsTableWidget->move(ui->recentlyLoadedScriptsTableWidget->x(), ui->recentlyLoadedLabel->y() + 19); createRecentlyLoadedScriptsTable(); } void RunningScriptsWidget::keyPressEvent(QKeyEvent* event) { int loadScriptNumber = -1; switch(event->key()) { case Qt::Key_Escape: Application::getInstance()->toggleRunningScriptsWidget(); break; case Qt::Key_1: loadScriptNumber = 1; break; case Qt::Key_2: loadScriptNumber = 2; break; case Qt::Key_3: loadScriptNumber = 3; break; case Qt::Key_4: loadScriptNumber = 4; break; case Qt::Key_5: loadScriptNumber = 5; break; case Qt::Key_6: loadScriptNumber = 6; break; case Qt::Key_7: loadScriptNumber = 7; break; case Qt::Key_8: loadScriptNumber = 8; break; case Qt::Key_9: loadScriptNumber = 9; break; default: break; } if (loadScriptNumber > 0) { if (_recentlyLoadedScripts.size() >= loadScriptNumber) { Application::getInstance()->loadScript(_recentlyLoadedScripts.at(loadScriptNumber - 1)); } } FramelessDialog::keyPressEvent(event); } void RunningScriptsWidget::paintEvent(QPaintEvent* event) { QPainter painter(this); painter.setPen(QColor::fromRgb(225, 225, 225)); // #e1e1e1 if (ui->currentlyRunningLabel->isVisible()) { // line below the 'Currently Running' label painter.drawLine(36, ui->currentlyRunningLabel->y() + ui->currentlyRunningLabel->height(), 300, ui->currentlyRunningLabel->y() + ui->currentlyRunningLabel->height()); } if (ui->recentlyLoadedLabel->isVisible()) { // line below the 'Recently loaded' label painter.drawLine(36, ui->recentlyLoadedLabel->y() + ui->recentlyLoadedLabel->height(), 300, ui->recentlyLoadedLabel->y() + ui->recentlyLoadedLabel->height()); } painter.end(); } void RunningScriptsWidget::stopScript(int row, int column) { if (column == 1) { // make sure the user has clicked on the close icon _lastStoppedScript = _runningScriptsTable->item(row, 0)->toolTip(); emit stopScriptName(_runningScriptsTable->item(row, 0)->toolTip()); } } void RunningScriptsWidget::loadScript(int row, int column) { Application::getInstance()->loadScript(_recentlyLoadedScriptsTable->item(row, column)->toolTip()); } void RunningScriptsWidget::allScriptsStopped() { QStringList list = Application::getInstance()->getRunningScripts(); for (int i = 0; i < list.size(); ++i) { _recentlyLoadedScripts.prepend(list.at(i)); } Application::getInstance()->stopAllScripts(); } void RunningScriptsWidget::createRecentlyLoadedScriptsTable() { if (!_recentlyLoadedScripts.contains(_lastStoppedScript) && !_lastStoppedScript.isEmpty()) { _recentlyLoadedScripts.prepend(_lastStoppedScript); _lastStoppedScript = ""; } for (int i = 0; i < _recentlyLoadedScripts.size(); ++i) { if (Application::getInstance()->getRunningScripts().contains(_recentlyLoadedScripts.at(i))) { _recentlyLoadedScripts.removeOne(_recentlyLoadedScripts.at(i)); } } ui->recentlyLoadedLabel->setVisible(!_recentlyLoadedScripts.isEmpty()); ui->recentlyLoadedScriptsTableWidget->setVisible(!_recentlyLoadedScripts.isEmpty()); ui->recentlyLoadedInstruction->setVisible(!_recentlyLoadedScripts.isEmpty()); int limit = _recentlyLoadedScripts.size() > 9 ? 9 : _recentlyLoadedScripts.size(); _recentlyLoadedScriptsTable->setRowCount(limit); for (int i = 0; i < limit; i++) { QTableWidgetItem *scriptName = new QTableWidgetItem; scriptName->setText(QString::number(i + 1) + ". " + QFileInfo(_recentlyLoadedScripts.at(i)).fileName()); scriptName->setToolTip(_recentlyLoadedScripts.at(i)); scriptName->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); _recentlyLoadedScriptsTable->setItem(i, 0, scriptName); } int y = ui->recentlyLoadedScriptsTableWidget->y() + 15; for (int i = 0; i < _recentlyLoadedScriptsTable->rowCount(); ++i) { y += _recentlyLoadedScriptsTable->rowHeight(i); } ui->recentlyLoadedInstruction->setGeometry(36, y, ui->recentlyLoadedInstruction->width(), ui->recentlyLoadedInstruction->height()); repaint(); }