Sorry I'm being rather haphazard about this. I've been making some changes for 2.1 as I find I need them. The following patches build on earlier patches from June 7. --pete 2000-07-19 Pete Ware <[EMAIL PROTECTED]> * config.h.in: I have no idea why this changed. Phil, you'll probably want to remove this from the patch * configure: I don't have autoconf, so I made these changes by hand * acinclude.m4: * aclocal.m4: Add qt version 2.1.1 when checking. You'll need to rerun autoconf. * sip/filedialog.sip: Changes for 2.1.? Added: QFilePreview. getOpenFileName(), getSaveFileName(), getExistingDirectory(), getOpenFileNames() all added a QString as the last argument to act as a prompt for the dialog boxes. Added a bunch of new member functions dealing with preview mode and URLs. All wrapped in Version(QT_2X). Added addToolButton(), addLeftWidget(), addRightWidget(). How to deal with addFilter (const Qstring *)? * sip/qsplitter.sip: Added FollowSizeHint to ResizeMode * sip/qnetworkprotocol.sip: * sip/qprogressdialog.sip: * sip/qurl.sip: * sip/qurlinfo.sip: * sip/qurloperator.sip: All of these are new with 2.X (2.0?, 2.1?). They are %If'd using 2.1. I didn't know how to do a few things so I marked those with FIX: * sip/qt.sip: Added new sip files: qnetworkprotocol.sip, qurl.sip qurloperator.sip qurlinfo.sip * qt/Makefile.in: Added new object files for the new classes. Phil, why doesn't sip generate this automatically as it does for Makefile.am? sipqtQUrlPrivate.lo sipqtQUrlOperatorPrivate.lo sipqtQUrlInfo.lo sipqtQUrlOperator.lo sipqtQUrl.lo sipqtQFilePreview.lo sipqtQNetworkOperation.lo sipqtQNetworkOperationPrivate.lo sipqtQNetworkProtocol.lo sipqtQNetworkProtocolFactoryBase.lo * qt/qurl.sip: qt/qurlinfo.sip: qt/qurloperator.sip: qt/qnetworkprotocol.sip: qt/qurlinfo.sip Index: PyQt/acinclude.m4 diff -c PyQt/acinclude.m4:1.1.1.1 PyQt/acinclude.m4:1.2 *** PyQt/acinclude.m4:1.1.1.1 Tue Jul 18 10:23:43 2000 --- PyQt/acinclude.m4 Wed Jul 19 09:10:52 2000 *************** *** 274,280 **** [ dnl These are in the order they are preferred. ! sip_qt_versions="2.1.0 2.0.2 2.0.1 2.00 1.44" sip_qt_base_dirs="/opt/qt /usr/lib/qt /usr/local/qt /usr/qt" sip_qt_dirs="/usr/X11R6 /usr /usr/local" --- 274,280 ---- [ dnl These are in the order they are preferred. ! sip_qt_versions="2.1.1 2.1.0 2.0.2 2.0.1 2.00 1.44" sip_qt_base_dirs="/opt/qt /usr/lib/qt /usr/local/qt /usr/qt" sip_qt_dirs="/usr/X11R6 /usr /usr/local" Index: PyQt/aclocal.m4 diff -c PyQt/aclocal.m4:1.1.1.1 PyQt/aclocal.m4:1.2 *** PyQt/aclocal.m4:1.1.1.1 Tue Jul 18 10:23:43 2000 --- PyQt/aclocal.m4 Wed Jul 19 09:10:52 2000 *************** *** 286,292 **** [ dnl These are in the order they are preferred. ! sip_qt_versions="2.1.0 2.0.2 2.0.1 2.00 1.44" sip_qt_base_dirs="/opt/qt /usr/lib/qt /usr/local/qt /usr/qt" sip_qt_dirs="/usr/X11R6 /usr /usr/local" --- 286,292 ---- [ dnl These are in the order they are preferred. ! sip_qt_versions="2.1.1 2.1.0 2.0.2 2.0.1 2.00 1.44" sip_qt_base_dirs="/opt/qt /usr/lib/qt /usr/local/qt /usr/qt" sip_qt_dirs="/usr/X11R6 /usr /usr/local" Index: PyQt/config.h.in diff -c PyQt/config.h.in:1.1.1.1 PyQt/config.h.in:1.2 *** PyQt/config.h.in:1.1.1.1 Tue Jul 18 10:23:43 2000 --- PyQt/config.h.in Wed Jul 19 09:10:52 2000 *************** *** 1,11 **** /* config.h.in. Generated automatically from configure.in by autoheader. */ - - /* Define if the X Window System is missing or not being used. */ - #undef X_DISPLAY_MISSING - - /* Name of package */ - #undef PACKAGE - - /* Version number of package */ - #undef VERSION - --- 1 ---- Index: PyQt/configure diff -c PyQt/configure:1.1.1.1 PyQt/configure:1.2 *** PyQt/configure:1.1.1.1 Tue Jul 18 10:23:43 2000 --- PyQt/configure Wed Jul 19 09:10:52 2000 *************** *** 2377,2383 **** ! sip_qt_versions="2.1.0 2.0.2 2.0.1 2.00 1.44" sip_qt_base_dirs="/opt/qt /usr/lib/qt /usr/local/qt /usr/qt" sip_qt_dirs="/usr/X11R6 /usr /usr/local" --- 2377,2383 ---- ! sip_qt_versions="2.1.1 2.1.0 2.0.2 2.0.1 2.00 1.44" sip_qt_base_dirs="/opt/qt /usr/lib/qt /usr/local/qt /usr/qt" sip_qt_dirs="/usr/X11R6 /usr /usr/local" Index: PyQt/qt/Makefile.in diff -c PyQt/qt/Makefile.in:1.1.1.1 PyQt/qt/Makefile.in:1.2 *** PyQt/qt/Makefile.in:1.1.1.1 Tue Jul 18 10:23:44 2000 --- PyQt/qt/Makefile.in Tue Jul 18 18:01:43 2000 *************** *** 172,178 **** sipqtQButtonGroup.lo sipqtQWidget.lo sipqtQButton.lo sipqtQBrush.lo \ sipqtQApplication.lo sipqtQObject.lo sipqtQAccel.lo sipqtQSizePolicy.lo \ sipqtQSize.lo sipqtQBitmap.lo sipqtQPixmap.lo sipqtQPaintDevice.lo \ ! sipqtQPen.lo sipqtQt.lo PROGRAMS = $(noinst_PROGRAMS) sip_helper_OBJECTS = sip_helper.o --- 172,183 ---- sipqtQButtonGroup.lo sipqtQWidget.lo sipqtQButton.lo sipqtQBrush.lo \ sipqtQApplication.lo sipqtQObject.lo sipqtQAccel.lo sipqtQSizePolicy.lo \ sipqtQSize.lo sipqtQBitmap.lo sipqtQPixmap.lo sipqtQPaintDevice.lo \ ! sipqtQPen.lo sipqtQt.lo \ ! sipqtQUrlPrivate.lo sipqtQUrlOperatorPrivate.lo sipqtQUrlInfo.lo \ ! sipqtQUrlOperator.lo sipqtQUrl.lo \ ! sipqtQFilePreview.lo \ ! sipqtQNetworkOperation.lo sipqtQNetworkOperationPrivate.lo \ ! sipqtQNetworkProtocol.lo sipqtQNetworkProtocolFactoryBase.lo PROGRAMS = $(noinst_PROGRAMS) sip_helper_OBJECTS = sip_helper.o Index: PyQt/sip/qfiledialog.sip diff -c PyQt/sip/qfiledialog.sip:1.1.1.1 PyQt/sip/qfiledialog.sip:1.2 *** PyQt/sip/qfiledialog.sip:1.1.1.1 Tue Jul 18 10:23:59 2000 --- PyQt/sip/qfiledialog.sip Wed Jul 19 09:10:53 2000 *************** *** 30,35 **** --- 30,46 ---- virtual const QPixmap *pixmap(const QFileInfo &); }; + %If Version(QT_21x) + class QFilePreview + { + %HeaderCode + #include <qfiledialog.h> + %End + public: + QFilePreview(); + virtual void previewUrl( const QUrl &) = 0; + }; + %End class QFileDialog : QDialog { *************** *** 82,96 **** %If Version(QT_2x) static QString getOpenFileName(const QString & = QString::null, const QString & = QString::null, ! QWidget * = 0,const char * = 0); static QString getSaveFileName(const QString & = QString::null, const QString & = QString::null, ! QWidget * = 0,const char * = 0); static QString getExistingDirectory(const QString & = QString::null, ! QWidget * = 0,const char * = 0); static QStringList getOpenFileNames(const QString & = QString::null, const QString & = QString::null, ! QWidget * = 0,const char * = 0); void setSelection(const QString &); QString dirPath() const; %End --- 93,111 ---- %If Version(QT_2x) static QString getOpenFileName(const QString & = QString::null, const QString & = QString::null, ! QWidget * = 0,const char * = 0, ! const QString & = QString::null); static QString getSaveFileName(const QString & = QString::null, const QString & = QString::null, ! QWidget * = 0,const char * = 0, ! const QString & = QString::null); static QString getExistingDirectory(const QString & = QString::null, ! QWidget * = 0,const char * = 0, ! const QString & = QString::null); static QStringList getOpenFileNames(const QString & = QString::null, const QString & = QString::null, ! QWidget * = 0,const char * = 0, ! const QString & = QString::null); void setSelection(const QString &); QString dirPath() const; %End *************** *** 102,107 **** --- 117,151 ---- void setFilters(const QStrList &); %End %If Version(QT_2x) + QString selectedFilter () const; + void selectAll (bool); + QStringList selectedFiles () const; + void setShowHiddenFiles (bool); + bool showHiddenFiles () const; + void resortDir (); + + enum ViewMode { + Detail, + List + }; + enum PreviewMode { + NoPreview, + Contents, + Info + }; + void setViewMode (ViewMode); + ViewMode viewMode () const; + void setPreviewMode (PreviewMode); + PreviewMode previewMode () const; + bool isInfoPreviewEnabled () const; + bool isContentsPreviewEnabled () const; + void setInfoPreviewEnabled (bool); + void setContentsPreviewEnabled (bool); + void setInfoPreview (QWidget *, QFilePreview *); + void setContentsPreview (QWidget *, QFilePreview *); + QUrl url () const; + + void setUrl (const QUrlOperator &); void setDir(const QString &); void setFilter(const QString &); void setFilters(const QStringList &); *************** *** 125,130 **** --- 169,180 ---- void keyPressEvent(QKeyEvent *); void addWidgets(QLabel *,QWidget *,QPushButton *); + %If Version(QT_2x) + void addToolButton (QButton *, bool = false); + void addLeftWidget (QWidget *); + void addRightWidget (QWidget *); + //FIX: void addFilter (const QString *); + %End private: QFileDialog(const QFileDialog &); }; Index: PyQt/sip/qnetworkprotocol.sip diff -c /dev/null PyQt/sip/qnetworkprotocol.sip:1.2 *** /dev/null Wed Jul 19 15:10:45 2000 --- PyQt/sip/qnetworkprotocol.sip Wed Jul 19 10:23:11 2000 *************** *** 0 **** --- 1,152 ---- + // This is the SIP interface definition for QNetworkProtocol + + + %ExportedDoc + <Sect2><Title>QNetworkProtocol</Title> + <Para> + <Literal>QNetworkProtocol</Literal>: The following are not implemented (I + don't know how to deal with pointers) + + void newChildren(); + void newChild(); + void createdDirectory( ); + </Para> + </Sect2> + + <Sect2><Title>QNetworkOperation</Title> + <Para> + <Literal>QNetworkOperation</Literal>: Fully implemented. + </Para> + </Sect2> + + %End + %If Version(QT_2x) + class QNetworkProtocolFactoryBase; + + class QNetworkProtocol : QObject + { + %HeaderCode + #include <qnetworkprotocol.h> + %End + + public: + enum State { + StWaiting = 0, + StInProgress, + StDone, + StFailed, + StStopped + }; + + enum Operation { + OpListChildren = 1, + OpMkdir = 2, + OpRemove = 4, + OpRename = 8, + OpGet = 32, + OpPut = 64 + }; + + enum ConnectionState { + ConHostFound, + ConConnected, + ConClosed + }; + + enum Error { + // no error + NoError = 0, + // general errors + ErrValid, + ErrUnknownProtocol, + ErrUnsupported, + ErrParse, + // errors on connect + ErrLoginIncorrect, + ErrHostNotFound, + // protocol errors + ErrListChlidren, + ErrMkdir, + ErrRemove, + ErrRename, + ErrGet, + ErrPut, + ErrFileNotExisting, + ErrPermissionDenied + }; + + QNetworkProtocol(); + + virtual void setUrl( QUrlOperator * ); + + virtual void setAutoDelete( bool , int = 10000 ); + bool autoDelete() const; + + static void registerNetworkProtocol( const QString &, + QNetworkProtocolFactoryBase * ); + static QNetworkProtocol *getNetworkProtocol( const QString & ); + static bool hasOnlyLocalFileSystem(); + + virtual int supportedOperations() const; + virtual void addOperation( QNetworkOperation * ); + + QUrlOperator *url() const; + QNetworkOperation *operationInProgress() const; + virtual void clearOperationQueue(); + virtual void stop(); + + signals: + void data( const QByteArray &, QNetworkOperation * ); + void connectionStateChanged( int , const QString & ); + void finished( QNetworkOperation * ); + void start( QNetworkOperation * ); + //FIX: void newChildren( const QValueList<QUrlInfo> &, QNetworkOperation * ); + //FIX: void newChild( const QUrlInfo &, QNetworkOperation * ); + //FIX: void createdDirectory( const QUrlInfo &, QNetworkOperation * ); + void removed( QNetworkOperation * ); + void itemChanged( QNetworkOperation * ); + void dataTransferProgress( int , int , QNetworkOperation * ); + + protected: + virtual void processOperation( QNetworkOperation * ); + virtual void operationListChildren( QNetworkOperation * ); + virtual void operationMkDir( QNetworkOperation * ); + virtual void operationRemove( QNetworkOperation * ); + virtual void operationRename( QNetworkOperation * ); + virtual void operationGet( QNetworkOperation * ); + virtual void operationPut( QNetworkOperation * ); + virtual bool checkConnection( QNetworkOperation * ); + + }; + + class QNetworkOperationPrivate; + class QNetworkOperation : QObject + { + %HeaderCode + #include <qnetworkprotocol.h> + %End + public: + QNetworkOperation( QNetworkProtocol::Operation , + const QString &, const QString &, + const QString & ); + QNetworkOperation( QNetworkProtocol::Operation , + const QByteArray &, const QByteArray &, + const QByteArray & ); + + void setState( QNetworkProtocol::State ); + void setProtocolDetail( const QString & ); + void setErrorCode( int ); + void setArg( int , const QString & ); + void setRawArg( int , const QByteArray & ); + + QNetworkProtocol::Operation operation() const; + QNetworkProtocol::State state() const; + QString arg( int ) const; + QByteArray rawArg( int ) const; + QString protocolDetail() const; + int errorCode() const; + + void free(); + + }; + %End Index: PyQt/sip/qprogressdialog.sip diff -c PyQt/sip/qprogressdialog.sip:1.1.1.1 PyQt/sip/qprogressdialog.sip:1.2 *** PyQt/sip/qprogressdialog.sip:1.1.1.1 Tue Jul 18 10:23:59 2000 --- PyQt/sip/qprogressdialog.sip Wed Jul 19 09:10:53 2000 *************** *** 58,63 **** --- 58,70 ---- void setLabelText(const QString &); void setCancelButtonText(const QString &); %End + %If Version(QT_21x) + QString labelText () const; + void setAutoReset (bool); + bool autoReset () const; + void setAutoClose (bool); + bool autoClose () const; + %End void setMinimumDuration(int); signals: Index: PyQt/sip/qsplitter.sip diff -c PyQt/sip/qsplitter.sip:1.1.1.1 PyQt/sip/qsplitter.sip:1.2 *** PyQt/sip/qsplitter.sip:1.1.1.1 Tue Jul 18 10:23:59 2000 --- PyQt/sip/qsplitter.sip Wed Jul 19 09:10:53 2000 *************** *** 53,59 **** enum ResizeMode { Stretch, ! KeepSize }; QSplitter(QWidget * /TransferThis/ = 0,const char * = 0); --- 53,60 ---- enum ResizeMode { Stretch, ! KeepSize, ! FollowSizeHint }; QSplitter(QWidget * /TransferThis/ = 0,const char * = 0); Index: PyQt/sip/qt.sip diff -c PyQt/sip/qt.sip:1.2 PyQt/sip/qt.sip:1.3 *** PyQt/sip/qt.sip:1.2 Tue Jul 18 17:18:58 2000 --- PyQt/sip/qt.sip Wed Jul 19 09:10:53 2000 *************** *** 354,359 **** --- 354,360 ---- %Include qmotifstyle.sip %Include qmovie.sip %Include qmultilinedit.sip + %Include qnetworkprotocol.sip %Include qobject.sip %Include qobjectlist.sip %Include qpaintdevicemetrics.sip *************** *** 403,408 **** --- 404,412 ---- %Include qtoolbutton.sip %Include qtooltip.sip %Include qtranslator.sip + %Include qurl.sip + %Include qurloperator.sip + %Include qurlinfo.sip %Include qvalidator.sip %Include qvbox.sip %Include qvbuttongroup.sip Index: PyQt/sip/qurl.sip diff -c /dev/null PyQt/sip/qurl.sip:1.2 *** /dev/null Wed Jul 19 15:10:45 2000 --- PyQt/sip/qurl.sip Wed Jul 19 10:23:11 2000 *************** *** 0 **** --- 1,93 ---- + // This is the SIP interface definition for QUrl + + + %ExportedDoc + <Sect2><Title>QUrl</Title> + <Para> + <Literal>QUrl</Literal>: The following are not implemented: + QUrl& operator=(); + QUrl& operator=(); + bool operator==() const; + bool operator==() const; + operator QString() const; + </Para> + </Sect2> + %End + + %If Version(QT_2x) + class QUrlPrivate; + + class QUrl + { + %HeaderCode + #include <qurl.h> + %End + public: + QUrl(); + QUrl( const QString& ); + QUrl( const QUrl& ); + QUrl( const QUrl& , const QString &, bool ); + + QString protocol() const; + virtual void setProtocol( const QString& ); + + QString user() const; + virtual void setUser( const QString& ); + bool hasUser() const; + + QString password() const; + virtual void setPassword( const QString& ); + bool hasPassword() const; + + QString host() const; + virtual void setHost( const QString& ); + bool hasHost() const; + + int port() const; + virtual void setPort( int ); + + QString path( bool = true ) const; + virtual void setPath( const QString& ); + bool hasPath() const; + + virtual void setEncodedPathAndQuery( const QString& ); + QString encodedPathAndQuery(); + + virtual void setQuery( const QString& ); + QString query() const; + + QString ref() const; + virtual void setRef( const QString& ); + bool hasRef() const; + + bool isValid() const; + bool isLocalFile() const; + + virtual void addPath( const QString& ); + virtual void setFileName( const QString& ); + + QString fileName() const; + QString dirPath() const; + + //FIX: QUrl& operator=( const QUrl& ); + //FIX: QUrl& operator=( const QString& ); + + //FIX: bool operator==( const QUrl& ) const; + //FIX: bool operator==( const QString& ) const; + + static void decode( QString& ); + static void encode( QString& ); + + //FIX: operator QString() const; + virtual QString toString( bool = false, bool = false ) const; + + virtual bool cdUp(); + + static bool isRelativeUrl( const QString & ); + + protected: + virtual void reset(); + virtual bool parse( const QString& ); + + }; + %End Index: PyQt/sip/qurlinfo.sip diff -c /dev/null PyQt/sip/qurlinfo.sip:1.2 *** /dev/null Wed Jul 19 15:10:45 2000 --- PyQt/sip/qurlinfo.sip Wed Jul 19 10:23:11 2000 *************** *** 0 **** --- 1,69 ---- + // This is the SIP interface definition for QUrlInfo + + + %ExportedDoc + <Sect2><Title>QUrlInfo</Title> + <Para> + <Literal>QUrlInfo</Literal>: The following are not implemented: + QUrlInfo &operator=( ); + bool operator==() const; + </Para> + </Sect2> + %End + + %If Version(QT_2x) + class QUrlInfo + { + %HeaderCode + #include <qurlinfo.h> + %End + public: + QUrlInfo(); + QUrlInfo( const QUrlOperator &, const QString & ); + QUrlInfo( const QUrlInfo & ); + QUrlInfo( const QString &, int , const QString &, + const QString &, uint , const QDateTime &, + const QDateTime &, bool , bool , bool , + bool , bool , bool ); + QUrlInfo( const QUrl &, int, const QString &, + const QString &, uint , const QDateTime &, + const QDateTime &, bool , bool , bool , + bool , bool , bool ); + //FIX: QUrlInfo &operator=( const QUrlInfo & ); + + virtual void setName( const QString &); + virtual void setDir( bool ); + virtual void setFile( bool ); + virtual void setSymLink( bool ); + virtual void setOwner( const QString & ); + virtual void setGroup( const QString & ); + virtual void setSize( uint ); + virtual void setWritable( bool ); + virtual void setReadable( bool ); + virtual void setPermissions( int ); + virtual void setLastModified( const QDateTime & ); + + QString name() const; + int permissions() const; + QString owner() const; + QString group() const; + uint size() const; + QDateTime lastModified() const; + QDateTime lastRead() const; + bool isDir() const; + bool isFile() const; + bool isSymLink() const; + bool isWritable() const; + bool isReadable() const; + bool isExecutable() const; + + static bool greaterThan( const QUrlInfo &, const QUrlInfo &, + int ); + static bool lessThan( const QUrlInfo &, const QUrlInfo &, + int ); + static bool equal( const QUrlInfo &, const QUrlInfo &, + int ); + + //FIX: bool operator==( const QUrlInfo &i ) const; + }; + %End Index: PyQt/sip/qurloperator.sip diff -c /dev/null PyQt/sip/qurloperator.sip:1.2 *** /dev/null Wed Jul 19 15:10:45 2000 --- PyQt/sip/qurloperator.sip Wed Jul 19 10:23:11 2000 *************** *** 0 **** --- 1,75 ---- + // This is the SIP interface definition for QUrlOperator + + + %ExportedDoc + <Sect2><Title>QUrlOperator</Title> + <Para> + <Literal>QUrlOperator</Literal>: The following are not implemented: + virtual QList<QNetworkOperation> copy( const QString &, const QString &, bool = +false ); + virtual bool isDir( bool * = 0 ); + Signals: + void createdDirectory( const QUrlInfo &, QNetworkOperation * ); + void newChildren( const QValueList<QUrlInfo> &, QNetworkOperation * ); + void startedNextCopy( const QList<QNetworkOperation> & ); + </Para> + </Sect2> + %End + + %If Version(QT_2x) + + class QUrlOperatorPrivate; + + class QUrlOperator : QObject, QUrl + { + %HeaderCode + #include <qurloperator.h> + %End + public: + QUrlOperator(); + QUrlOperator( const QString & ); + QUrlOperator( const QUrlOperator& ); + QUrlOperator( const QUrlOperator&, const QString& , bool = false ); + + virtual void setPath( const QString& ); + virtual bool cdUp(); + + virtual const QNetworkOperation *listChildren(); + virtual const QNetworkOperation *mkdir( const QString & ); + virtual const QNetworkOperation *remove( const QString & ); + virtual const QNetworkOperation *rename( const QString &, const QString & ); + virtual const QNetworkOperation *get( const QString & = QString::null ); + virtual const QNetworkOperation *put( const QByteArray &, const QString & = +QString::null ); + //FIX: virtual QList<QNetworkOperation> copy( const QString &, const QString &, +bool = false ); + virtual void copy( const QStringList &, const QString &, bool = false ); + //FIX: virtual bool isDir( bool * = 0 ); + + virtual void setNameFilter( const QString & ); + QString nameFilter() const; + + virtual QUrlInfo info( const QString & ) const; + + virtual void stop(); + + signals: + //FIX: void newChildren( const QValueList<QUrlInfo> &, QNetworkOperation * ); + void finished( QNetworkOperation * ); + void start( QNetworkOperation * ); + //FIX: void createdDirectory( const QUrlInfo &, QNetworkOperation * ); + void removed( QNetworkOperation * ); + void itemChanged( QNetworkOperation * ); + void data( const QByteArray &, QNetworkOperation * ); + void dataTransferProgress( int , int , QNetworkOperation * ); + //FIX: void startedNextCopy( const QList<QNetworkOperation> & ); + void connectionStateChanged( int , const QString & ); + + protected: + virtual void reset(); + virtual bool parse( const QString& ); + virtual bool checkValid(); + virtual void clearEntries(); + void getNetworkProtocol(); + void deleteNetworkProtocol(); + + }; + + %End _______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.gmd.de/mailman/listinfo/pykde