25 #include <QtGui/QAbstractItemView>
26 #include <QtGui/QApplication>
27 #include <QtGui/QKeyEvent>
28 #include <QtGui/QMenu>
29 #include <QtGui/QWheelEvent>
67 :
KComboBox( true, parent ), d(new Private(this))
75 :
KComboBox( true, parent ), d(new Private(this))
77 init( useCompletion );
80 void KHistoryComboBox::init(
bool useCompletion )
88 setInsertPolicy( NoInsert );
89 d->myIterateIndex = -1;
91 d->myPixProvider = 0L;
94 QByteArray histControl = qgetenv(
"HISTCONTROL");
95 if ( histControl ==
"ignoredups" || histControl ==
"ignoreboth" )
96 setDuplicatesEnabled(
false );
99 connect(
this, SIGNAL(activated(
int)), SLOT(slotReset()));
109 delete d->myPixProvider;
119 bool setCompletionList )
125 const int itemCount = insertingItems.count();
126 const int toRemove = itemCount - maxCount();
128 if (toRemove >= itemCount) {
129 insertingItems.clear();
131 for (
int i = 0; i < toRemove; ++i)
132 insertingItems.pop_front();
151 const int itemCount = count();
152 for (
int i = 0; i < itemCount; ++i )
153 list.append( itemText( i ) );
165 const QString temp = currentText();
172 void KHistoryComboBox::addContextMenuItems(
QMenu* menu )
176 menu->addSeparator();
179 clearHistory->setEnabled(
false);
185 if ( item.isEmpty() || (count() > 0 && item == itemText(0) )) {
189 bool wasCurrent =
false;
191 if ( !duplicatesEnabled() ) {
193 int itemCount = count();
194 while ( i < itemCount ) {
195 if ( itemText( i ) == item ) {
197 wasCurrent = ( i == currentIndex() );
207 if ( d->myPixProvider )
208 insertItem( 0, d->myPixProvider->pixmapFor(item, iconSize().height()), item);
210 insertItem( 0, item );
213 setCurrentIndex( 0 );
217 const int last = count() - 1;
218 const int mc = maxCount();
219 const int stopAt = qMax(mc, 0);
221 for (
int rmIndex = last; rmIndex >= stopAt; --rmIndex) {
225 const QString rmItem = itemText( rmIndex );
226 removeItem( rmIndex );
227 if ( useComp && !
contains( rmItem ) )
237 if ( item.isEmpty() )
240 bool removed =
false;
241 const QString temp = currentText();
243 int itemCount = count();
244 while ( i < itemCount ) {
245 if ( item == itemText( i ) ) {
267 void KHistoryComboBox::rotateUp()
272 if ( d->myIterateIndex == -1 )
273 d->myText = currentText();
278 const int last = count() - 1;
279 const QString currText = currentText();
281 while ( d->myIterateIndex < last &&
282 (currText == itemText( d->myIterateIndex ) ||
283 itemText( d->myIterateIndex ).isEmpty()) )
286 if ( d->myIterateIndex >= count() ) {
288 d->myIterateIndex = -1;
291 if ( count() > 0 && d->myText == itemText(0) )
292 d->myIterateIndex = 0;
296 setCurrentIndex(d->myIterateIndex);
302 void KHistoryComboBox::rotateDown()
305 if ( d->myIterateIndex == -1 )
306 d->myText = currentText();
310 const QString currText = currentText();
312 while ( d->myIterateIndex >= 0 &&
313 (currText == itemText( d->myIterateIndex ) ||
314 itemText( d->myIterateIndex ).isEmpty()) )
318 if ( d->myIterateIndex < 0 ) {
319 if ( d->myRotated && d->myIterateIndex == -2 ) {
320 d->myRotated =
false;
321 d->myIterateIndex = count() - 1;
325 if ( d->myIterateIndex == -2 ) {
327 i18n(
"No further items in the history."),
331 d->myIterateIndex = -1;
332 if ( currentText() != d->myText )
336 setCurrentIndex(d->myIterateIndex);
342 int event_key = e->key() | e->modifiers();
349 KComboBox::keyPressEvent( e );
355 QAbstractItemView*
const iv = view();
356 if ( iv && iv->isVisible() )
358 QApplication::sendEvent( iv, ev );
362 if ( ev->delta() > 0 ) {
370 void KHistoryComboBox::slotReset()
372 d->myIterateIndex = -1;
373 d->myRotated =
false;
379 if ( d->myPixProvider == prov )
382 delete d->myPixProvider;
383 d->myPixProvider = prov;
397 QStringList::ConstIterator it = items.constBegin();
398 const QStringList::ConstIterator itEnd = items.constEnd();
400 while ( it != itEnd ) {
402 if ( !item.isEmpty() ) {
403 if ( d->myPixProvider )
404 addItem( d->myPixProvider->pixmapFor(item, iconSize().height()),
413 void KHistoryComboBox::slotClear()
419 void KHistoryComboBox::slotSimulateActivated(
const QString& text )
425 if ((insertPolicy() == NoInsert && findText(text, Qt::MatchFixedString|Qt::MatchCaseSensitive) == -1)) {
426 emit activated(text);
433 else if (insertPolicy() != InsertAtCurrent && count() >= maxCount()) {
434 emit activated(text);
440 return d->myPixProvider;
448 #include "khistorycombobox.moc"