1 #include "scripteditor.h"
11 #include "mainwindow.h"
14 #include "slideitem.h"
15 #include "slidemodel.h"
18 extern QString vymName;
19 extern QList<Command *> modelCommands;
20 extern QList<Command *> vymCommands;
21 extern QDir lastMapDir;
23 extern Main *mainWindow;
24 extern Options options;
25 extern Settings settings;
27 ScriptEditor::ScriptEditor(QWidget *parent) : QWidget(parent)
31 codeEditor = new CodeEditor(this);
32 ui.fileVerticalLayout->insertWidget(0, codeEditor);
34 macroEditor = new CodeEditor(this);
35 ui.macroVerticalLayout->insertWidget(0, macroEditor);
37 slideEditor = new CodeEditor(this);
38 ui.slideVerticalLayout->insertWidget(0, slideEditor);
40 connect(ui.slideSaveButton, SIGNAL(clicked()), this, SLOT(saveSlide()));
41 connect(ui.slideRunButton, SIGNAL(clicked()), this, SLOT(runSlide()));
42 connect(ui.macroRunButton, SIGNAL(clicked()), this, SLOT(runMacro()));
43 connect(ui.fileRunButton, SIGNAL(clicked()), this, SLOT(runScript()));
44 connect(ui.macroLoadButton, SIGNAL(clicked()), this, SLOT(reloadMacros()));
45 connect(ui.macroSaveButton, SIGNAL(clicked()), this, SLOT(saveMacros()));
46 connect(ui.fileLoadButton, SIGNAL(clicked()), this, SLOT(loadScript()));
47 connect(ui.fileSaveButton, SIGNAL(clicked()), this, SLOT(saveScript()));
48 connect(ui.fileSaveAsButton, SIGNAL(clicked()), this, SLOT(saveScriptAs()));
54 font.setFamily("Courier");
55 font.setFixedPitch(true);
56 font.setPointSize(12);
57 slideEditor->setFont(font);
58 macroEditor->setFont(font);
59 codeEditor->setFont(font);
62 const int tabStop = 4; // 4 characters
63 QFontMetrics metrics(font);
64 int w = tabStop * metrics.width(' ');
65 codeEditor->setTabStopWidth(w);
66 slideEditor->setTabStopWidth(w);
67 macroEditor->setTabStopWidth(w);
69 ui.modeTabWidget->setTabText(0, tr("Slide", "Mode in scriptEditor"));
70 ui.modeTabWidget->setTabText(1, tr("Macro", "Mode in scriptEditor"));
71 ui.modeTabWidget->setTabText(2, tr("Script", "Mode in scriptEditor"));
73 ui.scriptPathLineEdit->setText(
74 tr("No script selected", "scriptname in scriptEditor"));
78 highlighterMacro = new Highlighter(macroEditor->document());
79 highlighterSlide = new Highlighter(slideEditor->document());
80 highlighterFile = new Highlighter(codeEditor->document());
82 foreach (Command *c, modelCommands)
83 list.append(c->getName());
84 foreach (Command *c, vymCommands)
85 list.append(c->getName());
86 highlighterMacro->addKeywords(list);
87 highlighterSlide->addKeywords(list);
88 highlighterFile->addKeywords(list);
90 // QAction *a = new QAction( tr( "Save","ScriptEditor" ), ui.editor);
91 // a->setShortcut (Qt::CTRL + Qt::Key_S );
92 // a->setShortcutContext (Qt::WidgetWithChildrenShortcut);
94 // connect( a, SIGNAL( triggered() ), this, SLOT( saveSlide() ) );
97 QString ScriptEditor::getScriptFile() { return codeEditor->toPlainText(); }
99 void ScriptEditor::saveSlide()
101 VymModel *vm = mainWindow->getModel(vymModelID);
103 QMessageBox::warning(
105 tr("Couldn't get model to save script into slide!"));
108 SlideItem *si = vm->getSlideModel()->findSlideID(slideID);
110 QMessageBox::warning(
112 tr("Couldn't find slide to save script into slide!"));
115 si->setInScript(slideEditor->toPlainText());
118 void ScriptEditor::setSlideScript(uint model_id, uint slide_id,
121 vymModelID = model_id;
124 slideEditor->setPlainText(s);
127 void ScriptEditor::runMacro() { emit runScript(macroEditor->toPlainText()); }
129 void ScriptEditor::runSlide() { emit runScript(slideEditor->toPlainText()); }
131 void ScriptEditor::runScript() { emit runScript(codeEditor->toPlainText()); }
133 void ScriptEditor::reloadMacros()
135 QString m = macros.get();
137 macroEditor->setPlainText(m);
138 ui.macroPathLineEdit->setText(macros.getPath());
142 void ScriptEditor::saveMacros()
144 if (saveStringToDisk(macros.getPath(), macroEditor->toPlainText()))
145 mainWindow->statusMessage(
146 tr("Macros saved to %1").arg(macros.getPath()));
148 QString error(QObject::tr("Error"));
149 QString msg(QObject::tr("Couldn't write macros to \"%1\"\n.")
150 .arg(macros.getPath()));
151 QMessageBox::warning(0, error, msg);
155 bool ScriptEditor::loadScript(QString fn)
158 QString filter("VYM scripts (*.vys);;All (*)");
159 fn = QFileDialog::getOpenFileName(this,
160 vymName + " - " + tr("Load script"),
161 lastMapDir.path(), filter);
167 if (loadStringFromDisk(filename, s)) {
168 codeEditor->setPlainText(s);
169 ui.scriptPathLineEdit->setText(filename);
170 lastMapDir.setPath(filename.left(filename.lastIndexOf("/")));
174 QString error(QObject::tr("Error"));
176 QObject::tr("Couldn't read script from \"%1\"\n.").arg(fn));
177 QMessageBox::warning(0, error, msg);
183 void ScriptEditor::saveScript()
185 if (filename.isEmpty())
188 if (saveStringToDisk(filename, codeEditor->toPlainText()))
189 mainWindow->statusMessage(tr("Script saved to %1").arg(filename));
191 QString error(QObject::tr("Error"));
192 QString msg(QObject::tr("Couldn't write script to \"%1\"\n.")
194 QMessageBox::warning(0, error, msg);
199 void ScriptEditor::saveScriptAs()
201 QString filter("VYM scripts (*.vys *.js);;All (*)");
202 QString fn = QFileDialog::getSaveFileName(
203 this, QString(vymName + " - " + tr("Save script")), QString(),
204 "VYM script (*js *.vys);;All files (*)", 0,
205 QFileDialog::DontConfirmOverwrite);
212 tr("The file %1\nexists already.\nDo you want to overwrite it?",
215 QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default,
216 QMessageBox::Cancel | QMessageBox::Escape, Qt::NoButton);
217 mb.setButtonText(QMessageBox::Yes, tr("Overwrite"));
218 mb.setButtonText(QMessageBox::No, tr("Cancel"));
220 case QMessageBox::Yes:
223 ui.scriptPathLineEdit->setText(filename);
224 lastMapDir.setPath(filename.left(filename.lastIndexOf("/")));
227 case QMessageBox::Cancel: