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