23 #include "filepickwidget.h"
25 #include "datapaths.h"
26 #include "filefilter.h"
27 #include "ini/inisection.h"
28 #include "ini/inivariable.h"
29 #include "pathfinder/pathfind.h"
30 #include "serverapi/gamefile.h"
31 #include "templatedpathresolver.h"
32 #include "ui_filepickwidget.h"
33 #include <QFileDialog>
37 DClass<FilePickWidget> :
public Ui::FilePickWidget
42 QSharedPointer< ::FilePickWidget::NeighbourStrategy> neighbourStrategy;
51 d->neighbourStrategy = QSharedPointer<NeighbourStrategy>(
new NeighbourStrategy);
52 d->lblWarning->hide();
53 d->btnBrowse->setIcon(style()->standardIcon(QStyle::SP_DirOpenIcon));
55 this->connect(d->lePath, SIGNAL(editingFinished()), SLOT(emitPathChangedIfChanged()));
56 this->connect(d->lePath, SIGNAL(textEdited(QString)), SLOT(trackEdit()));
59 FilePickWidget::~FilePickWidget()
63 void FilePickWidget::browsePath()
65 QString filepath = QFileDialog::getOpenFileName(
this,
66 tr(
"Doomseeker - choose executable file"),
67 d->lePath->text(), FileFilter::executableFilesFilter());
68 if (!filepath.isEmpty())
70 d->lePath->setText(gDefaultDataPaths->portablizePath(filepath));
75 void FilePickWidget::findPath()
78 if (currentFile.isFile() && d->file.isSameFile(currentFile.fileName()))
80 QString path = PathFind::findGameFile(d->neighbourStrategy->neighbours(), d->file);
83 d->lePath->setText(gDefaultDataPaths->portablizePath(path));
90 bool FilePickWidget::isEmpty()
const
92 return path().trimmed().isEmpty();
95 void FilePickWidget::setFile(
const GameFile &file)
98 d->lblTitle->setText(tr(
"Path to %1 executable:").arg(file.
niceName()));
99 d->btnFind->setVisible(canSearch());
102 void FilePickWidget::setNeighbourStrategy(QSharedPointer<NeighbourStrategy> strategy)
104 d->neighbourStrategy = strategy;
107 void FilePickWidget::setTitleVisible(
bool visible)
109 d->lblTitle->setVisible(visible);
112 void FilePickWidget::setPath(
const QString &path)
114 d->lePath->setText(path);
117 QString FilePickWidget::path()
const
119 return d->lePath->text().trimmed();
122 bool FilePickWidget::canSearch()
const
124 return !d->file.fileName().isEmpty();
127 void FilePickWidget::emitPathChangedIfChanged()
136 void FilePickWidget::trackEdit()
141 void FilePickWidget::load(
const IniSection &cfg)
143 d->lePath->setText(cfg[d->file.configName()].valueString());
148 cfg[d->file.configName()].
setValue(d->lePath->text());
151 bool FilePickWidget::validate()
156 if (!path().isEmpty())
158 if (error.isEmpty() && !fileInfo.exists())
159 error = tr(
"File doesn't exist.");
161 if (error.isEmpty() && fileInfo.isDir() && !fileInfo.isBundle())
162 error = tr(
"This is a directory.");
165 d->lblWarning->setVisible(!error.isEmpty());
166 d->lblWarning->setToolTip(error);
167 return error.isEmpty();