mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 09:53:11 +02:00
207 lines
7.8 KiB
C++
207 lines
7.8 KiB
C++
//
|
|
// 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 <QKeyEvent>
|
|
#include <QTableWidgetItem>
|
|
|
|
#include "Application.h"
|
|
|
|
RunningScriptsWidget::RunningScriptsWidget(QDockWidget *parent) :
|
|
QDockWidget(parent),
|
|
ui(new Ui::RunningScriptsWidget)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
// remove the title bar (see the Qt docs on setTitleBarWidget)
|
|
setTitleBarWidget(new QWidget());
|
|
|
|
ui->runningScriptsTableWidget->setColumnCount(2);
|
|
ui->runningScriptsTableWidget->verticalHeader()->setVisible(false);
|
|
ui->runningScriptsTableWidget->horizontalHeader()->setVisible(false);
|
|
ui->runningScriptsTableWidget->setSelectionMode(QAbstractItemView::NoSelection);
|
|
ui->runningScriptsTableWidget->setShowGrid(false);
|
|
ui->runningScriptsTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
ui->runningScriptsTableWidget->setColumnWidth(0, 235);
|
|
ui->runningScriptsTableWidget->setColumnWidth(1, 25);
|
|
connect(ui->runningScriptsTableWidget, &QTableWidget::cellClicked, this, &RunningScriptsWidget::stopScript);
|
|
|
|
ui->recentlyLoadedScriptsTableWidget->setColumnCount(2);
|
|
ui->recentlyLoadedScriptsTableWidget->verticalHeader()->setVisible(false);
|
|
ui->recentlyLoadedScriptsTableWidget->horizontalHeader()->setVisible(false);
|
|
ui->recentlyLoadedScriptsTableWidget->setSelectionMode(QAbstractItemView::NoSelection);
|
|
ui->recentlyLoadedScriptsTableWidget->setShowGrid(false);
|
|
ui->recentlyLoadedScriptsTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
ui->recentlyLoadedScriptsTableWidget->setColumnWidth(0, 25);
|
|
ui->recentlyLoadedScriptsTableWidget->setColumnWidth(1, 235);
|
|
connect(ui->recentlyLoadedScriptsTableWidget, &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);
|
|
}
|
|
|
|
RunningScriptsWidget::~RunningScriptsWidget()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void RunningScriptsWidget::setRunningScripts(const QStringList& list)
|
|
{
|
|
ui->runningScriptsTableWidget->setRowCount(list.size());
|
|
|
|
ui->noRunningScriptsLabel->setVisible(list.isEmpty());
|
|
ui->currentlyRunningLabel->setVisible(!list.isEmpty());
|
|
ui->line1->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(list.at(i));
|
|
scriptName->setToolTip(list.at(i));
|
|
scriptName->setTextAlignment(Qt::AlignCenter);
|
|
QTableWidgetItem *closeIcon = new QTableWidgetItem;
|
|
closeIcon->setIcon(QIcon(Application::resourcesPath() + "/images/kill-script.svg"));
|
|
|
|
ui->runningScriptsTableWidget->setItem(i, 0, scriptName);
|
|
ui->runningScriptsTableWidget->setItem(i, 1, closeIcon);
|
|
}
|
|
|
|
createRecentlyLoadedScriptsTable();
|
|
}
|
|
|
|
void RunningScriptsWidget::keyPressEvent(QKeyEvent *e)
|
|
{
|
|
switch(e->key()) {
|
|
case Qt::Key_Escape:
|
|
Application::getInstance()->toggleRunningScriptsWidget();
|
|
break;
|
|
|
|
case Qt::Key_1:
|
|
if (_recentlyLoadedScripts.size() > 0) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(0));
|
|
}
|
|
break;
|
|
|
|
case Qt::Key_2:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 2) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(1));
|
|
}
|
|
break;
|
|
|
|
case Qt::Key_3:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 3) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(2));
|
|
}
|
|
break;
|
|
|
|
case Qt::Key_4:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 4) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(3));
|
|
}
|
|
break;
|
|
case Qt::Key_5:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 5) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(4));
|
|
}
|
|
break;
|
|
|
|
case Qt::Key_6:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 6) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(5));
|
|
}
|
|
break;
|
|
|
|
case Qt::Key_7:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 7) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(6));
|
|
}
|
|
break;
|
|
case Qt::Key_8:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 8) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(7));
|
|
}
|
|
break;
|
|
|
|
case Qt::Key_9:
|
|
if (_recentlyLoadedScripts.size() > 0 && _recentlyLoadedScripts.size() >= 9) {
|
|
Application::getInstance()->loadScript(_recentlyLoadedScripts.at(8));
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void RunningScriptsWidget::stopScript(int row, int column)
|
|
{
|
|
if (column == 1) { // make sure the user has clicked on the close icon
|
|
_lastStoppedScript = ui->runningScriptsTableWidget->item(row, 0)->text();
|
|
emit stopScriptName(ui->runningScriptsTableWidget->item(row, 0)->text());
|
|
}
|
|
}
|
|
|
|
void RunningScriptsWidget::loadScript(int row, int column)
|
|
{
|
|
Application::getInstance()->loadScript(ui->recentlyLoadedScriptsTableWidget->item(row, column)->text());
|
|
}
|
|
|
|
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->line2->setVisible(!_recentlyLoadedScripts.isEmpty());
|
|
ui->recentlyLoadedScriptsTableWidget->setVisible(!_recentlyLoadedScripts.isEmpty());
|
|
ui->recentlyLoadedInstruction->setVisible(!_recentlyLoadedScripts.isEmpty());
|
|
|
|
int limit = _recentlyLoadedScripts.size() > 9 ? 9 : _recentlyLoadedScripts.size();
|
|
ui->recentlyLoadedScriptsTableWidget->setRowCount(limit);
|
|
for (int i = 0; i < limit; ++i) {
|
|
QTableWidgetItem *scriptName = new QTableWidgetItem;
|
|
scriptName->setText(_recentlyLoadedScripts.at(i));
|
|
scriptName->setToolTip(_recentlyLoadedScripts.at(i));
|
|
scriptName->setTextAlignment(Qt::AlignCenter);
|
|
QTableWidgetItem *number = new QTableWidgetItem;
|
|
number->setText(QString::number(i+1) + ".");
|
|
|
|
ui->recentlyLoadedScriptsTableWidget->setItem(i, 0, number);
|
|
ui->recentlyLoadedScriptsTableWidget->setItem(i, 1, scriptName);
|
|
}
|
|
}
|