void ScriptingWidget::showEvent(QShowEvent* pEvent) { if ((mInterpreter.get() == NULL) && (mInterpreterName.isEmpty() == false)) { Interpreter* pInterpreter = NULL; setReadOnly(true); std::vector<PlugIn*> plugIns = mpPims->getPlugInInstances(mInterpreterName.toStdString()); if (plugIns.empty() == false && dynamic_cast<InterpreterManager*>(plugIns.front()) != NULL) { mInterpreter = PlugInResource(plugIns.front()); } else { mInterpreter = PlugInResource(mInterpreterName.toStdString()); } InterpreterManager* pInterMgr = dynamic_cast<InterpreterManager*>(mInterpreter.get()); if (pInterMgr != NULL) { mInteractive = pInterMgr->isInteractiveEnabled(); pInterMgr->start(); QString startupMsg = QString::fromStdString(pInterMgr->getStartupMessage()); addOutputText(startupMsg, false, false); pInterMgr->attach(SIGNAL_NAME(InterpreterManager, InterpreterStarted), Slot(this, &ScriptingWidget::interpreterStarted)); pInterpreter = pInterMgr->getInterpreter(); } if (pInterpreter != NULL) { pInterpreter->attach(SIGNAL_NAME(Interpreter, OutputText), Slot(this, &ScriptingWidget::receiveOutput)); pInterpreter->attach(SIGNAL_NAME(Interpreter, ErrorText), Slot(this, &ScriptingWidget::receiveOutput)); setReadOnly(!mInteractive); } } // Append a prompt if the widget is shown for the first time if (mDisplayedOnce == false) { appendPrompt(); mDisplayedOnce = true; } // Show the widget QTextEdit::showEvent(pEvent); }
void ScriptingWidget::interpreterStarted(Subject& subject, const std::string& signal, const boost::any& data) { Interpreter* pInterpreter = NULL; InterpreterManager* pInterMgr = dynamic_cast<InterpreterManager*>(mInterpreter.get()); if (pInterMgr != NULL) { pInterpreter = pInterMgr->getInterpreter(); QString startupMsg = QString::fromStdString(pInterMgr->getStartupMessage()); addOutputText(startupMsg, false, true); } if (pInterpreter != NULL) { pInterpreter->attach(SIGNAL_NAME(Interpreter, OutputText), Slot(this, &ScriptingWidget::receiveOutput)); pInterpreter->attach(SIGNAL_NAME(Interpreter, ErrorText), Slot(this, &ScriptingWidget::receiveOutput)); setReadOnly(!mInteractive); appendPrompt(); } }