Lifted method access modes in KURLDrag and KMultipleDrag
David Faure
faure at kde.org
Tue Aug 16 19:55:40 BST 2005
On Thursday 11 August 2005 01:44, Rafał Rzepecki wrote:
> On Wednesday, 10 of August 2005 03:03, David Faure wrote:
> > On Saturday 06 August 2005 18:22, Rafał Rzepecki wrote:
> > > Currently I have worked around the problem by just casting the KURLDrag
> > > onto an ancestor and then calling the method (which is public there). But
> > > I feel this should be corrected. KMultipleDrag also has this problem.
> >
> > Yep, I'm guilty for both ;)
> >
> > (OTOH I can't think of a reason why someone would want to call
> > format or encodedData directly, those are being called by the receiver
> > side, which doesn't know which QDragObject subclass is being used...)
>
> Imagine implementing a custom QDragObject, which should provide URIs beside
> whatever other formats.
The best way to do that is to use KMultipleDrag.
(btw in Qt4 with QMimeData the problem disappears completely, so we're only talking
about Qt3 here)
> One way of doing this is subclassing KURLDrag, but
> this is sometimes not desirable. Another way would be to have a private
> KURLDrag object member, and delegate them calls whenever appropriate. For
> example:
>
> char *MyDrag::format( int i ) const
> {
> if ( i == 0 ) return "application/x-foo";
> if ( iHaveAnotherFormat() && i == 1 ) return "application/x-bar";
> i -= 1 + ( iHaveAnotherFormat() ? 1 : 0 );
> return mUrlDrag->format( i );
> }
>
> Because KURLDrag::format() was protected, you had to have mUrlDrag as a
> QDragObject*/QStoredDrag* or QUriDrag*.
I see. But I don't like this solution, since it's exactly the problem that
KMultipleDrag solves for you.
--
David Faure, faure at kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).
More information about the kde-core-devel
mailing list