History

- few Adjustments in Application class for Script editor - Shortkey for script editor (Alt+S) - highlighter: bold true/false , single line comments - Run scripts from the editor works - More icons from Maximillian, Thanks - Run on the fly checkbox, works if the script is running. - Load/save features

Thijs Wenker committed 12 years ago

Commit c016d651 parent d2d393715 files · +1160 −48Browse files

Showing the changes to interface/src/ui/ScriptEditorWindow.cpp (1 of 15 files). Show all

Unified · Split

interface/src/ui/ScriptEditorWindow.cpp+135−7
@@ -13,8 +13,10 @@ · 12 unmodified lines
13#include <QFrame>13#include <QFrame>
14#include <QLayoutItem>14#include <QLayoutItem>
15#include <QMainWindow>15#include <QMainWindow>
16#include <QMessageBox.h>
16#include <QPalette>17#include <QPalette>
17#include <QScrollBar>18#include <QScrollBar>
19#include <QShortcut>
18#include <QSizePolicy>20#include <QSizePolicy>
19#include <QTimer>21#include <QTimer>
20#include <QWidget>22#include <QWidget>
@@ -31,32 +33,158 @@ ScriptEditorWindow::ScriptEditorWindow() : · 10 unmodified lines
31{33{
32 ui->setupUi(this);34 ui->setupUi(this);
33 show();35 show();
36 addScriptEditorWidget("New script");
37 loadMenu = new QMenu();
38 connect(loadMenu, SIGNAL(aboutToShow()), this, SLOT(loadMenuAboutToShow()));
39 ui->loadButton->setMenu(loadMenu);
40
41 saveMenu = new QMenu();
42 saveMenu->addAction("Save as..", this, SLOT(saveScriptAsClicked()), Qt::CTRL|Qt::SHIFT|Qt::Key_S);
43
44 ui->saveButton->setMenu(saveMenu);
45
46 connect(new QShortcut(QKeySequence("Ctrl+N"), this), SIGNAL(activated()), this, SLOT(newScriptClicked()));
47 connect(new QShortcut(QKeySequence("Ctrl+S"), this), SIGNAL(activated()), this, SLOT(saveScriptClicked()));
48 connect(new QShortcut(QKeySequence("Ctrl+O"), this), SIGNAL(activated()), this, SLOT(loadScriptClicked()));
49 connect(new QShortcut(QKeySequence("F5"), this), SIGNAL(activated()), this, SLOT(toggleRunScriptClicked()));
34}50}
35 51
36ScriptEditorWindow::~ScriptEditorWindow() {52ScriptEditorWindow::~ScriptEditorWindow() {
37 delete ui;53 delete ui;
38}54}
39 55
40void ScriptEditorWindow::loadScriptClicked(){56void ScriptEditorWindow::setRunningState(bool run) {
57 if (ui->tabWidget->currentIndex() != -1) {
58 ((ScriptEditorWidget*)ui->tabWidget->currentWidget())->setRunning(run);
59 }
60 this->updateButtons();
61}
62
63void ScriptEditorWindow::updateButtons() {
64 ui->toggleRunButton->setEnabled(ui->tabWidget->currentIndex() != -1);
65 ui->toggleRunButton->setIcon(ui->tabWidget->currentIndex() != -1 && ((ScriptEditorWidget*)ui->tabWidget->currentWidget())->isRunning() ? QIcon("../resources/icons/stop-script.svg"):QIcon("../resources/icons/start-script.svg"));
66}
41 67
68void ScriptEditorWindow::loadScriptMenu(const QString& scriptName) {
69 addScriptEditorWidget("loading...")->loadFile(scriptName);
70 updateButtons();
42}71}
43 72
44void ScriptEditorWindow::newScriptClicked(){73void ScriptEditorWindow::loadScriptClicked() {
45 addScriptEditorWidget(QString("new Script"));74 QString scriptName = QFileDialog::getOpenFileName(this, tr("Interface"), QString(), tr("Javascript (*.js)"));
75 if (!scriptName.isEmpty()) {
76 addScriptEditorWidget("loading...")->loadFile(scriptName);
77 updateButtons();
78 }
46}79}
47 80
48void ScriptEditorWindow::toggleRunScriptClicked(){81void ScriptEditorWindow::loadMenuAboutToShow() {
82 loadMenu->clear();
83 QStringList runningScripts = Application::getInstance()->getRunningScripts();
84 if (runningScripts.count() > 0) {
85 QSignalMapper* signalMapper = new QSignalMapper(this);
86 foreach (const QString& runningScript, runningScripts) {
87 QAction* runningScriptAction = new QAction(runningScript, loadMenu);
88 connect(runningScriptAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
89 signalMapper->setMapping(runningScriptAction, runningScript);
90 loadMenu->addAction(runningScriptAction);
91 }
92 connect(signalMapper, SIGNAL(mapped(const QString &)), this, SLOT(loadScriptMenu(const QString &)));
93 } else {
94 QAction* naAction = new QAction("(no running scripts)",loadMenu);
95 naAction->setDisabled(true);
96 loadMenu->addAction(naAction);
97 }
98}
49 99
100void ScriptEditorWindow::newScriptClicked() {
101 addScriptEditorWidget(QString("New script"));
50}102}
51 103
52void ScriptEditorWindow::saveScriptClicked(){104void ScriptEditorWindow::toggleRunScriptClicked() {
105 this->setRunningState(!(ui->tabWidget->currentIndex() !=-1 && ((ScriptEditorWidget*)ui->tabWidget->currentWidget())->isRunning()));
106}
107
108void ScriptEditorWindow::saveScriptClicked() {
109 if (ui->tabWidget->currentIndex() != -1) {
110 ScriptEditorWidget* currentScriptWidget = (ScriptEditorWidget*)ui->tabWidget->currentWidget();
111 currentScriptWidget->save();
112 }
113}
53 114
115void ScriptEditorWindow::saveScriptAsClicked() {
116 if (ui->tabWidget->currentIndex() != -1) {
117 ScriptEditorWidget* currentScriptWidget = (ScriptEditorWidget*)ui->tabWidget->currentWidget();
118 currentScriptWidget->saveAs();
119 }
54}120}
55 121
56void ScriptEditorWindow::addScriptEditorWidget(QString title){122ScriptEditorWidget* ScriptEditorWindow::addScriptEditorWidget(QString title) {
57 ScriptEditorWidget* newScriptEditorWidget = new ScriptEditorWidget();//ScriptEditorWidget();123 ScriptEditorWidget* newScriptEditorWidget = new ScriptEditorWidget();
124 connect(newScriptEditorWidget, SIGNAL(scriptnameChanged()), this, SLOT(updateScriptNameOrStatus()));
125 connect(newScriptEditorWidget, SIGNAL(scriptModified()), this, SLOT(updateScriptNameOrStatus()));
126 connect(newScriptEditorWidget, SIGNAL(runningStateChanged()), this, SLOT(updateButtons()));
58 ui->tabWidget->addTab(newScriptEditorWidget, title);127 ui->tabWidget->addTab(newScriptEditorWidget, title);
59 ui->tabWidget->setCurrentWidget(newScriptEditorWidget);128 ui->tabWidget->setCurrentWidget(newScriptEditorWidget);
60 newScriptEditorWidget->setUpdatesEnabled(true);129 newScriptEditorWidget->setUpdatesEnabled(true);
61 newScriptEditorWidget->adjustSize();130 newScriptEditorWidget->adjustSize();
131 return newScriptEditorWidget;
132}
133
134void ScriptEditorWindow::tabSwitched(int tabIndex) {
135 this->updateButtons();
136 if (ui->tabWidget->currentIndex() != -1) {
137 ScriptEditorWidget* currentScriptWidget = (ScriptEditorWidget*)ui->tabWidget->currentWidget();
138 QString modifiedStar = (currentScriptWidget->isModified()?"*":"");
139 if (currentScriptWidget->getScriptName().length() > 0) {
140 this->setWindowTitle("Script Editor ["+currentScriptWidget->getScriptName()+modifiedStar+"]");
141 } else {
142 this->setWindowTitle("Script Editor [New script"+modifiedStar+"]");
143 }
144 } else {
145 this->setWindowTitle("Script Editor");
146 }
147}
148
149void ScriptEditorWindow::tabCloseRequested(int tabIndex) {
150 ScriptEditorWidget* closingScriptWidget = (ScriptEditorWidget*)ui->tabWidget->widget(tabIndex);
151 if(closingScriptWidget->questionSave()) {
152 ui->tabWidget->removeTab(tabIndex);
153 }
154}
155
156void ScriptEditorWindow::closeEvent(QCloseEvent *event) {
157 bool unsaved_docs_warning = false;
158 for (int i = 0; i < ui->tabWidget->count(); i++ && !unsaved_docs_warning){
159 if(((ScriptEditorWidget*)ui->tabWidget->widget(i))->isModified()){
160 unsaved_docs_warning = true;
161 }
162 }
163
164 if (!unsaved_docs_warning || QMessageBox::warning(this, tr("Interface"), tr("There are some unsaved scripts, are you sure you want to close the editor? Changes will be lost!"), QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Discard) {
165 event->accept();
166 } else {
167 event->ignore();
168 }
169}
170
171void ScriptEditorWindow::updateScriptNameOrStatus() {
172 ScriptEditorWidget* source = (ScriptEditorWidget*)QObject::sender();
173 QString modifiedStar = (source->isModified()?"*":"");
174 if (source->getScriptName().length() > 0) {
175 for (int i = 0; i < ui->tabWidget->count(); i++){
176 if (ui->tabWidget->widget(i) == source) {
177 ui->tabWidget->setTabText(i,modifiedStar+QFileInfo(source->getScriptName()).fileName());
178 ui->tabWidget->setTabToolTip(i, source->getScriptName());
179 }
180 }
181 }
182
183 if (ui->tabWidget->currentWidget() == source) {
184 if (source->getScriptName().length() > 0) {
185 this->setWindowTitle("Script Editor ["+source->getScriptName()+modifiedStar+"]");
186 } else {
187 this->setWindowTitle("Script Editor [New script"+modifiedStar+"]");
188 }
189 }
62}190}