📄 kfiledialog.cpp
字号:
int choice= bookmarksMenu->exec(); QEvent ev(Event_Leave); QMouseEvent mev (Event_MouseButtonRelease, QCursor::pos(), LeftButton, LeftButton); QApplication::sendEvent(btn, &ev); QApplication::sendEvent(btn, &mev); if (choice == 0) { // add current to bookmarks addToBookmarks(); } else if (choice > 0) { // Select a bookmark (this will not work if there are submenus) int i= 1; fprintf(stderr, "choice was %d\n", choice); KFileBookmark *root= bookmarks->getRoot(); for (KFileBookmark *b= root->getChildren().first(); b != 0; b= root->getChildren().next()) { if (i == choice) { fprintf(stderr, "opening bookmark to %s\n", b->getURL()); setDir(b->getURL(), true); } i++; } } delete bookmarksMenu; bookmarksMenu= 0; }}void KFileBaseDialog::dirActivated(KFileInfo *item){ QString tmp = dir->url(); if (tmp.right(1)[0] != '/') tmp += "/"; QString tmps = item->fileName(); KURL::encodeURL(tmps); tmp += tmps; tmp += "/"; debugC("dirActivated %s", tmp.data()); setDir(tmp, true);}void KFileBaseDialog::fileActivated(KFileInfo *item){ debugC("fileAct"); if (acceptUrls) filename_ = dir->url(); else filename_ = dir->path(); if (filename_.right(1)[0] != '/') filename_ += "/"; QString tmps= item->fileName(); KURL::encodeURL(tmps); filename_ += tmps; emit fileSelected(filename_); if (!finished) QApplication::restoreOverrideCursor(); finished = false; accept();}void KFileBaseDialog::fileHighlighted(KFileInfo *item){ // remove the predefined selection selection = 0; const char *highlighted = item->fileName(); if (acceptUrls) filename_ = dir->url(); else filename_ = dir->path(); if (filename_.right(1)[0] != '/') filename_ += "/"; QString tmp = highlighted; KURL::encodeURL(tmp); filename_ += tmp; locationEdit->setText(filename_); emit fileHighlighted(highlighted);}KFileInfoContents *KFileDialog::initFileList( QWidget *parent ){ bool mixDirsAndFiles = kapp->getConfig()->readBoolEntry("MixDirsAndFiles", DefaultMixDirsAndFiles); bool showDetails = (kapp->getConfig()->readEntry("ViewStyle", DefaultViewStyle) == "DetailView"); bool useSingleClick = kapp->getConfig()->readBoolEntry("SingleClick", DefaultSingleClick); QDir::SortSpec sort = static_cast<QDir::SortSpec>(dir->sorting() & QDir::SortByMask); if (kapp->getConfig()->readBoolEntry("KeepDirsFirst", DefaultKeepDirsFirst)) sort = static_cast<QDir::SortSpec>(sort | QDir::DirsFirst); dir->setSorting(sort); if (!mixDirsAndFiles) return new KCombiView(KCombiView::DirList, showDetails ? KCombiView::DetailView : KCombiView::SimpleView, useSingleClick, dir->sorting(), parent, "_combi"); else if (showDetails) return new KFileDetailList(useSingleClick, dir->sorting(), parent, "_details"); else return new KFileSimpleView(useSingleClick, dir->sorting(), parent, "_simple");}void KFileBaseDialog::setSelection(const char *name){ debugC("setSelection %s", name); if (!name) { selection = 0; return; } KURL u(name); if (u.isMalformed()) // perhaps we have a relative path!? u = dir->url() + name; if (u.isMalformed()) { // if it still is warning("%s is not a correct argument for setSelection!", name); return; } if (!u.isLocalFile()) { // no way to detect, if we have a directory!? filename_ = u.url(); return; } KFileInfo i(u.path()); if (i.isDir()) setDir(u.path(), true); else { QString filename = u.path(); int sep = filename.findRev('/'); if (sep >= 0) { // there is a / in it setDir(filename.left(sep), true); filename = filename.mid(sep+1, filename.length() - sep); debugC("filename %s", filename.data()); selection = filename; } if (acceptUrls) filename_ = dir->url() + filename; else filename_ = dir->path() + filename; locationEdit->setText(filename_); }}void KFileBaseDialog::completion() // SLOT{ QString base; if (acceptUrls) base = dir->url().copy(); else base = dir->path(); // if someone uses completion, he doesn't like the current // selection selection = 0; QString text = locationEdit->currentText(); if ( KURL(text).isMalformed() ) return; // invalid entry in location if (text.left(base.length()) == base) { QString complete = fileList->findCompletion(text.right(text.length() - base.length())); if (!complete.isNull()) { debugC("Complete %s", complete.data()); if ( complete != "../" ) { locationEdit->setText(base + complete); filename_ = base + complete; } } else { // warning("no complete"); } } else { // we changed into a parent directory -> go there first int l = text.length() - 1; while (!text.isEmpty() && text[l] != '/') l--; setDir(text.left(l), true); locationEdit->setText(text); filename_ = text; // this recursion is very dangerous. // I'm not *that* sure, that it works in every case // dg: added a little timeout: time to reread the new directory QTimer::singleShot( 500, this, SLOT(completion()) ); }}void KFileBaseDialog::resizeEvent(QResizeEvent *){ toolbar->updateRects(true); toolbar->setMinimumHeight(toolbar->height());}/** * Returns the url for the selected filename */QString KFileBaseDialog::selectedFileURL(){ if (filename_.isNull()) return 0; else { KURL u = filename_.data(); return u.url(); // let KURL check the rest }}QString KFileDialog::getOpenFileURL(const char *url, const char *filter, QWidget *parent, const char *name){ QString retval; KFileDialog *dlg = new KFileDialog(url, filter, parent, name, true, true); dlg->setCaption(i18n("Open")); if (dlg->exec() == QDialog::Accepted) retval = dlg->selectedFileURL(); else retval = 0; delete dlg; if (!retval.isNull()) debugC("getOpenFileURL: returning %s", retval.data()); return retval;}KDirDialog::KDirDialog(const char *url, QWidget *parent, const char *name) : KFileBaseDialog(url, 0, parent, name, true, false){ init();}KFileInfoContents *KDirDialog::initFileList( QWidget *parent ){ bool useSingleClick = kapp->getConfig()->readBoolEntry("SingleClick", DefaultSingleClick); return new KDirListBox( useSingleClick, dir->sorting(), parent, "_dirs" );}QString KFileBaseDialog::getDirectory(const char *url, QWidget *parent, const char *name){ QString retval; KDirDialog *dlg = new KDirDialog(url, parent, name); dlg->setCaption(i18n("Choose Directory")); if (dlg->exec() == QDialog::Accepted) retval = dlg->selectedFile(); else retval= 0; delete dlg; if (!retval.isNull()) debugC("getDirectory: returning %s", retval.data()); return retval;}QString KFileDialog::getSaveFileURL(const char *url, const char *filter, QWidget *parent, const char *name){ QString retval; KFileDialog *dlg= new KFileDialog(url, filter, parent, name, true, true); dlg->setCaption(i18n("Save")); if (dlg->exec() == QDialog::Accepted) retval= dlg->selectedFileURL(); delete dlg; return retval;}/** * Returns the selected filesQStrList KFileDialog::selectedFileURLList(){ // TODO}QStrList KFileDialog::getOpenFileURLList(const char *, const char *, QWidget *, const char *){ // TODO}QStrList KFileDialog::getSaveFileURLList(const char *, const char *, QWidget *, const char *){ // TODO}*//** * If the argument is true the dialog will accept multiple selections. */void KFileBaseDialog::setMultiSelection(bool){ warning("WARNING: Multi Select is not supported yet"); // fileList->setMultiSelection(isMulti);}void KFileBaseDialog::updateStatusLine(){ QString lStatusText; QString lFileText, lDirText; if ( fileList->numDirs() == 1 ) lDirText = i18n("directory"); else lDirText = i18n("directories"); if ( fileList->numFiles() == 1 ) lFileText = i18n("file"); else lFileText = i18n("files"); lStatusText.sprintf(i18n("%d %s and %d %s"), fileList->numDirs(), lDirText.data(), fileList->numFiles(), lFileText.data()); myStatusLine->setText(lStatusText);}void KDirDialog::updateStatusLine(){ QString lDirText; if ( fileList->numDirs() == 1 ) lDirText = i18n("one directory"); else lDirText.sprintf(i18n("%d directories"), fileList->numDirs()); myStatusLine->setText(lDirText);}KFilePreviewDialog::KFilePreviewDialog(const char *dirName, const char *filter, QWidget *parent, const char *name, bool modal, bool acceptURLs ) : KFileBaseDialog(dirName, filter, parent, name, modal, acceptURLs){ init();}KFileInfoContents *KFilePreviewDialog::initFileList( QWidget *parent ){ bool useSingleClick = kapp->getConfig()->readBoolEntry("SingleClick", DefaultSingleClick); QDir::SortSpec sort = static_cast<QDir::SortSpec>(dir->sorting() & QDir::SortByMask); if (kapp->getConfig()->readBoolEntry("KeepDirsFirst", DefaultKeepDirsFirst)) sort = static_cast<QDir::SortSpec>(sort | QDir::DirsFirst); dir->setSorting(sort); return new KFilePreview( dir, useSingleClick, dir->sorting(), parent, "_prev" );}QString KFilePreviewDialog::getOpenFileName(const char *dir, const char *filter, QWidget *parent, const char *name){ QString filename; KFilePreviewDialog *dlg= new KFilePreviewDialog(dir, filter, parent, name, true, false); dlg->setCaption(i18n("Open")); if (dlg->exec() == QDialog::Accepted) filename = dlg->selectedFile(); delete dlg; return filename;}QString KFilePreviewDialog::getSaveFileName(const char *dir, const char *filter, QWidget *parent, const char *name){ KFilePreviewDialog *dlg= new KFilePreviewDialog(dir, filter, parent, name, true, false); dlg->setCaption(i18n("Save As")); QString filename; if (dlg->exec() == QDialog::Accepted) filename= dlg->selectedFile(); delete dlg; return filename;}QString KFilePreviewDialog::getOpenFileURL(const char *url, const char *filter, QWidget *parent, const char *name){ QString retval; KFilePreviewDialog *dlg= new KFilePreviewDialog(url, filter, parent, name, true, true); dlg->setCaption(i18n("Open")); if (dlg->exec() == QDialog::Accepted) retval = dlg->selectedFileURL(); else retval= 0; delete dlg; if (!retval.isNull()) debugC("getOpenFileURL: returning %s", retval.data()); return retval;}QString KFilePreviewDialog::getSaveFileURL(const char *url, const char *filter, QWidget *parent, const char *name){ QString retval; KFilePreviewDialog *dlg= new KFilePreviewDialog(url, filter, parent, name, true, true); dlg->setCaption(i18n("Save")); if (dlg->exec() == QDialog::Accepted) retval= dlg->selectedFileURL(); delete dlg; return retval;}bool KFilePreviewDialog::getShowFilter(){ return kapp->getConfig()->readBoolEntry("ShowFilter", DefaultShowFilter);}void KFilePreviewDialog::registerPreviewModule( const char * format, PreviewHandler readPreview, PreviewType inType){ KPreview::registerPreviewModule( format, readPreview, inType );}#include "kfiledialog.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -