35 #include <QApplication>
40 KUrlDragPushButton(
QWidget *parent)
45 ~KUrlDragPushButton() {}
47 void setURL(
const KUrl& url )
59 QDrag *drag =
new QDrag(
this);
60 QMimeData *mimeData =
new QMimeData;
61 m_urls.populateMimeData(mimeData);
62 drag->setMimeData(mimeData);
72 class KUrlRequester::KUrlRequesterPrivate
83 ~KUrlRequesterPrivate()
94 if (combo->isEditable())
96 combo->setEditText( text );
100 int i = combo->findText( text );
103 combo->addItem( text );
104 combo->setCurrentIndex( combo->count()-1 );
108 combo->setCurrentIndex( i );
114 edit->setText( text );
118 void connectSignals(
QObject *receiver )
127 connect( sender, SIGNAL(editTextChanged(
QString)),
142 combo->setCompletionObject( comp );
144 edit->setCompletionObject( comp );
148 return combo ? combo->currentText() : edit->text();
163 return KUrl( comp->replacedPath( txt ) );
169 void _k_slotUpdateUrl();
170 void _k_slotOpenDialog();
171 void _k_slotFileDialogFinished();
177 KFile::Modes fileDialogMode;
179 #ifndef KDE_NO_DEPRECATED
184 KUrlDragPushButton *myButton;
193 :
KHBox( parent),d(new KUrlRequesterPrivate(this))
196 editWidget->setParent(
this );
197 d->combo = qobject_cast<
KComboBox*>( editWidget );
198 d->edit = qobject_cast<
KLineEdit*>( editWidget );
200 d->edit->setClearButtonShown(
true );
208 :
KHBox( parent),d(new KUrlRequesterPrivate(this))
215 :
KHBox( parent),d(new KUrlRequesterPrivate(this))
227 void KUrlRequester::KUrlRequesterPrivate::init()
229 m_parent->setMargin(0);
230 m_parent->setSpacing(-1);
233 fileDialogModality = Qt::ApplicationModal;
235 if ( !combo && !edit ) {
237 edit->setClearButtonShown(
true );
242 myButton = new KUrlDragPushButton(m_parent);
243 myButton->setIcon(
KIcon("document-
open"));
244 int buttonSize = myButton->sizeHint().expandedTo(widget->sizeHint()).height();
245 myButton->setFixedSize(buttonSize, buttonSize);
246 myButton->setToolTip(i18n("Open file dialog"));
248 m_parent->connect(myButton, SIGNAL(pressed()), SLOT(_k_slotUpdateUrl()));
250 widget->installEventFilter( m_parent );
251 m_parent->setFocusProxy( widget );
252 m_parent->setFocusPolicy(Qt::StrongFocus);
254 connectSignals( m_parent );
255 m_parent->connect(myButton, SIGNAL(clicked()), m_parent, SLOT(_k_slotOpenDialog()));
258 setCompletionObject( myCompletion );
261 openAction->setShortcut(KStandardShortcut::Open);
262 m_parent->connect(openAction, SIGNAL(triggered(
bool)), SLOT(_k_slotOpenDialog()));
270 #ifndef KDE_NO_DEPRECATED
291 if (e->type()==QEvent::WindowTitleChange) {
292 if (d->myFileDialog) {
293 d->myFileDialog->setCaption(windowTitle());
306 return d->m_startDir;
314 void KUrlRequester::KUrlRequesterPrivate::_k_slotOpenDialog()
317 if ( myFileDialog->isVisible() )
320 myFileDialog->raise();
321 myFileDialog->activateWindow();
328 (myFileDialog->mode() & (KFile::File |
KFile::Files)) == 0) )
330 const KUrl openUrl = (!m_parent->url().isEmpty() && !m_parent->url().isRelative() )
331 ? m_parent->
url() : m_startDir;
341 if ( newurl.isValid() )
343 m_parent->setUrl( newurl );
344 emit m_parent->urlSelected( url() );
349 emit m_parent->openFileDialog( m_parent );
354 if ( !url().isEmpty() && !url().isRelative() ) {
364 if ( dlg->windowModality() != fileDialogModality )
365 dlg->setWindowModality(fileDialogModality);
367 if ( fileDialogModality == Qt::NonModal )
376 void KUrlRequester::KUrlRequesterPrivate::_k_slotFileDialogFinished()
381 if ( myFileDialog->result() == QDialog::Accepted )
383 KUrl newUrl = myFileDialog->selectedUrl();
384 if ( newUrl.isValid() )
386 m_parent->setUrl( newUrl );
387 emit m_parent->urlSelected( url() );
395 d->fileDialogMode =
mode;
396 if ( (mode & KFile::Directory) && !(mode & KFile::File) )
399 if (d->myFileDialog) {
400 d->myFileDialog->setMode(d->fileDialogMode);
406 return d->fileDialogMode;
411 d->fileDialogFilter =
filter;
412 if (d->myFileDialog) {
413 d->myFileDialog->setFilter(d->fileDialogFilter);
419 return d->fileDialogFilter;
424 if (!d->myFileDialog) {
427 d->myFileDialog->setMode(d->fileDialogMode);
428 d->myFileDialog->setCaption(windowTitle());
429 d->myFileDialog->setWindowModality(d->fileDialogModality);
430 connect(d->myFileDialog, SIGNAL(finished()), SLOT(_k_slotFileDialogFinished()));
433 return d->myFileDialog;
451 void KUrlRequester::KUrlRequesterPrivate::_k_slotUpdateUrl()
454 myButton->setURL( u );
459 if ( ( d->edit == obj ) || ( d->combo == obj ) )
461 if (( ev->type() == QEvent::FocusIn ) || ( ev->type() == QEvent::FocusOut ))
463 QApplication::sendEvent(
this, ev );
475 return d->myCompletion;
481 d->edit->setClickMessage(msg);
487 return d->edit->clickMessage();
494 return d->fileDialogModality;
499 d->fileDialogModality = modality;
502 #ifndef KDE_NO_DEPRECATED
508 setSizePolicy(QSizePolicy( QSizePolicy::Preferred,
509 QSizePolicy::Fixed));
512 if ( !edit && d->combo )
513 edit = qobject_cast<
KLineEdit*>( d->combo->lineEdit() );
517 kWarning() <<
"KUrlRequester's lineedit is not a KLineEdit!??\n";
521 d->editor.setRepresentationWidget(
this);
522 d->editor.setLineEdit(edit);
531 #include "kurlrequester.moc"