13 #include <QToolButton>
21 static const std::array<const char *, 21>
folder_fav = {
"17 16 4 1",
"# c #000000",
". c None",
"a c #ffff98",
"b c #cc0000",
".................",
".................",
22 "...#####.........",
"..#aaaaa#........",
".###############.",
".#aaaaaaaaaaaaa#.",
".#aaaa##a##aaaa#.",
".#aaa#bb#bb#aaa#.",
".#aaa#bbbbb#aaa#.",
23 ".#aaa#bbbbb#aaa#.",
".#aaaa#bbb#aaaa#.",
".#aaaaa#b#aaaaa#.",
".#aaaaaa#aaaaaa#.",
".#aaaaaaaaaaaaa#.",
".###############.",
"................."};
30 QString s = fi.absoluteFilePath() + QString::fromLatin1(
"/preview.tif");
31 if (!QFile::exists(s))
32 s = fi.absoluteFilePath() + QString::fromLatin1(
"/preview.png");
33 if (!QFile::exists(s))
34 _pm->setPixmap(QPixmap());
40 _pm->setPixmap(QPixmap());
41 }
else if (fi.exists()) {
42 QImage img(fi.absoluteFilePath());
44 _pm->setPixmap(QPixmap::fromImage(img.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
46 _pm->setPixmap(QPixmap());
48 _pm->setPixmap(QPixmap());
49 _pm->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
55 _pm =
new QLabel(
this);
56 _pm->setFrameStyle(QFrame::StyledPanel);
57 _pm->setBackgroundRole(QPalette::Base);
58 _pm->setAutoFillBackground(
true);
59 auto *layout =
new QVBoxLayout;
60 layout->setSpacing(0);
62 layout->addWidget(
_pm);
73 QList<QLineEdit *> lineedits = findChildren<QLineEdit *>();
74 if (!lineedits.empty())
77 _nameEdit->disconnect(SIGNAL(returnPressed()));
82 QList<QPushButton *> myWidgets = findChildren<QPushButton *>();
83 for (
auto *
const item : myWidgets) {
84 if (item->text().contains(tr(
"Open")))
90 connect(
this, SIGNAL(currentChanged(
const QString &)),
this, SLOT(
selChanged(
const QString &)));
102 if (fileMode() != QFileDialog::DirectoryOnly)
111 if (!d.exists(entry)) {
112 if (d.mkdir(entry)) {
114 setDirectory(
_temppath + QLatin1Char(
'/') + entry);
119 QTimer::singleShot(200,
this, SLOT(
resetDir()));
131 if (str.contains(QLatin1Char(
'/'))) {
137 int slashcount = str.count(QLatin1Char(
'/'));
140 for (
int i = 0; i < slashcount; i++) {
141 QString section = str.section(QLatin1Char(
'/'), 0, i);
145 if (foundDir.length()) {
146 setDirectory(foundDir);
147 QString remainder = str.right(str.length() - (foundDir.length() + 1));
154 }
else if (fileMode() == QFileDialog::DirectoryOnly)
162 auto *layout = findChild<QGridLayout *>(QString::fromLatin1(
"gridLayout"));
168 std::string favlocation = getenv(
"HOME");
169 favlocation +=
"/paint3d/favorites/";
171 QString dirpath = QString::fromStdString(favlocation);
178 if (!(linkdir.isEmpty() || linkname.isEmpty())) {
179 if (!QFile::exists(dirpath + linkname))
180 QFile::link(linkdir, dirpath + linkname);
186 auto *fav =
new QToolButton(
this);
187 fav->setFixedSize(18, 18);
188 fav->setIcon(folderFav);
189 fav->setToolTip(tr(
"Favorites"));
191 layout->addWidget(fav, 0, 3);
207 QStringList h = history();
208 for (
const auto &it : paths) {
227 if (filter.isEmpty())
228 return QStringList();
230 int i = filter.indexOf(QString::fromLatin1(
";;"), 0);
231 QString sep = QString::fromLatin1(
";;");
233 if (filter.indexOf(QString::fromLatin1(
"\n"), 0) != -1) {
234 sep = QString::fromLatin1(
"\n");
235 i = filter.indexOf(sep, 0);
239 return filter.split(sep);
244 if (!filter.isEmpty()) {
246 setNameFilters(filters);
249 if (!startWith.isEmpty())
250 setDirectory(startWith);
251 if (!caption.isNull())
252 setWindowTitle(caption);
253 setFileMode(QFileDialog::ExistingFile);
254 setAcceptMode(QFileDialog::AcceptOpen);
255 selectFile(QString());
258 if (exec() == QDialog::Accepted) {
259 result = selectedFiles().first();
269 if (!filter.isEmpty()) {
271 setNameFilters(filters);
274 if (!startWith.isEmpty())
275 setDirectory(startWith);
276 if (!caption.isNull())
277 setWindowTitle(caption);
278 setFileMode(QFileDialog::ExistingFiles);
279 setAcceptMode(QFileDialog::AcceptOpen);
280 selectFile(QString());
284 if (exec() == QDialog::Accepted) {
285 lst = selectedFiles();
295 if (!filter.isEmpty()) {
297 setNameFilters(filters);
300 if (!startWith.isEmpty())
301 setDirectory(startWith);
302 if (!caption.isNull())
303 setWindowTitle(caption);
304 setFileMode(QFileDialog::DirectoryOnly);
305 selectFile(QString());
308 if (exec() == QDialog::Accepted) {
309 result = selectedFiles().first();
328 if (!filter.isEmpty()) {
330 setNameFilters(filters);
333 if (!startWith.isEmpty())
334 setDirectory(startWith);
335 if (!caption.isNull())
336 setWindowTitle(caption);
337 setFileMode(QFileDialog::AnyFile);
338 setAcceptMode(QFileDialog::AcceptSave);
339 selectFile(QString());
342 if (exec() == QDialog::Accepted) {
343 result = selectedFiles().first();
353 auto *layout = findChild<QGridLayout *>(QString::fromLatin1(
"gridLayout"));
358 _pw->setFixedWidth(160);
359 _pw->setMinimumHeight(160);
360 layout->addWidget(
_pw, 1, 3);
371 auto *layout = findChild<QGridLayout *>(QString::fromLatin1(
"gridLayout"));
375 _cb =
new QCheckBox(s,
this);
376 _cb->setChecked(
false);
378 layout->addWidget(
_cb, 4,
_combo ? 2 : 0);
385 return _cb->isChecked();
402 auto *layout = findChild<QGridLayout *>(QString::fromLatin1(
"gridLayout"));
408 _combo =
new QComboBox(
this);
409 _combo->setEditable(
true);
410 _combo->setFixedWidth(160);
411 for (
const auto &it : sl)
414 int rownum = layout->rowCount();
415 layout->addWidget(
_combo, rownum, 1);
449 QList<QUrl> urls = sidebarUrls();
450 QUrl url = QUrl::fromLocalFile(s);
451 if (url.isValid() && QFile::exists(s)) {
453 setSidebarUrls(urls);
static QStringList makeFiltersList(const QString &filter)
static const std::array< const char *, 21 > folder_fav
QString _workingDirectory
QStringList getOpenFileNames(const QString &caption=QString(), const QString &startWith=QString(), const QString &filter=QString())
QString getExistingDirectory(const QString &caption=QString(), const QString &startWith=QString(), const QString &filter=QString())
QString getExistingOrNewDirectory(const QString &caption=QString(), const QString &startWith=QString(), const QString &filter=QString())
void addLookInEntries(const QStringList &paths)
void addFavoritesButton(const QString &dirname, const QString &linkname, const QString &linkdir)
void setButtonName(const QString &str)
void addComboBox(const QString &s, const QStringList &sl)
void addSidebarShortcut(const QString &s)
void restoreLookInEntries()
void addCheckBox(const QString &s)
QString getSaveFileName(const QString &caption=QString(), const QString &startWith=QString(), const QString &filter=QString())
std::atomic< bool > _createDir
ExprFileDialog(QWidget *parent=nullptr)
QString getOpenFileName(const QString &caption=QString(), const QString &startWith=QString(), const QString &filter=QString())
void selChanged(const QString &path)
double max(double x, double y)
double min(double x, double y)