kdecore Library API Documentation

kcompletion.h

00001 /* This file is part of the KDE libraries
00002     Copyright (C) 1999,2000 Carsten Pfeiffer <pfeiffer@kde.org>
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public License
00015     along with this library; see the file COPYING.LIB.  If not, write to
00016     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00017     Boston, MA 02111-1307, USA.
00018 */
00019 
00020 #ifndef KCOMPLETION_H
00021 #define KCOMPLETION_H
00022 
00023 #include <qmap.h>
00024 #include <qptrlist.h>
00025 #include <qobject.h>
00026 #include <qstring.h>
00027 #include <qstringlist.h>
00028 #include <qguardedptr.h>
00029 
00030 #include <kglobalsettings.h>
00031 #include <ksortablevaluelist.h>
00032 #include <kshortcut.h>
00033 
00034 class KCompTreeNode;
00035 class KCompletionPrivate;
00036 class KCompletionBasePrivate;
00037 class KCompletionMatchesWrapper;
00038 class KCompletionMatches;
00039 class QPopupMenu;
00040 
00130 class KCompletion : public QObject
00131 {
00132     Q_ENUMS( CompOrder )
00133     Q_PROPERTY( CompOrder order READ order WRITE setOrder )
00134     Q_PROPERTY( bool ignoreCase READ ignoreCase WRITE setIgnoreCase )
00135     Q_PROPERTY( QStringList items READ items WRITE setItems )
00136     Q_OBJECT
00137 
00138 public:
00143     enum CompOrder { Sorted,    
00144                      Insertion, 
00145                      Weighted   
00146     };
00147 
00151     KCompletion();
00152 
00153     // FIXME: copy constructor, assignment constructor...
00154 
00158     virtual ~KCompletion();
00159 
00182     virtual QString makeCompletion( const QString& string );
00183 
00192     QStringList substringCompletion( const QString& string ) const;
00193 
00203     QString previousMatch();
00204 
00214     QString nextMatch();
00215 
00222     virtual const QString& lastMatch() const { return myLastMatch; }
00223 
00242     QStringList items() const;
00243 
00253     virtual void setCompletionMode( KGlobalSettings::Completion mode );
00254 
00262     KGlobalSettings::Completion completionMode() const {
00263         return myCompletionMode;
00264     }
00265 
00286     virtual void setOrder( CompOrder order );
00287 
00293     CompOrder order() const { return myOrder; }
00294 
00302     virtual void setIgnoreCase( bool ignoreCase );
00303 
00310     bool ignoreCase() const { return myIgnoreCase; }
00311 
00318     QStringList allMatches();
00319 
00325     QStringList allMatches( const QString& string );
00326 
00339     KCompletionMatches allWeightedMatches();
00340 
00346     KCompletionMatches allWeightedMatches( const QString& string );
00347 
00361     virtual void setEnableSounds( bool enable ) { myBeep = enable; }
00362 
00370     bool isSoundsEnabled() const { return myBeep; }
00371 
00377     bool hasMultipleMatches() const { return myHasMultipleMatches; }
00378 
00379 #ifndef KDE_NO_COMPAT
00380 
00384     void enableSounds() { myBeep = true; }
00385 
00390     void disableSounds() { myBeep = false; }
00391 #endif
00392 
00393 public slots:
00400     void slotMakeCompletion( const QString& string ) {
00401         (void) makeCompletion( string );
00402     }
00403 
00409     void slotPreviousMatch() {
00410         (void) previousMatch();
00411     }
00412 
00418     void slotNextMatch() {
00419         (void) nextMatch();
00420     }
00421 
00427     void insertItems( const QStringList& items );
00428 
00444     virtual void setItems( const QStringList& list);
00445 
00452     void addItem( const QString& item);
00453 
00465     void addItem( const QString& item, uint weight );
00466 
00473     void removeItem( const QString& item);
00474 
00478     virtual void clear();
00479 
00480 
00481 signals:
00488     void match( const QString& item);
00489 
00496     void matches( const QStringList& matchlist);
00497 
00503     void multipleMatches();
00504 
00505 protected:
00519     virtual void postProcessMatch( QString *match ) const { Q_UNUSED(match) }
00520 
00531     virtual void postProcessMatches( QStringList * matches ) const { Q_UNUSED(matches)}
00532 
00543     virtual void postProcessMatches( KCompletionMatches * matches ) const {Q_UNUSED(matches)}
00544 
00545 private:
00546     void                addWeightedItem( const QString& );
00547     QString             findCompletion( const QString& string );
00548     void                findAllCompletions( const QString&,
00549                                             KCompletionMatchesWrapper *matches,
00550                                             bool& hasMultipleMatches ) const;
00551 
00552     void extractStringsFromNode( const KCompTreeNode *,
00553                                  const QString& beginning,
00554                                  KCompletionMatchesWrapper *matches,
00555                                  bool addWeight = false ) const;
00556     void extractStringsFromNodeCI( const KCompTreeNode *,
00557                                    const QString& beginning,
00558                                    const QString& restString,
00559                                    KCompletionMatchesWrapper *matches) const;
00560 
00561     enum                BeepMode { NoMatch, PartialMatch, Rotation };
00562     void                doBeep( BeepMode ) const;
00563 
00564     KGlobalSettings::Completion myCompletionMode;
00565 
00566     CompOrder           myOrder;
00567     QString             myLastString;
00568     QString             myLastMatch;
00569     QString             myCurrentMatch;
00570     KCompTreeNode *     myTreeRoot;
00571     QStringList         myRotations;
00572     bool                myBeep;
00573     bool                myIgnoreCase;
00574     bool                myHasMultipleMatches;
00575     uint                myRotationIndex;
00576 
00577 
00578 protected:
00579     virtual void virtual_hook( int id, void* data );
00580 private:
00581     KCompletionPrivate *d;
00582 };
00583 
00584 // some more helper stuff
00585 typedef KSortableValueList<QString> KCompletionMatchesList;
00586 class KCompletionMatchesPrivate;
00587 
00606 class KCompletionMatches
00607     : public KCompletionMatchesList
00608 {
00609 public:
00610     KCompletionMatches( bool sort );
00614     KCompletionMatches( const KCompletionMatchesWrapper& matches );
00615     ~KCompletionMatches();
00620     void removeDuplicates();
00627     QStringList list( bool sort = true ) const;
00633     bool sorting() const {
00634         return _sorting;
00635     }
00636 private:
00637     bool _sorting;
00638     KCompletionMatchesPrivate* d;
00639 };
00640 
00655 class KCompletionBase
00656 {
00657 
00658 public:
00659 
00665     enum KeyBindingType {
00669         TextCompletion,
00673         PrevCompletionMatch,
00677         NextCompletionMatch,
00681         SubstringCompletion
00682     };
00683 
00684 
00685     // Map for the key binding types mentioned above.
00686     typedef QMap<KeyBindingType, KShortcut> KeyBindingMap;
00687 
00691     KCompletionBase();
00692 
00696     virtual ~KCompletionBase();
00697 
00719     KCompletion* completionObject( bool hsig = true );
00720 
00743     virtual void setCompletionObject( KCompletion* /*compObj*/, bool hsig = true );
00744 
00757     virtual void setHandleSignals( bool /*handle*/ );
00758 
00769     bool isCompletionObjectAutoDeleted() const {
00770         return m_delegate ? m_delegate->isCompletionObjectAutoDeleted() : m_bAutoDelCompObj;
00771     }
00772 
00782     void setAutoDeleteCompletionObject( bool autoDelete ) {
00783         if ( m_delegate )
00784             m_delegate->setAutoDeleteCompletionObject( autoDelete );
00785         else
00786             m_bAutoDelCompObj = autoDelete;
00787     }
00788 
00809     void setEnableSignals( bool enable ) {
00810         if ( m_delegate )
00811             m_delegate->setEnableSignals( enable );
00812         else
00813             m_bEmitSignals = enable;
00814     }
00815 
00821     bool handleSignals() const { return m_delegate ? m_delegate->handleSignals() : m_bHandleSignals; }
00822 
00828     bool emitSignals() const { return m_delegate ? m_delegate->emitSignals() : m_bEmitSignals; }
00829 
00850     virtual void setCompletionMode( KGlobalSettings::Completion mode );
00851 
00860     KGlobalSettings::Completion completionMode() const {
00861         return m_delegate ? m_delegate->completionMode() : m_iCompletionMode;
00862     }
00863 
00894     bool setKeyBinding( KeyBindingType /*item*/ , const KShortcut& cut );
00895 
00908     const KShortcut& getKeyBinding( KeyBindingType item ) const {
00909         return m_delegate ? m_delegate->getKeyBinding( item ) : m_keyMap[ item ];
00910     }
00911 
00923     void useGlobalKeyBindings();
00924 
00939     virtual void setCompletedText( const QString& text ) = 0;
00940 
00946     virtual void setCompletedItems( const QStringList& items ) = 0;
00947 
00959     KCompletion* compObj() const { return m_delegate ? m_delegate->compObj() : (KCompletion*) m_pCompObj; }
00960 
00961 protected:
00970     KeyBindingMap getKeyBindings() const { return m_delegate ? m_delegate->getKeyBindings() : m_keyMap; }
00971 
00977     void setDelegate( KCompletionBase *delegate );
00978 
00984     KCompletionBase *delegate() const { return m_delegate; }
00985 
00986 private:
00987     // This method simply sets the autodelete boolean for
00988     // the completion object, the emit signals and handle
00989     // signals internally flags to the provided values.
00990     void setup( bool, bool, bool );
00991 
00992     // Flag that determined whether the completion object
00993     // should be deleted when this object is destroyed.
00994     bool m_bAutoDelCompObj;
00995     // Determines whether this widget handles completion signals
00996     // internally or not
00997     bool m_bHandleSignals;
00998     // Determines whether this widget fires rotation signals
00999     bool m_bEmitSignals;
01000     // Stores the completion mode locally.
01001     KGlobalSettings::Completion m_iCompletionMode;
01002     // Pointer to Completion object.
01003     QGuardedPtr<KCompletion> m_pCompObj;
01004     // Keybindings
01005     KeyBindingMap m_keyMap;
01006     // we may act as a proxy to another KCompletionBase object
01007     KCompletionBase *m_delegate;
01008 
01009     // BCI
01010 protected:
01011     virtual void virtual_hook( int id, void* data );
01012 private:
01013     KCompletionBasePrivate *d;
01014 };
01015 
01016 #endif // KCOMPLETION_H
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Wed Jan 28 12:46:22 2004 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001