KDevelop API Documentation

appoutputviewpart.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 1999-2002 by Bernd Gehrmann                             *
00003  *   bernd@kdevelop.org                                                    *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
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           // If a directory was specified, use it
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       // use the user's home directory
00110       m_widget->startJob(QDir::homeDirPath(), cmd);
00111     else
00112       // use the supplied directory
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"
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:41 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003