appoutputviewpart.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "appoutputviewpart.h"
00013
00014 #include <qwhatsthis.h>
00015 #include <qdir.h>
00016 #include <kdebug.h>
00017 #include <klocale.h>
00018 #include <kaction.h>
00019 #include <kiconloader.h>
00020 #include <kparts/part.h>
00021
00022 #include "kdevproject.h"
00023 #include "kdevcore.h"
00024 #include "kdevmainwindow.h"
00025 #include "outputviewsfactory.h"
00026 #include "appoutputwidget.h"
00027 #include "kdevpartcontroller.h"
00028
00029
00030 AppOutputViewPart::AppOutputViewPart(QObject *parent, const char *name, const QStringList &)
00031 : KDevAppFrontend("ApplicationOutput", "appoutput", parent, name ? name : "AppOutputViewPart")
00032 {
00033 setInstance(OutputViewsFactory::instance());
00034
00035 m_dcop = new KDevAppFrontendIface(this);
00036
00037 m_widget = new AppOutputWidget(this);
00038 m_widget->setIcon( SmallIcon("openterm") );
00039 m_widget->setCaption(i18n("Application Output"));
00040 QWhatsThis::add(m_widget, i18n("<b>Application output</b><p>"
00041 "The stdout/stderr output window is a replacement for "
00042 "terminal-based application communication. Running terminal "
00043 "applications use this instead of a terminal window."));
00044
00045 mainWindow()->embedOutputView(m_widget, i18n("Application"), i18n("Output of the executed user program"));
00046
00047 connect( core(), SIGNAL(stopButtonClicked(KDevPlugin*)),
00048 this, SLOT(slotStopButtonClicked(KDevPlugin*)) );
00049 connect(m_widget, SIGNAL(processExited(KProcess*)), this, SLOT(slotProcessExited()));
00050 connect(m_widget, SIGNAL(processExited(KProcess*)), SIGNAL(processExited()));
00051 }
00052
00053
00054 AppOutputViewPart::~AppOutputViewPart()
00055 {
00056 if ( m_widget )
00057 mainWindow()->removeView( m_widget );
00058 delete m_widget;
00059 delete m_dcop;
00060 }
00061
00062 void AppOutputViewPart::slotStopButtonClicked( KDevPlugin* which )
00063 {
00064 if ( which != 0 && which != this )
00065 return;
00066 stopApplication();
00067 }
00068
00069 void AppOutputViewPart::stopApplication()
00070 {
00071 m_widget->killJob();
00072
00073 core()->running( this, false );
00074 }
00075
00076 void AppOutputViewPart::slotProcessExited()
00077 {
00078 core()->running( this, false );
00079 if ( partController()->activePart() && partController()->activePart()->widget() )
00080 partController()->activePart()->widget()->setFocus();
00081 }
00082
00088 void AppOutputViewPart::startAppCommand(const QString &directory, const QString &program, bool inTerminal)
00089 {
00090 QString cmd;
00091
00092 if (inTerminal) {
00093 cmd = "konsole";
00094 if ( !directory.isNull() ) {
00095
00096 cmd += " --workdir " + directory;
00097 }
00098 cmd += " -e /bin/sh -c '";
00099 cmd += program;
00100 cmd += "; echo \"";
00101 cmd += i18n("Press Enter to continue!");
00102 cmd += "\";read'";
00103 } else
00104 cmd = program;
00105
00106 m_widget->strList.clear();
00107
00108 if ( directory.isNull() )
00109
00110 m_widget->startJob(QDir::homeDirPath(), cmd);
00111 else
00112
00113 m_widget->startJob(directory, cmd);
00114
00115 core()->running( this, true );
00116
00117 mainWindow()->raiseView(m_widget);
00118 }
00119
00120
00121 bool AppOutputViewPart::isRunning()
00122 {
00123 return m_widget->isRunning();
00124 }
00125
00126
00127 void AppOutputViewPart::insertStdoutLine(const QString &line)
00128 {
00129 m_widget->insertStdoutLine(line);
00130 }
00131
00132
00133 void AppOutputViewPart::insertStderrLine(const QString &line)
00134 {
00135 m_widget->insertStderrLine(line);
00136 }
00137
00138 void AppOutputViewPart::clearView()
00139 {
00140 m_widget->clear();
00141 }
00142
00143 #include "appoutputviewpart.moc"
This file is part of the documentation for KDevelop Version 3.1.2.