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 "kdemacros.h"
00031
#include <kglobalsettings.h>
00032
#include <ksortablevaluelist.h>
00033
#include <kshortcut.h>
00034
00035
class KCompTreeNode;
00036
class KCompletionPrivate;
00037
class KCompletionBasePrivate;
00038
class KCompletionMatchesWrapper;
00039
class KCompletionMatches;
00040
class QPopupMenu;
00041
00133 class KCompletion :
public QObject
00134 {
00135 Q_ENUMS(
CompOrder )
00136 Q_PROPERTY(
CompOrder order READ order WRITE
setOrder )
00137 Q_PROPERTY(
bool ignoreCase READ ignoreCase WRITE
setIgnoreCase )
00138 Q_PROPERTY(
QStringList items READ items WRITE
setItems )
00139 Q_OBJECT
00140
00141
public:
00146 enum CompOrder {
Sorted,
00147
Insertion,
00148
Weighted
00149 };
00150
00154
KCompletion();
00155
00156
00157
00161
virtual ~KCompletion();
00162
00185
virtual QString makeCompletion(
const QString& string );
00186
00195
QStringList substringCompletion(
const QString& string )
const;
00196
00206
QString previousMatch();
00207
00217
QString nextMatch();
00218
00225 virtual const QString&
lastMatch()
const {
return myLastMatch; }
00226
00245
QStringList items() const;
00246
00250
bool isEmpty() const;
00251
00261 virtual
void setCompletionMode(
KGlobalSettings::Completion mode );
00262
00270 KGlobalSettings::Completion completionMode()
const {
00271
return myCompletionMode;
00272 }
00273
00294
virtual void setOrder( CompOrder order );
00295
00301 CompOrder order()
const {
return myOrder; }
00302
00310
virtual void setIgnoreCase(
bool ignoreCase );
00311
00318 bool ignoreCase()
const {
return myIgnoreCase; }
00319
00326
QStringList allMatches();
00327
00333
QStringList allMatches(
const QString& string );
00334
00347
KCompletionMatches allWeightedMatches();
00348
00354
KCompletionMatches allWeightedMatches(
const QString& string );
00355
00369 virtual void setEnableSounds(
bool enable ) { myBeep = enable; }
00370
00378 bool isSoundsEnabled()
const {
return myBeep; }
00379
00385 bool hasMultipleMatches()
const {
return myHasMultipleMatches; }
00386
00387
#ifndef KDE_NO_COMPAT
00388
00392 void enableSounds() { myBeep =
true; }
00393
00398 void disableSounds() { myBeep =
false; }
00399
#endif
00400
00401
public slots:
00408 void slotMakeCompletion(
const QString& string ) {
00409 (
void)
makeCompletion( string );
00410 }
00411
00417 void slotPreviousMatch() {
00418 (
void)
previousMatch();
00419 }
00420
00426 void slotNextMatch() {
00427 (
void)
nextMatch();
00428 }
00429
00430
00431
00437
void insertItems(
const QStringList& items );
00438
00454
virtual void setItems(
const QStringList& list);
00455
00462
void addItem(
const QString& item);
00463
00475
void addItem(
const QString& item, uint weight );
00476
00483
void removeItem(
const QString& item);
00484
00488
virtual void clear();
00489
00490
00491 signals:
00498
void match(
const QString& item);
00499
00506
void matches(
const QStringList& matchlist);
00507
00513
void multipleMatches();
00514
00515
protected:
00529 virtual void postProcessMatch(
QString *match )
const { Q_UNUSED(match) }
00530
00541 virtual void postProcessMatches(
QStringList * matches )
const { Q_UNUSED(matches)}
00542
00553 virtual void postProcessMatches(
KCompletionMatches * matches )
const {Q_UNUSED(matches)}
00554
00555
private:
00556
void addWeightedItem(
const QString& );
00557
QString findCompletion(
const QString& string );
00558
void findAllCompletions(
const QString&,
00559 KCompletionMatchesWrapper *matches,
00560
bool& hasMultipleMatches )
const;
00561
00562
void extractStringsFromNode(
const KCompTreeNode *,
00563
const QString& beginning,
00564 KCompletionMatchesWrapper *matches,
00565
bool addWeight =
false )
const;
00566
void extractStringsFromNodeCI(
const KCompTreeNode *,
00567
const QString& beginning,
00568
const QString& restString,
00569 KCompletionMatchesWrapper *matches)
const;
00570
00571
enum BeepMode { NoMatch, PartialMatch, Rotation };
00572
void doBeep( BeepMode ) const;
00573
00574
KGlobalSettings::Completion myCompletionMode;
00575
00576 CompOrder myOrder;
00577
QString myLastString;
00578
QString myLastMatch;
00579
QString myCurrentMatch;
00580
KCompTreeNode * myTreeRoot;
00581
QStringList myRotations;
00582
bool myBeep;
00583
bool myIgnoreCase;
00584
bool myHasMultipleMatches;
00585 uint myRotationIndex;
00586
00587
00588 protected:
00589 virtual
void virtual_hook(
int id,
void* data );
00590 private:
00591 KCompletionPrivate *d;
00592 };
00593
00594
00595 typedef
KSortableValueList<
QString>
KCompletionMatchesList;
00596 class KCompletionMatchesPrivate;
00597
00616 class
KCompletionMatches : public KCompletionMatchesList
00617 {
00618
public:
00619
KCompletionMatches(
bool sort );
00623
KCompletionMatches(
const KCompletionMatchesWrapper& matches );
00624 ~
KCompletionMatches();
00629
void removeDuplicates();
00636
QStringList list(
bool sort =
true )
const;
00642 bool sorting()
const {
00643
return _sorting;
00644 }
00645
private:
00646
bool _sorting;
00647 KCompletionMatchesPrivate* d;
00648 };
00649
00664 class KCompletionBase
00665 {
00666
public:
00672 enum KeyBindingType {
00676 TextCompletion,
00680 PrevCompletionMatch,
00684 NextCompletionMatch,
00688 SubstringCompletion
00689 };
00690
00691
00692
00693
typedef QMap<KeyBindingType, KShortcut> KeyBindingMap;
00694
00698
KCompletionBase();
00699
00703
virtual ~
KCompletionBase();
00704
00720
KCompletion* completionObject(
bool hsig =
true );
00721
00738
virtual void setCompletionObject(
KCompletion* compObj,
bool hsig =
true );
00739
00752
virtual void setHandleSignals(
bool handle );
00753
00764 bool isCompletionObjectAutoDeleted()
const {
00765
return m_delegate ? m_delegate->isCompletionObjectAutoDeleted() : m_bAutoDelCompObj;
00766 }
00767
00777 void setAutoDeleteCompletionObject(
bool autoDelete ) {
00778
if ( m_delegate )
00779 m_delegate->setAutoDeleteCompletionObject( autoDelete );
00780
else
00781 m_bAutoDelCompObj = autoDelete;
00782 }
00783
00804 void setEnableSignals(
bool enable ) {
00805
if ( m_delegate )
00806 m_delegate->setEnableSignals( enable );
00807
else
00808 m_bEmitSignals = enable;
00809 }
00810
00816 bool handleSignals()
const {
return m_delegate ? m_delegate->handleSignals() : m_bHandleSignals; }
00817
00823 bool emitSignals()
const {
return m_delegate ? m_delegate->emitSignals() : m_bEmitSignals; }
00824
00845
virtual void setCompletionMode( KGlobalSettings::Completion mode );
00846
00855 KGlobalSettings::Completion
completionMode()
const {
00856
return m_delegate ? m_delegate->completionMode() : m_iCompletionMode;
00857 }
00858
00889
bool setKeyBinding( KeyBindingType item ,
const KShortcut& key );
00890
00903 const KShortcut& getKeyBinding( KeyBindingType item )
const {
00904
return m_delegate ? m_delegate->getKeyBinding( item ) : m_keyMap[ item ];
00905 }
00906
00918
void useGlobalKeyBindings();
00919
00934
virtual void setCompletedText(
const QString& text ) = 0;
00935
00941
virtual void setCompletedItems(
const QStringList& items ) = 0;
00942
00954 KCompletion* compObj()
const {
return m_delegate ? m_delegate->compObj() : (
KCompletion*) m_pCompObj; }
00955
00956
protected:
00965 KeyBindingMap getKeyBindings()
const {
return m_delegate ? m_delegate->getKeyBindings() : m_keyMap; }
00966
00972
void setDelegate(
KCompletionBase *delegate );
00973
00979 KCompletionBase *delegate()
const {
return m_delegate; }
00980
00981
private:
00982
00983
00984
00985
void setup(
bool,
bool,
bool );
00986
00987
00988
00989
bool m_bAutoDelCompObj;
00990
00991
00992
bool m_bHandleSignals;
00993
00994
bool m_bEmitSignals;
00995
00996 KGlobalSettings::Completion m_iCompletionMode;
00997
00998
QGuardedPtr<KCompletion> m_pCompObj;
00999
01000 KeyBindingMap m_keyMap;
01001
01002
KCompletionBase *m_delegate;
01003
01004
01005
protected:
01006
virtual void virtual_hook(
int id,
void* data );
01007
private:
01008 KCompletionBasePrivate *d;
01009 };
01010
01011
#endif // KCOMPLETION_H