Major changes to the running scripts widget

This commit is contained in:
Mohammed Nafees 2014-04-03 13:21:27 +05:30
parent 0fa910c61f
commit e5d9812742
6 changed files with 188 additions and 119 deletions

View file

@ -162,49 +162,49 @@
<name>RunningScriptsWidget</name>
<message>
<location filename="ui/runningScriptsWidget.ui" line="14"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="127"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="120"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="33"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="128"/>
<location filename="ui/runningScriptsWidget.ui" line="34"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="121"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:18pt;&quot;&gt;Running Scripts&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="49"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="129"/>
<location filename="ui/runningScriptsWidget.ui" line="51"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="122"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Currently running&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="70"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="130"/>
<location filename="ui/runningScriptsWidget.ui" line="76"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="123"/>
<source>Reload All</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="95"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="131"/>
<location filename="ui/runningScriptsWidget.ui" line="102"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="124"/>
<source>Stop All</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="115"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="132"/>
<location filename="ui/runningScriptsWidget.ui" line="123"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="125"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Recently loaded&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="147"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="133"/>
<location filename="ui/runningScriptsWidget.ui" line="140"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="126"/>
<source>(click a script or use the 1-9 keys to load and run it)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="ui/runningScriptsWidget.ui" line="237"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="135"/>
<location filename="ui/runningScriptsWidget.ui" line="188"/>
<location filename="../build/interface/ui_runningScriptsWidget.h" line="128"/>
<source>There are no scripts currently running.</source>
<translation type="unfinished"></translation>
</message>

View file

@ -1,5 +1,5 @@
//
// RunningScripts.cpp
// RunningScriptsWidget.cpp
// interface
//
// Created by Mohammed Nafees on 03/28/2014.
@ -9,6 +9,8 @@
#include "RunningScriptsWidget.h"
#include <QKeyEvent>
#include <QFileInfo>
#include <QPainter>
#include <QTableWidgetItem>
#include "Application.h"
@ -22,25 +24,17 @@ RunningScriptsWidget::RunningScriptsWidget(QDockWidget *parent) :
// 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);
_runningScriptsTable = new ScriptsTableWidget(ui->runningScriptsTableWidget);
_runningScriptsTable->setColumnCount(2);
_runningScriptsTable->setColumnWidth(0, 245);
_runningScriptsTable->setColumnWidth(1, 22);
connect(_runningScriptsTable, &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,
_recentlyLoadedScriptsTable = new ScriptsTableWidget(ui->recentlyLoadedScriptsTableWidget);
_recentlyLoadedScriptsTable->setColumnCount(2);
_recentlyLoadedScriptsTable->setColumnWidth(0, 25);
_recentlyLoadedScriptsTable->setColumnWidth(1, 235);
connect(_recentlyLoadedScriptsTable, &QTableWidget::cellClicked,
this, &RunningScriptsWidget::loadScript);
connect(ui->hideWidgetButton, &QPushButton::clicked,
@ -58,25 +52,24 @@ RunningScriptsWidget::~RunningScriptsWidget()
void RunningScriptsWidget::setRunningScripts(const QStringList& list)
{
ui->runningScriptsTableWidget->setRowCount(list.size());
_runningScriptsTable->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->setText(QFileInfo(list.at(i)).fileName());
scriptName->setToolTip(list.at(i));
scriptName->setTextAlignment(Qt::AlignCenter);
scriptName->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
QTableWidgetItem *closeIcon = new QTableWidgetItem;
closeIcon->setIcon(QIcon(":/images/kill-script.svg"));
closeIcon->setIcon(QIcon(QPixmap(":/images/kill-script.svg").scaledToHeight(12)));
ui->runningScriptsTableWidget->setItem(i, 0, scriptName);
ui->runningScriptsTableWidget->setItem(i, 1, closeIcon);
_runningScriptsTable->setItem(i, 0, scriptName);
_runningScriptsTable->setItem(i, 1, closeIcon);
}
createRecentlyLoadedScriptsTable();
@ -146,17 +139,37 @@ void RunningScriptsWidget::keyPressEvent(QKeyEvent *e)
}
}
void RunningScriptsWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(QColor::fromRgb(196, 196, 196));
if (ui->currentlyRunningLabel->isVisible()) {
// line below the 'Currently Running' label
painter.drawLine(20, ui->currentlyRunningLabel->y() + ui->currentlyRunningLabel->height(),
width() - 20, ui->currentlyRunningLabel->y() + ui->currentlyRunningLabel->height());
}
if (ui->recentlyLoadedLabel->isVisible()) {
// line below the 'Recently loaded' label
painter.drawLine(20, ui->recentlyLoadedLabel->y() + ui->recentlyLoadedLabel->height(),
width() - 20, 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 = ui->runningScriptsTableWidget->item(row, 0)->text();
emit stopScriptName(ui->runningScriptsTableWidget->item(row, 0)->text());
_lastStoppedScript = _runningScriptsTable->item(row, 0)->toolTip();
emit stopScriptName(_runningScriptsTable->item(row, 0)->toolTip());
}
}
void RunningScriptsWidget::loadScript(int row, int column)
{
Application::getInstance()->loadScript(ui->recentlyLoadedScriptsTableWidget->item(row, column)->text());
Application::getInstance()->loadScript(_recentlyLoadedScriptsTable->item(row, column)->toolTip());
}
void RunningScriptsWidget::allScriptsStopped()
@ -183,21 +196,30 @@ void RunningScriptsWidget::createRecentlyLoadedScriptsTable()
}
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);
_recentlyLoadedScriptsTable->setRowCount(limit);
for (int i = 0; i < limit; ++i) {
QTableWidgetItem *scriptName = new QTableWidgetItem;
scriptName->setText(_recentlyLoadedScripts.at(i));
scriptName->setText(QFileInfo(_recentlyLoadedScripts.at(i)).fileName());
scriptName->setToolTip(_recentlyLoadedScripts.at(i));
scriptName->setTextAlignment(Qt::AlignCenter);
scriptName->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
QTableWidgetItem *number = new QTableWidgetItem;
number->setText(QString::number(i+1) + ".");
number->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui->recentlyLoadedScriptsTableWidget->setItem(i, 0, number);
ui->recentlyLoadedScriptsTableWidget->setItem(i, 1, scriptName);
_recentlyLoadedScriptsTable->setItem(i, 0, number);
_recentlyLoadedScriptsTable->setItem(i, 1, scriptName);
}
int y = ui->recentlyLoadedScriptsTableWidget->y() + 15;
for (int i = 0; i < _recentlyLoadedScriptsTable->rowCount(); ++i) {
y += _recentlyLoadedScriptsTable->rowHeight(i);
}
ui->recentlyLoadedInstruction->setGeometry(20, y, width() - 20, ui->recentlyLoadedInstruction->height());
repaint();
}

View file

@ -1,5 +1,5 @@
//
// RunningScripts.h
// RunningScriptsWidget.h
// interface
//
// Created by Mohammed Nafees on 03/28/2014.
@ -8,9 +8,10 @@
#ifndef __hifi__RunningScriptsWidget__
#define __hifi__RunningScriptsWidget__
// Qt
#include <QDockWidget>
#include "ScriptsTableWidget.h"
namespace Ui {
class RunningScriptsWidget;
}
@ -28,7 +29,8 @@ signals:
void stopScriptName(const QString& name);
protected:
void keyPressEvent(QKeyEvent *e);
virtual void keyPressEvent(QKeyEvent *e);
virtual void paintEvent(QPaintEvent *);
private slots:
void stopScript(int row, int column);
@ -37,6 +39,8 @@ private slots:
private:
Ui::RunningScriptsWidget *ui;
ScriptsTableWidget *_runningScriptsTable;
ScriptsTableWidget *_recentlyLoadedScriptsTable;
QStringList _recentlyLoadedScripts;
QString _lastStoppedScript;

View file

@ -0,0 +1,41 @@
//
// ScriptsTableWidget.cpp
// interface
//
// Created by Mohammed Nafees on 04/03/2014.
// Copyright (c) 2014 High Fidelity, Inc. All rights reserved.
#include "ScriptsTableWidget.h"
#include <QHeaderView>
#include <QFont>
#include <QPainter>
#include <QIcon>
#include <QDebug>
ScriptsTableWidget::ScriptsTableWidget(QWidget *parent) :
QTableWidget(parent)
{
verticalHeader()->setVisible(false);
horizontalHeader()->setVisible(false);
setShowGrid(false);
setSelectionMode(QAbstractItemView::NoSelection);
setEditTriggers(QAbstractItemView::NoEditTriggers);
setStyleSheet("background: transparent;");
setGeometry(0, 0, parent->width(), parent->height());
}
void ScriptsTableWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(viewport());
painter.setPen(QColor::fromRgb(196, 196, 196));
int y = 0;
for (int i = 0; i < rowCount(); ++i) {
painter.drawLine(0, rowHeight(i) + y, width(), rowHeight(i) + y);
y += rowHeight(i);
}
painter.end();
QTableWidget::paintEvent(event);
}

View file

@ -0,0 +1,23 @@
//
// ScriptsTableWidget.h
// interface
//
// Created by Mohammed Nafees on 04/03/2014.
// Copyright (c) 2014 High Fidelity, Inc. All rights reserved.
#ifndef __hifi__ScriptsTableWidget__
#define __hifi__ScriptsTableWidget__
#include <QTableWidget>
class ScriptsTableWidget : public QTableWidget
{
Q_OBJECT
public:
explicit ScriptsTableWidget(QWidget *parent);
protected:
virtual void paintEvent(QPaintEvent *event);
};
#endif /* defined(__hifi__ScriptsTableWidget__) */

View file

@ -27,7 +27,8 @@ font-family: Helvetica, Arial, &quot;DejaVu Sans&quot;; </string>
</rect>
</property>
<property name="styleSheet">
<string notr="true">color: #0e7077;</string>
<string notr="true">color: #0e7077;
font-size: 20pt;</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:18pt;&quot;&gt;Running Scripts&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -43,7 +44,8 @@ font-family: Helvetica, Arial, &quot;DejaVu Sans&quot;; </string>
</rect>
</property>
<property name="styleSheet">
<string notr="true">color: #0e7077;</string>
<string notr="true">color: #0e7077;
font-size: 14pt;</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Currently running&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -61,10 +63,14 @@ font-family: Helvetica, Arial, &quot;DejaVu Sans&quot;; </string>
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">background: #0e7077;
color: #fff;
border-radius: 6px;</string>
border-radius: 6px;
font: 14pt 75pt;</string>
</property>
<property name="text">
<string>Reload All</string>
@ -89,7 +95,8 @@ border-radius: 6px;</string>
<property name="styleSheet">
<string notr="true">background: #0e7077;
color: #fff;
border-radius: 6px;</string>
border-radius: 6px;
font: 14pt 75pt;</string>
</property>
<property name="text">
<string>Stop All</string>
@ -109,28 +116,13 @@ border-radius: 6px;</string>
</rect>
</property>
<property name="styleSheet">
<string notr="true">color: #0e7077;</string>
<string notr="true">color: #0e7077;
font-size: 14pt;</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Recently loaded&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="Line" name="line2">
<property name="geometry">
<rect>
<x>20</x>
<y>300</y>
<width>271</width>
<height>8</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="recentlyLoadedInstruction">
<property name="geometry">
<rect>
@ -141,7 +133,8 @@ border-radius: 6px;</string>
</rect>
</property>
<property name="styleSheet">
<string notr="true">color: #95a5a6;</string>
<string notr="true">color: #95a5a6;
font-size: 14pt;</string>
</property>
<property name="text">
<string>(click a script or use the 1-9 keys to load and run it)</string>
@ -179,59 +172,17 @@ border-radius: 6px;</string>
<bool>true</bool>
</property>
</widget>
<widget class="QTableWidget" name="runningScriptsTableWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>70</y>
<width>271</width>
<height>141</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background: transparent;</string>
</property>
</widget>
<widget class="Line" name="line1">
<widget class="QLabel" name="noRunningScriptsLabel">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>271</width>
<height>8</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QTableWidget" name="recentlyLoadedScriptsTableWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>310</y>
<width>271</width>
<height>281</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background: transparent;</string>
</property>
</widget>
<widget class="QLabel" name="noRunningScriptsLabel">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>271</width>
<height>51</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 14px;</string>
<string notr="true">font: 14pt;</string>
</property>
<property name="text">
<string>There are no scripts currently running.</string>
@ -240,6 +191,34 @@ border-radius: 6px;</string>
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QWidget" name="recentlyLoadedScriptsTableWidget" native="true">
<property name="geometry">
<rect>
<x>20</x>
<y>300</y>
<width>270</width>
<height>280</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background: transparent;
font-size: 14pt;</string>
</property>
</widget>
<widget class="QWidget" name="runningScriptsTableWidget" native="true">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>270</width>
<height>140</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background: transparent;
font-size: 14pt;</string>
</property>
</widget>
</widget>
<resources>
<include location="../resources/resources.qrc"/>