summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/oapplicationfactory.h2
-rw-r--r--libopie2/opiecore/oprocess.h4
2 files changed, 3 insertions, 3 deletions
diff --git a/libopie2/opiecore/oapplicationfactory.h b/libopie2/opiecore/oapplicationfactory.h
index cabaf79..8516565 100644
--- a/libopie2/opiecore/oapplicationfactory.h
+++ b/libopie2/opiecore/oapplicationfactory.h
@@ -98,238 +98,238 @@ struct MakeTypelist<>
/**
* To allow your application to be quick launched some one needs
* to create the QWidget.
* This is this factory. Make surce your widget has static QString Widget::appName()
* as one of its functions.
*
* This template takes one QWidget and initialized it in the form of
* MyWidget::MyWidget( QWidget* parent, const char* name, WFlags f );
*
* To use it on your app do that:
* typedef OApplicationFactory<MyWidget> MyFactory;
* OPIE_EXPORT_APP( MyFactory )
*
*/
template <class Product>
struct OApplicationFactory : public ApplicationInterface {
QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
*iface = 0;
if ( uuid == IID_QUnknown ) *iface = this;
else if ( uuid == IID_QtopiaApplication ) *iface = this;
else return QS_FALSE;
(*iface)->addRef();
return QS_OK;
}
/*
*
*/
virtual QWidget *createMainWindow( const QString& appName, QWidget* parent,
const char* name, Qt::WFlags f ) {
if (appName == Product::appName() )
return new Product(parent, name, f );
else
return 0l;
}
virtual QStringList applications()const {
QStringList list;
list << Product::appName() ;
return list;
}
Q_REFCOUNT
};
/* Internal */
template< class Product >
struct OPrivate {
inline static QWidget *multiFactory( const QString& appName, QWidget* parent,
const char* name, Qt::WFlags fl ) {
if ( appName == Product::appName() )
return new Product( parent, name, fl );
else
return 0;
}
inline static QStringList multiString( const QStringList& _list ) {
QStringList list = _list;
list << Product::appName();
return list;
}
};
template <>
struct OPrivate<Opie::Core::NullType > {
inline static QWidget* multiFactory ( const QString& , QWidget* ,
const char* , Qt::WFlags ) {
return 0l;
}
inline static QStringList multiString( const QStringList& _list ) {
return _list;
}
};
/*
template <>
struct OPrivate <Opie::NullType, Opie::NullType > {
inline static QWidget* multiFactory( const QString& , QWidget* ,
const char* , Qt::WFlags ) {
return 0l;
}
inline static QStringList multiString( const QStringList& _list ) {
return _list;
}
};
*/
template <class Product, class ProductListTail>
struct OPrivate< Opie::Core::Typelist<Product, ProductListTail> > {
inline static QWidget* multiFactory( const QString& appName, QWidget* parent,
const char* name, Qt::WFlags fl) {
QWidget* wid = OPrivate<Product>::multiFactory( appName, parent, name, fl );
if (!wid )
wid = OPrivate<ProductListTail>::multiFactory( appName, parent, name, fl );
return wid;
}
inline static QStringList multiString( const QStringList& _list ) {
QStringList list = _list;
list = OPrivate<Product>::multiString( list );
list = OPrivate<ProductListTail>::multiString( list );
return list;
}
};
/* Internal END */
/*
* If you want to export more than one Widget use that function
* Make sure all your Widgets provide the appName() static method
* otherwise you'll get a compiler error
*
- * typedef Opie::MakeTypeList<MyWidget, MyDialog, MyMediaPlayer >::Result MyTypes;
+ * typedef Opie::Core::MakeTypelist<MyWidget, MyDialog, MyMediaPlayer >::Result MyTypes;
* OPIE_EXPORT_APP( OApplicationFactory<MyTypes> )
*/
template<class Product, class ProductListTail>
struct OApplicationFactory< Opie::Core::Typelist<Product, ProductListTail > >
: ApplicationInterface {
QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
*iface = 0;
if ( uuid == IID_QUnknown ) *iface = this;
else if ( uuid ==IID_QtopiaApplication ) *iface = this;
else return QS_FALSE;
(*iface)->addRef();
return QS_OK;
}
QWidget* createMainWindow ( const QString& appName, QWidget* parent,
const char* name, Qt::WFlags fl ) {
qWarning("StringList is %s", applications().join(":").latin1() );
return OPrivate< Opie::Core::Typelist<Product, ProductListTail > >::multiFactory( appName, parent, name, fl );
}
QStringList applications()const {
QStringList _list;
return OPrivate< Opie::Core::Typelist<Product, ProductListTail> >::multiString( _list );
}
Q_REFCOUNT
};
}
}
/* If the library version should be build */
#ifdef OPIE_APP_INTERFACE
#define OPIE_EXPORT_APP( factory ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) }
#else
#include <qpe/qpeapplication.h>
#define OPIE_EXPORT_APP( Factory ) \
int main( int argc, char **argv ) { \
QPEApplication a(argc, argv ); \
QWidget *mw = 0;\
\
/* method from TT */ \
QString executableName = QString::fromLatin1( argv[0] ); \
executableName = executableName.right(executableName.length() \
- executableName.findRev('/') - 1); \
\
Factory f; \
QStringList list = f.applications(); \
if (list.contains(executableName) ) \
mw = f.createMainWindow(executableName, 0, 0, 0 ); \
else \
mw = f.createMainWindow( list[0], 0, 0, 0 ); \
\
if( mw ) { \
if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \
a.showMainDocumentWidget( mw ); \
else \
a.showMainWidget( mw ); \
\
int rv = a.exec(); \
delete mw; \
return rv; \
}else \
return -1; \
}
#endif
#ifdef OPIE_APP_INTERFACE
#define OPIE_EXPORT_APP_V2( factory,name ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) }
#else
#include <opie2/oapplication.h>
#define OPIE_EXPORT_APP_V2( Factory,name ) \
int main( int argc, char **argv ) { \
Opie::Core::OApplication a(argc, argv, name ); \
QWidget *mw = 0;\
\
/* method from TT */ \
QString executableName = QString::fromLatin1( argv[0] ); \
executableName = executableName.right(executableName.length() \
- executableName.findRev('/') - 1); \
\
Factory f; \
QStringList list = f.applications(); \
if (list.contains(executableName) ) \
mw = f.createMainWindow(executableName, 0, 0, 0 ); \
else \
mw = f.createMainWindow( list[0], 0, 0, 0 ); \
\
if( mw ) { \
if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \
a.showMainDocumentWidget( mw ); \
else \
a.showMainWidget( mw ); \
\
int rv = a.exec(); \
delete mw; \
return rv; \
}else \
return -1; \
}
#endif
#define OPIE_EXPORT_APPNAME static QString appName() { return QString::fromLatin1( QUICKAPP_NAME ); }
diff --git a/libopie2/opiecore/oprocess.h b/libopie2/opiecore/oprocess.h
index ac6be98..23e9b10 100644
--- a/libopie2/opiecore/oprocess.h
+++ b/libopie2/opiecore/oprocess.h
@@ -1,233 +1,233 @@
/*
                This file is part of the Opie Project
            Copyright (C) 2003-2004 Holger Freyther <zecke@handhelds.org>
Copyright (C) The Opie Team <opie-devel@handhelds.org>
=. Based on KProcess (C) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at)
.=l.
         .>+-=
_;:,     .>    :=|. This program is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
.="- .-=="i,     .._ License as published by the Free Software
- .   .-<_>     .<> Foundation; either version 2 of the License,
   ._= =}       : or (at your option) any later version.
  .%`+i>       _;_.
  .i_,=:_.      -<s. This program is distributed in the hope that
   +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
  : ..    .:,     . . . without even the implied warranty of
  =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
_.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
:     =  ...= . :.=-
-.   .:....=;==+<; You should have received a copy of the GNU
-_. . .   )=.  = Library General Public License along with
  --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef OPROCESS_H
#define OPROCESS_H
/* QT */
#include <qcstring.h>
#include <qobject.h>
#include <qvaluelist.h>
/* STD */
#include <sys/types.h> // for pid_t
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
class QSocketNotifier;
namespace Opie {
namespace Core {
namespace Internal {
class OProcessController;
class OProcessPrivate;
}
/**
* Child process invocation, monitoring and control.
*
* @par General usage and features
*
*This class allows a KDE and OPIE application to start child processes without having
*to worry about UN*X signal handling issues and zombie process reaping.
*
*@see KProcIO
*
*Basically, this class distinguishes three different ways of running
*child processes:
*
*@li OProcess::DontCare -- The child process is invoked and both the child
*process and the parent process continue concurrently.
*
*Starting a DontCare child process means that the application is
*not interested in any notification to determine whether the
*child process has already exited or not.
*
*@li OProcess::NotifyOnExit -- The child process is invoked and both the
*child and the parent process run concurrently.
*
*When the child process exits, the OProcess instance
*corresponding to it emits the Qt signal @ref processExited().
*
*Since this signal is @em not emitted from within a UN*X
*signal handler, arbitrary function calls can be made.
*
*Be aware: When the OProcess objects gets destructed, the child
*process will be killed if it is still running!
*This means in particular, that you cannot use a OProcess on the stack
*with OProcess::NotifyOnExit.
*
*@li OProcess::Block -- The child process starts and the parent process
*is suspended until the child process exits. (@em Really not recommended
*for programs with a GUI.)
*
*OProcess also provides several functions for determining the exit status
*and the pid of the child process it represents.
*
*Furthermore it is possible to supply command-line arguments to the process
*in a clean fashion (no null -- terminated stringlists and such...)
*
*A small usage example:
*<pre>
*OProcess *proc = new OProcess;
*
**proc << "my_executable";
**proc << "These" << "are" << "the" << "command" << "line" << "args";
- *QApplication::connect(proc, SIGNAL(processExited(Opie::Core::OProcess *)),
- * pointer_to_my_object, SLOT(my_objects_slot(Opie::Core::OProcess *)));
+ *QObject::connect(proc, SIGNAL(processExited(Opie::Core::OProcess *)),
+ * pointer_to_my_object, SLOT(my_objects_slot(Opie::Core::OProcess *)));
*proc->start();
*</pre>
*
*This will start "my_executable" with the commandline arguments "These"...
*
*When the child process exits, the respective Qt signal will be emitted.
*
*@par Communication with the child process
*
*OProcess supports communication with the child process through
*stdin/stdout/stderr.
*
*The following functions are provided for getting data from the child
*process or sending data to the child's stdin (For more information,
*have a look at the documentation of each function):
*
*@li bool @ref writeStdin(char *buffer, int buflen);
*@li -- Transmit data to the child process's stdin.
*
*@li bool @ref closeStdin();
*@li -- Closes the child process's stdin (which causes it to see an feof(stdin)).
*Returns false if you try to close stdin for a process that has been started
*without a communication channel to stdin.
*
*@li bool @ref closeStdout();
*@li -- Closes the child process's stdout.
*Returns false if you try to close stdout for a process that has been started
*without a communication channel to stdout.
*
*@li bool @ref closeStderr();
*@li -- Closes the child process's stderr.
*Returns false if you try to close stderr for a process that has been started
*without a communication channel to stderr.
*
*
*@par QT signals:
*
*@li void @ref receivedStdout(OProcess *proc, char *buffer, int buflen);
*@li void @ref receivedStderr(OProcess *proc, char *buffer, int buflen);
*@li -- Indicates that new data has arrived from either the
*child process's stdout or stderr.
*
*@li void @ref wroteStdin(OProcess *proc);
*@li -- Indicates that all data that has been sent to the child process
*by a prior call to @ref writeStdin() has actually been transmitted to the
*client .
*
*@author Christian Czezakte e9025461@student.tuwien.ac.at
*@author Holger Freyther (Opie Port)
*
**/
class OProcess : public QObject
{
Q_OBJECT
public:
/**
* Modes in which the communication channel can be opened.
*
* If communication for more than one channel is required,
* the values have to be or'ed together, for example to get
* communication with stdout as well as with stdin, you would
* specify @p Stdin @p | @p Stdout
*
* If @p NoRead is specified in conjunction with @p Stdout,
* no data is actually read from @p Stdout but only
* the signal @ref childOutput(int fd) is emitted.
*/
enum Communication { NoCommunication = 0, Stdin = 1, Stdout = 2, Stderr = 4,
AllOutput = 6, All = 7,
NoRead };
/**
* Run-modes for a child process.
*/
enum RunMode {
/**
* The application does not receive notifications from the subprocess when
* it is finished or aborted.
*/
DontCare,
/**
* The application is notified when the subprocess dies.
*/
NotifyOnExit,
/**
* The application is suspended until the started process is finished.
*/
Block };
/**
* Constructor
*/
OProcess( QObject *parent = 0, const char *name = 0 );
/**
* Constructor
*/
OProcess( const QString &arg0, QObject *parent = 0, const char *name = 0 );
/**
* Constructor
*/
OProcess( const QStringList &args, QObject *parent = 0, const char *name = 0 );
/**
*Destructor:
*
* If the process is running when the destructor for this class
* is called, the child process is killed with a SIGKILL, but
* only if the run mode is not of type @p DontCare.
* Processes started as @p DontCare keep running anyway.
*/
virtual ~OProcess();
/**
@deprecated
The use of this function is now deprecated. -- Please use the
"operator<<" instead of "setExecutable".
Sets the executable to be started with this OProcess object.
Returns false if the process is currently running (in that
case the executable remains unchanged.)
@see operator<<
*/
bool setExecutable( const QString& proc );