21 #include <QMimeDatabase> 23 #include <QPushButton> 26 #include <QStringList> 30 #include <KConfigGroup> 32 #include <KFileFilterCombo> 33 #include <KSharedConfig> 42 const QString &startDir,
44 const QString &filter,
47 const QString last_ext
51 m_file_widget(QUrl::fromUserInput(startDir), this),
56 const bool saving = (mode ==
SaveFile);
68 connect(button, SIGNAL(clicked()),
this, SLOT(reject()));
95 QString special_prefix =
_(
"kfiledialog:///");
96 if (startDir.startsWith(special_prefix)) {
101 QString section = startDir;
102 section = section.remove(0, special_prefix.length());
103 if (section.contains(
_(
"/")))
104 section = section.left(section.indexOf(
_(
"/")));
105 section.prepend(
_(
"KwaveFileDialog-"));
111 QString file_filter = filter;
112 if (!file_filter.length() &&
m_last_ext.length()) {
114 qDebug(
"guessed filter for '%s': '%s",
121 if (QFileInfo(file.path()).exists() || saving)
123 if (!file.isDir() && (file.exists() || saving))
129 if (file_filter.length()) {
130 QStringList filter_list = file_filter.split(
_(
"\n"));
131 QStringList name_filters;
133 QString best_pattern;
134 foreach (
const QString &filter_item, filter_list) {
135 QString f(filter_item);
137 if (f.contains(
_(
"|"))) {
138 int i = f.indexOf(
_(
"|"));
142 if (!f.length())
continue;
147 QStringList extensions = p.split(
_(
" "));
149 if (!best_filter.length() ||
150 (p.length() <= best_pattern.length())) {
151 best_filter = filter_item;
157 name_filters.append(filter_item);
159 if (best_filter.length()) {
160 name_filters.removeAll(best_filter);
161 name_filters.prepend(best_filter);
164 m_file_widget.setFilter(name_filters.join(QChar::fromLatin1(
'\n')));
171 if (!section.length())
return;
172 KConfigGroup cfg = KSharedConfig::openConfig()->group(section);
175 QUrl last_path = cfg.readEntry(
"last_url",
m_last_url);
176 if (!last_path.isEmpty()) {
179 last_path = last_path.adjusted(QUrl::RemoveFilename);
180 m_last_url = QUrl::fromUserInput(last_path.path() + file_name);
183 m_last_url = QUrl::fromUserInput(cfg.readEntry(
"last_url",
190 cfg = KSharedConfig::openConfig()->group(
"FileDialog");
191 int w = cfg.readEntry(
"dialog_width", sizeHint().width());
192 int h = cfg.readEntry(
"dialog_height", sizeHint().height());
193 if (w < minimumWidth()) w = sizeHint().width();
194 if (h < minimumHeight()) w = sizeHint().height();
205 if (!file_name.length())
return;
211 QFileInfo file(file_name);
212 QString extension = file.suffix();
213 if (extension.length()) {
219 if (pattern.contains(
_(
"|"))) {
220 int i = pattern.indexOf(
_(
"|"));
221 pattern = pattern.left(i);
224 foreach (
const QString &mask, pattern.split(
_(
" "))) {
225 QRegExp regex(mask, Qt::CaseSensitive, QRegExp::Wildcard);
226 if (regex.indexIn(file_name) >= 0) {
233 KConfigGroup cfg = KSharedConfig::openConfig()->group(
m_config_group);
239 cfg = KSharedConfig::openConfig()->group(
"FileDialog");
240 cfg.writeEntry(
"dialog_width", width());
241 cfg.writeEntry(
"dialog_height", height());
248 QStringList ext_list =
m_file_widget.currentFilter().split(
_(
" "));
249 return *(ext_list.begin());
292 if (pattern.contains(
_(
" "))) {
293 QStringList patterns = pattern.split(
_(
" "));
294 foreach (
const QString &p, patterns) {
296 if (f.length())
return f;
302 QString filters = (mode ==
SaveFile) ?
305 foreach (
const QString &filter, filters.split(
_(
" "))) {
307 if (p.contains(
_(
"|"))) {
308 int i = p.indexOf(
_(
"|"));
311 foreach (
const QString &mask, p.split(
_(
" "))) {
312 if (mask == pattern) {
322 QList<QMimeType> mime_types = db.mimeTypesForFileName(pattern);
323 if (!mime_types.isEmpty()) {
324 foreach (
const QMimeType &m, mime_types) {
325 if (m.isValid() && !m.isDefault()) {
326 QString filter_string =
327 m.globPatterns().join(
_(
" ")) +
_(
"|") +
331 return filter_string;
static QString encodingFilter()
KUrlComboBox * locationEdit() const
FileDialog(const QString &startDir, OperationMode mode, const QString &filter, QWidget *parent, const QUrl last_url=QUrl(), const QString last_ext=QString())
void selectUrl(const QUrl &url)
void setCustomWidget(QWidget *widget)
QString selectedExtension()
KFileWidget m_file_widget
void setDirectory(const QString &directory)
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
QString guessFilterFromFileExt(const QString &pattern, OperationMode mode)
void loadConfig(const QString §ion)
static QString decodingFilter()
void filterChanged(const QString &filter)
virtual void accept() Q_DECL_OVERRIDE