KDEUI
kcompletionbase.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <QtCore/QMap>
00022 #include <QtCore/QObject>
00023
00024 #include <kcompletion.h>
00025
00026 class KCompletionBasePrivate
00027 {
00028 public:
00029 KCompletionBasePrivate()
00030
00031 : m_iCompletionMode( KGlobalSettings::completionMode() )
00032 , m_delegate( 0 )
00033 {
00034 }
00035 ~KCompletionBasePrivate()
00036 {
00037 if( m_bAutoDelCompObj && m_pCompObj )
00038 {
00039 delete m_pCompObj;
00040 }
00041 }
00042
00043
00044 bool m_bAutoDelCompObj;
00045
00046
00047 bool m_bHandleSignals;
00048
00049 bool m_bEmitSignals;
00050
00051 KGlobalSettings::Completion m_iCompletionMode;
00052
00053 QPointer<KCompletion> m_pCompObj;
00054
00055 KCompletionBase::KeyBindingMap m_keyMap;
00056
00057 KCompletionBase *m_delegate;
00058 };
00059
00060 KCompletionBase::KCompletionBase()
00061 : d( new KCompletionBasePrivate )
00062 {
00063
00064
00065 useGlobalKeyBindings();
00066
00067
00068
00069
00070 setup( false, true, false );
00071 }
00072
00073 KCompletionBase::~KCompletionBase()
00074 {
00075 delete d;
00076 }
00077
00078 void KCompletionBase::setDelegate( KCompletionBase *delegate )
00079 {
00080 d->m_delegate = delegate;
00081
00082 if ( delegate ) {
00083 delegate->d->m_bAutoDelCompObj = d->m_bAutoDelCompObj;
00084 delegate->d->m_bHandleSignals = d->m_bHandleSignals;
00085 delegate->d->m_bEmitSignals = d->m_bEmitSignals;
00086 delegate->d->m_iCompletionMode = d->m_iCompletionMode;
00087 delegate->d->m_keyMap = d->m_keyMap;
00088 }
00089 }
00090
00091 KCompletionBase *KCompletionBase::delegate() const
00092 {
00093 return d->m_delegate;
00094 }
00095
00096 KCompletion* KCompletionBase::completionObject( bool hsig )
00097 {
00098 if ( d->m_delegate )
00099 return d->m_delegate->completionObject( hsig );
00100
00101 if ( !d->m_pCompObj )
00102 {
00103 setCompletionObject( new KCompletion(), hsig );
00104 d->m_bAutoDelCompObj = true;
00105 }
00106 return d->m_pCompObj;
00107 }
00108
00109 void KCompletionBase::setCompletionObject( KCompletion* compObj, bool hsig )
00110 {
00111 if ( d->m_delegate ) {
00112 d->m_delegate->setCompletionObject( compObj, hsig );
00113 return;
00114 }
00115
00116 if ( d->m_bAutoDelCompObj && compObj != d->m_pCompObj )
00117 delete d->m_pCompObj;
00118
00119 d->m_pCompObj = compObj;
00120
00121
00122
00123 setup( false, hsig, !d->m_pCompObj.isNull() );
00124 }
00125
00126
00127 void KCompletionBase::setHandleSignals( bool handle )
00128 {
00129 if ( d->m_delegate )
00130 d->m_delegate->setHandleSignals( handle );
00131 else
00132 d->m_bHandleSignals = handle;
00133 }
00134
00135 bool KCompletionBase::isCompletionObjectAutoDeleted() const
00136 {
00137 return d->m_delegate ? d->m_delegate->isCompletionObjectAutoDeleted()
00138 : d->m_bAutoDelCompObj;
00139 }
00140
00141 void KCompletionBase::setAutoDeleteCompletionObject( bool autoDelete )
00142 {
00143 if ( d->m_delegate )
00144 d->m_delegate->setAutoDeleteCompletionObject( autoDelete );
00145 else
00146 d->m_bAutoDelCompObj = autoDelete;
00147 }
00148
00149 void KCompletionBase::setEnableSignals( bool enable )
00150 {
00151 if ( d->m_delegate )
00152 d->m_delegate->setEnableSignals( enable );
00153 else
00154 d->m_bEmitSignals = enable;
00155 }
00156
00157 bool KCompletionBase::handleSignals() const
00158 {
00159 return d->m_delegate ? d->m_delegate->handleSignals() : d->m_bHandleSignals;
00160 }
00161
00162 bool KCompletionBase::emitSignals() const
00163 {
00164 return d->m_delegate ? d->m_delegate->emitSignals() : d->m_bEmitSignals;
00165 }
00166
00167 void KCompletionBase::setCompletionMode( KGlobalSettings::Completion mode )
00168 {
00169 if ( d->m_delegate ) {
00170 d->m_delegate->setCompletionMode( mode );
00171 return;
00172 }
00173
00174 d->m_iCompletionMode = mode;
00175
00176
00177 if( d->m_pCompObj && d->m_iCompletionMode != KGlobalSettings::CompletionNone )
00178 d->m_pCompObj->setCompletionMode( d->m_iCompletionMode );
00179 }
00180
00181 KGlobalSettings::Completion KCompletionBase::completionMode() const
00182 {
00183 return d->m_delegate ? d->m_delegate->completionMode() : d->m_iCompletionMode;
00184 }
00185
00186 bool KCompletionBase::setKeyBinding( KeyBindingType item, const KShortcut& cut )
00187 {
00188 if ( d->m_delegate )
00189 return d->m_delegate->setKeyBinding( item, cut );
00190
00191
00192 if( !cut.isEmpty() )
00193 {
00194 for( KeyBindingMap::Iterator it = d->m_keyMap.begin(); it != d->m_keyMap.end(); ++it )
00195 if( it.value() == cut ) return false;
00196 }
00197 d->m_keyMap.insert( item, cut );
00198 return true;
00199 }
00200
00201 KShortcut KCompletionBase::getKeyBinding( KeyBindingType item ) const
00202 {
00203 return d->m_delegate ? d->m_delegate->getKeyBinding( item ) : d->m_keyMap[ item ];
00204 }
00205
00206 void KCompletionBase::useGlobalKeyBindings()
00207 {
00208 if ( d->m_delegate ) {
00209 d->m_delegate->useGlobalKeyBindings();
00210 return;
00211 }
00212
00213 d->m_keyMap.clear();
00214 d->m_keyMap.insert( TextCompletion, KShortcut() );
00215 d->m_keyMap.insert( PrevCompletionMatch, KShortcut() );
00216 d->m_keyMap.insert( NextCompletionMatch, KShortcut() );
00217 d->m_keyMap.insert( SubstringCompletion, KShortcut() );
00218 }
00219
00220 KCompletion* KCompletionBase::compObj() const
00221 {
00222 return d->m_delegate ? d->m_delegate->compObj()
00223 : static_cast<KCompletion*>(d->m_pCompObj);
00224 }
00225
00226 KCompletionBase::KeyBindingMap KCompletionBase::getKeyBindings() const
00227 {
00228 return d->m_delegate ? d->m_delegate->getKeyBindings() : d->m_keyMap;
00229 }
00230
00231 void KCompletionBase::setup( bool autodel, bool hsig, bool esig )
00232 {
00233 if ( d->m_delegate ) {
00234 d->m_delegate->setup( autodel, hsig, esig );
00235 return;
00236 }
00237
00238 d->m_bAutoDelCompObj = autodel;
00239 d->m_bHandleSignals = hsig;
00240 d->m_bEmitSignals = esig;
00241 }
00242
00243 void KCompletionBase::virtual_hook( int, void* )
00244 { }
00245