[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Re: Questions about KDCOPActionProxy...
From: Bernd Gehrmann <bernd () physik ! hu-berlin ! de>
Date: 2001-09-28 17:20:07
[Download RAW message or body]
On Fri, 28 Sep 2001, David Faure wrote:
> > With Qt3, you can actually extend the DCOP-QObject bridge such that
> > you can call any slot in any QObject via DCOP, without the programmer
> > having to add anything.
>
> Hrm, this is already the case, with the current DCOP-Qt bridge !
Hmm, which 'current' do you mean? The version in HEAD only supports
parameter-less slots AFAICS. qt_invoke can do much more.
> > The remaining problem then is only to give objects meaningful names.
>
> Yes, this is always the one thing the programmer has to think about.
> Not a problem with actions though.
What I meant is that you can easily extend DCOPClient such that you
can make any QObject DCOP-accessible with a meaningful name _without_
having to write dcopidl interfaces, add DCOPObjects or other heavy
stuff. Basically, one could add a QMap<QCString,QObject> qobjecMap
variable to DCOPClient and a method:
DCOPClient::publish(QCString name, QObject *obj)
{
qobjectMap[name] = obj;
connect(obj, SIGNAL(destroyed()), this, SLOT(qobjectDestroyed()));
// for removing objects from the map when they are destroyed
}
Now add some code to the (objId="DCOPClient", fun="objects()") section
in DCOPClient::receive() to add the qobjectMap keys to the list of
objects. Furthermore, add some code which checks whether objId is in
qobjectMap and run DCOPClient::receiveQtObject() for it then.
Now, when that is done, you can simply make a button in a dialog
accesible by writing
QPushButton *okbutton = new QPushButton("OK", this);
DCOPClient::publish("FooDialog/AcceptButton", okbutton);
I think this would lower the barrier to adding such things a lot :-)
Alternatively, one could get even rid of the overhead of
DCOPClient::publish() and instead modify the QObject bridge such that
it detects certain QObjects::name() prefixes as a marker for DCOP object
names. Then the above example would read
QPushButton *okbutton = new QPushButton("OK", this,
"DCOP:FooDialog/AcceptButton");
Now, when a DCOP call for the DCOP object "FooDialog/AcceptButton" comes
in, it would automatically be dispatched to the okbutton object.
Advantage: no overhead, and user interface elements can be made
DCOP accesible by simply marking them appropriately in the name column
in Qt designer.
Bernd.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic