22#include <QtGui/QMouseEvent>
32class KUrlComboBox::KUrlComboBoxPrivate
37 dirIcon(QLatin1String(
"folder"))
40 ~KUrlComboBoxPrivate()
42 qDeleteAll( itemList );
43 qDeleteAll( defaultList );
52 void init(
Mode mode );
53 void insertUrlItem(
const KUrlComboItem * );
54 QIcon getIcon(
const KUrl& url )
const;
55 void updateItem(
const KUrlComboItem *item,
int index,
const QIcon& icon );
57 void _k_slotActivated(
int );
67 QList<const KUrlComboItem*> itemList;
68 QList<const KUrlComboItem*> defaultList;
69 QMap<int,const KUrlComboItem*> itemMapper;
76 :
KComboBox( parent),d(new KUrlComboBoxPrivate(this))
83 :
KComboBox( rw, parent),d(new KUrlComboBoxPrivate(this))
95void KUrlComboBox::KUrlComboBoxPrivate::init( Mode mode )
100 m_parent->setInsertPolicy( NoInsert );
102 m_parent->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ));
103 m_parent->setLayoutDirection( Qt::LeftToRight );
108 opendirIcon = KIcon(QLatin1String(
"folder-open"));
110 m_parent->connect( m_parent, SIGNAL(activated(
int)), SLOT(_k_slotActivated(
int)));
116 kDebug(250) <<
"::urls()";
120 for (
int i = d->defaultList.count(); i < count(); i++ ) {
122 if ( !url.isEmpty() ) {
141 const QString& text )
143 KUrlComboBoxPrivate::KUrlComboItem *item =
new KUrlComboBoxPrivate::KUrlComboItem;
146 if ( text.isEmpty() )
153 d->defaultList.append( item );
160 d->itemMapper.clear();
162 const KUrlComboBoxPrivate::KUrlComboItem *item;
163 for (
int id = 0;
id < d->defaultList.count();
id++ ) {
164 item = d->defaultList.at(
id );
165 d->insertUrlItem( item );
177 qDeleteAll( d->itemList );
181 if ( _urls.isEmpty() )
185 QStringList::ConstIterator it = _urls.constBegin();
188 while ( it != _urls.constEnd() ) {
189 if ( !
urls.contains( *it ) )
197 int Overload =
urls.count() - d->myMaximum + d->defaultList.count();
198 while ( Overload > 0) {
210 it =
urls.constBegin();
212 KUrlComboBoxPrivate::KUrlComboItem *item = 0L;
214 while ( it !=
urls.constEnd() ) {
215 if ( (*it).isEmpty() ) {
227 item =
new KUrlComboBoxPrivate::KUrlComboItem;
229 item->icon = d->getIcon( u );
234 d->insertUrlItem( item );
235 d->itemList.append( item );
246 bool blocked = blockSignals(
true );
251 while ( mit != d->itemMapper.constEnd() ) {
252 Q_ASSERT( mit.value() );
255 setCurrentIndex( mit.key() );
258 d->updateItem( mit.value(), mit.key(), d->opendirIcon );
260 blockSignals( blocked );
270 Q_ASSERT(!d->itemList.isEmpty());
271 d->itemList.removeLast();
277 int offset = qMax (0, d->itemList.count() - d->myMaximum + d->defaultList.count());
278 for (
int i = offset; i < d->itemList.count(); i++ )
279 d->insertUrlItem( d->itemList[i] );
281 KUrlComboBoxPrivate::KUrlComboItem *item =
new KUrlComboBoxPrivate::KUrlComboItem;
283 item->icon = d->getIcon( url );
287 kDebug(250) <<
"setURL: text=" << item->text;
290 QString text = item->text;
293 KComboBox::insertItem(
id, d->opendirIcon, text);
295 KComboBox::insertItem(
id,item->icon, text);
297 d->itemMapper.insert(
id, item );
298 d->itemList.append( item );
300 setCurrentIndex(
id );
301 Q_ASSERT(!d->itemList.isEmpty());
303 blockSignals( blocked );
307void KUrlComboBox::KUrlComboBoxPrivate::_k_slotActivated(
int index )
309 const KUrlComboItem *item = itemMapper.value(index);
312 m_parent->setUrl( item->url );
313 emit m_parent->urlActivated( item->url );
318void KUrlComboBox::KUrlComboBoxPrivate::insertUrlItem(
const KUrlComboBoxPrivate::KUrlComboItem *item )
323 int id = m_parent->count();
324 m_parent->KComboBox::insertItem(
id, item->icon, item->text);
325 itemMapper.insert(
id, item );
333 if (count() > d->myMaximum) {
334 int oldCurrent = currentIndex();
338 int offset = qMax (0, d->itemList.count() - d->myMaximum + d->defaultList.count());
339 for (
int i = offset; i < d->itemList.count(); i++ )
340 d->insertUrlItem( d->itemList[i] );
343 if ( oldCurrent >= count() )
344 oldCurrent = count() -1;
345 setCurrentIndex( oldCurrent );
358 while ( mit != d->itemMapper.constEnd() ) {
360 if ( !d->itemList.removeAll( mit.value() ) && checkDefaultURLs )
361 d->defaultList.removeAll( mit.value() );
366 bool blocked = blockSignals(
true );
368 QListIterator<const KUrlComboBoxPrivate::KUrlComboItem*> it( d->itemList );
369 while ( it.hasNext() ) {
370 d->insertUrlItem( it.next() );
372 blockSignals( blocked );
388 QStyleOptionComboBox comboOpt;
389 comboOpt.initFrom(
this);
390 const int x0 = QStyle::visualRect(layoutDirection(), rect(),
391 style()->subControlRect(QStyle::CC_ComboBox, &comboOpt, QStyle::SC_ComboBoxEditField,
this)).x();
392 const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &comboOpt,
this);
395 d->m_dragPoint =
event->pos();
397 d->m_dragPoint = QPoint();
400 KComboBox::mousePressEvent(event);
405 const int index = currentIndex();
407 if (!itemIcon(index).isNull() && !d->m_dragPoint.isNull() && event->buttons() & Qt::LeftButton &&
409 QDrag *drag =
new QDrag(
this);
410 QMimeData *mime =
new QMimeData();
412 mime->setText(itemText(index));
414 drag->setMimeData(mime);
418 KComboBox::mouseMoveEvent(event);
421QIcon KUrlComboBox::KUrlComboBoxPrivate::getIcon(
const KUrl& url )
const
431void KUrlComboBox::KUrlComboBoxPrivate::updateItem(
const KUrlComboBoxPrivate::KUrlComboItem *item,
432 int index,
const QIcon& icon)
434 m_parent->setItemIcon(index,icon);
436 if ( m_parent->isEditable() ) {
437 m_parent->setItemText(index, item->url.pathOrUrl(myMode ==
Directories
442 m_parent->setItemText(index,item->text);
447#include "kurlcombobox.moc"
KComboBox(bool rw, QWidget *parent=0)
void setTrapReturnKey(bool trap)
KCompletion * compObj() const
virtual void setCompletionObject(KCompletion *compObj, bool hsig=true)
KCompletion * completionObject(bool hsig=true)
virtual void setOrder(CompOrder order)
static int dndEventDelay()
static QString iconNameForUrl(const KUrl &url, mode_t mode=0)
void setUrls(const QStringList &urls)
Inserts urls into the combobox below the "default urls" (see addDefaultUrl).
virtual void mousePressEvent(QMouseEvent *event)
OverLoadResolving
This Enumeration is used in setUrl() to determine which items will be removed when the given list is ...
KUrlComboBox(Mode mode, QWidget *parent=0)
Constructs a KUrlComboBox.
void setUrl(const KUrl &url)
Sets the current url.
virtual void setCompletionObject(KCompletion *compObj, bool hsig=true)
Reimplemented from KComboBox (from KCompletion)
void removeUrl(const KUrl &url, bool checkDefaultURLs=true)
Removes any occurrence of url.
~KUrlComboBox()
Destructs the combo box.
virtual void mouseMoveEvent(QMouseEvent *event)
void setMaxItems(int)
Sets how many items should be handled and displayed by the combobox.
Mode
This enum describes which kind of items is shown in the combo box.
void setDefaults()
Clears all items and inserts the default urls into the combo.
void addDefaultUrl(const KUrl &url, const QString &text=QString())
Adds a url that will always be shown in the combobox, it can't be "rotated away".
QString pathOrUrl() const
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
QString toLocalFile(AdjustPathOption trailing=LeaveTrailingSlash) const
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)