54#include <QApplication>
57#include <QDomDocument>
61#include "baseWidget.hh"
62#include "toolBoxElement.hh"
63#include "scene/sceneElement.hh"
65#include "parser/context.hh"
77BaseWidget * BaseWidget::base_ = NULL;
82BaseWidget::BaseWidget (Context *_ctx, QWidget *_parent) :
83 QMainWindow (_parent),
86 changedContent_ (false)
88 setWindowIcon (OpenFlipper::Options::OpenFlipperIcon ());
91 splitter_ =
new QSplitter (Qt::Horizontal,
this);
92 toolbox_ =
new QToolBox ();
93 views_ =
new QStackedWidget ();
96 toolbox_->setMinimumWidth (275);
98 QVBoxLayout *layout =
new QVBoxLayout;
100 layout->addWidget (toolbox_);
102 QPushButton *execute =
new QPushButton (
"Execute");
103 layout->addWidget (execute);
105 QWidget *w =
new QWidget;
106 w->setLayout (layout);
108 mainScene_ =
new GraphicsScene (_ctx);
109 views_->addWidget(mainScene_->graphicsView ());
111 splitter_->addWidget (w);
112 splitter_->addWidget (views_);
114 sizes << 275 << 10000;
115 splitter_->setSizes (sizes);
117 setCentralWidget (splitter_);
123 connect (execute, SIGNAL (clicked (
bool)),
this, SLOT (executeCode ()));
125 connect (mainScene_, SIGNAL (contentChanged()),
this, SLOT (contentChanged()));
128 QMenu *menu =
new QMenu (tr(
"&File"));
131 icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"add-empty-object.png");
132 menu->addAction (icon, tr(
"New"),
this, SLOT (newFile()), QKeySequence::New);
134 icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"document-open.png");
135 menu->addAction (icon, tr(
"Open ..."),
this, SLOT (load()), QKeySequence::Open);
137 menu->addSeparator ();
139 icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"document-save.png");
140 menu->addAction (icon, tr(
"Save"),
this, SLOT (save()), QKeySequence::Save);
142 icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"document-save-as.png");
143 menu->addAction (icon, tr(
"Save as ..."),
this, SLOT (saveAs()), QKeySequence::SaveAs);
144 menu->addSeparator ();
146 icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"window-close.png");
147 menu->addAction (icon, tr(
"Close"),
this, SLOT (close()), QKeySequence::Close);
149 menuBar()->addMenu (menu);
151 menu =
new QMenu (tr(
"&Script"));
152 icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"scriptEditor.png");
153 menu->addAction (icon, tr(
"Open in script editor"),
this, SLOT (codeToScript()));
155 menuBar()->addMenu (menu);
163BaseWidget::~BaseWidget ()
171void BaseWidget::setupUi ()
174 foreach (
const QString &c, ctx_->categories ())
176 QWidget *widget =
new QWidget (toolbox_);
177 QVBoxLayout *layout =
new QVBoxLayout ();
178 foreach (
Element *e, ctx_->elements (c))
180 if (!(e->
flags () & ELEMENT_FLAG_SKIP_TOOLBOX))
183 layout->addWidget (t);
186 layout->addStretch ();
187 widget->setLayout (layout);
188 toolbox_->addItem (widget, c);
195void BaseWidget::executeCode ()
199 QString code = mainScene_->generateCode (errors);
201 if (errors.isEmpty ())
203 ctx_->executeScript(code);
207 errors =
"<h3> " + tr(
"Following Elements could not be processed:") +
"</h3>" + errors;
209 QMessageBox::warning (
this, tr(
"Error during code generation"), errors, QMessageBox::Ok);
215void BaseWidget::codeToScript()
220 QString code = mainScene_->generateCode (errors);
222 if (errors.isEmpty ())
224 emit codeToScriptEditor (code);
228 errors =
"<qt> " + tr(
"Following Elements could not be processed:") + errors +
"</qt>";
230 QMessageBox::warning (
this, tr(
"Error during code generation"), errors,QMessageBox::Ok);
236bool BaseWidget::saveAs()
249 QString filename = QFileDialog::getOpenFileName (
this,
250 tr(
"Load Visual Script"),
252 tr(
"Visual Script File (*.ofvs)"));
254 if (filename.isEmpty ())
258 QFileInfo fileInfo(filename);
262 if (!f.open (QFile::ReadOnly))
265 msgBox.setText(tr(
"Unable to open file."));
266 msgBox.setInformativeText(filename);
271 while (!scenes_.isEmpty())
276 QDomDocument doc(
"OpenFlipper");
277 if (!doc.setContent(&f)) {
282 QDomElement docElem = doc.documentElement();
287 changedContent_ =
false;
288 fileName_ = filename;
300 if (fileName_.isEmpty () || _newName)
302 QFileDialog *d =
new QFileDialog (
this, tr(
"Save Visual Script"),
304 tr(
"Visual Script File (*.ofvs)"));
306 d->setAcceptMode (QFileDialog::AcceptSave);
307 d->setDefaultSuffix (
"ofvs");
309 if (QDialog::Accepted == d->exec ())
310 filename = d->selectedFiles ()[0];
313 filename = fileName_;
315 if (filename.isEmpty ())
319 QFileInfo fileInfo(filename);
323 if (!f.open (QFile::WriteOnly))
326 msgBox.setText(tr(
"Unable to write file."));
327 msgBox.setInformativeText(filename);
332 QDomDocument doc(
"VisualScript");
333 QDomElement root = doc.createElement(
"VisualScript");
334 doc.appendChild(root);
338 f.write (doc.toString().toUtf8 ());
341 changedContent_ =
false;
342 fileName_ = filename;
356 while (!scenes_.isEmpty())
360 fileName_ = QString ();
362 changedContent_ =
false;
371 if (fileName_.isEmpty ())
372 setWindowTitle (tr(
"Untitled") + (changedContent_ ?
" [" + tr(
"Modified") +
"] " :
"") +
" - Visual Script Editor");
374 setWindowTitle (fileName_ + (changedContent_ ?
" [" + tr(
"Modified") +
"] " :
"") +
" - Visual Script Editor");
382 if (!changedContent_)
384 changedContent_ =
true;
397 msgBox.setText(tr(
"The visual script has been modified."));
398 msgBox.setInformativeText(tr(
"Do you want to save your changes?"));
399 msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
400 msgBox.setDefaultButton(QMessageBox::Save);
401 int ret = msgBox.exec();
403 case QMessageBox::Save:
408 case QMessageBox::Discard:
411 case QMessageBox::Cancel:
459 scenes_.push (_scene);
468 if (!scenes_.isEmpty())
471 if (!scenes_.isEmpty())
472 views_->setCurrentWidget (scenes_.top ()->graphicsView());
474 views_->setCurrentWidget (mainScene_->graphicsView());
DLLEXPORT OpenFlipperQSettings & OpenFlipperSettings()
QSettings object containing all program settings of OpenFlipper.
void setValue(const QString &key, const QVariant &value)
Wrapper function which makes it possible to enable Debugging output with -DOPENFLIPPER_SETTINGS_DEBUG...
unsigned int flags() const
Flags.
void loadFromXml(QDomElement &_domElement)
Load from xml.
void clearScene(bool _start=false)
clear the whole scene (_start = keep start element)
void saveToXml(QDomDocument &_doc, QDomElement &_root)
Save to xml.
GraphicsView * graphicsView()
Graphics view of the scene.