From 16dea9d490eb8f0720703e6d0f629b4d90e2c067 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Sat, 4 Jun 2011 14:46:07 +0200 Subject: [PATCH] GUI: show hidden (dot) files in file/dir selection dialogs. Closes issue #62 --- src/qtgui/advsearch_w.cpp | 3 +-- src/qtgui/confgui/confgui.cpp | 11 +++++----- src/qtgui/confgui/confguiindex.cpp | 1 - src/qtgui/confgui/main.cpp | 35 ------------------------------ src/qtgui/guiutils.cpp | 32 +++++++++++++++++++++++++-- src/qtgui/guiutils.h | 4 ++++ src/qtgui/uiprefs_w.cpp | 9 +++----- 7 files changed, 43 insertions(+), 52 deletions(-) diff --git a/src/qtgui/advsearch_w.cpp b/src/qtgui/advsearch_w.cpp index b6a6f912..01a50bc4 100644 --- a/src/qtgui/advsearch_w.cpp +++ b/src/qtgui/advsearch_w.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include @@ -374,6 +373,6 @@ void AdvSearch::runSearch() void AdvSearch::browsePB_clicked() { - QString dir = QFileDialog::getExistingDirectory(); + QString dir = myGetFileName(true); subtreeCMB->setEditText(dir); } diff --git a/src/qtgui/confgui/confgui.cpp b/src/qtgui/confgui/confgui.cpp index 20fefbaf..4cc4c71e 100644 --- a/src/qtgui/confgui/confgui.cpp +++ b/src/qtgui/confgui/confgui.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -43,6 +42,7 @@ #include "smallut.h" #include "debuglog.h" #include "rcldb.h" +#include "guiutils.h" #include using std::list; @@ -267,10 +267,9 @@ void ConfParamFNW::loadValue() void ConfParamFNW::showBrowserDialog() { - QString s = m_isdir ? - QFileDialog::getExistingDirectory() : QFileDialog::getSaveFileName(); - if (!s.isEmpty()) - m_le->setText(s); + QString s = myGetFileName(m_isdir); + if (!s.isEmpty()) + m_le->setText(s); } class SmallerListWidget: public QListWidget @@ -400,7 +399,7 @@ void ConfParamSLW::deleteSelected() // "Add entry" dialog for a file name list void ConfParamDNLW::showInputDialog() { - QString s = QFileDialog::getExistingDirectory(); + QString s = myGetFileName(true); if (!s.isEmpty()) { QListitems = m_lb->findItems(s, Qt::MatchFixedString|Qt::MatchCaseSensitive); diff --git a/src/qtgui/confgui/confguiindex.cpp b/src/qtgui/confgui/confguiindex.cpp index a4f4f30b..75381f3c 100644 --- a/src/qtgui/confgui/confguiindex.cpp +++ b/src/qtgui/confgui/confguiindex.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include diff --git a/src/qtgui/confgui/main.cpp b/src/qtgui/confgui/main.cpp index d82842ff..e62efbc9 100644 --- a/src/qtgui/confgui/main.cpp +++ b/src/qtgui/confgui/main.cpp @@ -26,41 +26,7 @@ using namespace std; #include #include - -#if QT_VERSION < 0x040000 -#define QFRAME_INCLUDE -#define QFILEDIALOG_INCLUDE -#define QLISTBOX_INCLUDE -#include -#define QFILEDIALOG QFileDialog -#define QFRAME QFrame -#define QHBOXLAYOUT QHBoxLayout -#define QLISTBOX QListBox -#define QLISTBOXITEM QListBoxItem -#define QVBOXLAYOUT QVBoxLayout -#define QTABDIALOG QTabDialog - -#else // Qt4 -> - -#include -#include -#include #include -#define QFRAME_INCLUDE - -#include -#define QFILEDIALOG_INCLUDE -#define QLISTBOX_INCLUDE - -#define QFILEDIALOG Q3FileDialog -#define QFRAME Q3Frame -#define QHBOXLAYOUT Q3HBoxLayout -#define QLISTBOX Q3ListBox -#define QLISTBOXITEM Q3ListBoxItem -#define QVBOXLAYOUT Q3VBoxLayout -#define QTABDIALOG Q3TabDialog -#endif // QT 3/4 - #include #include #include @@ -68,7 +34,6 @@ using namespace std; #include #include #include -#include QFRAME_INCLUDE #include #include diff --git a/src/qtgui/guiutils.cpp b/src/qtgui/guiutils.cpp index 846a779f..f745ad01 100644 --- a/src/qtgui/guiutils.cpp +++ b/src/qtgui/guiutils.cpp @@ -27,8 +27,9 @@ #include "base64.h" #include "transcode.h" -#include -#include +#include +#include +#include RclDynConf *g_dynconf; @@ -324,3 +325,30 @@ void rwSettings(bool writing) prefs.asearchSubdirHist.push_front(QString::fromUtf8(it->c_str())); } } + +QString myGetFileName(bool isdir, QString caption) +{ + LOGDEB1(("myFileDialog: isdir %d\n", isdir)); + QFileDialog dialog(0, caption); + + if (isdir) { + dialog.setFileMode(QFileDialog::Directory); + dialog.setOptions(QFileDialog::ShowDirsOnly); + } else { + dialog.setFileMode(QFileDialog::AnyFile); + dialog.setAcceptMode(QFileDialog::AcceptSave); + } + dialog.setViewMode(QFileDialog::List); + QFlags flags = QDir::NoDotAndDotDot | QDir::Hidden; + if (isdir) + flags |= QDir::Dirs; + else + flags |= QDir::Dirs | QDir::Files; + dialog.setFilter(flags); + + + if (dialog.exec() == QDialog::Accepted) { + return dialog.selectedFiles().value(0); + } + return QString(); +} diff --git a/src/qtgui/guiutils.h b/src/qtgui/guiutils.h index fc9f73cf..9ee418d0 100644 --- a/src/qtgui/guiutils.h +++ b/src/qtgui/guiutils.h @@ -131,4 +131,8 @@ extern void rwSettings(bool dowrite); extern QString g_stringAllStem, g_stringNoStem; +/** Specialized version of the qt file dialog. Can't use getOpenFile() + etc. cause they hide dot files... */ +extern QString myGetFileName(bool isdir, QString caption = QString()); + #endif /* _GUIUTILS_H_INCLUDED_ */ diff --git a/src/qtgui/uiprefs_w.cpp b/src/qtgui/uiprefs_w.cpp index dc1df591..a86d6840 100644 --- a/src/qtgui/uiprefs_w.cpp +++ b/src/qtgui/uiprefs_w.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -355,14 +354,12 @@ void UIPrefsDialog::delExtraDbPB_clicked() */ void UIPrefsDialog::addExtraDbPB_clicked() { - static QString lastdir; + QString input = myGetFileName(true, + tr("Select xapian index directory " + "(ie: /home/buddy/.recoll/xapiandb)")); - QString input = QFileDialog::getExistingDirectory(this, - tr("Select xapian index directory (ie: /home/buddy/.recoll/xapiandb)"), - lastdir); if (input.isEmpty()) return; - lastdir = input; string dbdir = (const char *)input.toLocal8Bit(); LOGDEB(("ExtraDbDial: got: [%s]\n", dbdir.c_str()));