From 41aef8414a0c01883a431c0353369ba1651b5cd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= <peterix@gmail.com>
Date: Mon, 5 Feb 2018 02:01:12 +0100
Subject: NOISSUE add an 'open folder' button to the icon dialog

---
 api/gui/icons/IconList.cpp               |  5 +++++
 api/gui/icons/IconList.h                 |  1 +
 application/dialogs/IconPickerDialog.cpp | 18 +++++++++++++-----
 application/dialogs/IconPickerDialog.h   |  1 +
 4 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/api/gui/icons/IconList.cpp b/api/gui/icons/IconList.cpp
index 139fe5cf..d23ae4d6 100644
--- a/api/gui/icons/IconList.cpp
+++ b/api/gui/icons/IconList.cpp
@@ -401,4 +401,9 @@ int IconList::getIconIndex(const QString &key) const
 	return -1;
 }
 
+QString IconList::getDirectory() const
+{
+	return m_dir.absolutePath();
+}
+
 //#include "IconList.moc"
diff --git a/api/gui/icons/IconList.h b/api/gui/icons/IconList.h
index 41ec0bdd..56bdba28 100644
--- a/api/gui/icons/IconList.h
+++ b/api/gui/icons/IconList.h
@@ -39,6 +39,7 @@ public:
 
 	QIcon getIcon(const QString &key) const;
 	int getIconIndex(const QString &key) const;
+	QString getDirectory() const;
 
 	virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
 	virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
diff --git a/application/dialogs/IconPickerDialog.cpp b/application/dialogs/IconPickerDialog.cpp
index 5dabaee4..89f3ca4d 100644
--- a/application/dialogs/IconPickerDialog.cpp
+++ b/application/dialogs/IconPickerDialog.cpp
@@ -25,6 +25,7 @@
 #include "groupview/InstanceDelegate.h"
 
 #include "icons/IconList.h"
+#include <DesktopServices.h>
 
 IconPickerDialog::IconPickerDialog(QWidget *parent)
 	: QDialog(parent), ui(new Ui::IconPickerDialog)
@@ -59,19 +60,21 @@ IconPickerDialog::IconPickerDialog(QWidget *parent)
 
 	contentsWidget->setModel(MMC->icons().get());
 
+	// NOTE: ResetRole forces the button to be on the left, while the OK/Cancel ones are on the right. We win.
 	auto buttonAdd = ui->buttonBox->addButton(tr("Add Icon"), QDialogButtonBox::ResetRole);
-	auto buttonRemove =
-		ui->buttonBox->addButton(tr("Remove Icon"), QDialogButtonBox::ResetRole);
+	auto buttonRemove = ui->buttonBox->addButton(tr("Remove Icon"), QDialogButtonBox::ResetRole);
 
 	connect(buttonAdd, SIGNAL(clicked(bool)), SLOT(addNewIcon()));
 	connect(buttonRemove, SIGNAL(clicked(bool)), SLOT(removeSelectedIcon()));
 
 	connect(contentsWidget, SIGNAL(doubleClicked(QModelIndex)), SLOT(activated(QModelIndex)));
 
-	connect(contentsWidget->selectionModel(),
-			SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
-			SLOT(selectionChanged(QItemSelection, QItemSelection)));
+	connect(contentsWidget->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SLOT(selectionChanged(QItemSelection, QItemSelection)));
+
+	auto buttonFolder = ui->buttonBox->addButton(tr("Open Folder"), QDialogButtonBox::ResetRole);
+	connect(buttonFolder, &QPushButton::clicked, this, &IconPickerDialog::openFolder);
 }
+
 bool IconPickerDialog::eventFilter(QObject *obj, QEvent *evt)
 {
 	if (obj != ui->iconView)
@@ -152,3 +155,8 @@ IconPickerDialog::~IconPickerDialog()
 {
 	delete ui;
 }
+
+void IconPickerDialog::openFolder()
+{
+	DesktopServices::openDirectory(MMC->icons()->getDirectory(), true);
+}
diff --git a/application/dialogs/IconPickerDialog.h b/application/dialogs/IconPickerDialog.h
index a2a657ed..e4598324 100644
--- a/application/dialogs/IconPickerDialog.h
+++ b/application/dialogs/IconPickerDialog.h
@@ -45,4 +45,5 @@ slots:
 	void delayed_scroll(QModelIndex);
 	void addNewIcon();
 	void removeSelectedIcon();
+	void openFolder();
 };
-- 
cgit v1.2.3