kcompletionbase.cpp
00001 /* This file is part of the KDE libraries 00002 00003 Copyright (c) 2000 Dawit Alemayehu <adawit@kde.org> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License (LGPL) as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 00019 */ 00020 00021 #include <tqobject.h> 00022 00023 #include <kcompletion.h> 00024 00025 KCompletionBase::KCompletionBase() 00026 { 00027 m_delegate = 0L; 00028 // Assign the default completion type to use. 00029 m_iCompletionMode = KGlobalSettings::completionMode(); 00030 00031 // Initialize all key-bindings to 0 by default so that 00032 // the event filter will use the global settings. 00033 useGlobalKeyBindings(); 00034 00035 // By default we initialize everything to false. 00036 // All the variables would be setup properly when 00037 // the appropriate member functions are called. 00038 setup( false, false, false ); 00039 } 00040 00041 KCompletionBase::~KCompletionBase() 00042 { 00043 if( m_bAutoDelCompObj && m_pCompObj ) 00044 { 00045 delete m_pCompObj; 00046 } 00047 } 00048 00049 void KCompletionBase::setDelegate( KCompletionBase *delegate ) 00050 { 00051 m_delegate = delegate; 00052 00053 if ( m_delegate ) { 00054 m_delegate->m_bAutoDelCompObj = m_bAutoDelCompObj; 00055 m_delegate->m_bHandleSignals = m_bHandleSignals; 00056 m_delegate->m_bEmitSignals = m_bEmitSignals; 00057 m_delegate->m_iCompletionMode = m_iCompletionMode; 00058 m_delegate->m_keyMap = m_keyMap; 00059 } 00060 } 00061 00062 KCompletion* KCompletionBase::completionObject( bool hsig ) 00063 { 00064 if ( m_delegate ) 00065 return m_delegate->completionObject( hsig ); 00066 00067 if ( !m_pCompObj ) 00068 { 00069 setCompletionObject( new KCompletion(), hsig ); 00070 m_bAutoDelCompObj = true; 00071 } 00072 return m_pCompObj; 00073 } 00074 00075 void KCompletionBase::setCompletionObject( KCompletion* compObj, bool hsig ) 00076 { 00077 if ( m_delegate ) { 00078 m_delegate->setCompletionObject( compObj, hsig ); 00079 return; 00080 } 00081 00082 if ( m_bAutoDelCompObj && compObj != m_pCompObj ) 00083 delete m_pCompObj; 00084 00085 m_pCompObj = compObj; 00086 00087 // We emit rotation and completion signals 00088 // if completion object is not NULL. 00089 setup( false, hsig, !m_pCompObj.isNull() ); 00090 } 00091 00092 // BC: Inline this function and possibly rename it to setHandleEvents??? (DA) 00093 void KCompletionBase::setHandleSignals( bool handle ) 00094 { 00095 if ( m_delegate ) 00096 m_delegate->setHandleSignals( handle ); 00097 else 00098 m_bHandleSignals = handle; 00099 } 00100 00101 void KCompletionBase::setCompletionMode( KGlobalSettings::Completion mode ) 00102 { 00103 if ( m_delegate ) { 00104 m_delegate->setCompletionMode( mode ); 00105 return; 00106 } 00107 00108 m_iCompletionMode = mode; 00109 // Always sync up KCompletion mode with ours as long as we 00110 // are performing completions. 00111 if( m_pCompObj && m_iCompletionMode != KGlobalSettings::CompletionNone ) 00112 m_pCompObj->setCompletionMode( m_iCompletionMode ); 00113 } 00114 00115 bool KCompletionBase::setKeyBinding( KeyBindingType item, const KShortcut& cut ) 00116 { 00117 if ( m_delegate ) 00118 return m_delegate->setKeyBinding( item, cut ); 00119 00120 00121 if( !cut.isNull() ) 00122 { 00123 for( KeyBindingMap::Iterator it = m_keyMap.begin(); it != m_keyMap.end(); ++it ) 00124 if( it.data() == cut ) return false; 00125 } 00126 m_keyMap.replace( item, cut ); 00127 return true; 00128 } 00129 00130 void KCompletionBase::useGlobalKeyBindings() 00131 { 00132 if ( m_delegate ) { 00133 m_delegate->useGlobalKeyBindings(); 00134 return; 00135 } 00136 00137 m_keyMap.clear(); 00138 m_keyMap.insert( TextCompletion, 0 ); 00139 m_keyMap.insert( PrevCompletionMatch, 0 ); 00140 m_keyMap.insert( NextCompletionMatch, 0 ); 00141 m_keyMap.insert( SubstringCompletion, 0 ); 00142 } 00143 00144 void KCompletionBase::setup( bool autodel, bool hsig, bool esig ) 00145 { 00146 if ( m_delegate ) { 00147 m_delegate->setup( autodel, hsig, esig ); 00148 return; 00149 } 00150 00151 m_bAutoDelCompObj = autodel; 00152 m_bHandleSignals = hsig; 00153 m_bEmitSignals = esig; 00154 }