/*************************************************************************** * Copyright (C) 1999-2002 by Bernd Gehrmann * * bernd@kdevelop.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "appoutputviewpart.h" #include #include #include #include #include #include #include #include #include #include #include "kdevproject.h" #include "kdevcore.h" #include "kdevmainwindow.h" #include "appoutputwidget.h" #include "kdevpartcontroller.h" #include "settings.h" static const KDevPluginInfo data("kdevappoutputview"); typedef KDevGenericFactory< AppOutputViewPart > AppViewFactory; K_EXPORT_COMPONENT_FACTORY( libkdevappview, AppViewFactory( data ) ) AppOutputViewPart::AppOutputViewPart(TQObject *parent, const char *name, const TQStringList &) : KDevAppFrontend(&data, parent, name ? name : "AppOutputViewPart") { setInstance(AppViewFactory::instance()); m_dcop = new KDevAppFrontendIface(this); m_widget = new AppOutputWidget(this); m_widget->setIcon( SmallIcon("openterm") ); m_widget->setCaption(i18n("Application Output")); TQWhatsThis::add(m_widget, i18n("Application output

" "The stdout/stderr output window is a replacement for " "terminal-based application communication. Running terminal " "applications use this instead of a terminal window.")); mainWindow()->embedOutputView(m_widget, i18n("Application"), i18n("Output of the executed user program")); hideView(); connect( core(), TQT_SIGNAL(stopButtonClicked(KDevPlugin*)), this, TQT_SLOT(slotStopButtonClicked(KDevPlugin*)) ); connect(m_widget, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotProcessExited())); connect(m_widget, TQT_SIGNAL(processExited(TDEProcess*)), TQT_SIGNAL(processExited())); } AppOutputViewPart::~AppOutputViewPart() { if ( m_widget ) mainWindow()->removeView( m_widget ); delete m_widget; delete m_dcop; } void AppOutputViewPart::slotStopButtonClicked( KDevPlugin* which ) { if ( which != 0 && which != this ) return; stopApplication(); } void AppOutputViewPart::stopApplication() { m_widget->killJob(); core()->running( this, false ); } void AppOutputViewPart::slotProcessExited() { core()->running( this, false ); if ( partController()->activePart() && partController()->activePart()->widget() ) partController()->activePart()->widget()->setFocus(); } /** * If directory is empty it will use the user's home directory. * If inTerminal is true, the program is started in an external * konsole. */ void AppOutputViewPart::startAppCommand(const TQString &directory, const TQString &program, bool inTerminal) { TQString cmd; if (inTerminal) { cmd = Settings::terminalEmulatorName( *kapp->config() ); if ( cmd == "konsole" && !directory.isNull() ) { // isn't setting the working directory below enough? // If a directory was specified, use it cmd += TQString(" --workdir '%1'").arg(directory); } cmd += " -e /bin/sh -c '"; cmd += program; cmd += "; echo \""; cmd += i18n("Press Enter to continue!"); cmd += "\";read dummy'"; } else cmd = program; m_widget->clearViewAndContents(); if ( directory.isNull() ) // use the user's home directory m_widget->startJob(TQDir::homeDirPath(), cmd); else // use the supplied directory m_widget->startJob(directory, cmd); core()->running( this, true ); showView(); mainWindow()->raiseView(m_widget); } bool AppOutputViewPart::isRunning() { return m_widget->isRunning(); } void AppOutputViewPart::insertStdoutLine(const TQCString &line) { m_widget->insertStdoutLine(line); } void AppOutputViewPart::insertStderrLine(const TQCString &line) { m_widget->insertStderrLine(line); } void AppOutputViewPart::clearView() { m_widget->clearViewAndContents(); } void AppOutputViewPart::hideView() { m_viewIsVisible = false; mainWindow()->setViewAvailable( m_widget, m_viewIsVisible ); } void AppOutputViewPart::showView() { m_viewIsVisible = true; mainWindow()->setViewAvailable( m_widget, m_viewIsVisible ); } bool AppOutputViewPart::isViewVisible() { return m_viewIsVisible; } void AppOutputViewPart::addPartialStderrLine(const TQCString & line) { m_widget->addPartialStderrLine(line); } void AppOutputViewPart::addPartialStdoutLine(const TQCString & line) { m_widget->addPartialStdoutLine(line); } #include "appoutputviewpart.moc"