dcopref.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef _DCOPREF_H
00024
#define _DCOPREF_H
00025
00026
#include <qcstring.h>
00027
#include <dcoptypes.h>
00028
#include <kdatastream.h>
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),
true ) ) {
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,
false ) ) {
00072
QDataStream reply(
data, IO_ReadOnly );
00073 reply >> t;
00074
return true;
00075 }
00076
return false;
00077 }
00086 template <
class T>
bool get( T& t ) {
00087
if ( typeCheck( dcopTypeName(t),
false ) ) {
00088
QDataStream reply(
data, IO_ReadOnly );
00089 reply >> t;
00090
return true;
00091 }
00092
return false;
00093 }
00094
00099 inline bool isValid()
const {
return !
type.
isNull(); }
00100
00102 QByteArray data;
00104 QCString type;
00105
private:
00106
bool typeCheck(
const char* t );
00107
bool typeCheck(
const char* t,
bool warn );
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
00278 class DCOPRef
00279 {
00280
public:
00285
DCOPRef();
00286
00290
DCOPRef(
const DCOPRef& ref );
00298
DCOPRef(
const QCString&
app,
const QCString&
obj =
"" );
00299
00305
DCOPRef(
DCOPObject *
object );
00306
00316
DCOPRef(
const QCString& app,
const QCString& obj,
const QCString&
type );
00317
00323
bool isNull()
const;
00324
00329
QCString app()
const;
00330
00336
QCString obj()
const;
00337
00341
QCString object()
const;
00342
00347
QCString type()
const;
00348
00349
00353
DCOPRef&
operator=(
const DCOPRef& );
00354
00361
void setRef(
const QCString& app,
const QCString& obj =
"" );
00362
00369
void setRef(
const QCString& app,
const QCString& obj,
const QCString& type );
00370
00371
00376
void clear();
00377
00378
00385
DCOPClient*
dcopClient()
const;
00386
00393
void setDCOPClient(
DCOPClient *client );
00394
00403 enum EventLoopFlag { NoEventLoop, UseEventLoop };
00417 DCOPReply call(
const QCString& fun ) {
00418
QByteArray data;
00419
return callInternal( fun,
"()", data );
00420 }
00421
00435 DCOPReply callExt(
const QCString& fun, EventLoopFlag useEventLoop=NoEventLoop,
00436
int timeout=-1 ) {
00437
QByteArray data;
00438
return callInternal( fun,
"()", data, useEventLoop, timeout );
00439 }
00440
00456
template <
class T1>
00457 DCOPReply call(
const QCString& fun,
const T1& t1 ) {
00458
QCString args;
00459 args.
sprintf(
"(%s)",
00460 dcopTypeName(t1) );
00461
QByteArray data;
00462
QDataStream ds( data, IO_WriteOnly );
00463 ds << t1;
00464
return callInternal( fun, args, data );
00465 }
00466
00482
template <
class T1>
00483 DCOPReply callExt(
const QCString& fun,
00484 EventLoopFlag useEventLoop,
int timeout,
00485
const T1& t1) {
00486
QCString args;
00487 args.
sprintf(
"(%s)",
00488 dcopTypeName(t1) );
00489
QByteArray data;
00490
QDataStream ds( data, IO_WriteOnly );
00491 ds << t1;
00492
return callInternal( fun, args, data, useEventLoop, timeout );
00493 }
00494
00512
template <
class T1,
class T2>
00513 DCOPReply call(
const QCString& fun,
00514
const T1& t1,
00515
const T2& t2 ) {
00516
QCString args;
00517 args.
sprintf(
"(%s,%s)",
00518 dcopTypeName(t1),
00519 dcopTypeName(t2) );
00520
QByteArray data;
00521
QDataStream ds( data, IO_WriteOnly );
00522 ds << t1 << t2;
00523
return callInternal( fun, args, data );
00524 }
00525
00543
template <
class T1,
class T2>
00544 DCOPReply callExt(
const QCString& fun,
00545 EventLoopFlag useEventLoop,
int timeout,
00546
const T1& t1,
00547
const T2& t2) {
00548
QCString args;
00549 args.
sprintf(
"(%s,%s)",
00550 dcopTypeName(t1),
00551 dcopTypeName(t2) );
00552
QByteArray data;
00553
QDataStream ds( data, IO_WriteOnly );
00554 ds << t1 << t2;
00555
return callInternal( fun, args, data, useEventLoop, timeout );
00556 }
00557
00577
template <
class T1,
class T2,
class T3>
00578 DCOPReply call(
const QCString& fun,
00579
const T1& t1,
00580
const T2& t2,
00581
const T3& t3 ) {
00582
QCString args;
00583 args.
sprintf(
"(%s,%s,%s)",
00584 dcopTypeName(t1),
00585 dcopTypeName(t2),
00586 dcopTypeName(t3) );
00587
QByteArray data;
00588
QDataStream ds( data, IO_WriteOnly );
00589 ds << t1 << t2 << t3;
00590
return callInternal( fun, args, data );
00591 }
00592
00612
template <
class T1,
class T2,
class T3>
00613 DCOPReply callExt(
const QCString& fun,
00614 EventLoopFlag useEventLoop,
int timeout,
00615
const T1& t1,
00616
const T2& t2,
00617
const T3& t3) {
00618
QCString args;
00619 args.
sprintf(
"(%s,%s,%s)",
00620 dcopTypeName(t1),
00621 dcopTypeName(t2),
00622 dcopTypeName(t3) );
00623
QByteArray data;
00624
QDataStream ds( data, IO_WriteOnly );
00625 ds << t1 << t2 << t3;
00626
return callInternal( fun, args, data, useEventLoop, timeout );
00627 }
00628
00650
template <
class T1,
class T2,
class T3,
class T4>
00651 DCOPReply call(
const QCString& fun,
00652
const T1& t1,
00653
const T2& t2,
00654
const T3& t3,
00655
const T4& t4 ) {
00656
QCString args;
00657 args.
sprintf(
"(%s,%s,%s,%s)",
00658 dcopTypeName(t1),
00659 dcopTypeName(t2),
00660 dcopTypeName(t3),
00661 dcopTypeName(t4) );
00662
QByteArray data;
00663
QDataStream ds( data, IO_WriteOnly );
00664 ds << t1 << t2 << t3 << t4;
00665
return callInternal( fun, args, data );
00666 }
00667
00689
template <
class T1,
class T2,
class T3,
class T4>
00690 DCOPReply callExt(
const QCString& fun,
00691 EventLoopFlag useEventLoop,
int timeout,
00692
const T1& t1,
00693
const T2& t2,
00694
const T3& t3,
00695
const T4& t4) {
00696
QCString args;
00697 args.
sprintf(
"(%s,%s,%s,%s)",
00698 dcopTypeName(t1),
00699 dcopTypeName(t2),
00700 dcopTypeName(t3),
00701 dcopTypeName(t4) );
00702
QByteArray data;
00703
QDataStream ds( data, IO_WriteOnly );
00704 ds << t1 << t2 << t3 << t4;
00705
return callInternal( fun, args, data, useEventLoop, timeout );
00706 }
00707
00731
template <
class T1,
class T2,
class T3,
class T4,
class T5>
00732 DCOPReply call(
const QCString& fun,
00733
const T1& t1,
00734
const T2& t2,
00735
const T3& t3,
00736
const T4& t4,
00737
const T5& t5 ) {
00738
QCString args;
00739 args.
sprintf(
"(%s,%s,%s,%s,%s)",
00740 dcopTypeName(t1),
00741 dcopTypeName(t2),
00742 dcopTypeName(t3),
00743 dcopTypeName(t4),
00744 dcopTypeName(t5) );
00745
QByteArray data;
00746
QDataStream ds( data, IO_WriteOnly );
00747 ds << t1 << t2 << t3 << t4 << t5;
00748
return callInternal( fun, args, data );
00749 }
00750
00774
template <
class T1,
class T2,
class T3,
class T4,
class T5>
00775 DCOPReply callExt(
const QCString& fun,
00776 EventLoopFlag useEventLoop,
int timeout,
00777
const T1& t1,
00778
const T2& t2,
00779
const T3& t3,
00780
const T4& t4,
00781
const T5& t5 ) {
00782
QCString args;
00783 args.
sprintf(
"(%s,%s,%s,%s,%s)",
00784 dcopTypeName(t1),
00785 dcopTypeName(t2),
00786 dcopTypeName(t3),
00787 dcopTypeName(t4),
00788 dcopTypeName(t5) );
00789
QByteArray data;
00790
QDataStream ds( data, IO_WriteOnly );
00791 ds << t1 << t2 << t3 << t4 << t5;
00792
return callInternal( fun, args, data, useEventLoop, timeout );
00793 }
00794
00820
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
00821 DCOPReply call(
const QCString& fun,
00822
const T1& t1,
00823
const T2& t2,
00824
const T3& t3,
00825
const T4& t4,
00826
const T5& t5,
00827
const T6& t6 ) {
00828
QCString args;
00829 args.
sprintf(
"(%s,%s,%s,%s,%s,%s)",
00830 dcopTypeName(t1),
00831 dcopTypeName(t2),
00832 dcopTypeName(t3),
00833 dcopTypeName(t4),
00834 dcopTypeName(t5),
00835 dcopTypeName(t6) );
00836
QByteArray data;
00837
QDataStream ds( data, IO_WriteOnly );
00838 ds << t1 << t2 << t3 << t4 << t5 << t6;
00839
return callInternal( fun, args, data );
00840 }
00841
00867
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
00868 DCOPReply callExt(
const QCString& fun,
00869 EventLoopFlag useEventLoop,
int timeout,
00870
const T1& t1,
00871
const T2& t2,
00872
const T3& t3,
00873
const T4& t4,
00874
const T5& t5,
00875
const T6& t6) {
00876
QCString args;
00877 args.
sprintf(
"(%s,%s,%s,%s,%s,%s)",
00878 dcopTypeName(t1),
00879 dcopTypeName(t2),
00880 dcopTypeName(t3),
00881 dcopTypeName(t4),
00882 dcopTypeName(t5),
00883 dcopTypeName(t6) );
00884
QByteArray data;
00885
QDataStream ds( data, IO_WriteOnly );
00886 ds << t1 << t2 << t3 << t4 << t5 << t6;
00887
return callInternal( fun, args, data, useEventLoop, timeout );
00888 }
00916
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
00917 DCOPReply call(
const QCString& fun,
00918
const T1& t1,
00919
const T2& t2,
00920
const T3& t3,
00921
const T4& t4,
00922
const T5& t5,
00923
const T6& t6,
00924
const T7& t7 ) {
00925
QCString args;
00926 args.
sprintf(
"(%s,%s,%s,%s,%s,%s,%s)",
00927 dcopTypeName(t1),
00928 dcopTypeName(t2),
00929 dcopTypeName(t3),
00930 dcopTypeName(t4),
00931 dcopTypeName(t5),
00932 dcopTypeName(t6),
00933 dcopTypeName(t7) );
00934
QByteArray data;
00935
QDataStream ds( data, IO_WriteOnly );
00936 ds << t1 << t2 << t3 << t4 << t5 << t6 << t7;
00937
return callInternal( fun, args, data );
00938 }
00939
00967
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
00968 DCOPReply callExt(
const QCString& fun,
00969 EventLoopFlag useEventLoop,
int timeout,
00970
const T1& t1,
00971
const T2& t2,
00972
const T3& t3,
00973
const T4& t4,
00974
const T5& t5,
00975
const T6& t6,
00976
const T7& t7) {
00977
QCString args;
00978 args.
sprintf(
"(%s,%s,%s,%s,%s,%s,%s)",
00979 dcopTypeName(t1),
00980 dcopTypeName(t2),
00981 dcopTypeName(t3),
00982 dcopTypeName(t4),
00983 dcopTypeName(t5),
00984 dcopTypeName(t6),
00985 dcopTypeName(t7) );
00986
QByteArray data;
00987
QDataStream ds( data, IO_WriteOnly );
00988 ds << t1 << t2 << t3 << t4 << t5 << t6 << t7;
00989
return callInternal( fun, args, data, useEventLoop, timeout );
00990 }
00991
01021
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
01022 DCOPReply call(
const QCString& fun,
01023
const T1& t1,
01024
const T2& t2,
01025
const T3& t3,
01026
const T4& t4,
01027
const T5& t5,
01028
const T6& t6,
01029
const T7& t7,
01030
const T8& t8 ) {
01031
QCString args;
01032 args.
sprintf(
"(%s,%s,%s,%s,%s,%s,%s,%s)",
01033 dcopTypeName(t1),
01034 dcopTypeName(t2),
01035 dcopTypeName(t3),
01036 dcopTypeName(t4),
01037 dcopTypeName(t5),
01038 dcopTypeName(t6),
01039 dcopTypeName(t7),
01040 dcopTypeName(t8) );
01041
QByteArray data;
01042
QDataStream ds( data, IO_WriteOnly );
01043 ds << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
01044
return callInternal( fun, args, data );
01045 }
01046
01076
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
01077 DCOPReply callExt(
const QCString& fun,
01078 EventLoopFlag useEventLoop,
int timeout,
01079
const T1& t1,
01080
const T2& t2,
01081
const T3& t3,
01082
const T4& t4,
01083
const T5& t5,
01084
const T6& t6,
01085
const T7& t7,
01086
const T8& t8) {
01087
QCString args;
01088 args.
sprintf(
"(%s,%s,%s,%s,%s,%s,%s,%s)",
01089 dcopTypeName(t1),
01090 dcopTypeName(t2),
01091 dcopTypeName(t3),
01092 dcopTypeName(t4),
01093 dcopTypeName(t5),
01094 dcopTypeName(t6),
01095 dcopTypeName(t7),
01096 dcopTypeName(t8) );
01097
QByteArray data;
01098
QDataStream ds( data, IO_WriteOnly );
01099 ds << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
01100
return callInternal( fun, args, data, useEventLoop, timeout );
01101 }
01102
01116 bool send(
const QCString& fun ) {
01117
QByteArray data;
01118
return sendInternal( fun,
"()", data );
01119 }
01120
01137
template <
class T1>
01138 bool send(
const QCString& fun,
const T1& t1 ) {
01139
QCString args;
01140 args.
sprintf(
"(%s)",
01141 dcopTypeName(t1) );
01142
QByteArray data;
01143
QDataStream ds( data, IO_WriteOnly );
01144 ds << t1;
01145
return sendInternal( fun, args, data );
01146 }
01165
template <
class T1,
class T2>
01166 bool send(
const QCString& fun,
01167
const T1& t1,
01168
const T2& t2 ) {
01169
QCString args;
01170 args.
sprintf(
"(%s,%s)",
01171 dcopTypeName(t1),
01172 dcopTypeName(t2) );
01173
QByteArray data;
01174
QDataStream ds( data, IO_WriteOnly );
01175 ds << t1 << t2;
01176
return sendInternal( fun, args, data );
01177 }
01198
template <
class T1,
class T2,
class T3>
01199 bool send(
const QCString& fun,
01200
const T1& t1,
01201
const T2& t2,
01202
const T3& t3 ) {
01203
QCString args;
01204 args.
sprintf(
"(%s,%s,%s)",
01205 dcopTypeName(t1),
01206 dcopTypeName(t2),
01207 dcopTypeName(t3) );
01208
QByteArray data;
01209
QDataStream ds( data, IO_WriteOnly );
01210 ds << t1 << t2 << t3;
01211
return sendInternal( fun, args, data );
01212 }
01235
template <
class T1,
class T2,
class T3,
class T4>
01236 bool send(
const QCString& fun,
01237
const T1& t1,
01238
const T2& t2,
01239
const T3& t3,
01240
const T4& t4 ) {
01241
QCString args;
01242 args.
sprintf(
"(%s,%s,%s,%s)",
01243 dcopTypeName(t1),
01244 dcopTypeName(t2),
01245 dcopTypeName(t3),
01246 dcopTypeName(t4) );
01247
QByteArray data;
01248
QDataStream ds( data, IO_WriteOnly );
01249 ds << t1 << t2 << t3 << t4;
01250
return sendInternal( fun, args, data );
01251 }
01276
template <
class T1,
class T2,
class T3,
class T4,
class T5>
01277 bool send(
const QCString& fun,
01278
const T1& t1,
01279
const T2& t2,
01280
const T3& t3,
01281
const T4& t4,
01282
const T5& t5 ) {
01283
QCString args;
01284 args.
sprintf(
"(%s,%s,%s,%s,%s)",
01285 dcopTypeName(t1),
01286 dcopTypeName(t2),
01287 dcopTypeName(t3),
01288 dcopTypeName(t4),
01289 dcopTypeName(t5) );
01290
QByteArray data;
01291
QDataStream ds( data, IO_WriteOnly );
01292 ds << t1 << t2 << t3 << t4 << t5;
01293
return sendInternal( fun, args, data );
01294 }
01321
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
01322 bool send(
const QCString& fun,
01323
const T1& t1,
01324
const T2& t2,
01325
const T3& t3,
01326
const T4& t4,
01327
const T5& t5,
01328
const T6& t6 ) {
01329
QCString args;
01330 args.
sprintf(
"(%s,%s,%s,%s,%s,%s)",
01331 dcopTypeName(t1),
01332 dcopTypeName(t2),
01333 dcopTypeName(t3),
01334 dcopTypeName(t4),
01335 dcopTypeName(t5),
01336 dcopTypeName(t6) );
01337
QByteArray data;
01338
QDataStream ds( data, IO_WriteOnly );
01339 ds << t1 << t2 << t3 << t4 << t5 << t6;
01340
return sendInternal( fun, args, data );
01341 }
01370
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
01371 bool send(
const QCString& fun,
01372
const T1& t1,
01373
const T2& t2,
01374
const T3& t3,
01375
const T4& t4,
01376
const T5& t5,
01377
const T6& t6,
01378
const T7& t7 ) {
01379
QCString args;
01380 args.
sprintf(
"(%s,%s,%s,%s,%s,%s,%s)",
01381 dcopTypeName(t1),
01382 dcopTypeName(t2),
01383 dcopTypeName(t3),
01384 dcopTypeName(t4),
01385 dcopTypeName(t5),
01386 dcopTypeName(t6),
01387 dcopTypeName(t7) );
01388
QByteArray data;
01389
QDataStream ds( data, IO_WriteOnly );
01390 ds << t1 << t2 << t3 << t4 << t5 << t6 << t7;
01391
return sendInternal( fun, args, data );
01392 }
01423
template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
01424 bool send(
const QCString& fun,
01425
const T1& t1,
01426
const T2& t2,
01427
const T3& t3,
01428
const T4& t4,
01429
const T5& t5,
01430
const T6& t6,
01431
const T7& t7,
01432
const T8& t8 ) {
01433
QCString args;
01434 args.
sprintf(
"(%s,%s,%s,%s,%s,%s,%s,%s)",
01435 dcopTypeName(t1),
01436 dcopTypeName(t2),
01437 dcopTypeName(t3),
01438 dcopTypeName(t4),
01439 dcopTypeName(t5),
01440 dcopTypeName(t6),
01441 dcopTypeName(t7),
01442 dcopTypeName(t8) );
01443
QByteArray data;
01444
QDataStream ds( data, IO_WriteOnly );
01445 ds << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
01446
return sendInternal( fun, args, data );
01447 }
01448
01449
01450
01451
private:
01452
DCOPReply callInternal(
const QCString& fun,
const QCString& args,
const QByteArray& data,
01453 EventLoopFlag useEventLoop,
int timeout );
01454
DCOPReply callInternal(
const QCString& fun,
const QCString& args,
const QByteArray& data );
01455
bool sendInternal(
const QCString& fun,
const QCString& args,
const QByteArray& data );
01456
01457
QCString m_app;
01458
QCString m_obj;
01459
QCString m_type;
01460
01461
class DCOPRefPrivate;
01462 DCOPRefPrivate *d;
01463 };
01464
01468
QDataStream& operator<<(
QDataStream&,
const DCOPRef& ref );
01472
QDataStream& operator>>(
QDataStream&,
DCOPRef& ref );
01473
01474
#endif
This file is part of the documentation for dcop Library Version 3.2.3.