00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include "kpanelappmenu.h"
00026
#include <qstringlist.h>
00027
#include <dcopclient.h>
00028
#include <kapplication.h>
00029
#include <kdebug.h>
00030
00031
static int panelmenu_get_seq_id()
00032 {
00033
static int panelmenu_seq_no = -2;
00034
return panelmenu_seq_no--;
00035 }
00036
00037
00038 KPanelAppMenu::KPanelAppMenu(
const QString &title,
QObject *parent,
00039
const char *name)
00040 :
QObject(parent, name),
DCOPObject()
00041 {
00042 init(QString::null, title);
00043 }
00044
00045 KPanelAppMenu::KPanelAppMenu(
const QPixmap &icon,
const QString &title,
00046
QObject *parent,
const char *name)
00047 :
QObject(parent, name),
DCOPObject()
00048 {
00049
00050 init(icon, title);
00051 }
00052
00053
00054 KPanelAppMenu::KPanelAppMenu(
QObject *parent,
const char *name)
00055 :
QObject(parent, name),
DCOPObject(name)
00056 {
00057 realObjId = name;
00058 }
00059
00060
00061
void KPanelAppMenu::init(
const QPixmap &icon,
const QString &title)
00062 {
00063
DCOPClient *client = kapp->dcopClient();
00064
if(!client->
isAttached())
00065 client->
attach();
00066
QByteArray sendData, replyData;
00067
QCString replyType;
00068 {
00069
QDataStream stream(sendData, IO_WriteOnly);
00070 stream << icon << title;
00071
if ( client->
call(
"kicker",
"kickerMenuManager",
"createMenu(QPixmap,QString)", sendData, replyType, replyData ) ) {
00072
if (replyType !=
"QCString")
00073
kdDebug() <<
"error! replyType for createMenu should be QCstring in KPanelAppMenu::init" <<
endl;
00074
else {
00075
QDataStream reply( replyData, IO_ReadOnly );
00076 reply >> realObjId;
00077 }
00078 }
00079 }
00080 {
00081
QDataStream stream(sendData, IO_WriteOnly);
00082 stream <<
QCString(
"activated(int)") << client->
appId() <<
objId();
00083 client->
send(
"kicker", realObjId,
"connectDCOPSignal(QCString,QCString,QCString)", sendData);
00084 }
00085 }
00086
00087 KPanelAppMenu::~KPanelAppMenu()
00088 {
00089
DCOPClient *client = kapp->dcopClient();
00090
QByteArray sendData;
00091
QDataStream stream(sendData, IO_WriteOnly);
00092 stream << realObjId;
00093 client->
send(
"kicker",
"kickerMenuManager",
"removeMenu", sendData );
00094 }
00095
00096 int KPanelAppMenu::insertItem(
const QPixmap &icon,
const QString &text,
int id )
00097 {
00098
if (
id < 0 )
00099
id = panelmenu_get_seq_id();
00100
DCOPClient *client = kapp->dcopClient();
00101
QByteArray sendData;
00102
QDataStream stream(sendData, IO_WriteOnly);
00103 stream << icon << text <<
id;
00104 client->
send(
"kicker", realObjId,
"insertItem(QPixmap,QString,int)", sendData );
00105
return id;
00106 }
00107
00108
00109 KPanelAppMenu *
KPanelAppMenu::insertMenu(
const QPixmap &icon,
const QString &text,
int id )
00110 {
00111
if (
id < 0 )
00112
id = panelmenu_get_seq_id();
00113
DCOPClient *client = kapp->dcopClient();
00114
QByteArray sendData, replyData;
00115
QCString replyType;
00116
QDataStream stream(sendData, IO_WriteOnly);
00117 stream << icon << text <<
id;
00118 client->
call(
"kicker", realObjId,
"insertMenu(QPixmap,QString,int)", sendData, replyType, replyData );
00119
if ( replyType !=
"QCString")
00120
return 0;
00121
QDataStream ret(replyData, IO_ReadOnly);
00122
QCString subid;
00123 ret >> subid;
00124
00125
QByteArray sendData2;
00126
QDataStream stream2(sendData2, IO_WriteOnly);
00127 stream2 <<
QCString(
"activated(int)") << client->
appId() << subid;
00128 client->
send(
"kicker", subid,
"connectDCOPSignal(QCString,QCString,QCString)", sendData2);
00129
00130
return new KPanelAppMenu(
this, subid);
00131 }
00132
00133
00134 int KPanelAppMenu::insertItem(
const QString &text,
int id )
00135 {
00136
if (
id < 0 )
00137
id = panelmenu_get_seq_id();
00138
DCOPClient *client = kapp->dcopClient();
00139
QByteArray sendData;
00140
QDataStream stream(sendData, IO_WriteOnly);
00141 stream << text <<
id;
00142 client->
send(
"kicker", realObjId,
"insertItem(QString,int)", sendData );
00143
return id;
00144 }
00145
00146
00147 void KPanelAppMenu::clear()
00148 {
00149
DCOPClient *client = kapp->dcopClient();
00150
QByteArray sendData;
00151 client->
send(
"kicker", realObjId,
"clear()", sendData);
00152 }
00153
00154
00155
bool KPanelAppMenu::process(
const QCString &fun,
const QByteArray &data,
00156
QCString &replyType,
QByteArray &)
00157 {
00158
if ( fun ==
"activated(int)" ) {
00159
QDataStream dataStream( data, IO_ReadOnly );
00160
int id;
00161 dataStream >>
id;
00162 emit
activated(
id );
00163 replyType =
"void";
00164
return true;
00165 }
00166
return false;
00167 }
00168
00169
00170
#include "kpanelappmenu.moc"
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182