-// Copyright (C) 2006-2014 CEA/DEN, EDF R&D
+// Copyright (C) 2006-2022 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include "FormContainer.hxx"
#include "Message.hxx"
-#if HAS_QSCI4>0
-#include <qsciscintilla.h>
-#include <qscilexerpython.h>
+#ifdef HAS_PYEDITOR
+#include <PyEditor_Editor.h>
+#include <PyEditor_Settings.h>
#endif
+#include <QToolButton>
#include <QSplitter>
#include <QTemporaryFile>
#include <QTextStream>
using namespace YACS;
using namespace YACS::HMI;
-#if HAS_QSCI4>0
-class myQsciScintilla: public QsciScintilla
-{
-public:
- myQsciScintilla(QWidget *parent=0)
- : QsciScintilla(parent) {};
- ~myQsciScintilla(){};
- virtual QSize sizeHint() const { return QSize(350, 150); };
-protected:
- virtual bool event(QEvent *e);
-};
-
-bool myQsciScintilla::event(QEvent *e)
-{
- if (e->type() == QEvent::ShortcutOverride)
- {
- e->accept();
- return true;
- }
- return QsciScintilla::event(e);
-}
-
-#endif
-
-
EditionScript::EditionScript(Subject* subject,
QWidget* parent,
const char* name)
_glayout->setMargin(1);
splitter->addWidget(window);
+ //add an options section in ports layout for execution mode (local or remote)
+ QHBoxLayout* hboxLayout = new QHBoxLayout();
+ hboxLayout->setMargin(0);
+ QToolButton* tb_options = new QToolButton();
+ tb_options->setCheckable(true);
+ QIcon icon;
+ icon.addFile("icons:icon_down.png");
+ icon.addFile("icons:icon_up.png", QSize(), QIcon::Normal, QIcon::On);
+ tb_options->setIcon(icon);
+ hboxLayout->addWidget(tb_options);
+
+ QLabel* label = new QLabel("Execution Mode");
+ QFont font;
+ font.setBold(true);
+ font.setWeight(75);
+ label->setFont(font);
+ hboxLayout->addWidget(label);
+
+ _portslayout->addLayout(hboxLayout);
+
+ fr_options = new QFrame();
+ QHBoxLayout* hboxLayout1 = new QHBoxLayout(fr_options);
+ hboxLayout1->setMargin(0);
+ radiolocal= new QRadioButton("YACS");
+ radioremote= new QRadioButton("Container");
+ radiolocal->setChecked(true);
+ hboxLayout1->addWidget(radiolocal);
+ hboxLayout1->addWidget(radioremote);
+ hboxLayout->addWidget(fr_options);
+
fr_container = new QFrame();
QHBoxLayout* hboxLayout2 = new QHBoxLayout(fr_container);
hboxLayout2->setMargin(0);
hboxLayout2->addWidget(cb_container);
_portslayout->addWidget(fr_container);
- formcontainer = new FormContainer(this);
- formcontainer->on_tb_container_toggled(false);
+ //
+ YACS::ENGINE::InlineNode *pyNode(dynamic_cast<YACS::ENGINE::InlineNode*>(_subInlineNode->getNode()));
+ YACS::ENGINE::Container *cont(pyNode->getContainer());
+ formcontainer = new FormContainerDecorator(cont,this);
_portslayout->addWidget(formcontainer);
+ //_portslayout->addWidget(formcontainer->getWidget());
//end of insertion of execution mode
createTablePorts(_portslayout);
setEditablePorts(true);
_haveScript = true;
-#if HAS_QSCI4>0
- _sci = new myQsciScintilla(this);
+#ifdef HAS_PYEDITOR
+ _sci = new PyEditor_Editor(this);
#else
_sci = new QTextEdit(this);
#endif
}
_glayout->addWidget( _sci );
-#if HAS_QSCI4>0
- _sci->setUtf8(1);
- QsciLexerPython *lex = new QsciLexerPython(_sci);
- lex->setFont(Resource::pythonfont);
- _sci->setLexer(lex);
- _sci->setBraceMatching(QsciScintilla::SloppyBraceMatch);
- _sci->setAutoIndent(1);
- _sci->setIndentationWidth(4);
- _sci->setIndentationGuides(1);
- _sci->setIndentationsUseTabs(0);
- _sci->setAutoCompletionThreshold(2);
- //_sci->setMarginLineNumbers(1,true);
- _sci->setMarginWidth(1,0);
- _sci->setFolding(QsciScintilla::PlainFoldStyle);
-#endif
-
if (!QtGuiContext::getQtCurrent()->isEdition())
_sci->setReadOnly(true);
}
connect(_sci, SIGNAL(textChanged()), this, SLOT(onScriptModified()));
+ connect(tb_options, SIGNAL(toggled(bool)), this, SLOT(on_tb_options_toggled(bool)));
+ connect(radioremote, SIGNAL(toggled(bool)), this, SLOT(on_remote_toggled(bool)));
connect(cb_container, SIGNAL(mousePressed()), this, SLOT(fillContainerPanel()));
connect(cb_container, SIGNAL(activated(int)), this, SLOT(changeContainer(int)));
update(UPDATE,0,0);
- changeContainer(0);
+ on_tb_options_toggled(false);
}
EditionScript::~EditionScript()
{
DEBTRACE("EditionScript::onApply");
bool scriptEdited = false;
-#if HAS_QSCI4>0
- _sci->lexer()->setFont(Resource::pythonfont);
+#ifdef HAS_PYEDITOR
+ PyEditor_Settings settings = _sci->settings();
+ settings.setFont(Resource::pythonfont);
+ _sci->setSettings(settings);
#endif
if(Resource::pythonExternalEditor.isEmpty())
if (_haveScript)
{
-#if HAS_QSCI4>0
- if (_sci->isModified())
- {
- scriptEdited = true;
- std::string text=_sci->text().toStdString();
- if(text[text.length()-1] != '\n')
- text=text+'\n';
- bool ret = _subInlineNode->setScript(text);
- if (ret) scriptEdited = false;
- }
-#else
if (_sci->document()->isModified())
{
scriptEdited = true;
bool ret = _subInlineNode->setScript(text);
if (ret) scriptEdited = false;
}
-#endif
}
bool containerEdited = true;
return;
QString fileName = outFile.fileName();
QTextStream out(&outFile);
-#if HAS_QSCI4>0
- out << _sci->text();
-#else
out << _sci->toPlainText();
-#endif
outFile.close();
QStringList options=Resource::pythonExternalEditor.split(" ");
if (!inFile.open(QIODevice::ReadOnly))
return;
QTextStream in(&inFile);
-#if HAS_QSCI4>0
- _sci->setText(in.readAll());
-#else
_sci->setPlainText(in.readAll());
-#endif
onApply();
}
+void EditionScript::on_tb_options_toggled(bool checked)
+{
+ DEBTRACE("EditionScript::on_tb_options_toggled " << checked);
+ _checked = checked;
+ if(_checked)
+ {
+ fr_options->show();
+ if(_remote)
+ {
+ fr_container->show();
+ formcontainer->show();
+ }
+ }
+ else
+ {
+ fr_options->hide();
+ fr_container->hide();
+ formcontainer->hide();
+ }
+}
+
+void EditionScript::on_remote_toggled(bool checked)
+{
+ DEBTRACE("EditionScript::on_remote_toggled " << checked);
+ _remote=checked;
+ YACS::ENGINE::InlineNode *pyNode = dynamic_cast<YACS::ENGINE::InlineNode*>(_subInlineNode->getNode());
+ std::string mode = pyNode->getExecutionMode();
+ DEBTRACE(mode);
+
+ if(checked)
+ {
+ //remote radio button is checked
+ if(mode != "remote")
+ _subInlineNode->setExecutionMode("remote");
+ fr_container->show();
+ formcontainer->show();
+ fillContainerPanel();
+ }
+ else
+ {
+ //remote radio button is unchecked
+ if(mode != "local")
+ _subInlineNode->setExecutionMode("local");
+ fr_container->hide();
+ formcontainer->hide();
+ }
+}
+
void EditionScript::fillContainerPanel()
{
DEBTRACE("EditionScript::fillContainerPanel ");
int index = cb_container->findText(cont->getName().c_str());
cb_container->setCurrentIndex(index);
formcontainer->FillPanel(cont);
- }
+ }
+ else if (cb_container->count()) {
+ changeContainer(0);
+ }
}
void EditionScript::changeContainer(int index)
return;
}
YASSERT(GuiContext::getCurrent()->_mapOfSubjectContainer.count(newContainer));
- SubjectContainer *scnt = GuiContext::getCurrent()->_mapOfSubjectContainer[newContainer];
+ SubjectContainerBase *scnt(GuiContext::getCurrent()->_mapOfSubjectContainer[newContainer]);
_subInlineNode->setContainer(scnt);
}
else if(event == UPDATE)
{
+ YACS::ENGINE::InlineNode *pyNode = dynamic_cast<YACS::ENGINE::InlineNode*>(_subInlineNode->getNode());
+ std::string mode = pyNode->getExecutionMode();
+ if(mode == "remote")
+ {
+ _remote=true;
+ radioremote->setChecked(true);
+ }
+ else if(mode == "local")
+ {
+ _remote=false;
+ radiolocal->setChecked(true);
+ }
+
fillContainerPanel();
}
}