Skip to content

Commit

Permalink
- Reopen stderr in OMEdit to get the OMC console messages.
Browse files Browse the repository at this point in the history
- Shows the stderr messages on MessagesWidget.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@25440 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
adeas31 committed Apr 8, 2015
1 parent 41b3823 commit c05b369
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 7 deletions.
50 changes: 43 additions & 7 deletions OMEdit/OMEditGUI/MainWindow.cpp
Expand Up @@ -101,6 +101,21 @@ MainWindow::MainWindow(QSplashScreen *pSplashScreen, QWidget *parent)
mpMessagesWidget->addGUIMessage(MessageItem("", false, 0, 0, 0, 0, tr("Can't open file %1.").arg(outputFileName), Helper::scriptingKind,
Helper::errorLevel));

}
// Reopen the standard error stream.
QString errorFileName = mpOMCProxy->changeDirectory()+ "/omediterror.txt";
freopen(errorFileName.toStdString().c_str(), "w", stderr);
setbuf(stderr, NULL); // used non-buffered stderr
mpErrorFileDataNotifier = 0;
mErrorFile.setFileName(errorFileName);
if (mErrorFile.open(QIODevice::ReadOnly)) {
mpErrorFileDataNotifier = new FileDataNotifier(errorFileName);
connect(mpErrorFileDataNotifier, SIGNAL(bytesAvailable(qint64)), SLOT(readErrorFile(qint64)));
mpErrorFileDataNotifier->start();
} else {
mpMessagesWidget->addGUIMessage(MessageItem("", false, 0, 0, 0, 0, tr("Can't open file %1.").arg(errorFileName), Helper::scriptingKind,
Helper::errorLevel));

}
// Create an object of SearchClassWidget
mpSearchClassWidget = new SearchClassWidget(this);
Expand Down Expand Up @@ -581,28 +596,39 @@ int MainWindow::askForExit()
return true;
}

/*!
* \brief MainWindow::beforeClosingMainWindow
* Called before closing the MainWindow
* Deletes the object.
* Saves the window state and geometry in the settings file.
*/
void MainWindow::beforeClosingMainWindow()
{
mpOMCProxy->quitOMC();
if (mpOutputFileDataNotifier) {
mOutputFile.close();
mpOutputFileDataNotifier->exit();
mpOutputFileDataNotifier->wait();
delete mpOutputFileDataNotifier;
}
if (mpErrorFileDataNotifier) {
mErrorFile.close();
mpErrorFileDataNotifier->exit();
mpErrorFileDataNotifier->wait();
delete mpErrorFileDataNotifier;
}
delete mpOMCProxy;
delete mpModelWidgetContainer;
delete mpDebuggerMainWindow;
delete mpSimulationDialog;
/* save the TransformationsWidget last window geometry and splitters state. */
QSettings *pSettings = OpenModelica::getApplicationSettings();
QHashIterator<QString, TransformationsWidget*> transformationsWidgets(mTransformationsWidgetHash);
if (mTransformationsWidgetHash.size() > 0)
{
if (mTransformationsWidgetHash.size() > 0) {
transformationsWidgets.toBack();
transformationsWidgets.previous();
TransformationsWidget *pTransformationsWidget = transformationsWidgets.value();
if (pTransformationsWidget)
{
if (pTransformationsWidget) {
pSettings->beginGroup("transformationalDebugger");
pSettings->setValue("geometry", pTransformationsWidget->saveGeometry());
pSettings->setValue("variablesNestedHorizontalSplitter", pTransformationsWidget->getVariablesNestedHorizontalSplitter()->saveState());
Expand All @@ -618,8 +644,7 @@ void MainWindow::beforeClosingMainWindow()
}
/* delete the TransformationsWidgets */
transformationsWidgets.toFront();
while (transformationsWidgets.hasNext())
{
while (transformationsWidgets.hasNext()) {
transformationsWidgets.next();
TransformationsWidget *pTransformationsWidget = transformationsWidgets.value();
delete pTransformationsWidget;
Expand Down Expand Up @@ -1129,7 +1154,7 @@ void MainWindow::loadSystemLibrary()

/*!
* \brief MainWindow::readOutputFile
* Reads the available data from file and adds it to MessagesWidget.
* Reads the available output data from file and adds it to MessagesWidget.
* \param bytes
*/
void MainWindow::readOutputFile(qint64 bytes)
Expand All @@ -1138,6 +1163,17 @@ void MainWindow::readOutputFile(qint64 bytes)
mpMessagesWidget->addGUIMessage(MessageItem("", false, 0, 0, 0, 0, data, Helper::scriptingKind, Helper::notificationLevel));
}

/*!
* \brief MainWindow::readErrorFile
* Reads the available error data from file and adds it to MessagesWidget.
* \param bytes
*/
void MainWindow::readErrorFile(qint64 bytes)
{
QString data = mErrorFile.read(bytes);
mpMessagesWidget->addGUIMessage(MessageItem("", false, 0, 0, 0, 0, data, Helper::scriptingKind, Helper::notificationLevel));
}

void MainWindow::focusSearchClassWidget(bool visible)
{
if (visible)
Expand Down
3 changes: 3 additions & 0 deletions OMEdit/OMEditGUI/MainWindow.h
Expand Up @@ -166,6 +166,8 @@ class MainWindow : public QMainWindow
QDockWidget *mpMessagesDockWidget;
QFile mOutputFile;
FileDataNotifier *mpOutputFileDataNotifier;
QFile mErrorFile;
FileDataNotifier *mpErrorFileDataNotifier;
SearchClassWidget *mpSearchClassWidget;
QDockWidget *mpSearchClassDockWidget;
LibraryTreeWidget *mpLibraryTreeWidget;
Expand Down Expand Up @@ -289,6 +291,7 @@ public slots:
void showOpenTransformationFileDialog();
void loadSystemLibrary();
void readOutputFile(qint64 bytes);
void readErrorFile(qint64 bytes);
void focusSearchClassWidget(bool visible);
void openRecentFile();
void clearRecentFilesList();
Expand Down

0 comments on commit c05b369

Please sign in to comment.