kcompletion.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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
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
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* , bool hsig = true );
00744
00757 virtual void setHandleSignals( bool );
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 , 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
00988
00989
00990 void setup( bool, bool, bool );
00991
00992
00993
00994 bool m_bAutoDelCompObj;
00995
00996
00997 bool m_bHandleSignals;
00998
00999 bool m_bEmitSignals;
01000
01001 KGlobalSettings::Completion m_iCompletionMode;
01002
01003 QGuardedPtr<KCompletion> m_pCompObj;
01004
01005 KeyBindingMap m_keyMap;
01006
01007 KCompletionBase *m_delegate;
01008
01009
01010 protected:
01011 virtual void virtual_hook( int id, void* data );
01012 private:
01013 KCompletionBasePrivate *d;
01014 };
01015
01016 #endif // KCOMPLETION_H
This file is part of the documentation for kdelibs Version 3.1.5.