dcop Library API Documentation

dcopref.h

00001 /*
00002 Copyright (c) 2002 Matthias Ettrich <ettrich@kde.org>
00003 Copyright (c) 1999 Preston Brown <pbrown@kde.org>
00004 
00005 Permission is hereby granted, free of charge, to any person obtaining a copy
00006 of this software and associated documentation files (the "Software"), to deal
00007 in the Software without restriction, including without limitation the rights
00008 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00009 copies of the Software, and to permit persons to whom the Software is
00010 furnished to do so, subject to the following conditions:
00011 
00012 The above copyright notice and this permission notice shall be included in
00013 all copies or substantial portions of the Software.
00014 
00015 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00016 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00017 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00018 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
00019 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00020 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00021 */
00022 
00023 #ifndef _DCOPREF_H
00024 #define _DCOPREF_H
00025 
00026 #include <qcstring.h>
00027 #include <dcoptypes.h>
00028 #include <kdatastream.h> // needed for proper bool marshalling
00029 
00030 class QDataStream;
00031 class DCOPObject;
00032 class DCOPClient;
00033 
00043 class DCOPReply
00044 {
00045 public:
00052     template<class T>
00053     operator T() {
00054     T t;
00055     if ( typeCheck( dcopTypeName(t) ) ) {
00056         QDataStream reply( data, IO_ReadOnly );
00057         reply >> t;
00058     } else {
00059         dcopTypeInit(t);
00060     }
00061     return t;
00062     }
00070     template <class T> bool get(  T& t, const char* tname ) {
00071     if ( typeCheck( tname ) ) {
00072         QDataStream reply( data, IO_ReadOnly );
00073         reply >> t;
00074         return true;
00075     }
00076     return false;
00077     }
00087     template <class T> bool get(  T& t ) {
00088     if ( typeCheck( dcopTypeName(t) ) ) {
00089         QDataStream reply( data, IO_ReadOnly );
00090         reply >> t;
00091         return true;
00092     }
00093     return false;
00094     }
00095 
00100     inline bool isValid() const { return !type.isNull(); }
00101     
00103     QByteArray data;
00105     QCString type;
00106 private:
00107     bool typeCheck( const char* t );
00108 };
00109 
00120 class DCOPArg  {
00121 public:
00130     template <class T> DCOPArg( const T& t, const char* tname_arg )
00131     : tname(tname_arg)
00132     {
00133         QDataStream ds( data, IO_WriteOnly );
00134         ds << t;
00135     }
00144     template <class T> DCOPArg( const T& t )
00145     : tname( dcopTypeName(t) )
00146     {
00147         QDataStream ds( data, IO_WriteOnly );
00148         ds << t;
00149     }
00150 
00152     QByteArray data;
00154     const char* tname;
00155 };
00156 
00157 inline const char* dcopTypeName( const DCOPArg &arg )  { return arg.tname; }
00158 inline QDataStream & operator << (QDataStream & str, const DCOPArg& arg )
00159    { str.writeRawBytes( arg.data.data(), arg.data.size() ); return str; }
00160 
00161 
00162 
00275 class DCOPRef
00276 {
00277 public:
00281     DCOPRef();
00282 
00286     DCOPRef( const DCOPRef& ref );
00294     DCOPRef( const QCString& app, const QCString& obj = "" );
00295 
00301     DCOPRef( DCOPObject *object );
00302 
00312     DCOPRef( const QCString& app, const QCString& obj, const QCString& type );
00313 
00318     bool isNull() const;
00319 
00324     QCString app() const;
00325 
00331     QCString obj() const;
00332 
00336     QCString object() const;
00337 
00342     QCString type() const;
00343 
00344 
00348     DCOPRef& operator=( const DCOPRef& );
00349 
00355     void setRef( const QCString& app, const QCString& obj = "" );
00356 
00363     void setRef( const QCString& app, const QCString& obj, const QCString& type );
00364 
00365 
00369     void clear();
00370 
00371 
00378     DCOPClient* dcopClient() const;
00379 
00386     void setDCOPClient( DCOPClient *client );
00387 
00401     DCOPReply call( const QCString& fun ) {
00402     QByteArray data;
00403     return callInternal( fun, "()", data );
00404     }
00405 
00421     template <class T1>
00422     DCOPReply call( const QCString& fun, const T1& t1 ) {
00423     QCString args;
00424     args.sprintf( "(%s)",
00425              dcopTypeName(t1) );
00426     QByteArray data;
00427     QDataStream ds( data, IO_WriteOnly );
00428     ds << t1;
00429     return callInternal( fun, args, data );
00430     }
00431 
00449     template <class T1, class T2>
00450     DCOPReply call( const QCString& fun,
00451             const T1& t1,
00452             const T2& t2 ) {
00453     QCString args;
00454     args.sprintf( "(%s,%s)",
00455              dcopTypeName(t1),
00456              dcopTypeName(t2) );
00457     QByteArray data;
00458     QDataStream ds( data, IO_WriteOnly );
00459     ds << t1 << t2;
00460     return callInternal( fun, args, data );
00461     }
00462 
00482     template <class T1, class T2, class T3>
00483     DCOPReply call( const QCString& fun,
00484             const T1& t1,
00485             const T2& t2,
00486             const T3& t3 ) {
00487     QCString args;
00488     args.sprintf( "(%s,%s,%s)",
00489              dcopTypeName(t1),
00490              dcopTypeName(t2),
00491              dcopTypeName(t3) );
00492     QByteArray data;
00493     QDataStream ds( data, IO_WriteOnly );
00494     ds << t1 << t2 << t3;
00495     return callInternal( fun, args, data );
00496     }
00497 
00519     template <class T1,class T2,class T3,class T4>
00520     DCOPReply call( const QCString& fun,
00521             const T1& t1,
00522             const T2& t2,
00523             const T3& t3,
00524             const T4& t4 ) {
00525     QCString args;
00526     args.sprintf( "(%s,%s,%s,%s)",
00527              dcopTypeName(t1),
00528              dcopTypeName(t2),
00529              dcopTypeName(t3),
00530              dcopTypeName(t4) );
00531     QByteArray data;
00532     QDataStream ds( data, IO_WriteOnly );
00533     ds << t1 << t2 << t3 << t4;
00534     return callInternal( fun, args, data );
00535     }
00536 
00560     template <class T1,class T2,class T3,class T4,class T5>
00561     DCOPReply call( const QCString& fun,
00562             const T1& t1,
00563             const T2& t2,
00564             const T3& t3,
00565             const T4& t4,
00566             const T5& t5 ) {
00567     QCString args;
00568     args.sprintf( "(%s,%s,%s,%s,%s)",
00569              dcopTypeName(t1),
00570              dcopTypeName(t2),
00571              dcopTypeName(t3),
00572              dcopTypeName(t4),
00573              dcopTypeName(t5) );
00574     QByteArray data;
00575     QDataStream ds( data, IO_WriteOnly );
00576     ds << t1 << t2 << t3 << t4 << t5;
00577     return callInternal( fun, args, data );
00578     }
00579 
00605     template <class T1,class T2,class T3,class T4,class T5,class T6>
00606     DCOPReply call( const QCString& fun,
00607             const T1& t1,
00608             const T2& t2,
00609             const T3& t3,
00610             const T4& t4,
00611             const T5& t5,
00612             const T6& t6 ) {
00613     QCString args;
00614     args.sprintf( "(%s,%s,%s,%s,%s,%s)",
00615              dcopTypeName(t1),
00616              dcopTypeName(t2),
00617              dcopTypeName(t3),
00618              dcopTypeName(t4),
00619              dcopTypeName(t5),
00620              dcopTypeName(t6) );
00621     QByteArray data;
00622     QDataStream ds( data, IO_WriteOnly );
00623     ds << t1 << t2 << t3 << t4 << t5 << t6;
00624     return callInternal( fun, args, data );
00625     }
00626 
00654     template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
00655     DCOPReply call( const QCString& fun,
00656             const T1& t1,
00657             const T2& t2,
00658             const T3& t3,
00659             const T4& t4,
00660             const T5& t5,
00661             const T6& t6,
00662             const T7& t7 ) {
00663     QCString args;
00664     args.sprintf( "(%s,%s,%s,%s,%s,%s,%s)",
00665              dcopTypeName(t1),
00666              dcopTypeName(t2),
00667              dcopTypeName(t3),
00668              dcopTypeName(t4),
00669              dcopTypeName(t5),
00670              dcopTypeName(t6),
00671              dcopTypeName(t7) );
00672     QByteArray data;
00673     QDataStream ds( data, IO_WriteOnly );
00674     ds << t1 << t2 << t3 << t4 << t5 << t6 << t7;
00675     return callInternal( fun, args, data );
00676     }
00677 
00707     template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
00708     DCOPReply call( const QCString& fun,
00709             const T1& t1,
00710             const T2& t2,
00711             const T3& t3,
00712             const T4& t4,
00713             const T5& t5,
00714             const T6& t6,
00715             const T7& t7,
00716             const T8& t8 ) {
00717     QCString args;
00718     args.sprintf( "(%s,%s,%s,%s,%s,%s,%s,%s)",
00719              dcopTypeName(t1),
00720              dcopTypeName(t2),
00721              dcopTypeName(t3),
00722              dcopTypeName(t4),
00723              dcopTypeName(t5),
00724              dcopTypeName(t6),
00725              dcopTypeName(t7),
00726              dcopTypeName(t8) );
00727     QByteArray data;
00728     QDataStream ds( data, IO_WriteOnly );
00729     ds << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
00730     return callInternal( fun, args, data );
00731     }
00732 
00746     bool send( const QCString& fun ) {
00747     QByteArray data;
00748     return sendInternal( fun, "()", data );
00749     }
00750 
00767     template <class T1>
00768     bool send( const QCString& fun, const T1& t1 ) {
00769     QCString args;
00770     args.sprintf( "(%s)",
00771              dcopTypeName(t1) );
00772     QByteArray data;
00773     QDataStream ds( data, IO_WriteOnly );
00774     ds << t1;
00775     return sendInternal( fun, args, data );
00776     }
00795     template <class T1, class T2>
00796     bool send( const QCString& fun,
00797             const T1& t1,
00798             const T2& t2 ) {
00799     QCString args;
00800     args.sprintf( "(%s,%s)",
00801              dcopTypeName(t1),
00802              dcopTypeName(t2) );
00803     QByteArray data;
00804     QDataStream ds( data, IO_WriteOnly );
00805     ds << t1 << t2;
00806     return sendInternal( fun, args, data );
00807     }
00828     template <class T1, class T2, class T3>
00829     bool send( const QCString& fun,
00830             const T1& t1,
00831             const T2& t2,
00832             const T3& t3 ) {
00833     QCString args;
00834     args.sprintf( "(%s,%s,%s)",
00835              dcopTypeName(t1),
00836              dcopTypeName(t2),
00837              dcopTypeName(t3) );
00838     QByteArray data;
00839     QDataStream ds( data, IO_WriteOnly );
00840     ds << t1 << t2 << t3;
00841     return sendInternal( fun, args, data );
00842     }
00865     template <class T1,class T2,class T3,class T4>
00866     bool send( const QCString& fun,
00867             const T1& t1,
00868             const T2& t2,
00869             const T3& t3,
00870             const T4& t4 ) {
00871     QCString args;
00872     args.sprintf( "(%s,%s,%s,%s)",
00873              dcopTypeName(t1),
00874              dcopTypeName(t2),
00875              dcopTypeName(t3),
00876              dcopTypeName(t4) );
00877     QByteArray data;
00878     QDataStream ds( data, IO_WriteOnly );
00879     ds << t1 << t2 << t3 << t4;
00880     return sendInternal( fun, args, data );
00881     }
00906     template <class T1,class T2,class T3,class T4,class T5>
00907     bool send( const QCString& fun,
00908             const T1& t1,
00909             const T2& t2,
00910             const T3& t3,
00911             const T4& t4,
00912             const T5& t5 ) {
00913     QCString args;
00914     args.sprintf( "(%s,%s,%s,%s,%s)",
00915              dcopTypeName(t1),
00916              dcopTypeName(t2),
00917              dcopTypeName(t3),
00918              dcopTypeName(t4),
00919              dcopTypeName(t5) );
00920     QByteArray data;
00921     QDataStream ds( data, IO_WriteOnly );
00922     ds << t1 << t2 << t3 << t4 << t5;
00923     return sendInternal( fun, args, data );
00924     }
00951     template <class T1,class T2,class T3,class T4,class T5,class T6>
00952     bool send( const QCString& fun,
00953             const T1& t1,
00954             const T2& t2,
00955             const T3& t3,
00956             const T4& t4,
00957             const T5& t5,
00958             const T6& t6 ) {
00959     QCString args;
00960     args.sprintf( "(%s,%s,%s,%s,%s,%s)",
00961              dcopTypeName(t1),
00962              dcopTypeName(t2),
00963              dcopTypeName(t3),
00964              dcopTypeName(t4),
00965              dcopTypeName(t5),
00966              dcopTypeName(t6) );
00967     QByteArray data;
00968     QDataStream ds( data, IO_WriteOnly );
00969     ds << t1 << t2 << t3 << t4 << t5 << t6;
00970     return sendInternal( fun, args, data );
00971     }
01000     template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
01001     bool send( const QCString& fun,
01002             const T1& t1,
01003             const T2& t2,
01004             const T3& t3,
01005             const T4& t4,
01006             const T5& t5,
01007             const T6& t6,
01008             const T7& t7 ) {
01009     QCString args;
01010     args.sprintf( "(%s,%s,%s,%s,%s,%s,%s)",
01011              dcopTypeName(t1),
01012              dcopTypeName(t2),
01013              dcopTypeName(t3),
01014              dcopTypeName(t4),
01015              dcopTypeName(t5),
01016              dcopTypeName(t6),
01017              dcopTypeName(t7) );
01018     QByteArray data;
01019     QDataStream ds( data, IO_WriteOnly );
01020     ds << t1 << t2 << t3 << t4 << t5 << t6 << t7;
01021     return sendInternal( fun, args, data );
01022     }
01053     template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
01054     bool send( const QCString& fun,
01055             const T1& t1,
01056             const T2& t2,
01057             const T3& t3,
01058             const T4& t4,
01059             const T5& t5,
01060             const T6& t6,
01061             const T7& t7,
01062             const T8& t8 ) {
01063     QCString args;
01064     args.sprintf( "(%s,%s,%s,%s,%s,%s,%s,%s)",
01065              dcopTypeName(t1),
01066              dcopTypeName(t2),
01067              dcopTypeName(t3),
01068              dcopTypeName(t4),
01069              dcopTypeName(t5),
01070              dcopTypeName(t6),
01071              dcopTypeName(t7),
01072              dcopTypeName(t8) );
01073     QByteArray data;
01074     QDataStream ds( data, IO_WriteOnly );
01075     ds << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
01076     return sendInternal( fun, args, data );
01077     }
01078 
01079 
01080 
01081 private:
01082     DCOPReply callInternal( const QCString& fun, const QCString& args, const QByteArray& data );
01083     bool sendInternal( const QCString& fun, const QCString& args, const QByteArray& data );
01084 
01085     QCString m_app;
01086     QCString m_obj;
01087     QCString m_type;
01088 
01089     class DCOPRefPrivate;
01090     DCOPRefPrivate *d;
01091 };
01092 
01096 QDataStream& operator<<( QDataStream&, const DCOPRef& ref );
01100 QDataStream& operator>>( QDataStream&, DCOPRef& ref );
01101 
01102 #endif
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.0.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Wed Oct 8 12:20:25 2003 by doxygen 1.2.18 written by Dimitri van Heesch, © 1997-2001