void KOEditorAttachments::slotRemove() { QList<Q3IconViewItem *> toDelete; for ( Q3IconViewItem *it = mAttachments->firstItem(); it; it = it->nextItem() ) { if ( it->isSelected() ) { AttachmentIconItem *item = static_cast<AttachmentIconItem *>( it ); if ( !item ) { continue; } if ( KMessageBox::questionYesNo( this, i18nc( "@info", "Do you really want to remove the attachment labeled \"%1\"?", item->label() ), i18nc( "@title:window", "Remove Attachment?" ) ) == KMessageBox::Yes ) { toDelete.append( it ); } } } for ( QList<Q3IconViewItem *>::ConstIterator it = toDelete.constBegin(); it != toDelete.constEnd(); ++it ) { delete *it; } }
/*! \internal */ QAccessible::State QAccessibleIconView::state(int child) const { State state = Q3AccessibleScrollView::state(child); Q3IconViewItem *item; if (!child || !(item = findIVItem(iconView(), child))) return state; if (item->isSelectable()) { if (iconView()->selectionMode() == Q3IconView::Multi) state |= MultiSelectable; else if (iconView()->selectionMode() == Q3IconView::Extended) state |= ExtSelectable; else if (iconView()->selectionMode() == Q3IconView::Single) state |= Selectable; if (item->isSelected()) state |= Selected; } if (iconView()->itemsMovable()) state |= Movable; if (iconView()->focusPolicy() != Qt::NoFocus) { state |= Focusable; if (item == iconView()->currentItem()) state |= Focused; } return state; }
virtual Q3DragObject *dragObject () { int count = 0; for ( Q3IconViewItem *it = firstItem(); it; it = it->nextItem() ) { if ( it->isSelected() ) { ++count; } } QPixmap pixmap; if ( count > 1 ) { pixmap = KIconLoader::global()->loadIcon( "mail-attachment", KIconLoader::Desktop ); } if ( pixmap.isNull() ) { pixmap = static_cast<AttachmentIconItem *>( currentItem() )->icon(); } QPoint hotspot( pixmap.width() / 2, pixmap.height() / 2 ); QDrag *drag = new QDrag( this ); drag->setMimeData( mimeData() ); drag->setPixmap( pixmap ); drag->setHotSpot( hotspot ); drag->exec( Qt::CopyAction ); return 0; }
QMimeData *mimeData() { // create a list of the URL:s that we want to drag KUrl::List urls; QStringList labels; for ( Q3IconViewItem *it = firstItem(); it; it = it->nextItem() ) { if ( it->isSelected() ) { AttachmentIconItem *item = static_cast<AttachmentIconItem *>( it ); if ( item->isBinary() ) { urls.append( tempFileForAttachment( item->attachment() ) ); } else { urls.append( item->uri() ); } labels.append( KUrl::toPercentEncoding( item->label() ) ); } } if ( selectionMode() == Q3IconView::NoSelection ) { AttachmentIconItem *item = static_cast<AttachmentIconItem *>( currentItem() ); if ( item ) { urls.append( item->uri() ); labels.append( KUrl::toPercentEncoding( item->label() ) ); } } QMap<QString, QString> metadata; metadata["labels"] = labels.join( ":" ); QMimeData *mimeData = new QMimeData; urls.populateMimeData( mimeData, metadata ); return mimeData; }
void KOEditorAttachments::slotShow() { for ( Q3IconViewItem *item = mAttachments->firstItem(); item; item = item->nextItem() ) { if ( item->isSelected() ) { showAttachment( item ); } } }
void KOEditorAttachments::selectionChanged() { bool selected = false; for ( Q3IconViewItem *item = mAttachments->firstItem(); item; item = item->nextItem() ) { if ( item->isSelected() ) { selected = true; break; } } mRemoveBtn->setEnabled( selected ); }
void KOEditorAttachments::slotEdit() { for ( Q3IconViewItem *item = mAttachments->firstItem(); item; item = item->nextItem() ) { if ( item->isSelected() ) { AttachmentIconItem *attitem = static_cast<AttachmentIconItem*>( item ); if ( !attitem || !attitem->attachment() ) { return; } AttachmentEditDialog *dialog = new AttachmentEditDialog( attitem, mAttachments, false ); dialog->setModal( false ); connect( dialog, SIGNAL(hidden()), dialog, SLOT(delayedDestruct()) ); dialog->show(); } } }
/*! \internal */ QVector<int> QAccessibleIconView::selection() const { QVector<int> array; uint size = 0; int id = 1; array.resize(iconView()->count()); Q3IconViewItem *item = iconView()->firstItem(); while (item) { if (item->isSelected()) { ++size; array[(int)size-1] = id; } item = item->nextItem(); ++id; } array.resize(size); return array; }