59 #include <QtGui/QCheckBox>
60 #include <QtGui/QDockWidget>
61 #include <QtGui/QLayout>
62 #include <QtGui/QLabel>
63 #include <QtGui/QLineEdit>
64 #include <QtGui/QSplitter>
65 #include <QtGui/QAbstractProxyModel>
66 #include <QtGui/QHelpEvent>
67 #include <QtGui/QApplication>
68 #include <QtCore/QFSFileEngine>
73 class KFileWidgetPrivate
81 placesViewSplitter(0),
83 labeledCustomWidget(0),
84 bottomCustomWidget(0),
85 autoSelectExtCheckBox(0),
92 autoSelectExtChecked(false),
95 hasDefaultFilter(false),
98 confirmOverwrite(false),
99 differentHierarchyLevelItemsEntered(false),
105 ~KFileWidgetPrivate()
107 delete bookmarkHandler;
111 void updateLocationWhatsThis();
112 void updateAutoSelectExtension();
117 void setNonExtSelection();
118 void setLocationText(
const KUrl&);
120 void appendExtension(
KUrl &url);
121 void updateLocationEditExtension(
const QString &);
143 void multiSelectionChanged();
154 void setDummyHistoryEntry(
const QString& text,
const QPixmap& icon = QPixmap(),
155 bool usePreviousPixmapIfNull =
true);
160 void removeDummyHistoryEntry();
168 bool toOverwrite(
const KUrl&);
171 void _k_slotLocationChanged(
const QString& );
172 void _k_urlEntered(
const KUrl& );
173 void _k_enterUrl(
const KUrl& );
174 void _k_enterUrl(
const QString& );
175 void _k_locationAccepted(
const QString& );
176 void _k_slotFilterChanged();
177 void _k_fileHighlighted(
const KFileItem& );
178 void _k_fileSelected(
const KFileItem& );
179 void _k_slotLoadingFinished();
180 void _k_fileCompletion(
const QString& );
181 void _k_toggleSpeedbar(
bool );
182 void _k_toggleBookmarks(
bool );
183 void _k_slotAutoSelectExtClicked();
184 void _k_placesViewSplitterMoved(
int,
int);
185 void _k_activateUrlNavigator();
186 void _k_zoomOutIconsSize();
187 void _k_zoomInIconsSize();
188 void _k_slotIconSizeSliderMoved(
int);
189 void _k_slotIconSizeChanged(
int);
191 void addToRecentDocuments();
193 QString locationEditCurrentText()
const;
202 void setInlinePreviewShown(
bool show);
214 QBoxLayout *boxLayout;
225 QDockWidget *placesDock;
227 QSplitter *placesViewSplitter;
237 QCheckBox *autoSelectExtCheckBox;
257 QTimer filterDelayTimer;
262 bool autoSelectExtChecked : 1;
266 bool keepLocation : 1;
272 bool hasDefaultFilter : 1;
273 bool autoDirectoryFollowing : 1;
277 bool confirmOverwrite : 1;
278 bool differentHierarchyLevelItemsEntered;
281 QSlider *iconSizeSlider;
286 static const
char autocompletionWhatsThisText[] = I18N_NOOP("<qt>While typing in the text area, you may be presented "
287 "with possible matches. "
288 "This feature can be controlled by clicking with the right mouse button "
289 "and selecting a preferred mode from the <b>Text Completion</b> menu.</qt>");
294 int len =
string.length();
295 static const char prot[] =
":/";
296 for (
int i=0; i < len;) {
297 i =
string.indexOf( QLatin1String(prot), i );
301 for (; j >= 0; j--) {
302 const QChar& ch(
string[j] );
303 if (ch.toLatin1() == 0 || !ch.isLetter())
305 if (ch.isSpace() && (i-j-1) >= 2)
318 KUrl startDir(_startDir);
323 d->okButton->setDefault(
true);
327 d->cancelButton->hide();
329 d->opsWidget =
new QWidget(
this);
330 QVBoxLayout *opsWidgetLayout =
new QVBoxLayout(d->opsWidget);
331 opsWidgetLayout->setMargin(0);
332 opsWidgetLayout->setSpacing(0);
334 d->toolbar =
new KToolBar(d->opsWidget,
true);
335 d->toolbar->setObjectName(
"KFileWidget::toolbar");
336 d->toolbar->setMovable(
false);
337 opsWidgetLayout->addWidget(d->toolbar);
343 d->url =
getStartUrl( startDir, d->fileClass, filename );
353 d->urlNavigator->setPlacesSelectorVisible(
false);
354 opsWidgetLayout->addWidget(d->urlNavigator);
359 foreach(
const QFileInfo &drive,QFSFileEngine::drives() )
393 d->ops->setObjectName(
"KFileWidget::ops" );
394 d->ops->setIsSaving(d->operationMode ==
Saving);
395 opsWidgetLayout->addWidget(d->ops);
396 connect(d->ops, SIGNAL(urlEntered(
KUrl)),
397 SLOT(_k_urlEntered(
KUrl)));
402 connect(d->ops, SIGNAL(finishedLoading()),
403 SLOT(_k_slotLoadingFinished()));
419 coll->
action(
"up" )->setWhatsThis(
i18n(
"<qt>Click this button to enter the parent folder.<br /><br />"
420 "For instance, if the current location is file:/home/%1 clicking this "
421 "button will take you to file:/home.</qt>",
KUser().loginName() ));
423 coll->
action(
"back" )->setWhatsThis(
i18n(
"Click this button to move backwards one step in the browsing history."));
424 coll->
action(
"forward" )->setWhatsThis(
i18n(
"Click this button to move forward one step in the browsing history."));
426 coll->
action(
"reload" )->setWhatsThis(
i18n(
"Click this button to reload the contents of the current location."));
427 coll->
action(
"mkdir" )->setShortcut( QKeySequence(Qt::Key_F10) );
428 coll->
action(
"mkdir" )->setWhatsThis(
i18n(
"Click this button to create a new folder."));
430 KAction *goToNavigatorAction = coll->
addAction(
"gotonavigator",
this, SLOT(_k_activateUrlNavigator()) );
431 goToNavigatorAction->
setShortcut( QKeySequence(Qt::CTRL + Qt::Key_L) );
435 coll->
addAction(
"toggleSpeedbar", showSidebarAction);
436 showSidebarAction->
setShortcut( QKeySequence(Qt::Key_F9) );
437 connect( showSidebarAction, SIGNAL(toggled(
bool)),
438 SLOT(_k_toggleSpeedbar(
bool)) );
442 coll->
addAction(
"toggleBookmarks", showBookmarksAction);
443 connect( showBookmarksAction, SIGNAL(toggled(
bool)),
444 SLOT(_k_toggleBookmarks(
bool)) );
448 menu->setWhatsThis(
i18n(
"<qt>This is the preferences menu for the file dialog. "
449 "Various options can be accessed from this menu including: <ul>"
450 "<li>how files are sorted in the list</li>"
451 "<li>types of view, including icon and list</li>"
452 "<li>showing of hidden files</li>"
453 "<li>the Places navigation panel</li>"
454 "<li>file previews</li>"
455 "<li>separating folders from files</li></ul></qt>"));
464 KShortcut( QKeySequence(Qt::ALT + Qt::Key_Period), QKeySequence(Qt::Key_F8) ) );
469 coll->
action(
"inline preview" )->setShortcut( QKeySequence(Qt::Key_F11) );
473 connect( menu->
menu(), SIGNAL(aboutToShow()),
474 d->ops, SLOT(updateSelectionDependentActions()));
476 d->iconSizeSlider =
new QSlider(
this);
477 d->iconSizeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
478 d->iconSizeSlider->setOrientation(Qt::Horizontal);
479 d->iconSizeSlider->setMinimum(0);
480 d->iconSizeSlider->setMaximum(100);
481 d->iconSizeSlider->installEventFilter(
this);
482 connect(d->iconSizeSlider, SIGNAL(valueChanged(
int)),
483 d->ops, SLOT(setIconsZoom(
int)));
484 connect(d->iconSizeSlider, SIGNAL(valueChanged(
int)),
485 this, SLOT(_k_slotIconSizeChanged(
int)));
486 connect(d->iconSizeSlider, SIGNAL(sliderMoved(
int)),
487 this, SLOT(_k_slotIconSizeSliderMoved(
int)));
488 connect(d->ops, SIGNAL(currentIconSizeChanged(
int)),
489 d->iconSizeSlider, SLOT(setValue(
int)));
492 connect(furtherAction, SIGNAL(triggered()), SLOT(_k_zoomOutIconsSize()));
494 connect(closerAction, SIGNAL(triggered()), SLOT(_k_zoomInIconsSize()));
497 midSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
500 separator->setSeparator(
true);
503 separator2->setSeparator(
true);
505 d->toolbar->addAction(coll->
action(
"back" ));
506 d->toolbar->addAction(coll->
action(
"forward"));
507 d->toolbar->addAction(coll->
action(
"up"));
508 d->toolbar->addAction(coll->
action(
"reload"));
509 d->toolbar->addAction(separator);
510 d->toolbar->addAction(coll->
action(
"inline preview"));
511 d->toolbar->addWidget(midSpacer);
512 d->toolbar->addAction(furtherAction);
513 d->toolbar->addWidget(d->iconSizeSlider);
514 d->toolbar->addAction(closerAction);
515 d->toolbar->addAction(separator2);
516 d->toolbar->addAction(coll->
action(
"mkdir"));
517 d->toolbar->addAction(menu);
519 d->toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly);
520 d->toolbar->setMovable(
false);
526 connect( d->urlNavigator, SIGNAL(urlChanged(
KUrl)),
527 this, SLOT(_k_enterUrl(
KUrl)));
528 connect( d->urlNavigator, SIGNAL(returnPressed()),
529 d->ops, SLOT(setFocus()));
534 d->locationLabel =
new QLabel(
i18n(
"&Name:"),
this);
536 d->locationEdit->installEventFilter(
this);
540 d->locationEdit->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
541 connect( d->locationEdit, SIGNAL(editTextChanged(
QString)),
542 SLOT(_k_slotLocationChanged(
QString)) );
544 d->updateLocationWhatsThis();
545 d->locationLabel->setBuddy(d->locationEdit);
548 d->locationEdit->setCompletionObject( fileCompletionObj );
549 d->locationEdit->setAutoDeleteCompletionObject(
true );
550 connect( fileCompletionObj, SIGNAL(match(
QString)),
551 SLOT(_k_fileCompletion(
QString)) );
553 connect(d->locationEdit, SIGNAL(returnPressed(
QString)),
554 this, SLOT(_k_locationAccepted(
QString)));
557 whatsThisText =
i18n(
"<qt>This is the filter to apply to the file list. "
558 "File names that do not match the filter will not be shown.<p>"
559 "You may select from one of the preset filters in the "
560 "drop down menu, or you may enter a custom filter "
561 "directly into the text area.</p><p>"
562 "Wildcards such as * and ? are allowed.</p></qt>");
563 d->filterLabel =
new QLabel(
i18n(
"&Filter:"),
this);
564 d->filterLabel->setWhatsThis(whatsThisText);
569 d->filterWidget->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
570 d->filterWidget->setWhatsThis(whatsThisText);
571 d->filterLabel->setBuddy(d->filterWidget);
572 connect(d->filterWidget, SIGNAL(
filterChanged()), SLOT(_k_slotFilterChanged()));
574 d->filterDelayTimer.setSingleShot(
true);
575 d->filterDelayTimer.setInterval(300);
576 connect(d->filterWidget, SIGNAL(editTextChanged(
QString)), &d->filterDelayTimer, SLOT(start()));
577 connect(&d->filterDelayTimer, SIGNAL(
timeout()), SLOT(_k_slotFilterChanged()));
581 d->autoSelectExtCheckBox =
new QCheckBox (
this);
582 d->autoSelectExtCheckBox->setStyleSheet(
QString(
"QCheckBox { padding-top: %1px; }").arg(KDialog::spacingHint()));
583 connect(d->autoSelectExtCheckBox, SIGNAL(clicked()), SLOT(_k_slotAutoSelectExtClicked()));
590 d->readConfig(viewConfigGroup);
592 coll->
action(
"inline preview")->setChecked(d->ops->isInlinePreviewShown());
593 d->iconSizeSlider->setValue(d->ops->iconsZoom());
607 bool statRes =
false;
608 if ( filename.isEmpty() )
616 kDebug(
kfile_area) <<
"statJob -> startDir" << startDir <<
"filename" << filename;
620 d->ops->setUrl(startDir,
true);
621 d->urlNavigator->setLocationUrl(startDir);
623 d->placesView->setUrl(startDir);
628 if (!filename.isEmpty()) {
629 QLineEdit* lineEdit = d->locationEdit->lineEdit();
632 d->setLocationText(filename);
634 lineEdit->setText(filename);
636 lineEdit->setModified(
true);
638 lineEdit->selectAll();
641 d->locationEdit->setFocus();
654 d->locationLabel->setText(text);
659 int pos = filter.indexOf(
'/');
664 if (pos > 0 && filter[pos - 1] !=
'\\') {
665 QStringList filters = filter.split(
' ', QString::SkipEmptyParts);
674 for (pos = 0; (pos = copy.indexOf(
"\\/", pos)) != -1; ++pos)
677 d->ops->clearFilter();
678 d->filterWidget->setFilter(copy);
679 d->ops->setNameFilter(d->filterWidget->currentFilter());
681 d->hasDefaultFilter =
false;
682 d->filterWidget->setEditable(
true );
684 d->updateAutoSelectExtension ();
689 return d->filterWidget->currentFilter();
695 d->filterWidget->setMimeFilter( mimeTypes, defaultType );
697 QStringList types = d->filterWidget->currentFilter().split(
' ', QString::SkipEmptyParts);
698 types.append( QLatin1String(
"inode/directory" ));
699 d->ops->clearFilter();
700 d->ops->setMimeFilter( types );
701 d->hasDefaultFilter = !defaultType.isEmpty();
702 d->filterWidget->setEditable( !d->hasDefaultFilter ||
703 d->operationMode !=
Saving );
705 d->updateAutoSelectExtension ();
710 d->filterWidget->setFilter(
QString() );
711 d->ops->clearFilter();
712 d->hasDefaultFilter =
false;
713 d->filterWidget->setEditable(
true );
715 d->updateAutoSelectExtension ();
720 int i = d->filterWidget->currentIndex();
721 if (d->filterWidget->showsAllTypes() && i == 0)
724 return d->filterWidget->filters()[i];
733 d->ops->setPreviewWidget(w);
734 d->ops->clearHistory();
738 KUrl KFileWidgetPrivate::getCompleteUrl(
const QString &_url)
const
745 if (QDir::isAbsolutePath(url)) {
748 KUrl relativeUrlTest(ops->url());
750 if (!ops->dirLister()->findByUrl(relativeUrlTest).isNull() ||
769 KUrl::List locationEditCurrentTextList(d->tokenize(locationEditCurrentText));
770 KFile::Modes
mode = d->ops->mode();
773 if (!locationEditCurrentTextList.count()) {
785 if (locationEditCurrentTextList.count() > 1) {
786 if (mode & KFile::File) {
788 i18n(
"You can only select one file"),
789 i18n(
"More than one file provided"));
813 if (!d->differentHierarchyLevelItemsEntered) {
824 while (!res && start < locationEditCurrentTextList.count()) {
825 topMostUrl = locationEditCurrentTextList.at(start);
841 for (
int i = start; i < locationEditCurrentTextList.count(); ++i) {
842 KUrl currUrl = locationEditCurrentTextList.at(i);
853 topMostUrl = topMostUrl.
upUrl();
859 for (
int i = 0; i < locationEditCurrentTextList.count(); ++i) {
860 locationEditCurrentTextList[i] =
KUrl::relativeUrl(topMostUrl, locationEditCurrentTextList[i]);
863 d->ops->setUrl(topMostUrl,
true);
864 const bool signalsBlocked = d->locationEdit->lineEdit()->blockSignals(
true);
866 foreach (
const KUrl &url, locationEditCurrentTextList) {
869 d->locationEdit->lineEdit()->setText(
QString(
"\"%1\"").arg(stringList.join(
"\" \"")));
870 d->locationEdit->lineEdit()->blockSignals(signalsBlocked);
872 d->differentHierarchyLevelItemsEntered =
true;
879 }
else if (locationEditCurrentTextList.count()) {
883 (QDir::isAbsolutePath(locationEditCurrentText) ||
887 KUrl url(locationEditCurrentText);
888 if (d->operationMode ==
Opening) {
901 KUrl directory = url;
914 d->ops->setUrl(url,
true);
915 const bool signalsBlocked = d->locationEdit->lineEdit()->blockSignals(
true);
916 d->locationEdit->lineEdit()->setText(fileName);
917 d->locationEdit->lineEdit()->blockSignals(signalsBlocked);
924 d->differentHierarchyLevelItemsEntered =
false;
930 bool onlyDirectoryMode = directoryMode && !(mode &
KFile::File) && !(mode & KFile::Files);
931 KUrl::List::ConstIterator it = locationEditCurrentTextList.constBegin();
932 bool filesInList =
false;
933 while (it != locationEditCurrentTextList.constEnd()) {
936 if (d->operationMode ==
Saving && !directoryMode) {
937 d->appendExtension(url);
953 i18n(
"You can only select local files"),
954 i18n(
"Remote files not accepted"));
958 if ((d->operationMode ==
Saving) && d->confirmOverwrite && !d->toOverwrite(url)) {
967 while (it != locationEditCurrentTextList.constEnd()) {
972 KMessageBox::sorry(
this,
i18n(
"More than one folder has been selected and this dialog does not accept folders, so it is not possible to decide which one to enter. Please select only one folder to list it."),
i18n(
"More than one folder provided"));
980 KMessageBox::information(
this,
i18n(
"At least one folder and one file has been selected. Selected files will be ignored and the selected folder will be listed"),
i18n(
"Files and folders selected"));
982 d->ops->setUrl(url,
true);
983 const bool signalsBlocked = d->locationEdit->lineEdit()->blockSignals(
true);
984 d->locationEdit->lineEdit()->setText(
QString());
985 d->locationEdit->lineEdit()->blockSignals(signalsBlocked);
1010 *lastDirectory = d->ops->url();
1011 if (!d->fileClass.isEmpty())
1015 d->locationEdit->setItemText( 0,
QString() );
1019 int atmost = d->locationEdit->maxItems();
1020 for ( ; it != list.end() && atmost > 0; ++it ) {
1021 const KUrl& url = *it;
1028 for (
int i = 1; i < d->locationEdit->count(); i++ ) {
1029 if ( d->locationEdit->itemText( i ) == file ) {
1030 d->locationEdit->removeItem( i-- );
1037 d->locationEdit->insertItem( 1,file);
1043 d->writeConfig(grp);
1044 d->saveRecentFiles(grp);
1046 d->addToRecentDocuments();
1057 void KFileWidgetPrivate::_k_fileHighlighted(
const KFileItem &i)
1060 (locationEdit->hasFocus() && !locationEdit->currentText().isEmpty()))
1063 const bool modified = locationEdit->lineEdit()->isModified();
1068 setLocationText(
KUrl());
1075 if (!locationEdit->hasFocus()) {
1076 setLocationText( url );
1079 emit q->fileHighlighted(url.url());
1080 emit q->fileHighlighted(url);
1082 multiSelectionChanged();
1083 emit q->selectionChanged();
1086 locationEdit->lineEdit()->setModified(
false );
1087 locationEdit->lineEdit()->selectAll();
1090 void KFileWidgetPrivate::_k_fileSelected(
const KFileItem &i)
1098 setLocationText(
KUrl());
1101 setLocationText(i.
url());
1103 multiSelectionChanged();
1104 emit q->selectionChanged();
1110 locationEdit->setFocus();
1119 void KFileWidgetPrivate::multiSelectionChanged()
1121 if (locationEdit->hasFocus() && !locationEdit->currentText().isEmpty()) {
1127 if (list.isEmpty()) {
1128 setLocationText(
KUrl());
1132 setLocationText(list.
urlList());
1135 void KFileWidgetPrivate::setDummyHistoryEntry(
const QString& text,
const QPixmap& icon,
1136 bool usePreviousPixmapIfNull )
1141 QObject::disconnect( locationEdit, SIGNAL(editTextChanged(
QString)),
1142 q, SLOT(_k_slotLocationChanged(
QString)) );
1144 bool dummyExists = dummyAdded;
1146 int cursorPosition = locationEdit->lineEdit()->cursorPosition();
1149 if ( !icon.isNull() ) {
1150 locationEdit->setItemIcon( 0, icon );
1151 locationEdit->setItemText( 0, text );
1153 if ( !usePreviousPixmapIfNull ) {
1154 locationEdit->setItemIcon( 0, QPixmap() );
1156 locationEdit->setItemText( 0, text );
1159 if ( !text.isEmpty() ) {
1160 if ( !icon.isNull() ) {
1161 locationEdit->insertItem( 0, icon, text );
1163 if ( !usePreviousPixmapIfNull ) {
1164 locationEdit->insertItem( 0, QPixmap(), text );
1166 locationEdit->insertItem( 0, text );
1174 if ( dummyExists && !text.isEmpty() ) {
1175 locationEdit->setCurrentIndex( 0 );
1178 locationEdit->lineEdit()->setCursorPosition( cursorPosition );
1180 QObject::connect( locationEdit, SIGNAL(editTextChanged(
QString)),
1181 q, SLOT(_k_slotLocationChanged(
QString)) );
1184 void KFileWidgetPrivate::removeDummyHistoryEntry()
1186 if ( !dummyAdded ) {
1193 QObject::disconnect( locationEdit, SIGNAL(editTextChanged(
QString)),
1194 q, SLOT(_k_slotLocationChanged(
QString)) );
1196 if (locationEdit->count()) {
1197 locationEdit->removeItem( 0 );
1199 locationEdit->setCurrentIndex( -1 );
1202 QObject::connect( locationEdit, SIGNAL(editTextChanged(
QString)),
1203 q, SLOT(_k_slotLocationChanged(
QString)) );
1206 void KFileWidgetPrivate::setLocationText(
const KUrl& url)
1208 if (!url.isEmpty()) {
1215 q->setUrl(u,
false);
1218 q->setUrl(url.
path(),
false);
1221 setDummyHistoryEntry(url.
fileName() , mimeTypeIcon);
1223 removeDummyHistoryEntry();
1228 setNonExtSelection();
1241 if (relPath.startsWith(
"./")) {
1242 relPath = relPath.mid(2);
1250 void KFileWidgetPrivate::setLocationText(
const KUrl::List& urlList )
1252 const KUrl currUrl = ops->
url();
1254 if ( urlList.count() > 1 ) {
1256 foreach (
const KUrl &url, urlList) {
1259 urls = urls.left( urls.size() - 1 );
1261 setDummyHistoryEntry( urls, QPixmap(),
false );
1262 }
else if ( urlList.count() == 1 ) {
1266 removeDummyHistoryEntry();
1271 setNonExtSelection();
1274 void KFileWidgetPrivate::updateLocationWhatsThis()
1279 whatsThisText =
"<qt>" +
i18n(
"This is the name to save the file as.") +
1280 i18n (autocompletionWhatsThisText);
1284 whatsThisText =
"<qt>" +
i18n(
"This is the list of files to open. More than "
1285 "one file can be specified by listing several "
1286 "files, separated by spaces.") +
1287 i18n (autocompletionWhatsThisText);
1291 whatsThisText =
"<qt>" +
i18n(
"This is the name of the file to open.") +
1292 i18n (autocompletionWhatsThisText);
1295 locationLabel->setWhatsThis(whatsThisText);
1296 locationEdit->setWhatsThis(whatsThisText);
1299 void KFileWidgetPrivate::initSpeedbar()
1305 placesDock =
new QDockWidget(
i18nc(
"@title:window",
"Places"), q);
1306 placesDock->setFeatures(QDockWidget::DockWidgetClosable);
1309 placesView->setModel(model);
1310 placesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1312 placesView->setObjectName(QLatin1String(
"url bar"));
1313 QObject::connect(placesView, SIGNAL(urlChanged(
KUrl)),
1314 q, SLOT(_k_enterUrl(
KUrl)));
1320 placesView->setUrl(url);
1322 placesDock->setWidget(placesView);
1323 placesViewSplitter->insertWidget(0, placesDock);
1327 placesViewWidth = configGroup.readEntry(SpeedbarWidth, placesView->sizeHint().width());
1329 QList<int> sizes = placesViewSplitter->sizes();
1330 if (placesViewWidth > 0) {
1331 sizes[0] = placesViewWidth + 1;
1332 sizes[1] = q->width() - placesViewWidth -1;
1333 placesViewSplitter->setSizes(sizes);
1336 QObject::connect(placesDock, SIGNAL(visibilityChanged(
bool)),
1337 q, SLOT(_k_toggleSpeedbar(
bool)));
1340 void KFileWidgetPrivate::initGUI()
1344 boxLayout =
new QVBoxLayout( q);
1345 boxLayout->setMargin(0);
1347 placesViewSplitter =
new QSplitter(q);
1348 placesViewSplitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
1349 placesViewSplitter->setChildrenCollapsible(
false);
1350 boxLayout->addWidget(placesViewSplitter);
1352 QObject::connect(placesViewSplitter, SIGNAL(splitterMoved(
int,
int)),
1353 q, SLOT(_k_placesViewSplitterMoved(
int,
int)));
1354 placesViewSplitter->insertWidget(0, opsWidget);
1356 vbox =
new QVBoxLayout();
1358 boxLayout->addLayout(vbox);
1360 lafBox =
new QGridLayout();
1362 lafBox->addWidget(locationLabel, 0, 0, Qt::AlignVCenter | Qt::AlignRight);
1363 lafBox->addWidget(locationEdit, 0, 1, Qt::AlignVCenter);
1364 lafBox->addWidget(okButton, 0, 2, Qt::AlignVCenter);
1366 lafBox->addWidget(filterLabel, 1, 0, Qt::AlignVCenter | Qt::AlignRight);
1367 lafBox->addWidget(filterWidget, 1, 1, Qt::AlignVCenter);
1368 lafBox->addWidget(cancelButton, 1, 2, Qt::AlignVCenter);
1370 lafBox->setColumnStretch(1, 4);
1372 vbox->addLayout(lafBox);
1375 vbox->addWidget(autoSelectExtCheckBox);
1377 q->setTabOrder(ops, autoSelectExtCheckBox);
1378 q->setTabOrder(autoSelectExtCheckBox, locationEdit);
1379 q->setTabOrder(locationEdit, filterWidget);
1380 q->setTabOrder(filterWidget, okButton);
1381 q->setTabOrder(okButton, cancelButton);
1382 q->setTabOrder(cancelButton, urlNavigator);
1383 q->setTabOrder(urlNavigator, ops);
1384 q->setTabOrder(cancelButton, urlNavigator);
1385 q->setTabOrder(urlNavigator, ops);
1389 void KFileWidgetPrivate::_k_slotFilterChanged()
1393 filterDelayTimer.stop();
1395 QString filter = filterWidget->currentFilter();
1398 if ( filter.contains(
'/') ) {
1400 types.prepend(
"inode/directory");
1401 ops->setMimeFilter( types );
1403 else if ( filter.contains(
'*') || filter.contains(
'?') || filter.contains(
'[') ) {
1404 ops->setNameFilter( filter );
1407 ops->setNameFilter(
'*' + filter.replace(
' ',
'*') +
'*');
1412 updateAutoSelectExtension();
1414 emit q->filterChanged(filter);
1422 d->ops->setUrl(url, clearforward);
1426 void KFileWidgetPrivate::_k_urlEntered(
const KUrl& url)
1430 QString filename = locationEditCurrentText();
1433 if (pathCombo->count() != 0) {
1437 bool blocked = locationEdit->blockSignals(
true);
1439 locationEdit->changeUrl(0,
KIcon(KMimeType::iconNameForUrl(filename)), filename);
1440 locationEdit->lineEdit()->setModified(
true);
1443 locationEdit->blockSignals( blocked );
1445 urlNavigator->setLocationUrl(url);
1450 completion->setDir( url.
path() );
1454 placesView->setUrl( url );
1458 void KFileWidgetPrivate::_k_locationAccepted(
const QString &url)
1465 void KFileWidgetPrivate::_k_enterUrl(
const KUrl& url )
1469 KUrl fixedUrl( url );
1473 q->setUrl( fixedUrl );
1474 if (!locationEdit->hasFocus())
1478 void KFileWidgetPrivate::_k_enterUrl(
const QString& url )
1482 _k_enterUrl(
KUrl( KUrlCompletion::replacedPath( url,
true,
true )) );
1485 bool KFileWidgetPrivate::toOverwrite(
const KUrl &url)
1494 i18n(
"The file \"%1\" already exists. Do you wish to overwrite it?" ,
1511 if (url.isEmpty()) {
1515 KUrl u = d->getCompleteUrl(url);
1517 kWarning() << url <<
" is not a correct argument for setSelection!";
1525 d->setLocationText(url);
1528 void KFileWidgetPrivate::_k_slotLoadingFinished()
1530 if (locationEdit->currentText().isEmpty()) {
1534 ops->blockSignals(
true);
1538 ops->setCurrentItem(url.
url());
1539 ops->blockSignals(
false);
1542 void KFileWidgetPrivate::_k_fileCompletion(
const QString& match )
1546 if (match.isEmpty() || locationEdit->currentText().contains(
'"')) {
1553 void KFileWidgetPrivate::_k_slotLocationChanged(
const QString& text )
1557 locationEdit->lineEdit()->setModified(
true);
1559 if (text.isEmpty() && ops->view()) {
1560 ops->view()->clearSelection();
1563 if (text.isEmpty()) {
1564 removeDummyHistoryEntry();
1566 setDummyHistoryEntry( text );
1569 if (!locationEdit->lineEdit()->text().isEmpty()) {
1572 foreach (
const KUrl &url, urlList) {
1573 stringList << url.
url();
1575 ops->setCurrentItems(stringList);
1596 if ( d->inAccept ) {
1598 list = d->parseSelectedUrls();
1600 list.append( d->url );
1606 KUrl::List& KFileWidgetPrivate::parseSelectedUrls()
1610 if ( filenames.isEmpty() ) {
1615 if ( filenames.contains(
'/' )) {
1623 urlList.append( u );
1626 i18n(
"The chosen filenames do not\n"
1627 "appear to be valid."),
1628 i18n(
"Invalid Filenames") );
1632 urlList = tokenize( filenames );
1646 KUrl u( ops->url() );
1650 const int count = line.count( QLatin1Char(
'"' ) );
1652 if (!QDir::isAbsolutePath(line)) {
1664 int index1 = -1, index2 = -1;
1666 index1 = line.indexOf(
'"', start );
1667 index2 = line.indexOf(
'"', index1 + 1 );
1669 if ( index1 < 0 || index2 < 0 )
1673 name = line.mid( index1 + 1, index2 - index1 - 1 );
1677 KUrl currUrl( name );
1679 if ( !QDir::isAbsolutePath(currUrl.
url()) ) {
1680 _u.setFileName( name );
1687 if ( _u.isValid() ) {
1702 if ( d->inAccept ) {
1703 const KUrl url = d->mostLocalUrl(d->url);
1708 i18n(
"You can only select local files."),
1709 i18n(
"Remote Files Not Accepted") );
1723 const KUrl::List urls = d->parseSelectedUrls();
1725 while (it != urls.end()) {
1726 KUrl url = d->mostLocalUrl(*it);
1734 if ( d->url.isLocalFile() )
1735 list.append( d->url.toLocalFile() );
1744 return d->ops->url();
1749 QWidget::resizeEvent(event);
1751 if (d->placesDock) {
1754 QList<int> sizes = d->placesViewSplitter->sizes();
1755 sizes[0] = d->placesViewWidth + 1;
1756 sizes[1] = width() - d->placesViewWidth - 1;
1757 d->placesViewSplitter->setSizes( sizes );
1763 if ( !d->hasView ) {
1767 d->ops->view()->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Maximum ) );
1770 d->ops->clearHistory();
1772 QWidget::showEvent(event);
1777 const bool res = QWidget::eventFilter(watched, event);
1779 QKeyEvent *keyEvent =
dynamic_cast<QKeyEvent*
>(event);
1780 if (watched == d->iconSizeSlider && keyEvent) {
1781 if (keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Up ||
1782 keyEvent->key() == Qt::Key_Right || keyEvent->key() == Qt::Key_Down) {
1783 d->_k_slotIconSizeSliderMoved(d->iconSizeSlider->value());
1785 }
else if (watched == d->locationEdit && event->type() == QEvent::KeyPress) {
1786 if (keyEvent->modifiers() & Qt::AltModifier) {
1787 switch (keyEvent->key()) {
1789 d->ops->actionCollection()->action(
"up")->trigger();
1792 d->ops->actionCollection()->action(
"back")->trigger();
1795 d->ops->actionCollection()->action(
"forward")->trigger();
1811 if ( d->ops->dirOnlyMode() ) {
1812 d->filterWidget->setDefaultFilter(
i18n(
"*|All Folders") );
1815 d->filterWidget->setDefaultFilter(
i18n(
"*|All Files") );
1818 d->updateAutoSelectExtension();
1823 return d->ops->mode();
1827 void KFileWidgetPrivate::readConfig(
KConfigGroup &configGroup)
1831 readRecentFiles(configGroup);
1833 ops->setViewConfig(configGroup);
1834 ops->readConfig(configGroup);
1839 DefaultRecentURLsNumber ) );
1840 combo->
setUrl( ops->url() );
1841 autoDirectoryFollowing = configGroup.
readEntry(AutoDirectoryFollowing,
1842 DefaultDirectoryFollowing);
1845 configGroup.
readEntry( PathComboCompletionMode,
1851 configGroup.
readEntry( LocationComboCompletionMode,
1854 locationEdit->setCompletionMode( cm );
1860 completion->setDir(ops->url().url());
1864 _k_toggleSpeedbar( configGroup.
readEntry( ShowSpeedbar,
true ) );
1867 _k_toggleBookmarks( configGroup.
readEntry(ShowBookmarks,
false) );
1870 autoSelectExtChecked = configGroup.
readEntry (AutoSelectExtChecked, DefaultAutoSelectExtChecked);
1871 updateAutoSelectExtension();
1874 urlNavigator->setUrlEditable( !configGroup.
readEntry(BreadcrumbNavigation,
true) );
1877 urlNavigator->setShowFullPath( configGroup.
readEntry(ShowFullPath,
false) );
1879 int w1 = q->minimumSize().width();
1880 int w2 = toolbar->sizeHint().width();
1882 q->setMinimumWidth(w2);
1885 void KFileWidgetPrivate::writeConfig(
KConfigGroup &configGroup)
1895 group.writePathEntry( RecentURLs, pathCombo->urls() );
1897 group.writeEntry( PathComboCompletionMode, static_cast<int>(pathCombo->completionMode()) );
1898 group.writeEntry( LocationComboCompletionMode, static_cast<int>(locationEdit->completionMode()) );
1900 const bool showSpeedbar = placesDock && !placesDock->isHidden();
1901 group.writeEntry( ShowSpeedbar, showSpeedbar );
1903 const QList<int> sizes = placesViewSplitter->sizes();
1904 Q_ASSERT( sizes.count() > 0 );
1905 group.writeEntry( SpeedbarWidth, sizes[0] );
1908 group.writeEntry( ShowBookmarks, bookmarkHandler != 0 );
1909 group.writeEntry( AutoSelectExtChecked, autoSelectExtChecked );
1910 group.writeEntry( BreadcrumbNavigation, !urlNavigator->isUrlEditable() );
1911 group.writeEntry( ShowFullPath, urlNavigator->showFullPath() );
1913 ops->writeConfig(group);
1917 void KFileWidgetPrivate::readRecentFiles(
KConfigGroup &cg)
1921 QObject::disconnect(locationEdit, SIGNAL(editTextChanged(
QString)),
1922 q, SLOT(_k_slotLocationChanged(
QString)));
1924 locationEdit->setMaxItems(cg.
readEntry(RecentFilesNumber, DefaultRecentURLsNumber));
1927 locationEdit->setCurrentIndex(-1);
1929 QObject::connect(locationEdit, SIGNAL(editTextChanged(
QString)),
1930 q, SLOT(_k_slotLocationChanged(
QString)));
1933 void KFileWidgetPrivate::saveRecentFiles(
KConfigGroup &cg)
1946 return d->cancelButton;
1957 d->writeConfig(grp);
1962 d->keepLocation = keep;
1967 return d->keepLocation;
1974 d->operationMode =
mode;
1975 d->keepLocation = (mode ==
Saving);
1976 d->filterWidget->setEditable( !d->hasDefaultFilter || mode !=
Saving );
1979 d->okButton->setGuiItem(
KGuiItem(
i18n(
"&Open" ),
"document-open") );
1982 }
else if ( mode ==
Saving ) {
1984 d->setNonExtSelection();
1988 d->updateLocationWhatsThis();
1989 d->updateAutoSelectExtension();
1992 d->ops->setIsSaving(mode ==
Saving);
1998 return d->operationMode;
2001 void KFileWidgetPrivate::_k_slotAutoSelectExtClicked()
2007 autoSelectExtChecked = autoSelectExtCheckBox->isChecked();
2010 updateLocationEditExtension (extension );
2013 void KFileWidgetPrivate::_k_placesViewSplitterMoved(
int pos,
int index)
2019 if (placesDock && index == 1) {
2020 placesViewWidth = pos;
2022 lafBox->setColumnMinimumWidth(0, placesViewWidth);
2026 void KFileWidgetPrivate::_k_activateUrlNavigator()
2030 urlNavigator->setUrlEditable(!urlNavigator->isUrlEditable());
2031 if(urlNavigator->isUrlEditable()) {
2032 urlNavigator->setFocus();
2033 urlNavigator->editor()->lineEdit()->selectAll();
2037 void KFileWidgetPrivate::_k_zoomOutIconsSize()
2039 const int currValue = ops->iconsZoom();
2040 const int futValue = qMax(0, currValue - 10);
2041 iconSizeSlider->setValue(futValue);
2042 _k_slotIconSizeSliderMoved(futValue);
2045 void KFileWidgetPrivate::_k_zoomInIconsSize()
2047 const int currValue = ops->iconsZoom();
2048 const int futValue = qMin(100, currValue + 10);
2049 iconSizeSlider->setValue(futValue);
2050 _k_slotIconSizeSliderMoved(futValue);
2053 void KFileWidgetPrivate::_k_slotIconSizeChanged(
int _value)
2056 int value = (maxSize * _value / 100) + KIconLoader::SizeSmall;
2058 case KIconLoader::SizeSmall:
2064 iconSizeSlider->setToolTip(
i18n(
"Icon size: %1 pixels (standard size)", value));
2067 iconSizeSlider->setToolTip(
i18n(
"Icon size: %1 pixels", value));
2072 void KFileWidgetPrivate::_k_slotIconSizeSliderMoved(
int _value)
2076 _k_slotIconSizeChanged(_value);
2078 QPoint global(iconSizeSlider->rect().topLeft());
2079 global.ry() += iconSizeSlider->height() / 2;
2080 QHelpEvent toolTipEvent(QEvent::ToolTip,
QPoint(0, 0), iconSizeSlider->mapToGlobal(global));
2081 QApplication::sendEvent(iconSizeSlider, &toolTipEvent);
2091 QStringList::ConstIterator patternListEnd = patternList.end();
2092 for (QStringList::ConstIterator it = patternList.begin();
2093 it != patternListEnd;
2105 if ((*it).startsWith (QLatin1String(
"*.")) &&
2106 (*it).length() > 2 &&
2107 (*it).indexOf(
'*', 2) < 0 && (*it).indexOf (
'?', 2) < 0)
2109 ret = (*it).mid (1);
2133 void KFileWidgetPrivate::updateAutoSelectExtension()
2135 if (!autoSelectExtCheckBox)
return;
2145 QString lastExtension = extension;
2155 QString filter = filterWidget->currentFilter();
2156 if (!filter.isEmpty())
2161 QString currentExtension = KMimeType::extractKnownExtension(locationEditCurrentText());
2162 if ( currentExtension.isEmpty() )
2163 currentExtension = locationEditCurrentText().section(QLatin1Char(
'.'), -1, -1);
2164 kDebug (kfile_area) <<
"filter:" << filter <<
"locationEdit:" << locationEditCurrentText()
2165 <<
"currentExtension:" << currentExtension;
2171 if (filter.indexOf (
'/') < 0)
2173 extensionList = filter.split(
' ', QString::SkipEmptyParts);
2179 KMimeType::Ptr mime = KMimeType::mimeType (filter);
2182 extensionList = mime->patterns();
2183 defaultExtension = mime->mainExtension();
2187 if ( !currentExtension.isEmpty() && extensionList.contains(QLatin1String(
"*.") + currentExtension) )
2188 extension = QLatin1Char(
'.') + currentExtension;
2190 extension = defaultExtension;
2192 kDebug (kfile_area) <<
"List:" << extensionList <<
"auto-selected extension:" << extension;
2201 if (!extension.isEmpty())
2204 autoSelectExtCheckBox->setText (i18n (
"Automatically select filename e&xtension (%1)", extension));
2205 whatsThisExtension =
i18n (
"the extension <b>%1</b>", extension);
2207 autoSelectExtCheckBox->setEnabled (
true);
2208 autoSelectExtCheckBox->setChecked (autoSelectExtChecked);
2213 autoSelectExtCheckBox->setText (i18n (
"Automatically select filename e&xtension"));
2214 whatsThisExtension =
i18n (
"a suitable extension");
2216 autoSelectExtCheckBox->setChecked (
false);
2217 autoSelectExtCheckBox->setEnabled (
false);
2222 autoSelectExtCheckBox->setWhatsThis(
"<qt>" +
2224 "This option enables some convenient features for "
2225 "saving files with extensions:<br />"
2227 "<li>Any extension specified in the <b>%1</b> text "
2228 "area will be updated if you change the file type "
2231 "<li>If no extension is specified in the <b>%2</b> "
2232 "text area when you click "
2233 "<b>Save</b>, %3 will be added to the end of the "
2234 "filename (if the filename does not already exist). "
2235 "This extension is based on the file type that you "
2236 "have chosen to save in.<br />"
2238 "If you do not want KDE to supply an extension for the "
2239 "filename, you can either turn this option off or you "
2240 "can suppress it by adding a period (.) to the end of "
2241 "the filename (the period will be automatically "
2245 "If unsure, keep this option enabled as it makes your "
2246 "files more manageable."
2254 autoSelectExtCheckBox->show();
2258 updateLocationEditExtension (lastExtension);
2263 autoSelectExtCheckBox->setChecked (
false);
2264 autoSelectExtCheckBox->hide();
2271 void KFileWidgetPrivate::updateLocationEditExtension (
const QString &lastExtension)
2273 if (!autoSelectExtCheckBox->isChecked() || extension.isEmpty())
2276 QString urlStr = locationEditCurrentText();
2277 if (urlStr.isEmpty())
2280 KUrl url = getCompleteUrl(urlStr);
2283 const int fileNameOffset = urlStr.lastIndexOf (
'/') + 1;
2284 QString fileName = urlStr.mid (fileNameOffset);
2286 const int dot = fileName.lastIndexOf (
'.');
2287 const int len = fileName.length();
2315 if (lastExtension.length() && fileName.endsWith (lastExtension))
2316 fileName.truncate (len - lastExtension.length());
2317 else if (extension.length() && fileName.endsWith (extension))
2318 fileName.truncate (len - extension.length());
2321 fileName.truncate (dot);
2324 const QString newText = urlStr.left (fileNameOffset) + fileName + extension;
2325 if ( newText != locationEditCurrentText() )
2327 locationEdit->setItemText(locationEdit->currentIndex(),urlStr.left (fileNameOffset) + fileName + extension);
2328 locationEdit->lineEdit()->setModified (
true);
2335 void KFileWidgetPrivate::updateFilter()
2340 QString urlStr = locationEditCurrentText();
2341 if (urlStr.isEmpty())
2344 if( filterWidget->isMimeFilter()) {
2345 KMimeType::Ptr mime = KMimeType::findByPath(urlStr, 0,
true);
2346 if (mime && mime->name() != KMimeType::defaultMimeType()) {
2347 if (filterWidget->currentFilter() != mime->name() &&
2348 filterWidget->filters().indexOf(mime->name()) != -1)
2349 filterWidget->setCurrentFilter(mime->name());
2352 QString filename = urlStr.mid( urlStr.lastIndexOf( KDIR_SEPARATOR ) + 1 );
2353 foreach(
const QString& filter, filterWidget->filters()) {
2354 QStringList patterns = filter.left( filter.indexOf(
'|' )).split (
' ', QString::SkipEmptyParts );
2355 foreach (
const QString& p, patterns ) {
2356 if( KMimeType::matchFileName( filename, p )) {
2358 filterWidget->setCurrentFilter( filter );
2369 void KFileWidgetPrivate::appendExtension (
KUrl &url)
2373 if (!autoSelectExtCheckBox->isChecked() || extension.isEmpty())
2377 if (fileName.isEmpty())
2382 const int len = fileName.length();
2383 const int dot = fileName.lastIndexOf (
'.');
2385 const bool suppressExtension = (dot == len - 1);
2386 const bool unspecifiedExtension = (dot <= 0);
2389 if (!(suppressExtension || unspecifiedExtension))
2402 if (suppressExtension)
2418 else if (unspecifiedExtension)
2428 void KFileWidgetPrivate::addToRecentDocuments()
2430 int m = ops->mode();
2436 QStringList::ConstIterator it = files.begin();
2437 for ( ; it != files.end() && atmost > 0; ++it ) {
2445 KUrl::List::ConstIterator it = urls.begin();
2446 for ( ; it != urls.end() && atmost > 0; ++it ) {
2447 if ( (*it).isValid() ) {
2457 return d->locationEdit;
2462 return d->filterWidget;
2467 return d->ops->actionCollection();
2470 void KFileWidgetPrivate::_k_toggleSpeedbar(
bool show)
2475 lafBox->setColumnMinimumWidth(0, placesViewWidth);
2479 homeURL.
setPath( QDir::homePath() );
2481 for (
int rowIndex = 0 ; rowIndex < model->
rowCount() ; rowIndex++) {
2482 QModelIndex index = model->
index(rowIndex, 0);
2486 toolbar->removeAction( ops->actionCollection()->action(
"home" ) );
2491 if (q->sender() == placesDock && placesDock && placesDock->isVisibleTo(q)) {
2501 QAction* homeAction = ops->actionCollection()->action(
"home");
2502 QAction* reloadAction = ops->actionCollection()->action(
"reload");
2503 if (!toolbar->actions().contains(homeAction)) {
2504 toolbar->insertAction(reloadAction, homeAction);
2508 lafBox->setColumnMinimumWidth(0, 0);
2511 static_cast<KToggleAction *
>(q->actionCollection()->action(
"toggleSpeedbar"))->setChecked(show);
2514 urlNavigator->setPlacesSelectorVisible(!show);
2517 void KFileWidgetPrivate::_k_toggleBookmarks(
bool show)
2521 if (bookmarkHandler)
2527 q->connect( bookmarkHandler, SIGNAL(openUrl(
QString)),
2531 bookmarkButton->setDelayed(
false);
2532 q->actionCollection()->addAction(
"bookmark", bookmarkButton);
2533 bookmarkButton->setMenu(bookmarkHandler->menu());
2534 bookmarkButton->setWhatsThis(
i18n(
"<qt>This button allows you to bookmark specific locations. "
2535 "Click on this button to open the bookmark menu where you may add, "
2536 "edit or select a bookmark.<br /><br />"
2537 "These bookmarks are specific to the file dialog, but otherwise operate "
2538 "like bookmarks elsewhere in KDE.</qt>"));
2539 toolbar->addAction(bookmarkButton);
2541 else if (bookmarkHandler)
2543 delete bookmarkHandler;
2544 bookmarkHandler = 0;
2545 delete bookmarkButton;
2549 static_cast<KToggleAction *
>(q->actionCollection()->action(
"toggleBookmarks"))->setChecked( show );
2558 return getStartUrl( startDir, recentDirClass, fileName );
2567 recentDirClass.clear();
2571 bool useDefaultStartDir = startDir.isEmpty();
2572 if ( !useDefaultStartDir )
2574 if ( startDir.
protocol() ==
"kfiledialog" )
2589 if ( urlDir ==
"/" )
2596 keyword = urlDir.mid( 1 );
2600 if ( startDir.
query() ==
"?global" )
2601 recentDirClass =
QString(
"::%1" ).arg( keyword );
2603 recentDirClass =
QString(
":%1" ).arg( keyword );
2613 (!startDir.scheme().isEmpty() && !startDir.
isLocalFile()))
2618 useDefaultStartDir =
true;
2625 useDefaultStartDir =
true;
2630 if ( useDefaultStartDir )
2632 if (lastDirectory->isEmpty()) {
2635 home.
setPath( QDir::homePath() );
2641 QDir::currentPath() != QDir::homePath() ||
2643 lastDirectory->setPath(QDir::currentPath());
2645 ret = *lastDirectory;
2648 kDebug(
kfile_area) <<
"for" << startDir <<
"->" << ret <<
"recentDirClass" << recentDirClass <<
"fileName" << fileName;
2654 if ( directory.isValid() )
2655 *lastDirectory = directory;
2658 void KFileWidgetPrivate::setNonExtSelection()
2661 QString filename = locationEditCurrentText();
2662 QString extension = KMimeType::extractKnownExtension( filename );
2664 if ( !extension.isEmpty() )
2665 locationEdit->lineEdit()->setSelection( 0, filename.length() - extension.length() - 1 );
2668 int lastDot = filename.lastIndexOf(
'.' );
2670 locationEdit->lineEdit()->setSelection( 0, lastDot );
2681 delete d->bottomCustomWidget;
2682 d->bottomCustomWidget = widget;
2687 d->bottomCustomWidget->setParent(
this );
2689 d->vbox->addWidget( d->bottomCustomWidget );
2697 setTabOrder(d->cancelButton, d->bottomCustomWidget);
2698 setTabOrder(d->bottomCustomWidget, d->urlNavigator);
2703 delete d->labeledCustomWidget;
2704 d->labeledCustomWidget = widget;
2707 label->setAlignment(Qt::AlignRight);
2708 d->lafBox->addWidget(label, 2, 0, Qt::AlignVCenter);
2709 d->lafBox->addWidget(widget, 2, 1, Qt::AlignVCenter);
2721 bool *enable =
static_cast<bool*
>(data);
2722 d->confirmOverwrite = *enable;
2726 bool *show =
static_cast<bool*
>(data);
2727 d->setInlinePreviewShown(*show);
2742 d->readConfig(group);
2745 QString KFileWidgetPrivate::locationEditCurrentText()
const
2747 return QDir::fromNativeSeparators(locationEdit->currentText());
2750 KUrl KFileWidgetPrivate::mostLocalUrl(
const KUrl &url)
2764 if (!path.isEmpty()) {
2773 void KFileWidgetPrivate::setInlinePreviewShown(
bool show)
2775 ops->setInlinePreviewShown(show);
2779 #include "kfilewidget.moc"
KUrl url(const QModelIndex &index) const
QString i18n(const char *text)
QString readPathEntry(const QString &pKey, const QString &aDefault) const
void adjustPath(AdjustPathOption trailing)
QString directory(const DirectoryOptions &options=IgnoreTrailingSlash) const
static QString relativeUrl(const KUrl &base_url, const KUrl &url)
void writePathEntry(const QString &pKey, const QString &path, WriteConfigFlags pFlags=Normal)
static QString relativePath(const QString &base_dir, const QString &path, bool *isParent=0)
virtual void setCompletionObject(KCompletion *compObj, bool hsig=true)
Generates previews for files of an item view.
static KIconLoader * global()
static bool isKnownProtocol(const KUrl &url)
static QString desktopPath()
KAction * copy(const QObject *recvr, const char *slot, QObject *parent)
QString label(StandardShortcut id)
static void information(QWidget *parent, const QString &text, const QString &caption=QString(), const QString &dontShowAgainName=QString(), Options options=Notify)
This class allows to display a KFilePlacesModel.
Note: Ported to new KBookmarkMenu, but untested.
const char * name(StandardAction id)
void add(const QString &fileClass, const QString &directory)
static bool synchronousRun(Job *job, QWidget *window, QByteArray *data=0, KUrl *finalURL=0, QMap< QString, QString > *metaData=0)
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const
Get the children model index for the given row and column.
StatJob * stat(const KUrl &url, JobFlags flags=DefaultFlags)
QAction * addAction(const QString &name, QAction *action)
QString toLocalFile(AdjustPathOption trailing=LeaveTrailingSlash) const
QPixmap pixmapForUrl(const KUrl &_url, mode_t _mode=0, KIconLoader::Group _group=KIconLoader::Desktop, int _force_size=0, int _state=0, QString *_path=0)
static void add(const KUrl &url)
StatJob * mostLocalUrl(const KUrl &url, JobFlags flags=DefaultFlags)
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
bool isParentOf(const KUrl &u) const
int rowCount(const QModelIndex &parent=QModelIndex()) const
Get the number of rows for a model index.
QString i18nc(const char *ctxt, const char *text)
void setUrls(const QStringList &urls)
KSharedConfigPtr config()
void setPath(const QString &path)
void addPath(const QString &txt)
TsConfig readConfig(const QString &fname)
void addDefaultUrl(const KUrl &url, const QString &text=QString())
bool authorizeUrlAction(const QString &action, const KUrl &baseUrl, const KUrl &destUrl)
This widget works as a network transparent filebrowser.
static void sorry(QWidget *parent, const QString &text, const QString &caption=QString(), Options options=Notify)
QString buildErrorString(int errorCode, const QString &errorText)
virtual void setCompletionMode(KGlobalSettings::Completion mode)
QString pathOrUrl() const
QPixmap loadMimeTypeIcon(const QString &iconName, KIconLoader::Group group, int size=0, int state=KIconLoader::DefaultState, const QStringList &overlays=QStringList(), QString *path_store=0) const
QString stringValue(uint field) const
KAction * home(const QObject *recvr, const char *slot, QObject *parent)
void setAutoDeleteCompletionObject(bool autoDelete)
QString path(AdjustPathOption trailing=LeaveTrailingSlash) const
void removeAction(QAction *action)
QStringList types(Mode mode=Writing)
void setShortcut(const KShortcut &shortcut, ShortcutTypes type=ShortcutTypes(ActiveShortcut|DefaultShortcut))
static QString documentPath()
bool isPreviewShown() const
QString removeAcceleratorMarker(const QString &label) const
void setFileName(const QString &_txt)
QString dir(const QString &fileClass)
QString fileName(const DirectoryOptions &options=IgnoreTrailingSlash) const
void setUrl(const KUrl &url)
void addAssociatedWidget(QWidget *widget)
QString tildeExpand(const QString &path)
static QDebug kWarning(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
QAction * action(int index) const
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
Widget that allows to navigate through the paths of an URL.
static bool supportsListing(const KUrl &url)
static Completion completionMode()
const UDSEntry & statResult() const
static int maximumItems()
T readEntry(const QString &key, const T &aDefault) const
bool equals(const KUrl &u, const EqualsOptions &options=0) const
const KShortcut & completion()
static int warningContinueCancel(QWidget *parent, const QString &text, const QString &caption=QString(), const KGuiItem &buttonContinue=KStandardGuiItem::cont(), const KGuiItem &buttonCancel=KStandardGuiItem::cancel(), const QString &dontAskAgainName=QString(), Options options=Notify)
QString prettyUrl(AdjustPathOption trailing=LeaveTrailingSlash) const
KUrl::List urlList() const
static void error(QWidget *parent, const QString &text, const QString &caption=QString(), Options options=Notify)
QStringList list(const QString &fileClass)
This class is a list view model.